2013-12-20 15:13:52 +00:00
|
|
|
diff -up dhcp-4.3.0a1/client/dhclient.c.next-server dhcp-4.3.0a1/client/dhclient.c
|
|
|
|
--- dhcp-4.3.0a1/client/dhclient.c.next-server 2013-12-20 13:57:06.458349572 +0100
|
|
|
|
+++ dhcp-4.3.0a1/client/dhclient.c 2013-12-20 13:57:06.500348986 +0100
|
|
|
|
@@ -1486,7 +1486,7 @@ void state_selecting (cpp)
|
2013-04-03 15:59:42 +00:00
|
|
|
client -> state = S_REQUESTING;
|
|
|
|
|
|
|
|
/* Bind to the address we received. */
|
|
|
|
- bind_lease (client);
|
|
|
|
+ bind_lease (client, NULL);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-12-20 15:13:52 +00:00
|
|
|
@@ -1676,11 +1676,12 @@ void dhcpack (packet)
|
2013-04-03 15:59:42 +00:00
|
|
|
if (client -> new -> rebind < cur_time)
|
|
|
|
client -> new -> rebind = TIME_MAX;
|
|
|
|
|
|
|
|
- bind_lease (client);
|
|
|
|
+ bind_lease (client, &packet -> raw -> siaddr);
|
|
|
|
}
|
|
|
|
|
|
|
|
-void bind_lease (client)
|
|
|
|
+void bind_lease (client, siaddr)
|
|
|
|
struct client_state *client;
|
|
|
|
+ struct in_addr *siaddr;
|
|
|
|
{
|
|
|
|
struct timeval tv;
|
|
|
|
|
2013-12-20 15:13:52 +00:00
|
|
|
@@ -1702,6 +1703,13 @@ void bind_lease (client)
|
2013-04-03 15:59:42 +00:00
|
|
|
if (client -> alias)
|
|
|
|
script_write_params (client, "alias_", client -> alias);
|
|
|
|
|
|
|
|
+ if (siaddr) {
|
|
|
|
+ char buf[INET_ADDRSTRLEN];
|
|
|
|
+
|
|
|
|
+ if (inet_ntop (AF_INET, (void *) siaddr, buf, sizeof (buf)))
|
|
|
|
+ client_envadd (client, "new_", "next_server", "%s", buf);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
/* If the BOUND/RENEW code detects another machine using the
|
|
|
|
offered address, it exits nonzero. We need to send a
|
|
|
|
DHCPDECLINE and toss the lease. */
|
2013-12-20 15:13:52 +00:00
|
|
|
diff -up dhcp-4.3.0a1/includes/dhcpd.h.next-server dhcp-4.3.0a1/includes/dhcpd.h
|
|
|
|
--- dhcp-4.3.0a1/includes/dhcpd.h.next-server 2013-12-20 13:57:06.434349907 +0100
|
|
|
|
+++ dhcp-4.3.0a1/includes/dhcpd.h 2013-12-20 13:57:06.502348958 +0100
|
|
|
|
@@ -2771,7 +2771,7 @@ void state_bound (void *);
|
2013-04-03 15:59:42 +00:00
|
|
|
void state_stop (void *);
|
|
|
|
void state_panic (void *);
|
|
|
|
|
|
|
|
-void bind_lease (struct client_state *);
|
|
|
|
+void bind_lease (struct client_state *, struct in_addr *);
|
|
|
|
|
|
|
|
void make_client_options (struct client_state *,
|
|
|
|
struct client_lease *, u_int8_t *,
|