Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_hotplug.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index bf6430d..f88520f 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -3931,7 +3931,8 @@ qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr driver,
{
qemuDomainObjPrivatePtr priv = vm->privateData;
time_t now = time(NULL);
- char expire_time [64];
+ const char *expire;
+ char *validTo = NULL;
const char *connected = NULL;
const char *password;
int ret = -1;
@@ -3962,19 +3963,18 @@ qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr driver,
if (ret != 0)
goto end_job;
- if (password[0] == '\0') {
- snprintf(expire_time, sizeof(expire_time), "now");
+ if (password[0] == '\0' ||
+ (auth->expires && auth->validTo <= now)) {
+ expire = "now";
} else if (auth->expires) {
- time_t lifetime = auth->validTo - now;
- if (lifetime <= 0)
- snprintf(expire_time, sizeof(expire_time), "now");
- else
- snprintf(expire_time, sizeof(expire_time), "%lu", (long
unsigned)auth->validTo);
+ if (virAsprintf(&validTo, "%lu", (unsigned long) auth->validTo)
< 0)
+ goto end_job;
+ expire = validTo;
} else {
- snprintf(expire_time, sizeof(expire_time), "never");
+ expire = "never";
}
- ret = qemuMonitorExpirePassword(priv->mon, type, expire_time);
+ ret = qemuMonitorExpirePassword(priv->mon, type, expire);
if (ret == -2) {
/* XXX we could fake this with a timer */
@@ -3991,6 +3991,7 @@ qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr driver,
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
cleanup:
+ VIR_FREE(validTo);
virObjectUnref(cfg);
return ret;
}
--
2.9.0