network: warn if Address= is specified without prefixlen
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 28 Jan 2019 14:29:54 +0000 (15:29 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 29 Jan 2019 06:36:35 +0000 (07:36 +0100)
This is the first step for #11307.

src/network/networkd-address.c

index 25d9cbe..fa7f9b8 100644 (file)
@@ -748,7 +748,15 @@ int config_parse_address(const char *unit,
                 return r;
 
         /* Address=address/prefixlen */
-        r = in_addr_prefix_from_string_auto_internal(rvalue, PREFIXLEN_LEGACY, &f, &buffer, &prefixlen);
+        r = in_addr_prefix_from_string_auto_internal(rvalue, PREFIXLEN_REFUSE, &f, &buffer, &prefixlen);
+        if (r == -ENOANO) {
+                log_syntax(unit, LOG_ERR, filename, line, r,
+                           "An address '%s' is specified without prefix length. "
+                           "The behavior of parsing addresses without prefix length will be changed in the future release. "
+                           "Please specify prefix length explicitly.", rvalue);
+
+                r = in_addr_prefix_from_string_auto_internal(rvalue, PREFIXLEN_LEGACY, &f, &buffer, &prefixlen);
+        }
         if (r < 0) {
                 log_syntax(unit, LOG_ERR, filename, line, r, "Invalid address '%s', ignoring assignment: %m", rvalue);
                 return 0;