[ovs-dev] [PATCH 2/2] dns-resolve: Improve on handling of system DNS nameserver

Yifeng Sun pkusunyifeng at gmail.com
Wed Nov 7 21:44:34 UTC 2018


This patch enables OVS on windows to read system nameserver configuration.
In addition, a new environment variable OVS_RESOLV_CONF is introduced.
If set, it can be used as DNS server configuration file. This variable 
is supposed to be used for sandboxing other things. It is documented
accordingly.

Suggested-by: Ben Pfaff <blp at ovn.org>
Suggested-by: Mark Michelson <mmichels at redhat.com>
Signed-off-by: Yifeng Sun <pkusunyifeng at gmail.com>
---
 Documentation/intro/install/general.rst |  2 ++
 NEWS                                    |  2 ++
 lib/dns-resolve.c                       | 16 +++++++++++-----
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/Documentation/intro/install/general.rst b/Documentation/intro/install/general.rst
index 537137ef58df..71dfeaefca27 100644
--- a/Documentation/intro/install/general.rst
+++ b/Documentation/intro/install/general.rst
@@ -97,6 +97,8 @@ need the following software:
   you want to enable ovs-vswitchd and other utilities to use DNS names when
   specifying OpenFlow and OVSDB remotes. If unbound library is already
   installed, then Open vSwitch will automatically build with support for it.
+  The environment variable OVS_RESOLV_CONF can be used to specify DNS server
+  configuration file (the default file on Linux is /etc/resolv.conf).
 
 On Linux, you may choose to compile the kernel module that comes with the Open
 vSwitch distribution or to use the kernel module built into the Linux kernel
diff --git a/NEWS b/NEWS
index fc8ab05def4a..8eba5a38fafc 100644
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,8 @@ Post-v2.10.0
    - ovs-vswitchd:
      * New configuration option "offload-rebalance", that enables dynamic
        rebalancing of offloaded flows.
+   - The environment variable OVS_RESOLV_CONF, if set, is now used
+     as the DNS server configuration file.
 
 v2.10.0 - 18 Aug 2018
 ---------------------
diff --git a/lib/dns-resolve.c b/lib/dns-resolve.c
index 7d735749e5a5..3e4e57b9379a 100644
--- a/lib/dns-resolve.c
+++ b/lib/dns-resolve.c
@@ -82,14 +82,21 @@ dns_resolve_init(bool is_daemon)
         return;
     }
 
-#ifdef __linux__
-    const char *filename = "/etc/resolv.conf";
+    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
+    }
     struct stat s;
-    if (!stat(filename, &s) || errno != ENOENT) {
+    if (!filename || (!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));
+                         filename ? filename : "system default nameserver",
+                         ub_strerror(retval));
             ub_ctx_delete(ub_ctx__);
             ub_ctx__ = NULL;
             return;
@@ -101,7 +108,6 @@ dns_resolve_init(bool is_daemon)
         ub_ctx__ = NULL;
         return;
     }
-#endif
 
     /* Handles '/etc/hosts' on Linux and 'WINDIR/etc/hosts' on Windows. */
     int retval = ub_ctx_hosts(ub_ctx__, NULL);
-- 
2.7.4



More information about the dev mailing list