dnsproxy: Fallback to resolv.conf if dnsproxy fails
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 27 Jan 2011 14:31:36 +0000 (15:31 +0100)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 31 Jan 2011 14:58:36 +0000 (15:58 +0100)
In case dnsproxy can't create the socket listener we
should fall back to resolv.conf.

Reported by Kalle Valo <kalle.valo@canonical.com>

src/connman.h
src/dnsproxy.c
src/main.c
src/resolver.c

index 979c564..bf31b62 100644 (file)
@@ -607,7 +607,7 @@ int __connman_iptables_command(const char *format, ...)
                                __attribute__((format(printf, 1, 2)));
 int __connman_iptables_commit(const char *table_name);
 
-int __connman_dnsproxy_init(connman_bool_t dnsproxy);
+int __connman_dnsproxy_init(void);
 void __connman_dnsproxy_cleanup(void);
 int __connman_dnsproxy_append(const char *interface, const char *domain, const char *server);
 int __connman_dnsproxy_remove(const char *interface, const char *domain, const char *server);
index 9c2f023..b7667a6 100644 (file)
@@ -114,7 +114,6 @@ struct request_data {
        gsize resplen;
 };
 
-static connman_bool_t dnsproxy_enabled = TRUE;
 static GSList *server_list = NULL;
 static GSList *request_list = NULL;
 static GSList *request_pending_list = NULL;
@@ -1446,15 +1445,11 @@ static void destroy_listener(void)
        destroy_udp_listener();
 }
 
-int __connman_dnsproxy_init(connman_bool_t dnsproxy)
+int __connman_dnsproxy_init(void)
 {
        int err;
 
-       DBG("dnsproxy %d", dnsproxy);
-
-       dnsproxy_enabled = dnsproxy;
-       if (dnsproxy_enabled == FALSE)
-               return 0;
+       DBG("");
 
        err = create_listener();
        if (err < 0)
@@ -1476,9 +1471,6 @@ void __connman_dnsproxy_cleanup(void)
 {
        DBG("");
 
-       if (dnsproxy_enabled == FALSE)
-               return;
-
        connman_notifier_unregister(&dnsproxy_notifier);
 
        destroy_listener();
index d8cc8ea..b64e435 100644 (file)
@@ -221,7 +221,6 @@ int main(int argc, char *argv[])
        __connman_stats_init();
 
        __connman_resolver_init(option_dnsproxy);
-       __connman_dnsproxy_init(option_dnsproxy);
        __connman_ipconfig_init();
        __connman_rtnl_init();
        __connman_task_init();
@@ -257,7 +256,6 @@ int main(int argc, char *argv[])
        __connman_task_cleanup();
        __connman_rtnl_cleanup();
        __connman_ipconfig_cleanup();
-       __connman_dnsproxy_cleanup();
        __connman_resolver_cleanup();
 
        __connman_stats_cleanup();
index 42be030..73175b3 100644 (file)
@@ -447,11 +447,23 @@ int __connman_resolver_init(connman_bool_t dnsproxy)
 {
        DBG("dnsproxy %d", dnsproxy);
 
-       dnsproxy_enabled = dnsproxy;
+       if (dnsproxy == FALSE)
+               return 0;
+
+       if (__connman_dnsproxy_init() < 0) {
+               /* Fall back to resolv.conf */
+               return 0;
+       }
+
+       dnsproxy_enabled = TRUE;
+
        return 0;
 }
 
 void __connman_resolver_cleanup(void)
 {
        DBG("");
+
+       if (dnsproxy_enabled == TRUE)
+               __connman_dnsproxy_cleanup();
 }