From a61738b3a637b17aa4208d98ae9fe01e9bba1c0a Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 21 Dec 2023 04:08:53 +0900 Subject: [PATCH] network/address: make Address= in [Network] support an empty string Closes #30485. --- man/systemd.network.xml | 3 +++ src/network/networkd-address.c | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 7dc447d0a7f..b587573a5f6 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -662,6 +662,9 @@ Table=1234 number of dynamically created network interfaces with the same network configuration and automatic address range assignment. + If an empty string is specified, then the all previous assignments in both [Network] and + [Address] sections are cleared. + diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index e3bdc66c587..ad49793a168 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -1994,10 +1994,16 @@ int config_parse_address( assert(rvalue); assert(data); - if (streq(section, "Network")) + if (streq(section, "Network")) { + if (isempty(rvalue)) { + /* If an empty string specified in [Network] section, clear previously assigned addresses. */ + network->addresses_by_section = ordered_hashmap_free_with_destructor(network->addresses_by_section, address_free); + return 0; + } + /* we are not in an Address section, so use line number instead. */ r = address_new_static(network, filename, line, &n); - else + } else r = address_new_static(network, filename, section_line, &n); if (r == -ENOMEM) return log_oom();