mirror of https://github.com/xemu-project/xemu.git
qapi/monitor: refactor set/expire_password with enums
'protocol' and 'connected' are better suited as enums than as strings, make use of that. No functional change intended. Suggested-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Stefan Reiter <s.reiter@proxmox.com> [FE: update "Since: " from 6.2 to 7.0 put 'keep' first in enum to ease use as a default] Signed-off-by: Fabian Ebner <f.ebner@proxmox.com> Message-Id: <20220225084949.35746-3-f.ebner@proxmox.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
26fcd76617
commit
7277db9103
|
@ -1398,8 +1398,24 @@ void hmp_set_password(Monitor *mon, const QDict *qdict)
|
||||||
const char *password = qdict_get_str(qdict, "password");
|
const char *password = qdict_get_str(qdict, "password");
|
||||||
const char *connected = qdict_get_try_str(qdict, "connected");
|
const char *connected = qdict_get_try_str(qdict, "connected");
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
DisplayProtocol proto;
|
||||||
|
SetPasswordAction conn;
|
||||||
|
|
||||||
qmp_set_password(protocol, password, !!connected, connected, &err);
|
proto = qapi_enum_parse(&DisplayProtocol_lookup, protocol,
|
||||||
|
DISPLAY_PROTOCOL_VNC, &err);
|
||||||
|
if (err) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
conn = qapi_enum_parse(&SetPasswordAction_lookup, connected,
|
||||||
|
SET_PASSWORD_ACTION_KEEP, &err);
|
||||||
|
if (err) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
qmp_set_password(proto, password, !!connected, conn, &err);
|
||||||
|
|
||||||
|
out:
|
||||||
hmp_handle_error(mon, err);
|
hmp_handle_error(mon, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1408,8 +1424,17 @@ void hmp_expire_password(Monitor *mon, const QDict *qdict)
|
||||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||||
const char *whenstr = qdict_get_str(qdict, "time");
|
const char *whenstr = qdict_get_str(qdict, "time");
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
DisplayProtocol proto;
|
||||||
|
|
||||||
qmp_expire_password(protocol, whenstr, &err);
|
proto = qapi_enum_parse(&DisplayProtocol_lookup, protocol,
|
||||||
|
DISPLAY_PROTOCOL_VNC, &err);
|
||||||
|
if (err) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
qmp_expire_password(proto, whenstr, &err);
|
||||||
|
|
||||||
|
out:
|
||||||
hmp_handle_error(mon, err);
|
hmp_handle_error(mon, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -168,33 +168,27 @@ void qmp_system_wakeup(Error **errp)
|
||||||
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, errp);
|
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void qmp_set_password(const char *protocol, const char *password,
|
void qmp_set_password(DisplayProtocol protocol, const char *password,
|
||||||
bool has_connected, const char *connected, Error **errp)
|
bool has_connected, SetPasswordAction connected,
|
||||||
|
Error **errp)
|
||||||
{
|
{
|
||||||
int disconnect_if_connected = 0;
|
int disconnect_if_connected = 0;
|
||||||
int fail_if_connected = 0;
|
int fail_if_connected = 0;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (has_connected) {
|
if (has_connected) {
|
||||||
if (strcmp(connected, "fail") == 0) {
|
fail_if_connected = connected == SET_PASSWORD_ACTION_FAIL;
|
||||||
fail_if_connected = 1;
|
disconnect_if_connected = connected == SET_PASSWORD_ACTION_DISCONNECT;
|
||||||
} else if (strcmp(connected, "disconnect") == 0) {
|
|
||||||
disconnect_if_connected = 1;
|
|
||||||
} else if (strcmp(connected, "keep") == 0) {
|
|
||||||
/* nothing */
|
|
||||||
} else {
|
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER, "connected");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(protocol, "spice") == 0) {
|
if (protocol == DISPLAY_PROTOCOL_SPICE) {
|
||||||
if (!qemu_using_spice(errp)) {
|
if (!qemu_using_spice(errp)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rc = qemu_spice.set_passwd(password, fail_if_connected,
|
rc = qemu_spice.set_passwd(password, fail_if_connected,
|
||||||
disconnect_if_connected);
|
disconnect_if_connected);
|
||||||
} else if (strcmp(protocol, "vnc") == 0) {
|
} else {
|
||||||
|
assert(protocol == DISPLAY_PROTOCOL_VNC);
|
||||||
if (fail_if_connected || disconnect_if_connected) {
|
if (fail_if_connected || disconnect_if_connected) {
|
||||||
/* vnc supports "connected=keep" only */
|
/* vnc supports "connected=keep" only */
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER, "connected");
|
error_setg(errp, QERR_INVALID_PARAMETER, "connected");
|
||||||
|
@ -203,10 +197,6 @@ void qmp_set_password(const char *protocol, const char *password,
|
||||||
/* Note that setting an empty password will not disable login through
|
/* Note that setting an empty password will not disable login through
|
||||||
* this interface. */
|
* this interface. */
|
||||||
rc = vnc_display_password(NULL, password);
|
rc = vnc_display_password(NULL, password);
|
||||||
} else {
|
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol",
|
|
||||||
"'vnc' or 'spice'");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
|
@ -214,7 +204,7 @@ void qmp_set_password(const char *protocol, const char *password,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void qmp_expire_password(const char *protocol, const char *whenstr,
|
void qmp_expire_password(DisplayProtocol protocol, const char *whenstr,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
time_t when;
|
time_t when;
|
||||||
|
@ -230,17 +220,14 @@ void qmp_expire_password(const char *protocol, const char *whenstr,
|
||||||
when = strtoull(whenstr, NULL, 10);
|
when = strtoull(whenstr, NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(protocol, "spice") == 0) {
|
if (protocol == DISPLAY_PROTOCOL_SPICE) {
|
||||||
if (!qemu_using_spice(errp)) {
|
if (!qemu_using_spice(errp)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rc = qemu_spice.set_pw_expire(when);
|
rc = qemu_spice.set_pw_expire(when);
|
||||||
} else if (strcmp(protocol, "vnc") == 0) {
|
|
||||||
rc = vnc_display_pw_expire(NULL, when);
|
|
||||||
} else {
|
} else {
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol",
|
assert(protocol == DISPLAY_PROTOCOL_VNC);
|
||||||
"'vnc' or 'spice'");
|
rc = vnc_display_pw_expire(NULL, when);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
|
|
36
qapi/ui.json
36
qapi/ui.json
|
@ -9,6 +9,34 @@
|
||||||
{ 'include': 'common.json' }
|
{ 'include': 'common.json' }
|
||||||
{ 'include': 'sockets.json' }
|
{ 'include': 'sockets.json' }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @DisplayProtocol:
|
||||||
|
#
|
||||||
|
# Display protocols which support changing password options.
|
||||||
|
#
|
||||||
|
# Since: 7.0
|
||||||
|
#
|
||||||
|
##
|
||||||
|
{ 'enum': 'DisplayProtocol',
|
||||||
|
'data': [ 'vnc', 'spice' ] }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @SetPasswordAction:
|
||||||
|
#
|
||||||
|
# An action to take on changing a password on a connection with active clients.
|
||||||
|
#
|
||||||
|
# @keep: maintain existing clients
|
||||||
|
#
|
||||||
|
# @fail: fail the command if clients are connected
|
||||||
|
#
|
||||||
|
# @disconnect: disconnect existing clients
|
||||||
|
#
|
||||||
|
# Since: 7.0
|
||||||
|
#
|
||||||
|
##
|
||||||
|
{ 'enum': 'SetPasswordAction',
|
||||||
|
'data': [ 'keep', 'fail', 'disconnect' ] }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @set_password:
|
# @set_password:
|
||||||
#
|
#
|
||||||
|
@ -38,7 +66,9 @@
|
||||||
#
|
#
|
||||||
##
|
##
|
||||||
{ 'command': 'set_password',
|
{ 'command': 'set_password',
|
||||||
'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
|
'data': { 'protocol': 'DisplayProtocol',
|
||||||
|
'password': 'str',
|
||||||
|
'*connected': 'SetPasswordAction' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @expire_password:
|
# @expire_password:
|
||||||
|
@ -71,7 +101,9 @@
|
||||||
# <- { "return": {} }
|
# <- { "return": {} }
|
||||||
#
|
#
|
||||||
##
|
##
|
||||||
{ 'command': 'expire_password', 'data': {'protocol': 'str', 'time': 'str'} }
|
{ 'command': 'expire_password',
|
||||||
|
'data': { 'protocol': 'DisplayProtocol',
|
||||||
|
'time': 'str' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @screendump:
|
# @screendump:
|
||||||
|
|
Loading…
Reference in New Issue