Committer  : klmitch
CVSROOT    : /cvsroot/undernet-ircu
Module     : ircu2.10
Commit time: 2008-03-20 18:22:26 UTC

Modified files:
     ChangeLog include/channel.h ircd/channel.c ircd/ircd_features.c

Log message:

Author: Kev <[EMAIL PROTECTED]>
Log message:

This very simple change adds a +R channel mode that can only be set or
reset by remote users (or servers) or with /opmode.  This can be used by X
to indicate that a channel is registered, a sentinal that C can use to
decide when it is legal to reop a channel.

[pull up from u2_10_12_branch]

---------------------- diff included ----------------------
Index: ircu2.10/ChangeLog
diff -u ircu2.10/ChangeLog:1.850 ircu2.10/ChangeLog:1.851
--- ircu2.10/ChangeLog:1.850    Thu Mar 20 10:45:30 2008
+++ ircu2.10/ChangeLog  Thu Mar 20 11:22:16 2008
@@ -1,5 +1,16 @@
 2008-03-20  Kevin L. Mitchell  <[EMAIL PROTECTED]>
 
+       * ircd/ircd_features.c: update CHANMODES ISUPPORT setting to
+       include 'R' channel mode
+
+       * ircd/channel.c: add MODE_REGISTERED, mapped to +R; arrange to
+       only have it settable or clearable by remote users or /opmode
+
+       * include/channel.h: add MODE_REGISTERED, update infochanmodes to
+       include 'R' channel mode
+
+2008-03-20  Kevin L. Mitchell  <[EMAIL PROTECTED]>
+
        * include/client.h: IsLocOp() now checks to see if its MyUser() as
        well; IsAnOper() uses IsOper() and IsLocOp() instead of directly
        testing the flags
Index: ircu2.10/include/channel.h
diff -u ircu2.10/include/channel.h:1.62 ircu2.10/include/channel.h:1.63
--- ircu2.10/include/channel.h:1.62     Tue Dec  4 20:13:59 2007
+++ ircu2.10/include/channel.h  Thu Mar 20 11:22:16 2008
@@ -19,7 +19,7 @@
  */
 /** @file
  * @brief Channel management and maintenance.
- * @version $Id: channel.h,v 1.62 2007/12/05 04:13:59 entrope Exp $
+ * @version $Id: channel.h,v 1.63 2008/03/20 18:22:16 klmitch Exp $
  */
 #ifndef INCLUDED_channel_h
 #define INCLUDED_channel_h
@@ -99,6 +99,8 @@
 #define MODE_LIMIT      0x0400         /**< +l Limit */
 #define MODE_REGONLY    0x0800         /**< Only +r users may join */
 #define MODE_DELJOINS   0x1000         /**< New join messages are delayed */
+#define MODE_REGISTERED 0x2000         /**< Channel marked as registered
+                                        * (for future semantic expansion) */
 #define MODE_SAVE      0x20000         /**< save this mode-with-arg 'til 
                                         * later */
 #define MODE_FREE      0x40000         /**< string needs to be passed to 
@@ -113,7 +115,7 @@
 #define MODE_WPARAS     
(MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS)
 
 /** Available Channel modes */
-#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrD" : 
"biklmnopstvrD"
+#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrDR" : 
"biklmnopstvrDR"
 /** Available Channel modes that take parameters */
 #define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbkloUv" : 
"bklov"
 
Index: ircu2.10/ircd/channel.c
diff -u ircu2.10/ircd/channel.c:1.179 ircu2.10/ircd/channel.c:1.180
--- ircu2.10/ircd/channel.c:1.179       Wed Dec  5 21:07:31 2007
+++ ircu2.10/ircd/channel.c     Thu Mar 20 11:22:16 2008
@@ -19,7 +19,7 @@
  */
 /** @file
  * @brief Channel management and maintenance
- * @version $Id: channel.c,v 1.179 2007/12/06 05:07:31 entrope Exp $
+ * @version $Id: channel.c,v 1.180 2008/03/20 18:22:16 klmitch Exp $
  */
 #include "config.h"
 
@@ -809,6 +809,8 @@
     *mbuf++ = 'D';
   else if (MyUser(cptr) && (chptr->mode.mode & MODE_WASDELJOINS))
     *mbuf++ = 'd';
+  if (chptr->mode.mode & MODE_REGISTERED)
+    *mbuf++ = 'R';
   if (chptr->mode.limit) {
     *mbuf++ = 'l';
     ircd_snprintf(0, pbuf, buflen, "%u", chptr->mode.limit);
@@ -1535,6 +1537,7 @@
     MODE_NOPRIVMSGS,   'n',
     MODE_REGONLY,      'r',
     MODE_DELJOINS,      'D',
+    MODE_REGISTERED,   'R',
 /*  MODE_KEY,          'k', */
 /*  MODE_BAN,          'b', */
     MODE_LIMIT,                'l',
@@ -1946,7 +1949,7 @@
 
   mode &= (MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET | MODE_MODERATED |
           MODE_TOPICLIMIT | MODE_INVITEONLY | MODE_NOPRIVMSGS | MODE_REGONLY |
-           MODE_DELJOINS | MODE_WASDELJOINS);
+           MODE_DELJOINS | MODE_WASDELJOINS | MODE_REGISTERED);
 
   if (!(mode & ~(MODE_ADD | MODE_DEL))) /* don't add empty modes... */
     return;
@@ -2092,6 +2095,7 @@
     MODE_KEY,          'k',
     MODE_APASS,                'A',
     MODE_UPASS,                'U',
+    MODE_REGISTERED,   'R',
 /*  MODE_BAN,          'b', */
     MODE_LIMIT,                'l',
     MODE_REGONLY,      'r',
@@ -3155,6 +3159,11 @@
   if (!state->mbuf)
     return;
 
+  /* Local users are not permitted to change registration status */
+  if (flag_p[0] == MODE_REGISTERED && !(state->flags & MODE_PARSE_FORCE) &&
+      MyUser(state->sptr))
+    return;
+
   if (state->dir == MODE_ADD) {
     state->add |= flag_p[0];
     state->del &= ~flag_p[0];
@@ -3198,6 +3207,7 @@
     MODE_KEY,          'k',
     MODE_APASS,                'A',
     MODE_UPASS,                'U',
+    MODE_REGISTERED,   'R',
     MODE_BAN,          'b',
     MODE_LIMIT,                'l',
     MODE_REGONLY,      'r',
Index: ircu2.10/ircd/ircd_features.c
diff -u ircu2.10/ircd/ircd_features.c:1.65 ircu2.10/ircd/ircd_features.c:1.66
--- ircu2.10/ircd/ircd_features.c:1.65  Sat Mar 15 18:52:58 2008
+++ ircu2.10/ircd/ircd_features.c       Thu Mar 20 11:22:16 2008
@@ -18,7 +18,7 @@
  */
 /** @file
  * @brief Implementation of configurable feature support.
- * @version $Id: ircd_features.c,v 1.65 2008/03/16 01:52:58 klmitch Exp $
+ * @version $Id: ircd_features.c,v 1.66 2008/03/20 18:22:16 klmitch Exp $
  */
 #include "config.h"
 
@@ -246,7 +246,7 @@
 static void
 set_isupport_chanmodes(void)
 {
-    add_isupport_s("CHANMODES", feature_bool(FEAT_OPLEVELS) ? 
"b,AkU,l,imnpstrDd" : "b,k,l,imnpstrDd");
+    add_isupport_s("CHANMODES", feature_bool(FEAT_OPLEVELS) ? 
"b,AkU,l,imnpstrDdR" : "b,k,l,imnpstrDdR");
 }
 
 static void
----------------------- End of diff -----------------------
_______________________________________________
Patches mailing list
[email protected]
http://undernet.sbg.org/mailman/listinfo/patches

Reply via email to