X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=plugins%2Fresolvconf.c;h=df3a834bf6b6ae152d874133f43d6fc249cd1e20;hb=eb0286572813ca040954e6a54eb18e2683415072;hp=732db4f00bcf1433bec13dbd5cc327a8d11ee36a;hpb=a5541065ee14e6582402ce586009c3144fcff33f;p=connman diff --git a/plugins/resolvconf.c b/plugins/resolvconf.c index 732db4f..df3a834 100644 --- a/plugins/resolvconf.c +++ b/plugins/resolvconf.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007 Intel Corporation. All rights reserved. + * 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 @@ -23,96 +23,75 @@ #include #endif -#include +#include #include #include -#include -#include -#include -#include +#define CONNMAN_API_SUBJECT_TO_CHANGE #include #include #include -static int resolvconf_append(struct connman_iface *iface, const char *nameserver) -{ - struct ifreq ifr; - char cmd[128]; - int sk, err; - - sk = socket(PF_INET, SOCK_DGRAM, 0); - if (sk < 0) - return -1; - - memset(&ifr, 0, sizeof(ifr)); - ifr.ifr_ifindex = iface->index; +#include - err = ioctl(sk, SIOCGIFNAME, &ifr); - - close(sk); +static int resolvconf_append(const char *interface, const char *domain, + const char *server) +{ + char *cmd; + int err; - if (err < 0) - return -1; + DBG("interface %s server %s", interface, server); - DBG("ifname %s", ifr.ifr_name); + if (access(RESOLVCONF, X_OK) < 0) + return -errno; - snprintf(cmd, sizeof(cmd), "echo \"nameserver %s\" | resolvconf -a %s", - nameserver, ifr.ifr_name); + cmd = g_strdup_printf("echo \"nameserver %s\" | %s -a %s", + server, RESOLVCONF, interface); DBG("%s", cmd); err = system(cmd); - return 0; + g_free(cmd); + + return err; } -static int resolvconf_remove(struct connman_iface *iface) +static int resolvconf_remove(const char *interface, const char *domain, + const char *server) { - struct ifreq ifr; - char cmd[128]; - int sk, err; + char *cmd; + int err; - sk = socket(PF_INET, SOCK_DGRAM, 0); - if (sk < 0) - return -1; + DBG("interface %s server %s", interface, server); - memset(&ifr, 0, sizeof(ifr)); - ifr.ifr_ifindex = iface->index; - - err = ioctl(sk, SIOCGIFNAME, &ifr); - - close(sk); - - if (err < 0) - return -1; - - DBG("ifname %s", ifr.ifr_name); - - snprintf(cmd, sizeof(cmd), "resolvconf -d %s", ifr.ifr_name); + cmd = g_strdup_printf("%s -d %s", RESOLVCONF, interface); DBG("%s", cmd); err = system(cmd); - return 0; + g_free(cmd); + + return err; } -static struct connman_resolver_driver resolvconf_driver = { +static struct connman_resolver resolvconf_resolver = { .name = "resolvconf", + .priority = CONNMAN_RESOLVER_PRIORITY_DEFAULT, .append = resolvconf_append, .remove = resolvconf_remove, }; static int resolvconf_init(void) { - return connman_resolver_register(&resolvconf_driver); + return connman_resolver_register(&resolvconf_resolver); } static void resolvconf_exit(void) { - connman_resolver_unregister(&resolvconf_driver); + connman_resolver_unregister(&resolvconf_resolver); } -CONNMAN_PLUGIN_DEFINE("resolvconf", "Name resolver plugin", VERSION, - resolvconf_init, resolvconf_exit) +CONNMAN_PLUGIN_DEFINE(resolvconf, "Name resolver plugin", VERSION, + CONNMAN_PLUGIN_PRIORITY_DEFAULT, resolvconf_init, resolvconf_exit)