summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/ngircd/irc-channel.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/ngircd/irc-channel.c b/src/ngircd/irc-channel.c
index 196b5477..77deed7a 100644
--- a/src/ngircd/irc-channel.c
+++ b/src/ngircd/irc-channel.c
@@ -364,7 +364,7 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
 			 /* channel must be created, but forbidden by config */
 			IRC_WriteStrClient(Client, ERR_BANNEDFROMCHAN_MSG,
 					   Client_ID(Client), channame);
-			break;
+			goto join_next;
 		}
 
 		/* Local client? */
@@ -377,15 +377,19 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
 
 			/* Test if the user has reached the channel limit */
 			if ((Conf_MaxJoins > 0) &&
-			    (Channel_CountForUser(Client) >= Conf_MaxJoins))
-				return IRC_WriteStrClient(Client,
+			    (Channel_CountForUser(Client) >= Conf_MaxJoins)) {
+				if (!IRC_WriteStrClient(Client,
 						ERR_TOOMANYCHANNELS_MSG,
-						Client_ID(Client), channame);
+						Client_ID(Client), channame))
+					return DISCONNECTED;
+				goto join_next;
+			}
+
 			if (chan) {
 				/* Already existing channel: check if the
 				 * client is allowed to join */
 				if (!join_allowed(Client, chan, channame, key))
-					break;
+					goto join_next;
 			} else {
 				/* New channel: first user will become channel
 				 * operator unless this is a modeless channel */