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 d3e670eee..f4b84775d 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 214bcebc8..53db42a3d 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 209116446..beb03f331 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 b42525b74..04ab263d3 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 989ad8eb1..cbfa01c7b 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 e38521432..33f8b56a4 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(); } } -- 2.39.5