From d0122c077d2d8fd0fd29b463c501e7ddf9177ff3 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Tue, 24 Sep 2019 17:04:50 +0800 Subject: [PATCH] unit-file.c: consider symlink on filesystems like NFS Some filesystems do not fully support readdir, according to the manual, so we should also consider DT_UNKNOWN to correctly handle symlinks. Signed-off-by: Chen Qi Upstream-Status: Submitted [https://github.com/systemd/systemd/pull/13637] --- src/shared/unit-file.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/shared/unit-file.c b/src/shared/unit-file.c index 4a5f23e6c1..8373103000 100644 --- a/src/shared/unit-file.c +++ b/src/shared/unit-file.c @@ -247,6 +247,7 @@ int unit_file_build_name_map( _cleanup_free_ char *_filename_free = NULL, *simplified = NULL; const char *suffix, *dst = NULL; bool valid_unit_name; + struct stat sb; valid_unit_name = unit_name_is_valid(de->d_name, UNIT_NAME_ANY); @@ -279,7 +280,10 @@ int unit_file_build_name_map( if (hashmap_contains(ids, de->d_name)) continue; - if (de->d_type == DT_LNK) { + if (de->d_type == DT_LNK || + (de->d_type == DT_UNKNOWN && + lstat(filename, &sb) == 0 && + (sb.st_mode & S_IFMT) == S_IFLNK)) { /* We don't explicitly check for alias loops here. unit_ids_map_get() which * limits the number of hops should be used to access the map. */ -- 2.17.1