about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/resolve.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/ngircd/resolve.c b/src/ngircd/resolve.c
index e64688ec..295a559f 100644
--- a/src/ngircd/resolve.c
+++ b/src/ngircd/resolve.c
@@ -42,6 +42,7 @@
 #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 ));
 
@@ -69,7 +70,7 @@ Resolve_Addr(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
 		return true;
 	} else if( pid == 0 ) {
 		/* Sub process */
-		Log_Init_Resolver();
+		Init_Subprocess();
 		Do_ResolveAddr( Addr, identsock, pipefd[1]);
 		Log_Exit_Resolver( );
 		exit(0);
@@ -98,7 +99,7 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short))
 		return true;
 	} else if( pid == 0 ) {
 		/* Sub process */
-		Log_Init_Resolver();
+		Init_Subprocess();
 		Do_ResolveName(Host, pipefd[1]);
 		Log_Exit_Resolver( );
 		exit(0);
@@ -107,6 +108,33 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short))
 } /* Resolve_Name */
 
 
+/**
+ * Signal handler for the forked resolver subprocess.
+ */
+static void
+Signal_Handler(int Signal)
+{
+	switch(Signal) {
+	case SIGTERM:
+#ifdef DEBUG
+		Log_Resolver(LOG_DEBUG, "Resolver: Got TERM signal, exiting.");
+#endif
+		exit(1);
+	}
+}
+
+
+/**
+ * Initialize forked resolver subprocess.
+ */
+static void
+Init_Subprocess(void)
+{
+	signal(SIGTERM, Signal_Handler);
+	Log_Init_Resolver();
+}
+
+
 #if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO)
 #if !defined(WANT_IPV6) && defined(h_errno)
 static char *