repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 12cd554af1709c44f35024d7d2fc368fb22f133d:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 12cd554af1709c44f35024d7d2fc368fb22f133d
Author: Ali Shemiran 
Date:   Fri May 9 21:47:31 2008 +0200

    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.

diff --git a/ChangeLog b/ChangeLog
index 64807e7fec6e2367927f93b1e83c241a09e03f7b..
index ..6213d7a13c5fb5d0ed7e2cd8f880e50e872d1003 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 93c43f6a35744f65c01ec054cec00f37d839be21..
index ..86e1ace2a56ef0efe49fcce8580ab09e60b50ca2 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 eeace761a0a9d70a1414a4cb7b2b4a4a6a42ac5f..
index ..4d918e0eec1d0975e17adfe387a1c9fa6efca096 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 aafa7956cee5ebeacc4538796d05f80559967ebe..
index ..2e1484479195988d00f14772b42e00f6d3ac9d91 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 {

-----END OF PAGE-----