about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/sample-ngircd.conf.tmpl8
-rw-r--r--man/ngircd.conf.5.tmpl11
-rw-r--r--src/ngircd/client.c4
-rw-r--r--src/ngircd/conf.c8
-rw-r--r--src/ngircd/conf.h3
5 files changed, 32 insertions, 2 deletions
diff --git a/doc/sample-ngircd.conf.tmpl b/doc/sample-ngircd.conf.tmpl
index f696dc6d..e8b2fb0d 100644
--- a/doc/sample-ngircd.conf.tmpl
+++ b/doc/sample-ngircd.conf.tmpl
@@ -127,7 +127,13 @@
 	# Set this hostname for every client instead of the real one.
 	# Please note: don't use the percentage sign ("%"), it is reserved for
 	# future extensions!
-	;CloakHost = irc.example.net
+	;CloakHost = cloaked.host
+
+	# Use this hostname for hostname cloaking on clients that have the
+	# user mode "+x" set, instead of the name of the server.
+	# Please note: don't use the percentage sign ("%"), it is reserved for
+	# future extensions!
+	;CloakHostModeX = cloaked.user
 
 	# Set every clients' user name to their nick name
 	;CloakUserToNick = yes
diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl
index 85cf73ff..04732060 100644
--- a/man/ngircd.conf.5.tmpl
+++ b/man/ngircd.conf.5.tmpl
@@ -220,6 +220,17 @@ don't change.
 Don't use the percentage sign ("%"), it is reserved for future extensions!
 .RE
 .TP
+\fBCloakHostModeX\fR (string)
+Use this hostname for hostname cloaking on clients that have the user mode
+"+x" set, instead of the name of the server. Default: empty, use the name
+of the server.
+.PP
+.RS
+.B Please note:
+.br
+Don't use the percentage sign ("%"), it is reserved for future extensions!
+.RE
+.TP
 \fBCloakUserToNick\fR (boolean)
 Set every clients' user name to their nick name and hide the one supplied
 by the IRC client. Default: no.
diff --git a/src/ngircd/client.c b/src/ngircd/client.c
index 1b356848..e203cdd0 100644
--- a/src/ngircd/client.c
+++ b/src/ngircd/client.c
@@ -825,7 +825,9 @@ Client_MaskCloaked(CLIENT *Client)
 	    return Client_Mask(Client);
 
 	snprintf(Mask_Buffer, GETID_LEN, "%s!%s@%s",
-		 Client->id, Client->user, Client_ID(Client->introducer));
+		 Client->id, Client->user,
+		 *Conf_CloakHostModeX ? Conf_CloakHostModeX
+				      : Client_ID(Client->introducer));
 	return Mask_Buffer;
 } /* Client_MaskCloaked */
 
diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c
index f274eb82..5f7b24fc 100644
--- a/src/ngircd/conf.c
+++ b/src/ngircd/conf.c
@@ -358,6 +358,7 @@ Conf_Test( void )
 	printf("  AllowRemoteOper = %s\n", yesno_to_str(Conf_AllowRemoteOper));
 	printf("  ChrootDir = %s\n", Conf_Chroot);
 	printf("  CloakHost = %s\n", Conf_CloakHost);
+	printf("  CloakHostModeX = %s\n", Conf_CloakHostModeX);
 	printf("  CloakUserToNick = %s\n", yesno_to_str(Conf_CloakUserToNick));
 #ifdef WANT_IPV6
 	printf("  ConnectIPv4 = %s\n", yesno_to_str(Conf_ConnectIPv6));
@@ -684,6 +685,7 @@ Set_Defaults(bool InitServers)
 #endif
 	strlcpy(Conf_Chroot, CHROOT_DIR, sizeof(Conf_Chroot));
 	strcpy(Conf_CloakHost, "");
+	strcpy(Conf_CloakHostModeX, "");
 	Conf_CloakUserToNick = false;
 	Conf_ConnectIPv4 = true;
 #ifdef WANT_IPV6
@@ -1477,6 +1479,12 @@ Handle_OPTIONS(int Line, char *Var, char *Arg)
 			Config_Error_TooLong(Line, Var);
 		return;
 	}
+	if (strcasecmp(Var, "CloakHostModeX") == 0) {
+		len = strlcpy(Conf_CloakHostModeX, Arg, sizeof(Conf_CloakHostModeX));
+		if (len >= sizeof(Conf_CloakHostModeX))
+			Config_Error_TooLong(Line, Var);
+		return;
+	}
 	if (strcasecmp(Var, "CloakUserToNick") == 0) {
 		Conf_CloakUserToNick = Check_ArgIsTrue(Arg);
 		return;
diff --git a/src/ngircd/conf.h b/src/ngircd/conf.h
index be19afc6..86f00fe4 100644
--- a/src/ngircd/conf.h
+++ b/src/ngircd/conf.h
@@ -166,6 +166,9 @@ GLOBAL bool Conf_AllowRemoteOper;
 /** Cloaked hostname of the clients */
 GLOBAL char Conf_CloakHost[CLIENT_ID_LEN];
 
+/** Cloaked hostname for clients that did +x */
+GLOBAL char Conf_CloakHostModeX[CLIENT_ID_LEN];
+
 /** Use nick name as user name? */
 GLOBAL bool Conf_CloakUserToNick;