]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: neighbor: accept an empty string assignment 21301/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 11 Nov 2021 00:24:56 +0000 (09:24 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 11 Nov 2021 03:49:42 +0000 (12:49 +0900)
src/network/networkd-neighbor.c

index f7618fd9f63f4abae6fb1f9b54350bc5a2a06ad7..1766095e5318fa1a19f5db5ff4495f1310c1625e 100644 (file)
@@ -611,20 +611,27 @@ int config_parse_neighbor_address(
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
         _cleanup_(neighbor_free_or_set_invalidp) Neighbor *n = NULL;
+        Network *network = userdata;
         int r;
 
         assert(filename);
         assert(section);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
+        assert(userdata);
 
         r = neighbor_new_static(network, filename, section_line, &n);
         if (r < 0)
                 return log_oom();
 
+        if (isempty(rvalue)) {
+                n->family = AF_UNSPEC;
+                n->in_addr = IN_ADDR_NULL;
+                TAKE_PTR(n);
+                return 0;
+        }
+
         r = in_addr_from_string_auto(rvalue, &n->family, &n->in_addr);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,
@@ -633,7 +640,6 @@ int config_parse_neighbor_address(
         }
 
         TAKE_PTR(n);
-
         return 0;
 }
 
@@ -649,20 +655,26 @@ int config_parse_neighbor_lladdr(
                 void *data,
                 void *userdata) {
 
-        Network *network = userdata;
         _cleanup_(neighbor_free_or_set_invalidp) Neighbor *n = NULL;
+        Network *network = userdata;
         int r;
 
         assert(filename);
         assert(section);
         assert(lvalue);
         assert(rvalue);
-        assert(data);
+        assert(userdata);
 
         r = neighbor_new_static(network, filename, section_line, &n);
         if (r < 0)
                 return log_oom();
 
+        if (isempty(rvalue)) {
+                n->ll_addr = HW_ADDR_NULL;
+                TAKE_PTR(n);
+                return 0;
+        }
+
         r = parse_hw_addr(rvalue, &n->ll_addr);
         if (r < 0) {
                 log_syntax(unit, LOG_WARNING, filename, line, r,