On 8/27/19 4:35 PM, Jonathon Jongsma wrote:
When we're collecting guest information, older agents may not
support
all agent commands. In the case where the user requested all info
types (i.e. types == 0), ignore unsupported command errors and gather as
much information as possible. If the agent command failed for some other
reason, or if the user explciitly requested a specific info type (i.e.
types != 0), abort on the first error.
Signed-off-by: Jonathon Jongsma <jjongsma(a)redhat.com>
---
src/qemu/qemu_agent.c | 70 ++++++++++++++++++++++++++++++++++++++----
src/qemu/qemu_driver.c | 33 ++++++++++----------
tests/qemuagenttest.c | 2 +-
3 files changed, 82 insertions(+), 23 deletions(-)
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index f2a8bb6263..c63db968c6 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -995,6 +995,26 @@ qemuAgentStringifyErrorClass(const char *klass)
return "unknown QEMU command error";
}
+/* Checks whether the agent reply msg is an error caused by an unsupported
+ * command.
+ *
+ * Returns true when reply is CommandNotFound or CommandDisabled
+ * false otherwise
+ */
+static bool
+qemuAgentErrorCommandUnsupported(virJSONValuePtr reply)
+{
+ const char *klass;
+ virJSONValuePtr error = virJSONValueObjectGet(reply, "error");> +
Coverity notes it's possible to enter this function with @reply ==
NULL... Calls to qemuAgentCommand will set @*reply = NULL immediately
and only fill in @*reply when/if qemuAgentSend returns 0 *and*
@msg.rxObject != NULL.
When virJSONValueObjectGet is called it derefs it's first parameter
(@object) immediately
John
[...]