37 lines
894 B
Diff
37 lines
894 B
Diff
|
--- rfc931.c
|
||
|
+++ rfc931.c
|
||
|
@@ -92,6 +92,8 @@
|
||
|
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 @@
|
||
|
*/
|
||
|
|
||
|
if (sigsetjmp(timebuf, 1) == 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 @@
|
||
|
}
|
||
|
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);
|