summaryrefslogtreecommitdiffstats
path: root/src/kadmin/v5server/srv_main.c
diff options
context:
space:
mode:
authorPaul Park <pjpark@mit.edu>1995-05-12 20:13:46 +0000
committerPaul Park <pjpark@mit.edu>1995-05-12 20:13:46 +0000
commitb690fdffd77d179a0634b45bf11730cab075bd86 (patch)
tree99dace8679f98f45bcd4bb4257a70fc0fcbe5271 /src/kadmin/v5server/srv_main.c
parent9aa0011cba73352abcbe5fe8f8fd6d6a068e9987 (diff)
downloadkrb5-b690fdffd77d179a0634b45bf11730cab075bd86.tar.gz
krb5-b690fdffd77d179a0634b45bf11730cab075bd86.tar.xz
krb5-b690fdffd77d179a0634b45bf11730cab075bd86.zip
Check for and use POSIX signal/setjmp/longjmp
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5808 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/v5server/srv_main.c')
-rw-r--r--src/kadmin/v5server/srv_main.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/kadmin/v5server/srv_main.c b/src/kadmin/v5server/srv_main.c
index 6cd0af8ef2..8ce9e6ce4a 100644
--- a/src/kadmin/v5server/srv_main.c
+++ b/src/kadmin/v5server/srv_main.c
@@ -87,7 +87,11 @@ static krb5_sigtype
unhandled_signal(signo)
int signo;
{
+#if POSIX_SETJMP
+ siglongjmp(terminal_jmp, signo);
+#else /* POSIX_SETJMP */
longjmp(terminal_jmp, signo);
+#endif /* POSIX_SETJMP */
/* NOTREACHED */
}
@@ -279,10 +283,32 @@ main(argc, argv)
openlog(programname, LOG_AUTH|LOG_CONS|LOG_NDELAY|LOG_PID, LOG_LOCAL6);
(void) set_com_err_hook(kadm_com_err_proc);
- if ((signal_number = setjmp(terminal_jmp)) == 0) {
+ if ((signal_number =
+#if POSIX_SETJMP
+ sigsetjmp(terminal_jmp, 1)
+#else /* POSIX_SETJMP */
+ setjmp(terminal_jmp)
+#endif /* POSIX_SETJMP */
+ ) == 0) {
+#if POSIX_SIGNALS
+ struct sigaction s_action;
+#endif /* POSIX_SIGNALS */
+
/*
* Initialize signal handling.
*/
+#if POSIX_SIGNALS
+ (void) sigemptyset(&s_action.sa_mask);
+ s_action.sa_flags = 0;
+ s_action.sa_handler = unhandled_signal;
+ (void) sigaction(SIGINT, &s_action, (struct sigaction *) NULL);
+ (void) sigaction(SIGTERM, &s_action, (struct sigaction *) NULL);
+ (void) sigaction(SIGHUP, &s_action, (struct sigaction *) NULL);
+ (void) sigaction(SIGQUIT, &s_action, (struct sigaction *) NULL);
+ (void) sigaction(SIGPIPE, &s_action, (struct sigaction *) NULL);
+ (void) sigaction(SIGALRM, &s_action, (struct sigaction *) NULL);
+ (void) sigaction(SIGCHLD, &s_action, (struct sigaction *) NULL);
+#else /* POSIX_SIGNALS */
signal(SIGINT, unhandled_signal);
signal(SIGTERM, unhandled_signal);
signal(SIGHUP, unhandled_signal);
@@ -290,6 +316,7 @@ main(argc, argv)
signal(SIGPIPE, unhandled_signal);
signal(SIGALRM, unhandled_signal);
signal(SIGCHLD, unhandled_signal);
+#endif /* POSIX_SIGNALS */
/*
* Initialize our modules.