diff options
-rw-r--r-- | docs/inspircd.conf.example | 8 | ||||
-rw-r--r-- | include/inspircd_io.h | 4 | ||||
-rw-r--r-- | src/commands.cpp | 9 | ||||
-rw-r--r-- | src/inspircd_io.cpp | 3 |
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); |