assert_return(lease, -EINVAL);
assert_return(hostname, -EINVAL);
- if (!lease->hostname)
+ /* FQDN option (81) always takes precedence. */
+
+ if (lease->fqdn)
+ *hostname = lease->fqdn;
+ else if (lease->hostname)
+ *hostname = lease->hostname;
+ else
return -ENODATA;
- *hostname = lease->hostname;
return 0;
}
free(lease->router);
free(lease->timezone);
free(lease->hostname);
+ free(lease->fqdn);
free(lease->domainname);
free(lease->captive_portal);
break;
case SD_DHCP_OPTION_HOST_NAME:
- /* FQDN option (81) always takes precedence. If it was already set, do not overwrite it. */
- if (lease->hostname) {
- log_debug("Hostname already set via FQDN, ignoring hostname option.");
- break;
- }
-
r = lease_parse_domain(option, len, &lease->hostname);
if (r < 0) {
log_debug_errno(r, "Failed to parse hostname, ignoring: %m");
break;
case SD_DHCP_OPTION_FQDN:
- r = lease_parse_fqdn(option, len, &lease->hostname);
+ r = lease_parse_fqdn(option, len, &lease->fqdn);
if (r < 0) {
log_debug_errno(r, "Failed to parse FQDN, ignoring: %m");
return 0;