Browse Source

* Port [3924] to 1.2.16 from trunk
* Bans are now only retrieved from server after being opped. (addresses #406)



svn: 3925

Bryan Drewery 17 years ago
parent
commit
9abcd1b637
3 changed files with 33 additions and 24 deletions
  1. 1 0
      doc/UPDATES
  2. 17 11
      src/mod/irc.mod/chan.c
  3. 15 13
      src/mod/irc.mod/irc.c

+ 1 - 0
doc/UPDATES

@@ -18,6 +18,7 @@
 * Fixed a rare segfault on userfile transfer timeouts
 * Fixed bots getting confused about their hub/uplink after userfile transfer fails (fixes #61)
 * Fixed cmd_handle not properly bounds checking max handlen. (fixes #305)
+* Bans are now only retrieved from server after being opped. (addresses #406)
 
 1.2.15 - http://wraith.botpack.net/milestone/1.2.15
 * Fix a possible segfault when binaries compiled wrong

+ 17 - 11
src/mod/irc.mod/chan.c

@@ -1275,7 +1275,7 @@ void recheck_channel(struct chanset_t *chan, int dobans)
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
   int stop_reset = 0, botops = 0, nonbotops = 0, botnonops = 0;
 
-  stacking++;
+  ++stacking;
 
   putlog(LOG_DEBUG, "*", "recheck_channel %s", chan->dname);
 
@@ -1285,11 +1285,11 @@ void recheck_channel(struct chanset_t *chan, int dobans)
     if (m) {
       if (m->user && m->user->bot && (m->user->flags & USER_OP)) {
         if (hasop)
-          botops++;
+          ++botops;
         else
-          botnonops++;
+          ++botnonops;
       } else if (hasop)
-        nonbotops++;
+        ++nonbotops;
     }
   }
 
@@ -1310,15 +1310,21 @@ void recheck_channel(struct chanset_t *chan, int dobans)
   /* this can all die, we want to enforce +bitch/+take first :) */
 
   /* This is a bad hack for +e/+I */
-  if (dobans == 2 && !channel_take(chan) && me_op(chan) && do_eI) {
-    chan->channel.last_eI = now;
-    if (!(chan->ircnet_status & CHAN_ASKED_EXEMPTS) && use_exempts == 1) {
+  if (dobans == 2 && !channel_take(chan)) {
+    if (!(chan->status & CHAN_ASKEDBANS)) {
+      chan->status |= CHAN_ASKEDBANS;
+      dprintf(DP_MODE, "MODE %s +b\n", chan->name);
+    }
+    if (do_eI) {
+      chan->channel.last_eI = now;
+      if (!(chan->ircnet_status & CHAN_ASKED_EXEMPTS) && use_exempts == 1) {
         chan->ircnet_status |= CHAN_ASKED_EXEMPTS;
         dprintf(DP_MODE, "MODE %s +e\n", chan->name);
-    }
-    if (!(chan->ircnet_status & CHAN_ASKED_INVITES) && use_invites == 1) {
-      chan->ircnet_status |= CHAN_ASKED_INVITES;
-      dprintf(DP_MODE, "MODE %s +I\n", chan->name);
+      }
+      if (!(chan->ircnet_status & CHAN_ASKED_INVITES) && use_invites == 1) {
+        chan->ircnet_status |= CHAN_ASKED_INVITES;
+        dprintf(DP_MODE, "MODE %s +I\n", chan->name);
+      }
     }
   }
 

+ 15 - 13
src/mod/irc.mod/irc.c

@@ -1240,20 +1240,22 @@ reset_chan_info(struct chanset_t *chan)
     chan->status &= ~(CHAN_ACTIVE | CHAN_ASKEDMODES | CHAN_JOINING);
     /* don't bother checking bans if it's +take */
     if (!channel_take(chan)) {
-      if (!(chan->status & CHAN_ASKEDBANS)) {
-        chan->status |= CHAN_ASKEDBANS;
-        dprintf(DP_MODE, "MODE %s +b\n", chan->name);
-      }
-
-      if (opped && do_eI) {
-        chan->channel.last_eI = now;
-        if (!(chan->ircnet_status & CHAN_ASKED_EXEMPTS) && use_exempts == 1) {
-          chan->ircnet_status |= CHAN_ASKED_EXEMPTS;
-          dprintf(DP_MODE, "MODE %s +e\n", chan->name);
+      if (opped) {
+        if (!(chan->status & CHAN_ASKEDBANS)) {
+          chan->status |= CHAN_ASKEDBANS;
+          dprintf(DP_MODE, "MODE %s +b\n", chan->name);
         }
-        if (!(chan->ircnet_status & CHAN_ASKED_INVITES) && use_invites == 1) {
-          chan->ircnet_status |= CHAN_ASKED_INVITES;
-          dprintf(DP_MODE, "MODE %s +I\n", chan->name);
+
+        if (do_eI) {
+          chan->channel.last_eI = now;
+          if (!(chan->ircnet_status & CHAN_ASKED_EXEMPTS) && use_exempts == 1) {
+            chan->ircnet_status |= CHAN_ASKED_EXEMPTS;
+            dprintf(DP_MODE, "MODE %s +e\n", chan->name);
+          }
+          if (!(chan->ircnet_status & CHAN_ASKED_INVITES) && use_invites == 1) {
+            chan->ircnet_status |= CHAN_ASKED_INVITES;
+            dprintf(DP_MODE, "MODE %s +I\n", chan->name);
+          }
         }
       }
     }