Commit Diff


commit - 4102e8fdfea33a5d8c398c98db90914c5dc29610
commit + aad92ceafe8b4b0091867415504f83930a74428b
blob - 78332ea113e7706abb3d97bf35e26ff121adba87
blob + 4bd5a9d1ff30fb4a7e2cb7c909c68d21b93b06a5
--- src/ngircd/irc-channel.c
+++ 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 */