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>
This commit is contained in:
		
				
					committed by
					
						
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							947a22b332
						
					
				
				
					commit
					8c1f8aa016
				
			@@ -113,13 +113,24 @@ enum {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Is this a valid filename (upper/lower alpha, digits,
 | 
					/* 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)
 | 
					static bool invalid_name(const char *c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	c = bb_basename(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++;
 | 
							c++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return *c; /* TRUE (!0) if terminating NUL is not reached */
 | 
						return *c; /* TRUE (!0) if terminating NUL is not reached */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user