Commit Diff


commit - 52825cde29afdbee0d186a0bb33d36c9afed6416
commit + 81b81c818cb60abe8bcfb1cd22769ae831b942e7
blob - 79ab2ebe94beaa41b904b01b1493a83d125e5e25
blob + cde573bf83faa98db98e9702bdd234f5fbe21203
--- src/ngircd/irc-mode.c
+++ src/ngircd/irc-mode.c
@@ -377,38 +377,45 @@ Channel_Mode_Answer_Request(CLIENT *Origin, CHANNEL *C
 {
 	char the_modes[COMMAND_LEN], the_args[COMMAND_LEN], argadd[CLIENT_PASS_LEN];
 	const char *mode_ptr;
-
-	/* Member or not? -- That's the question! */
-	if (!Channel_IsMemberOf(Channel, Origin))
-		return IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
-			Client_ID(Origin), Channel_Name(Channel), Channel_Modes(Channel));
 
-	/* The sender is a member: generate extended reply */
-	strlcpy(the_modes, Channel_Modes(Channel), sizeof(the_modes));
-	mode_ptr = the_modes;
-	the_args[0] = '\0';
+	if (!Channel_IsMemberOf(Channel, Origin)) {
+		/* Not a member: "simple" mode reply */
+		if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
+					Client_ID(Origin), Channel_Name(Channel),
+					Channel_Modes(Channel)))
+			return DISCONNECTED;
+	} else {
+		/* The sender is a member: generate extended reply */
+		strlcpy(the_modes, Channel_Modes(Channel), sizeof(the_modes));
+		mode_ptr = the_modes;
+		the_args[0] = '\0';
 
-	while(*mode_ptr) {
-		switch(*mode_ptr) {
-		case 'l':
-			snprintf(argadd, sizeof(argadd), " %lu", Channel_MaxUsers(Channel));
-			strlcat(the_args, argadd, sizeof(the_args));
-			break;
-		case 'k':
-			strlcat(the_args, " ", sizeof(the_args));
-			strlcat(the_args, Channel_Key(Channel), sizeof(the_args));
-			break;
-		}
-		mode_ptr++;
-	}
-	if (the_args[0])
-		strlcat(the_modes, the_args, sizeof(the_modes));
-
-	if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
-				Client_ID(Origin), Channel_Name(Channel),
-				the_modes))
-		return DISCONNECTED;
+		while(*mode_ptr) {
+			switch(*mode_ptr) {
+			case 'l':
+				snprintf(argadd, sizeof(argadd), " %lu",
+					 Channel_MaxUsers(Channel));
+				strlcat(the_args, argadd, sizeof(the_args));
+				break;
+			case 'k':
+				strlcat(the_args, " ", sizeof(the_args));
+				strlcat(the_args, Channel_Key(Channel),
+					sizeof(the_args));
+				break;
+			}
+			mode_ptr++;
+		}
+		if (the_args[0])
+			strlcat(the_modes, the_args, sizeof(the_modes));
+
+		if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
+					Client_ID(Origin), Channel_Name(Channel),
+					the_modes))
+			return DISCONNECTED;
+	}
+
 #ifndef STRICT_RFC
+	/* Channel creation time */
 	if (!IRC_WriteStrClient(Origin, RPL_CREATIONTIME_MSG,
 				  Client_ID(Origin), Channel_Name(Channel),
 				  Channel_CreationTime(Channel)))