From a8c9997e93ba0fd36b0b71601157e4a0e9f3b9f5 Mon Sep 17 00:00:00 2001 From: Michael Meffie Date: Thu, 5 Feb 2015 16:59:52 -0500 Subject: [PATCH] Reopen the correct filename when -logfile is given The name of the log file passed to ReOpenLog() may not match the name given in the initial OpenLog() call. This can happen when the -logfile option is given to the fileserver or volume server. Since the name given to ReOpenLog() must match the original name, change ReOpenLog() to use the name previously given to OpenLog() and update all callers. Change-Id: Ie6fa4cb6e3c03f853efe0207bbec5d8412c6fe59 Reviewed-on: https://gerrit.openafs.org/11723 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot --- src/kauth/krb_udp.c | 2 +- src/util/afsutil.h | 2 +- src/util/afsutil_prototypes.h | 2 +- src/util/serverLog.c | 23 +++++++++++++++++------ src/viced/viced.c | 2 +- src/volser/volmain.c | 2 +- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/kauth/krb_udp.c b/src/kauth/krb_udp.c index d3e670e..f4b8477 100644 --- a/src/kauth/krb_udp.c +++ b/src/kauth/krb_udp.c @@ -111,7 +111,7 @@ FiveMinuteCheckLWP(void *unused) while (1) { IOMGR_Sleep(fiveminutes); /* close the log so it can be removed */ - ReOpenLog(AFSDIR_SERVER_KALOG_FILEPATH); /* no trunc, just append */ + ReOpenLog(); /* no trunc, just append */ } return NULL; } diff --git a/src/util/afsutil.h b/src/util/afsutil.h index 214bceb..53db42a 100644 --- a/src/util/afsutil.h +++ b/src/util/afsutil.h @@ -54,7 +54,7 @@ extern void FSLog(const char *format, ...) do { ViceLog(level, str); osi_Panic str; } while(0); extern int OpenLog(const char *filename); -extern int ReOpenLog(const char *fileName); +extern int ReOpenLog(void); extern void SetupLogSignals(void); extern void CloseLog(void); extern void SetupLogSoftSignals(void); diff --git a/src/util/afsutil_prototypes.h b/src/util/afsutil_prototypes.h index 2091164..beb03f3 100644 --- a/src/util/afsutil_prototypes.h +++ b/src/util/afsutil_prototypes.h @@ -130,7 +130,7 @@ extern void SetDebug_Signal(int signo); extern void ResetDebug_Signal(int signo); extern void SetupLogSignals(void); extern int OpenLog(const char *fileName); -extern int ReOpenLog(const char *fileName); +extern int ReOpenLog(void); extern int LogThreadNum(void); extern void LogCommandLine(int argc, char **argv, const char *progname, const char *version, const char *logstring, diff --git a/src/util/serverLog.c b/src/util/serverLog.c index b42525b..04ab263 100644 --- a/src/util/serverLog.c +++ b/src/util/serverLog.c @@ -460,8 +460,16 @@ OpenLog(const char *fileName) return 0; } /*OpenLog */ +/*! + * Reopen the log file descriptor. + * + * Reopen the log file descriptor in order to support rotation + * of the log files. Has no effect when logging to the syslog. + * + * \returns 0 on success + */ int -ReOpenLog(const char *fileName) +ReOpenLog(void) { int flags = O_WRONLY | O_APPEND | O_CREAT; @@ -471,16 +479,19 @@ ReOpenLog(const char *fileName) } #endif - if (IsFIFO(fileName)) { + LOCK_SERVERLOG(); + if (ourName == NULL) { + UNLOCK_SERVERLOG(); + return -1; + } + if (IsFIFO(ourName)) { flags |= O_NONBLOCK; } - - LOCK_SERVERLOG(); if (serverLogFD >= 0) close(serverLogFD); - serverLogFD = open(fileName, flags, 0666); + serverLogFD = open(ourName, flags, 0666); if (serverLogFD >= 0) { - RedirectStdStreams(fileName); + RedirectStdStreams(ourName); } UNLOCK_SERVERLOG(); return serverLogFD < 0 ? -1 : 0; diff --git a/src/viced/viced.c b/src/viced/viced.c index 989ad8e..cbfa01c 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -402,7 +402,7 @@ FiveMinuteCheckLWP(void *unused) #endif /* close the log so it can be removed */ - ReOpenLog(AFSDIR_SERVER_FILELOG_FILEPATH); /* don't trunc, just append */ + ReOpenLog(); /* don't trunc, just append */ ViceLog(2, ("Cleaning up timed out callbacks\n")); if (CleanupTimedOutCallBacks()) ViceLog(5, ("Timed out callbacks deleted\n")); diff --git a/src/volser/volmain.c b/src/volser/volmain.c index e385214..33f8b56 100644 --- a/src/volser/volmain.c +++ b/src/volser/volmain.c @@ -150,7 +150,7 @@ BKGLoop(void *unused) loop++; if (loop == 10) { /* reopen log every 5 minutes */ loop = 0; - ReOpenLog(AFSDIR_SERVER_VOLSERLOG_FILEPATH); + ReOpenLog(); } } -- 1.9.4