X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmodules%2FNeonServ.mod%2Fevent_neonserv_mode.c;h=b6d06527e1ca04fdd4ad9470355d726158515159;hb=139ae91def764e66b5d2024723700101cc2a379e;hp=3cf109b5a778b1188d579e5eab0e70bf5ed96510;hpb=4d078d69cd2308cc835d7d8f1117e9b18ec37b61;p=NeonServV5.git diff --git a/src/modules/NeonServ.mod/event_neonserv_mode.c b/src/modules/NeonServ.mod/event_neonserv_mode.c index 3cf109b..b6d0652 100644 --- a/src/modules/NeonServ.mod/event_neonserv_mode.c +++ b/src/modules/NeonServ.mod/event_neonserv_mode.c @@ -1,4 +1,4 @@ -/* event_neonserv_mode.c - NeonServ v5.5 +/* event_neonserv_mode.c - NeonServ v5.6 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -38,7 +38,7 @@ static void neonserv_event_mode(struct UserNode *user, struct ChanNode *chan, ch if(argc) temp_argv = malloc(argc*sizeof(*temp_argv)); if (!cache || (argc && !temp_argv)) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } if(argc) { @@ -201,16 +201,30 @@ static void neonserv_event_mode_async1(struct ClientSocket *client, struct UserN reply(textclient, user, "NS_MODE_CANBAN", chan->name); db_canban = -1; } + char hostmask_buffer[NICKLEN+USERLEN+HOSTLEN+3]; + char usermask[NICKLEN+USERLEN+HOSTLEN+3]; + int match_count = 0; if(db_canban == -1) { - if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed)) + if(!neonserv_cmd_mode_botwar_detect(client, user, chan, &botwar_detect_executed)) { + if(!add) { + //check if a user just removed a bot ban + for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) { + cuser = chanuser->user; + sprintf(usermask, "%s!%s@%s", cuser->nick, cuser->ident, cuser->host); + if(!match(carg, usermask) && isBot(cuser)) { + skip = 1; + break; + } + } + if(skip) + break; + } modeBufferSet(modeBuf, !add, modes[i], carg); + } if(uaccess < db_getop) deop_user = 1; break; } - char hostmask_buffer[NICKLEN+USERLEN+HOSTLEN+3]; - char usermask[NICKLEN+USERLEN+HOSTLEN+3]; - int match_count = 0; carg = make_banmask(carg, hostmask_buffer); if(add) { for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {