[libvirt] [PATCH V11 3/7] nwfilter: Fix support for trusted DHCP servers

Daniel Veillard veillard at redhat.com
Thu Apr 19 12:03:31 UTC 2012


On Thu, Apr 19, 2012 at 06:30:59AM -0400, Stefan Berger wrote:
> On 04/19/2012 05:27 AM, Daniel Veillard wrote:
> >On Tue, Apr 17, 2012 at 10:44:04AM -0400, Stefan Berger wrote:
> >>Fix the support for trusted DHCP server in the ebtables code's
> >>hard-coded function applying DHCP only filtering rules:
> >>Rather than using a char * use the more flexible
> >>virNWFilterVarValuePtr that contains the trusted DHCP server(s)
> >>IP address. Process all entries.
> >>
> >>Since all callers so far provided NULL as parameter, no changes
> >>are necessary in any other code.
> >>
> [...]
> >>+    while (true) {
> >>+        char *srcIPParam = NULL;
> >>+
> >>+        if (idx<  num_dhcpsrvrs) {
> >>+            const char *dhcpserver;
> >>+
> >>+            dhcpserver = virNWFilterVarValueGetNthValue(dhcpsrvrs, idx);
> >>+
> >>+            if (virAsprintf(&srcIPParam, "--ip-src %s", dhcpserver)<  0) {
> >>+                virReportOOMError();
> >>+                goto tear_down_tmpebchains;
> >>+            }
> >>+        }
> >>+
> >>+        virBufferAsprintf(&buf,
> >>+                          CMD_DEF("$EBT -t nat -A %s"
> >>+                                  " -d %s"
> >>+                                  " -p ipv4 --ip-protocol udp"
> >>+                                  " %s"
> >>+                                  " --ip-sport 67 --ip-dport 68"
> >>+                                  " -j ACCEPT") CMD_SEPARATOR
> >>+                          CMD_EXEC
> >>+                          "%s",
> >>+
> >>+                          chain_out,
> >>+                          macaddr_str,
> >>+                          srcIPParam != NULL ? srcIPParam : "",
> >>+                          CMD_STOPONERR(1));
> >>+
> >>+        VIR_FREE(srcIPParam);
> >>+
> >>+        if (idx == num_dhcpsrvrs)
> >>+            break;
> >>+
> >>+        idx++;
> >>+    }
> >   There is something I don't understand in that loop, you repetedly
> >write to buf, but you don't seems to use buf in the loop. This looks
> >fishy to me, or are you using side effect execution in the Asprintf
> >argument evaluation. Too cryptic to my taste, I'm lost !
> 
> I am accumulating (shell) commands in the buffer and then test the
> buffer for error before finally executing the commands.

  Okay, virBufferAsprintf contrary to virAsprintf accumulates the
  writes, makes sense now ...

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list