Hi Alex,

wieder gut aus dem Urlaub zurück gekommen? :)

Im #ngircd war vor einiger Zeit mal das Thema ob man Admins nicht immer 
WHO auf einen channel erlauben sollte (nachdem das wohl andere IRC 
Server auch so machen). Das Patch im Anhang würde das umsetzen, fände 
ich selbst ganz praktisch.

Michi



From c889ae0f2ba846f3e2138d5bb6ff368caf483924 Mon Sep 17 00:00:00 2001
From: michi <michi+ngircd@dataswamp.org>
Date: Tue, 23 Mar 2021 10:08:58 +0100
Subject: [PATCH] Allow ircops to use WHO on any channel.

---
 src/ngircd/irc-info.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c
index 82bd5518..03127b22 100644
--- a/src/ngircd/irc-info.c
+++ b/src/ngircd/irc-info.c
@@ -138,7 +138,7 @@ who_flags_qualifier(CLIENT *Client, const char *chan_user_modes,
 static bool
 IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
 {
-	bool is_visible, is_member, is_ircop;
+	bool is_visible, is_member, is_ircop, is_oper;
 	CL2CHAN *cl2chan;
 	char flags[10];
 	CLIENT *c;
@@ -148,9 +148,10 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
 	assert( Chan != NULL );
 
 	is_member = Channel_IsMemberOf(Chan, Client);
+	is_oper = Client_HasMode(Client, 'o');
 
 	/* Secret channel? */
-	if (!is_member && Channel_HasMode(Chan, 's'))
+	if (!is_member && !is_oper && Channel_HasMode(Chan, 's'))
 		return IRC_WriteStrClient(Client, RPL_ENDOFWHO_MSG,
 					  Client_ID(Client), Channel_Name(Chan));
 
@@ -163,7 +164,7 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
 			continue;
 
 		is_visible = !Client_HasMode(c, 'i');
-		if (is_member || is_visible) {
+		if (is_member || is_visible || is_oper) {
 			memset(flags, 0, sizeof(flags));
 
 			if (Client_HasMode(c, 'a'))
-- 
2.30.1

