[libvirt PATCH] rpc: don't try to spawn non-existant daemon

Martin Kletzander mkletzan at redhat.com
Wed Jan 25 15:06:49 UTC 2023


On Wed, Jan 25, 2023 at 02:27:09PM +0000, Daniel P. Berrangé wrote:
>If libvirt is built in client only mode, the libvirtd/virtqemud/etc
>daemons won't exist. If the client is told to connect to a local
>hypervisor, it'll see the socket doesn't exist, try to spawn the
>daemon and then re-try connecting to the socket for a few seconds.
>Ultimately this will fail because the daemon doesn't exist and the
>user gets an error message
>
>  error: Failed to connect socket to '/run/user/1000/libvirt/virtqemud-sock': No such file or directory
>
>technically this is accurate, but it doesn't help identify the root
>cause. With this change it will now report
>
>  error: binary 'virtqemud' does not exist in $PATH: No such file or directory
>
>and will skip all the socket connect retries
>
>Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>

Reviewed-by: Martin Kletzander <mkletzan at redhat.com>

>---
> src/rpc/virnetsocket.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
>diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
>index 8280bda007..bb2e0c5d3d 100644
>--- a/src/rpc/virnetsocket.c
>+++ b/src/rpc/virnetsocket.c
>@@ -123,9 +123,19 @@ VIR_ONCE_GLOBAL_INIT(virNetSocket);
> #ifndef WIN32
> static int virNetSocketForkDaemon(const char *binary)
> {
>-    g_autoptr(virCommand) cmd = virCommandNewArgList(binary,
>-                                                     "--timeout=120",
>-                                                     NULL);
>+    g_autofree char *binarypath = virFindFileInPath(binary);
>+    g_autoptr(virCommand) cmd = NULL;
>+
>+    if (!binarypath) {
>+        virReportSystemError(ENOENT,
>+                             _("binary '%s' does not exist in $PATH"),
>+                             binary);
>+        return -1;
>+    }
>+
>+    cmd = virCommandNewArgList(binarypath,
>+                               "--timeout=120",
>+                               NULL);
>
>     virCommandAddEnvPassCommon(cmd);
>     virCommandAddEnvPass(cmd, "XDG_CACHE_HOME");
>-- 
>2.39.0
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20230125/13020c4f/attachment.sig>


More information about the libvir-list mailing list