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 /src/resolver.c | |
parent | ef15fdd2b73da041cb3cd623ca0b4ce0c856644a (diff) | |
download | connman-136ce2c05ed1fdd3033215bd9f15867c56b6dc4f.tar.gz connman-136ce2c05ed1fdd3033215bd9f15867c56b6dc4f.tar.bz2 connman-136ce2c05ed1fdd3033215bd9f15867c56b6dc4f.zip |
Make /etc/resolv.conf modification part of the daemon
Diffstat (limited to 'src/resolver.c')
-rw-r--r-- | src/resolver.c | 62 |
1 files changed, 62 insertions, 0 deletions
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); +} |