]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
kernel-install: Only bypass "add" and "remove"
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 31 Jul 2023 18:56:14 +0000 (20:56 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 31 Jul 2023 18:56:14 +0000 (20:56 +0200)
KERNEL_INSTALL_BYPASS should only bypass verbs that actually change
the system, not harmless verbs such as "inspect".

src/kernel-install/kernel-install.c

index c573228991e89c72e1a803877066cdcf09f1809b..7de62f3ba410a84ef9c4469bd456b1498ccf2de8 100644 (file)
@@ -999,6 +999,19 @@ static int context_execute(Context *c) {
         return 0;
 }
 
+static bool bypass(void) {
+        int r;
+
+        r = getenv_bool("KERNEL_INSTALL_BYPASS");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $KERNEL_INSTALL_BYPASS, assuming no.");
+        if (r <= 0)
+                return false;
+
+        log_debug("$KERNEL_INSTALL_BYPASS is enabled, skipping execution.");
+        return true;
+}
+
 static int verb_add(int argc, char *argv[], void *userdata) {
         Context *c = ASSERT_PTR(userdata);
         int r;
@@ -1006,6 +1019,9 @@ static int verb_add(int argc, char *argv[], void *userdata) {
         assert(argc >= 3);
         assert(argv);
 
+        if (bypass())
+                return 0;
+
         c->action = ACTION_ADD;
 
         r = context_set_version(c, argv[1]);
@@ -1048,6 +1064,9 @@ static int verb_remove(int argc, char *argv[], void *userdata) {
                 log_debug("Too many arguments specified. 'kernel-install remove' takes only kernel version. "
                           "Ignoring residual arguments.");
 
+        if (bypass())
+                return 0;
+
         c->action = ACTION_REMOVE;
 
         r = context_set_version(c, argv[1]);
@@ -1098,19 +1117,6 @@ static int verb_inspect(int argc, char *argv[], void *userdata) {
         return 0;
 }
 
-static bool bypass(void) {
-        int r;
-
-        r = getenv_bool("KERNEL_INSTALL_BYPASS");
-        if (r < 0 && r != -ENXIO)
-                log_debug_errno(r, "Failed to parse $KERNEL_INSTALL_BYPASS, assuming no.");
-        if (r <= 0)
-                return false;
-
-        log_debug("$KERNEL_INSTALL_BYPASS is enabled, skipping execution.");
-        return true;
-}
-
 static int help(void) {
         _cleanup_free_ char *link = NULL;
         int r;
@@ -1239,9 +1245,6 @@ static int run(int argc, char* argv[]) {
 
         log_setup();
 
-        if (bypass())
-                return 0;
-
         r = parse_argv(argc, argv, &c);
         if (r <= 0)
                 return r;