summaryrefslogtreecommitdiffstats
path: root/src/kadmin
diff options
context:
space:
mode:
authorMark Eichin <eichin@mit.edu>1994-11-01 23:24:08 +0000
committerMark Eichin <eichin@mit.edu>1994-11-01 23:24:08 +0000
commit9c3cbc9496168ad8fa42ad5004601b6ffd7cc142 (patch)
tree2335d0ef505362e8810eae1cd9ccb42465c5cc95 /src/kadmin
parent0100404c668f02124ae994f84f193baace2dbea9 (diff)
downloadkrb5-9c3cbc9496168ad8fa42ad5004601b6ffd7cc142.tar.gz
krb5-9c3cbc9496168ad8fa42ad5004601b6ffd7cc142.tar.xz
krb5-9c3cbc9496168ad8fa42ad5004601b6ffd7cc142.zip
* adm_listen.c (kill_children): use sigprocmask if available
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4605 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin')
-rw-r--r--src/kadmin/server/ChangeLog4
-rw-r--r--src/kadmin/server/adm_listen.c42
2 files changed, 37 insertions, 9 deletions
diff --git a/src/kadmin/server/ChangeLog b/src/kadmin/server/ChangeLog
index 7ca21a302..9b65ef731 100644
--- a/src/kadmin/server/ChangeLog
+++ b/src/kadmin/server/ChangeLog
@@ -1,3 +1,7 @@
+Tue Nov 1 18:19:36 1994 Mark Eichin (eichin@cygnus.com)
+
+ * adm_listen.c (kill_children): use sigprocmask if available.
+
Wed Oct 19 17:40:22 1994 Theodore Y. Ts'o (tytso@dcl)
* adm_server.c (main): Select the cryptosystem to be used using
diff --git a/src/kadmin/server/adm_listen.c b/src/kadmin/server/adm_listen.c
index d5ef808e8..1a1ef5dfd 100644
--- a/src/kadmin/server/adm_listen.c
+++ b/src/kadmin/server/adm_listen.c
@@ -35,15 +35,6 @@
#include <signal.h>
#include <com_err.h>
-#ifdef USE_SIGPROCMASK
-/* fake sigmask, sigblock, sigsetmask */
-#include <signal.h>
-#define sigmask(x) (1L<<(x)-1)
-#define sigsetmask(x) sigprocmask(SIG_SETMASK,&x,NULL)
-static int _fake_sigstore;
-#define sigblock(x) (_fake_sigstore=x,sigprocmask(SIG_BLOCK,&_fake_sigstore,0))
-#endif
-
#ifndef sigmask
#define sigmask(m) (1 <<((m)-1))
#endif
@@ -58,6 +49,38 @@ static int _fake_sigstore;
int adm_debug_flag = 0;
+#ifdef USE_SIGPROCMASK
+/* just do it right */
+void
+kill_children()
+{
+ int i;
+ sigset_t old, new;
+
+ sigemptyset(&old);
+ sigemptyset(&new);
+ sigaddset(&new,SIGCHLD);
+ sigprocmask(SIG_BLOCK, &new, &old);
+
+ for (i = 0; i < pidarraysize; i++) {
+ kill(pidarray[i], SIGINT);
+ krb_log("killing child %d", pidarray[i]);
+ }
+
+ sigprocmask(SIG_SETMASK, &old, NULL);
+}
+
+#else
+
+#ifdef USE_SIGPROCMASK
+/* fake sigmask, sigblock, sigsetmask */
+#include <signal.h>
+#define sigmask(x) (1L<<(x)-1)
+#define sigsetmask(x) sigprocmask(SIG_SETMASK,&x,NULL)
+static int _fake_sigstore;
+#define sigblock(x) (_fake_sigstore=x,sigprocmask(SIG_BLOCK,&_fake_sigstore,0))
+#endif
+
void
kill_children()
{
@@ -74,6 +97,7 @@ kill_children()
sigsetmask(osigmask);
return;
}
+#endif /* HAVE_SIGSET */
/*
adm5_listen_and_process - listen on the admin servers port for a request