From: Zbigniew Jędrzejewski-Szmek Date: Tue, 6 Aug 2019 18:22:23 +0000 (+0200) Subject: core/mount-setup: use conf_files_list_strv() for relabel-extra.d/ X-Git-Tag: v244-rc1~301^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=48da02ec6f46c93b083d0790e031d8f73b877858;p=thirdparty%2Fsystemd.git core/mount-setup: use conf_files_list_strv() for relabel-extra.d/ --- diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index ea7b0a80cbd..0ec90c5aebd 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -10,8 +10,8 @@ #include "alloc-util.h" #include "bus-util.h" #include "cgroup-util.h" +#include "conf-files.h" #include "dev-setup.h" -#include "dirent-util.h" #include "efivars.h" #include "fd-util.h" #include "fileio.h" @@ -408,7 +408,8 @@ static int relabel_cgroup_filesystems(void) { } static int relabel_extra(void) { - _cleanup_closedir_ DIR *d = NULL; + _cleanup_strv_free_ char **files = NULL; + char **file; int r, c = 0; /* Support for relabelling additional files or directories after loading the policy. For this, code in the @@ -419,55 +420,27 @@ static int relabel_extra(void) { * possible. */ - d = opendir("/run/systemd/relabel-extra.d/"); - if (!d) { - if (errno == ENOENT) - return 0; - - return log_warning_errno(errno, "Failed to open /run/systemd/relabel-extra.d/, ignoring: %m"); - } + r = conf_files_list(&files, ".relabel", NULL, + CONF_FILES_FILTER_MASKED | CONF_FILES_REGULAR, + "/run/systemd/relabel-extra.d/", NULL); + if (r < 0) + return log_error_errno(r, "Failed to enumerate /run/systemd/relabel-extra.d/, ignoring: %m"); - for (;;) { + STRV_FOREACH(file, files) { _cleanup_fclose_ FILE *f = NULL; - _cleanup_close_ int fd = -1; - struct dirent *de; - - errno = 0; - de = readdir_no_dot(d); - if (!de) { - if (errno != 0) - return log_error_errno(errno, "Failed read directory /run/systemd/relabel-extra.d/, ignoring: %m"); - break; - } - - if (hidden_or_backup_file(de->d_name)) - continue; - - if (!endswith(de->d_name, ".relabel")) - continue; - - if (!IN_SET(de->d_type, DT_REG, DT_UNKNOWN)) - continue; - - fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC|O_NONBLOCK); - if (fd < 0) { - log_warning_errno(errno, "Failed to open /run/systemd/relabel-extra.d/%s, ignoring: %m", de->d_name); - continue; - } - f = fdopen(fd, "r"); + f = fopen(*file, "re"); if (!f) { - log_warning_errno(errno, "Failed to convert file descriptor into file object, ignoring: %m"); + log_warning_errno(errno, "Failed to open %s, ignoring: %m", *file); continue; } - TAKE_FD(fd); for (;;) { _cleanup_free_ char *line = NULL; r = read_line(f, LONG_LINE_MAX, &line); if (r < 0) { - log_warning_errno(r, "Failed to read from /run/systemd/relabel-extra.d/%s, ignoring: %m", de->d_name); + log_warning_errno(r, "Failed to read %s, ignoring: %m", *file); break; } if (r == 0) /* EOF */ @@ -490,11 +463,11 @@ static int relabel_extra(void) { c++; } - if (unlinkat(dirfd(d), de->d_name, 0) < 0) - log_warning_errno(errno, "Failed to remove /run/systemd/relabel-extra.d/%s, ignoring: %m", de->d_name); + if (unlink(*file) < 0) + log_warning_errno(errno, "Failed to remove %s, ignoring: %m", *file); } - /* Remove when we completing things. */ + /* Remove when we complete things. */ if (rmdir("/run/systemd/relabel-extra.d") < 0) log_warning_errno(errno, "Failed to remove /run/systemd/relabel-extra.d/ directory: %m");