90 lines
2.1 KiB
Diff
90 lines
2.1 KiB
Diff
|
From b98dd1933b1ebf5c86041bf135af421fe1ce4fc9 Mon Sep 17 00:00:00 2001
|
||
|
From: Kamil Dudka <kdudka@redhat.com>
|
||
|
Date: Fri, 28 Jun 2019 18:22:39 +0200
|
||
|
Subject: [PATCH] globerr: do not abort globbing on broken symlink
|
||
|
|
||
|
Fixes #251
|
||
|
|
||
|
Upstream-commit: 4297f01103915f4ee356d37bdb35e8c41bbbdb28
|
||
|
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||
|
---
|
||
|
config.c | 16 +++++++++++++---
|
||
|
test/Makefile.am | 1 +
|
||
|
test/test-0084.sh | 14 ++++++++++++++
|
||
|
test/test-config.84.in | 3 +++
|
||
|
4 files changed, 31 insertions(+), 3 deletions(-)
|
||
|
create mode 100755 test/test-0084.sh
|
||
|
create mode 100644 test/test-config.84.in
|
||
|
|
||
|
diff --git a/config.c b/config.c
|
||
|
index e4807c9..1805a16 100644
|
||
|
--- a/config.c
|
||
|
+++ b/config.c
|
||
|
@@ -834,9 +834,19 @@ static int globerr(const char *pathname, int theerr)
|
||
|
{
|
||
|
(void) pathname;
|
||
|
|
||
|
- /* A missing directory is not an error, so return 0 */
|
||
|
- if (theerr == ENOTDIR)
|
||
|
- return 0;
|
||
|
+ /* prevent glob() from being aborted in certain cases */
|
||
|
+ switch (theerr) {
|
||
|
+ case ENOTDIR:
|
||
|
+ /* non-directory where directory was expected by the glob */
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ case ENOENT:
|
||
|
+ /* most likely symlink with non-existent target */
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ default:
|
||
|
+ break;
|
||
|
+ }
|
||
|
|
||
|
glob_errno = theerr;
|
||
|
|
||
|
diff --git a/test/Makefile.am b/test/Makefile.am
|
||
|
index 5e838d1..35ba2b9 100644
|
||
|
--- a/test/Makefile.am
|
||
|
+++ b/test/Makefile.am
|
||
|
@@ -76,6 +76,7 @@ TEST_CASES = \
|
||
|
test-0075.sh \
|
||
|
test-0076.sh \
|
||
|
test-0077.sh \
|
||
|
+ test-0084.sh \
|
||
|
test-0100.sh \
|
||
|
test-0101.sh
|
||
|
|
||
|
diff --git a/test/test-0084.sh b/test/test-0084.sh
|
||
|
new file mode 100755
|
||
|
index 0000000..1389331
|
||
|
--- /dev/null
|
||
|
+++ b/test/test-0084.sh
|
||
|
@@ -0,0 +1,14 @@
|
||
|
+#!/bin/bash
|
||
|
+
|
||
|
+. ./test-common.sh
|
||
|
+
|
||
|
+cleanup 84
|
||
|
+
|
||
|
+# ------------------------------- Test 84 ------------------------------------
|
||
|
+preptest test.log 84 1
|
||
|
+
|
||
|
+mkdir -p log/dir
|
||
|
+ln -s XXX log/sym
|
||
|
+touch log/dir/file
|
||
|
+
|
||
|
+$RLR test-config.84 -v --force
|
||
|
diff --git a/test/test-config.84.in b/test/test-config.84.in
|
||
|
new file mode 100644
|
||
|
index 0000000..1a79bfe
|
||
|
--- /dev/null
|
||
|
+++ b/test/test-config.84.in
|
||
|
@@ -0,0 +1,3 @@
|
||
|
+&DIR&/log/*/* {
|
||
|
+ rotate 1
|
||
|
+}
|
||
|
--
|
||
|
2.21.3
|
||
|
|