]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/core/m_join.c
Allow kick_on_split_riding to protect channels with mlocked keys.
[irc/rqf/shadowircd.git] / modules / core / m_join.c
index 94b13293f28130556b8a196e571c145f526d69fe..61fdf1838caa3e4b36992c1b5ba60cb009b23787 100644 (file)
@@ -46,8 +46,6 @@ static int me_svsjoin(struct Client *, struct Client *, int, const char **);
 static int ms_join(struct Client *, struct Client *, int, const char **);
 static int ms_sjoin(struct Client *, struct Client *, int, const char **);
 
-struct module_modes ModuleModes;
-
 struct Message join_msgtab = {
        "JOIN", 0, 0, 0, MFLG_SLOW,
        {mg_unreg, {m_join, 2}, {ms_join, 2}, mg_ignore, mg_ignore, {m_join, 2}}
@@ -396,12 +394,15 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
        {
                /* If configured, kick people trying to join +i/+k
                 * channels by recreating them on split servers.
-                * Don't kick if the source has sent EOB (services
-                * deopping everyone by TS-1 SJOIN).
+                * If the source has sent EOB, assume this is some
+                * sort of hack by services. If cmode +i is set,
+                * services can send kicks if needed; if the key
+                * differs, services cannot kick in a race-free
+                * manner so do so here.
                 * -- jilles */
                if (ConfigChannel.kick_on_split_riding &&
-                               !HasSentEob(source_p) &&
-                               ((mode.mode & MODE_INVITEONLY) ||
+                               ((!HasSentEob(source_p) &&
+                               mode.mode & MODE_INVITEONLY) ||
                    (mode.key[0] != 0 && irccmp(mode.key, oldmode->key) != 0)))
                {
                        struct membership *msptr;
@@ -830,7 +831,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
                                     CheckEmpty(para[2]), CheckEmpty(para[3]));
        }
 
-       if(!joins && !(chptr->mode.mode & ModuleModes.MODE_PERMANENT) && isnew)
+       if(!joins && !(chptr->mode.mode & MODE_PERMANENT) && isnew)
        {
                destroy_channel(chptr);
 
@@ -981,7 +982,7 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
                len = rb_sprintf(pbuf, "%d:%d ", mode->join_num, mode->join_time);
                pbuf += len;
        }
-       if(mode->forward[0] && strcmp(oldmode->forward, mode->forward) && ModuleModes.MODE_FORWARD)
+       if(mode->forward[0] && strcmp(oldmode->forward, mode->forward) && ConfigChannel.use_forward)
        {
                if(dir != MODE_ADD)
                {