network: fix verification for broadcast address

Fixes a bug caused by fe841414ef.
This commit is contained in:
Yu Watanabe 2020-12-02 19:26:41 +09:00
parent df8aa08642
commit 05a7023d24
1 changed files with 6 additions and 4 deletions

View File

@ -1809,10 +1809,12 @@ static int address_section_verify(Address *address) {
address->section->filename, address->section->line);
}
if (address->family == AF_INET && in_addr_is_null(address->family, &address->in_addr_peer) &&
address->broadcast.s_addr == 0 && address->prefixlen <= 30)
address->broadcast.s_addr = address->in_addr.in.s_addr | htobe32(0xfffffffflu >> address->prefixlen);
else if (address->broadcast.s_addr != 0) {
if (address->family == AF_INET &&
in_addr_is_null(address->family, &address->in_addr_peer) &&
address->prefixlen <= 30) {
if (address->broadcast.s_addr == 0)
address->broadcast.s_addr = address->in_addr.in.s_addr | htobe32(0xfffffffflu >> address->prefixlen);
} else if (address->broadcast.s_addr != 0) {
log_warning("%s: broadcast address is set for IPv6 address or IPv4 address with prefixlength larger than 30. "
"Ignoring Broadcast= setting in the [Address] section from line %u.",
address->section->filename, address->section->line);