提交 6e5b36d5 编写于 作者: P Peter Krempa

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.
上级 08f1c0a9
......@@ -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;
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;
}
cmd = virJSONValueFromString(cmd_str);
if (!cmd)
return ret;
if (!(cmd = virJSONValueFromString(cmd_str)))
goto cleanup;
if ((ret = qemuAgentCommand(mon, cmd, &reply, timeout)) < 0)
goto cleanup;
ret = qemuAgentCommand(mon, cmd, &reply, timeout);
if ((ret = qemuAgentCheckError(cmd, reply)) < 0)
goto cleanup;
if (ret == 0) {
ret = qemuAgentCheckError(cmd, reply);
if (!(*result = virJSONValueToString(reply, false)))
ret = -1;
}
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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册