mirror of
https://github.com/systemd/systemd
synced 2024-07-21 10:17:21 +00:00
systemctl: enable: overwrite broken alias symlinks
When switching to an alternative alias provider, the previous one might have been uninstalled or so. It should be fine for us to overwrite them directly. Closes #23694
This commit is contained in:
parent
44db9fbb39
commit
c067e61b85
|
@ -1892,6 +1892,7 @@ static int install_info_symlink_alias(
|
|||
|
||||
STRV_FOREACH(s, info->aliases) {
|
||||
_cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL;
|
||||
bool broken;
|
||||
|
||||
q = install_name_printf(scope, info, *s, &dst);
|
||||
if (q < 0) {
|
||||
|
@ -1912,7 +1913,14 @@ static int install_info_symlink_alias(
|
|||
if (!alias_path)
|
||||
return -ENOMEM;
|
||||
|
||||
q = create_symlink(lp, info->path, alias_path, force, changes, n_changes);
|
||||
q = chase_symlinks(alias_path, lp->root_dir, CHASE_NONEXISTENT, NULL, NULL);
|
||||
if (q < 0 && q != -ENOENT) {
|
||||
r = r < 0 ? r : q;
|
||||
continue;
|
||||
}
|
||||
broken = q == 0; /* symlink target does not exist? */
|
||||
|
||||
q = create_symlink(lp, info->path, alias_path, force || broken, changes, n_changes);
|
||||
r = r < 0 ? r : q;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue