Send connman mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        https://lists.01.org/mailman/listinfo/connman
or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."


Today's Topics:

   1. [PATCH 0/2] Don't export duplicate entries in resolv.conf
      (Daniel Wagner)
   2. [PATCH 1/2] service: Refactor
      __connman_service_nameserver_append (Daniel Wagner)
   3. [PATCH 2/2] resolver: Don't export domain or nameserver
      duplicates (Daniel Wagner)


----------------------------------------------------------------------

Message: 1
Date: Sat, 27 Apr 2019 14:29:43 +0200
From: Daniel Wagner <[email protected]>
To: [email protected]
Cc: Daniel Wagner <[email protected]>
Subject: [PATCH 0/2] Don't export duplicate entries in resolv.conf
Message-ID: <[email protected]>

Fix bug reports on duplicate entries in resolv.conf (-r/--nodnsproxy)

Daniel Wagner (2):
  service: Refactor __connman_service_nameserver_append
  resolver: Don't export domain or nameserver duplicates

 src/resolver.c | 39 ++++++++++++++++++++++++++++++++++-----
 src/service.c  |  9 +++++----
 2 files changed, 39 insertions(+), 9 deletions(-)

-- 
2.20.1


------------------------------

Message: 2
Date: Sat, 27 Apr 2019 14:29:44 +0200
From: Daniel Wagner <[email protected]>
To: [email protected]
Cc: Daniel Wagner <[email protected]>
Subject: [PATCH 1/2] service: Refactor
        __connman_service_nameserver_append
Message-ID: <[email protected]>

Move nameserver duplicate check down into the if statemenet. This
avoids to check twice if the variable nameserver is not NULL.
---
 src/service.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/service.c b/src/service.c
index 1f9b5ba5194d..0c5e647ef8a8 100644
--- a/src/service.c
+++ b/src/service.c
@@ -1175,11 +1175,12 @@ int __connman_service_nameserver_append(struct 
connman_service *service,
        else
                nameservers = service->nameservers;
 
-       for (i = 0; nameservers && nameservers[i]; i++)
-               if (g_strcmp0(nameservers[i], nameserver) == 0)
-                       return -EEXIST;
-
        if (nameservers) {
+               for (i = 0; nameservers[i]; i++) {
+                       if (g_strcmp0(nameservers[i], nameserver) == 0)
+                               return -EEXIST;
+               }
+
                len = g_strv_length(nameservers);
                nameservers = g_try_renew(char *, nameservers, len + 2);
        } else {
-- 
2.20.1


------------------------------

Message: 3
Date: Sat, 27 Apr 2019 14:29:45 +0200
From: Daniel Wagner <[email protected]>
To: [email protected]
Cc: Daniel Wagner <[email protected]>
Subject: [PATCH 2/2] resolver: Don't export domain or nameserver
        duplicates
Message-ID: <[email protected]>

Track exported elements and do not append the same domain or
nameserver twice.

connman_resolver_append() is called several times during connection
bring up and might include domains or nameserver already in the
resolvfile_list. This happens for example if two interfaces are
brought up which happend to have the same
configuration (e.g. nameserver 8.8.8.8).

connmand[9080]: enp4s0 {newlink} index 2 operstate 6 <UP>
connmand[9080]: src/resolver.c:connman_resolver_append() index 2 domain (null) 
server 192.168.154.1
connmand[9080]: src/resolver.c:append_resolver() index 2 domain (null) server 
192.168.154.1 lifetime 0 flags 0
connmand[9080]: src/resolver.c:__connman_resolvfile_append() index 2 domain 
(null) server 192.168.154.1
connmand[9080]: Cannot create /var/run/connman/resolv.conf falling back to 
/etc/resolv.conf
connmand[9080]: src/resolver.c:connman_resolver_append() index 2 domain lan 
server (null)
connmand[9080]: src/resolver.c:append_resolver() index 2 domain lan server 
(null) lifetime 0 flags 0
connmand[9080]: src/resolver.c:__connman_resolvfile_append() index 2 domain lan 
server (null)
connmand[9080]: Setting hostname to beryllium
connmand[9080]: Setting domainname to lan
connmand[9080]: enp4s0 {add} address 192.168.154.174/24 label enp4s0 family 2
connmand[9080]: src/resolver.c:connman_resolver_remove() index 2 domain (null) 
server 192.168.154.1
connmand[9080]: src/resolver.c:__connman_resolvfile_remove() index 2 domain 
(null) server 192.168.154.1
connmand[9080]: src/resolver.c:connman_resolver_remove() index 2 domain lan 
server (null)
connmand[9080]: src/resolver.c:__connman_resolvfile_remove() index 2 domain lan 
server (null)
connmand[9080]: src/resolver.c:connman_resolver_append() index 2 domain (null) 
server 192.168.154.1
connmand[9080]: src/resolver.c:append_resolver() index 2 domain (null) server 
192.168.154.1 lifetime 0 flags 0
connmand[9080]: src/resolver.c:__connman_resolvfile_append() index 2 domain 
(null) server 192.168.154.1
connmand[9080]: src/resolver.c:connman_resolver_append() index 2 domain lan 
server (null)
connmand[9080]: src/resolver.c:append_resolver() index 2 domain lan server 
(null) lifetime 0 flags 0
connmand[9080]: src/resolver.c:__connman_resolvfile_append() index 2
domain lan server (null)
[...]
connmand[9080]: wlan0 {newlink} index 7 operstate 6 <UP>
connmand[9080]: src/resolver.c:connman_resolver_append() index 7 domain (null) 
server 192.168.154.1
connmand[9080]: src/resolver.c:append_resolver() index 7 domain (null) server 
192.168.154.1 lifetime 0 flags 0
connmand[9080]: src/resolver.c:__connman_resolvfile_append() index 7 domain 
(null) server 192.168.154.1
connmand[9080]: src/resolver.c:connman_resolver_append() index 7 domain lan 
server (null)
connmand[9080]: src/resolver.c:append_resolver() index 7 domain lan server 
(null) lifetime 0 flags 0
connmand[9080]: src/resolver.c:__connman_resolvfile_append() index 7 domain lan 
server (null)
---
 src/resolver.c | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/src/resolver.c b/src/resolver.c
index 10121aa52bda..618353fd6553 100644
--- a/src/resolver.c
+++ b/src/resolver.c
@@ -83,9 +83,22 @@ static void resolvfile_remove_entries(GList *entries)
        g_list_free(entries);
 }
 
-static int resolvfile_export(void)
+static bool already_exported(GList *export_list, const char *str)
 {
        GList *list;
+
+       for (list = export_list; list; list = g_list_next(list)) {
+               const char *str0 = list->data;
+               if (g_strcmp0(str0, str) == 0)
+                       return true;
+       }
+
+       return false;
+}
+
+static int resolvfile_export(void)
+{
+       GList *list, *export_list;
        GString *content;
        int fd, err;
        unsigned int count;
@@ -99,6 +112,7 @@ static int resolvfile_export(void)
         * MAXDNSRCH/MAXNS entries are used.
         */
 
+       export_list = NULL;
        for (count = 0, list = g_list_first(resolvfile_list);
                                                list && (count < MAXDNSRCH);
                                                list = g_list_next(list)) {
@@ -107,16 +121,25 @@ static int resolvfile_export(void)
                if (!entry->domain)
                        continue;
 
+               if (already_exported(export_list, entry->domain))
+                       continue;
+
                if (count == 0)
                        g_string_append_printf(content, "search ");
 
                g_string_append_printf(content, "%s ", entry->domain);
+
+               export_list = g_list_append(export_list, entry->domain);
+
                count++;
        }
+       g_list_free(export_list);
+
 
        if (count)
                g_string_append_printf(content, "\n");
 
+       export_list = NULL;
        for (count = 0, list = g_list_first(resolvfile_list);
                                                list && (count < MAXNS);
                                                list = g_list_next(list)) {
@@ -125,10 +148,16 @@ static int resolvfile_export(void)
                if (!entry->server)
                        continue;
 
-               g_string_append_printf(content, "nameserver %s\n",
-                                                               entry->server);
+               if (already_exported(export_list, entry->server))
+                       continue;
+
+               g_string_append_printf(content, "nameserver %s\n", 
entry->server);
+
+               export_list = g_list_append(export_list, entry->server);
+
                count++;
        }
+       g_list_free(export_list);
 
        old_umask = umask(022);
 
@@ -172,7 +201,7 @@ int __connman_resolvfile_append(int index, const char 
*domain,
 {
        struct resolvfile_entry *entry;
 
-       DBG("index %d server %s", index, server);
+       DBG("index %d domain %s server %s", index, domain, server);
 
        if (index < 0)
                return -ENOENT;
@@ -195,7 +224,7 @@ int __connman_resolvfile_remove(int index, const char 
*domain,
 {
        GList *list, *matches = NULL;
 
-       DBG("index %d server %s", index, server);
+       DBG("index %d domain %s server %s", index, domain, server);
 
        for (list = resolvfile_list; list; list = g_list_next(list)) {
                struct resolvfile_entry *entry = list->data;
-- 
2.20.1


------------------------------

Subject: Digest Footer

_______________________________________________
connman mailing list
[email protected]
https://lists.01.org/mailman/listinfo/connman


------------------------------

End of connman Digest, Vol 42, Issue 24
***************************************

Reply via email to