Re: [PATCH v6 2/5] qapi/monitor: refactor set/expire_password with enums

2021-10-20 Thread Markus Armbruster
Stefan Reiter  writes:

> 'protocol' and 'connected' are better suited as enums than as strings,
> make use of that. No functional change intended.
>
> Suggested-by: Markus Armbruster 
> Signed-off-by: Stefan Reiter 

Reviewed-by: Markus Armbruster 




[PATCH v6 2/5] qapi/monitor: refactor set/expire_password with enums

2021-10-20 Thread Stefan Reiter
'protocol' and 'connected' are better suited as enums than as strings,
make use of that. No functional change intended.

Suggested-by: Markus Armbruster 
Signed-off-by: Stefan Reiter 
---
 monitor/hmp-cmds.c | 29 +++--
 monitor/qmp-cmds.c | 37 -
 qapi/ui.json   | 37 +++--
 3 files changed, 74 insertions(+), 29 deletions(-)

diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index bcaa41350e..b8abe69609 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -1453,8 +1453,24 @@ void hmp_set_password(Monitor *mon, const QDict *qdict)
 const char *password  = qdict_get_str(qdict, "password");
 const char *connected = qdict_get_try_str(qdict, "connected");
 Error *err = NULL;
+DisplayProtocol proto;
+SetPasswordAction conn;
 
-qmp_set_password(protocol, password, !!connected, connected, );
+proto = qapi_enum_parse(_lookup, protocol,
+DISPLAY_PROTOCOL_VNC, );
+if (err) {
+goto out;
+}
+
+conn = qapi_enum_parse(_lookup, connected,
+   SET_PASSWORD_ACTION_KEEP, );
+if (err) {
+goto out;
+}
+
+qmp_set_password(proto, password, !!connected, conn, );
+
+out:
 hmp_handle_error(mon, err);
 }
 
@@ -1463,8 +1479,17 @@ void hmp_expire_password(Monitor *mon, const QDict 
*qdict)
 const char *protocol  = qdict_get_str(qdict, "protocol");
 const char *whenstr = qdict_get_str(qdict, "time");
 Error *err = NULL;
+DisplayProtocol proto;
 
-qmp_expire_password(protocol, whenstr, );
+proto = qapi_enum_parse(_lookup, protocol,
+DISPLAY_PROTOCOL_VNC, );
+if (err) {
+goto out;
+}
+
+qmp_expire_password(proto, whenstr, );
+
+out:
 hmp_handle_error(mon, err);
 }
 
diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c
index 5c0d5e116b..0654d7289a 100644
--- a/monitor/qmp-cmds.c
+++ b/monitor/qmp-cmds.c
@@ -163,33 +163,27 @@ void qmp_system_wakeup(Error **errp)
 qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, errp);
 }
 
-void qmp_set_password(const char *protocol, const char *password,
-  bool has_connected, const char *connected, Error **errp)
+void qmp_set_password(DisplayProtocol protocol, const char *password,
+  bool has_connected, SetPasswordAction connected,
+  Error **errp)
 {
 int disconnect_if_connected = 0;
 int fail_if_connected = 0;
 int rc;
 
 if (has_connected) {
-if (strcmp(connected, "fail") == 0) {
-fail_if_connected = 1;
-} 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;
-}
+fail_if_connected = connected == SET_PASSWORD_ACTION_FAIL;
+disconnect_if_connected = connected == SET_PASSWORD_ACTION_DISCONNECT;
 }
 
-if (strcmp(protocol, "spice") == 0) {
+if (protocol == DISPLAY_PROTOCOL_SPICE) {
 if (!qemu_using_spice(errp)) {
 return;
 }
 rc = qemu_spice.set_passwd(password, fail_if_connected,
disconnect_if_connected);
-} else if (strcmp(protocol, "vnc") == 0) {
+} else {
+assert(protocol == DISPLAY_PROTOCOL_VNC);
 if (fail_if_connected || disconnect_if_connected) {
 /* vnc supports "connected=keep" only */
 error_setg(errp, QERR_INVALID_PARAMETER, "connected");
@@ -198,10 +192,6 @@ void qmp_set_password(const char *protocol, const char 
*password,
 /* Note that setting an empty password will not disable login through
  * this interface. */
 rc = vnc_display_password(NULL, password);
-} else {
-error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol",
-   "'vnc' or 'spice'");
-return;
 }
 
 if (rc != 0) {
@@ -209,7 +199,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)
 {
 time_t when;
@@ -225,17 +215,14 @@ void qmp_expire_password(const char *protocol, const char 
*whenstr,
 when = strtoull(whenstr, NULL, 10);
 }
 
-if (strcmp(protocol, "spice") == 0) {
+if (protocol == DISPLAY_PROTOCOL_SPICE) {
 if (!qemu_using_spice(errp)) {
 return;
 }
 rc = qemu_spice.set_pw_expire(when);
-} else if (strcmp(protocol, "vnc") == 0) {
-rc = vnc_display_pw_expire(NULL, when);
 } else {
-error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol",
-   "'vnc' or 'spice'");
-