-/* $OpenBSD: src/sbin/dhclient/dhclient.c,v 1.141 2011/05/11 14:38:36 krw Exp $ */
+/* $OpenBSD: src/sbin/dhclient/dhclient.c,v 1.142 2011/12/10 15:55:43 krw Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
void
bind_lease(void)
{
- /* Write out the new lease. */
- write_client_lease(client->new, 0);
-
/* Run the client script with the new parameters. */
script_init((client->state == S_REQUESTING ? "BOUND" :
(client->state == S_RENEWING ? "RENEW" :
client->active = client->new;
client->new = NULL;
+ /* Write out new leases file. */
+ rewrite_client_leases();
+
/* Set up a timeout to start the renewal process. */
add_timeout(client->active->renewal, state_bound);
fflush(leaseFile);
rewind(leaseFile);
- for (lp = client->leases; lp; lp = lp->next)
- write_client_lease(lp, 1);
+ for (lp = client->leases; lp; lp = lp->next) {
+ if (client->active && addr_eq(lp->address,
+ client->active->address))
+ continue;
+ write_client_lease(lp);
+ }
+
if (client->active)
- write_client_lease(client->active, 1);
+ write_client_lease(client->active);
fflush(leaseFile);
ftruncate(fileno(leaseFile), ftello(leaseFile));
}
void
-write_client_lease(struct client_lease *lease, int rewrite)
+write_client_lease(struct client_lease *lease)
{
- static int leases_written;
struct tm *t;
int i;
- if (!rewrite) {
- if (leases_written++ > 20) {
- rewrite_client_leases();
- leases_written = 0;
- }
- }
-
/* If the lease came from the config file, we don't need to stash
a copy in the lease database. */
if (lease->is_static)
-/* $OpenBSD: src/sbin/dhclient/dhcpd.h,v 1.73 2011/05/11 14:38:36 krw Exp $ */
+/* $OpenBSD: src/sbin/dhclient/dhcpd.h,v 1.74 2011/12/10 15:55:43 krw Exp $ */
/*
* Copyright (c) 2004 Henning Brauer <henning@openbsd.org>
void free_client_lease(struct client_lease *);
void rewrite_client_leases(void);
-void write_client_lease(struct client_lease *, int);
+void write_client_lease(struct client_lease *);
void priv_script_init(char *);
void priv_script_write_params(char *, struct client_lease *);