diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-01-03 11:49:58 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-01-03 11:49:58 +0100 |
commit | 136ce2c05ed1fdd3033215bd9f15867c56b6dc4f (patch) | |
tree | b4238c109a935758e0b0c34a7db4e258ae133231 | |
parent | ef15fdd2b73da041cb3cd623ca0b4ce0c856644a (diff) | |
download | connman-136ce2c05ed1fdd3033215bd9f15867c56b6dc4f.tar.gz connman-136ce2c05ed1fdd3033215bd9f15867c56b6dc4f.tar.bz2 connman-136ce2c05ed1fdd3033215bd9f15867c56b6dc4f.zip |
Make /etc/resolv.conf modification part of the daemon
-rw-r--r-- | plugins/Makefile.am | 4 | ||||
-rw-r--r-- | plugins/resolvfile.c | 92 | ||||
-rw-r--r-- | src/connman.h | 3 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/resolver.c | 62 |
5 files changed, 68 insertions, 95 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 597da4b2..1d9c85a3 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 e89b2ca8..00000000 --- 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 <config.h> -#endif - -#include <stdio.h> -#include <errno.h> -#include <fcntl.h> -#include <unistd.h> -#include <string.h> -#include <sys/stat.h> - -#define CONNMAN_API_SUBJECT_TO_CHANGE -#include <connman/plugin.h> -#include <connman/resolver.h> -#include <connman/log.h> - -#include <glib.h> - -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 e410ac1c..cb5f72a8 100644 --- a/src/connman.h +++ b/src/connman.h @@ -77,6 +77,9 @@ enum connman_ipv4_method __connman_ipv4_string2method(const char *method); #include <connman/resolver.h> +int __connman_resolver_init(void); +void __connman_resolver_cleanup(void); + int __connman_resolver_selftest(void); #include <connman/driver.h> @@ -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 0f351888..de60cf13 100644 --- a/src/resolver.c +++ b/src/resolver.c @@ -23,6 +23,13 @@ #include <config.h> #endif +#include <stdio.h> +#include <errno.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> +#include <sys/stat.h> + #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); +} |