From: Yu Watanabe Date: Thu, 2 Aug 2018 07:28:23 +0000 (+0900) Subject: network: also check that Hostname= is a valid DNS domain name X-Git-Tag: v240~863^2~4 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fsystemd.git;a=commitdiff_plain;h=6528693a94821e0e13a8e112fb481c4ab0c62688 network: also check that Hostname= is a valid DNS domain name --- diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 1f1cdced8f1..eb13e9e93da 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -971,7 +971,8 @@ int config_parse_hostname( void *data, void *userdata) { - char **hostname = data, *hn = NULL; + _cleanup_free_ char *hn = NULL; + char **hostname = data; int r; assert(filename); @@ -984,13 +985,20 @@ int config_parse_hostname( if (!hostname_is_valid(hn, false)) { log_syntax(unit, LOG_ERR, filename, line, 0, "Hostname is not valid, ignoring assignment: %s", rvalue); - free(hn); return 0; } - free(*hostname); - *hostname = hostname_cleanup(hn); - return 0; + r = dns_name_is_valid(hn); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, "Failed to check validity of hostname '%s', ignoring assignment: %m", rvalue); + return 0; + } + if (r == 0) { + log_syntax(unit, LOG_ERR, filename, line, 0, "Hostname is not a valid DNS domain name, ignoring assignment: %s", rvalue); + return 0; + } + + return free_and_replace(*hostname, hn); } int config_parse_timezone(