summaryrefslogtreecommitdiff
path: root/src/resolver.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-03 11:49:58 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-03 11:49:58 +0100
commit136ce2c05ed1fdd3033215bd9f15867c56b6dc4f (patch)
treeb4238c109a935758e0b0c34a7db4e258ae133231 /src/resolver.c
parentef15fdd2b73da041cb3cd623ca0b4ce0c856644a (diff)
downloadconnman-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.c62
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);
+}