fixed MODE_REGISTERED bug; introduced MCP_REGISTERED
authoradam <adam@gamesurge.net>
Tue, 8 Jun 2004 09:24:49 +0000 (09:24 +0000)
committeradam <adam@gamesurge.net>
Tue, 8 Jun 2004 09:24:49 +0000 (09:24 +0000)
* fixed MODE_REGISTERED bug: srvx was sending a blank mode change on channel unregistrations; we now have a srvx.conf setting that dictates whether or not to use MODE_REGISTERED (which has no corresponding letter on P10 networks!) - also, we now set MODE_REGISTERED in newly registered channels (which we werent before)

* introduced MCP_REGISTERED: we now don't let channels that are registered play with the registered mode (usually +r on bahamut networks) via chanserv user-level commands (ie: !mode -r)

git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-68

ChangeLog
src/chanserv.c
src/proto-bahamut.c
src/proto.h
srvx.conf.example

index 34364d6628dae4859ab43ddb7f0d2aef0fa84fdd..b3bda78c0a4a609fcabcc344b90c1f70490d89fc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,25 @@
 # arch-tag: automatic-ChangeLog--srvx@srvx.net--2004-srvx/srvx--devo--1.3
 #
 
+2004-06-08 09:24:49 GMT        adam <adam@gamesurge.net>       patch-68
+
+    Summary:
+      fixed MODE_REGISTERED bug; introduced MCP_REGISTERED 
+    Revision:
+      srvx--devo--1.3--patch-68
+
+    * fixed MODE_REGISTERED bug: srvx was sending a blank mode change on channel unregistrations; we now have a srvx.conf setting that dictates whether or not to use MODE_REGISTERED (which has no corresponding letter on P10 networks!) - also, we now set MODE_REGISTERED in newly registered channels (which we werent before)
+    
+    * introduced MCP_REGISTERED: we now don't let channels that are registered play with the registered mode (usually +r on bahamut networks) via chanserv user-level commands (ie: !mode -r) 
+    
+    
+    
+
+    modified files:
+     ChangeLog src/chanserv.c src/proto-bahamut.c src/proto.h
+     srvx.conf.example
+
+
 2004-05-22 04:24:57 GMT        Michael Poole <mdpoole@troilus.org>     patch-67
 
     Summary:
index 60f8991681d7778b00ba994e46a4de1b61368eaa..7c629f6780f0af6d380dedcb44081968e2f9697c 100644 (file)
@@ -500,6 +500,8 @@ static struct
     unsigned int       max_chan_bans;
     unsigned int        max_userinfo_length;
 
+    unsigned int       use_registered_mode;
+
     struct string_list  *set_shows;
     struct string_list  *eightball;
     struct string_list  *old_ban_names;
@@ -1287,9 +1289,11 @@ unregister_channel(struct chanData *channel, const char *reason)
 
     timeq_del(0, NULL, channel, TIMEQ_IGNORE_FUNC | TIMEQ_IGNORE_WHEN);
 
-    mod_chanmode_init(&change);
-    change.modes_clear |= MODE_REGISTERED;
-    mod_chanmode_announce(chanserv, channel->channel, &change);
+    if (chanserv_conf.use_registered_mode) {
+      mod_chanmode_init(&change);
+      change.modes_clear |= MODE_REGISTERED;
+      mod_chanmode_announce(chanserv, channel->channel, &change);
+    }
 
     while(channel->users)
        del_channel_user(channel->users, 0);
@@ -1745,6 +1749,8 @@ static CHANSERV_FUNC(cmd_register)
     cData = register_channel(channel, user->handle_info->handle);
     scan_user_presence(add_channel_user(cData, handle, UL_OWNER, 0, NULL), NULL);
     cData->modes = chanserv_conf.default_modes;
+    if (chanserv_conf.use_registered_mode)
+      cData->modes.modes_set |= MODE_REGISTERED;
     change = mod_chanmode_dup(&cData->modes, 1);
     change->args[change->argc].mode = MODE_CHANOP;
     change->args[change->argc].member = AddChannelUser(chanserv, channel);
@@ -3733,7 +3739,7 @@ static CHANSERV_FUNC(cmd_mode)
        return 1;
     }
 
-    change = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE);
+    change = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE|MCP_REGISTERED);
     if(!change)
     {
        reply("MSG_INVALID_MODES", unsplit_string(argv+1, argc-1, NULL));
@@ -4853,7 +4859,7 @@ static MODCMD_FUNC(chan_opt_modes)
        {
             memset(&channel->channel_info->modes, 0, sizeof(channel->channel_info->modes));
        }
-       else if(!(new_modes = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE)))
+       else if(!(new_modes = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE|MCP_REGISTERED)))
        {
             reply("CSMSG_INVALID_MODE_LOCK", unsplit_string(argv+1, argc-1, NULL));
             return 0;
@@ -6436,6 +6442,8 @@ chanserv_conf_read(void)
      * parse issue. */
     str = database_get_data(conf_node, "off_channel", RECDB_QSTRING);
     off_channel = (str && enabled_string(str)) ? 1 : 0;
+    str = database_get_data(conf_node, "use_registered_mode", RECDB_QSTRING);
+    chanserv_conf.use_registered_mode = (str && enabled_string(str)) ? 1 : 0;
 }
 
 static void
@@ -6740,7 +6748,8 @@ chanserv_channel_read(const char *key, struct record_data *hir)
        && (argc = split_line(str, 0, ArrayLength(argv), argv))
        && (modes = mod_chanmode_parse(cNode, argv, argc, MCP_KEY_FREE))) {
         cData->modes = *modes;
-        cData->modes.modes_set |= MODE_REGISTERED;
+       if (chanserv_conf.use_registered_mode)
+          cData->modes.modes_set |= MODE_REGISTERED;
         if(cData->modes.argc > 1)
             cData->modes.argc = 1;
         mod_chanmode_announce(chanserv, cNode, &cData->modes);
index 84531b0859eeaeaac9f2cc5f3fd6ba1b779d27fe..ee649b1b15ab27706b9dc1de56d36afb6e5134c9 100644 (file)
@@ -1255,6 +1255,14 @@ mod_chanmode_parse(struct chanNode *channel, char **modes, unsigned int argc, un
         case 'p': do_chan_mode(MODE_PRIVATE); break;
         case 's': do_chan_mode(MODE_SECRET); break;
         case 't': do_chan_mode(MODE_TOPICLIMIT); break;
+       case 'r':
+           if (!(flags & MCP_REGISTERED)) {
+            do_chan_mode(MODE_REGISTERED);
+           } else {
+            mod_chanmode_free(change);
+            return NULL;
+           }
+           break;
 #undef do_chan_mode
         case 'l':
             if (add) {
index d95144f4e5649f34cda6f31f67090e720795d5b4..3b60c7221745b2cd13fad53d7295388f311a0258 100644 (file)
@@ -205,6 +205,7 @@ struct mod_chanmode {
 #define MCP_ALLOW_OVB     0x0001 /* allow op, voice, ban manipulation */
 #define MCP_FROM_SERVER   0x0002 /* parse as from a server */
 #define MCP_KEY_FREE      0x0004 /* -k without a key argument */
+#define MCP_REGISTERED   0x0008 /* chan is already registered; do not allow changes to MODE_REGISTERED */
 #define MC_ANNOUNCE       0x0100 /* send a mod_chanmode() change out */
 #define MC_NOTIFY         0x0200 /* make local callbacks to announce */
 #ifdef NDEBUG
index b016ea0fd3812d446f80ae989422431aed70bc61..3bd2d60525681bf32d637eb411fe7ead81b9371d 100644 (file)
         // Does your ircd have off-channel services support?
         // Bahamut does; ircu2.10.11 does not.
         "off_channel" "no";
+       // Does your ircd have a mode for registered channels?
+       // Bahamut does; ircu2.10.11 does not.
+       "use_registered_mode" "no";
         // how long should a person be unseen before resending infoline?
         "info_delay" "120";
         // maximum greeting length