Hi all,

Currently, the OVERRIDE checks allowing PRIV_WALK_LCHAN operators to
join local channels do not work if the real channel key is OVERRIDE.
This is correct if the key is OVERRIDE and that is the only impediment
to joining. However, when there is another additional impediment, such
as a ban against the operator, or the channel is +i, this cannot be
overriden because the channel key is OVERRIDE.

The attached patch resolves this issue.

Andrew(A1kmm)

? deaf_delayed.patch
? join_ik_OVERRIDE.patch
? wasdelayed-bugfix.patch
? ircd/.Rhistory
? ircd/convert-conf
? ircd/test/ircd_match_t
Index: ircd/m_join.c
===================================================================
RCS file: /cvsroot/undernet-ircu/ircu2.10/ircd/m_join.c,v
retrieving revision 1.35
diff -u -d -r1.35 m_join.c
--- ircd/m_join.c	6 Oct 2005 23:49:25 -0000	1.35
+++ ircd/m_join.c	29 Oct 2005 11:54:44 -0000
@@ -210,24 +210,30 @@
       if (IsLocalChannel(chptr->chname)
           && HasPriv(sptr, PRIV_WALK_LCHAN)
           && !(flags & CHFL_CHANOP)
-          && key && !strcmp(key, "OVERRIDE")
-          && strcmp(chptr->mode.key, "OVERRIDE"))
+          && key && !strcmp(key, "OVERRIDE"))
       {
-        switch (err) {
-        case 0:
+        if (err == 0 && strcmp(chptr->mode.key, "OVERRIDE") &&
+            strcmp(chptr->mode.apass, "OVERRIDE") &&
+            strcmp(chptr->mode.upass, "OVERRIDE"))
+        {
           send_reply(sptr, ERR_DONTCHEAT, chptr->chname);
           continue;
-        case ERR_INVITEONLYCHAN: err = 'i'; break;
-        case ERR_CHANNELISFULL:  err = 'l'; break;
-        case ERR_BANNEDFROMCHAN: err = 'b'; break;
-        case ERR_BADCHANNELKEY:  err = 'k'; break;
-        case ERR_NEEDREGGEDNICK: err = 'r'; break;
-        default: err = '?'; break;
         }
-        /* send accountability notice */
-        sendto_opmask_butone(0, SNO_HACK4, "OPER JOIN: %C JOIN %H "
-                             "(overriding +%c)", sptr, chptr, err);
-        err = 0;
+        if (err != 0)
+        {
+          switch (err) {
+          case ERR_INVITEONLYCHAN: err = 'i'; break;
+          case ERR_CHANNELISFULL:  err = 'l'; break;
+          case ERR_BANNEDFROMCHAN: err = 'b'; break;
+          case ERR_BADCHANNELKEY:  err = 'k'; break;
+          case ERR_NEEDREGGEDNICK: err = 'r'; break;
+          default: err = '?'; break;
+          }
+          /* send accountability notice */
+          sendto_opmask_butone(0, SNO_HACK4, "OPER JOIN: %C JOIN %H "
+                               "(overriding +%c)", sptr, chptr, err);
+          err = 0;
+        }
       }
 
       /* Is there some reason the user may not join? */
_______________________________________________
Coder-com mailing list
Coder-com@undernet.org
http://undernet.sbg.org/mailman/listinfo/coder-com

Reply via email to