On Mon, Nov 5, 2018 at 7:58 PM Ben Pfaff <b...@ovn.org> wrote: > [CCing Alin for his opinion on Windows issue] > > On Mon, Nov 05, 2018 at 04:20:18PM -0800, Yifeng Sun wrote: > > DNS resolution should fail if no DNS servers are available. This > > patch fixes it and also enables users to use environment variable > > OVS_RESOLV_CONF to specify the path for DNS server configuration > > file. > > > > Suggested-by: Ben Pfaff <b...@ovn.org> > > Suggested-by: Mark Michelson <mmich...@redhat.com> > > Signed-off-by: Yifeng Sun <pkusunyif...@gmail.com> > > --- > > lib/dns-resolve.c | 14 +++++++++++++- > > 1 file changed, 13 insertions(+), 1 deletion(-) > > > > diff --git a/lib/dns-resolve.c b/lib/dns-resolve.c > > index 3c6d70e8fbba..60757cb1eb8a 100644 > > --- a/lib/dns-resolve.c > > +++ b/lib/dns-resolve.c > > @@ -83,14 +83,26 @@ dns_resolve_init(bool is_daemon) > > } > > > > #ifdef __linux__ > > - const char *filename = "/etc/resolv.conf"; > > + const char *filename = getenv("OVS_RESOLV_CONF"); > > + if (filename == NULL) { > > + filename = "/etc/resolv.conf"; > > + } > > struct stat s; > > if (!stat(filename, &s) || errno != ENOENT) { > > int retval = ub_ctx_resolvconf(ub_ctx__, filename); > > if (retval != 0) { > > VLOG_WARN_RL(&rl, "Failed to read %s: %s", > > filename, ub_strerror(retval)); > > + ub_ctx_delete(ub_ctx__); > > + ub_ctx__ = NULL; > > + return; > > } > > + } else { > > + VLOG_WARN_RL(&rl, "Failed to read %s: %s", > > + filename, ovs_strerror(errno)); > > + ub_ctx_delete(ub_ctx__); > > + ub_ctx__ = NULL; > > + return; > > } > > #endif > > Thanks for the improvement. It spurs a few thoughts. > > It looks like part of this may be a somewhat independent bug fix > because, previously, ub_ctx__ was not deleted or set to NULL on error. > Is that part of this patch also a bug fix? >
It is a fix based on your previous suggestion: DNS resolving should stop if there is no DNS server configured. Do you think we should create another patch only for this fix? > This looks a little unfair to Windows. I think that ub_ctx_resolvconf() > works on Windows if you supply a file name, or even if you pass NULL to > use the default Windows resolver parameters. > > I think that the overall logic, then, could more fairly to Windows be > something like this: > > const char *filename = getenv("OVS_RESOLV_CONF"); > if (!filename) { > #ifdef _WIN32 > /* On Windows, NULL means to use the system default nameserver. */ > #else > filename = "/etc/resolv.conf"; > #endif > } > > The documentation for ub_ctx_resolvconf() is here: > https://linux.die.net/man/3/ub_ctx_resolvconf > > (If we use this implementation, we need to be careful about error > messages, because NULL shouldn't be used for %s.) > Good point, will do. > > The new environment variable should be documented in some appropriate > place. > Sure, will do. Thanks. > > Thanks a lot! > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev