summaryrefslogtreecommitdiffhomepage
path: root/debianutils/run_parts.c
diff options
context:
space:
mode:
authorJán Sáreník <jajomojo@gmail.com>2021-06-05 18:24:57 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-06-05 18:40:58 +0200
commit8c1f8aa016faee3fa151d134c3544b2dd5bab832 (patch)
tree4ea9cb6f3e9080d4cfc2273b8a5f8ce78ca13273 /debianutils/run_parts.c
parent947a22b33262c93e5c50286b723b9086a33a4c1f (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>
Diffstat (limited to 'debianutils/run_parts.c')
-rw-r--r--debianutils/run_parts.c15
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 */