From 12cd554af1709c44f35024d7d2fc368fb22f133d Mon Sep 17 00:00:00 2001 From: Ali Shemiran Date: Fri, 9 May 2008 21:47:31 +0200 Subject: [PATCH] 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. --- ChangeLog | 2 ++ src/ngircd/irc-info.c | 2 +- src/testsuite/ngircd-test.conf | 5 +++++ src/testsuite/who-test.e | 10 ++++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 64807e7f..6213d7a1 100644 --- a/ChangeLog +++ b/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. diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c index 93c43f6a..86e1ace2 100644 --- a/src/ngircd/irc-info.c +++ b/src/ngircd/irc-info.c @@ -738,7 +738,7 @@ IRC_Send_WHO(CLIENT *Client, CHANNEL *Chan, bool OnlyOps) /* 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)) { diff --git a/src/testsuite/ngircd-test.conf b/src/testsuite/ngircd-test.conf index eeace761..4d918e0e 100644 --- a/src/testsuite/ngircd-test.conf +++ b/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- diff --git a/src/testsuite/who-test.e b/src/testsuite/who-test.e index aafa7956..2e148447 100644 --- a/src/testsuite/who-test.e +++ b/src/testsuite/who-test.e @@ -152,6 +152,16 @@ 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 {