From 8ef9637328bbdb884413fa016e0c3891b20db94e Mon Sep 17 00:00:00 2001
From: Luiz Capitulino <lcapitulino@redhat.com>
Date: Mon, 29 Mar 2010 16:14:51 -0300
Subject: [PATCH 16/23] Monitor: Convert to mon_set_password() to cmd_new_ret()

RH-Author: Luiz Capitulino <lcapitulino@redhat.com>
Message-id: <1269879298-30711-17-git-send-email-lcapitulino@redhat.com>
Patchwork-id: 8179
O-Subject: [PATCH 16/23] Monitor: Convert to mon_set_password() to cmd_new_ret()
Bugzilla: 563491
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
RH-Acked-by: Juan Quintela <quintela@redhat.com>
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>

Note that this command is a RHEL6 extension.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 qemu-monitor.hx |    2 +-
 qemu-spice.h    |    2 +-
 spice.c         |   17 +++++++++++------
 3 files changed, 13 insertions(+), 8 deletions(-)

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 qemu-monitor.hx |    2 +-
 qemu-spice.h    |    2 +-
 spice.c         |   17 +++++++++++------
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index fa6ec11..da6793e 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -1100,7 +1100,7 @@ ETEXI
         .params     = "protocol password expiration action-if-connected",
         .help       = "set spice/vnc password",
 	.user_print = monitor_user_noop,
-        .mhandler.cmd_new = mon_set_password,
+        .cmd_new_ret = mon_set_password,
     },
 #endif
 
diff --git a/qemu-spice.h b/qemu-spice.h
index d55263a..56e3d70 100644
--- a/qemu-spice.h
+++ b/qemu-spice.h
@@ -26,7 +26,7 @@ void qemu_spice_remove_interface(struct VDInterface *interface);
 void qemu_spice_migrate_start(void);
 void qemu_spice_migrate_end(int completed);
 
-void mon_set_password(Monitor *mon, const QDict *qdict, QObject **ret_data);
+int mon_set_password(Monitor *mon, const QDict *qdict, QObject **ret_data);
 void mon_spice_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data);
 
 #else  /* CONFIG_SPICE */
diff --git a/spice.c b/spice.c
index 410a8fb..8bc7e5b 100644
--- a/spice.c
+++ b/spice.c
@@ -274,7 +274,7 @@ QemuOptsList qemu_spice_opts = {
     },
 };
 
-void mon_set_password(Monitor *mon, const QDict *qdict, QObject **ret_data)
+int mon_set_password(Monitor *mon, const QDict *qdict, QObject **ret_data)
 {
     const char *protocol  = qdict_get_str(qdict, "protocol");
     const char *password  = qdict_get_str(qdict, "password");
@@ -293,7 +293,7 @@ void mon_set_password(Monitor *mon, const QDict *qdict, QObject **ret_data)
             /* nothing */
         } else {
             qemu_error_new(QERR_INVALID_PARAMETER, "connected");
-            return;
+            return -1;
         }
     }
 
@@ -301,28 +301,33 @@ void mon_set_password(Monitor *mon, const QDict *qdict, QObject **ret_data)
         if (!s) {
             /* correct one? spice isn't a device ,,, */
             qemu_error_new(QERR_DEVICE_NOT_ACTIVE, "spice");
-            return;
+            return -1;
         }
         rc = spice_server_set_ticket(s, password, lifetime,
                                      fail_if_connected,
                                      disconnect_if_connected);
         if (rc != 0) {
             qemu_error_new(QERR_SET_PASSWD_FAILED);
-            return;
+            return -1;
         }
 
     } else if (strcmp(protocol, "vnc") == 0) {
         if (fail_if_connected || disconnect_if_connected) {
             /* vnc supports "connected=keep" only */
             qemu_error_new(QERR_INVALID_PARAMETER, "connected");
-            return;
+            return -1;
         }
-        if (vnc_display_password(NULL, password, lifetime) < 0)
+        if (vnc_display_password(NULL, password, lifetime) < 0) {
             qemu_error_new(QERR_SET_PASSWD_FAILED);
+            return -1;
+        }
 
     } else {
         qemu_error_new(QERR_INVALID_PARAMETER, "protocol");
+        return -1;
     }
+
+    return 0;
 }
 
 void mon_spice_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
-- 
1.7.0.3

