diff options
-rw-r--r-- | docs/inspircd.conf.example | 9 | ||||
-rw-r--r-- | include/configreader.h | 3 | ||||
-rw-r--r-- | src/configreader.cpp | 11 | ||||
-rw-r--r-- | src/whois.cpp | 13 |
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")) { |