summaryrefslogtreecommitdiffstats
path: root/src/kdc
diff options
context:
space:
mode:
authorGeoffrey King <gjking@mit.edu>1998-07-08 09:12:05 +0000
committerGeoffrey King <gjking@mit.edu>1998-07-08 09:12:05 +0000
commita1d3d95f0c0d1593559f5df28cd9cbf4f82ae8f9 (patch)
tree86426a9cbdb26068ec48142e52ae1e99eb606ac0 /src/kdc
parentbc69faa9f3d5a26b60b843a76c0a7cf3d30cfbeb (diff)
These additions cause the KDC to react to SIGHUP by closing and
reopening its log files, so that logfile management utilities may now compress old logs and then kill -HUP the KDC process to get them to use fresh log files. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@10627 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kdc')
-rw-r--r--src/kdc/ChangeLog13
-rw-r--r--src/kdc/extern.c1
-rw-r--r--src/kdc/extern.h1
-rw-r--r--src/kdc/main.c33
-rw-r--r--src/kdc/network.c4
5 files changed, 51 insertions, 1 deletions
diff --git a/src/kdc/ChangeLog b/src/kdc/ChangeLog
index 193202828..4e2264a51 100644
--- a/src/kdc/ChangeLog
+++ b/src/kdc/ChangeLog
@@ -1,3 +1,16 @@
+Wed Jul 8 04:36:28 1998 Geoffrey King <gjking@mit.edu>
+
+ * extern.h: Added declaration for new variable
+ signal_requests_hup, which is set when the KDC
+ is sent a SIGHUP
+
+ * extern.c: Added definition for signal_requests_hup
+
+ * main.c: Added new signal handling code for SIGHUP, including
+ the new function request_hup()
+
+ * network.c: Check signal_requests_hup in the main KDC loop
+
Fri May 8 18:46:59 1998 Theodore Y. Ts'o <tytso@mit.edu>
* kerberos_v4.c (krb4_stime): Print 4 digit years in Krb4 log
diff --git a/src/kdc/extern.c b/src/kdc/extern.c
index 757df67b8..c3f92ac07 100644
--- a/src/kdc/extern.c
+++ b/src/kdc/extern.c
@@ -35,3 +35,4 @@ krb5_timestamp kdc_infinity = KRB5_INT32_MAX; /* XXX */
krb5_rcache kdc_rcache = (krb5_rcache) NULL;
volatile int signal_requests_exit = 0; /* gets set when signal hits */
+volatile int signal_requests_hup = 0; /* ditto */
diff --git a/src/kdc/extern.h b/src/kdc/extern.h
index 313f20e11..e8de8a7e3 100644
--- a/src/kdc/extern.h
+++ b/src/kdc/extern.h
@@ -95,4 +95,5 @@ extern krb5_timestamp kdc_infinity; /* greater than all other timestamps */
extern krb5_rcache kdc_rcache; /* replay cache */
extern volatile int signal_requests_exit;
+extern volatile int signal_requests_hup;
#endif /* __KRB5_KDC_EXTERN__ */
diff --git a/src/kdc/main.c b/src/kdc/main.c
index d58ebc80e..bf2f71243 100644
--- a/src/kdc/main.c
+++ b/src/kdc/main.c
@@ -46,6 +46,7 @@ kdc_realm_t *find_realm_data PROTOTYPE((char *, krb5_ui_4));
void usage PROTOTYPE((char *));
krb5_sigtype request_exit PROTOTYPE((int));
+krb5_sigtype request_hup PROTOTYPE((int));
void setup_signal_handlers PROTOTYPE((void));
@@ -57,6 +58,10 @@ static int nofork = 0;
static char *kdc_current_rcname = (char *) NULL;
static int rkey_init_done = 0;
+#ifdef POSIX_SIGNALS
+static struct sigaction s_action;
+#endif /* POSIX_SIGNALS */
+
#define KRB5_KDC_MAX_REALMS 32
#ifdef USE_RCACHE
@@ -565,12 +570,35 @@ request_exit(signo)
#endif
}
+krb5_sigtype
+request_hup(signo)
+ int signo;
+{
+ signal_requests_hup = 1;
+
+#ifdef POSIX_SIGTYPE
+ return;
+#else
+ return(0);
+#endif
+}
+
void
setup_signal_handlers()
{
+#ifdef POSIX_SIGNALS
+ (void) sigemptyset(&s_action.sa_mask);
+ s_action.saflags = 0;
+ s_action.sa_handler = request_exit;
+ (void) sigaction(SIGINT, &s_action, (struct sigaction *) NULL);
+ (void) sigaction(SIGTERM, &s_action, (struct sigaction *) NULL);
+ s_action.sa_handler = request_hup;
+ (void) sigaction(SIGHUP, &s_action, (struct sigaction *) NULL);
+#else /* POSIX_SIGNALS */
signal(SIGINT, request_exit);
- signal(SIGHUP, request_exit);
signal(SIGTERM, request_exit);
+ signal(SIGHUP, request_hup);
+#endif /* POSIX_SIGNALS */
return;
}
@@ -836,3 +864,6 @@ char *argv[];
return errout;
}
+
+
+
diff --git a/src/kdc/network.c b/src/kdc/network.c
index f2cc0b566..edc172dff 100644
--- a/src/kdc/network.c
+++ b/src/kdc/network.c
@@ -208,6 +208,10 @@ const char *prog;
return KDC5_NONET;
while (!signal_requests_exit) {
+ if (signal_requests_hup) {
+ krb5_klog_reopen();
+ signal_requests_hup = 0;
+ }
readfds = select_fds;
nfound = select(select_nfds, &readfds, 0, 0, 0);
if (nfound == -1) {