X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Fconn.c;h=324fa4219a9d204723572e1eeb8fbf8ea1badbee;hb=d0977258ee14a5178e98c9a00c064d90f0eac9d6;hp=30dfd094467397ac958052fd41bfd5f33960ff14;hpb=8f530eb3154c7d62201c28a53fac5594a956b447;p=ngircd-alex.git diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 30dfd094..324fa421 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -1668,7 +1668,11 @@ Conn_StartLogin(CONN_ID Idx) #endif (void)Conn_WriteStr(Idx, "NOTICE AUTH :*** Looking up your hostname"); - (void)Handle_Write(Idx); + /* Send buffered data to the client, but break on errors + * because Handle_Write() would have closed the connection + * again in this case! */ + if (!Handle_Write(Idx)) + return; } Resolve_Addr(&My_Connections[Idx].proc_stat, &My_Connections[Idx].addr, @@ -2127,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; } @@ -2141,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); @@ -2161,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; } @@ -2169,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; } @@ -2189,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; } @@ -2450,16 +2462,21 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events ) *ptr ? "" : ": ", *ptr ? "" : identptr); } - } else { + } else if(Conf_Ident) { Log(LOG_INFO, "IDENT lookup for connection %d: no result.", i); - if (Conf_NoticeAuth && Conf_Ident) + if (Conf_NoticeAuth) (void)Conn_WriteStr(i, "NOTICE AUTH :*** No ident response"); } #endif - if (Conf_NoticeAuth) - (void)Handle_Write(i); + if (Conf_NoticeAuth) { + /* Send buffered data to the client, but break on + * errors because Handle_Write() would have closed + * the connection again in this case! */ + if (!Handle_Write(i)) + return; + } Class_HandleServerBans(c); }