about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2021-12-30 20:31:41 +0100
committerAlexander Barton <alex@barton.de>2021-12-30 20:31:41 +0100
commit1db3447c909576cf10985b434214a264afe0688e (patch)
tree00a9bb875db4e53eb27a08ac375c1138749be111
parent3675c7567caf65e8fb0ed0390083a6d33919d26f (diff)
downloadngircd-1db3447c909576cf10985b434214a264afe0688e.tar.gz
ngircd-1db3447c909576cf10985b434214a264afe0688e.zip
Fix a possible race condition in Client_Introduce()
Conf_GetServer() can return NULL when the server introducing the client
had a write error for example, and is being disconnected.

So make sure that we have a valid server before calling Conf_NickIsService()!
-rw-r--r--src/ngircd/client.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/ngircd/client.c b/src/ngircd/client.c
index 67c02604..634cecdc 100644
--- a/src/ngircd/client.c
+++ b/src/ngircd/client.c
@@ -1315,12 +1315,14 @@ Client_Reject(CLIENT *Client, const char *Reason, bool InformClient)
 GLOBAL void
 Client_Introduce(CLIENT *From, CLIENT *Client, int Type)
 {
+	int server;
+
 	/* Set client type (user or service) */
 	Client_SetType(Client, Type);
 
 	if (From) {
-		if (Conf_NickIsService(Conf_GetServer(Client_Conn(From)),
-				   Client_ID(Client)))
+		server = Conf_GetServer(Client_Conn(From));
+		if (server > NONE && Conf_NickIsService(server, Client_ID(Client)))
 			Client_SetType(Client, CLIENT_SERVICE);
 		LogDebug("%s \"%s\" (+%s) registered (via %s, on %s, %d hop%s).",
 			 Client_TypeText(Client), Client_Mask(Client),