diff options
author | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2014-01-05 19:19:06 +0000 |
---|---|---|
committer | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2014-01-05 19:19:06 +0000 |
commit | c2e74da7a8fb5f2421dfca91234e7f595ab09acc (patch) | |
tree | 1446a3986f66f630115a06b5cfc940d9760842a0 | |
parent | fcff62668fc2f0fcdade711725bacc4faa695f88 (diff) |
- Fixed server name leak for hidden servers in /who, /whois and /whowas
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/branches/8.1.x@2747 82007160-df01-0410-b94d-b575c5fd34c7
-rw-r--r-- | include/whowas.h | 1 | ||||
-rw-r--r-- | modules/m_who.c | 2 | ||||
-rw-r--r-- | modules/m_whois.c | 9 | ||||
-rw-r--r-- | modules/m_whowas.c | 2 | ||||
-rw-r--r-- | src/whowas.c | 1 |
5 files changed, 9 insertions, 6 deletions
diff --git a/include/whowas.h b/include/whowas.h index 42fa7e4..af19196 100644 --- a/include/whowas.h +++ b/include/whowas.h @@ -33,6 +33,7 @@ struct Whowas { int hashv; + int shide; time_t logoff; char name[NICKLEN + 1]; char username[USERLEN + 1]; diff --git a/modules/m_who.c b/modules/m_who.c index 961bb01..ece4563 100644 --- a/modules/m_who.c +++ b/modules/m_who.c @@ -63,7 +63,7 @@ do_who(struct Client *source_p, struct Client *target_p, HasUMode(target_p, UMODE_OPER) && !HasUMode(target_p, UMODE_HIDDEN) ? "*" : "", op_flags); - if (ConfigServerHide.hide_servers) + if (ConfigServerHide.hide_servers || IsHidden(target_p->servptr)) sendto_one(source_p, form_str(RPL_WHOREPLY), me.name, source_p->name, (chname) ? (chname) : "*", target_p->username, target_p->host, diff --git a/modules/m_whois.c b/modules/m_whois.c index a7716fe..5e9a080 100644 --- a/modules/m_whois.c +++ b/modules/m_whois.c @@ -96,15 +96,16 @@ whois_person(struct Client *source_p, struct Client *target_p) sendto_one(source_p, "%s", buf); } - if (HasUMode(source_p, UMODE_OPER) || !ConfigServerHide.hide_servers || target_p == source_p) + if ((ConfigServerHide.hide_servers || IsHidden(target_p->servptr)) && + !(HasUMode(source_p, UMODE_OPER) || target_p == source_p)) sendto_one(source_p, form_str(RPL_WHOISSERVER), me.name, source_p->name, target_p->name, - target_p->servptr->name, target_p->servptr->info); + ConfigServerHide.hidden_name, + ServerInfo.network_desc); else sendto_one(source_p, form_str(RPL_WHOISSERVER), me.name, source_p->name, target_p->name, - ConfigServerHide.hidden_name, - ServerInfo.network_desc); + target_p->servptr->name, target_p->servptr->info); if (HasUMode(target_p, UMODE_REGISTERED)) sendto_one(source_p, form_str(RPL_WHOISREGNICK), diff --git a/modules/m_whowas.c b/modules/m_whowas.c index 4a70b55..6becef5 100644 --- a/modules/m_whowas.c +++ b/modules/m_whowas.c @@ -67,7 +67,7 @@ whowas_do(struct Client *client_p, struct Client *source_p, temp->username, temp->hostname, temp->realname); - if (ConfigServerHide.hide_servers && !HasUMode(source_p, UMODE_OPER)) + if ((temp->shide || ConfigServerHide.hide_servers) && !HasUMode(source_p, UMODE_OPER)) sendto_one(source_p, form_str(RPL_WHOISSERVER), me.name, source_p->name, temp->name, ServerInfo.network_name, myctime(temp->logoff)); diff --git a/src/whowas.c b/src/whowas.c index 326d7d3..7e0b288 100644 --- a/src/whowas.c +++ b/src/whowas.c @@ -64,6 +64,7 @@ whowas_add_history(struct Client *client_p, const int online) } who->hashv = strhash(client_p->name); + who->shide = IsHidden(client_p->servptr) != 0; who->logoff = CurrentTime; strlcpy(who->name, client_p->name, sizeof(who->name)); |