Allow for the use of @ in remote host calls
Without this you have to use %40 with the -H flag because dbus doesn't like the @ sign being unescaped.
This commit is contained in:
parent
856323c9cb
commit
7085053a43
|
@ -44,7 +44,8 @@ static enum transport {
|
|||
TRANSPORT_POLKIT
|
||||
} arg_transport = TRANSPORT_NORMAL;
|
||||
static bool arg_ask_password = true;
|
||||
static const char *arg_host = NULL;
|
||||
static char *arg_host = NULL;
|
||||
static char *arg_user = NULL;
|
||||
static bool arg_set_transient = false;
|
||||
static bool arg_set_pretty = false;
|
||||
static bool arg_set_static = false;
|
||||
|
@ -421,7 +422,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
|
||||
case 'H':
|
||||
arg_transport = TRANSPORT_SSH;
|
||||
arg_host = optarg;
|
||||
parse_user_at_host(optarg, &arg_user, &arg_host);
|
||||
break;
|
||||
|
||||
case ARG_SET_TRANSIENT:
|
||||
|
|
|
@ -46,7 +46,8 @@ static enum transport {
|
|||
TRANSPORT_POLKIT
|
||||
} arg_transport = TRANSPORT_NORMAL;
|
||||
static bool arg_ask_password = true;
|
||||
static const char *arg_host = NULL;
|
||||
static char *arg_host = NULL;
|
||||
static char *arg_user = NULL;
|
||||
static bool arg_convert = true;
|
||||
|
||||
static void pager_open_if_enabled(void) {
|
||||
|
@ -777,7 +778,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
|
||||
case 'H':
|
||||
arg_transport = TRANSPORT_SSH;
|
||||
arg_host = optarg;
|
||||
parse_user_at_host(optarg, &arg_user, &arg_host);
|
||||
break;
|
||||
|
||||
case ARG_NO_CONVERT:
|
||||
|
|
|
@ -50,7 +50,8 @@ static enum transport {
|
|||
TRANSPORT_POLKIT
|
||||
} arg_transport = TRANSPORT_NORMAL;
|
||||
static bool arg_ask_password = true;
|
||||
static const char *arg_host = NULL;
|
||||
static char *arg_host = NULL;
|
||||
static char *arg_user = NULL;
|
||||
|
||||
static void pager_open_if_enabled(void) {
|
||||
|
||||
|
@ -1421,7 +1422,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
|
||||
case 'H':
|
||||
arg_transport = TRANSPORT_SSH;
|
||||
arg_host = optarg;
|
||||
parse_user_at_host(optarg, &arg_user, &arg_host);
|
||||
break;
|
||||
|
||||
case ARG_FULL:
|
||||
|
|
|
@ -178,9 +178,9 @@ int bus_connect_system_ssh(const char *user, const char *host, DBusConnection **
|
|||
assert(user || host);
|
||||
|
||||
if (user && host)
|
||||
asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s@%s,argv3=systemd-stdio-bridge", user, host);
|
||||
asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s%%40%s,argv3=systemd-stdio-bridge", user, host);
|
||||
else if (user)
|
||||
asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s@localhost,argv3=systemd-stdio-bridge", user);
|
||||
asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s%%40localhost,argv3=systemd-stdio-bridge", user);
|
||||
else if (host)
|
||||
asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s,argv3=systemd-stdio-bridge", host);
|
||||
|
||||
|
|
|
@ -5847,3 +5847,17 @@ bool id128_is_valid(const char *s) {
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
void parse_user_at_host(char *arg, char **user, char **host) {
|
||||
assert(arg);
|
||||
assert(user);
|
||||
assert(host);
|
||||
|
||||
*host = strchr(arg, '@');
|
||||
if (*host == NULL)
|
||||
*host = arg;
|
||||
else {
|
||||
*host[0]++ = '\0';
|
||||
*user = arg;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -732,3 +732,4 @@ static inline void _reset_locale_(struct _locale_struct_ *s) {
|
|||
_saved_locale_.quit = true)
|
||||
|
||||
bool id128_is_valid(const char *s) _pure_;
|
||||
void parse_user_at_host(char *arg, char **user, char **host);
|
||||
|
|
|
@ -129,7 +129,8 @@ static enum transport {
|
|||
TRANSPORT_SSH,
|
||||
TRANSPORT_POLKIT
|
||||
} arg_transport = TRANSPORT_NORMAL;
|
||||
static const char *arg_host = NULL;
|
||||
static char *arg_host = NULL;
|
||||
static char *arg_user = NULL;
|
||||
static unsigned arg_lines = 10;
|
||||
static OutputMode arg_output = OUTPUT_SHORT;
|
||||
static bool arg_plain = false;
|
||||
|
@ -5065,7 +5066,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
|
|||
|
||||
case 'H':
|
||||
arg_transport = TRANSPORT_SSH;
|
||||
arg_host = optarg;
|
||||
parse_user_at_host(optarg, &arg_user, &arg_host);
|
||||
break;
|
||||
|
||||
case ARG_RUNTIME:
|
||||
|
@ -6086,7 +6087,7 @@ int main(int argc, char*argv[]) {
|
|||
bus_connect_system_polkit(&bus, &error);
|
||||
private_bus = false;
|
||||
} else if (arg_transport == TRANSPORT_SSH) {
|
||||
bus_connect_system_ssh(NULL, arg_host, &bus, &error);
|
||||
bus_connect_system_ssh(arg_user, arg_host, &bus, &error);
|
||||
private_bus = false;
|
||||
} else
|
||||
assert_not_reached("Uh, invalid transport...");
|
||||
|
|
|
@ -44,7 +44,8 @@ static enum transport {
|
|||
TRANSPORT_POLKIT
|
||||
} arg_transport = TRANSPORT_NORMAL;
|
||||
static bool arg_ask_password = true;
|
||||
static const char *arg_host = NULL;
|
||||
static char *arg_host = NULL;
|
||||
static char *arg_user = NULL;
|
||||
|
||||
static void pager_open_if_enabled(void) {
|
||||
|
||||
|
@ -560,7 +561,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
|
||||
case 'H':
|
||||
arg_transport = TRANSPORT_SSH;
|
||||
arg_host = optarg;
|
||||
parse_user_at_host(optarg, &arg_user, &arg_host);
|
||||
break;
|
||||
|
||||
case ARG_NO_ASK_PASSWORD:
|
||||
|
|
Loading…
Reference in a new issue