[PATCH 2/3] virdnsmasq: Lookup DNSMASQ in PATH
Daniel P. Berrangé
berrange at redhat.com
Tue Jan 11 09:59:06 UTC 2022
On Tue, Jan 11, 2022 at 09:28:45AM +0100, Michal Prívozník wrote:
> On 1/10/22 18:41, Andrea Bolognani wrote:
> > On Mon, Jan 10, 2022 at 04:44:55PM +0100, Michal Privoznik wrote:
> >> While it's true that our virCommand subsystem is happy with
> >> non-absolute paths, the dnsmasq capability code is not. For
> >> instance, it does call stat() over the binary to learn its mtime
> >> (and thus decide whether capabilities need to be fetched again or
> >> not).
> >>
> >> Therefore, when constructing the capabilities structure look up
> >> the binary path. If DNSMASQ already contains an absolute path
> >> then it is returned (and virFindFileInPath() is a NOP).
> >
> > Saying that virFindFileInPath() is a NOP is not quite correct: if you
> > pass an absolute path, it will return a copy. So I'd rewrite the
> > above as
> >
> > If DNSMASQ already contains an absolute path then
> > virFindFileInPath() will simply return a copy.
> >
>
> Yes, this makes sense.
>
> > Reviewed-by: Andrea Bolognani <abologna at redhat.com>
> >
>
> Thanks, but as I was looking through virFindFileInPath() I've noticed
> that if the file exists but is not executable then NULL is returned, so
> we will need a fallback case. Effectively this needs to be squashed in:
Why do we need a fallback ? If someone has put 'dnsmasq' in $PATH
without the execute bit set, surely that's just a broken deployment
and returning NULL is correct.
> diff --git c/src/util/virdnsmasq.c w/src/util/virdnsmasq.c
> index b6ccb9d0a4..7792a65bc3 100644
> --- c/src/util/virdnsmasq.c
> +++ w/src/util/virdnsmasq.c
> @@ -703,12 +703,17 @@ static dnsmasqCaps *
> dnsmasqCapsNewEmpty(void)
> {
> dnsmasqCaps *caps;
> + g_autofree char *binaryPath = NULL;
>
> if (dnsmasqCapsInitialize() < 0)
> return NULL;
> if (!(caps = virObjectNew(dnsmasqCapsClass)))
> return NULL;
> - caps->binaryPath = virFindFileInPath(DNSMASQ);
> +
> + if (!(binaryPath = virFindFileInPath(DNSMASQ)))
> + binaryPath = g_strdup(DNSMASQ);
> +
> + caps->binaryPath = g_steal_pointer(&binaryPath);
> return caps;
> }
>
> I'll post v2 of this patch shortly.
>
> Michal
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list