On 04/26/2016 09:42 AM, Andrea Bolognani wrote: > On Sat, 2016-04-23 at 15:39 -0400, Cole Robinson wrote: >> And the 'ip' tool. There isn't much benefit to checking this at >> configure time when we have infrastructure nowadays for looking up >> binaries in the PATH >> --- >> v2: >> Keep the virFileIsExecutable check >> >> >> configure.ac | 12 ------ >> src/util/virfirewall.c | 18 +++++---- >> src/util/virnetdev.c | 6 +-- >> tests/virfirewalltest.c | 98 ++++++++++++++++++++++++------------------------- >> 4 files changed, 62 insertions(+), 72 deletions(-) > > [...] > >> @@ -182,17 +182,19 @@ virFirewallValidateBackend(virFirewallBackend backend) >> >> if (backend == VIR_FIREWALL_BACKEND_DIRECT) { >> const char *commands[] = { >> - IPTABLES_PATH, IP6TABLES_PATH, EBTABLES_PATH >> + "iptables", "ip6tables", "ebtables" >> }; >> size_t i; >> >> for (i = 0; i < ARRAY_CARDINALITY(commands); i++) { >> - if (!virFileIsExecutable(commands[i])) { >> + char *path = virFindFileInPath(commands[i]); >> + if (!path || !virFileIsExecutable(path)) { >> virReportSystemError(errno, >> _("direct firewall backend requested, but %s is not available"), >> commands[i]); > > You need to VIR_FREE(path) here as well to avoid leaking memory. > Thanks, fixed locally >> return -1; >> } >> + VIR_FREE(path); >> } >> VIR_DEBUG("found iptables/ip6tables/ebtables, using direct backend"); >> } > > [...] > >> --- a/tests/virfirewalltest.c >> +++ b/tests/virfirewalltest.c >> @@ -128,11 +128,11 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block, >> >> if (fwBuf) { >> if (STREQ(type, "ipv4")) >> - virBufferAddLit(fwBuf, IPTABLES_PATH); >> + virBufferAddLit(fwBuf, "iptables"); >> else if (STREQ(type, "ipv4")) > > Unrelated to your changes, but shouldn't the above be "ipv6"? > Nice catch :) Indeed that seems wrong, but doesn't look like the test suite even hits that code path AFAICT, every bit of data it tests is for iptables only >> - virBufferAddLit(fwBuf, IP6TABLES_PATH); >> + virBufferAddLit(fwBuf, "ip6tables"); >> else >> - virBufferAddLit(fwBuf, EBTABLES_PATH); >> + virBufferAddLit(fwBuf, "ebtables"); >> } >> for (i = 0; i < nargs; i++) { >> if (fwBuf) { > > [...] > > This series works fine on my Fedora builder, but breaks 'make > check' on my Debian builder, because iptables is installed > in /sbin and the user's $PATH doesn't contain that directory, > which causes virFirewallValidateBackend() to fail. > > I think the proper solution would be to mock filesystem > access in the test suite so that *tables commands are always > found. That way you'd be able to run the test suite even > when *tables commands are not installed on the systems, which > seems perfectly reasonable if you only ever intend to use the > firewalld backend[1]. > Hmm, okay. I'll put it on my todo list Thanks, Cole > > [1] Of course firewalld itself seems to depend on iptables > and least recommend ebtables, but I guess that's an > implementation detail and could change in the future / > on different platforms? > -- -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list