From 4658b59abd4e0fc58821a67e6847667c1bab33ca Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 9 Aug 2008 04:59:25 +0200 Subject: [PATCH] Write /etc/resolv.conf file directly --- plugins/resolvfile.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/plugins/resolvfile.c b/plugins/resolvfile.c index d39b2e1..bf48081 100644 --- a/plugins/resolvfile.c +++ b/plugins/resolvfile.c @@ -23,7 +23,11 @@ #include #endif -#include +#include +#include +#include +#include +#include #include #include @@ -34,7 +38,7 @@ static int resolvfile_probe(struct connman_element *element) const char *nameserver = NULL; struct connman_element *internet; gchar *cmd; - int err; + int fd, len, err; DBG("element %p name %s", element, element->name); @@ -44,15 +48,21 @@ static int resolvfile_probe(struct connman_element *element) if (nameserver == NULL) return -EINVAL; - cmd = g_strdup_printf("echo \"nameserver %s\" > /etc/resolv.conf", - nameserver); + fd = open("/etc/resolv.conf", O_RDWR | O_CREAT, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (fd < 0) + return errno; - DBG("%s", cmd); + err = ftruncate(fd, 0); - err = system(cmd); + cmd = g_strdup_printf("nameserver %s\n", nameserver); + + len = write(fd, cmd, strlen(cmd)); g_free(cmd); + close(fd); + internet = connman_element_create(); internet->type = CONNMAN_ELEMENT_TYPE_INTERNET; -- 1.7.9.5