diff --git a/server/dhcp/actions.py b/server/dhcp/actions.py index 9ef28f7b1a..76b4de1abc 100644 --- a/server/dhcp/actions.py +++ b/server/dhcp/actions.py @@ -41,7 +41,7 @@ def setup(): --with-ldapcrypto") def build(): - autotools.make() + autotools.make("-j1") def install(): autotools.rawInstall("DESTDIR=%s" % get.installDIR()) diff --git a/server/dhcp/files/0001-dhcp-honor-expired.patch b/server/dhcp/files/0001-dhcp-honor-expired.patch new file mode 100644 index 0000000000..bd892975be --- /dev/null +++ b/server/dhcp/files/0001-dhcp-honor-expired.patch @@ -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; + } diff --git a/server/dhcp/pspec.xml b/server/dhcp/pspec.xml index 1903a45329..30e766e404 100644 --- a/server/dhcp/pspec.xml +++ b/server/dhcp/pspec.xml @@ -14,44 +14,14 @@ service Dynamic host configuration protocol software DHCP (Dynamic Host Configuration Protocol) is a protocol which allows individual devices on an IP network to get their own network configuration information (IP address, subnetmask, broadcast address, etc.) from a DHCP server. - http://ftp.isc.org/isc/dhcp/4.3.0/dhcp-4.3.0.tar.gz + http://ftp.isc.org/isc/dhcp/4.3.6/dhcp-4.3.6.tar.gz groff openldap-client - bind-devel + - - - - dhcp-4.2.0-release-by-ifup.patch - dhcp-4.2.0-dhclient-decline-backoff.patch - dhcp-4.2.0-unicast-bootp.patch - - dhcp-4.2.0-default-requested-options.patch - - dhcp-4.2.0-paths.patch - - dhcp-4.2.0-inherit-leases.patch - dhcp-4.2.0-garbage-chars.patch - - dhcp-4.2.0-IFNAMSIZ.patch - dhcp-4.2.0-add_timeout_when_NULL.patch - - dhcp-4.2.0-logpid.patch - dhcp-4.2.0-sendDecline.patch - dhcp-4.2.1-retransmission.patch - - dhcp-4.2.0-honor-expired.patch - - - dhcp-4.3.0a1-PPP.patch - dhcp-4.2.0-P2-omapi.patch - + 0001-dhcp-honor-expired.patch @@ -59,7 +29,7 @@ dhcp openldap-client - bind-libs + /etc @@ -89,10 +59,11 @@ dhclient app:console + network.connection Provides the dhclient ISC DHCP client daemon - dhcp - bind-libs + + @@ -126,6 +97,13 @@ + + 2017-10-25 + 4.3.6 + Version bump,fix #2943 + Ertuğrul Erata + ertugrulerata@gmail.com + 2017-05-09 4.3.0 @@ -148,4 +126,4 @@ vedat@pisilinux.org - \ No newline at end of file +