1
0
mirror of https://github.com/systemd/systemd.git synced 2025-02-18 21:57:48 +03:00

shared/unit-file: fix resolution of absoulute symlinks with --root

$ systemctl --no-pager --root /tmp/root2/ cat ctrl-alt-del.target
Failed to resolve symlink /tmp/root2/etc/systemd/system/ctrl-alt-del.target pointing to /usr/lib/systemd/system/reboot.target, ignoring: Channel number out of range
...
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2020-04-30 12:02:44 +02:00
parent 26b8190841
commit b8239b9c50

View File

@ -320,7 +320,7 @@ int unit_file_build_name_map(
/* 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. */
_cleanup_free_ char *target = NULL, *target_abs = NULL;
_cleanup_free_ char *target = NULL;
r = readlinkat_malloc(dirfd(d), de->d_name, &target);
if (r < 0) {
@ -329,8 +329,9 @@ int unit_file_build_name_map(
continue;
}
if (!path_is_absolute(target)) {
target_abs = path_join(*dir, target);
const bool is_abs = path_is_absolute(target);
if (lp->root_dir || !is_abs) {
char *target_abs = path_join(is_abs ? lp->root_dir : *dir, target);
if (!target_abs)
return log_oom();