projects
/
umurmur.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update copyright year.
[umurmur.git]
/
src
/
channel.c
diff --git
a/src/channel.c
b/src/channel.c
index 4de6490329e73b578c8fa54772fe6053cee9487f..d58d3e3d174b255d93a8afdab13b914543b43798 100644
(file)
--- a/
src/channel.c
+++ b/
src/channel.c
@@
-1,5
+1,5
@@
-/* Copyright (C) 2009-201
0
, Martin Johansson <martin@fatbob.nu>
- Copyright (C) 2005-201
0
, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-201
2
, Martin Johansson <martin@fatbob.nu>
+ Copyright (C) 2005-201
2
, Thorvald Natvig <thorvald@natvig.com>
All rights reserved.
All rights reserved.
@@
-29,6
+29,8
@@
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <limits.h>
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
#include "log.h"
#include "list.h"
#include "client.h"
#include "log.h"
#include "list.h"
#include "client.h"
@@
-159,9
+161,12
@@
void Chan_init()
channel_t *ch, *ch_itr = NULL;
ch = Chan_createChannel(chdesc.name, chdesc.description);
ch->noenter = chdesc.noenter;
channel_t *ch, *ch_itr = NULL;
ch = Chan_createChannel(chdesc.name, chdesc.description);
ch->noenter = chdesc.noenter;
-
+ if (chdesc.password) {
+ Log_info("Setting password on channel '%s'", ch->name);
+ ch->password = strdup(chdesc.password);
+ }
if (strcmp(defaultChannelName, chdesc.name) == 0) {
if (strcmp(defaultChannelName, chdesc.name) == 0) {
- Log_info("Setting default channel
%s
", ch->name);
+ Log_info("Setting default channel
'%s'
", ch->name);
defaultChan = ch;
}
defaultChan = ch;
}
@@
-170,7
+175,7
@@
void Chan_init()
} while (ch_itr != NULL && strcmp(ch_itr->name, chdesc.parent) != 0);
if (ch_itr == NULL)
} while (ch_itr != NULL && strcmp(ch_itr->name, chdesc.parent) != 0);
if (ch_itr == NULL)
- Log_fatal("Error in channel configuration: parent
not found"
);
+ Log_fatal("Error in channel configuration: parent
'%s' not found", chdesc.parent
);
else {
Chan_addChannel(ch_itr, ch);
Log_info("Adding channel '%s' parent '%s'", ch->name, chdesc.parent);
else {
Chan_addChannel(ch_itr, ch);
Log_info("Adding channel '%s' parent '%s'", ch->name, chdesc.parent);
@@
-182,6
+187,8
@@
void Chan_init()
if (defaultChan->noenter)
Log_fatal("Error in channel configuration: default channel is marked as noenter");
if (defaultChan->noenter)
Log_fatal("Error in channel configuration: default channel is marked as noenter");
+ if (defaultChan->password)
+ Log_fatal("Error in channel configuration: default channel has a password");
/* Channel links */
for (i = 0; ; i++) {
/* Channel links */
for (i = 0; ; i++) {
@@
-212,6
+219,7
@@
void Chan_init()
ch_dst = ch_itr;
list_add_tail(&ch_dst->link_node, &ch_src->channel_links);
ch_dst = ch_itr;
list_add_tail(&ch_dst->link_node, &ch_src->channel_links);
+ ch_src->linkcount++;
Log_info("Adding channel link '%s' -> '%s'", ch_src->name, ch_dst->name);
}
}
Log_info("Adding channel link '%s' -> '%s'", ch_src->name, ch_dst->name);
}
}
@@
-227,6
+235,8
@@
void Chan_free()
free(ch->name);
if (ch->desc)
free(ch->desc);
free(ch->name);
if (ch->desc)
free(ch->desc);
+ if (ch->password)
+ free(ch->password);
free(ch);
}
}
free(ch);
}
}
@@
-273,9
+283,12
@@
int Chan_userLeave(client_t *client)
int Chan_userJoin(channel_t *ch, client_t *client)
{
int leaving_id;
int Chan_userJoin(channel_t *ch, client_t *client)
{
int leaving_id;
+
+ /* Do nothing if user already is in this channel */
+ if ((channel_t *)client->channel == ch)
+ return 0;
Log_debug("Add user %s to channel %s", client->username, ch->name);
Log_debug("Add user %s to channel %s", client->username, ch->name);
-
/* Only allowed in one channel at a time */
leaving_id = Chan_userLeave(client);
list_add_tail(&client->chan_node, &ch->clients);
/* Only allowed in one channel at a time */
leaving_id = Chan_userLeave(client);
list_add_tail(&client->chan_node, &ch->clients);
@@
-297,7
+310,7
@@
int Chan_userJoin_id(int channelid, client_t *client)
return Chan_userJoin(ch_itr, client);
}
return Chan_userJoin(ch_itr, client);
}
-
bool_t Chan_userJoin_id_test(int channelid
)
+
channelJoinResult_t Chan_userJoin_id_test(int channelid, client_t *client
)
{
channel_t *ch_itr = NULL;
do {
{
channel_t *ch_itr = NULL;
do {
@@
-305,12
+318,13
@@
bool_t Chan_userJoin_id_test(int channelid)
} while (ch_itr != NULL && ch_itr->id != channelid);
if (ch_itr == NULL) {
Log_warn("Channel id %d not found - ignoring.", channelid);
} while (ch_itr != NULL && ch_itr->id != channelid);
if (ch_itr == NULL) {
Log_warn("Channel id %d not found - ignoring.", channelid);
- return
false
;
+ return
CHJOIN_NOTFOUND
;
}
}
- if (ch_itr->noenter)
- return false;
- else
- return true;
+ else if (ch_itr->noenter)
+ return CHJOIN_NOENTER;
+ else if (ch_itr->password && !Client_token_match(client, ch_itr->password))
+ return CHJOIN_WRONGPW;
+ else return CHJOIN_OK;
}
#if 0
}
#if 0