summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/inspircd.conf.example8
-rw-r--r--include/inspircd_io.h4
-rw-r--r--src/commands.cpp9
-rw-r--r--src/inspircd_io.cpp3
4 files changed, 22 insertions, 2 deletions
diff --git a/docs/inspircd.conf.example b/docs/inspircd.conf.example
index f59b09e50..11fdc6da4 100644
--- a/docs/inspircd.conf.example
+++ b/docs/inspircd.conf.example
@@ -523,6 +523,13 @@
# instead of the server names in the quit message, #
# identical to the way IRCu displays them. #
# #
+# hidewhois - When defined with a non-empty value, the given #
+# text will be used in place of the user's server #
+# in WHOIS, when a user is WHOISed by a non-oper. #
+# For example, most nets will want to set this to #
+# something like '*.netname.net' to conceal the #
+# actual server the user is on. #
+# #
<options prefixquit="Quit: "
loglevel="default"
@@ -535,6 +542,7 @@
customversion=""
maxtargets="20"
hidesplits="no"
+ hidewhois=""
allowhalfop="yes">
diff --git a/include/inspircd_io.h b/include/inspircd_io.h
index a3190cd6a..990b746be 100644
--- a/include/inspircd_io.h
+++ b/include/inspircd_io.h
@@ -224,6 +224,10 @@ class ServerConfig : public classbase
*/
bool HideSplits;
+ /** Set to a non-empty string to obfuscate the server name of users in WHOIS
+ */
+ char HideWhoisServer[MAXBUF];
+
/** A list of IP addresses the server is listening
* on.
*/
diff --git a/src/commands.cpp b/src/commands.cpp
index 4d09db9fe..4b376bbde 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -133,7 +133,14 @@ void do_whois(userrec* user, userrec* dest,unsigned long signon, unsigned long i
WriteServ(user->fd,"319 %s %s :%s",user->nick, dest->nick, cl.c_str());
}
}
- WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, dest->server, GetServerDescription(dest->server).c_str());
+ if (*Config->HideWhoisServer)
+ {
+ WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, *user->oper ? dest->server : Config->HideWhoisServer, *user->oper ? GetServerDescription(dest->server).c_str() : Config->Network);
+ }
+ else
+ {
+ WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, dest->server, GetServerDescription(dest->server).c_str());
+ }
if (*dest->awaymsg)
{
WriteServ(user->fd,"301 %s %s :%s",user->nick, dest->nick, dest->awaymsg);
diff --git a/src/inspircd_io.cpp b/src/inspircd_io.cpp
index 88cb1438f..66fa0908e 100644
--- a/src/inspircd_io.cpp
+++ b/src/inspircd_io.cpp
@@ -45,7 +45,7 @@ ServerConfig::ServerConfig()
{
this->ClearStack();
*ServerName = *Network = *ServerDesc = *AdminName = '\0';
- *AdminEmail = *AdminNick = *diepass = *restartpass = '\0';
+ *HideWhoisServer = *AdminEmail = *AdminNick = *diepass = *restartpass = '\0';
*CustomVersion = *motd = *rules = *PrefixQuit = *DieValue = *DNSServer = '\0';
*OperOnlyStats = *ModPath = *MyExecutable = *DisabledCommands = *PID = '\0';
log_file = NULL;
@@ -227,6 +227,7 @@ void ServerConfig::Read(bool bail, userrec* user)
ConfValue("options","customversion",0,Config->CustomVersion,&Config->config_f);
ConfValue("options","maxtargets",0,MT,&Config->config_f);
ConfValue("options","hidesplits",0,HS,&Config->config_f);
+ ConfValue("options","hidewhois",0,Config->HideWhoisServer,&Config->config_f);
Config->HideSplits = ((*HS == 'y') || (*HS == 'Y') || (*HS == '1') || (*HS == 't') || (*HS == 'T'));
Config->SoftLimit = atoi(SLIMT);