From 98c80f44c96238b50678a9fc419a5b41a5598859 Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Mon, 12 Dec 2011 15:23:03 -0200 Subject: [PATCH] Directories inside config directories are not supported This was failing silent, both in libkmod and module-init-tools. Give a warning if we created a dir inside config directories. --- libkmod/libkmod-config.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c index 605e021..94d9ccd 100644 --- a/libkmod/libkmod-config.c +++ b/libkmod/libkmod-config.c @@ -363,10 +363,11 @@ void kmod_config_free(struct kmod_config *config) free(config); } -static bool conf_files_filter_out(struct kmod_ctx *ctx, const char *path, - const char *fn) +static bool conf_files_filter_out(struct kmod_ctx *ctx, DIR *d, + const char *path, const char *fn) { size_t len = strlen(fn); + struct stat st; if (fn[0] == '.') return 1; @@ -379,6 +380,14 @@ static bool conf_files_filter_out(struct kmod_ctx *ctx, const char *path, return 1; } + fstatat(dirfd(d), fn, &st, 0); + + if (S_ISDIR(st.st_mode)) { + ERR(ctx, "Directories inside directories are not supported: " + "%s/%s\n", path, fn); + return 1; + } + return 0; } @@ -415,7 +424,7 @@ static DIR *conf_files_list(struct kmod_ctx *ctx, struct kmod_list **list, if (entp == NULL) break; - if (conf_files_filter_out(ctx, path, entp->d_name) == 1) + if (conf_files_filter_out(ctx, d, path, entp->d_name) == 1) continue; /* insert sorted */ -- 2.7.4