From: Marcel Holtmann Date: Sat, 3 Jan 2009 10:49:58 +0000 (+0100) Subject: Make /etc/resolv.conf modification part of the daemon X-Git-Tag: 2.0_alpha~4210 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=136ce2c05ed1fdd3033215bd9f15867c56b6dc4f;p=framework%2Fconnectivity%2Fconnman.git Make /etc/resolv.conf modification part of the daemon --- diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 597da4b..1d9c85a 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -2,7 +2,7 @@ plugindir = $(libdir)/connman/plugins plugin_LTLIBRARIES = ethernet.la bluetooth.la \ - ipv4.la dnsproxy.la resolvconf.la resolvfile.la + ipv4.la dnsproxy.la resolvconf.la if LOOPBACK plugin_LTLIBRARIES += loopback.la @@ -69,8 +69,6 @@ dnsproxy_la_SOURCES = dnsproxy.c resolvconf_la_SOURCES = resolvconf.c resolvconf_la_CFLAGS = @GLIB_CFLAGS@ -DRESOLVCONF=\"@RESOLVCONF@\" -resolvfile_la_SOURCES = resolvfile.c - if POLKIT plugin_LTLIBRARIES += polkit.la diff --git a/plugins/resolvfile.c b/plugins/resolvfile.c deleted file mode 100644 index e89b2ca..0000000 --- a/plugins/resolvfile.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * - * Connection Manager - * - * Copyright (C) 2007-2009 Intel Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -#define CONNMAN_API_SUBJECT_TO_CHANGE -#include -#include -#include - -#include - -static int resolvfile_append(const char *interface, const char *domain, - const char *server) -{ - char *cmd; - int fd, len, err; - - DBG("server %s", server); - - fd = open("/etc/resolv.conf", O_RDWR | O_CREAT, - S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - if (fd < 0) - return errno; - - err = ftruncate(fd, 0); - - cmd = g_strdup_printf("nameserver %s\n", server); - - len = write(fd, cmd, strlen(cmd)); - - g_free(cmd); - - close(fd); - - return 0; -} - -static int resolvfile_remove(const char *interface, const char *domain, - const char *server) -{ - DBG("server %s", server); - - return 0; -} - -static struct connman_resolver resolvfile_resolver = { - .name = "resolvfile", - .priority = CONNMAN_RESOLVER_PRIORITY_LOW, - .append = resolvfile_append, - .remove = resolvfile_remove, -}; - -static int resolvfile_init(void) -{ - return connman_resolver_register(&resolvfile_resolver); -} - -static void resolvfile_exit(void) -{ - connman_resolver_unregister(&resolvfile_resolver); -} - -CONNMAN_PLUGIN_DEFINE(resolvfile, "Name resolver plugin", VERSION, - resolvfile_init, resolvfile_exit) diff --git a/src/connman.h b/src/connman.h index e410ac1..cb5f72a 100644 --- a/src/connman.h +++ b/src/connman.h @@ -77,6 +77,9 @@ enum connman_ipv4_method __connman_ipv4_string2method(const char *method); #include +int __connman_resolver_init(void); +void __connman_resolver_cleanup(void); + int __connman_resolver_selftest(void); #include diff --git a/src/main.c b/src/main.c index 88afc11..971359d 100644 --- a/src/main.c +++ b/src/main.c @@ -159,6 +159,7 @@ int main(int argc, char *argv[]) __connman_manager_init(conn, option_compat); __connman_profile_init(conn); + __connman_resolver_init(); __connman_rtnl_init(); __connman_udev_init(); @@ -181,6 +182,7 @@ int main(int argc, char *argv[]) __connman_udev_cleanup(); __connman_rtnl_cleanup(); + __connman_resolver_cleanup(); __connman_profile_cleanup(); __connman_manager_cleanup(); diff --git a/src/resolver.c b/src/resolver.c index 0f35188..de60cf1 100644 --- a/src/resolver.c +++ b/src/resolver.c @@ -23,6 +23,13 @@ #include #endif +#include +#include +#include +#include +#include +#include + #include "connman.h" struct entry_data { @@ -231,3 +238,58 @@ int __connman_resolver_selftest(void) return 0; } + +static int resolvfile_append(const char *interface, const char *domain, + const char *server) +{ + char *cmd; + int fd, len, err; + + DBG("interface %s server %s", interface, server); + + fd = open("/etc/resolv.conf", O_RDWR | O_CREAT, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (fd < 0) + return errno; + + err = ftruncate(fd, 0); + + cmd = g_strdup_printf("nameserver %s\n", server); + + len = write(fd, cmd, strlen(cmd)); + + g_free(cmd); + + close(fd); + + return 0; +} + +static int resolvfile_remove(const char *interface, const char *domain, + const char *server) +{ + DBG("interface %s server %s", interface, server); + + return 0; +} + +static struct connman_resolver resolvfile_resolver = { + .name = "resolvfile", + .priority = CONNMAN_RESOLVER_PRIORITY_LOW, + .append = resolvfile_append, + .remove = resolvfile_remove, +}; + +int __connman_resolver_init(void) +{ + DBG(""); + + return connman_resolver_register(&resolvfile_resolver); +} + +void __connman_resolver_cleanup(void) +{ + DBG(""); + + connman_resolver_unregister(&resolvfile_resolver); +}