Attempt to fix a bug which throws away valid static leases
when parsing dhclient.leases. PR bin/9405.
This commit is contained in:
parent
3600060b1e
commit
bc6c928df7
14
dist/dhcp/client/clparse.c
vendored
14
dist/dhcp/client/clparse.c
vendored
@ -43,7 +43,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
"$Id: clparse.c,v 1.4 2002/06/11 14:00:00 drochner Exp $ Copyright (c) 1996-2001 The Internet Software Consortium. All rights reserved.\n";
|
||||
"$Id: clparse.c,v 1.5 2003/10/24 05:19:31 mellon Exp $ Copyright (c) 1996-2001 The Internet Software Consortium. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -834,7 +834,7 @@ void parse_client_lease_statement (cfile, is_static)
|
||||
struct parse *cfile;
|
||||
int is_static;
|
||||
{
|
||||
struct client_lease *lease, *lp, *pl;
|
||||
struct client_lease *lease, *lp, *pl, *next;
|
||||
struct interface_info *ip = (struct interface_info *)0;
|
||||
int token;
|
||||
const char *val;
|
||||
@ -894,17 +894,19 @@ void parse_client_lease_statement (cfile, is_static)
|
||||
lease list looking for a lease with the same address, and
|
||||
if we find it, toss it. */
|
||||
pl = (struct client_lease *)0;
|
||||
for (lp = client -> leases; lp; lp = lp -> next) {
|
||||
for (lp = client -> leases; lp; lp = next) {
|
||||
next = lp -> next;
|
||||
if (lp -> address.len == lease -> address.len &&
|
||||
!memcmp (lp -> address.iabuf, lease -> address.iabuf,
|
||||
lease -> address.len)) {
|
||||
if (pl)
|
||||
pl -> next = lp -> next;
|
||||
pl -> next = next;
|
||||
else
|
||||
client -> leases = lp -> next;
|
||||
client -> leases = next;
|
||||
destroy_client_lease (lp);
|
||||
break;
|
||||
}
|
||||
} else
|
||||
pl = lp;
|
||||
}
|
||||
|
||||
/* If this is a preloaded lease, just put it on the list of recorded
|
||||
|
Loading…
Reference in New Issue
Block a user