about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorFederico G. Schwindt <fgsch@lodoss.net>2013-09-16 02:15:49 +0100
committerFederico G. Schwindt <fgsch@lodoss.net>2013-09-16 02:15:49 +0100
commit2cebfc54f5c450577e0a6d4f61a421ac2396e44e (patch)
tree2042bdf44dc4bdd83135a30dabe7748c00b820fc /src
parentde3e5fa77ca1b726fe242d869836d3c1c71c2cfb (diff)
downloadngircd-2cebfc54f5c450577e0a6d4f61a421ac2396e44e.tar.gz
ngircd-2cebfc54f5c450577e0a6d4f61a421ac2396e44e.zip
Fix server reconnection
In some error cases conn_id will be left as SERVER_WAIT and
subsequently ignored in Check_Servers(). Ensure conn_id is set to
NONE before returning from New_Server() if we couldn't establish
the connection.

Prompted by a report from gabrielgi-at-gmail-dot-com.
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/conn.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 3b092787..324fa421 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -2131,6 +2131,7 @@ New_Server( int Server , ng_ipaddr_t *dest)
 
 	if (!ng_ipaddr_tostr_r(dest, ip_str)) {
 		Log(LOG_WARNING, "New_Server: Could not convert IP to string");
+		Conf_Server[Server].conn_id = NONE;
 		return;
 	}
 
@@ -2145,11 +2146,14 @@ New_Server( int Server , ng_ipaddr_t *dest)
 	if (new_sock < 0) {
 		Log(LOG_CRIT, "Can't create socket (af %d): %s!",
 		    af_dest, strerror(errno));
+		Conf_Server[Server].conn_id = NONE;
 		return;
 	}
 
-	if (!Init_Socket(new_sock))
+	if (!Init_Socket(new_sock)) {
+		Conf_Server[Server].conn_id = NONE;
 		return;
+	}
 
 	/* is a bind address configured? */
 	res = ng_ipaddr_af(&Conf_Server[Server].bind_addr);
@@ -2165,6 +2169,7 @@ New_Server( int Server , ng_ipaddr_t *dest)
 	if(( res != 0 ) && ( errno != EINPROGRESS )) {
 		Log( LOG_CRIT, "Can't connect socket: %s!", strerror( errno ));
 		close( new_sock );
+		Conf_Server[Server].conn_id = NONE;
 		return;
 	}
 
@@ -2173,12 +2178,14 @@ New_Server( int Server , ng_ipaddr_t *dest)
 		    "Cannot allocate memory for server connection (socket %d)",
 		    new_sock);
 		close( new_sock );
+		Conf_Server[Server].conn_id = NONE;
 		return;
 	}
 
 	if (!io_event_create( new_sock, IO_WANTWRITE, cb_connserver)) {
 		Log(LOG_ALERT, "io_event_create(): could not add fd %d", strerror(errno));
 		close(new_sock);
+		Conf_Server[Server].conn_id = NONE;
 		return;
 	}
 
@@ -2193,6 +2200,7 @@ New_Server( int Server , ng_ipaddr_t *dest)
 	if (!c) {
 		Log( LOG_ALERT, "Can't establish connection: can't create client structure!" );
 		io_close(new_sock);
+		Conf_Server[Server].conn_id = NONE;
 		return;
 	}