diff --git a/CHANGELOG b/CHANGELOG index 0378682..8977dc7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -61,6 +61,11 @@ version 2.92 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 Fix spurious "resource limit exceeded messages". Thanks to diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 5cdfdcd..8b29556 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -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 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 -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). .TP .B --dhcp-rapid-commit diff --git a/src/rfc3315.c b/src/rfc3315.c index 4e7a012..a502bb3 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -982,8 +982,10 @@ static int dhcp6_no_relay(struct state *state, int msg_type, unsigned char *inbu { if (msg_type == DHCP6REBIND) { - /* When rebinding, we can create a lease if it doesn't exist. */ - lease = lease6_allocate(&req_addr, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA); + /* When rebinding, we can create a lease if it doesn't exist, as long + 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) lease_set_iaid(lease, state->iaid); else