mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-31 08:55:22 +00:00
qemu: Properly report guest agent errors on command passthrough
The code for arbitrary guest agent passthrough was horribly broken since introduction. Fix it to correctly report errors. (cherry picked from commit 6e5b36d5d2fbe3c207651ab653b552dcae6af888)
This commit is contained in:
parent
6b48d5e6f5
commit
5003b7c798
@ -1407,25 +1407,32 @@ qemuAgentArbitraryCommand(qemuAgentPtr mon,
|
||||
int timeout)
|
||||
{
|
||||
int ret = -1;
|
||||
virJSONValuePtr cmd;
|
||||
virJSONValuePtr cmd = NULL;
|
||||
virJSONValuePtr reply = NULL;
|
||||
|
||||
*result = NULL;
|
||||
if (timeout < VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN)
|
||||
return ret;
|
||||
|
||||
cmd = virJSONValueFromString(cmd_str);
|
||||
if (!cmd)
|
||||
return ret;
|
||||
|
||||
ret = qemuAgentCommand(mon, cmd, &reply, timeout);
|
||||
|
||||
if (ret == 0) {
|
||||
ret = qemuAgentCheckError(cmd, reply);
|
||||
if (!(*result = virJSONValueToString(reply, false)))
|
||||
ret = -1;
|
||||
if (timeout < VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
_("guest agent timeout '%d' is "
|
||||
"less than the minimum '%d'"),
|
||||
timeout, VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(cmd = virJSONValueFromString(cmd_str)))
|
||||
goto cleanup;
|
||||
|
||||
if ((ret = qemuAgentCommand(mon, cmd, &reply, timeout)) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if ((ret = qemuAgentCheckError(cmd, reply)) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(*result = virJSONValueToString(reply, false)))
|
||||
ret = -1;
|
||||
|
||||
|
||||
cleanup:
|
||||
virJSONValueFree(cmd);
|
||||
virJSONValueFree(reply);
|
||||
return ret;
|
||||
|
@ -14611,16 +14611,12 @@ qemuDomainQemuAgentCommand(virDomainPtr domain,
|
||||
qemuDomainObjEnterAgent(vm);
|
||||
ret = qemuAgentArbitraryCommand(priv->agent, cmd, &result, timeout);
|
||||
qemuDomainObjExitAgent(vm);
|
||||
if (ret < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Failed to execute agent command"));
|
||||
goto endjob;
|
||||
}
|
||||
if (ret < 0)
|
||||
VIR_FREE(result);
|
||||
|
||||
endjob:
|
||||
if (qemuDomainObjEndJob(driver, vm) == 0) {
|
||||
if (qemuDomainObjEndJob(driver, vm) == 0)
|
||||
vm = NULL;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if (vm)
|
||||
|
Loading…
x
Reference in New Issue
Block a user