Allow --dhcp-authoritative to control recreation of missing leases in DHCPv6.

Change the behaviour of the DHVPv6 server when a REBIND message
is received but no lease exists. Under these circumstances a new
lease is created _only_ when the --dhcp-authoritative option is
set. This matches the behavior of the DHCPv4 server.
This commit is contained in:
Simon Kelley
2025-07-22 21:51:47 +01:00
parent 3ceea9e755
commit 3034746748
3 changed files with 12 additions and 3 deletions

View File

@@ -61,6 +61,11 @@ version 2.92
Add TFTP options windowsize (RFC 7440) and timeout (RFC 2349). Add TFTP options windowsize (RFC 7440) and timeout (RFC 2349).
Change the behaviour of the DHVPv6 server when a REBIND message
is received but no lease exists. Under these circumstances a new
lease is created _only_ when the --dhcp-authoritative option is
set. This matches the behavior of the DHCPv4 server.
version 2.91 version 2.91
Fix spurious "resource limit exceeded messages". Thanks to Fix spurious "resource limit exceeded messages". Thanks to

View File

@@ -1739,7 +1739,9 @@ For DHCPv4, it changes the behaviour from strict RFC compliance so that DHCP req
unknown leases from unknown hosts are not ignored. This allows new hosts unknown leases from unknown hosts are not ignored. This allows new hosts
to get a lease without a tedious timeout under all circumstances. It also to get a lease without a tedious timeout under all circumstances. It also
allows dnsmasq to rebuild its lease database without each client needing to allows dnsmasq to rebuild its lease database without each client needing to
reacquire a lease, if the database is lost. For DHCPv6 it sets the reacquire a lease, if the database is lost. For DHCPv6 it controls the same
behaviour as DHCPv4 with missing leases (except for the RFC uncompliance - the
DHCPv6 RFCs allow this behaviour if configured). It also sets the
priority in replies to 255 (the maximum) instead of 0 (the minimum). priority in replies to 255 (the maximum) instead of 0 (the minimum).
.TP .TP
.B --dhcp-rapid-commit .B --dhcp-rapid-commit

View File

@@ -982,8 +982,10 @@ static int dhcp6_no_relay(struct state *state, int msg_type, unsigned char *inbu
{ {
if (msg_type == DHCP6REBIND) if (msg_type == DHCP6REBIND)
{ {
/* When rebinding, we can create a lease if it doesn't exist. */ /* When rebinding, we can create a lease if it doesn't exist, as long
lease = lease6_allocate(&req_addr, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA); as --dhcp-authoritative is set. */
if (option_bool(OPT_AUTHORITATIVE))
lease = lease6_allocate(&req_addr, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA);
if (lease) if (lease)
lease_set_iaid(lease, state->iaid); lease_set_iaid(lease, state->iaid);
else else