Zbigniew Jędrzejewski-Szmek ea1976
From 471a21a8647c54a0a9c7334a7dde4e6dd1712248 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek ea1976
From: Dave Reisner <dreisner@archlinux.org>
Zbigniew Jędrzejewski-Szmek ea1976
Date: Thu, 30 Oct 2014 20:12:05 -0400
Zbigniew Jędrzejewski-Szmek ea1976
Subject: [PATCH] shared/install: avoid prematurely rejecting "missing" units
Zbigniew Jędrzejewski-Szmek ea1976
Zbigniew Jędrzejewski-Szmek ea1976
f7101b7368df copied some logic to prevent enabling masked units, but
Zbigniew Jędrzejewski-Szmek ea1976
also added a check which causes attempts to enable templated units to
Zbigniew Jędrzejewski-Szmek ea1976
fail. Since we know the logic beyond this check will properly handle
Zbigniew Jędrzejewski-Szmek ea1976
units which truly do not exist, we can rely on the unit file state
Zbigniew Jędrzejewski-Szmek ea1976
comparison to suffice for expressing the intent of f7101b7368df.
Zbigniew Jędrzejewski-Szmek ea1976
Zbigniew Jędrzejewski-Szmek ea1976
ref: https://bugs.archlinux.org/task/42616
Zbigniew Jędrzejewski-Szmek ea1976
(cherry picked from commit 0ffce503cd6e5a5ff5ba5cd1cc23684cfb8bb9e3)
Zbigniew Jędrzejewski-Szmek ea1976
---
Zbigniew Jędrzejewski-Szmek ea1976
 src/shared/install.c | 8 +++-----
Zbigniew Jędrzejewski-Szmek ea1976
 1 file changed, 3 insertions(+), 5 deletions(-)
Zbigniew Jędrzejewski-Szmek ea1976
Zbigniew Jędrzejewski-Szmek ea1976
diff --git a/src/shared/install.c b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek ea1976
index 035b44cc52..cab93e8dc6 100644
Zbigniew Jędrzejewski-Szmek ea1976
--- a/src/shared/install.c
Zbigniew Jędrzejewski-Szmek ea1976
+++ b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek ea1976
@@ -1620,12 +1620,10 @@ int unit_file_enable(
Zbigniew Jędrzejewski-Szmek ea1976
         STRV_FOREACH(i, files) {
Zbigniew Jędrzejewski-Szmek ea1976
                 UnitFileState state;
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
+                /* We only want to know if this unit is masked, so we ignore
Zbigniew Jędrzejewski-Szmek ea1976
+                 * errors from unit_file_get_state, deferring other checks.
Zbigniew Jędrzejewski-Szmek ea1976
+                 * This allows templated units to be enabled on the fly. */
Zbigniew Jędrzejewski-Szmek ea1976
                 state = unit_file_get_state(scope, root_dir, *i);
Zbigniew Jędrzejewski-Szmek ea1976
-                if (state < 0) {
Zbigniew Jędrzejewski-Szmek ea1976
-                        log_error("Failed to get unit file state for %s: %s", *i, strerror(-state));
Zbigniew Jędrzejewski-Szmek ea1976
-                        return state;
Zbigniew Jędrzejewski-Szmek ea1976
-                }
Zbigniew Jędrzejewski-Szmek ea1976
-
Zbigniew Jędrzejewski-Szmek ea1976
                 if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) {
Zbigniew Jędrzejewski-Szmek ea1976
                         log_error("Failed to enable unit: Unit %s is masked", *i);
Zbigniew Jędrzejewski-Szmek ea1976
                         return -ENOTSUP;