int dhcp6_lease_set_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
int dhcp6_lease_add_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
-int dhcp6_lease_set_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
+int dhcp6_lease_add_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
int dhcp6_lease_set_sntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) ;
int dhcp6_lease_set_fqdn(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
break;
case SD_DHCP6_OPTION_NTP_SERVER:
- r = dhcp6_lease_set_ntp(lease, optval, optlen);
+ r = dhcp6_lease_add_ntp(lease, optval, optlen);
if (r < 0)
return r;
return strv_length(lease->domains);
}
-int dhcp6_lease_set_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
+int dhcp6_lease_add_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
int r;
assert_return(lease, -EINVAL);
assert_return(optval, -EINVAL);
- lease->ntp = mfree(lease->ntp);
- lease->ntp_count = 0;
-
for (size_t offset = 0; offset < optlen;) {
const uint8_t *subval;
size_t sublen;
break;
case DHCP6_NTP_SUBOPTION_SRV_FQDN: {
- char **servers;
+ _cleanup_free_ char *server = NULL;
- r = dhcp6_option_parse_domainname_list(subval, sublen, &servers);
+ r = dhcp6_option_parse_domainname(subval, sublen, &server);
if (r < 0)
return r;
- strv_free_and_replace(lease->ntp_fqdn, servers);
+ if (strv_contains(lease->ntp_fqdn, server))
+ continue;
+
+ r = strv_consume(&lease->ntp_fqdn, TAKE_PTR(server));
+ if (r < 0)
+ return r;
break;
}}