summaryrefslogtreecommitdiff
path: root/backport-install-allow-removing-symlinks-even-for-units-that-.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-12-12 02:54:13 +0000
committerCoprDistGit <infra@openeuler.org>2024-12-12 02:54:13 +0000
commita35fcc8b3fc340a6b874440b2a87e155c807ece5 (patch)
tree02ca631dd69c05a4dfcbd98a0ed12e2b0d2cd035 /backport-install-allow-removing-symlinks-even-for-units-that-.patch
parentb7abaf7e217d7948f8101d25013189a9322dd6ef (diff)
automatic import of systemdopeneuler24.03_LTS
Diffstat (limited to 'backport-install-allow-removing-symlinks-even-for-units-that-.patch')
-rw-r--r--backport-install-allow-removing-symlinks-even-for-units-that-.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/backport-install-allow-removing-symlinks-even-for-units-that-.patch b/backport-install-allow-removing-symlinks-even-for-units-that-.patch
new file mode 100644
index 0000000..f817e02
--- /dev/null
+++ b/backport-install-allow-removing-symlinks-even-for-units-that-.patch
@@ -0,0 +1,74 @@
+From 5163c9b1e56293b1bb2803420613c5b374570892 Mon Sep 17 00:00:00 2001
+From: Luca Boccassi <bluca@debian.org>
+Date: Fri, 7 Jun 2024 21:39:45 +0100
+Subject: [PATCH] install: allow removing symlinks even for units that are gone
+
+If a symlink is leftover, still allow cleaning it up via 'disable'. This
+happens when a unit is stopped and removed, but not disabled, and a reload
+has already happened. At that point, cleaning up the old symlinks becomes
+impossible through the APIs, and needs to be done manually. Always allow
+cleaning up symlinks, if they exist, by only erroring out if there is an
+OOM.
+
+Follow-up for f31f10a6207efc9ae9e0b1f73975b5b610914017
+
+Conflict:Adaptation TEST-26-SYSTEMCTL.sh to testsuite-26.sh
+Reference:https://github.com/systemd/systemd/commit/5163c9b1e56293b1bb2803420613c5b374570892
+
+---
+ src/shared/install.c | 14 ++++++++++----
+ test/units/testsuite-26.sh | 6 ++++++
+ 2 files changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 0f4dab4..62d9c3c 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -2224,7 +2224,9 @@ static int install_context_mark_for_removal(
+ else {
+ log_debug_errno(r, "Unit %s not found, removing name.", i->name);
+ r = install_changes_add(changes, n_changes, r, i->path ?: i->name, NULL);
+- if (r < 0)
++ /* In case there's no unit, we still want to remove any leftover symlink, even if
++ * the unit might have been removed already, hence treating ENOENT as non-fatal. */
++ if (r != -ENOENT)
+ return r;
+ }
+ } else if (r < 0) {
+@@ -2822,9 +2824,13 @@ static int do_unit_file_disable(
+ r = install_info_add(&ctx, *name, NULL, lp->root_dir, /* auxiliary= */ false, &info);
+ if (r >= 0)
+ r = install_info_traverse(&ctx, lp, info, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
+-
+- if (r < 0)
+- return install_changes_add(changes, n_changes, r, *name, NULL);
++ if (r < 0) {
++ r = install_changes_add(changes, n_changes, r, *name, NULL);
++ /* In case there's no unit, we still want to remove any leftover symlink, even if
++ * the unit might have been removed already, hence treating ENOENT as non-fatal. */
++ if (r != -ENOENT)
++ return r;
++ }
+
+ /* If we enable multiple units, some with install info and others without,
+ * the "empty [Install] section" warning is not shown. Let's make the behavior
+diff --git a/test/units/testsuite-26.sh b/test/units/testsuite-26.sh
+index 1e11c42..d08b03a 100755
+--- a/test/units/testsuite-26.sh
++++ b/test/units/testsuite-26.sh
+@@ -311,6 +311,12 @@ systemctl cat "$UNIT_NAME"
+ systemctl help "$UNIT_NAME"
+ systemctl service-watchdogs
+ systemctl service-watchdogs "$(systemctl service-watchdogs)"
++# Ensure that the enablement symlinks can still be removed after the user is gone, to avoid having leftovers
++systemctl enable "$UNIT_NAME"
++systemctl stop "$UNIT_NAME"
++rm -f "/usr/lib/systemd/system/$UNIT_NAME"
++systemctl daemon-reload
++systemctl disable "$UNIT_NAME"
+
+ # show/set-environment
+ # Make sure PATH is set
+--
+2.33.0
+