From d4728145e37dca844dded6f8723ef9fe7f9293b4 Mon Sep 17 00:00:00 2001
From: Denis Vlasenko <vda.linux@googlemail.com>
Date: Sun, 29 Apr 2007 23:38:12 +0000
Subject: [PATCH] run_parts: do not check path portion of a name for "bad
 chars". Needed for ifupdown. Patch by "Gabriel L. Somlo" <somlo@cmu.edu>

---
 debianutils/run_parts.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/debianutils/run_parts.c b/debianutils/run_parts.c
index eb2fb94b3..e6dec04bc 100644
--- a/debianutils/run_parts.c
+++ b/debianutils/run_parts.c
@@ -60,14 +60,17 @@ struct globals {
  */
 static bool invalid_name(const char *c)
 {
-	while (*c) {
-		if (!isalnum(*c) && (*c != '_') && (*c != '-' && (*c != '/'))) {
-			return 1;
-		}
-		++c;
-	}
-	return 0;
+	const char *base_name = strrchr(c, '/');
+
+	if (base_name)
+		c = base_name + 1;
+
+	while (*c && (isalnum(*c) || *c == '_' || *c == '-'))
+		c++;
+
+	return *c; /* TRUE (!0) if terminating NUL is not reached */
 }
+
 #define RUN_PARTS_OPT_a (1<<0)
 #define RUN_PARTS_OPT_u (1<<1)
 #define RUN_PARTS_OPT_t (1<<2)
@@ -81,6 +84,7 @@ static bool invalid_name(const char *c)
 #else
 #define list_mode (0)
 #endif
+
 static int act(const char *file, struct stat *statbuf, void *args, int depth)
 {
 	int ret;
-- 
2.25.1