Change <security:operspywhois> to a tristate

This commit is contained in:
Daniel De Graaf 2010-03-22 17:33:06 -05:00
parent 13d719fe4c
commit b01c718405
4 changed files with 21 additions and 15 deletions

View File

@ -686,10 +686,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.

View File

@ -213,6 +213,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.
@ -401,7 +402,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;

View File

@ -21,7 +21,7 @@
ServerConfig::ServerConfig()
{
WhoWasGroupSize = WhoWasMaxGroups = WhoWasMaxKeep = 0;
RawLog = NoUserDns = OperSpyWhois = HideBans = HideSplits = UndernetMsgPrefix = NameOnlyModes = false;
RawLog = NoUserDns = HideBans = HideSplits = UndernetMsgPrefix = NameOnlyModes = false;
WildcardIPv6 = CycleHosts = InvBypassModes = true;
dns_timeout = 5;
MaxTargets = 20;
@ -417,7 +417,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");
@ -519,6 +518,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();
}

View File

@ -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"))
{