commit 12cd554af1709c44f35024d7d2fc368fb22f133d from: Ali Shemiran via: Florian Westphal date: Fri May 09 19:47:31 2008 UTC Fix secret channel information leak /who on a secret channel that the user is not a member of now returns proper RPL_ENDOFWHO_MSG instead of nothing. commit - 5cf5ba31eb0cae6c28d5754f6e62956f83582b06 commit + 12cd554af1709c44f35024d7d2fc368fb22f133d blob - 64807e7fec6e2367927f93b1e83c241a09e03f7b blob + 6213d7a13c5fb5d0ed7e2cd8f880e50e872d1003 --- ChangeLog +++ ChangeLog @@ -12,6 +12,8 @@ ngIRCd-dev + - Fix Bug: 85: "WHO #SecretChannel" that user is not a member of now returns + proper RPL_ENDOFWHO_MSG instead of nothing. (Ali Shemiran) - Implemented IRC commands SERVICE, SERVLIST, and SQUERY as dummy functions to be even more RFC-compliant. Closes bug 74. - Fixed Bug 75: KICK now handles comma-delimited lists. blob - 93c43f6a35744f65c01ec054cec00f37d839be21 blob + 86e1ace2a56ef0efe49fcce8580ab09e60b50ca2 --- src/ngircd/irc-info.c +++ src/ngircd/irc-info.c @@ -738,7 +738,7 @@ IRC_Send_WHO(CLIENT *Client, CHANNEL *Chan, bool OnlyO /* Secret channel? */ if (!is_member && strchr(Channel_Modes(Chan), 's')) - return CONNECTED; + return IRC_WriteStrClient(Client, RPL_ENDOFWHO_MSG, Client_ID(Client), Channel_Name(Chan)); cl2chan = Channel_FirstMember(Chan); for (; cl2chan ; cl2chan = Channel_NextMember(Chan, cl2chan)) { blob - eeace761a0a9d70a1414a4cb7b2b4a4a6a42ac5f blob + 4d918e0eec1d0975e17adfe387a1c9fa6efca096 --- src/testsuite/ngircd-test.conf +++ src/testsuite/ngircd-test.conf @@ -28,5 +28,10 @@ Name = #TopicChannel Modes = t Topic = the topic + +[CHANNEL] + Name = #SecretChannel + Modes = s + Topic = A secret Channel # -eof- blob - aafa7956cee5ebeacc4538796d05f80559967ebe blob + 2e1484479195988d00f14772b42e00f6d3ac9d91 --- src/testsuite/who-test.e +++ src/testsuite/who-test.e @@ -152,7 +152,17 @@ expect { timeout { exit 1 } ":ngircd.test.server 352 nick \* * localhost ngircd.test.server nick H\* :0 Real Name" } +expect { + timeout { exit 1 } + "315" +} +send "who #SecretChannel\r" +expect { + timeout { exit 1 } + "315" +} + send "quit\r" expect { timeout { exit 1 }