]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Implement channel mode 'V' (invite disallow)
authorDNS777 <dns@rbose.org>
Sat, 6 Oct 2012 18:49:35 +0000 (20:49 +0200)
committerAlexander Barton <alex@barton.de>
Sat, 6 Oct 2012 18:49:35 +0000 (20:49 +0200)
If the new channel mode "V" is set, the INVITE command becomes invalid
and all clients get the new ERR_NOINVITE_MSG(518) reply.

Unreal and InspIRCd uses this mode, too.

This closes bug #143.

doc/Modes.txt
src/ngircd/defines.h
src/ngircd/irc-mode.c
src/ngircd/irc-op.c
src/ngircd/messages.h

index e3b754d69815c1aaa0729177b25a80b35986d447..48ec5d95e98cbdc30e80f4aeb939b0955f680b02 100644 (file)
@@ -58,6 +58,7 @@ users to lists (e.g. "invite list", "ban list"), others have parameters
   R    19      Only registered users are allowed to join this channel.
   s    0.9.0   Channel is "secret".
   t    0.3.0   Only ChanOps are allowed to modify the channel topic.
+  V    20      Channel doesn't allow invites.
   z    16      Only users connected via SSL are allowed to join the channel.
 
 III. Channel User Modes
index ba7adf17adb204840418b7482b75fef975844138..1eb3337dfca4e65d09830befd58d9f55984744c3 100644 (file)
 #define USERMODES "aBcCiorRswx"
 
 /** Supported channel modes. */
-#define CHANMODES "abehiIklmMnoOPqrRstvz"
+#define CHANMODES "abehiIklmMnoOPqrRstvVz"
 
 /** Away message for users connected to linked servers. */
 #define DEFAULT_AWAY_MSG "Away"
index 04f50d77f8d3f5f832912f62dbd1b33211652ab5..a08d4d92b413ef05acc11ac1380c70197b67a497 100644 (file)
@@ -566,6 +566,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                goto chan_exit;
                        }
                case 'i': /* Invite only */
+               case 'V': /* Invite disallow */
                case 'M': /* Only identified nicks can write */
                case 'm': /* Moderated */
                case 'n': /* Only members can write */
index 08495475f60520c7dd899d7cef9e10b4f4852550..5c12faf78022ac8929d239029a4e7d2e8ff2fe47 100644 (file)
@@ -164,6 +164,11 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
                if (!Channel_IsMemberOf(chan, from))
                        return IRC_WriteStrClient(from, ERR_NOTONCHANNEL_MSG, Client_ID(Client), Req->argv[1]);
 
+               /* Is the channel "invite-disallow"? */
+               if (strchr(Channel_Modes(chan), 'V'))
+                       return IRC_WriteStrClient(from, ERR_NOINVITE_MSG,
+                               Client_ID(from), Channel_Name(chan));
+
                /* Is the channel "invite-only"? */
                if (strchr(Channel_Modes(chan), 'i')) {
                        /* Yes. The user must be channel owner/admin/operator/halfop! */
index 35d621a6e685f988007325f54974623093b54215..5c83c5cc7b4c77ee51139b0c6c2c7237d91c4ca1 100644 (file)
@@ -21,7 +21,7 @@
 #define RPL_YOURHOST_MSG               "002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)"
 #define RPL_CREATED_MSG                        "003 %s :This server has been started %s"
 #define RPL_MYINFO_MSG                 "004 %s %s ngircd-%s %s %s"
-#define RPL_ISUPPORT1_MSG              "005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPRstz CHANLIMIT=#&+:%d :are supported on this server"
+#define RPL_ISUPPORT1_MSG              "005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPRstVz CHANLIMIT=#&+:%d :are supported on this server"
 #define RPL_ISUPPORT2_MSG              "005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server"
 
 #define RPL_TRACELINK_MSG              "200 %s Link %s-%s %s %s V%s %ld %d %d"
 #define ERR_UMODEUNKNOWNFLAG_MSG       "501 %s :Unknown mode"
 #define ERR_UMODEUNKNOWNFLAG2_MSG      "501 %s :Unknown mode \"%c%c\""
 #define ERR_USERSDONTMATCH_MSG         "502 %s :Can't set/get mode for other users"
+#define ERR_NOINVITE_MSG               "518 %s :Cannot invite to %s (+V)"
 
 #ifdef ZLIB
 # define RPL_STATSLINKINFOZIP_MSG      "211 %s %s %d %ld %ld/%ld %ld %ld/%ld :%ld"