fixed access check & added cmd_up
authorpk910 <philipp@zoelle1.de>
Mon, 22 Aug 2011 23:17:55 +0000 (01:17 +0200)
committerpk910 <philipp@zoelle1.de>
Mon, 22 Aug 2011 23:22:42 +0000 (01:22 +0200)
bot_NeonServ.c
cmd_neonserv_adduser.c
cmd_neonserv_clvl.c
cmd_neonserv_deluser.c
cmd_neonserv_suspend.c
cmd_neonserv_unsuspend.c
cmd_neonserv_up.c [new file with mode: 0644]

index 647b3e7aecf9232a2052e38f675e832dc11ae5ff..674d116eb16b193c33e960fc649c909bb2fc5dbf 100644 (file)
@@ -26,6 +26,8 @@ static const struct default_language_entry msgtab[] = {
     {"NS_ADDUSER_DONE", "Added %s to the %s user list with access %d."},
     {"NS_NOT_ON_USERLIST", "%s lacks access to \002%s\002."},
     {"NS_NOT_ON_USERLIST_YOU", "You lack access to \002%s\002."},
+    {"NS_NOT_ON_CHANNEL", "%s isn't currently in \002%s\002."},
+    {"NS_NOT_ON_CHANNEL_YOU", "You aren't currently in \002%s\002."},
     {"NS_DELUSER_DONE", "Deleted %s (with access %d) from the %s user list."},
     {"NS_ACCESS_OUTRANKED", "You cannot give users access greater than or equal to your own."},
     {"NS_USER_OUTRANKED", "\002%s\002 outranks you (command has no effect)."},
@@ -68,6 +70,8 @@ static const struct default_language_entry msgtab[] = {
     {"NS_MYACCESS_HEADER_INFO", "Info"},
     {"NS_MYACCESS_COUNT", "%s has access in \002%d\002 channel(s) and is owner of \002%d\002 channel(s)."},
     {"NS_MYACCESS_COUNT_MATCH", "%s has access in \002%d\002 channel(s) and is owner of \002%d\002 channel(s) (\002%d\002 channels matching your request)."},
+    {"NS_UP_ALREADY_OP", "You are already opped in \002%s\002."},
+    {"NS_UP_ALREADY_VOICE", "You are already voiced in \002%s\002."},
     {NULL, NULL}
 };
 
@@ -85,7 +89,7 @@ INCLUDE ALL CMD's HERE
 //#include "cmd_neonserv_trim.c"
 //#include "cmd_neonserv_giveownership.c"
 #include "cmd_neonserv_users.c"
-//#include "cmd_neonserv_up.c"
+#include "cmd_neonserv_up.c"
 //#include "cmd_neonserv_down.c"
 //#include "cmd_neonserv_upall.c"
 //#include "cmd_neonserv_downall.c"
@@ -226,6 +230,7 @@ void init_NeonServ() {
     register_command(BOTID, "unsuspend",    neonserv_cmd_unsuspend, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     register_command(BOTID, "delme",        neonserv_cmd_delme,     0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     register_command(BOTID, "myaccess",     neonserv_cmd_myaccess,  0, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+    register_command(BOTID, "up",           neonserv_cmd_up,        0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
     
     start_bots();
     bind_bot_ready(neonserv_bot_ready);
index f68f0418668d179721d2feb6c04a8da57fbb32b6..a0b5e7ea59f12b190a365736b76959e01c7496e8 100644 (file)
@@ -20,7 +20,10 @@ static CMD_BIND(neonserv_cmd_adduser) {
     MYSQL_RES *res;
     MYSQL_ROW row;
     check_mysql();
-    checkChannelAccess(user, chan, "channel_canadd", 1, 0);
+    if(!checkChannelAccess(user, chan, "channel_canadd", 1, 0)) {
+        reply(getTextBot(), user, "NS_ACCESS_DENIED");
+        return;
+    }
     caccess = atoi(argv[1]);
     if(caccess <= 0 || caccess > 500) {
         reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
index 9d4e7e44c92b62b24c02c75606044c9e1e265ecd..d0ce7a4eac9bfdb5a777206f108628b3d5c9a88d 100644 (file)
@@ -17,7 +17,10 @@ struct neonserv_cmd_clvl_cache {
 static CMD_BIND(neonserv_cmd_clvl) {
     int caccess;
     check_mysql();
-    checkChannelAccess(user, chan, "channel_canclvl", 1, 0);
+    if(!checkChannelAccess(user, chan, "channel_canclvl", 1, 0)) {
+        reply(getTextBot(), user, "NS_ACCESS_DENIED");
+        return;
+    }
     caccess = atoi(argv[1]);
     if(caccess <= 0 || caccess > 500) {
         reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
index 79e76eac334b1a6d4d29e75b65ccf147b60ea788..7eda8e481e19281d172766d9f7d7f011a71ca314 100644 (file)
@@ -14,7 +14,10 @@ struct neonserv_cmd_deluser_cache {
 
 static CMD_BIND(neonserv_cmd_deluser) {
     check_mysql();
-    checkChannelAccess(user, chan, "channel_candel", 1, 0);
+    if(!checkChannelAccess(user, chan, "channel_candel", 1, 0)) {
+        reply(getTextBot(), user, "NS_ACCESS_DENIED");
+        return;
+    }
     if(argv[0][0] == '*') {
         //we've got an auth
         argv[0]++;
index 37d205e9bc11f1a1e1b7711e73ba5dcab65ffecc..8c991ad145f8a2cf83b2cfe8dd958b06a06aa55d 100644 (file)
@@ -14,7 +14,10 @@ struct neonserv_cmd_suspend_cache {
 
 static CMD_BIND(neonserv_cmd_suspend) {
     check_mysql();
-    checkChannelAccess(user, chan, "channel_cansuspend", 1, 0);
+    if(!checkChannelAccess(user, chan, "channel_cansuspend", 1, 0)) {
+        reply(getTextBot(), user, "NS_ACCESS_DENIED");
+        return;
+    }
     if(argv[0][0] == '*') {
         //we've got an auth
         argv[0]++;
index 2e26bc77f5ae620bd464464c7ba993b109899adf..3c5a0c1572b4fe3e9aaa7a340d04a8e5fc5e4d44 100644 (file)
@@ -14,7 +14,10 @@ struct neonserv_cmd_unsuspend_cache {
 
 static CMD_BIND(neonserv_cmd_unsuspend) {
     check_mysql();
-    checkChannelAccess(user, chan, "channel_cansuspend", 1, 0);
+    if(!checkChannelAccess(user, chan, "channel_cansuspend", 1, 0)) {
+        reply(getTextBot(), user, "NS_ACCESS_DENIED");
+        return;
+    }
     if(argv[0][0] == '*') {
         //we've got an auth
         argv[0]++;
diff --git a/cmd_neonserv_up.c b/cmd_neonserv_up.c
new file mode 100644 (file)
index 0000000..5141496
--- /dev/null
@@ -0,0 +1,43 @@
+
+/*
+* no arguments
+*/
+
+static CMD_BIND(neonserv_cmd_up) {
+    struct ChanUser *chanuser = getChanUser(user, chan);
+    if(!chanuser) {
+        reply(getTextBot(), user, "NS_NOT_ON_CHANNEL_YOU", chan->name);
+        return;
+    }
+    check_mysql();
+    loadChannelSettings(chan);
+    MYSQL_RES *res, *default_res;
+    MYSQL_ROW row, default_row;
+    int chan_getop, chan_getvoice, caccess;
+    printf_mysql_query("SELECT `channel_getop`, `channel_getvoice` FROM `channels` WHERE `channel_id` = '%d'", chan->channel_id);
+    res = mysql_use();
+    if ((row = mysql_fetch_row(res)) == NULL) return;
+    if(!row[0] || !row[1]) {
+        printf_mysql_query("SELECT `channel_getop`, `channel_getvoice` FROM `channels` WHERE `channel_name` = 'defaults'");
+        default_res = mysql_use();
+        if ((default_row = mysql_fetch_row(default_res)) == NULL) return;
+        chan_getop = (row[0] ? atoi(row[0]) : atoi(default_row[0]));
+        chan_getvoice = (row[1] ? atoi(row[1]) : atoi(default_row[1]));
+    } else {
+        chan_getop = atoi(row[0]);
+        chan_getvoice = atoi(row[1]);
+    }
+    caccess = getChannelAccess(user, chan, 1);
+    if(caccess >= chan_getop) {
+        if(!(chanuser->flags & CHANUSERFLAG_OPPED)) {
+            putsock(client, "MODE %s +o %s", chan->name, user->nick);
+        } else
+            reply(getTextBot(), user, "NS_UP_ALREADY_OP", chan->name);
+    } else if(caccess >= chan_getvoice) {
+        if(!(chanuser->flags & CHANUSERFLAG_OPPED)) {
+            putsock(client, "MODE %s +v %s", chan->name, user->nick);
+        } else
+            reply(getTextBot(), user, "NS_UP_ALREADY_VOICE", chan->name);
+    } else
+        reply(getTextBot(), user, "NS_NOT_ON_USERLIST_YOU", chan->name);
+}