mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Separate spy channels [jackmcbarn]
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11747 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
792d6d6725
commit
a068c47d71
@ -865,12 +865,12 @@ class CoreExport User : public EventHandler
|
||||
*/
|
||||
void SendAll(const char* command, const char* text, ...) CUSTOM_PRINTF(3, 4);
|
||||
|
||||
/** Compile a channel list for this user, and send it to the user 'source'
|
||||
* Used internally by WHOIS
|
||||
* @param The user to send the channel list to if it is not too long
|
||||
/** Compile a channel list for this user. Used internally by WHOIS
|
||||
* @param source The user to prepare the channel list for
|
||||
* @param spy Whether to return the spy channel list rather than the normal one
|
||||
* @return This user's channel list
|
||||
*/
|
||||
std::string ChannelList(User* source);
|
||||
std::string ChannelList(User* source, bool spy);
|
||||
|
||||
/** Split the channel list in cl which came from dest, and spool it to this user
|
||||
* Used internally by WHOIS
|
||||
|
@ -115,7 +115,12 @@ class CommandCheck : public Command
|
||||
else
|
||||
ServerInstance->DumpText(user, checkstr + " onip " + targuser->GetIPString());
|
||||
|
||||
chliststr = targuser->ChannelList(targuser);
|
||||
for (UCListIter i = targuser->chans.begin(); i != targuser->chans.end(); i++)
|
||||
{
|
||||
Channel* c = *i;
|
||||
chliststr.append(c->GetPrefixChar(targuser)).append(c->name).append(" ");
|
||||
}
|
||||
|
||||
std::stringstream dump(chliststr);
|
||||
|
||||
ServerInstance->DumpText(user,checkstr + " onchans", dump);
|
||||
|
@ -1661,21 +1661,18 @@ void User::SendAll(const char* command, const char* text, ...)
|
||||
}
|
||||
|
||||
|
||||
std::string User::ChannelList(User* source)
|
||||
std::string User::ChannelList(User* source, bool spy)
|
||||
{
|
||||
std::string list;
|
||||
|
||||
for (UCListIter i = this->chans.begin(); i != this->chans.end(); i++)
|
||||
{
|
||||
Channel* c = *i;
|
||||
/* If the target is the same as the sender, let them see all their channels.
|
||||
* If the channel is NOT private/secret OR the user shares a common channel
|
||||
* If the user is an oper, and the <options:operspywhois> option is set.
|
||||
/* If the target is the sender, neither +p nor +s is set, or
|
||||
* the channel contains the user, it is not a spy channel
|
||||
*/
|
||||
if ((source == this) || (IS_OPER(source) && ServerInstance->Config->OperSpyWhois) || (((!c->IsModeSet('p')) && (!c->IsModeSet('s'))) || (c->HasUser(source))))
|
||||
{
|
||||
if (spy != (source == this || !(c->IsModeSet('p') || c->IsModeSet('s')) || c->HasUser(source)))
|
||||
list.append(c->GetPrefixChar(this)).append(c->name).append(" ");
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
|
@ -21,7 +21,7 @@ void InspIRCd::DoWhois(User* user, User* dest,unsigned long signon, unsigned lon
|
||||
this->SendWhoisLine(user, dest, 378, "%s %s :is connecting from %s@%s %s", user->nick.c_str(), dest->nick.c_str(), dest->ident.c_str(), dest->host.c_str(), dest->GetIPString());
|
||||
}
|
||||
|
||||
std::string cl = dest->ChannelList(user);
|
||||
std::string cl = dest->ChannelList(user, false);
|
||||
|
||||
if (cl.length())
|
||||
{
|
||||
@ -34,6 +34,22 @@ void InspIRCd::DoWhois(User* user, User* dest,unsigned long signon, unsigned lon
|
||||
this->SendWhoisLine(user, dest, 319, "%s %s :%s",user->nick.c_str(), dest->nick.c_str(), cl.c_str());
|
||||
}
|
||||
}
|
||||
if (IS_OPER(user) && ServerInstance->Config->OperSpyWhois)
|
||||
{
|
||||
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());
|
||||
if (scl.length() > 400)
|
||||
{
|
||||
user->SplitChanList(dest,scl);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->SendWhoisLine(user, dest, 319, "%s %s :%s",user->nick.c_str(), dest->nick.c_str(), scl.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (user != dest && *this->Config->HideWhoisServer && !user->HasPrivPermission("servers/auspex"))
|
||||
{
|
||||
this->SendWhoisLine(user, dest, 312, "%s %s %s :%s",user->nick.c_str(), dest->nick.c_str(), this->Config->HideWhoisServer, this->Config->Network);
|
||||
|
Loading…
x
Reference in New Issue
Block a user