added user registered event, tidied up helper functions and added automatic auth...
authorpk910 <philipp@zoelle1.de>
Thu, 27 Oct 2011 14:43:41 +0000 (16:43 +0200)
committerpk910 <philipp@zoelle1.de>
Fri, 28 Oct 2011 00:41:46 +0000 (02:41 +0200)
26 files changed:
src/DBHelper.c
src/DBHelper.h
src/IRCEvents.c
src/IRCEvents.h
src/IRCParser.c
src/cmd_neonserv_adduser.c
src/cmd_neonserv_clvl.c
src/cmd_neonserv_deluser.c
src/cmd_neonserv_deopall.c
src/cmd_neonserv_devoiceall.c
src/cmd_neonserv_extscript.c
src/cmd_neonserv_mdeluser.c
src/cmd_neonserv_mode.c
src/cmd_neonserv_set.c
src/cmd_neonserv_suspend.c
src/cmd_neonserv_topic.c
src/cmd_neonserv_trim.c
src/cmd_neonserv_unsuspend.c
src/cmd_neonserv_up.c
src/cmd_neonserv_wipeinfo.c
src/cmd_neonspam_set.c
src/event_neonserv_mode.c
src/event_neonspam_chanmsg.c
src/event_neonspam_join.c
src/main.c
src/modcmd.c

index fe48bc4a54487bd5075fcfcbc483fc206b099b1b..a55b8c677de27c7ec0f7204df4c9c624b2703172 100644 (file)
@@ -22,6 +22,8 @@
 #include "mysqlConn.h"
 #include "lang.h"
 #include "tools.h"
+#include "IRCEvents.h"
+#include "HandleInfoHandler.h"
 
 void _loadUserSettings(struct UserNode *user) {
     MYSQL_RES *res;
@@ -45,7 +47,7 @@ int isGodMode(struct UserNode *user) {
     return (user->flags & USERFLAG_GOD_MODE);
 }
 
-int getChannelAccess(struct UserNode *user, struct ChanNode *chan, int override) {
+int getChannelAccess(struct UserNode *user, struct ChanNode *chan) {
     if(!(user->flags & USERFLAG_ISAUTHED)) return 0;
     loadChannelSettings(chan);
     if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) return 0;
@@ -55,10 +57,7 @@ int getChannelAccess(struct UserNode *user, struct ChanNode *chan, int override)
     printf_mysql_query("SELECT `user_id`, `user_access`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
     res = mysql_use();
     if ((row = mysql_fetch_row(res)) != NULL) {
-        if(strcmp(row[2], "0") && override) 
-            caccess = atoi(row[1]);
         printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%s' AND `chanuser_cid` = '%d'", row[0], chan->channel_id);
-        //
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
             int cflags = atoi(row[1]);
@@ -79,7 +78,7 @@ char *getChanDefault(char *channel_setting) {
     return row[0];
 }
 
-int checkChannelAccess(struct UserNode *user, struct ChanNode *chan, char *channel_setting, int allow_override, int allow_501) {
+int checkChannelAccess(struct UserNode *user, struct ChanNode *chan, char *channel_setting, int allow_501) {
     loadChannelSettings(chan);
     if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) return 0;
     if((user->flags & USERFLAG_ISIRCOP)) return 1;
@@ -145,11 +144,11 @@ int isUserProtected(struct ChanNode *chan, struct UserNode *victim, struct UserN
     if(protection == 3) return 0;
     
     /* Don't protect if the victim isn't added to the channel, unless we are to protect non-users also. */
-    int victim_access = getChannelAccess(victim, chan, 0);
+    int victim_access = getChannelAccess(victim, chan);
     if (!victim_access && protection != 0) return 0;
     
     /* Protect if the aggressor isn't a user because at this point, the aggressor can only be less than or equal to the victim. */
-    int issuer_access = getChannelAccess(issuer, chan, 0);
+    int issuer_access = getChannelAccess(issuer, chan);
     if (!issuer_access) return 1;
     
     /* If the aggressor was a user, then the victim can't be helped. */
@@ -223,3 +222,59 @@ int renameAccount(char *oldauth, char *newauth) {
     }
     return 0;
 }
+
+static AUTHLOOKUP_CALLBACK(event_user_registered_auth_lookup);
+
+struct event_user_registered_cache {
+    struct UserNode *new_user;
+    char *oldauth;
+};
+
+static int event_user_registered(struct UserNode *old_user, struct UserNode *new_user) {
+    //check if there is a fakehost on both sides...
+    if(!isFakeHost(old_user->host) || !isFakeHost(new_user->host)) return 0;
+    //extract user names
+    char oldauth[AUTHLEN], newauth[AUTHLEN];
+    char *p;
+    if((p = strstr(old_user->host, "."))) {
+        *p = '\0';
+        strcpy(oldauth, old_user->host);
+        *p = '.';
+    }
+    if((p = strstr(new_user->host, "."))) {
+        *p = '\0';
+        strcpy(newauth, new_user->host);
+        *p = '.';
+    }
+    //check if we know this user; then check the new auth
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(oldauth));
+    res = mysql_use();
+    if ((row = mysql_fetch_row(res)) != NULL) {
+        struct event_user_registered_cache *cache = malloc(sizeof(*cache));
+        if (!cache) {
+            perror("malloc() failed");
+            return 1;
+        }
+        cache->new_user = new_user;
+        cache->oldauth = strdup(oldauth);
+        lookup_authname(newauth, event_user_registered_auth_lookup, cache);
+    }
+    return 1;
+}
+
+static AUTHLOOKUP_CALLBACK(event_user_registered_auth_lookup) {
+    struct event_user_registered_cache *cache = data;
+    if(exists) {
+        renameAccount(cache->oldauth, auth);
+        strcpy(cache->new_user->auth, auth);
+        cache->new_user->flags |= USERFLAG_ISAUTHED;
+    }
+    free(cache->oldauth);
+}
+
+void init_DBHelper() {
+    bind_registered(event_user_registered);
+}
+
index 2ccca54083d211d72dd7d3899bc871e2aecfe3e0..d914f6f7750ffc24907ce3ae3d32bddb2efc0385 100644 (file)
@@ -29,8 +29,8 @@ void _loadUserSettings(struct UserNode* user);
 #define loadUserSettings(USER) if((USER->flags & USERFLAG_ISAUTHED) && !(USER->flags & USERFLAG_LOADED_SETTINGS)) _loadUserSettings(USER)
 int isGodMode(struct UserNode *user);
 char *getChanDefault(char *channel_setting);
-int getChannelAccess(struct UserNode *user, struct ChanNode *chan, int override);
-int checkChannelAccess(struct UserNode *user, struct ChanNode *chan, char *channel_setting, int allow_override, int allow_501);
+int getChannelAccess(struct UserNode *user, struct ChanNode *chan);
+int checkChannelAccess(struct UserNode *user, struct ChanNode *chan, char *channel_setting, int allow_501);
 void _loadChannelSettings(struct ChanNode *chan);
 #define loadChannelSettings(CHAN) if(!(CHAN->flags & CHANFLAG_REQUESTED_CHANINFO)) _loadChannelSettings(CHAN)
 int isUserProtected(struct ChanNode *chan, struct UserNode *victim, struct UserNode *issuer);
@@ -38,4 +38,6 @@ int isUserProtected(struct ChanNode *chan, struct UserNode *victim, struct UserN
 char *getBanAffectingMask(struct ChanNode *chan, char *mask); //returns bans that match a given mask   eg. *!*@ab*  if you pass  *!*@abcdefg.*
 
 int renameAccount(char *oldauth, char *newauth);
+
+void init_DBHelper();
 #endif
\ No newline at end of file
index 8176ef961af89fa5198820aa6c443435c1f3893a..a8239a9c420012c91cdfcd4a537c49c1bc285e9b 100644 (file)
@@ -44,8 +44,9 @@ static void **binds;
 #define BIND_TYPE_INVITE     13
 #define BIND_TYPE_RAW        14
 #define BIND_TYPE_BOT_READY  15
+#define BIND_TYPE_REGISTERED 16
 
-#define TOTAL_BIND_TYPES     16
+#define TOTAL_BIND_TYPES     17
 
 void init_bind() {
     binds = calloc(TOTAL_BIND_TYPES, sizeof(*binds));
@@ -189,3 +190,17 @@ FUNC_EVENT(raw, raw_func_t, BIND_TYPE_RAW, (struct ClientSocket *client, char *f
 FUNC_BIND(bot_ready, bot_ready_func_t, BIND_TYPE_BOT_READY)
 FUNC_UNBIND(bot_ready, bot_ready_func_t, BIND_TYPE_BOT_READY)
 FUNC_EVENT(bot_ready, bot_ready_func_t, BIND_TYPE_BOT_READY, (struct ClientSocket *client), (client))
+
+FUNC_BIND(registered, registered_func_t, BIND_TYPE_REGISTERED)
+FUNC_UNBIND(registered, registered_func_t, BIND_TYPE_REGISTERED)
+int event_registered(struct UserNode *old_user, struct UserNode *new_user) {
+    struct binding *cbind;
+    int ret = 0;
+    pre_event(BIND_TYPE_REGISTERED);
+    for(cbind = binds[BIND_TYPE_REGISTERED]; cbind; cbind = cbind->next) {
+        registered_func_t *func = cbind->func;
+        ret |= func(old_user, new_user);
+    }
+    post_event(BIND_TYPE_REGISTERED);
+    return ret;
+}
index 7acae20f53d4a6068f6384a614176f54e4e1170a..8d5ff5a37c8cc6256eb0ff8c6577bc56983eef04 100644 (file)
@@ -107,6 +107,9 @@ int bind_bot_ready(bot_ready_func_t *func);
 void unbind_bot_ready(bot_ready_func_t *func);
 int event_bot_ready(struct ClientSocket *client);
 
-
+typedef int registered_func_t(struct UserNode *old_user, struct UserNode *new_user);
+int bind_registered(registered_func_t *func);
+void unbind_registered(registered_func_t *func);
+int event_registered(struct UserNode *old_user, struct UserNode *new_user);
 
 #endif
\ No newline at end of file
index 5d17786d4b2878e5bbc110ee87a2500026b6b583..d4ca05eabf9326c1225e51bf740e75c89c9732e5 100644 (file)
@@ -28,6 +28,7 @@
 #include "ModeNode.h"
 
 struct irc_cmd *irc_commands = NULL;
+static struct UserNode *registering_users = NULL;
 
 static void parse_line(struct ClientSocket *client, char *line);
 static void register_irc_function(char *command, irc_cmd_t *func);
@@ -152,6 +153,25 @@ static IRC_CMD(raw_join) {
     if(user == NULL) {
         user = addUserMask(from);
     }
+    struct UserNode *registering, *last_registering = NULL;
+    int noEvent = 0;
+    for(registering = registering_users; registering; registering = registering->next) {
+        if(!strcmp(registering->nick, user->nick)) {
+            noEvent = event_registered(registering, user);
+            if(last_registering)
+                last_registering->next = registering->next;
+            else
+                registering_users = registering->next;
+            delUser(registering, 1);
+        } else if(time(0) - registering->created > 2) {
+            if(last_registering)
+                last_registering->next = registering->next;
+            else
+                registering_users = registering->next;
+            delUser(registering, 1);
+        } else
+            last_registering = registering;
+    }
     if(chan == NULL) {
         chan = addChannel(argv[0]);
         //request member list
@@ -162,7 +182,8 @@ static IRC_CMD(raw_join) {
         putsock(client, "MODE %s +b", chan->name);
     } else if(!isUserOnChan(user, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
         struct ChanUser *chanuser = addChanUser(chan, user);
-        event_join(chanuser);
+        if(!noEvent)
+            event_join(chanuser);
     }
     return 1;
 }
@@ -215,7 +236,12 @@ static IRC_CMD(raw_quit) {
             }
         }
     }
-    delUser(user, 1); //now we fully free the user
+    if(!stricmp(argv[0], "Registered") && !(user->flags & USERFLAG_ISBOT)) {
+        user->next = registering_users;
+        user->created = time(0);
+        registering_users = user;
+    } else
+        delUser(user, 1); //now we fully free the user
     return 1;
 }
 
index 9021760abd2c6149381c2abb62c61053e9f4054f..ecd9f721b7683ef3c91f822b5562c1cf2d66adea 100644 (file)
@@ -43,7 +43,7 @@ CMD_BIND(neonserv_cmd_adduser) {
         reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
         return;
     }
-    if(caccess >= getChannelAccess(user, chan, 0)) {
+    if(caccess >= getChannelAccess(user, chan)) {
         if(isGodMode(user)) {
             event->flags |= CMDFLAG_OPLOG;
         } else {
index 269d5e4f56e45371f83ce9a6a93960cd6a07956e..92cd4a43982ad71aa409324da6b77b4063f08d63 100644 (file)
@@ -40,7 +40,7 @@ CMD_BIND(neonserv_cmd_clvl) {
         reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
         return;
     }
-    if(caccess >= getChannelAccess(user, chan, 0)) {
+    if(caccess >= getChannelAccess(user, chan)) {
         if(isGodMode(user)) {
             event->flags |= CMDFLAG_OPLOG;
         } else {
@@ -108,9 +108,13 @@ static void neonserv_cmd_clvl_async1(struct ClientSocket *client, struct ClientS
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
             //clvl
-            if(atoi(row[0]) >= getChannelAccess(user, chan, 1)) {
-                reply(textclient, user, "NS_USER_OUTRANKED", nick);
-                return;
+            if(atoi(row[0]) >= getChannelAccess(user, chan)) {
+                if(isGodMode(user)) {
+                    event->flags |= CMDFLAG_OPLOG;
+                } else {
+                    reply(textclient, user, "NS_USER_OUTRANKED", nick);
+                    return;
+                }
             }
             printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = '%d' WHERE `chanuser_id` = '%s'", caccess, row[1]);
             reply(textclient, user, "NS_CLVL_DONE", nick, caccess, chan->name);
index 62b14629d24f29097f4adcc29e748b9f7e89eeca..0893d98e101666e35761efed0d3b789438c92e7a 100644 (file)
@@ -90,7 +90,7 @@ static void neonserv_cmd_deluser_async1(struct ClientSocket *client, struct Clie
         printf_mysql_query("SELECT `chanuser_access`, `chanuser_id` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid);
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
-            if(atoi(row[0]) >= getChannelAccess(user, chan, 0)) {
+            if(atoi(row[0]) >= getChannelAccess(user, chan)) {
                 if(isGodMode(user)) {
                     event->flags |= CMDFLAG_OPLOG;
                 } else {
index 69d4680a1cbac2622cac424033531839858a36dd..b4c7d88463dc378d9bd3e2e676b511aec5057b7f 100644 (file)
@@ -68,10 +68,10 @@ static void neonserv_cmd_deopall_async1(struct ClientSocket *client, struct Clie
     if(argc > 0)
         nickmask = argv[0];
     modeBuf = initModeBuffer(client, chan);
-    issuer_access = getChannelAccess(user, chan, 0);
+    issuer_access = getChannelAccess(user, chan);
     for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
         if(nickmask && match(nickmask, chanuser->user->nick)) continue;
-        victim_access = getChannelAccess(user, chan, 0);
+        victim_access = getChannelAccess(user, chan);
         if(victim_access >= issuer_access) continue;
         if(!(chanuser->flags & CHANUSERFLAG_OPPED)) continue;
         modeBufferDeop(modeBuf, chanuser->user->nick);
index 43ca9d50e399446958bdfa866294421d3c2d3f61..09445fa2a350395dde28e282861035dc791b9a22 100644 (file)
@@ -27,17 +27,13 @@ CMD_BIND(neonserv_cmd_devoiceall) {
     struct ChanUser *chanuser;
     struct ModeBuffer *modeBuf;
     check_mysql();
-    if(!checkChannelAccess(user, chan, "channel_canvoice", 1, 0)) {
-        reply(getTextBot(), user, "NS_ACCESS_DENIED");
-        return;
-    }
     if(argc > 0)
         nickmask = argv[0];
     modeBuf = initModeBuffer(client, chan);
-    issuer_access = getChannelAccess(user, chan, 0);
+    issuer_access = getChannelAccess(user, chan);
     for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
         if(nickmask && match(nickmask, chanuser->user->nick)) continue;
-        victim_access = getChannelAccess(user, chan, 0);
+        victim_access = getChannelAccess(user, chan);
         if(victim_access >= issuer_access) continue;
         if(!(chanuser->flags & CHANUSERFLAG_VOICED)) continue;
         modeBufferDevoice(modeBuf, chanuser->user->nick);
index fc9dc5ab5efb7bd47dacf8bab5f325eee3c7aaab..a2202f53d203af3e26b882ad4dba6380c8723a2d 100644 (file)
@@ -86,7 +86,7 @@ CMD_BIND(neonserv_cmd_extscript) {
                 partpos = sprintf(part, "%s", ((user->flags & USERFLAG_ISAUTHED) ? user->auth : ""));
             } else if(!strcmp(argv[i], "access")) {
                 if(chan)
-                    partpos = sprintf(part, "%d", getChannelAccess(user, chan, 0));
+                    partpos = sprintf(part, "%d", getChannelAccess(user, chan));
             }
         } else {
             partpos = sprintf(part, "%s", argv[i]);
index 078ba5cc937e5ff11458fa06632cb5afc8e9340d..79e4ba859f35aa90791b9ee4a455b642ee4b95a1 100644 (file)
 */
 
 CMD_BIND(neonserv_cmd_mdeluser) {
-    if(!checkChannelAccess(user, chan, "channel_candel", 1, 0)) {
-        reply(getTextBot(), user, "NS_ACCESS_DENIED");
-        return;
-    }
     int min_access, max_access;
     char *seperator = strstr(argv[0], "-");
     if(seperator) {
@@ -42,9 +38,13 @@ CMD_BIND(neonserv_cmd_mdeluser) {
         min_access = atoi(argv[0]);
         max_access = min_access;
     }
-    if(max_access >= getChannelAccess(user, chan, 1)) {
-        reply(getTextBot(), user, "NS_NO_ACCESS");
-        return;
+    if(max_access >= getChannelAccess(user, chan)) {
+        if(isGodMode(user)) {
+            event->flags |= CMDFLAG_OPLOG;
+        } else {
+            reply(getTextBot(), user, "NS_NO_ACCESS");
+            return;
+        }
     }
     MYSQL_RES *res;
     MYSQL_ROW row;
index e6550a4628b99b75d944d975869aa2ad06e00e42..7404ef8d72414844ee6deff21cd87b1803970d86 100644 (file)
@@ -76,7 +76,7 @@ static void neonserv_cmd_mode_async1(struct ClientSocket *client, struct ClientS
         parseModeString(modelock, row[4]);
     else if(defaults[4])
         parseModeString(modelock, defaults[4]);
-    int uaccess = getChannelAccess(user, chan, 0);
+    int uaccess = getChannelAccess(user, chan);
     char *a, *b = mode;
     char *argv[MAXNUMPARAMS];
     char *carg;
index c8b433ab8cec71bd63cf37a7e2a088a188e8723b..46e85d8b1f825d14a2af1d7c25e6d632d39af6e2 100644 (file)
@@ -85,7 +85,7 @@ CMD_BIND(neonserv_cmd_set) {
     int i, j;
     if(argc && !strcmp(argv[0], "defaults")) {
         //reset channel settings
-        int uaccess = getChannelAccess(user, chan, 0);
+        int uaccess = getChannelAccess(user, chan);
         if(uaccess < 500) {
             if(isGodMode(user)) {
                 event->flags |= CMDFLAG_OPLOG;
@@ -243,7 +243,7 @@ static void neonserv_cmd_set_setting(struct ClientSocket *client, struct UserNod
                 reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
                 return;
             }
-            int uaccess = getChannelAccess(user, chan, 0);
+            int uaccess = getChannelAccess(user, chan);
             if(uaccess == 500) uaccess++;
             if(atoi(value) > uaccess) {
                 if(isGodMode(user)) {
@@ -324,7 +324,7 @@ static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNo
     row = mysql_fetch_row(res);
     trigger = row[0];
     if(argument) {
-        int uaccess = getChannelAccess(user, chan, 0);
+        int uaccess = getChannelAccess(user, chan);
         if(uaccess < 500) {
             if(isGodMode(user)) {
                 event->flags |= CMDFLAG_OPLOG;
index 63b7b473c323e765f30a23ded8de0f38770d482b..11e89b70543859b6a4a68b6bd280d7ebe4451c26 100644 (file)
@@ -90,7 +90,7 @@ static void neonserv_cmd_suspend_async1(struct ClientSocket *client, struct Clie
         printf_mysql_query("SELECT `chanuser_access`, `chanuser_id`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid);
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
-            if(atoi(row[0]) >= getChannelAccess(user, chan, 0)) {
+            if(atoi(row[0]) >= getChannelAccess(user, chan)) {
                 if(isGodMode(user)) {
                     event->flags |= CMDFLAG_OPLOG;
                 } else {
index 88d396a97b3d0e283d6f8bade50741675b03d74f..2d0c8e5d3d11cc96accd8a0e36b4100bc62bd244 100644 (file)
@@ -54,7 +54,7 @@ CMD_BIND(neonserv_cmd_topic) {
         logEvent(event);
         return;
     }
-    int uaccess = getChannelAccess(user, chan, 0);
+    int uaccess = getChannelAccess(user, chan);
     if(uaccess >= atoi((row[3] ? row[3] : default_row[1]))) {
         //just set the topic
         newtopic = merge_argv(argv, 0, argc);
index 97c9615a2e6679cee9f31811a9a07b2e0848b41a..c9c8ed1375e286d94e17d8f01150d907461f2a84 100644 (file)
@@ -34,7 +34,7 @@ struct neonserv_cmd_trim_cache {
 };
 
 CMD_BIND(neonserv_cmd_trim) {
-    if(stricmp(argv[0], "bans") && !checkChannelAccess(user, chan, "channel_candel", 0, 0)) {
+    if(stricmp(argv[0], "bans") && !checkChannelAccess(user, chan, "channel_candel", 0)) {
         if(isGodMode(user)) {
             event->flags |= CMDFLAG_OPLOG;
         } else {
@@ -50,9 +50,9 @@ CMD_BIND(neonserv_cmd_trim) {
     }
     if(!stricmp(argv[0], "users")) {
         min_access = 1;
-        max_access = getChannelAccess(user, chan, 0) - 1;
+        max_access = getChannelAccess(user, chan) - 1;
     } else if(!stricmp(argv[0], "bans")) {
-        if(!checkChannelAccess(user, chan, "channel_staticban", 0, 0)) {
+        if(!checkChannelAccess(user, chan, "channel_staticban", 0)) {
             if(isGodMode(user)) {
                 event->flags |= CMDFLAG_OPLOG;
             } else {
@@ -96,7 +96,7 @@ CMD_BIND(neonserv_cmd_trim) {
             min_access = atoi(argv[0]);
             max_access = min_access;
         }
-        if(max_access >= getChannelAccess(user, chan, 0)) {
+        if(max_access >= getChannelAccess(user, chan)) {
             if(isGodMode(user)) {
                 event->flags |= CMDFLAG_OPLOG;
             } else {
index 557524f47fb38e0eded6264a20616a512323811b..1a4889d7f1ffc692c9a122189829a0ea02e5c67c 100644 (file)
@@ -90,7 +90,7 @@ static void neonserv_cmd_unsuspend_async1(struct ClientSocket *client, struct Cl
         printf_mysql_query("SELECT `chanuser_access`, `chanuser_id`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid);
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
-            if(atoi(row[0]) >= getChannelAccess(user, chan, 0)) {
+            if(atoi(row[0]) >= getChannelAccess(user, chan)) {
                 if(isGodMode(user)) {
                     event->flags |= CMDFLAG_OPLOG;
                 } else {
index f98a09b8d2a7815dd3c8ac00716e20123a1eeec4..6bdda2f424b271cfe8fa655b20b03cb1e945dd7d 100644 (file)
@@ -45,7 +45,7 @@ CMD_BIND(neonserv_cmd_up) {
         chan_getop = atoi(row[0]);
         chan_getvoice = atoi(row[1]);
     }
-    caccess = getChannelAccess(user, chan, 1);
+    caccess = getChannelAccess(user, chan);
     if(caccess >= chan_getop) {
         if(!(chanuser->flags & CHANUSERFLAG_OPPED)) {
             putsock(client, "MODE %s +o %s", chan->name, user->nick);
index 8cb065b637a4699055dac52cbe51eb35472a636b..50cabacb8fad79964b7b0f123ab8e492f8f91f5b 100644 (file)
@@ -90,7 +90,7 @@ static void neonserv_cmd_wipeinfo_async1(struct ClientSocket *client, struct Cli
         printf_mysql_query("SELECT `chanuser_access`, `chanuser_id` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid);
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
-            if(atoi(row[0]) >= getChannelAccess(user, chan, 0)) {
+            if(atoi(row[0]) >= getChannelAccess(user, chan)) {
                 if(isGodMode(user)) {
                     event->flags |= CMDFLAG_OPLOG;
                 } else {
index 3403e456c467d0afb7929be660114a23ea5f495e..799045c0ab70c8e002cbed1820f50b5c849c6bc3 100644 (file)
@@ -139,7 +139,7 @@ CMD_BIND(neonspam_cmd_set) {
     int i, j;
     if(argc && !strcmp(argv[0], "defaults")) {
         //reset channel settings
-        int uaccess = getChannelAccess(user, chan, 0);
+        int uaccess = getChannelAccess(user, chan);
         if(uaccess < 500) {
             if(isGodMode(user)) {
                 event->flags |= CMDFLAG_OPLOG;
@@ -297,7 +297,7 @@ static char* neonspam_cmd_set_trigger(struct ClientSocket *client, struct UserNo
     row = mysql_fetch_row(res);
     trigger = row[0];
     if(argument) {
-        int uaccess = getChannelAccess(user, chan, 0);
+        int uaccess = getChannelAccess(user, chan);
         if(uaccess < 500) {
             if(isGodMode(user)) {
                 event->flags |= CMDFLAG_OPLOG;
@@ -345,7 +345,7 @@ static char* neonspam_cmd_setexcept(struct ClientSocket *client, struct UserNode
             reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
             return NULL;
         }
-        int uaccess = getChannelAccess(user, chan, 0);
+        int uaccess = getChannelAccess(user, chan);
         if(uaccess == 500) uaccess++;
         if(value > uaccess) {
             if(isGodMode(user)) {
@@ -613,7 +613,7 @@ static char* neonspam_cmd_setscanexcept(struct ClientSocket *client, struct User
             reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess);
             return NULL;
         }
-        int uaccess = getChannelAccess(user, chan, 0);
+        int uaccess = getChannelAccess(user, chan);
         if(uaccess == 500) uaccess++;
         if(identical && value > uaccess) {
             if(isGodMode(user)) {
index 583f2a26df8051c35dc18cc93b6a94b397514866..5ef806024b9477f3076adca751aed240e562a096 100644 (file)
@@ -96,7 +96,7 @@ static void neonserv_event_mode_async1(struct ClientSocket *client, struct UserN
         parseModeString(modelock, row[4]);
     else if(defaults[4])
         parseModeString(modelock, defaults[4]);
-    int uaccess = getChannelAccess(user, chan, 0);
+    int uaccess = getChannelAccess(user, chan);
     char *carg;
     int sent_modes_locked = 0;
     char tmp[MAXLEN];
index 2d2978ba349181c58d7ec5a9bd13e55f392c0b21..f5035966ea9680e42a25729acdfd86535d5382db 100644 (file)
@@ -166,7 +166,7 @@ static void neonspam_event_chanmsg_punish(struct ClientSocket *client, struct Ch
     loadChannelSettings(chanuser->chan);
     int uaccess = 0;
     if(chanuser->user->flags & USERFLAG_ISAUTHED)
-        uaccess = getChannelAccess(chanuser->user, chanuser->chan, 0);
+        uaccess = getChannelAccess(chanuser->user, chanuser->chan);
     char reason[MAXLEN];
     reason[0] = '\0';
     int punishment = 0;
index 1578a0154ec551d82367749ad631cc7f62288f33..ce29783c215db4ca4a1cc308407e1889ac0f1cfc 100644 (file)
@@ -62,7 +62,7 @@ static USERAUTH_CALLBACK(neonspam_event_join_nick_lookup) {
 static void neonspam_event_join_punish(struct ClientSocket *client, struct ChanUser *chanuser, struct NeonSpamSettings *settings, int action) {
     int uaccess = 0;
     if(chanuser->user->flags & USERFLAG_ISAUTHED)
-        uaccess = getChannelAccess(chanuser->user, chanuser->chan, 0);
+        uaccess = getChannelAccess(chanuser->user, chanuser->chan);
     if(uaccess >= settings->exceptlevel[SPAMSETTINGS_JOINEXCINDEX]) return;
     //scanops / scanvoiced
     MYSQL_RES *res;
index b8341fe0e47338c65cadb513c75b8496a291a0d7..6c881fb00bfef702b9254c2cba82b247953db0ca 100644 (file)
@@ -32,6 +32,7 @@
 #include "EventLogger.h"
 #include "ModeNode.h"
 #include "IRCQueue.h"
+#include "DBHelper.h"
 #include "lib/ini.h"
 
 time_t start_time;
@@ -121,6 +122,7 @@ int main(void)
     init_handleinfohandler();
     init_tools();
     init_bots();
+    init_DBHelper();
     
     load_languages();
     
index 0b4bec706183183cc49c7949d79c630def867099..301a50256806802ca6f4edd4647a5a360d835da0 100644 (file)
@@ -291,8 +291,8 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
         printf_mysql_query("SELECT `channel_pubcmd` FROM `channels` WHERE `channel_name` = '%s'", escape_string(sent_chan->name));
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
-            uaccess = getChannelAccess(user, sent_chan, 1);
-            if(row[0] && uaccess < atoi(row[0])) { //NOTE: HARDCODED DEFAULT: pubcmd = 0
+            uaccess = getChannelAccess(user, sent_chan);
+            if(row[0] && uaccess < atoi(row[0]) && !isGodMode(user)) { //NOTE: HARDCODED DEFAULT: pubcmd = 0
                 reply(tmp_text_client, user, "MODCMD_PUBCMD", sent_chan->name);
                 return;
             }
@@ -351,7 +351,7 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
                 chan->flags |= CHANFLAG_CHAN_REGISTERED;
                 chan->channel_id = atoi(row[0]);
                 if((sent_chan && sent_chan == chan) || access_count || minaccess) {
-                    uaccess = getChannelAccess(user, chan, 0);
+                    uaccess = getChannelAccess(user, chan);
                     if(uaccess < minaccess && isGodMode(user)) {
                         eventflags |= CMDFLAG_OPLOG;
                     } else if(uaccess < minaccess) {