X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fconn.c;h=e8bfcf1c70cbbb9e848061eff7b151a2a7c8f854;hp=30dfd094467397ac958052fd41bfd5f33960ff14;hb=ae00c100acdb4d2d3f99524d30258d07eefcfb6d;hpb=8f530eb3154c7d62201c28a53fac5594a956b447 diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 30dfd094..e8bfcf1c 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -152,7 +152,9 @@ my_sd_listen_fds(void) if (!e || !*e) return -1; count = atoi(e); +#ifdef HAVE_UNSETENV unsetenv("LISTEN_FDS"); +#endif return count; } @@ -1668,7 +1670,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 +2133,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 +2148,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 +2171,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 +2180,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 +2202,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 +2464,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); }