From ef1ea905831c5bcd63e04149571c10d75ff8f028 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Tue, 17 Feb 2015 21:08:07 -0800
Subject: [PATCH] Act as the "mv" command when rotate log

Act as the "mv" command when rotate log, first rename, if failed, then
read and write.

Upstream-Status: Pending

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>

---
 logrotate.c | 71 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 59 insertions(+), 12 deletions(-)

diff --git a/logrotate.c b/logrotate.c
index 25902bc..afa1a90 100644
--- a/logrotate.c
+++ b/logrotate.c
@@ -1434,6 +1434,53 @@ static int findNeedRotating(struct logInfo *log, int logNum, int force)
     return 0;
 }
 
+/* Act as the "mv" command, if rename failed, then read the old file and
+ * write to new file. The function which invokes the mvFile will use
+ * the strerror(errorno) to handle the error message, so we don't have
+ * to print the error message here */
+
+int mvFile (char *oldName, char *newName, struct logInfo *log, acl_type acl)
+{
+    struct stat sbprev;
+    int fd_old, fd_new, n;
+    char buf[BUFSIZ];
+
+    /* Do the rename first */
+    if (!rename(oldName, newName))
+        return 0;
+
+    /* If the errno is EXDEV, then read old file, write newfile and
+     * remove the oldfile */
+    if (errno == EXDEV) {
+        /* Open the old file to read */
+        if ((fd_old = open(oldName, O_RDONLY)) < 0)
+            return 1;
+
+        /* Create the file to write, keep the same attribute as the old file */
+        if (stat(oldName, &sbprev))
+            return 1;
+        else {
+            if ((fd_new = createOutputFile(newName,
+                O_WRONLY | O_CREAT | O_TRUNC, &sbprev, acl, 0)) < 0 )
+                return 1;
+        }
+
+        /* Read and write */
+        while ((n = read(fd_old, buf, BUFSIZ)) > 0)
+            if (write(fd_new, buf, n) != n)
+                return 1;
+
+        if ((close(fd_old) < 0) ||
+            removeLogFile(oldName, log) ||
+            (close(fd_new) < 0))
+            return 1;
+
+        return 0;
+    }
+
+    return 1;
+}
+
 /* find the rotated file with the highest index */
 static int findLastRotated(const struct logNames *rotNames,
                            const char *fileext, const char *compext)
@@ -1911,15 +1958,15 @@ static int prerotateSingleLog(struct logInfo *log, int logNum,
             }
 
             message(MESS_DEBUG,
-                    "renaming %s to %s (rotatecount %d, logstart %d, i %d), \n",
+                    "moving %s to %s (rotatecount %d, logstart %d, i %d), \n",
                     oldName, newName, rotateCount, logStart, i);
 
-            if (!debug && rename(oldName, newName)) {
+            if (!debug && mvFile(oldName, newName, log, prev_acl)) {
                 if (errno == ENOENT) {
                     message(MESS_DEBUG, "old log %s does not exist\n",
                             oldName);
                 } else {
-                    message(MESS_ERROR, "error renaming %s to %s: %s\n",
+                    message(MESS_ERROR, "error moving %s to %s: %s\n",
                             oldName, newName, strerror(errno));
                     hasErrors = 1;
                 }
@@ -2002,10 +2049,10 @@ static int rotateSingleLog(struct logInfo *log, int logNum,
                     return 1;
                 }
 
-                message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
+                message(MESS_DEBUG, "moving %s to %s\n", log->files[logNum],
                         tmpFilename);
-                if (!debug && !hasErrors && rename(log->files[logNum], tmpFilename)) {
-                    message(MESS_ERROR, "failed to rename %s to %s: %s\n",
+                if (!debug && !hasErrors && mvFile(log->files[logNum], rotNames->finalName, log, prev_acl)) {
+                    message(MESS_ERROR, "failed to move %s to %s: %s\n",
                             log->files[logNum], tmpFilename,
                             strerror(errno));
                     hasErrors = 1;
@@ -2014,11 +2061,11 @@ static int rotateSingleLog(struct logInfo *log, int logNum,
                 free(tmpFilename);
             }
             else {
-                message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
+                message(MESS_DEBUG, "moving %s to %s\n", log->files[logNum],
                         rotNames->finalName);
                 if (!debug && !hasErrors &&
-                        rename(log->files[logNum], rotNames->finalName)) {
-                    message(MESS_ERROR, "failed to rename %s to %s: %s\n",
+                        mvFile(log->files[logNum], rotNames->finalName, log, prev_acl)) {
+                    message(MESS_ERROR, "failed to move %s to %s: %s\n",
                             log->files[logNum], rotNames->finalName,
                             strerror(errno));
                     hasErrors = 1;
@@ -2424,7 +2471,7 @@ static int rotateLogSet(struct logInfo *log, int force)
     return hasErrors;
 }
 
-static int writeState(const char *stateFilename)
+static int writeState(struct logInfo *log, char *stateFilename)
 {
     struct logState *p;
     FILE *f;
@@ -2629,7 +2676,7 @@ static int writeState(const char *stateFilename)
         fclose(f);
 
     if (error == 0) {
-        if (rename(tmpFilename, stateFilename)) {
+        if (mvFile(tmpFilename, stateFilename, log, prev_acl)) {
             unlink(tmpFilename);
             error = 1;
             message(MESS_ERROR, "error renaming temp state file %s to %s\n",
@@ -2987,7 +3034,7 @@ int main(int argc, const char **argv)
         rc |= rotateLogSet(log, force);
 
     if (!debug)
-        rc |= writeState(stateFile);
+        rc |= writeState(log, stateFile);
 
     return (rc != 0);
 }
