Reopen the correct filename when -logfile is given 23/11723/16
authorMichael Meffie <mmeffie@sinenomine.net>
Thu, 5 Feb 2015 21:59:52 +0000 (16:59 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Mon, 25 Apr 2016 04:08:59 +0000 (00:08 -0400)
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 <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/kauth/krb_udp.c
src/util/afsutil.h
src/util/afsutil_prototypes.h
src/util/serverLog.c
src/viced/viced.c
src/volser/volmain.c

index d3e670e..f4b8477 100644 (file)
@@ -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;
 }
index 214bceb..53db42a 100644 (file)
@@ -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);
index 2091164..beb03f3 100644 (file)
@@ -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,
index b42525b..04ab263 100644 (file)
@@ -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;
index 989ad8e..cbfa01c 100644 (file)
@@ -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"));
index e385214..33f8b56 100644 (file)
@@ -150,7 +150,7 @@ BKGLoop(void *unused)
        loop++;
        if (loop == 10) {       /* reopen log every 5 minutes */
            loop = 0;
-           ReOpenLog(AFSDIR_SERVER_VOLSERLOG_FILEPATH);
+           ReOpenLog();
        }
     }