diff -urN ../jabberd-2.0s3.orig/c2s/c2s.h ./c2s/c2s.h --- ../jabberd-2.0s3.orig/c2s/c2s.h 2004-10-22 11:17:22.056931000 +0200 +++ ./c2s/c2s.h 2004-10-22 11:17:56.316660000 +0200 @@ -26,6 +26,7 @@ #include "sx/sx.h" #include "sx/ssl.h" #include "sx/sasl.h" +#include "util/util.h" #ifdef HAVE_SIGNAL_H # include diff -urN ../jabberd-2.0s3.orig/c2s/main.c ./c2s/main.c --- ../jabberd-2.0s3.orig/c2s/main.c 2004-10-22 11:17:22.073293000 +0200 +++ ./c2s/main.c 2004-10-22 11:17:36.183740000 +0200 @@ -399,13 +399,13 @@ } #endif - signal(SIGINT, _c2s_signal); - signal(SIGTERM, _c2s_signal); + jabber_signal(SIGINT, _c2s_signal); + jabber_signal(SIGTERM, _c2s_signal); #ifdef SIGHUP - signal(SIGHUP, _c2s_signal_hup); + jabber_signal(SIGHUP, _c2s_signal_hup); #endif #ifdef SIGPIPE - signal(SIGPIPE, SIG_IGN); + jabber_signal(SIGPIPE, SIG_IGN); #endif c2s = (c2s_t) malloc(sizeof(struct c2s_st)); diff -urN ../jabberd-2.0s3.orig/resolver/resolver.c ./resolver/resolver.c --- ../jabberd-2.0s3.orig/resolver/resolver.c 2004-10-22 11:17:22.081513000 +0200 +++ ./resolver/resolver.c 2004-10-22 11:17:36.189240000 +0200 @@ -519,13 +519,13 @@ } #endif - signal(SIGINT, _resolver_signal); - signal(SIGTERM, _resolver_signal); + jabber_signal(SIGINT, _resolver_signal); + jabber_signal(SIGTERM, _resolver_signal); #ifdef SIGHUP - signal(SIGHUP, _resolver_signal_hup); + jabber_signal(SIGHUP, _resolver_signal_hup); #endif #ifdef SIGPIPE - signal(SIGPIPE, SIG_IGN); + jabber_signal(SIGPIPE, SIG_IGN); #endif r = (resolver_t) malloc(sizeof(struct resolver_st)); diff -urN ../jabberd-2.0s3.orig/router/main.c ./router/main.c --- ../jabberd-2.0s3.orig/router/main.c 2004-10-22 11:17:22.088672000 +0200 +++ ./router/main.c 2004-10-22 11:17:36.192716000 +0200 @@ -271,13 +271,13 @@ } #endif - signal(SIGINT, router_signal); - signal(SIGTERM, router_signal); + jabber_signal(SIGINT, router_signal); + jabber_signal(SIGTERM, router_signal); #ifdef SIGHUP - signal(SIGHUP, router_signal_hup); + jabber_signal(SIGHUP, router_signal_hup); #endif #ifdef SIGPIPE - signal(SIGPIPE, SIG_IGN); + jabber_signal(SIGPIPE, SIG_IGN); #endif r = (router_t) malloc(sizeof(struct router_st)); diff -urN ../jabberd-2.0s3.orig/s2s/main.c ./s2s/main.c --- ../jabberd-2.0s3.orig/s2s/main.c 2004-10-22 11:17:22.097098000 +0200 +++ ./s2s/main.c 2004-10-22 11:17:36.196220000 +0200 @@ -304,13 +304,13 @@ } #endif - signal(SIGINT, _s2s_signal); - signal(SIGTERM, _s2s_signal); + jabber_signal(SIGINT, _s2s_signal); + jabber_signal(SIGTERM, _s2s_signal); #ifdef SIGHUP - signal(SIGHUP, _s2s_signal_hup); + jabber_signal(SIGHUP, _s2s_signal_hup); #endif #ifdef SIGPIPE - signal(SIGPIPE, SIG_IGN); + jabber_signal(SIGPIPE, SIG_IGN); #endif s2s = (s2s_t) malloc(sizeof(struct s2s_st)); diff -urN ../jabberd-2.0s3.orig/sm/main.c ./sm/main.c --- ../jabberd-2.0s3.orig/sm/main.c 2004-10-22 11:17:22.114938000 +0200 +++ ./sm/main.c 2004-10-22 11:17:36.203560000 +0200 @@ -166,13 +166,13 @@ } #endif - signal(SIGINT, _sm_signal); - signal(SIGTERM, _sm_signal); + jabber_signal(SIGINT, _sm_signal); + jabber_signal(SIGTERM, _sm_signal); #ifdef SIGHUP - signal(SIGHUP, _sm_signal_hup); + jabber_signal(SIGHUP, _sm_signal_hup); #endif #ifdef SIGPIPE - signal(SIGPIPE, SIG_IGN); + jabber_signal(SIGPIPE, SIG_IGN); #endif sm = (sm_t) malloc(sizeof(struct sm_st)); diff -urN ../jabberd-2.0s3.orig/util/Makefile.am ./util/Makefile.am --- ../jabberd-2.0s3.orig/util/Makefile.am 2004-10-22 11:17:22.030396000 +0200 +++ ./util/Makefile.am 2004-10-22 11:18:42.171211000 +0200 @@ -2,5 +2,5 @@ noinst_HEADERS = inaddr.h md5.h sha1.h util.h util_compat.h xdata.h -libutil_la_SOURCES = access.c base64.c config.c datetime.c hex.c inaddr.c jid.c jqueue.c log.c md5.c nad.c pool.c rate.c serial.c sha1.c stanza.c str.c xdata.c xhash.c +libutil_la_SOURCES = access.c base64.c config.c datetime.c hex.c inaddr.c jid.c jqueue.c jsignal.c log.c md5.c nad.c pool.c rate.c serial.c sha1.c stanza.c str.c xdata.c xhash.c libutil_la_LIBADD = @LDFLAGS@ diff -urN ../jabberd-2.0s3.orig/util/Makefile.in ./util/Makefile.in --- ../jabberd-2.0s3.orig/util/Makefile.in 2004-10-22 11:17:22.031354000 +0200 +++ ./util/Makefile.in 2004-10-22 11:24:36.991033000 +0200 @@ -95,7 +95,7 @@ noinst_HEADERS = inaddr.h md5.h sha1.h util.h util_compat.h xdata.h -libutil_la_SOURCES = access.c base64.c config.c datetime.c hex.c inaddr.c jid.c jqueue.c log.c md5.c nad.c pool.c rate.c serial.c sha1.c stanza.c str.c xdata.c xhash.c +libutil_la_SOURCES = access.c base64.c config.c datetime.c hex.c inaddr.c jid.c jqueue.c jsignal.c log.c md5.c nad.c pool.c rate.c serial.c sha1.c stanza.c str.c xdata.c xhash.c libutil_la_LIBADD = @LDFLAGS@ subdir = util mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -106,7 +106,7 @@ libutil_la_LDFLAGS = libutil_la_DEPENDENCIES = am_libutil_la_OBJECTS = access.lo base64.lo config.lo datetime.lo hex.lo \ - inaddr.lo jid.lo jqueue.lo log.lo md5.lo nad.lo pool.lo rate.lo \ + inaddr.lo jid.lo jqueue.lo jsignal.lo log.lo md5.lo nad.lo pool.lo rate.lo \ serial.lo sha1.lo stanza.lo str.lo xdata.lo xhash.lo libutil_la_OBJECTS = $(am_libutil_la_OBJECTS) @@ -126,7 +126,7 @@ @AMDEP_TRUE@ ./$(DEPDIR)/rate.Plo ./$(DEPDIR)/serial.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/sha1.Plo ./$(DEPDIR)/stanza.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/str.Plo ./$(DEPDIR)/xdata.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/xhash.Plo +@AMDEP_TRUE@ ./$(DEPDIR)/xhash.Plo ./$(DEPDIR)/jsignal.Plo COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ @@ -176,6 +176,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inaddr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jqueue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsignal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nad.Plo@am__quote@ diff -urN ../jabberd-2.0s3.orig/util/jsignal.c ./util/jsignal.c --- ../jabberd-2.0s3.orig/util/jsignal.c 1970-01-01 01:00:00.000000000 +0100 +++ ./util/jsignal.c 2004-10-22 11:21:43.876330000 +0200 @@ -0,0 +1,23 @@ +/* + * A compatible implementation of signal which relies of sigaction. + * More or less taken from teh Stevens book. + */ + +#include +#include + +jsighandler_t* jabber_signal(int signo, jsighandler_t *func) +{ + struct sigaction act, oact; + + act.sa_handler = func; + sigemptyset(&act.sa_mask); + act.sa_flags = 0; +#ifdef SA_RESTART + if (signo != SIGALRM) + act.sa_flags |= SA_RESTART; +#endif + if (sigaction(signo, &act, &oact) < 0) + return (SIG_ERR); + return (oact.sa_handler); +} diff -urN ../jabberd-2.0s3.orig/util/util.h ./util/util.h --- ../jabberd-2.0s3.orig/util/util.h 2004-10-22 11:17:22.027938000 +0200 +++ ./util/util.h 2004-10-22 11:21:34.794469000 +0200 @@ -708,6 +708,9 @@ #define log_debug if(0) debug_log #endif +/* Portable signal function */ +typedef void jsighandler_t(int); +jsighandler_t* jabber_signal(int signo, jsighandler_t *func); #ifdef __cplusplus }