summaryrefslogtreecommitdiffstats
path: root/src
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
parentbc69faa9f3d5a26b60b843a76c0a7cf3d30cfbeb (diff)
downloadkrb5-a1d3d95f0c0d1593559f5df28cd9cbf4f82ae8f9.tar.gz
krb5-a1d3d95f0c0d1593559f5df28cd9cbf4f82ae8f9.tar.xz
krb5-a1d3d95f0c0d1593559f5df28cd9cbf4f82ae8f9.zip
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')
-rw-r--r--src/include/krb5/ChangeLog4
-rw-r--r--src/include/krb5/adm_proto.h1
-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
-rw-r--r--src/lib/kadm5/ChangeLog5
-rw-r--r--src/lib/kadm5/logger.c39
9 files changed, 100 insertions, 1 deletions
diff --git a/src/include/krb5/ChangeLog b/src/include/krb5/ChangeLog
index 66a0d0598..202608002 100644
--- a/src/include/krb5/ChangeLog
+++ b/src/include/krb5/ChangeLog
@@ -1,3 +1,7 @@
+Wed Jul 8 04:30:22 1998 Geoffrey King <gjking@mit.edu>
+
+ * adm_proto.h: Added prototype for new function krb5_klog_reopen()
+
Thu Apr 16 23:50:08 1998 Tom Yu <tlyu@mit.edu>
* configure.in: Search for /var/tmp first when determining rcache
diff --git a/src/include/krb5/adm_proto.h b/src/include/krb5/adm_proto.h
index 1097b3cba..d66e010c4 100644
--- a/src/include/krb5/adm_proto.h
+++ b/src/include/krb5/adm_proto.h
@@ -137,6 +137,7 @@ krb5_error_code krb5_klog_init
krb5_boolean));
void krb5_klog_close KRB5_PROTOTYPE((krb5_context));
int krb5_klog_syslog KRB5_PROTOTYPE((int, const char *, ...));
+void krb5_klog_reopen KRB5_PROTOTYPE((krb5_context));
/* alt_prof.c */
krb5_error_code krb5_aprof_init
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) {
diff --git a/src/lib/kadm5/ChangeLog b/src/lib/kadm5/ChangeLog
index 26a14ad6c..ae8bb7e1b 100644
--- a/src/lib/kadm5/ChangeLog
+++ b/src/lib/kadm5/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jul 8 04:48:50 1998 Geoffrey J. King <gjking@mit.edu>
+
+ * logger.c: Add the function krb5_klog_reopen() which closes
+ and reopens the log files.
+
Mon Apr 6 19:40:05 1998 Tom Yu <tlyu@voltage-multiplier.mit.edu>
* Makefile.in (includes): Don't call mkdir unless the directory
diff --git a/src/lib/kadm5/logger.c b/src/lib/kadm5/logger.c
index 379b5ffda..2677e448d 100644
--- a/src/lib/kadm5/logger.c
+++ b/src/lib/kadm5/logger.c
@@ -942,4 +942,43 @@ krb5_klog_syslog(priority, format, va_alist)
va_end(pvar);
return(retval);
}
+
+/*
+ * krb5_klog_reopen() - Close and reopen any open (non-syslog) log files.
+ * This function is called when a SIGHUP is received
+ * so that external log-archival utilities may
+ * alert the Kerberos daemons that they should get
+ * a new file descriptor for the give filename.
+ */
+void
+krb5_klog_reopen(kcontext)
+krb5_context kcontext;
+{
+ int lindex;
+ FILE *f;
+
+ /*
+ * Only logs which are actually files need to be closed
+ * and reopened in response to a SIGHUP
+ */
+ for (lindex = 0; lindex < log_control.log_nentries; lindex++) {
+ if (log_control.log_entries[lindex].log_type == K_LOG_FILE) {
+ fclose(log_control.log_entries[lindex].lfu_filep);
+ /*
+ * In case the old logfile did not get moved out of the
+ * way, open for append to prevent squashing the old logs.
+ */
+ f = fopen(log_control.log_entries[lindex].lfu_fname, "a+");
+ if (f) {
+ log_control.log_entries[lindex].lfu_filep = f;
+ } else {
+ fprintf(stderr, "Couldn't open log file %s: %s\n",
+ log_control.log_entries[lindex].lfu_fname,
+ error_message(errno));
+ }
+ }
+ }
+}
+
#endif /* !defined(_MSDOS) */
+