]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
dnsmasq: Fix parsing of the version number
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 6 Dec 2012 11:25:50 +0000 (12:25 +0100)
committerCole Robinson <crobinso@redhat.com>
Sun, 9 Dec 2012 21:53:42 +0000 (16:53 -0500)
If the debugging is enabled, the virCommand subsystem catches debug
messages in the command output as well. In that case, we can't assume
the string corresponding to command's stdout will start with specific
prefix. But the prefix can be moved deeper in the string. This bug
shows itself when parsing dnsmasq output:

2012-12-06 11:18:11.445+0000: 18491: error :
dnsmasqCapsSetFromBuffer:664 : internal error cannot parse
/usr/sbin/dnsmasq version number in '2012-12-06 11:11:02.232+0000:
18492: debug : virFileClose:72 : Closed fd 22'

We can clearly see that the output of dnsmasq --version
doesn't start with expected "Dnsmasq version " string but a libvirt
debug output.
(cherry picked from commit 5114431396fd125b6ebe4d1a20a981111f948ee7)

src/util/dnsmasq.c

index 4f210d2130e802449b2aa6aaff6b01f7b186e3f5..de0293a5658a8b010cad0d02e264d1bc3a786950 100644 (file)
@@ -641,9 +641,9 @@ dnsmasqCapsSetFromBuffer(dnsmasqCapsPtr caps, const char *buf)
 
     caps->noRefresh = true;
 
-    p = STRSKIP(buf, DNSMASQ_VERSION_STR);
-    if (!p)
+    if (!(p = strstr(buf, DNSMASQ_VERSION_STR)))
        goto fail;
+    p += sizeof(DNSMASQ_VERSION_STR) - 1;
     virSkipSpaces(&p);
     if (virParseVersionString(p, &caps->version, true) < 0)
         goto fail;