From a5f540db7354b76bcabd0a05d8eb8ba2bff4e911 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Thu, 3 May 2012 16:15:08 +0300 Subject: [PATCH] loopback: Check hostname/domainname validity --- plugins/loopback.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/plugins/loopback.c b/plugins/loopback.c index 1800c49..a111eee 100644 --- a/plugins/loopback.c +++ b/plugins/loopback.c @@ -39,6 +39,7 @@ #include #include #include +#include static in_addr_t loopback_address; static in_addr_t loopback_netmask; @@ -206,12 +207,21 @@ static const char *loopback_get_hostname(void) static int loopback_set_hostname(const char *hostname) { - int err; + const char *ptr; + int err, len; if (g_strcmp0(hostname, "") == 0) return 0; - if (sethostname(hostname, strlen(hostname)) < 0) { + len = strlen(hostname); + + if (connman_inet_check_hostname(hostname, len) == FALSE) + return -EINVAL; + + if ((ptr = strstr(hostname, ".")) != NULL) + len = ptr - hostname; + + if (sethostname(hostname, len) < 0) { err = -errno; connman_error("Failed to set hostname to %s", hostname); return err; @@ -224,9 +234,14 @@ static int loopback_set_hostname(const char *hostname) static int loopback_set_domainname(const char *domainname) { - int err; + int err, len; + + len = strlen(domainname); + + if (connman_inet_check_hostname(domainname, len) == FALSE) + return -EINVAL; - if (setdomainname(domainname, strlen(domainname)) < 0) { + if (setdomainname(domainname, len) < 0) { err = -errno; connman_error("Failed to set domainname to %s", domainname); return err; -- 2.7.4