diff options
author | Ján Sáreník <jajomojo@gmail.com> | 2021-06-05 18:24:57 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-06-05 18:40:58 +0200 |
commit | 8c1f8aa016faee3fa151d134c3544b2dd5bab832 (patch) | |
tree | 4ea9cb6f3e9080d4cfc2273b8a5f8ce78ca13273 | |
parent | 947a22b33262c93e5c50286b723b9086a33a4c1f (diff) |
run-parts: permit dot later in file name
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 <jajomojo@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | debianutils/run_parts.c | 15 |
1 files changed, 13 insertions, 2 deletions
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 */ |