summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Ronco <c.ronco@kerlink.fr>2022-10-11 11:56:41 +0200
committerDaniel Wagner <wagi@monom.org>2022-10-24 08:46:59 +0200
commita9212a41cff527852459a1dc9e91b855bc545124 (patch)
treeacff38a7b8344477b3e6079d7ada6e539123032a
parent19789ae039bb782fe3fbbe9562a54480e4c34c64 (diff)
downloadconnman-a9212a41cff527852459a1dc9e91b855bc545124.tar.gz
dnsproxy: enable Fallback DNS server when created if needed
If there is no default DNS server when a fallback DNS server is created, enable it.
-rw-r--r--src/dnsproxy.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/dnsproxy.c b/src/dnsproxy.c
index 22730047..a810b676 100644
--- a/src/dnsproxy.c
+++ b/src/dnsproxy.c
@@ -2586,6 +2586,20 @@ static void enable_fallback(bool enable)
}
}
+static unsigned int get_enabled_server_number(void)
+{
+ GSList *list;
+ unsigned int result = 0;
+
+ for (list = server_list; list; list = list->next) {
+ struct server_data *data = list->data;
+
+ if (data->index != -1 && data->enabled == true)
+ result++;
+ }
+ return result;
+}
+
static struct server_data *create_server(int index,
const char *domain, const char *server,
int protocol)
@@ -2674,6 +2688,9 @@ static struct server_data *create_server(int index,
DBG("Adding DNS server %s", data->server);
enable_fallback(false);
+ } else if (data->index == -1 && get_enabled_server_number() == 0) {
+ data->enabled = true;
+ DBG("Adding fallback DNS server %s", data->server);
}
server_list = g_slist_append(server_list, data);
@@ -2834,7 +2851,6 @@ int __connman_dnsproxy_append(int index, const char *domain,
static void remove_server(int index, const char *server, int protocol)
{
struct server_data *data;
- GSList *list;
data = find_server(index, server, protocol);
if (!data)
@@ -2842,14 +2858,8 @@ static void remove_server(int index, const char *server, int protocol)
destroy_server(data);
- for (list = server_list; list; list = list->next) {
- data = list->data;
-
- if (data->index != -1 && data->enabled == true)
- return;
- }
-
- enable_fallback(true);
+ if (get_enabled_server_number() == 0)
+ enable_fallback(true);
}
int __connman_dnsproxy_remove(int index, const char *domain,