]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
machine: machine_default_shell_path() & machine_default_shell_args() helper functions
authorIvan Kruglov <mail@ikruglov.com>
Tue, 22 Oct 2024 13:15:54 +0000 (15:15 +0200)
committerIvan Kruglov <mail@ikruglov.com>
Wed, 6 Nov 2024 10:37:51 +0000 (11:37 +0100)
src/machine/machine-dbus.c
src/machine/machine.c
src/machine/machine.h

index 371441a18e3382c54ec1e6c71ed90df702e3ad26..2ed779d117f75c2d0171cfe35ecaefd12eb4449e 100644 (file)
@@ -359,25 +359,10 @@ int bus_machine_method_open_shell(sd_bus_message *message, void *userdata, sd_bu
         if (r < 0)
                 return r;
         if (isempty(path)) {
-                path = "/bin/sh";
-
-                args = new0(char*, 3 + 1);
+                path = machine_default_shell_path();
+                args = machine_default_shell_args(user);
                 if (!args)
                         return -ENOMEM;
-                args[0] = strdup("sh");
-                if (!args[0])
-                        return -ENOMEM;
-                args[1] = strdup("-c");
-                if (!args[1])
-                        return -ENOMEM;
-                r = asprintf(&args[2],
-                             "shell=$(getent passwd %s 2>/dev/null | { IFS=: read _ _ _ _ _ _ x; echo \"$x\"; })\n"\
-                             "exec \"${shell:-/bin/sh}\" -l", /* -l is means --login */
-                             user);
-                if (r < 0) {
-                        args[2] = NULL;
-                        return -ENOMEM;
-                }
         } else {
                 if (!path_is_absolute(path))
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Specified path '%s' is not absolute", path);
index b1ef7e034b9d161785dbe980719aa514959c675b..587c2267b6929e542c131208ad6d125b0cd8f75d 100644 (file)
@@ -943,6 +943,36 @@ int machine_start_shell(
         return 0;
 }
 
+char** machine_default_shell_args(const char *user) {
+        _cleanup_strv_free_ char **args = NULL;
+        int r;
+
+        assert(user);
+
+        args = new0(char*, 3 + 1);
+        if (!args)
+                return NULL;
+
+        args[0] = strdup("sh");
+        if (!args[0])
+                return NULL;
+
+        args[1] = strdup("-c");
+        if (!args[1])
+                return NULL;
+
+        r = asprintf(&args[2],
+                     "shell=$(getent passwd %s 2>/dev/null | { IFS=: read _ _ _ _ _ _ x; echo \"$x\"; })\n"\
+                     "exec \"${shell:-/bin/sh}\" -l", /* -l is means --login */
+                     user);
+        if (r < 0) {
+                args[2] = NULL;
+                return NULL;
+        }
+
+        return TAKE_PTR(args);
+}
+
 void machine_release_unit(Machine *m) {
         assert(m);
 
index 58250adb0ee4a7bdb0e9cea394d5a1e13c1678be..bf265143f03be37abc0ac2a9455a5e04cb2eff5a 100644 (file)
@@ -104,6 +104,8 @@ int machine_openpt(Machine *m, int flags, char **ret_slave);
 int machine_open_terminal(Machine *m, const char *path, int mode);
 int machine_start_getty(Machine *m, const char *ptmx_name, sd_bus_error *error);
 int machine_start_shell(Machine *m, int ptmx_fd, const char *ptmx_name, const char *user, const char *path, char **args, char **env, sd_bus_error *error);
+#define machine_default_shell_path() ("/bin/sh")
+char** machine_default_shell_args(const char *user);
 
 int machine_get_uid_shift(Machine *m, uid_t *ret);