[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); |