]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nspawn: let's make LinkJournal an extended boolean
authorLennart Poettering <lennart@poettering.net>
Tue, 1 Sep 2020 21:26:50 +0000 (23:26 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 2 Sep 2020 06:57:44 +0000 (08:57 +0200)
Let's accept the usual boolean parameters for LinkJournal. It's
confusing otherwise.

Previously we'd accept "no" but not the other values we typically accept
for "false". We'd not accept any values for "true".

With this change we'll accept all true and false values and will do
something somewhat reasonable: any false value is treated like "no"
previously was reated. And any true value is now treated like "auto".

We don't document the new values, since this logic is mostly redundant,
and it's probably better if people consider this an enum rather than a
bool.

Fixes: #16888
src/nspawn/nspawn-settings.c

index d341fa25aac423d1a13e6a8346a790fe8861efbb..2fa5cc40a32612862255fefe50a32e54d7173a27 100644 (file)
@@ -809,6 +809,8 @@ static const char *const resolv_conf_mode_table[_RESOLV_CONF_MODE_MAX] = {
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(resolv_conf_mode, ResolvConfMode, RESOLV_CONF_AUTO);
 
 int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
+        int r;
+
         assert(s);
         assert(ret_mode);
         assert(ret_try);
@@ -816,9 +818,6 @@ int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
         if (streq(s, "auto")) {
                 *ret_mode = LINK_AUTO;
                 *ret_try = false;
-        } else if (streq(s, "no")) {
-                *ret_mode = LINK_NO;
-                *ret_try = false;
         } else if (streq(s, "guest")) {
                 *ret_mode = LINK_GUEST;
                 *ret_try = false;
@@ -831,8 +830,16 @@ int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
         } else if (streq(s, "try-host")) {
                 *ret_mode = LINK_HOST;
                 *ret_try = true;
-        } else
-                return -EINVAL;
+        } else {
+                /* Also support boolean values, to make things less confusing. */
+                r = parse_boolean(s);
+                if (r < 0)
+                        return r;
+
+                /* Let's consider "true" to be equivalent to "auto". */
+                *ret_mode = r ? LINK_AUTO : LINK_NO;
+                *ret_try = false;
+        }
 
         return 0;
 }