BlueCat Networks for bringing the matter to our attention.
[ISC-Bugs #43592]
+- When running in -6 mode, dhclient now enforces the require option statement
+ and will discard offered leases that do not contain all the required
+ options specified in the client configuration. Prior to this the client
+ would still consider such leases. This may be disabled at compile time
+ (see ENFORCE_DHCPV6_CLIENT_REQUIRE in includes/site.h).
+ [ISC-Bugs #41473]
+
Changes since 4.3.0 (bug fixes)
- Tidy up several small tickets.
struct option_state *options,
const char *scope,
unsigned *code);
+static int dhc6_score_lease(struct client_state *client,
+ struct dhc6_lease *lease);
extern int onetry;
extern int stateless;
return;
}
+ int lease_score = dhc6_score_lease(client, lease);
+#ifdef ENFORCE_DHCPV6_CLIENT_REQUIRE
+ if (lease_score == 0) {
+ log_debug("RCV:Advertised lease scored 0, toss it.");
+ dhc6_lease_destroy(&lease, MDL);
+ return;
+ }
+#endif
+
insert_lease(&client->advertised_leases, lease);
/* According to RFC3315 section 17.1.2, the client MUST wait for
* should not if the advertise contains less than one IA and address.
*/
if ((client->txcount > 1) ||
- ((lease->pref == 255) &&
- (dhc6_score_lease(client, lease) > SCORE_MIN))) {
+ ((lease->pref == 255) && (lease_score > SCORE_MIN))) {
log_debug("RCV: Advertisement immediately selected.");
cancel_timeout(do_init6, client);
start_selecting6(client);
* supported by the configure script. */
/* #define EUI_64 */
+/* Enable enforcement of the require option statement as documented
+ * in man page. Instructs the dhclient, when in -6 mode, to discard
+ * offered leases that do not contain all options specified as required
+ * in the client's configuration file. The client already enforces this
+ * in -4 mode. */
+#define ENFORCE_DHCPV6_CLIENT_REQUIRE
+
/* Include definitions for various options. In general these
should be left as is, but if you have already defined one
of these and prefer your definition you can comment the