X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fresolver.c;h=3a11fe71ef860f2f49be96470c46de325e831c02;hb=5d707c40f9304323ce09ba4e7b3a699a25742501;hp=0f3518888c85934acefecd43225bab3fd0a6b215;hpb=991fe1e5f6458aa30ee82ad73b2f0411b74b1d3e;p=connman diff --git a/src/resolver.c b/src/resolver.c index 0f35188..3a11fe7 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 { @@ -142,6 +149,9 @@ int connman_resolver_append(const char *interface, const char *domain, DBG("interface %s domain %s server %s", interface, domain, server); + if (server == NULL) + return -EINVAL; + entry = g_try_new0(struct entry_data, 1); if (entry == NULL) return -ENOMEM; @@ -231,3 +241,61 @@ 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("# Generated by Connection Manager\n" + "domain localdomain\n" + "search localdomain\n" + "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); +}