X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fresolve.c;h=ce1bf0d5ba45fefd80eb6900792c60100ea97816;hp=808ce53f55ed0e1e6d13c6fc82ebb90ecc0d1edd;hb=03628dbeaf40a9de34b3eb6d5bf6dd34eed8248c;hpb=28424d013d4909a7d5a2501537ad39ae74873724 diff --git a/src/ngircd/resolve.c b/src/ngircd/resolve.c index 808ce53f..ce1bf0d5 100644 --- a/src/ngircd/resolve.c +++ b/src/ngircd/resolve.c @@ -7,13 +7,18 @@ * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. - * - * Asynchronous resolver */ +#define RESOLVER_TIMEOUT (Conf_PongTimeout*3)/4 + #include "portab.h" +/** + * @file + * Asynchronous resolver + */ + #include "imp.h" #include #include @@ -33,6 +38,7 @@ #include "array.h" #include "conn.h" +#include "conf.h" #include "defines.h" #include "log.h" #include "ng_ipaddr.h" @@ -42,7 +48,6 @@ #include "io.h" -static void Init_Subprocess PARAMS(( void )); static void Do_ResolveAddr PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd )); static void Do_ResolveName PARAMS(( const char *Host, int w_fd )); @@ -64,13 +69,13 @@ Resolve_Addr(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock, assert(s != NULL); - pid = Proc_Fork(s, pipefd, cbfunc); + pid = Proc_Fork(s, pipefd, cbfunc, RESOLVER_TIMEOUT); if (pid > 0) { LogDebug("Resolver for %s created (PID %d).", ng_ipaddr_tostr(Addr), pid); return true; } else if( pid == 0 ) { /* Sub process */ - Init_Subprocess(); + Log_Init_Subprocess("Resolver"); Do_ResolveAddr( Addr, identsock, pipefd[1]); Log_Exit_Subprocess("Resolver"); exit(0); @@ -90,7 +95,7 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short)) assert(s != NULL); - pid = Proc_Fork(s, pipefd, cbfunc); + pid = Proc_Fork(s, pipefd, cbfunc, RESOLVER_TIMEOUT); if (pid > 0) { /* Main process */ #ifdef DEBUG @@ -99,7 +104,7 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short)) return true; } else if( pid == 0 ) { /* Sub process */ - Init_Subprocess(); + Log_Init_Subprocess("Resolver"); Do_ResolveName(Host, pipefd[1]); Log_Exit_Subprocess("Resolver"); exit(0); @@ -108,17 +113,6 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short)) } /* Resolve_Name */ -/** - * Initialize forked resolver subprocess. - */ -static void -Init_Subprocess(void) -{ - signal(SIGTERM, Proc_GenericSignalHandler); - Log_Init_Subprocess("Resolver"); -} - - #if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO) #if !defined(WANT_IPV6) && defined(h_errno) static char * @@ -353,15 +347,15 @@ Addr_in_list(const array *resolved_addr, const ng_ipaddr_t *Addr) static void Log_Forgery_NoIP(const char *ip, const char *host) { - Log_Subprocess(LOG_WARNING, "Possible forgery: %s resolved to %s " - "(which has no ip address)", ip, host); + Log_Subprocess(LOG_WARNING, + "Possible forgery: %s resolved to %s (which has no ip address)", ip, host); } static void Log_Forgery_WrongIP(const char *ip, const char *host) { - Log_Subprocess(LOG_WARNING,"Possible forgery: %s resolved to %s " - "(which points to different address)", ip, host); + Log_Subprocess(LOG_WARNING, + "Possible forgery: %s resolved to %s (which points to different address)", ip, host); }