tree-wide: check --machine= specification

Addresses https://github.com/systemd/systemd/pull/37741#discussion_r2128482378
This commit is contained in:
Mike Yuan
2025-06-17 01:48:08 +02:00
parent 6fdb6c73ae
commit a59cc3860b
16 changed files with 80 additions and 44 deletions

View File

@@ -453,8 +453,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_MAN:

View File

@@ -2265,8 +2265,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case 'C':

View File

@@ -3418,8 +3418,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case 'I':

View File

@@ -33,7 +33,7 @@
static bool arg_ask_password = true;
static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
static char *arg_host = NULL;
static const char *arg_host = NULL;
static bool arg_transient = false;
static bool arg_pretty = false;
static bool arg_static = false;
@@ -791,8 +791,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_TRANSIENT:

View File

@@ -1111,8 +1111,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_READ_ONLY:

View File

@@ -18,6 +18,7 @@
#include "main-func.h"
#include "memory-util.h"
#include "pager.h"
#include "parse-argument.h"
#include "polkit-agent.h"
#include "pretty-print.h"
#include "runtime-scope.h"
@@ -452,7 +453,7 @@ static int parse_argv(int argc, char *argv[]) {
{}
};
int c;
int r, c;
assert(argc >= 0);
assert(argv);
@@ -489,8 +490,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case '?':

View File

@@ -47,7 +47,7 @@ static sd_json_format_flags_t arg_json_format_flags = SD_JSON_FORMAT_OFF;
static const char *arg_kill_whom = NULL;
static int arg_signal = SIGTERM;
static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
static char *arg_host = NULL;
static const char *arg_host = NULL;
static bool arg_ask_password = true;
static unsigned arg_lines = 10;
static OutputMode arg_output = OUTPUT_SHORT;
@@ -1654,8 +1654,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case '?':

View File

@@ -279,8 +279,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_DISCOVER:

View File

@@ -21,6 +21,7 @@
#include "main-func.h"
#include "os-util.h"
#include "pager.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "path-util.h"
#include "polkit-agent.h"
@@ -35,7 +36,7 @@ static bool arg_legend = true;
static bool arg_ask_password = true;
static bool arg_quiet = false;
static const char *arg_profile = "default";
static const char* arg_copy_mode = NULL;
static const char *arg_copy_mode = NULL;
static bool arg_runtime = false;
static bool arg_reload = true;
static bool arg_cat = false;
@@ -1318,7 +1319,6 @@ static int help(int argc, char *argv[], void *userdata) {
}
static int parse_argv(int argc, char *argv[]) {
int r;
enum {
ARG_VERSION = 0x100,
@@ -1360,15 +1360,12 @@ static int parse_argv(int argc, char *argv[]) {
{}
};
int r, c;
assert(argc >= 0);
assert(argv);
for (;;) {
int c;
c = getopt_long(argc, argv, "hH:M:qp:", options, NULL);
if (c < 0)
break;
while ((c = getopt_long(argc, argv, "hH:M:qp:", options, NULL)) >= 0)
switch (c) {
@@ -1396,8 +1393,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case 'q':
@@ -1476,7 +1474,6 @@ static int parse_argv(int argc, char *argv[]) {
default:
assert_not_reached();
}
}
return 1;
}

View File

@@ -457,8 +457,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_SERVICE_TYPE:
@@ -900,8 +901,9 @@ static int parse_argv_sudo_mode(int argc, char *argv[]) {
break;
case ARG_MACHINE:
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_UNIT:

View File

@@ -1,7 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "alloc-util.h"
#include "bus-util.h"
#include "format-table.h"
#include "hostname-util.h"
#include "log.h"
#include "parse-argument.h"
#include "parse-util.h"
@@ -143,3 +145,23 @@ int parse_signal_argument(const char *s, int *ret) {
*ret = r;
return 1; /* work to do */
}
int parse_machine_argument(const char *s, const char **ret_host, BusTransport *ret_transport) {
int r;
assert(s);
assert(ret_host);
r = machine_spec_valid(s);
if (r < 0)
return log_error_errno(r, "Failed to validate --machine= argument '%s': %m", s);
if (r == 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid --machine= specified: %s", s);
*ret_host = s;
if (ret_transport)
*ret_transport = BUS_TRANSPORT_MACHINE;
return 0;
}

View File

@@ -8,3 +8,4 @@ int parse_tristate_argument(const char *optname, const char *s, int *ret);
int parse_json_argument(const char *s, sd_json_format_flags_t *ret);
int parse_path_argument(const char *path, bool suppress_root, char **arg);
int parse_signal_argument(const char *s, int *ret);
int parse_machine_argument(const char *s, const char **ret_host, BusTransport *ret_transport);

View File

@@ -14,6 +14,7 @@
#include "io-util.h"
#include "log.h"
#include "main-func.h"
#include "parse-argument.h"
#include "time-util.h"
static const char *arg_bus_path = DEFAULT_SYSTEM_BUS_ADDRESS;
@@ -35,9 +36,9 @@ static int help(void) {
}
static int parse_argv(int argc, char *argv[]) {
enum {
ARG_VERSION = 0x100,
ARG_MACHINE,
ARG_USER,
ARG_SYSTEM,
};
@@ -52,7 +53,7 @@ static int parse_argv(int argc, char *argv[]) {
{},
};
int c;
int r, c;
assert(argc >= 0);
assert(argv);
@@ -80,8 +81,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_bus_path = optarg;
arg_transport = BUS_TRANSPORT_MACHINE;
r = parse_machine_argument(optarg, &arg_bus_path, &arg_transport);
if (r < 0)
return r;
break;
case '?':

View File

@@ -788,8 +788,9 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_RUNTIME:

View File

@@ -36,7 +36,7 @@ static bool arg_reboot = false;
static bool arg_offline = false;
static bool arg_now = false;
static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
static char *arg_host = NULL;
static const char *arg_host = NULL;
#define SYSUPDATE_HOST_PATH "/org/freedesktop/sysupdate1/target/host"
#define SYSUPDATE_TARGET_INTERFACE "org.freedesktop.sysupdate1.Target"

View File

@@ -22,6 +22,7 @@
#include "log.h"
#include "main-func.h"
#include "pager.h"
#include "parse-argument.h"
#include "parse-util.h"
#include "polkit-agent.h"
#include "pretty-print.h"
@@ -37,7 +38,7 @@
static PagerFlags arg_pager_flags = 0;
static bool arg_ask_password = true;
static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
static char *arg_host = NULL;
static const char *arg_host = NULL;
static bool arg_adjust_system_clock = false;
static bool arg_monitor = false;
static char **arg_property = NULL;
@@ -996,8 +997,9 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'M':
arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
r = parse_machine_argument(optarg, &arg_host, &arg_transport);
if (r < 0)
return r;
break;
case ARG_NO_ASK_PASSWORD: