]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
Enforce TS rules on MLOCKs.
authorWilliam Pitcock <redacted>
Tue, 24 Aug 2010 01:22:59 +0000 (20:22 -0500)
committerWilliam Pitcock <redacted>
Tue, 24 Aug 2010 01:22:59 +0000 (20:22 -0500)
include/channel.h
modules/core/m_mode.c
src/chmode.c

index d471e6cd0511831609c10f856bdaa1a5fc6bc7e4..268d4db1e7dfbe90bd173361cd4a9d24eaa77126 100644 (file)
@@ -293,7 +293,7 @@ void resv_chan_forcepart(const char *name, const char *reason, int temp_time);
 extern void set_channel_mode(struct Client *client_p, struct Client *source_p,
                struct Channel *chptr, struct membership *msptr, int parc, const char *parv[]);
 extern void set_channel_mlock(struct Client *client_p, struct Client *source_p,
-               struct Channel *chptr, const char *newmlock);
+               struct Channel *chptr, const char *newmlock, int propagate);
 
 extern struct ChannelMode chmode_table[256];
 
index e00eff2a08b2472fdaece035fa01bf2837d6bc8f..53455199b050fe762cebb74e68247e617b977a44 100644 (file)
@@ -236,7 +236,7 @@ ms_mlock(struct Client *client_p, struct Client *source_p, int parc, const char
                return 0;
 
        if(IsServer(source_p))
-               set_channel_mlock(client_p, source_p, chptr, parv[3]);
+               set_channel_mlock(client_p, source_p, chptr, parv[3], TRUE);
 
        return 0;
 }
index a99b586a3f95ee925161d67523d468c6abd26907..14aebcce4cdb260a62fc3cb3f6de4bccf8d9b774 100644 (file)
@@ -2087,7 +2087,7 @@ set_channel_mode(struct Client *client_p, struct Client *source_p,
                        /* If this mode char is locked, don't allow local users to change it. */
                        if (MyClient(source_p) && chptr->mode_lock && strchr(chptr->mode_lock, c))
                        {
-                               sendto_one_numeric(source_p, ERR_MLOCKRESTRICTED, form_str(ERR_MLOCKRESTRICTED), chptr->name, c, chptr->mode_lock);
+                               sendto_one_numeric(source_p, ERR_MLOCKRESTRICTED, form_str(ERR_MLOCKRESTRICTED), chptr->chname, c, chptr->mode_lock);
                                continue;
                        }
                        chmode_table[(unsigned char) c].set_func(fakesource_p, chptr, alevel,
@@ -2246,12 +2246,15 @@ set_channel_mode(struct Client *client_p, struct Client *source_p,
  */
 void
 set_channel_mlock(struct Client *client_p, struct Client *source_p,
-                 struct Channel *chptr, const char *newmlock)
+                 struct Channel *chptr, const char *newmlock, int propagate)
 {
        rb_free(chptr->mode_lock);
        chptr->mode_lock = newmlock ? rb_strdup(newmlock) : NULL;
 
-       sendto_server(client_p, NULL, CAP_TS6 | CAP_MLOCK, NOCAPS, ":%s MLOCK %ld %s :%s",
-                     source_p->id, (long) chptr->channelts, chptr->chname,
-                     chptr->mode_lock ? chptr->mode_lock : "");
+       if (propagate)
+       {
+               sendto_server(client_p, NULL, CAP_TS6 | CAP_MLOCK, NOCAPS, ":%s MLOCK %ld %s :%s",
+                             source_p->id, (long) chptr->channelts, chptr->chname,
+                             chptr->mode_lock ? chptr->mode_lock : "");
+       }
 }