From 8c1f8aa016faee3fa151d134c3544b2dd5bab832 Mon Sep 17 00:00:00 2001 From: Ján Sáreník Date: Sat, 5 Jun 2021 18:24:57 +0200 Subject: run-parts: permit dot later in file name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://gist.github.com/andyshinn/3ae01fa13cb64c9d36e7#gistcomment-2044506 To test: mkdir /tmp/testrp printf "#!/bin/sh\necho test\n" > /tmp/testrp/test.sh chmod a+x /tmp/testrp/* busybox run-parts /tmp/testrp test mv /tmp/testrp/test.sh /tmp/testrp/.test.sh busybox run-parts /tmp/testrp # no output function old new delta act 190 200 +10 Signed-off-by: Ján Sáreník Signed-off-by: Denys Vlasenko --- debianutils/run_parts.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'debianutils/run_parts.c') diff --git a/debianutils/run_parts.c b/debianutils/run_parts.c index 585a4b58f..f528c88ff 100644 --- a/debianutils/run_parts.c +++ b/debianutils/run_parts.c @@ -113,13 +113,24 @@ enum { }; /* Is this a valid filename (upper/lower alpha, digits, - * underscores, and hyphens only?) + * underscores, hyphens, and non-leading dots only?) */ static bool invalid_name(const char *c) { c = bb_basename(c); - while (*c && (isalnum(*c) || *c == '_' || *c == '-')) + if (*c == '.') + return *c; + + /* Debian run-parts 4.8.3, manpage: + * "...the names must consist entirely of ASCII letters, + * ASCII digits, ASCII underscores, and ASCII minus-hyphens. + * However, the name must not begin with a period." + * The last sentence is a giveaway that something is fishy + * (why mention leading dot if dots are not allowed anyway?). + * Yes, you guessed it right: in fact non-leading dots ARE allowed. + */ + while (isalnum(*c) || *c == '_' || *c == '-' || *c == '.') c++; return *c; /* TRUE (!0) if terminating NUL is not reached */ -- cgit v1.2.3