| From d0122c077d2d8fd0fd29b463c501e7ddf9177ff3 Mon Sep 17 00:00:00 2001 |
| From: Chen Qi <Qi.Chen@windriver.com> |
| 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 <Qi.Chen@windriver.com> |
| |
| 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 |
| |