]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nspawn: Generalize parse_bind_user_shell()
authorDaanDeMeyer <daan.j.demeyer@gmail.com>
Mon, 14 Jul 2025 08:23:04 +0000 (10:23 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 15 Jul 2025 12:22:52 +0000 (14:22 +0200)
Preparation for reuse in vmspawn.

src/basic/parse-util.c
src/basic/parse-util.h
src/nspawn/nspawn-settings.c
src/nspawn/nspawn-settings.h
src/nspawn/nspawn.c

index db770080b2bdc2a9d39c4878cac2037aeed09c6f..90fe538a22dc51af2d964cc44514d2581b3f0e7c 100644 (file)
@@ -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;
 
index 4c251d2e96d290bf8a0d2da0da8bc703f99f8a40..f79be849fd6b59cd00ce6a3bcc9956bad6c027c5 100644 (file)
@@ -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)
index 052ea03919a3acff7e0b6e392f8567e96a65eb6f..131c61e1741d8530f47159a17c3e27789cb79550 100644 (file)
@@ -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, &copy);
+        r = parse_user_shell(rvalue, &sh, &copy);
         if (r == -ENOMEM)
                 return log_oom();
         if (r < 0) {
index 56a65d5a21a48e8df1cfde577b4d4fe3f1b42e8d..84631e6558cef88429a6b874e42cb55ea3ff0bc6 100644 (file)
@@ -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_;
 
index a35fb2c5ad37fd1cbd66309ca93186a37b869317..0bcf444b3ae505f5532e713060d76fbd1b2840f4 100644 (file)
@@ -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, &copy);
+                        r = parse_user_shell(optarg, &sh, &copy);
                         if (r == -ENOMEM)
                                 return log_oom();
                         if (r < 0)