[srvx-commits] CVS: services/src chanserv.c,1.384,1.385
Brought to you by:
entrope
|
From: Entrope <en...@us...> - 2003-10-08 04:46:18
|
Update of /cvsroot/srvx/services/src
In directory sc8-pr-cvs1:/tmp/cvs-serv15966/src
Modified Files:
chanserv.c
Log Message:
check permanent ban lists when a user changes nick
Index: chanserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/chanserv.c,v
retrieving revision 1.384
retrieving revision 1.385
diff -C2 -r1.384 -r1.385
*** chanserv.c 8 Oct 2003 03:04:46 -0000 1.384
--- chanserv.c 8 Oct 2003 04:46:14 -0000 1.385
***************
*** 6406,6409 ****
--- 6406,6449 ----
}
+ static void
+ handle_nick_change(struct userNode *user, UNUSED_ARG(const char *old_nick))
+ {
+ struct chanNode *channel;
+ struct banData *bData;
+ unsigned int ii, jj;
+ char kick_reason[MAXLEN];
+
+ for(ii = 0; ii < user->channels.used; ++ii)
+ {
+ channel = user->channels.list[ii]->channel;
+ /* Need not check for bans if they're opped or voiced. */
+ if(user->channels.list[ii]->modes & (MODE_CHANOP|MODE_VOICE))
+ continue;
+ /* Need not check for bans unless channel registration is active. */
+ if(!channel->channel_info || IsSuspended(channel->channel_info))
+ continue;
+ /* Look for a matching ban already on the channel. */
+ for(jj = 0; jj < channel->banlist.used; ++jj)
+ if(user_matches_glob(user, channel->banlist.list[jj]->ban, 1))
+ break;
+ /* Need not act if we found one. */
+ if(jj < channel->banlist.used)
+ continue;
+ /* Look for a matching ban in this channel. */
+ for(bData = channel->channel_info->bans; bData; bData = bData->next)
+ {
+ const char *ban = bData->mask;
+ if(!user_matches_glob(user, ban, 1))
+ continue;
+ /* note: &bData->mask == bData->mask, thus we have ban */
+ AddChannelBan(1, (const char**)&ban, channel, chanserv, now, 1);
+ sprintf(kick_reason, CSMSG_KICK_FORMAT, bData->reason, bData->owner);
+ KickChannelUser(user, channel, chanserv, kick_reason);
+ ii--; /* make sure we don't skip a channel */
+ break; /* we don't need to check any more bans in the channel */
+ }
+ }
+ }
+
static void handle_rename(struct handle_info *handle, const char *old_handle)
{
***************
*** 7165,7168 ****
--- 7205,7209 ----
reg_topic_func(handle_topic);
reg_mode_change_func(handle_mode);
+ reg_nick_change_func(handle_nick_change);
reg_auth_func(handle_auth);
|