Check lease for unexpired addresses prior to confirming it (#585418)
This commit is contained in:
parent
2560aa7e3c
commit
290660e57a
52
dhcp-4.2.0-honor-expired.patch
Normal file
52
dhcp-4.2.0-honor-expired.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
diff -up dhcp-4.2.0/client/dhc6.c.honor-expired dhcp-4.2.0/client/dhc6.c
|
||||||
|
--- dhcp-4.2.0/client/dhc6.c.honor-expired 2010-10-07 12:55:37.000000000 +0200
|
||||||
|
+++ dhcp-4.2.0/client/dhc6.c 2010-10-07 12:56:43.000000000 +0200
|
||||||
|
@@ -1405,6 +1405,35 @@ start_info_request6(struct client_state
|
||||||
|
go_daemon();
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Run through the addresses in lease and return true if there's any unexpired.
|
||||||
|
+ * Return false otherwise.
|
||||||
|
+ */
|
||||||
|
+isc_boolean_t
|
||||||
|
+unexpired_address_in_lease(struct dhc6_lease *lease)
|
||||||
|
+{
|
||||||
|
+ struct dhc6_ia *ia;
|
||||||
|
+ struct dhc6_addr *addr;
|
||||||
|
+
|
||||||
|
+ if (lease == NULL)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ for (ia = lease->bindings ; ia != NULL ; ia = ia->next) {
|
||||||
|
+ for (addr = ia->addrs ; addr != NULL ; addr = addr->next) {
|
||||||
|
+ if (addr->flags & DHC6_ADDR_EXPIRED)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ if (addr->starts + addr->max_life > cur_time) {
|
||||||
|
+ return ISC_TRUE;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ log_info("PRC: Previous lease is devoid of active addresses."
|
||||||
|
+ " Re-initializing.");
|
||||||
|
+
|
||||||
|
+ return ISC_FALSE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* start_confirm6() kicks off an "init-reboot" version of the process, at
|
||||||
|
* startup to find out if old bindings are 'fair' and at runtime whenever
|
||||||
|
@@ -1417,8 +1446,10 @@ start_confirm6(struct client_state *clie
|
||||||
|
|
||||||
|
/* If there is no active lease, there is nothing to check. */
|
||||||
|
if ((client->active_lease == NULL) ||
|
||||||
|
- !active_prefix(client) ||
|
||||||
|
- client->active_lease->released) {
|
||||||
|
+ !active_prefix(client) ||
|
||||||
|
+ client->active_lease->released ||
|
||||||
|
+ !unexpired_address_in_lease(client->active_lease)) {
|
||||||
|
+ dhc6_lease_destroy(&client->active_lease, MDL);
|
||||||
|
start_init6(client);
|
||||||
|
return;
|
||||||
|
}
|
11
dhcp.spec
11
dhcp.spec
@ -7,7 +7,7 @@
|
|||||||
Summary: Dynamic host configuration protocol software
|
Summary: Dynamic host configuration protocol software
|
||||||
Name: dhcp
|
Name: dhcp
|
||||||
Version: 4.2.0
|
Version: 4.2.0
|
||||||
Release: 9%{?dist}
|
Release: 10%{?dist}
|
||||||
# NEVER CHANGE THE EPOCH on this package. The previous maintainer (prior to
|
# NEVER CHANGE THE EPOCH on this package. The previous maintainer (prior to
|
||||||
# dcantrell maintaining the package) made incorrect use of the epoch and
|
# dcantrell maintaining the package) made incorrect use of the epoch and
|
||||||
# that's why it is at 12 now. It should have never been used, but it was.
|
# that's why it is at 12 now. It should have never been used, but it was.
|
||||||
@ -55,6 +55,7 @@ Patch26: dhcp-4.2.0-initialization-delay.patch
|
|||||||
Patch27: dhcp-4.2.0-parse_date.patch
|
Patch27: dhcp-4.2.0-parse_date.patch
|
||||||
Patch28: dhcp-4.2.0-rfc3442-classless-static-routes.patch
|
Patch28: dhcp-4.2.0-rfc3442-classless-static-routes.patch
|
||||||
Patch29: dhcp-4.2.0-PIE-RELRO.patch
|
Patch29: dhcp-4.2.0-PIE-RELRO.patch
|
||||||
|
Patch30: dhcp-4.2.0-honor-expired.patch
|
||||||
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
@ -234,6 +235,10 @@ libdhcpctl and libomapi static libraries are also included in this package.
|
|||||||
# hardening dhcpd/dhcrelay/dhclient by making them PIE & RELRO
|
# hardening dhcpd/dhcrelay/dhclient by making them PIE & RELRO
|
||||||
%patch29 -p1 -b .PIE-RELRO
|
%patch29 -p1 -b .PIE-RELRO
|
||||||
|
|
||||||
|
# check whether there is any unexpired address in previous lease
|
||||||
|
# prior to confirming (INIT-REBOOT) the lease (#585418)
|
||||||
|
%patch30 -p1 -b .honor-expired
|
||||||
|
|
||||||
# Copy in the Fedora/RHEL dhclient script
|
# Copy in the Fedora/RHEL dhclient script
|
||||||
%{__install} -p -m 0755 %{SOURCE4} client/scripts/linux
|
%{__install} -p -m 0755 %{SOURCE4} client/scripts/linux
|
||||||
%{__install} -p -m 0644 %{SOURCE5} .
|
%{__install} -p -m 0644 %{SOURCE5} .
|
||||||
@ -515,6 +520,10 @@ fi
|
|||||||
%attr(0644,root,root) %{_mandir}/man3/omapi.3.gz
|
%attr(0644,root,root) %{_mandir}/man3/omapi.3.gz
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Oct 07 2010 Jiri Popelka <jpopelka@redhat.com> - 12:4.2.0-10
|
||||||
|
- Check whether there is any unexpired address in previous lease
|
||||||
|
prior to confirming (INIT-REBOOT) the lease (#585418)
|
||||||
|
|
||||||
* Mon Oct 04 2010 Jiri Popelka <jpopelka@redhat.com> - 12:4.2.0-9
|
* Mon Oct 04 2010 Jiri Popelka <jpopelka@redhat.com> - 12:4.2.0-9
|
||||||
- RFC 3442 - ignore Router option only if
|
- RFC 3442 - ignore Router option only if
|
||||||
Classless Static Routes option contains default router
|
Classless Static Routes option contains default router
|
||||||
|
Loading…
Reference in New Issue
Block a user