Fix SourceForge bug #1706672.
authorMichael Poole <mdpoole@troilus.org>
Thu, 26 Mar 2009 02:16:26 +0000 (02:16 +0000)
committerMichael Poole <mdpoole@troilus.org>
Thu, 26 Mar 2009 02:16:26 +0000 (02:16 +0000)
git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1910 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
ircd/channel.c

index dafc314c96da8c12f3f2f6742a829cebda58b7aa..aec8fc8725eec7365c8df6fd04d81a3e7f544f45 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-25  Michael Poole <mdpoole@troilus.org>
+
+       * ircd/channel.c (mode_parse): Add Doxygen comment.  When bouncing
+       a mode from a desynced U-lined server, do not set the modes or
+       send the change as a HACK(4) message.
+
 2009-03-17  Michael Poole <mdpoole@troilus.org>
 
        * ircd/send.c (sendcmdto_match_butone): Move match_it() to the end
index 46fb060de01ad897f2ff9fe682802d434d810531..471faceb1ef1421416c244e76458faeeaa5f44f9 100644 (file)
@@ -3194,10 +3194,19 @@ mode_parse_mode(struct ParseState *state, int *flag_p)
         (state->add & (MODE_SECRET | MODE_PRIVATE)));
 }
 
-/*
+/**
  * This routine is intended to parse MODE or OPMODE commands and effect the
- * changes (or just build the bounce buffer).  We pass the starting offset
- * as a 
+ * changes (or just build the bounce buffer).
+ *
+ * \param[out] mbuf Receives parsed representation of mode change.
+ * \param[in] cptr Connection that sent the message to this server.
+ * \param[in] sptr Original source of the message.
+ * \param[in] chptr Channel whose modes are being changed.
+ * \param[in] parc Number of valid strings in \a parv.
+ * \param[in] parv Text arguments representing mode change, with the
+ *   zero'th element containing a string like "+m" or "-o".
+ * \param[in] flags Set of bitwise MODE_PARSE_* flags.
+ * \param[in] member If non-null, the channel member attempting to change the modes.
  */
 int
 mode_parse(struct ModeBuf *mbuf, struct Client *cptr, struct Client *sptr,
@@ -3357,7 +3366,9 @@ mode_parse(struct ModeBuf *mbuf, struct Client *cptr, struct Client *sptr,
           } else {
             /* Server is desynced; bounce the mode and deop the source
              * to fix it. */
-            state.mbuf->mb_dest &= ~MODEBUF_DEST_CHANNEL;
+            state.flags &= ~MODE_PARSE_SET;
+            state.flags |= MODE_PARSE_BOUNCE;
+            state.mbuf->mb_dest &= ~(MODEBUF_DEST_CHANNEL | MODEBUF_DEST_HACK4);
             state.mbuf->mb_dest |= MODEBUF_DEST_BOUNCE | MODEBUF_DEST_HACK2;
             if (!IsServer(state.cptr))
               state.mbuf->mb_dest |= MODEBUF_DEST_DEOP;