summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/inspircd.conf.example9
-rw-r--r--include/configreader.h3
-rw-r--r--src/configreader.cpp11
-rw-r--r--src/whois.cpp13
4 files changed, 21 insertions, 15 deletions
diff --git a/docs/inspircd.conf.example b/docs/inspircd.conf.example
index 1f31f6980..a82e8025f 100644
--- a/docs/inspircd.conf.example
+++ b/docs/inspircd.conf.example
@@ -681,10 +681,11 @@
# the ircd. This may be set for security reasons or vanity reasons.
customversion=""
- # operspywhois: If this is set to yes, when a oper /whois 's a user,
- # it will show all channels the user is in including +s and +p
- # channels.
- operspywhois="no"
+ # operspywhois: show opers (users/auspex) the +s channels a user is in. Values:
+ # splitmsg Split with an explanatory message
+ # yes Split with no explanatory message
+ # no Do not show
+ operspywhois="no"
# runasuser: If this is set, InspIRCd will attempt to setuid
# to run as this user- allows binding of ports under 1024.
diff --git a/include/configreader.h b/include/configreader.h
index 6cd355176..d2f5d2610 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -216,6 +216,7 @@ class CoreExport ServerConfig
/** Used to indicate who we announce invites to on a channel */
enum InviteAnnounceState { INVITE_ANNOUNCE_NONE, INVITE_ANNOUNCE_ALL, INVITE_ANNOUNCE_OPS, INVITE_ANNOUNCE_DYNAMIC };
+ enum OperSpyWhoisState { SPYWHOIS_NONE, SPYWHOIS_NEWLINE, SPYWHOIS_SPLITMSG };
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
@@ -428,7 +429,7 @@ class CoreExport ServerConfig
/** If this is enabled then operators will
* see invisible (+i) channels in /whois.
*/
- bool OperSpyWhois;
+ OperSpyWhoisState OperSpyWhois;
/** True if raw I/O is being logged */
bool RawLog;
diff --git a/src/configreader.cpp b/src/configreader.cpp
index c93e37e1f..79c70405c 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -21,7 +21,7 @@
ServerConfig::ServerConfig()
{
WhoWasGroupSize = WhoWasMaxGroups = WhoWasMaxKeep = 0;
- RawLog = NoUserDns = OperSpyWhois = HideBans = HideSplits = UndernetMsgPrefix = false;
+ RawLog = NoUserDns = HideBans = HideSplits = UndernetMsgPrefix = false;
WildcardIPv6 = CycleHosts = InvBypassModes = true;
dns_timeout = 5;
MaxTargets = 20;
@@ -476,7 +476,6 @@ void ServerConfig::Fill()
HideBans = security->getBool("hidebans");
HideWhoisServer = security->getString("hidewhois");
HideKillsServer = security->getString("hidekills");
- OperSpyWhois = security->getBool("operspywhois");
RestrictBannedUsers = security->getBool("restrictbannedusers", true);
GenericOper = security->getBool("genericoper");
NoUserDns = ConfValue("performance")->getBool("nouserdns");
@@ -588,6 +587,14 @@ void ServerConfig::Fill()
else
AnnounceInvites = ServerConfig::INVITE_ANNOUNCE_NONE;
+ v = security->getString("operspywhois");
+ if (v == "splitmsg")
+ OperSpyWhois = SPYWHOIS_SPLITMSG;
+ else if (v == "on" || v == "yes")
+ OperSpyWhois = SPYWHOIS_NEWLINE;
+ else
+ OperSpyWhois = SPYWHOIS_NONE;
+
Limits.Finalise();
}
diff --git a/src/whois.cpp b/src/whois.cpp
index 8f85d86cc..4aa5e4726 100644
--- a/src/whois.cpp
+++ b/src/whois.cpp
@@ -23,16 +23,13 @@ void InspIRCd::DoWhois(User* user, User* dest,unsigned long signon, unsigned lon
std::string cl = dest->ChannelList(user, false);
- if (cl.length())
- user->SplitChanList(dest,cl);
- if (IS_OPER(user) && ServerInstance->Config->OperSpyWhois)
+ user->SplitChanList(dest,cl);
+ if (user->HasPrivPermission("users/auspex") && ServerInstance->Config->OperSpyWhois != ServerConfig::SPYWHOIS_NONE)
{
std::string scl = dest->ChannelList(user, true);
- if (scl.length())
- {
- this->SendWhoisLine(user, dest, 336, "%s %s :is on private/secret channels:",user->nick.c_str(), dest->nick.c_str());
- user->SplitChanList(dest,scl);
- }
+ if (scl.length() && ServerInstance->Config->OperSpyWhois == ServerConfig::SPYWHOIS_SPLITMSG)
+ SendWhoisLine(user, dest, 336, "%s %s :is on private/secret channels:",user->nick.c_str(), dest->nick.c_str());
+ user->SplitChanList(dest,scl);
}
if (user != dest && !this->Config->HideWhoisServer.empty() && !user->HasPrivPermission("servers/auspex"))
{