]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: assign values after all checks are passed
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 17 Feb 2021 17:23:42 +0000 (02:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 17 Feb 2021 18:48:07 +0000 (03:48 +0900)
src/network/networkd-dhcp6.c

index 326c9f3fcf356a85a197251262c3810c53221199..eb9fabb2aeb7476ec588db22422fe3760ae01c26 100644 (file)
@@ -1613,6 +1613,8 @@ int config_parse_dhcp6_pd_hint(
                 void *userdata) {
 
         Network *network = data;
+        union in_addr_union u;
+        unsigned char prefixlen;
         int r;
 
         assert(filename);
@@ -1620,18 +1622,22 @@ int config_parse_dhcp6_pd_hint(
         assert(rvalue);
         assert(data);
 
-        r = in_addr_prefix_from_string(rvalue, AF_INET6, (union in_addr_union *) &network->dhcp6_pd_address, &network->dhcp6_pd_length);
+        r = in_addr_prefix_from_string(rvalue, AF_INET6, &u, &prefixlen);
         if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse PrefixDelegationHint=%s, ignoring assignment", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse %s=%s, ignoring assignment.", lvalue, rvalue);
                 return 0;
         }
 
-        if (network->dhcp6_pd_length < 1 || network->dhcp6_pd_length > 128) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid prefix length='%d', ignoring assignment", network->dhcp6_pd_length);
-                network->dhcp6_pd_length = 0;
+        if (prefixlen < 1 || prefixlen > 128) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                           "Invalid prefix length in %s=%s, ignoring assignment.", lvalue, rvalue);
                 return 0;
         }
 
+        network->dhcp6_pd_address = u.in6;
+        network->dhcp6_pd_length = prefixlen;
+
         return 0;
 }