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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list