about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2012-11-05 23:46:26 +0100
committerAlexander Barton <alex@barton.de>2012-11-05 23:46:26 +0100
commit44b7ff02fd34731c6ed0d552dbde5c9981d53127 (patch)
tree6f55f55dcd678628fa81dcbf3b6f45c9c888ff73
parent35ed57e6c160dc13c2bbca2ca042406285d4ced3 (diff)
downloadngircd-44b7ff02fd34731c6ed0d552dbde5c9981d53127.tar.gz
ngircd-44b7ff02fd34731c6ed0d552dbde5c9981d53127.zip
Don't cloak already cloaked hostname when using METADATA
A client for which a METADATA command has been received from one of
its peers got the client flag "M" set. So it's safe to assume that
such a client gets "METADATA host" commands for its cloaked hostname
and the server must not cloak the hostname on its own, even when the
client mode "+x" is set.
-rw-r--r--src/ngircd/client.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/ngircd/client.c b/src/ngircd/client.c
index 92262b5d..2f8d771c 100644
--- a/src/ngircd/client.c
+++ b/src/ngircd/client.c
@@ -702,9 +702,16 @@ Client_HostnameCloaked(CLIENT *Client)
 
 	assert(Client != NULL);
 
+	/* Client isn't cloaked at all, return real hostname: */
 	if (!Client_HasMode(Client, 'x'))
 		return Client_Hostname(Client);
 
+	/* Client has received METADATA command, so it got the eventually
+	 * cloaked hostname set correctly and this server doesn't need
+	 * to cloak it on its own: */
+	if (strchr(Client_Flags(Client), 'M'))
+		return Client_Hostname(Client);
+
 	/* Do simple mapping to the server ID? */
 	if (!*Conf_CloakHostModeX)
 		return Client_ID(Client->introducer);