summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_check.cpp7
-rw-r--r--src/users.cpp11
-rw-r--r--src/whois.cpp18
3 files changed, 27 insertions, 9 deletions
diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp
index a84bd4dc6..cf07e3644 100644
--- a/src/modules/m_check.cpp
+++ b/src/modules/m_check.cpp
@@ -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);
diff --git a/src/users.cpp b/src/users.cpp
index b361205da..fd0c168d9 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -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;
diff --git a/src/whois.cpp b/src/whois.cpp
index 341c8389f..b967fac25 100644
--- a/src/whois.cpp
+++ b/src/whois.cpp
@@ -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);