X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=plugins%2Fresolvfile.c;h=a9009814891f645a41050ab313b5b4b596fbb4dc;hb=faac710ab9f791c28a46b299a08e2f9bb020b313;hp=d39b2e1d04e4e47f6371f07136c7c50ade7fd1eb;hpb=992a6e463a381c220b50f9ebfe36a14599c25834;p=connman diff --git a/plugins/resolvfile.c b/plugins/resolvfile.c index d39b2e1..a900981 100644 --- a/plugins/resolvfile.c +++ b/plugins/resolvfile.c @@ -23,77 +23,70 @@ #include #endif -#include - +#include +#include +#include +#include +#include +#include + +#define CONNMAN_API_SUBJECT_TO_CHANGE #include -#include +#include #include -static int resolvfile_probe(struct connman_element *element) -{ - const char *nameserver = NULL; - struct connman_element *internet; - gchar *cmd; - int err; +#include - DBG("element %p name %s", element, element->name); +static int resolvfile_append(const char *interface, const char *domain, + const char *server) +{ + char *cmd; + int fd, len, err; - connman_element_get_value(element, - CONNMAN_PROPERTY_TYPE_IPV4_NAMESERVER, &nameserver); + DBG("server %s", server); - if (nameserver == NULL) - return -EINVAL; + fd = open("/etc/resolv.conf", O_RDWR | O_CREAT, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (fd < 0) + return errno; - cmd = g_strdup_printf("echo \"nameserver %s\" > /etc/resolv.conf", - nameserver); + err = ftruncate(fd, 0); - DBG("%s", cmd); + cmd = g_strdup_printf("nameserver %s\n", server); - err = system(cmd); + len = write(fd, cmd, strlen(cmd)); g_free(cmd); - internet = connman_element_create(); - - internet->type = CONNMAN_ELEMENT_TYPE_INTERNET; - - connman_element_set_data(element, internet); - - connman_element_register(internet, element); + close(fd); return 0; } -static void resolvfile_remove(struct connman_element *element) +static int resolvfile_remove(const char *interface, const char *domain, + const char *server) { - struct connman_element *internet = connman_element_get_data(element); - - DBG("element %p name %s", element, element->name); - - connman_element_set_data(element, NULL); + DBG("server %s", server); - connman_element_unregister(internet); - - connman_element_unref(internet); + return 0; } -static struct connman_driver resolvfile_driver = { - .name = "resolvconf", - .type = CONNMAN_ELEMENT_TYPE_RESOLVER, - .priority = CONNMAN_DRIVER_PRIORITY_LOW, - .probe = resolvfile_probe, +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_driver_register(&resolvfile_driver); + return connman_resolver_register(&resolvfile_resolver); } static void resolvfile_exit(void) { - connman_driver_unregister(&resolvfile_driver); + connman_resolver_unregister(&resolvfile_resolver); } -CONNMAN_PLUGIN_DEFINE("resolvfile", "Name resolver plugin", VERSION, +CONNMAN_PLUGIN_DEFINE(resolvfile, "Name resolver plugin", VERSION, resolvfile_init, resolvfile_exit)