tried to reorder the program structure and build process
[NeonServV5.git] / src / cmd_neonserv_delban.c
diff --git a/src/cmd_neonserv_delban.c b/src/cmd_neonserv_delban.c
new file mode 100644 (file)
index 0000000..ac8b696
--- /dev/null
@@ -0,0 +1,41 @@
+
+#include "cmd_neonserv.h"
+
+/*
+* argv[0]    nick|*auth|*!*@mask
+*/
+
+CMD_BIND(neonserv_cmd_delban) {
+    char hostmask_buffer[NICKLEN+USERLEN+HOSTLEN+3];
+    char *mask = make_banmask(argv[0], hostmask_buffer);
+    int matching_bans = 0;
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    //check if the provided mask is already banned by another ban
+    char *ban = getBanAffectingMask(chan, mask);
+    if(ban != NULL) {
+        reply(getTextBot(), user, "NS_DELBAN_BANNED_BY", mask, ban);
+        return;
+    }
+    //check if the provided mask affects any existing bans
+    char nameBuf[20];
+    printf_mysql_query("SELECT `ban_mask`, `ban_id`, `ban_timeout` FROM `bans` WHERE `ban_channel` = '%d'", chan->channel_id);
+    res = mysql_use();
+    while ((row = mysql_fetch_row(res)) != NULL) {
+        if(!match(mask, row[0])) {
+            //remove the ban
+            if(strcmp(row[2], "0")) {
+                sprintf(nameBuf, "ban_%s", row[1]);
+                timeq_del_name(nameBuf);
+            }
+            printf_mysql_query("DELETE FROM `bans` WHERE `ban_id` = '%s'", row[1]);
+            matching_bans++;
+        }
+    }
+    if(matching_bans) {
+        putsock(client, "MODE %s -b %s", chan->name, mask);
+        reply(getTextBot(), user, "NS_DELBAN_DONE", mask, chan->name);
+        logEvent(event);
+    } else
+        reply(getTextBot(), user, "NS_DELBAN_FAIL", mask);
+}