X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-dhcp-lease.c;h=6680d06736242f7db332495b2f5c03a0d82d3f27;hb=9ba81d5a61b7c992a1d2e5e02f334b8e2a0b0c22;hp=bfd1b0cd1840fd06af11607fac9999b112135ef5;hpb=b0e39c8284b5195850a58e4efcce2f059bdcc6ad;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index bfd1b0cd1..6680d0673 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -513,19 +513,39 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const uint8_t *option, break; case DHCP_OPTION_DOMAIN_NAME: - r = lease_parse_string(option, len, &lease->domainname); + { + _cleanup_free_ char *domainname = NULL; + + r = lease_parse_string(option, len, &domainname); if (r < 0) return r; - break; + if (!hostname_is_valid(domainname) || is_localhost(domainname)) + break; + + free(lease->domainname); + lease->domainname = domainname; + domainname = NULL; + break; + } case DHCP_OPTION_HOST_NAME: - r = lease_parse_string(option, len, &lease->hostname); + { + _cleanup_free_ char *hostname = NULL; + + r = lease_parse_string(option, len, &hostname); if (r < 0) return r; - break; + if (!hostname_is_valid(hostname) || is_localhost(hostname)) + break; + + free(lease->hostname); + lease->hostname = hostname; + hostname = NULL; + break; + } case DHCP_OPTION_ROOT_PATH: r = lease_parse_string(option, len, &lease->root_path); if (r < 0)