diff options
| author | Geoffrey King <gjking@mit.edu> | 1998-07-08 09:12:05 +0000 |
|---|---|---|
| committer | Geoffrey King <gjking@mit.edu> | 1998-07-08 09:12:05 +0000 |
| commit | a1d3d95f0c0d1593559f5df28cd9cbf4f82ae8f9 (patch) | |
| tree | 86426a9cbdb26068ec48142e52ae1e99eb606ac0 /src/kdc | |
| parent | bc69faa9f3d5a26b60b843a76c0a7cf3d30cfbeb (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/ChangeLog | 13 | ||||
| -rw-r--r-- | src/kdc/extern.c | 1 | ||||
| -rw-r--r-- | src/kdc/extern.h | 1 | ||||
| -rw-r--r-- | src/kdc/main.c | 33 | ||||
| -rw-r--r-- | src/kdc/network.c | 4 |
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) { |
