summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2014-01-05 19:19:06 +0000
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2014-01-05 19:19:06 +0000
commitc2e74da7a8fb5f2421dfca91234e7f595ab09acc (patch)
tree1446a3986f66f630115a06b5cfc940d9760842a0
parentfcff62668fc2f0fcdade711725bacc4faa695f88 (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.h1
-rw-r--r--modules/m_who.c2
-rw-r--r--modules/m_whois.c9
-rw-r--r--modules/m_whowas.c2
-rw-r--r--src/whowas.c1
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));