016008bb8cb09519d495998233fa15ebfe3f75d0
[NeonServV5.git] / cmd_neonserv_delban.c
1
2 /*
3 * argv[0]    nick|*auth|*!*@mask
4 */
5
6 static CMD_BIND(neonserv_cmd_delban) {
7     char hostmask_buffer[NICKLEN+USERLEN+HOSTLEN+3];
8     char *mask = make_banmask(argv[0], hostmask_buffer);
9     int matching_bans = 0;
10     MYSQL_RES *res;
11     MYSQL_ROW row;
12     //check if the provided mask is already banned by another ban
13     char *ban = getBanAffectingMask(chan, mask);
14     if(ban != NULL) {
15         reply(getTextBot(), user, "NS_DELBAN_BANNED_BY", mask, ban);
16         return;
17     }
18     //check if the provided mask affects any existing bans
19     char nameBuf[20];
20     printf_mysql_query("SELECT `ban_mask`, `ban_id`, `ban_timeout` FROM `bans` WHERE `ban_channel` = '%d'", chan->channel_id);
21     res = mysql_use();
22     while ((row = mysql_fetch_row(res)) != NULL) {
23         if(!match(mask, row[0])) {
24             //remove the ban
25             if(strcmp(row[2], "0")) {
26                 sprintf(nameBuf, "ban_%s", row[1]);
27                 timeq_del_name(nameBuf);
28             }
29             printf_mysql_query("DELETE FROM `bans` WHERE `ban_id` = '%s'", row[1]);
30             matching_bans++;
31         }
32     }
33     if(matching_bans) {
34         putsock(client, "MODE %s -b %s", chan->name, mask);
35         reply(getTextBot(), user, "NS_DELBAN_DONE", mask, chan->name);
36         logEvent(event);
37     } else
38         reply(getTextBot(), user, "NS_DELBAN_FAIL", mask);
39 }