summaryrefslogtreecommitdiff
path: root/src/network/networkd-dhcp-server.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-02-01 16:39:43 +0900
committerLuca Boccassi <luca.boccassi@gmail.com>2022-02-01 11:18:53 +0000
commitbab29f2ab791f1d0b82c883a0f1bfa16112088f3 (patch)
tree3dc19cc98f4a8d192e12025091e499d3e1d602fe /src/network/networkd-dhcp-server.c
parentb0f83c2d82df97c67c3eecc1b18c2eded2d0cdf9 (diff)
downloadsystemd-bab29f2ab791f1d0b82c883a0f1bfa16112088f3.tar.gz
network: dhcp-server: also refuse link local address to use as the server address
Diffstat (limited to 'src/network/networkd-dhcp-server.c')
-rw-r--r--src/network/networkd-dhcp-server.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
index 9acfd17d49..1c1ca1684c 100644
--- a/src/network/networkd-dhcp-server.c
+++ b/src/network/networkd-dhcp-server.c
@@ -58,12 +58,21 @@ void network_adjust_dhcp_server(Network *network) {
ORDERED_HASHMAP_FOREACH(address, network->addresses_by_section) {
if (section_is_invalid(address->section))
continue;
- if (address->family == AF_INET &&
- !in4_addr_is_localhost(&address->in_addr.in) &&
- in4_addr_is_null(&address->in_addr_peer.in)) {
- have = true;
- break;
- }
+
+ if (address->family != AF_INET)
+ continue;
+
+ if (in4_addr_is_localhost(&address->in_addr.in))
+ continue;
+
+ if (in4_addr_is_link_local(&address->in_addr.in))
+ continue;
+
+ if (in4_addr_is_set(&address->in_addr_peer.in))
+ continue;
+
+ have = true;
+ break;
}
if (!have) {
log_warning("%s: DHCPServer= is enabled, but no static address configured. "
@@ -130,6 +139,8 @@ static int link_find_dhcp_server_address(Link *link, Address **ret) {
continue;
if (in4_addr_is_localhost(&address->in_addr.in))
continue;
+ if (in4_addr_is_link_local(&address->in_addr.in))
+ continue;
if (in4_addr_is_set(&address->in_addr_peer.in))
continue;