From: Yu Watanabe Date: Tue, 1 Feb 2022 07:09:17 +0000 (+0900) Subject: sd-dhcp-server: convert null address for e.g. DNS to server address X-Git-Tag: v251-rc1~385^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0fdc91e44187e14ebe2312c7c8167fdf6d8d0a6;p=thirdparty%2Fsystemd.git sd-dhcp-server: convert null address for e.g. DNS to server address --- diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c index 5774bc880eb..80638992328 100644 --- a/src/libsystemd-network/sd-dhcp-server.c +++ b/src/libsystemd-network/sd-dhcp-server.c @@ -1276,6 +1276,18 @@ static int server_receive_message(sd_event_source *s, int fd, return 0; } +static void dhcp_server_update_lease_servers(sd_dhcp_server *server) { + assert(server); + assert(server->address != 0); + + /* Convert null address -> server address */ + + for (sd_dhcp_lease_server_type_t k = 0; k < _SD_DHCP_LEASE_SERVER_TYPE_MAX; k++) + for (size_t i = 0; i < server->servers[k].size; i++) + if (in4_addr_is_null(&server->servers[k].addr[i])) + server->servers[k].addr[i].s_addr = server->address; +} + int sd_dhcp_server_start(sd_dhcp_server *server) { int r; @@ -1290,6 +1302,8 @@ int sd_dhcp_server_start(sd_dhcp_server *server) { assert_return(server->fd < 0, -EBUSY); assert_return(server->address != htobe32(INADDR_ANY), -EUNATCH); + dhcp_server_update_lease_servers(server); + r = socket(AF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0); if (r < 0) { r = -errno; @@ -1419,6 +1433,7 @@ int sd_dhcp_server_set_servers( struct in_addr *c = NULL; assert_return(server, -EINVAL); + assert_return(!sd_dhcp_server_is_running(server), -EBUSY); assert_return(addresses || n_addresses == 0, -EINVAL); assert_return(what >= 0, -EINVAL); assert_return(what < _SD_DHCP_LEASE_SERVER_TYPE_MAX, -EINVAL);