Date: Sunday, April 24, 2016 @ 15:36:32 Author: heftig Revision: 266110
4.3.4-2 Added: dhcp/trunk/dhcp-honor-expired.patch Modified: dhcp/trunk/PKGBUILD --------------------------+ PKGBUILD | 15 ++++++++++--- dhcp-honor-expired.patch | 49 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 4 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-04-24 11:39:25 UTC (rev 266109) +++ PKGBUILD 2016-04-24 13:36:32 UTC (rev 266110) @@ -8,7 +8,7 @@ # separate patch levels with a period to maintain proper versioning. pkgver=4.3.4 _pkgver=4.3.4 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') license=('custom:isc-dhcp') url="https://www.isc.org/software/dhcp" @@ -19,7 +19,8 @@ dhclient@.service dhcp-4.3.1-client_script-1.patch dhcp-4.3.1-missing_ipv6-1.patch - arch_patch_over_lfs.patch) + arch_patch_over_lfs.patch + dhcp-honor-expired.patch) md5sums=('0138319fe2b788cf4bdf34fbeaf9ff54' 'SKIP' '33cceed7056fdceda845eef26934f30f' @@ -27,7 +28,8 @@ '06aa2ae46f05fdc784275e6ae54a8f7f' 'c02bddb6c6c33c5885e3dd072ee2ee40' 'da655f02f1cf4d95b4708e84e69edbc8' - 'ea45057374098b8ff7e140ecedf7696a') + 'ea45057374098b8ff7e140ecedf7696a' + '10a2332307ad8ccc8993a18ffd7165cb') validpgpkeys=('ADBE9446286C794905F1E0756FA6EBC9911A4C02') # Internet Systems Consortium, Inc. <codes...@isc.org> prepare() { @@ -44,6 +46,10 @@ # Apply Arch-specific patches over LSF changes patch -Np1 -i ../arch_patch_over_lfs.patch + + # Sourced from Fedora - required for NM + # https://bugzilla.gnome.org/show_bug.cgi?id=748268 + patch -Np1 -i ../dhcp-honor-expired.patch } build() { @@ -52,7 +58,8 @@ --with-srv-lease-file=/var/lib/dhcp/dhcpd.leases \ --with-srv6-lease-file=/var/lib/dhcp/dhcpd6.leases \ --with-cli-lease-file=/var/lib/dhclient/dhclient.leases \ - --with-cli6-lease-file=/var/lib/dhclient/dhclient6.leases + --with-cli6-lease-file=/var/lib/dhclient/dhclient6.leases \ + --enable-binary-leases make -j1 } Added: dhcp-honor-expired.patch =================================================================== --- dhcp-honor-expired.patch (rev 0) +++ dhcp-honor-expired.patch 2016-04-24 13:36:32 UTC (rev 266110) @@ -0,0 +1,49 @@ +diff -up dhcp-4.3.0a1/client/dhc6.c.honor-expired dhcp-4.3.0a1/client/dhc6.c +--- dhcp-4.3.0a1/client/dhc6.c.honor-expired 2013-12-19 16:00:28.062183037 +0100 ++++ dhcp-4.3.0a1/client/dhc6.c 2013-12-19 16:00:28.076182842 +0100 +@@ -1351,6 +1351,32 @@ 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; ++ ++ 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 +@@ -1363,8 +1389,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; + }