summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authortmarkwalder <tmark@isc.org>2017-05-03 09:28:12 -0400
committertmarkwalder <tmark@isc.org>2017-05-03 09:28:12 -0400
commit1d7fceeb40c13e085da05722ca7a275e35a16b5a (patch)
tree9b9f531a20e14082e46f1df26b16278070edc388 /client
parent2f5fefd3a806d9f4387200b0e0bf6dd9a6b9f85b (diff)
downloadisc-dhcp-1d7fceeb40c13e085da05722ca7a275e35a16b5a.tar.gz
[master] dhclient now enforces require options statement in -6 mode
Merges in rt41473.
Diffstat (limited to 'client')
-rw-r--r--client/dhc6.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/client/dhc6.c b/client/dhc6.c
index be604ac9..f7cc90fe 100644
--- a/client/dhc6.c
+++ b/client/dhc6.c
@@ -141,6 +141,8 @@ static isc_result_t dhc6_check_status(isc_result_t rval,
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;
@@ -3133,6 +3135,15 @@ init_handler(struct packet *packet, struct client_state *client)
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
@@ -3146,8 +3157,7 @@ init_handler(struct packet *packet, struct client_state *client)
* 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);