diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-01-28 17:47:37 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-01-28 17:47:37 +0100 |
commit | f50f01f4b738f2f00b30d0e02e8cf54ab99a9f27 (patch) | |
tree | 492bd10d9062bb41b9c7bcb8b24b29f309e999fa | |
parent | 3b48ce4ec4639437ca3db344962ed37b0c83ea9a (diff) |
sd-dhcp: chop of trailing dot of DHCP supplied host and domain nams
-rw-r--r-- | src/libsystemd-network/sd-dhcp-lease.c | 14 |
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; |