about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/ngircd/irc-channel.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/ngircd/irc-channel.c b/src/ngircd/irc-channel.c
index 78332ea1..4bd5a9d1 100644
--- a/src/ngircd/irc-channel.c
+++ b/src/ngircd/irc-channel.c
@@ -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 */