diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index f9c2acc53a9..d292e4489fc 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -4365,7 +4365,7 @@ int config_parse_protect_home( void *userdata) { ExecContext *c = data; - int k; + ProtectHome h; assert(filename); assert(lvalue); @@ -4375,23 +4375,14 @@ int config_parse_protect_home( /* Our enum shall be a superset of booleans, hence first try * to parse as boolean, and then as enum */ - k = parse_boolean(rvalue); - if (k > 0) - c->protect_home = PROTECT_HOME_YES; - else if (k == 0) - c->protect_home = PROTECT_HOME_NO; - else { - ProtectHome h; - - h = protect_home_from_string(rvalue); - if (h < 0) { - log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse protect home value, ignoring: %s", rvalue); - return 0; - } - - c->protect_home = h; + h = parse_protect_home_or_bool(rvalue); + if (h < 0) { + log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse protect home value, ignoring: %s", rvalue); + return 0; } + c->protect_home = h; + return 0; } diff --git a/src/core/namespace.c b/src/core/namespace.c index a3262fcc4da..ed02d40e512 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -1450,6 +1450,18 @@ static const char *const protect_home_table[_PROTECT_HOME_MAX] = { DEFINE_STRING_TABLE_LOOKUP(protect_home, ProtectHome); +ProtectHome parse_protect_home_or_bool(const char *s) { + int r; + + r = parse_boolean(s); + if (r > 0) + return PROTECT_HOME_YES; + if (r == 0) + return PROTECT_HOME_NO; + + return protect_home_from_string(s); +} + static const char *const protect_system_table[_PROTECT_SYSTEM_MAX] = { [PROTECT_SYSTEM_NO] = "no", [PROTECT_SYSTEM_YES] = "yes", diff --git a/src/core/namespace.h b/src/core/namespace.h index f0f198362cb..e497f2b65b8 100644 --- a/src/core/namespace.h +++ b/src/core/namespace.h @@ -101,6 +101,7 @@ int setup_netns(int netns_storage_socket[2]); const char* protect_home_to_string(ProtectHome p) _const_; ProtectHome protect_home_from_string(const char *s) _pure_; +ProtectHome parse_protect_home_or_bool(const char *s); const char* protect_system_to_string(ProtectSystem p) _const_; ProtectSystem protect_system_from_string(const char *s) _pure_;