summaryrefslogtreecommitdiffstats
path: root/src/kadmin/v5server/proto_serv.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/proto_serv.c
parent9aa0011cba73352abcbe5fe8f8fd6d6a068e9987 (diff)
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/proto_serv.c')
-rw-r--r--src/kadmin/v5server/proto_serv.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/kadmin/v5server/proto_serv.c b/src/kadmin/v5server/proto_serv.c
index 8def48c6a7..f88811ae32 100644
--- a/src/kadmin/v5server/proto_serv.c
+++ b/src/kadmin/v5server/proto_serv.c
@@ -57,7 +57,11 @@ static jmp_buf timeout_jmp;
static krb5_sigtype
proto_alarmclock()
{
+#if POSIX_SETJMP
+ siglongjmp(timeout_jmp, 1);
+#else /* POSIX_SETJMP */
longjmp(timeout_jmp, 1);
+#endif /* POSIX_SETJMP */
/* NOTREACHED */
}
@@ -108,6 +112,10 @@ proto_serv(kcontext, my_id, cl_sock, sv_p, cl_p)
krb5_address *local;
krb5_address *remote;
+#if POSIX_SIGNALS
+ struct sigaction s_action;
+#endif /* POSIX_SIGNALS */
+
char *curr_lang = (char *) NULL;
krb5_boolean mime_setting = 0;
@@ -130,6 +138,10 @@ proto_serv(kcontext, my_id, cl_sock, sv_p, cl_p)
remote = (krb5_address *) NULL;
ticket = (krb5_ticket *) NULL;
rcache = (krb5_rcache) NULL;
+#if POSIX_SIGNALS
+ (void) sigemptyset(&s_action.sa_mask);
+ s_action.sa_flags = 0;
+#endif /* POSIX_SIGNALS */
/* Get memory for addresses */
local = (krb5_address *) malloc(sizeof(krb5_address));
@@ -240,9 +252,20 @@ proto_serv(kcontext, my_id, cl_sock, sv_p, cl_p)
*
* If enabled, the protocol times out after proto_proto_timeout seconds.
*/
- if (setjmp(timeout_jmp) == 0) {
+ if (
+#if POSIX_SETJMP
+ sigsetjmp(timeout_jmp, 1) == 0
+#else /* POSIX_SETJMP */
+ setjmp(timeout_jmp) == 0
+#endif /* POSIX_SETJMP */
+ ) {
if (proto_proto_timeout > 0) {
+#if POSIX_SIGNALS
+ s_action.sa_handler = proto_alarmclock;
+ (void) sigaction(SIGALRM, &s_action, (struct sigaction *) NULL);
+#else /* POSIX_SIGNALS */
signal(SIGALRM, proto_alarmclock);
+#endif /* POSIX_SIGNALS */
}
/*
* Loop forever - or until somebody puts us out of our misery.