modprobe: skip non-.conf files only in subdirectories

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2016-03-29 19:23:55 +02:00
parent 31c984dd69
commit 20dd499341

View File

@ -214,7 +214,7 @@ static void add_probe(const char *name)
static int FAST_FUNC config_file_action(const char *filename, static int FAST_FUNC config_file_action(const char *filename,
struct stat *statbuf UNUSED_PARAM, struct stat *statbuf UNUSED_PARAM,
void *userdata UNUSED_PARAM, void *userdata UNUSED_PARAM,
int depth UNUSED_PARAM) int depth)
{ {
char *tokens[3]; char *tokens[3];
parser_t *p; parser_t *p;
@ -222,15 +222,20 @@ static int FAST_FUNC config_file_action(const char *filename,
int rc = TRUE; int rc = TRUE;
const char *base, *ext; const char *base, *ext;
/* Skip files that begin with a ".". */ /* Skip files that begin with a "." */
base = bb_basename(filename); base = bb_basename(filename);
if (base[0] == '.') if (base[0] == '.')
goto error; goto error;
/* Skip files that do not end with a ".conf". */ /* In dir recursion, skip files that do not end with a ".conf"
* depth==0: read_config("modules.{symbols,alias}") must work,
* "include FILE_NOT_ENDING_IN_CONF" must work too.
*/
if (depth != 0) {
ext = strrchr(base, '.'); ext = strrchr(base, '.');
if (ext == NULL || strcmp(ext + 1, "conf")) if (ext == NULL || strcmp(ext + 1, "conf"))
goto error; goto error;
}
p = config_open2(filename, fopen_for_read); p = config_open2(filename, fopen_for_read);
if (p == NULL) { if (p == NULL) {
@ -275,7 +280,7 @@ static int FAST_FUNC config_file_action(const char *filename,
m = get_or_add_modentry(tokens[1]); m = get_or_add_modentry(tokens[1]);
m->options = gather_options_str(m->options, tokens[2]); m->options = gather_options_str(m->options, tokens[2]);
} else if (strcmp(tokens[0], "include") == 0) { } else if (strcmp(tokens[0], "include") == 0) {
/* include <filename> */ /* include <filename>/<dirname> (yes, directories also must work) */
read_config(tokens[1]); read_config(tokens[1]);
} else if (ENABLE_FEATURE_MODPROBE_BLACKLIST } else if (ENABLE_FEATURE_MODPROBE_BLACKLIST
&& strcmp(tokens[0], "blacklist") == 0 && strcmp(tokens[0], "blacklist") == 0
@ -292,7 +297,8 @@ static int FAST_FUNC config_file_action(const char *filename,
static int read_config(const char *path) static int read_config(const char *path)
{ {
return recursive_action(path, ACTION_RECURSE | ACTION_QUIET, return recursive_action(path, ACTION_RECURSE | ACTION_QUIET,
config_file_action, NULL, NULL, 1); config_file_action, NULL, NULL,
/*depth:*/ 0);
} }
static const char *humanly_readable_name(struct module_entry *m) static const char *humanly_readable_name(struct module_entry *m)