summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-01-28 17:47:37 +0100
committerLennart Poettering <lennart@poettering.net>2015-01-28 17:47:37 +0100
commitf50f01f4b738f2f00b30d0e02e8cf54ab99a9f27 (patch)
tree492bd10d9062bb41b9c7bcb8b24b29f309e999fa
parent3b48ce4ec4639437ca3db344962ed37b0c83ea9a (diff)
sd-dhcp: chop of trailing dot of DHCP supplied host and domain nams
-rw-r--r--src/libsystemd-network/sd-dhcp-lease.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c
index 00fef164b0..34aa36c6e6 100644
--- a/src/libsystemd-network/sd-dhcp-lease.c
+++ b/src/libsystemd-network/sd-dhcp-lease.c
@@ -497,11 +497,20 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const uint8_t *option,
case DHCP_OPTION_DOMAIN_NAME:
{
_cleanup_free_ char *domainname = NULL;
+ char *e;
r = lease_parse_string(option, len, &domainname);
if (r < 0)
return r;
+ /* Chop off trailing dot of domain name that some DHCP
+ * servers send us back. Internally we want to store
+ * host names without trailing dots and
+ * host_name_is_valid() doesn't accept them. */
+ e = endswith(domainname, ".");
+ if (e)
+ *e = 0;
+
if (!hostname_is_valid(domainname) || is_localhost(domainname))
break;
@@ -514,11 +523,16 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const uint8_t *option,
case DHCP_OPTION_HOST_NAME:
{
_cleanup_free_ char *hostname = NULL;
+ char *e;
r = lease_parse_string(option, len, &hostname);
if (r < 0)
return r;
+ e = endswith(hostname, ".");
+ if (e)
+ *e = 0;
+
if (!hostname_is_valid(hostname) || is_localhost(hostname))
break;