From ba18db9a3c47f3283bb3493a84946fe27d7b1bc4 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 20 Jun 2017 13:35:37 +0200 Subject: [PATCH] make 'copy' and 'copytruncate' work together This commit fixes a regression introduced by 3b26f4d8bbb338981aa2796c4076792c63d850c0. Upstream-commit: 65faf212e51115699f55f491d464f0ead9c2047e Signed-off-by: Kamil Dudka --- logrotate.c | 5 ++++- test/test | 13 +++++++++++++ test/test-config.73.in | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/test-config.73.in diff --git a/logrotate.c b/logrotate.c index 20f6ea5..d5da299 100644 --- a/logrotate.c +++ b/logrotate.c @@ -760,7 +760,10 @@ static int copyTruncate(char *currLog, char *saveLog, struct stat *sb, message(MESS_DEBUG, "copying %s to %s\n", currLog, saveLog); if (!debug) { - if ((fdcurr = open(currLog, ((flags & LOG_FLAG_COPY) ? O_RDONLY : O_RDWR) | O_NOFOLLOW)) < 0) { + /* read access is sufficient for 'copy' but not for 'copytruncate' */ + const int read_only = (flags & LOG_FLAG_COPY) + && !(flags & LOG_FLAG_COPYTRUNCATE); + if ((fdcurr = open(currLog, ((read_only) ? O_RDONLY : O_RDWR) | O_NOFOLLOW)) < 0) { message(MESS_ERROR, "error opening %s: %s\n", currLog, strerror(errno)); return 1; diff --git a/test/test b/test/test index 54d57d2..bcdfe05 100755 --- a/test/test +++ b/test/test @@ -1586,5 +1586,18 @@ EOF rm -rf testdir adir rm -rf testdir bdir +cleanup 73 + +# ------------------------------- Test 73 ------------------------------------ +# make sure that 'copy' and 'copytruncate' work together +preptest test.log 73 2 + +$RLR test-config.73 --force + +checkoutput <