From 1787a97828b512b4b15e618a26d0e508ec7a253b Mon Sep 17 00:00:00 2001
From: Jan Kaluza <jkaluza@redhat.com>
Date: Tue, 26 Jan 2016 12:43:21 +0100
Subject: [PATCH] Fix 'olddir' usage with wildcard in the middle of path in the
pattern definition when the pattern did not match any log file.
Upstream-commit: 73493ec38c5e806fa66d8c3f13259775da6282d9
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
---
config.c | 24 ++++++++++++++++++------
test/test | 21 +++++++++++++++++++++
test/test-config.69.in | 10 ++++++++++
3 files changed, 49 insertions(+), 6 deletions(-)
create mode 100644 test/test-config.69.in
diff --git a/config.c b/config.c
index 926d388..493f3f7 100644
--- a/config.c
+++ b/config.c
@@ -1454,12 +1454,24 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
int rv;
dirName = ourDirName(newlog->files[i]);
if (stat(dirName, &sb2)) {
- message(MESS_ERROR,
- "%s:%d error verifying log file "
- "path %s: %s\n", configFile, lineNum,
- dirName, strerror(errno));
- free(dirName);
- goto error;
+ if (!(newlog->flags & LOG_FLAG_MISSINGOK)) {
+ message(MESS_ERROR,
+ "%s:%d error verifying log file "
+ "path %s: %s\n", configFile, lineNum,
+ dirName, strerror(errno));
+ free(dirName);
+ goto error;
+ }
+ else {
+ message(MESS_DEBUG,
+ "%s:%d verifying log file "
+ "path failed %s: %s, log is probably missing, "
+ "but missingok is set, so this is not an error.\n",
+ configFile, lineNum,
+ dirName, strerror(errno));
+ free(dirName);
+ continue;
+ }
}
ld = alloca(strlen(dirName) + strlen(newlog->oldDir) + 2);
sprintf(ld, "%s/%s", dirName, newlog->oldDir);
diff --git a/test/test b/test/test
index 9d7618f..54d57d2 100755
--- a/test/test
+++ b/test/test
@@ -1566,4 +1566,25 @@ test.log 0
test.log.$DATESTRING 0 zero
EOF
+cleanup 69
+
+# ------------------------------- Test 69 ------------------------------------
+# Test olddir with wildcard in the pattern
+preptest test.log 69 1 0
+rm -rf testdir adir bdir
+mkdir adir
+mkdir bdir
+cp test.log adir
+cp test.log bdir
+$RLR test-config.69 --force -v
+
+checkoutput <<EOF
+adir/test.log 0
+testdir/test.log.1 0 zero
+EOF
+
+rm -rf testdir adir
+rm -rf testdir bdir
+
cleanup
+
diff --git a/test/test-config.69.in b/test/test-config.69.in
new file mode 100644
index 0000000..9752e0a
--- /dev/null
+++ b/test/test-config.69.in
@@ -0,0 +1,10 @@
+create
+
+&DIR&/*/test.log
+&DIR&/*/test.lo3 {
+ monthly
+ rotate 1
+ olddir &DIR&/testdir
+ createolddir 700 &USER& &GROUP&
+ missingok
+}
--
2.7.4