mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-12 03:59:03 -04:00
Add configuration option <options:operspywhois> to set if opers see invisble and private channels in /whois, also clean up the code for whois a bit, removing more uneccessary casts.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3789 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
c73bb5d2ca
commit
2c228fe6eb
@ -256,6 +256,11 @@ class ServerConfig : public classbase
|
||||
*/
|
||||
bool HideBans;
|
||||
|
||||
/** If this is enabled then operators will
|
||||
* see invisible (+i) channels in /whois.
|
||||
*/
|
||||
bool OperSpyWhois;
|
||||
|
||||
/** Set to a non-empty string to obfuscate the server name of users in WHOIS
|
||||
*/
|
||||
char HideWhoisServer[MAXBUF];
|
||||
|
@ -545,12 +545,13 @@ void ServerConfig::Read(bool bail, userrec* user)
|
||||
{"dns", "server", &this->DNSServer, DT_CHARPTR, ValidateDnsServer},
|
||||
{"dns", "timeout", &this->dns_timeout, DT_INTEGER, ValidateDnsTimeout},
|
||||
{"options", "moduledir", &this->ModPath, DT_CHARPTR, ValidateModPath},
|
||||
{"disabled", "commands", &this->DisabledCommands, DT_CHARPTR, NoValidation},
|
||||
{"disabled", "commands", &this->DisabledCommands,DT_CHARPTR, NoValidation},
|
||||
{"options", "operonlystats", &this->OperOnlyStats, DT_CHARPTR, NoValidation},
|
||||
{"options", "customversion", &this->CustomVersion, DT_CHARPTR, NoValidation},
|
||||
{"options", "hidesplits", &this->HideSplits, DT_BOOLEAN, NoValidation},
|
||||
{"options", "hidebans", &this->HideBans, DT_BOOLEAN, NoValidation},
|
||||
{"options", "hidewhois", &this->HideWhoisServer, DT_CHARPTR, NoValidation},
|
||||
{"options", "operspywhois", &this->OperSpyWhois, DT_BOOLEAN, NoValidation},
|
||||
{"options", "tempdir", &this->TempDir, DT_CHARPTR, ValidateTempDir},
|
||||
{"pid", "file", &this->PID, DT_CHARPTR, NoValidation},
|
||||
{NULL}
|
||||
@ -1677,4 +1678,3 @@ int BindPorts(bool bail)
|
||||
|
||||
return BoundPortCount;
|
||||
}
|
||||
|
||||
|
@ -400,29 +400,35 @@ char lst[MAXBUF];
|
||||
|
||||
std::string chlist(userrec *user,userrec* source)
|
||||
{
|
||||
std::string cmp = "";
|
||||
std::string lst = "";
|
||||
/* Should this be a stringstream? Not sure if it would be faster as streams are more oriented at appending stuff, which is all we do */
|
||||
std::string lst;
|
||||
|
||||
if (!user || !source)
|
||||
{
|
||||
return lst;
|
||||
}
|
||||
bool userinvisible = (user->modebits & UM_INVISIBLE);
|
||||
|
||||
for (std::vector<ucrec*>::const_iterator i = user->chans.begin(); i != user->chans.end(); i++)
|
||||
{
|
||||
if ((((ucrec*)(*i))->channel != NULL) && (((ucrec*)(*i))->channel->name))
|
||||
{
|
||||
cmp = std::string(((ucrec*)(*i))->channel->name) + " ";
|
||||
if (!strstr(lst.c_str(),cmp.c_str()))
|
||||
ucrec* rec = *i;
|
||||
|
||||
if(rec->channel && rec->channel->name)
|
||||
{
|
||||
/* XXX - Why does this check need to be here at all? :< */
|
||||
/* Commenting this out until someone finds a case where we need it */
|
||||
//if (lst.find(rec->channel->name) == std::string::npos)
|
||||
//{
|
||||
// if the channel is NOT private/secret, OR the source user is on the channel, AND the user is not invisible.
|
||||
// if the user is the same as the source, shortcircuit the comparison.
|
||||
if ((source == user) || ((((!(((ucrec*)(*i))->channel->modes[CM_PRIVATE])) && (!(((ucrec*)(*i))->channel->modes[CM_SECRET])) && (!userinvisible)) || (((ucrec*)(*i))->channel->HasUser(source)))))
|
||||
// if the user is the same as the source or is an oper, shortcircuit the comparison.
|
||||
if ((source == user) || (*source->oper && Config->OperSpyWhois) || (((!rec->channel->modes[CM_PRIVATE]) && (!rec->channel->modes[CM_SECRET]) && !(user->modebits & UM_INVISIBLE)) || (rec->channel->HasUser(source))))
|
||||
{
|
||||
lst = lst + std::string(cmode(user,((ucrec*)(*i))->channel)) + std::string(((ucrec*)(*i))->channel->name) + " ";
|
||||
}
|
||||
}
|
||||
lst += cmode(user, rec->channel);
|
||||
lst += rec->channel->name;
|
||||
lst += " ";
|
||||
}
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
return lst;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user