X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-dhcp-lease.c;h=34aa36c6e6629c9331d6230ae8fccb57804194b6;hb=b762fbd128480426d225596b18604a45042339c5;hp=22a4af6837db96c02e34f0839eb711b60d90cf3e;hpb=23bbb0de4e3f85d9704a5c12a5afa2dfa0159e41;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index 22a4af683..34aa36c6e 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -193,7 +193,7 @@ sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease) { } sd_dhcp_lease *sd_dhcp_lease_unref(sd_dhcp_lease *lease) { - if (lease && REFCNT_DEC(lease->n_ref) <= 0) { + if (lease && REFCNT_DEC(lease->n_ref) == 0) { free(lease->hostname); free(lease->domainname); free(lease->dns); @@ -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;