From: DaanDeMeyer Date: Mon, 14 Jul 2025 08:23:04 +0000 (+0200) Subject: nspawn: Generalize parse_bind_user_shell() X-Git-Tag: v258-rc1~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dbbbdde2666c361a8fd58182a21d384e34d20f8e;p=thirdparty%2Fsystemd.git nspawn: Generalize parse_bind_user_shell() Preparation for reuse in vmspawn. --- diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c index db770080b2b..90fe538a22d 100644 --- a/src/basic/parse-util.c +++ b/src/basic/parse-util.c @@ -13,6 +13,7 @@ #include "log.h" #include "missing-network.h" #include "parse-util.h" +#include "path-util.h" #include "process-util.h" #include "string-util.h" #include "strv.h" @@ -369,6 +370,29 @@ int parse_fd(const char *t) { return fd; } +int parse_user_shell(const char *s, char **ret_sh, bool *ret_copy) { + char *sh; + int r; + + if (path_is_absolute(s) && path_is_normalized(s)) { + sh = strdup(s); + if (!sh) + return -ENOMEM; + + *ret_sh = sh; + *ret_copy = false; + } else { + r = parse_boolean(s); + if (r < 0) + return r; + + *ret_sh = NULL; + *ret_copy = r; + } + + return 0; +} + static const char *mangle_base(const char *s, unsigned *base) { const char *k; diff --git a/src/basic/parse-util.h b/src/basic/parse-util.h index 4c251d2e96d..f79be849fd6 100644 --- a/src/basic/parse-util.h +++ b/src/basic/parse-util.h @@ -20,6 +20,7 @@ int parse_sector_size(const char *t, uint64_t *ret); int parse_range(const char *t, unsigned *lower, unsigned *upper); int parse_errno(const char *t); int parse_fd(const char *t); +int parse_user_shell(const char *s, char **ret_sh, bool *ret_copy); #define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30) #define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29) diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c index 052ea03919a..131c61e1741 100644 --- a/src/nspawn/nspawn-settings.c +++ b/src/nspawn/nspawn-settings.c @@ -1003,29 +1003,6 @@ int config_parse_bind_user( return 0; } -int parse_bind_user_shell(const char *s, char **ret_sh, bool *ret_copy) { - char *sh; - int r; - - if (path_is_absolute(s) && path_is_normalized(s)) { - sh = strdup(s); - if (!sh) - return -ENOMEM; - - *ret_sh = sh; - *ret_copy = false; - } else { - r = parse_boolean(s); - if (r < 0) - return r; - - *ret_sh = NULL; - *ret_copy = r; - } - - return 0; -} - int config_parse_bind_user_shell( const char *unit, const char *filename, @@ -1053,7 +1030,7 @@ int config_parse_bind_user_shell( return 0; } - r = parse_bind_user_shell(rvalue, &sh, ©); + r = parse_user_shell(rvalue, &sh, ©); if (r == -ENOMEM) return log_oom(); if (r < 0) { diff --git a/src/nspawn/nspawn-settings.h b/src/nspawn/nspawn-settings.h index 56a65d5a21a..84631e6558c 100644 --- a/src/nspawn/nspawn-settings.h +++ b/src/nspawn/nspawn-settings.h @@ -276,8 +276,6 @@ CONFIG_PARSER_PROTOTYPE(config_parse_userns_ownership); CONFIG_PARSER_PROTOTYPE(config_parse_bind_user); CONFIG_PARSER_PROTOTYPE(config_parse_bind_user_shell); -int parse_bind_user_shell(const char *s, char **ret_sh, bool *ret_copy); - const char* resolv_conf_mode_to_string(ResolvConfMode a) _const_; ResolvConfMode resolv_conf_mode_from_string(const char *s) _pure_; diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index a35fb2c5ad3..0bcf444b3ae 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -1542,7 +1542,7 @@ static int parse_argv(int argc, char *argv[]) { case ARG_BIND_USER_SHELL: { bool copy = false; char *sh = NULL; - r = parse_bind_user_shell(optarg, &sh, ©); + r = parse_user_shell(optarg, &sh, ©); if (r == -ENOMEM) return log_oom(); if (r < 0)