]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp6-client: support multiple domains
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 24 Sep 2021 05:16:44 +0000 (14:16 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 29 Sep 2021 06:29:41 +0000 (15:29 +0900)
src/libsystemd-network/dhcp6-lease-internal.h
src/libsystemd-network/sd-dhcp6-client.c
src/libsystemd-network/sd-dhcp6-lease.c
src/libsystemd-network/test-dhcp6-client.c

index 0b83ddfd641cee2aa9695ccd84690c9a4f500bda..d6311b7d383cfffd094611a31058adfc6d62c50a 100644 (file)
@@ -49,7 +49,7 @@ int dhcp6_lease_get_iaid(sd_dhcp6_lease *lease, be32_t *iaid);
 int dhcp6_lease_get_pd_iaid(sd_dhcp6_lease *lease, be32_t *iaid);
 
 int dhcp6_lease_set_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen);
-int dhcp6_lease_set_domains(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_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);
index a5eae6a55cdfb0d2c35df741cda346dba556e047..604b9f5e4bd6e03e575340969547e224ec14aa38 100644 (file)
@@ -1250,7 +1250,7 @@ static int client_parse_message(
                         break;
 
                 case SD_DHCP6_OPTION_DOMAIN_LIST:
-                        r = dhcp6_lease_set_domains(lease, optval, optlen);
+                        r = dhcp6_lease_add_domains(lease, optval, optlen);
                         if (r < 0)
                                 return r;
 
index aaafed661bcbc31d8a9470c84c80cb1cb1639ece..0a292a3f51682e273ed152b839d6259084efc866 100644 (file)
@@ -214,9 +214,9 @@ int sd_dhcp6_lease_get_dns(sd_dhcp6_lease *lease, const struct in6_addr **ret) {
         return lease->dns_count;
 }
 
-int dhcp6_lease_set_domains(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) {
+        _cleanup_strv_free_ char **domains = NULL;
         int r;
-        char **domains;
 
         assert_return(lease, -EINVAL);
         assert_return(optval, -EINVAL);
@@ -228,9 +228,7 @@ int dhcp6_lease_set_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t
         if (r < 0)
                 return r;
 
-        strv_free_and_replace(lease->domains, domains);
-
-        return 0;
+        return strv_extend_strv(&lease->domains, domains, true);
 }
 
 int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***ret) {
index e711e1d9f563223df1c7ff01b3c8af8c5d4a4fd7..665000ef4587dd9d4436da0d5d58e317713c0897 100644 (file)
@@ -516,8 +516,7 @@ static int test_advertise_option(sd_event *e) {
 
                 case SD_DHCP6_OPTION_DOMAIN_LIST:
                         assert_se(optlen == 11);
-                        assert_se(dhcp6_lease_set_domains(lease, optval,
-                                                          optlen) >= 0);
+                        assert_se(dhcp6_lease_add_domains(lease, optval, optlen) >= 0);
                         break;
 
                 case SD_DHCP6_OPTION_SNTP_SERVERS: