[libvirt] [PATCH] Add check for binary existing in machine type probe

When probing machine types if the QEMU binary does not exist we get a hard to diagnose error, due to the execve() in the child failing error: internal error Child process exited with status 1. Add an explicit check so that we get error: Cannot find QEMU binary /usr/libexec/qem3u-kvm: No such file or directory * src/qemu/qemu_capabilities.c: Check for QEMU binary --- src/qemu/qemu_capabilities.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 37a97aa..08c46be 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -172,6 +172,15 @@ qemuCapsProbeMachineTypes(const char *binary, int ret = -1; virCommandPtr cmd; + /* Make sure the binary we are about to try exec'ing exists. + * Technically we could catch the exec() failure, but that's + * in a sub-process so it's hard to feed back a useful error. + */ + if (access(binary, X_OK) < 0) { + virReportSystemError(errno, _("Cannot find QEMU binary %s"), binary); + return -1; + } + cmd = virCommandNewArgList(binary, "-M", "?", NULL); virCommandAddEnvPassCommon(cmd); virCommandSetOutputBuffer(cmd, &output); -- 1.7.3.5

On 02/02/2011 05:36 AM, Daniel P. Berrange wrote:
When probing machine types if the QEMU binary does not exist we get a hard to diagnose error, due to the execve() in the child failing
error: internal error Child process exited with status 1.
Add an explicit check so that we get
error: Cannot find QEMU binary /usr/libexec/qem3u-kvm: No such file or directory
* src/qemu/qemu_capabilities.c: Check for QEMU binary --- src/qemu/qemu_capabilities.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
participants (2)
-
Daniel P. Berrange
-
Eric Blake