about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/sample-ngircd.conf.tmpl5
-rw-r--r--man/ngircd.conf.5.tmpl5
-rw-r--r--src/ngircd/conf.c7
-rw-r--r--src/ngircd/conf.h3
-rw-r--r--src/ngircd/conn.c22
5 files changed, 41 insertions, 1 deletions
diff --git a/doc/sample-ngircd.conf.tmpl b/doc/sample-ngircd.conf.tmpl
index e07b5205..f9c96562 100644
--- a/doc/sample-ngircd.conf.tmpl
+++ b/doc/sample-ngircd.conf.tmpl
@@ -154,6 +154,11 @@
 	# maximum nick name length!
 	;MaxNickLength = 9
 
+	# Normally ngIRCd doesn't send any messages to a client until it is
+	# registered. Enable this option to let the daemon send "NOTICE AUTH"
+	# messages to clients while connecting.
+	;NoticeAuth = no
+
 	# 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!
diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl
index e94b495f..b2ce02ca 100644
--- a/man/ngircd.conf.5.tmpl
+++ b/man/ngircd.conf.5.tmpl
@@ -251,6 +251,11 @@ Maximum length of an user nick name (Default: 9, as in RFC 2812). Please
 note that all servers in an IRC network MUST use the same maximum nick name
 length!
 .TP
+\fBNoticeAuth\fR (boolean)
+Normally ngIRCd doesn't send any messages to a client until it is registered.
+Enable this option to let the daemon send "NOTICE AUTH" messages to clients
+while connecting. Default: no.
+.TP
 \fBCloakHost\fR (string)
 Set this hostname for every client instead of the real one. Default: empty,
 don't change.
diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c
index 32461f35..568b9e7a 100644
--- a/src/ngircd/conf.c
+++ b/src/ngircd/conf.c
@@ -352,6 +352,7 @@ Conf_Test( void )
 	printf("  MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
 	printf("  MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
 	printf("  MaxNickLength = %u\n", Conf_MaxNickLength - 1);
+	printf("  NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth));
 	printf("  CloakHost = %s\n", Conf_CloakHost);
 	printf("  CloakUserToNick = %s\n\n", yesno_to_str(Conf_CloakUserToNick));
 
@@ -614,6 +615,7 @@ Set_Defaults(bool InitServers)
 	Conf_PongTimeout = 20;
 	Conf_ConnectRetry = 60;
 	Conf_DNS = true;
+	Conf_NoticeAuth = false;
 
 	Conf_Oper_Count = 0;
 	Conf_Channel_Count = 0;
@@ -1192,6 +1194,11 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
 		Conf_MaxNickLength = Handle_MaxNickLength(Line, Arg);
 		return;
 	}
+	if(strcasecmp(Var, "NoticeAuth") == 0) {
+		/* send NOTICE AUTH messages to clients on connect */
+		Conf_NoticeAuth = Check_ArgIsTrue(Arg);
+		return;
+	}
 
 	if( strcasecmp( Var, "Listen" ) == 0 ) {
 		/* IP-Address to bind sockets */
diff --git a/src/ngircd/conf.h b/src/ngircd/conf.h
index 305ccaa1..1633bc99 100644
--- a/src/ngircd/conf.h
+++ b/src/ngircd/conf.h
@@ -178,6 +178,9 @@ GLOBAL bool Conf_Ident;
 /** Enable all usage of PAM, even when compiled with support for it */
 GLOBAL bool Conf_PAM;
 
+/** Enable NOTICE AUTH messages on connect */
+GLOBAL bool Conf_NoticeAuth;
+
 /*
  * try to connect to remote systems using the ipv6 protocol,
  * if they have an ipv6 address? (default yes)
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 63093c25..9d17a738 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -1444,9 +1444,20 @@ New_Connection(int Sock)
 	if (!Conf_Ident)
 		identsock = -1;
 #endif
-	if (Conf_DNS)
+	if (Conf_DNS) {
+		if (Conf_NoticeAuth) {
+#ifdef IDENTAUTH
+			if (Conf_Ident)
+				(void)Conn_WriteStr(new_sock,
+					"NOTICE AUTH :*** Looking up your hostname and checking ident");
+			else
+#endif
+				(void)Conn_WriteStr(new_sock,
+					"NOTICE AUTH :*** Looking up your hostname");
+		}
 		Resolve_Addr(&My_Connections[new_sock].proc_stat, &new_addr,
 			     identsock, cb_Read_Resolver_Result);
+	}
 
 	Account_Connection();
 	return new_sock;
@@ -2175,13 +2186,22 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events )
 		strlcpy(My_Connections[i].host, readbuf,
 			sizeof(My_Connections[i].host));
 		Client_SetHostname(c, readbuf);
+		if (Conf_NoticeAuth)
+			(void)Conn_WriteStr(i,
+					"NOTICE AUTH :*** Found your hostname");
 #ifdef IDENTAUTH
 		++identptr;
 		if (*identptr) {
 			Log(LOG_INFO, "IDENT lookup for connection %d: \"%s\".", i, identptr);
 			Client_SetUser(c, identptr, true);
+			if (Conf_NoticeAuth)
+				(void)Conn_WriteStr(i,
+					"NOTICE AUTH :*** Got ident response");
 		} else {
 			Log(LOG_INFO, "IDENT lookup for connection %d: no result.", i);
+			if (Conf_NoticeAuth && Conf_Ident)
+				(void)Conn_WriteStr(i,
+					"NOTICE AUTH :*** No ident response");
 		}
 #endif
 	}