summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2012-11-16 14:58:48 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2012-11-16 15:01:41 +0000
commite880446b4964ced5bdc695f32c616808562751d9 (patch)
treebb01b81f4e7901c1087d25ce088281ffcabaa62e
parent684269f779a633454c998710327848ddeb06d59c (diff)
downloadtcp-wrappers-e880446b4964ced5bdc695f32c616808562751d9.tar.gz
Patch from Fedora: tcp_wrappers-7.6-restore_sigalarm.patch
-rw-r--r--rfc931.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/rfc931.c b/rfc931.c
index bca1ce9..bfdfe6e 100644
--- a/rfc931.c
+++ b/rfc931.c
@@ -92,6 +92,8 @@ char *dest;
char *cp;
char *result = unknown;
FILE *fp;
+ unsigned saved_timeout;
+ struct sigaction nact, oact;
#ifdef INET6
/* address family must be the same */
@@ -134,7 +136,12 @@ char *dest;
*/
if (setjmp(timebuf) == 0) {
- signal(SIGALRM, timeout);
+ /* Save SIGALRM timer and handler. Sudheer Abdul-Salam, SUN. */
+ saved_timeout = alarm(0);
+ nact.sa_handler = timeout;
+ nact.sa_flags = 0;
+ (void) sigemptyset(&nact.sa_mask);
+ (void) sigaction(SIGALRM, &nact, &oact);
alarm(rfc931_timeout);
/*
@@ -223,6 +230,10 @@ char *dest;
}
alarm(0);
}
+ /* Restore SIGALRM timer and handler. Sudheer Abdul-Salam, SUN. */
+ (void) sigaction(SIGALRM, &oact, NULL);
+ if (saved_timeout > 0)
+ alarm(saved_timeout);
fclose(fp);
}
STRN_CPY(dest, result, STRING_LENGTH);