diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 30d14681fea5204dca0a85e0eab2c489a0d93584..e0b7c844ab8bf292fbb493866ed8326e09d8406c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1275,29 +1275,21 @@ qemudInitCpus(virConnectPtr conn, static int -qemudInitPasswords(virConnectPtr conn, - struct qemud_driver *driver, +qemudInitPasswords(struct qemud_driver *driver, virDomainObjPtr vm) { - char *info = NULL; + int ret = 0; if ((vm->def->ngraphics == 1) && vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && (vm->def->graphics[0]->data.vnc.passwd || driver->vncPassword)) { - if (qemudMonitorCommandExtra(vm, "change vnc password", - vm->def->graphics[0]->data.vnc.passwd ? - vm->def->graphics[0]->data.vnc.passwd : - driver->vncPassword, - QEMU_PASSWD_PROMPT, - -1, &info) < 0) { - qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, - "%s", _("setting VNC password failed")); - return -1; - } - VIR_FREE(info); + ret = qemuMonitorSetVNCPassword(vm, + vm->def->graphics[0]->data.vnc.passwd ? + vm->def->graphics[0]->data.vnc.passwd : + driver->vncPassword); } - return 0; + return ret; } @@ -2144,7 +2136,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, if ((qemudWaitForMonitor(conn, driver, vm, pos) < 0) || (qemuDetectVcpuPIDs(conn, vm) < 0) || (qemudInitCpus(conn, vm, migrateFrom) < 0) || - (qemudInitPasswords(conn, driver, vm) < 0) || + (qemudInitPasswords(driver, vm) < 0) || (qemudDomainSetMemoryBalloon(conn, vm, vm->def->memory) < 0) || (virDomainSaveStatus(conn, driver->stateDir, vm) < 0)) { qemudShutdownVMDaemon(conn, driver, vm); diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 0149639fdf562380744a41171e41a759a89bd161..93762749cf0d802f0961b7ad5b52b1162193f2d8 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -520,3 +520,18 @@ error: } +int qemuMonitorSetVNCPassword(const virDomainObjPtr vm, + const char *password) +{ + char *info = NULL; + if (qemudMonitorCommandExtra(vm, "change vnc password", + password, + QEMU_PASSWD_PROMPT, + -1, &info) < 0) { + qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("setting VNC password failed")); + return -1; + } + VIR_FREE(info); + return 0; +} diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index 126c14aac3c05d7ceb697e676b2d26fc02ba072b..8e432264b07911a443063ccbc71a16d1c4db783f 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -71,4 +71,7 @@ int qemudMonitorSendCont(virConnectPtr conn, int qemuMonitorGetCPUInfo(const virDomainObjPtr vm, int **pids); +int qemuMonitorSetVNCPassword(const virDomainObjPtr vm, + const char *password); + #endif /* QEMU_MONITOR_TEXT_H */