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:
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':
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':
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;
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:
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:
#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"
{}
};
- int c;
+ int r, c;
assert(argc >= 0);
assert(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 '?':
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;
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 '?':
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:
#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"
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;
}
static int parse_argv(int argc, char *argv[]) {
- int r;
enum {
ARG_VERSION = 0x100,
{}
};
+ 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) {
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':
default:
assert_not_reached();
}
- }
return 1;
}
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:
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:
/* 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"
*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;
+}
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);
#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;
}
static int parse_argv(int argc, char *argv[]) {
+
enum {
ARG_VERSION = 0x100,
- ARG_MACHINE,
ARG_USER,
ARG_SYSTEM,
};
{},
};
- int c;
+ int r, c;
assert(argc >= 0);
assert(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 '?':
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:
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"
#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"
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;
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: