summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/conn.c40
-rw-r--r--src/ngircd/resolve.c23
-rw-r--r--src/ngircd/resolve.h4
3 files changed, 41 insertions, 26 deletions
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index fe8eecf4..f8c6e2c7 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -1485,10 +1485,6 @@ Conn_StartLogin(CONN_ID Idx)
 
 	assert(Idx >= 0);
 
-	/* Nothing to do if DNS (and resolver subprocess) is disabled */
-	if (!Conf_DNS)
-		return;
-
 #ifdef IDENTAUTH
 	/* Should we make an IDENT request? */
 	if (Conf_Ident)
@@ -1498,13 +1494,21 @@ Conn_StartLogin(CONN_ID Idx)
 	if (Conf_NoticeBeforeRegistration) {
 		/* Send "NOTICE *" messages to the client */
 #ifdef IDENTAUTH
-		if (Conf_Ident)
-			(void)Conn_WriteStr(Idx,
-				"NOTICE * :*** Looking up your hostname and checking ident");
-		else
+		if (Conf_Ident) {
+			if (Conf_DNS)
+				(void)Conn_WriteStr(Idx,
+					"NOTICE * :*** Looking up your hostname and checking ident");
+			else
+				(void)Conn_WriteStr(Idx,
+					"NOTICE * :*** Checking ident");
+		} else
 #endif
+		if(Conf_DNS)
 			(void)Conn_WriteStr(Idx,
 				"NOTICE * :*** Looking up your hostname");
+		else
+			(void)Conn_WriteStr(Idx,
+				"NOTICE * :*** Processing your connection");
 		/* Send buffered data to the client, but break on errors
 		 * because Handle_Write() would have closed the connection
 		 * again in this case! */
@@ -1512,8 +1516,9 @@ Conn_StartLogin(CONN_ID Idx)
 			return;
 	}
 
-	Resolve_Addr(&My_Connections[Idx].proc_stat, &My_Connections[Idx].addr,
-		     ident_sock, cb_Read_Resolver_Result);
+	Resolve_Addr_Ident(&My_Connections[Idx].proc_stat,
+			   &My_Connections[Idx].addr,
+			   ident_sock, cb_Read_Resolver_Result);
 }
 
 /**
@@ -2298,13 +2303,16 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events )
 	 * the resolver results, so we don't have to worry to override settings
 	 * from these commands here. */
 	if(Client_Type(c) == CLIENT_UNKNOWN) {
-		strlcpy(My_Connections[i].host, readbuf,
-			sizeof(My_Connections[i].host));
-		Client_SetHostname(c, readbuf);
-		if (Conf_NoticeBeforeRegistration)
-			(void)Conn_WriteStr(i,
+		if (readbuf[0]) {
+			/* We got a hostname */
+			strlcpy(My_Connections[i].host, readbuf,
+				sizeof(My_Connections[i].host));
+			Client_SetHostname(c, readbuf);
+			if (Conf_NoticeBeforeRegistration)
+				(void)Conn_WriteStr(i,
 					"NOTICE * :*** Found your hostname: %s",
 					My_Connections[i].host);
+		}
 #ifdef IDENTAUTH
 		++identptr;
 		if (*identptr) {
diff --git a/src/ngircd/resolve.c b/src/ngircd/resolve.c
index 1931bc71..25be58a4 100644
--- a/src/ngircd/resolve.c
+++ b/src/ngircd/resolve.c
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -42,7 +42,7 @@
 
 #include "resolve.h"
 
-static void Do_ResolveAddr PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd ));
+static void Do_ResolveAddr_Ident PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd ));
 static void Do_ResolveName PARAMS(( const char *Host, int w_fd ));
 
 #ifdef WANT_IPV6
@@ -52,11 +52,11 @@ extern bool Conf_ConnectIPv6;
 
 
 /**
- * Resolve IP (asynchronous!).
+ * Resolve IP address and do IDENT lookup asynchronously.
  */
 GLOBAL bool
-Resolve_Addr(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
-	     void (*cbfunc) (int, short))
+Resolve_Addr_Ident(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
+		   void (*cbfunc) (int, short))
 {
 	int pipefd[2];
 	pid_t pid;
@@ -71,7 +71,7 @@ Resolve_Addr(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
 		/* Sub process */
 		Log_Init_Subprocess("Resolver");
 		Conn_CloseAllSockets(identsock);
-		Do_ResolveAddr(Addr, identsock, pipefd[1]);
+		Do_ResolveAddr_Ident(Addr, identsock, pipefd[1]);
 		Log_Exit_Subprocess("Resolver");
 		exit(0);
 	}
@@ -356,7 +356,7 @@ ArrayWrite(int fd, const array *a)
 
 
 static void
-Do_ResolveAddr(const ng_ipaddr_t *Addr, int identsock, int w_fd)
+Do_ResolveAddr_Ident(const ng_ipaddr_t *Addr, int identsock, int w_fd)
 {
 	/* Resolver sub-process: resolve IP address and write result into
 	 * pipe to parent. */
@@ -365,8 +365,15 @@ Do_ResolveAddr(const ng_ipaddr_t *Addr, int identsock, int w_fd)
 	size_t len;
 	array resolved_addr;
 
+	hostname[0] = '\0';
 	array_init(&resolved_addr);
 	ng_ipaddr_tostr_r(Addr, tmp_ip_str);
+
+	/* Skip DNS lookup when DNS is disabled; just return an empty ("") host
+	 * name but still issue an IDENT query, if supported and enabled. */
+	if (!Conf_DNS)
+		goto dns_done;
+
 	Log_Subprocess(LOG_DEBUG, "Now resolving %s ...", tmp_ip_str);
 	if (!ReverseLookup(Addr, hostname, sizeof(hostname)))
 		goto dns_done;
@@ -397,7 +404,7 @@ Do_ResolveAddr(const ng_ipaddr_t *Addr, int identsock, int w_fd)
 	ArrayWrite(w_fd, &resolved_addr);
 
 	array_free(&resolved_addr);
-} /* Do_ResolveAddr */
+} /* Do_ResolveAddr_Ident */
 
 
 static void
diff --git a/src/ngircd/resolve.h b/src/ngircd/resolve.h
index c0b734b8..92257c39 100644
--- a/src/ngircd/resolve.h
+++ b/src/ngircd/resolve.h
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2010 by Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
  * Asynchronous resolver (header)
  */
 
-GLOBAL bool Resolve_Addr PARAMS((PROC_STAT * s, const ng_ipaddr_t * Addr,
+GLOBAL bool Resolve_Addr_Ident PARAMS((PROC_STAT * s, const ng_ipaddr_t * Addr,
 				 int identsock, void (*cbfunc) (int, short)));
 GLOBAL bool Resolve_Name PARAMS((PROC_STAT * s, const char *Host,
 				 void (*cbfunc) (int, short)));