mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +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.
This commit is contained in:
parent
08f1c0a9ae
commit
6e5b36d5d2
@ -1408,25 +1408,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;
|
||||
|
@ -14881,16 +14881,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