Merge branch 'master' into SpamServ
authorNurPech <nurpech@nurpech.de>
Sun, 8 Sep 2013 19:12:04 +0000 (21:12 +0200)
committerNurPech <nurpech@nurpech.de>
Sun, 8 Sep 2013 19:12:04 +0000 (21:12 +0200)
src/chanserv.c
src/mod-hostserv.c
src/modcmd.c
src/nickserv.c

index 37d6531e5485dddb19db96586324777941a140fb..9358d160a305c46ec36fa7d87a9f6124cf2373c9 100644 (file)
@@ -2391,7 +2391,7 @@ static CHANSERV_FUNC(cmd_move)
 
     REQUIRE_PARAMS(2);
 
-    if(IsProtected(channel->channel_info))
+    if(IsProtected(channel->channel_info) && !IsOper(user))
     {
         reply("CSMSG_MOVE_NODELETE", channel->name);
         return 0;
@@ -2699,7 +2699,7 @@ static CHANSERV_FUNC(cmd_merge)
         return 0;
     }
 
-    if(IsProtected(channel->channel_info))
+    if(IsProtected(channel->channel_info) && !IsOper(user))
     {
         reply("CSMSG_MERGE_NODELETE");
         return 0;
@@ -5425,7 +5425,7 @@ static CHANSERV_FUNC(cmd_csuspend)
 
     REQUIRE_PARAMS(3);
 
-    if(IsProtected(channel->channel_info))
+    if(IsProtected(channel->channel_info) && !IsOper(user))
     {
         reply("CSMSG_SUSPEND_NODELETE", channel->name);
         return 0;
index 24de72dc7ee471bcd15e5100b0e81a9e2d90416f..462bed94422ea0202b03f1b7dd0069d951cf15af 100644 (file)
@@ -1281,17 +1281,10 @@ struct devnull_class hostserv_get_user_priv(struct handle_info *hi) {
     
     struct hs_user *huser = hs_get_user(hi, 0);
     if(huser) {
-        struct hs_assignment *assignment;
-        struct hs_secondlevel *slfh;
         struct devnull_class *devc;
-        for(assignment = huser->assignments; assignment; assignment = assignment->unext) {
-            slfh = assignment->secondlevel;
-            if(slfh->devnull_id) {
-                devc = devnull_find_id(slfh->devnull_id);
-                if(!devc) {
-                    slfh->devnull_id = 0;
-                    continue;
-                }
+        if(hi->devnull_id != 0) {
+            devc = devnull_find_id(huser->hi->devnull_id);
+            if(devc) {
                 if(DEVNULL_HAS_PRIV(devc, CHANLIMIT) && (!DEVNULL_HAS_PRIV(&th, CHANLIMIT) || th.maxchan < devc->maxchan))
                     th.maxchan = devc->maxchan;
                 if(DEVNULL_HAS_PRIV(devc, MAXSENDQ) && (!DEVNULL_HAS_PRIV(&th, MAXSENDQ) || th.maxsendq < devc->maxsendq))
@@ -1300,6 +1293,26 @@ struct devnull_class hostserv_get_user_priv(struct handle_info *hi) {
                 if(!th.name)
                     th.name = devc->name;
             }
+        } else {
+            struct hs_assignment *assignment;
+            struct hs_secondlevel *slfh;
+            for(assignment = huser->assignments; assignment; assignment = assignment->unext) {
+                slfh = assignment->secondlevel;
+                if(slfh->devnull_id) {
+                    devc = devnull_find_id(slfh->devnull_id);
+                    if(!devc) {
+                        slfh->devnull_id = 0;
+                        continue;
+                    }
+                    if(DEVNULL_HAS_PRIV(devc, CHANLIMIT) && (!DEVNULL_HAS_PRIV(&th, CHANLIMIT) || th.maxchan < devc->maxchan))
+                        th.maxchan = devc->maxchan;
+                    if(DEVNULL_HAS_PRIV(devc, MAXSENDQ) && (!DEVNULL_HAS_PRIV(&th, MAXSENDQ) || th.maxsendq < devc->maxsendq))
+                        th.maxsendq = devc->maxsendq;
+                    th.modes |= devc->modes;
+                    if(!th.name)
+                        th.name = devc->name;
+                }
+            }
         }
     }
     return th;
index 25a3fd39856cd0715cd444d6e3db9a1b5f4c8e9e..cb02c8f3a255aaff4bd901a6fbce6380047ff2f1 100644 (file)
@@ -1945,7 +1945,7 @@ static MODCMD_FUNC(cmd_version) {
      * copyright information pertaining to changes you make to srvx.
      */
     send_message_type(4, user, cmd->parent->bot, "$b"PACKAGE_STRING"$b ("CODENAME"), GIT Revision: %s, Built: "__DATE__", "__TIME__".  Copyright 2000-2008 srvx Development Team.", git_version);
-    send_message_type(12, user, cmd->parent->bot, "The srvx Development Team includes Paul Chang, Adrian Dewhurst, Miles Peterson, Michael Poole and others.\nThe srvx Development Team can be reached at http://sf.net/projects/srvx/ or in #srvx on irc.gamesurge.net.\nThis version has been modified by pk910 - visit #srvx @ irc.nextirc.net.\nThis version has been modified by Stricted, NurPech - visit #dev @ irc.easy-scripting.net.");
+    send_message_type(12, user, cmd->parent->bot, "The srvx Development Team includes Paul Chang, Adrian Dewhurst, Miles Peterson, Michael Poole and others.\nThe srvx Development Team can be reached at http://sf.net/projects/srvx/ or in #srvx on irc.gamesurge.net.\nThis version has been modified by pk910, Stricted, NurPech - visit #dev @ irc.nextirc.net.");
     return 1;
 }
 
index 089cc935daab316d7c9e22647c75e6f367205617..15c5743b663f04fed3bc8bd3562f62ede3765311 100644 (file)
@@ -3704,8 +3704,9 @@ static NICKSERV_FUNC(cmd_merge)
 #define NICKSERV_DISCRIM_FIELDS_FAKEHOST 0x10
 #define NICKSERV_DISCRIM_FIELDS_WEBSITE  0x20
 #define NICKSERV_DISCRIM_FIELDS_DEVNULL  0x40
+#define NICKSERV_DISCRIM_FIELDS_ID       0x80
 
-#define NICKSERV_DISCRIM_FIELD_COUNT     7
+#define NICKSERV_DISCRIM_FIELD_COUNT     8
 
 struct nickserv_discrim {
     unsigned int show_fields;
@@ -3718,6 +3719,7 @@ struct nickserv_discrim {
     unsigned long lastseen;
     unsigned int limit;
     int min_level, max_level;
+    unsigned int min_id, max_id;
     int min_karma, max_karma;
     enum { SUBSET, EXACT, SUPERSET, LASTQUIT } hostmask_type;
     const char *nickmask;
@@ -3756,6 +3758,9 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[])
     discrim->lastseen = ULONG_MAX;
     discrim->min_karma = INT_MIN;
     discrim->max_karma = INT_MAX;
+    discrim->min_id = 0;
+    discrim->max_id = INT_MAX;
 
     for (i=0; i<argc; i++) {
         if (i == argc - 1) {
@@ -3780,6 +3785,8 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[])
                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_SEEN;
                 else if(!irccasecmp(fields, "access"))
                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_ACCESS;
+                else if(!irccasecmp(fields, "id"))
+                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_ID;
                 else if(!irccasecmp(fields, "fakehost"))
                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_FAKEHOST;
                 else if(!irccasecmp(fields, "website") && IsBot(user))
@@ -3920,6 +3927,26 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[])
             } else {
                 send_message(user, nickserv, "MSG_INVALID_CRITERIA", cmp);
             }
+        } else if (!irccasecmp(argv[i], "id")) {
+            const char *cmp = argv[++i];
+            if (cmp[0] == '<') {
+                if (discrim->min_id == 0) discrim->min_id = 1;
+                if (cmp[1] == '=') {
+                    discrim->max_id = strtoul(cmp+2, NULL, 0);
+                } else {
+                    discrim->max_id = strtoul(cmp+1, NULL, 0) - 1;
+                }
+            } else if (cmp[0] == '=') {
+                discrim->min_id = discrim->max_id = strtoul(cmp+1, NULL, 0);
+            } else if (cmp[0] == '>') {
+                if (cmp[1] == '=') {
+                    discrim->min_id = strtoul(cmp+2, NULL, 0);
+                } else {
+                    discrim->min_id = strtoul(cmp+1, NULL, 0) + 1;
+                }
+            } else {
+                send_message(user, nickserv, "MSG_INVALID_CRITERIA", cmp);
+            }
         } else if (!irccasecmp(argv[i], "karma")) {
             const char *cmp = argv[++i];
             if (cmp[0] == '<') {
@@ -3966,6 +3993,8 @@ nickserv_discrim_match(struct nickserv_discrim *discrim, struct handle_info *hi)
         || (discrim->emailmask && (!hi->email_addr || !match_ircglob(hi->email_addr, discrim->emailmask)))
         || (discrim->min_level > hi->opserv_level)
         || (discrim->max_level < hi->opserv_level)
+        || (discrim->min_id > hi->id)
+        || (discrim->max_id < hi->id)
         || (discrim->min_karma > hi->karma)
         || (discrim->max_karma < hi->karma)
         ) {
@@ -4042,6 +4071,8 @@ search_print_func(struct userNode *source, struct handle_info *match, struct nic
             }
             if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ACCESS)
                 discrim->output_table->contents[discrim->output_table_pos][i++] = strtab(match->opserv_level);
+            if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ID)
+                discrim->output_table->contents[discrim->output_table_pos][i++] = strtab(match->id);
             if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_FAKEHOST)
                 discrim->output_table->contents[discrim->output_table_pos][i++] = (match->fakehost ? match->fakehost : "*");
             if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_WEBSITE)
@@ -4176,6 +4207,8 @@ static NICKSERV_FUNC(cmd_search)
             discrim->output_table->contents[0][ii++] = "Seen";
         if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ACCESS)
             discrim->output_table->contents[0][ii++] = "Access";
+        if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ID)
+            discrim->output_table->contents[0][ii++] = "ID";
         if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_FAKEHOST)
             discrim->output_table->contents[0][ii++] = "Fakehost";
         if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_WEBSITE)