]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
conf-files: port conf_files_list() over to chase_symlinks() from prefix_roota() 24392/head
authorLennart Poettering <lennart@poettering.net>
Mon, 22 Aug 2022 12:07:27 +0000 (14:07 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 22 Aug 2022 12:08:48 +0000 (14:08 +0200)
src/basic/conf-files.c

index 82c6dc5677b132350b8cbb54c1458707b8717f67..532c9d19b83c91c9ab98a40233e295fe1fdd1c5e 100644 (file)
@@ -5,6 +5,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "chase-symlinks.h"
 #include "conf-files.h"
 #include "def.h"
 #include "dirent-util.h"
@@ -28,23 +29,19 @@ static int files_add(
                 unsigned flags,
                 const char *path) {
 
+        _cleanup_free_ char *dirpath = NULL;
         _cleanup_closedir_ DIR *dir = NULL;
-        const char *dirpath;
         int r;
 
         assert(h);
         assert((flags & CONF_FILES_FILTER_MASKED) == 0 || masked);
         assert(path);
 
-        dirpath = prefix_roota(root, path);
-
-        dir = opendir(dirpath);
-        if (!dir) {
-                if (errno == ENOENT)
-                        return 0;
-
-                return log_debug_errno(errno, "Failed to open directory '%s': %m", dirpath);
-        }
+        r = chase_symlinks_and_opendir(path, root, CHASE_PREFIX_ROOT, &dirpath, &dir);
+        if (r == -ENOENT)
+                return 0;
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open directory '%s/%s': %m", empty_or_root(root) ? "" : root, dirpath);
 
         FOREACH_DIRENT(de, dir, return -errno) {
                 struct stat st;