Don't enforce channel types for other servers
authorAlexander Barton <alex@barton.de>
Tue, 3 Sep 2013 15:13:46 +0000 (17:13 +0200)
committerAlexander Barton <alex@barton.de>
Tue, 3 Sep 2013 15:13:46 +0000 (17:13 +0200)
The configuration option "AllowedChannelTypes" must only be enforced for
regular clients and not for remote servers. Channels created by other
servres are always allowed, because they already exist and the daemon
must stay in sync with the network.

src/ngircd/irc-channel.c

index 78332ea113e7706abb3d97bf35e26ff121adba87..4bd5a9d1ff30fb4a7e2cb7c909c68d21b93b06a5 100644 (file)
@@ -341,12 +341,6 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
                }
 
                chan = Channel_Search(channame);
-               if (!chan && !strchr(Conf_AllowedChannelTypes, channame[0])) {
-                        /* channel must be created, but forbidden by config */
-                       IRC_WriteErrClient(Client, ERR_NOSUCHCHANNEL_MSG,
-                                          Client_ID(Client), channame);
-                       goto join_next;
-               }
 
                /* Local client? */
                if (Client_Type(Client) == CLIENT_USER) {
@@ -354,6 +348,15 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
                                /* Already existing channel: already member? */
                                if (Channel_IsMemberOf(chan, Client))
                                    goto join_next;
+                       } else {
+                               /* Channel must be created */
+                               if (!strchr(Conf_AllowedChannelTypes, channame[0])) {
+                                       /* ... but channel type is not allowed! */
+                                       IRC_WriteErrClient(Client,
+                                               ERR_NOSUCHCHANNEL_MSG,
+                                               Client_ID(Client), channame);
+                                       goto join_next;
+                               }
                        }
 
                        /* Test if the user has reached the channel limit */