From: Yu Watanabe Date: Thu, 26 Jun 2025 13:52:17 +0000 (+0900) Subject: conf-files: split CONF_FILES_FILTER_MASKED flag into two X-Git-Tag: v258-rc1~232 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e93d8c844c58f00e30dacac7d3b013964e8674c3;p=thirdparty%2Fsystemd.git conf-files: split CONF_FILES_FILTER_MASKED flag into two --- diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index 644bd170cac..2d551425819 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -63,16 +63,25 @@ static int files_add( } /* Is this a masking entry? */ - if ((flags & CONF_FILES_FILTER_MASKED)) - if (null_or_empty(&st)) { - /* Mark this one as masked */ - r = set_put_strdup(masked, de->d_name); - if (r < 0) - return r; - - log_debug("File '%s/%s' is a mask.", dirpath, de->d_name); - continue; - } + if (FLAGS_SET(flags, CONF_FILES_FILTER_MASKED_BY_SYMLINK) && stat_may_be_dev_null(&st)) { + /* Mark this one as masked */ + r = set_put_strdup(masked, de->d_name); + if (r < 0) + return r; + + log_debug("File '%s/%s' is a mask (symlink to /dev/null).", dirpath, de->d_name); + continue; + } + + if (FLAGS_SET(flags, CONF_FILES_FILTER_MASKED_BY_EMPTY) && stat_is_empty(&st)) { + /* Mark this one as masked */ + r = set_put_strdup(masked, de->d_name); + if (r < 0) + return r; + + log_debug("File '%s/%s' is a mask (an empty file).", dirpath, de->d_name); + continue; + } /* Does this node have the right type? */ if (flags & (CONF_FILES_REGULAR|CONF_FILES_DIRECTORY)) diff --git a/src/basic/conf-files.h b/src/basic/conf-files.h index 2bee1448e49..a1b9af0ea2c 100644 --- a/src/basic/conf-files.h +++ b/src/basic/conf-files.h @@ -4,11 +4,13 @@ #include "forward.h" typedef enum ConfFilesFlags { - CONF_FILES_EXECUTABLE = 1 << 0, - CONF_FILES_REGULAR = 1 << 1, - CONF_FILES_DIRECTORY = 1 << 2, - CONF_FILES_BASENAME = 1 << 3, - CONF_FILES_FILTER_MASKED = 1 << 4, + CONF_FILES_EXECUTABLE = 1 << 0, + CONF_FILES_REGULAR = 1 << 1, + CONF_FILES_DIRECTORY = 1 << 2, + CONF_FILES_BASENAME = 1 << 3, + CONF_FILES_FILTER_MASKED_BY_SYMLINK = 1 << 4, + CONF_FILES_FILTER_MASKED_BY_EMPTY = 1 << 5, + CONF_FILES_FILTER_MASKED = CONF_FILES_FILTER_MASKED_BY_SYMLINK | CONF_FILES_FILTER_MASKED_BY_EMPTY, } ConfFilesFlags; int conf_files_list(char ***ret, const char *suffix, const char *root, ConfFilesFlags flags, const char *dir);