summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/systemd/systemd/0001-unit-file.c-consider-symlink-on-filesystems-like-NFS.patch
blob: ba20a0bb46cee0b2e0f627f16ac9e88570889fee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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