public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/hardened-dev:musl commit in: net-misc/dhcp/files/, net-misc/dhcp/
@ 2015-05-22 11:30 Anthony G. Basile
  0 siblings, 0 replies; only message in thread
From: Anthony G. Basile @ 2015-05-22 11:30 UTC (permalink / raw
  To: gentoo-commits

commit:     217a36b6a1e15413bee0f5a7a816a5e38223d824
Author:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Fri May 22 11:31:02 2015 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Fri May 22 11:31:02 2015 +0000
URL:        https://gitweb.gentoo.org/proj/hardened-dev.git/commit/?id=217a36b6

net-misc/dhcp: bug #549976.

Package-Manager: portage-2.2.18
RepoMan-Options: --force
Manifest-Sign-Key: 0xF52D4BBA

 net-misc/dhcp/dhcp-4.3.1-r99.ebuild                | 256 +++++++++++++
 net-misc/dhcp/dhcp-4.3.2-r99.ebuild                | 256 +++++++++++++
 net-misc/dhcp/files/dhcp-3.0-fix-perms.patch       |  15 +
 net-misc/dhcp/files/dhcp-3.0-paranoia.patch        | 207 +++++++++++
 .../dhcp/files/dhcp-3.0.3-dhclient-no-down.patch   |  70 ++++
 .../dhcp/files/dhcp-3.1.3-dhclient-no-down.patch   |  77 ++++
 net-misc/dhcp/files/dhcp-4.0-dhclient-ntp.patch    | 216 +++++++++++
 .../dhcp/files/dhcp-4.2.0-errwarn-message.patch    |  31 ++
 .../dhcp/files/dhcp-4.2.2-bind-build-flags.patch   |  14 +
 net-misc/dhcp/files/dhcp-4.2.2-bind-disable.patch  |  13 +
 .../files/dhcp-4.2.2-bind-parallel-build.patch     |  14 +
 .../files/dhcp-4.2.2-dhclient-resolvconf.patch     | 409 ++++++++++++++++++++
 .../files/dhcp-4.2.2-dhclient-stdin-conf.patch     | 113 ++++++
 net-misc/dhcp/files/dhcp-4.2.2-nogateway.patch     |  46 +++
 .../dhcp/files/dhcp-4.2.4-always-accept-4.patch    |  29 ++
 net-misc/dhcp/files/dhcp-4.2.4-quieter-ping.patch  |  72 ++++
 .../dhcp/files/dhcp-4.2.5-bindtodevice-inet6.patch |  19 +
 net-misc/dhcp/files/dhcp-4.2.5-iproute2-path.patch |  15 +
 .../files/dhcp-4.3.1-dhclient-resolvconf.patch     | 411 +++++++++++++++++++++
 .../dhcp-4.3.2-fix-compilation-for-musl.patch      |  44 +++
 net-misc/dhcp/files/dhcpd.conf2                    |  28 ++
 net-misc/dhcp/files/dhcpd.init5                    | 115 ++++++
 net-misc/dhcp/files/dhcpd.tmpfiles                 |   2 +
 net-misc/dhcp/files/dhcpd4.service                 |  11 +
 net-misc/dhcp/files/dhcpd6.service                 |  11 +
 net-misc/dhcp/files/dhcrelay.conf                  |  16 +
 net-misc/dhcp/files/dhcrelay.init3                 |  34 ++
 net-misc/dhcp/files/dhcrelay4.service              |  10 +
 net-misc/dhcp/files/dhcrelay4.service.conf         |   3 +
 net-misc/dhcp/files/dhcrelay6.conf                 |   8 +
 net-misc/dhcp/files/dhcrelay6.service              |  10 +
 net-misc/dhcp/files/dhcrelay6.service.conf         |   6 +
 net-misc/dhcp/metadata.xml                         |  14 +
 33 files changed, 2595 insertions(+)

diff --git a/net-misc/dhcp/dhcp-4.3.1-r99.ebuild b/net-misc/dhcp/dhcp-4.3.1-r99.ebuild
new file mode 100644
index 0000000..9b3aae0
--- /dev/null
+++ b/net-misc/dhcp/dhcp-4.3.1-r99.ebuild
@@ -0,0 +1,256 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/dhcp-4.3.1-r2.ebuild,v 1.10 2015/04/14 10:59:58 ago Exp $
+
+EAPI="4"
+
+inherit eutils systemd toolchain-funcs user
+
+MY_PV="${PV//_alpha/a}"
+MY_PV="${MY_PV//_beta/b}"
+MY_PV="${MY_PV//_rc/rc}"
+MY_PV="${MY_PV//_p/-P}"
+MY_P="${PN}-${MY_PV}"
+DESCRIPTION="ISC Dynamic Host Configuration Protocol (DHCP) client/server"
+HOMEPAGE="http://www.isc.org/products/DHCP"
+SRC_URI="ftp://ftp.isc.org/isc/dhcp/${MY_P}.tar.gz
+	ftp://ftp.isc.org/isc/dhcp/${MY_PV}/${MY_P}.tar.gz"
+
+LICENSE="ISC BSD SSLeay GPL-2" # GPL-2 only for init script
+SLOT="0"
+KEYWORDS="amd64 arm ~mips ppc x86"
+IUSE="+client ipv6 kernel_linux ldap selinux +server ssl vim-syntax"
+
+DEPEND="
+	client? (
+		kernel_linux? (
+			ipv6? ( sys-apps/iproute2 )
+			sys-apps/net-tools
+		)
+	)
+	ldap? (
+		net-nds/openldap
+		ssl? ( dev-libs/openssl )
+	)"
+RDEPEND="${DEPEND}
+	selinux? ( sec-policy/selinux-dhcp )
+	vim-syntax? ( app-vim/dhcpd-syntax )"
+
+S="${WORKDIR}/${MY_P}"
+
+src_unpack() {
+	unpack ${A}
+	# handle local bind hell
+	cd "${S}"/bind
+	unpack ./bind.tar.gz
+}
+
+src_prepare() {
+	# Gentoo patches - these will probably never be accepted upstream
+	# Fix for musl
+	epatch "${FILESDIR}"/${PN}-4.3.2-fix-compilation-for-musl.patch
+	# Fix some permission issues
+	epatch "${FILESDIR}"/${PN}-3.0-fix-perms.patch
+	# Enable dhclient to equery NTP servers
+	epatch "${FILESDIR}"/${PN}-4.0-dhclient-ntp.patch
+	epatch "${FILESDIR}"/${PN}-4.3.1-dhclient-resolvconf.patch
+	# Stop downing the interface on Linux as that breaks link daemons
+	# such as wpa_supplicant and netplug
+	epatch "${FILESDIR}"/${PN}-3.0.3-dhclient-no-down.patch
+	# Enable dhclient to get extra configuration from stdin
+	epatch "${FILESDIR}"/${PN}-4.2.2-dhclient-stdin-conf.patch
+	epatch "${FILESDIR}"/${PN}-4.2.2-nogateway.patch #265531
+	epatch "${FILESDIR}"/${PN}-4.2.4-quieter-ping.patch #296921
+	epatch "${FILESDIR}"/${PN}-4.2.4-always-accept-4.patch #437108
+	epatch "${FILESDIR}"/${PN}-4.2.5-iproute2-path.patch #480636
+	epatch "${FILESDIR}"/${PN}-4.2.5-bindtodevice-inet6.patch #471142
+
+	# Brand the version with Gentoo
+	sed -i \
+		-e "/VERSION=/s:'$: Gentoo-${PR}':" \
+		configure || die
+
+	# Change the hook script locations of the scripts
+	sed -i \
+		-e 's,/etc/dhclient-exit-hooks,/etc/dhcp/dhclient-exit-hooks,g' \
+		-e 's,/etc/dhclient-enter-hooks,/etc/dhcp/dhclient-enter-hooks,g' \
+		client/scripts/* || die
+
+	# No need for the linux script to force bash #158540
+	sed -i -e 's,#!/bin/bash,#!/bin/sh,' client/scripts/linux || die
+
+	# Quiet the freebsd logger a little
+	sed -i -e '/LOGGER=/ s/-s -p user.notice //g' client/scripts/freebsd || die
+
+	# Remove these options from the sample config
+	sed -i -r \
+		-e "/(script|host-name|domain-name) /d" \
+		client/dhclient.conf.example || die
+
+	if use client && ! use server ; then
+		sed -i -r \
+			-e '/^SUBDIRS/s:\<(dhcpctl|relay|server)\>::g' \
+			Makefile.in || die
+	elif ! use client && use server ; then
+		sed -i -r \
+			-e '/^SUBDIRS/s:\<client\>::' \
+			Makefile.in || die
+	fi
+
+	# Only install different man pages if we don't have en
+	if [[ " ${LINGUAS} " != *" en "* ]]; then
+		# Install Japanese man pages
+		if [[ " ${LINGUAS} " == *" ja "* && -d doc/ja_JP.eucJP ]]; then
+			einfo "Installing Japanese documention"
+			cp doc/ja_JP.eucJP/dhclient* client
+			cp doc/ja_JP.eucJP/dhcp* common
+		fi
+	fi
+	# Now remove the non-english docs so there are no errors later
+	rm -rf doc/ja_JP.eucJP
+
+	# make the bind build work
+	binddir=${S}/bind
+	cd "${binddir}" || die
+	cat <<-EOF > bindvar.tmp
+	binddir=${binddir}
+	GMAKE=${MAKE:-gmake}
+	EOF
+	epatch "${FILESDIR}"/${PN}-4.2.2-bind-disable.patch
+	cd bind-*/
+	epatch "${FILESDIR}"/${PN}-4.2.2-bind-parallel-build.patch #380717
+	epatch "${FILESDIR}"/${PN}-4.2.2-bind-build-flags.patch
+}
+
+src_configure() {
+	# bind defaults to stupid `/usr/bin/ar`
+	tc-export AR BUILD_CC
+	export ac_cv_path_AR=${AR}
+
+	# this is tested for by the bind build system, and can cause trouble
+	# when cross-building; since dhcp itself doesn't make use of libcap,
+	# simply disable it.
+	export ac_cv_lib_cap_cap_set_proc=no
+
+	# Use FHS sane paths ... some of these have configure options,
+	# but not all, so just do it all here.
+	local e="/etc/dhcp" r="/var/run/dhcp" l="/var/lib/dhcp"
+	cat <<-EOF >> includes/site.h
+	#define _PATH_DHCPD_CONF     "${e}/dhcpd.conf"
+	#define _PATH_DHCLIENT_CONF  "${e}/dhclient.conf"
+	#define _PATH_DHCPD_DB       "${l}/dhcpd.leases"
+	#define _PATH_DHCPD6_DB      "${l}/dhcpd6.leases"
+	#define _PATH_DHCLIENT_DB    "${l}/dhclient.leases"
+	#define _PATH_DHCLIENT6_DB   "${l}/dhclient6.leases"
+	#define _PATH_DHCPD_PID      "${r}/dhcpd.pid"
+	#define _PATH_DHCPD6_PID     "${r}/dhcpd6.pid"
+	#define _PATH_DHCLIENT_PID   "${r}/dhcpclient.pid"
+	#define _PATH_DHCLIENT6_PID  "${r}/dhcpclient6.pid"
+	#define _PATH_DHCRELAY_PID   "${r}/dhcrelay.pid"
+	#define _PATH_DHCRELAY6_PID  "${r}/dhcrelay6.pid"
+	EOF
+
+	econf \
+		--enable-paranoia \
+		--enable-early-chroot \
+		--sysconfdir=${e} \
+		$(use_enable ipv6 dhcpv6) \
+		$(use_with ldap) \
+		$(use ldap && use_with ssl ldapcrypto || echo --without-ldapcrypto)
+
+	# configure local bind cruft.  symtable option requires
+	# perl and we don't want to require that #383837.
+	cd bind/bind-*/ || die
+	eval econf \
+		$(sed -n '/ [.].configure /{s:^[^-]*::;s:>.*::;p}' ../Makefile) \
+		--disable-symtable \
+		--without-make-clean
+}
+
+src_compile() {
+	# build local bind cruft first
+	emake -C bind/bind-*/lib/export install
+	# then build standard dhcp code
+	emake AR="$(tc-getAR)"
+}
+
+src_install() {
+	default
+
+	dodoc README RELNOTES doc/{api+protocol,IANA-arp-parameters}
+	dohtml doc/References.html
+
+	if [[ -e client/dhclient ]] ; then
+		# move the client to /
+		dodir /sbin
+		mv "${D}"/usr/sbin/dhclient "${D}"/sbin/ || die
+
+		exeinto /sbin
+		if use kernel_linux ; then
+			newexe "${S}"/client/scripts/linux dhclient-script
+		else
+			newexe "${S}"/client/scripts/freebsd dhclient-script
+		fi
+	fi
+
+	if [[ -e server/dhcpd ]] ; then
+		if use ldap ; then
+			insinto /etc/openldap/schema
+			doins contrib/ldap/dhcp.*
+			dosbin contrib/ldap/dhcpd-conf-to-ldap
+		fi
+
+		newinitd "${FILESDIR}"/dhcpd.init5 dhcpd
+		newconfd "${FILESDIR}"/dhcpd.conf2 dhcpd
+		newinitd "${FILESDIR}"/dhcrelay.init3 dhcrelay
+		newconfd "${FILESDIR}"/dhcrelay.conf dhcrelay
+		newinitd "${FILESDIR}"/dhcrelay.init3 dhcrelay6
+		newconfd "${FILESDIR}"/dhcrelay6.conf dhcrelay6
+
+		systemd_newtmpfilesd "${FILESDIR}"/dhcpd.tmpfiles dhcpd.conf
+		systemd_dounit "${FILESDIR}"/dhcpd4.service
+		systemd_dounit "${FILESDIR}"/dhcpd6.service
+		systemd_dounit "${FILESDIR}"/dhcrelay4.service
+		systemd_dounit "${FILESDIR}"/dhcrelay6.service
+		systemd_install_serviced "${FILESDIR}"/dhcrelay4.service.conf
+		systemd_install_serviced "${FILESDIR}"/dhcrelay6.service.conf
+
+		sed -i "s:#@slapd@:$(usex ldap slapd ''):" "${ED}"/etc/init.d/* || die #442560
+	fi
+
+	# the default config files aren't terribly useful #384087
+	local f
+	for f in "${ED}"/etc/dhcp/*.conf.example ; do
+		mv "${f}" "${f%.example}" || die
+	done
+	sed -i '/^[^#]/s:^:#:' "${ED}"/etc/dhcp/*.conf || die
+}
+
+pkg_preinst() {
+	enewgroup dhcp
+	enewuser dhcp -1 -1 /var/lib/dhcp dhcp
+
+	# Keep the user files over the sample ones.  The
+	# hashing is to ignore the crappy defaults #384087.
+	local f h
+	for f in dhclient:da7c8496a96452190aecf9afceef4510 dhcpd:10979e7b71134bd7f04d2a60bd58f070 ; do
+		h=${f#*:}
+		f="/etc/dhcp/${f%:*}.conf"
+		if [ -e "${EROOT}"${f} ] ; then
+			case $(md5sum "${EROOT}"${f}) in
+				${h}*) ;;
+				*) cp -p "${EROOT}"${f} "${ED}"${f};;
+			esac
+		fi
+	done
+}
+
+pkg_postinst() {
+	if [[ -e "${ROOT}"/etc/init.d/dhcp ]] ; then
+		ewarn
+		ewarn "WARNING: The dhcp init script has been renamed to dhcpd"
+		ewarn "/etc/init.d/dhcp and /etc/conf.d/dhcp need to be removed and"
+		ewarn "and dhcp should be removed from the default runlevel"
+		ewarn
+	fi
+}

diff --git a/net-misc/dhcp/dhcp-4.3.2-r99.ebuild b/net-misc/dhcp/dhcp-4.3.2-r99.ebuild
new file mode 100644
index 0000000..411a9ad
--- /dev/null
+++ b/net-misc/dhcp/dhcp-4.3.2-r99.ebuild
@@ -0,0 +1,256 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/dhcp-4.3.2.ebuild,v 1.1 2015/03/10 02:17:25 vapier Exp $
+
+EAPI="4"
+
+inherit eutils systemd toolchain-funcs user
+
+MY_PV="${PV//_alpha/a}"
+MY_PV="${MY_PV//_beta/b}"
+MY_PV="${MY_PV//_rc/rc}"
+MY_PV="${MY_PV//_p/-P}"
+MY_P="${PN}-${MY_PV}"
+DESCRIPTION="ISC Dynamic Host Configuration Protocol (DHCP) client/server"
+HOMEPAGE="http://www.isc.org/products/DHCP"
+SRC_URI="ftp://ftp.isc.org/isc/dhcp/${MY_P}.tar.gz
+	ftp://ftp.isc.org/isc/dhcp/${MY_PV}/${MY_P}.tar.gz"
+
+LICENSE="ISC BSD SSLeay GPL-2" # GPL-2 only for init script
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~mips ~ppc ~x86"
+IUSE="+client ipv6 kernel_linux ldap selinux +server ssl vim-syntax"
+
+DEPEND="
+	client? (
+		kernel_linux? (
+			ipv6? ( sys-apps/iproute2 )
+			sys-apps/net-tools
+		)
+	)
+	ldap? (
+		net-nds/openldap
+		ssl? ( dev-libs/openssl )
+	)"
+RDEPEND="${DEPEND}
+	selinux? ( sec-policy/selinux-dhcp )
+	vim-syntax? ( app-vim/dhcpd-syntax )"
+
+S="${WORKDIR}/${MY_P}"
+
+src_unpack() {
+	unpack ${A}
+	# handle local bind hell
+	cd "${S}"/bind
+	unpack ./bind.tar.gz
+}
+
+src_prepare() {
+	# Gentoo patches - these will probably never be accepted upstream
+	# Fix for musl
+	epatch "${FILESDIR}"/${PN}-4.3.2-fix-compilation-for-musl.patch
+	# Fix some permission issues
+	epatch "${FILESDIR}"/${PN}-3.0-fix-perms.patch
+	# Enable dhclient to equery NTP servers
+	epatch "${FILESDIR}"/${PN}-4.0-dhclient-ntp.patch
+	epatch "${FILESDIR}"/${PN}-4.3.1-dhclient-resolvconf.patch
+	# Stop downing the interface on Linux as that breaks link daemons
+	# such as wpa_supplicant and netplug
+	epatch "${FILESDIR}"/${PN}-3.0.3-dhclient-no-down.patch
+	# Enable dhclient to get extra configuration from stdin
+	epatch "${FILESDIR}"/${PN}-4.2.2-dhclient-stdin-conf.patch
+	epatch "${FILESDIR}"/${PN}-4.2.2-nogateway.patch #265531
+	epatch "${FILESDIR}"/${PN}-4.2.4-quieter-ping.patch #296921
+	epatch "${FILESDIR}"/${PN}-4.2.4-always-accept-4.patch #437108
+	epatch "${FILESDIR}"/${PN}-4.2.5-iproute2-path.patch #480636
+	epatch "${FILESDIR}"/${PN}-4.2.5-bindtodevice-inet6.patch #471142
+
+	# Brand the version with Gentoo
+	sed -i \
+		-e "/VERSION=/s:'$: Gentoo-${PR}':" \
+		configure || die
+
+	# Change the hook script locations of the scripts
+	sed -i \
+		-e 's,/etc/dhclient-exit-hooks,/etc/dhcp/dhclient-exit-hooks,g' \
+		-e 's,/etc/dhclient-enter-hooks,/etc/dhcp/dhclient-enter-hooks,g' \
+		client/scripts/* || die
+
+	# No need for the linux script to force bash #158540
+	sed -i -e 's,#!/bin/bash,#!/bin/sh,' client/scripts/linux || die
+
+	# Quiet the freebsd logger a little
+	sed -i -e '/LOGGER=/ s/-s -p user.notice //g' client/scripts/freebsd || die
+
+	# Remove these options from the sample config
+	sed -i -r \
+		-e "/(script|host-name|domain-name) /d" \
+		client/dhclient.conf.example || die
+
+	if use client && ! use server ; then
+		sed -i -r \
+			-e '/^SUBDIRS/s:\<(dhcpctl|relay|server)\>::g' \
+			Makefile.in || die
+	elif ! use client && use server ; then
+		sed -i -r \
+			-e '/^SUBDIRS/s:\<client\>::' \
+			Makefile.in || die
+	fi
+
+	# Only install different man pages if we don't have en
+	if [[ " ${LINGUAS} " != *" en "* ]]; then
+		# Install Japanese man pages
+		if [[ " ${LINGUAS} " == *" ja "* && -d doc/ja_JP.eucJP ]]; then
+			einfo "Installing Japanese documention"
+			cp doc/ja_JP.eucJP/dhclient* client
+			cp doc/ja_JP.eucJP/dhcp* common
+		fi
+	fi
+	# Now remove the non-english docs so there are no errors later
+	rm -rf doc/ja_JP.eucJP
+
+	# make the bind build work
+	binddir=${S}/bind
+	cd "${binddir}" || die
+	cat <<-EOF > bindvar.tmp
+	binddir=${binddir}
+	GMAKE=${MAKE:-gmake}
+	EOF
+	epatch "${FILESDIR}"/${PN}-4.2.2-bind-disable.patch
+	cd bind-*/
+	epatch "${FILESDIR}"/${PN}-4.2.2-bind-parallel-build.patch #380717
+	epatch "${FILESDIR}"/${PN}-4.2.2-bind-build-flags.patch
+}
+
+src_configure() {
+	# bind defaults to stupid `/usr/bin/ar`
+	tc-export AR BUILD_CC
+	export ac_cv_path_AR=${AR}
+
+	# this is tested for by the bind build system, and can cause trouble
+	# when cross-building; since dhcp itself doesn't make use of libcap,
+	# simply disable it.
+	export ac_cv_lib_cap_cap_set_proc=no
+
+	# Use FHS sane paths ... some of these have configure options,
+	# but not all, so just do it all here.
+	local e="/etc/dhcp" r="/var/run/dhcp" l="/var/lib/dhcp"
+	cat <<-EOF >> includes/site.h
+	#define _PATH_DHCPD_CONF     "${e}/dhcpd.conf"
+	#define _PATH_DHCLIENT_CONF  "${e}/dhclient.conf"
+	#define _PATH_DHCPD_DB       "${l}/dhcpd.leases"
+	#define _PATH_DHCPD6_DB      "${l}/dhcpd6.leases"
+	#define _PATH_DHCLIENT_DB    "${l}/dhclient.leases"
+	#define _PATH_DHCLIENT6_DB   "${l}/dhclient6.leases"
+	#define _PATH_DHCPD_PID      "${r}/dhcpd.pid"
+	#define _PATH_DHCPD6_PID     "${r}/dhcpd6.pid"
+	#define _PATH_DHCLIENT_PID   "${r}/dhcpclient.pid"
+	#define _PATH_DHCLIENT6_PID  "${r}/dhcpclient6.pid"
+	#define _PATH_DHCRELAY_PID   "${r}/dhcrelay.pid"
+	#define _PATH_DHCRELAY6_PID  "${r}/dhcrelay6.pid"
+	EOF
+
+	econf \
+		--enable-paranoia \
+		--enable-early-chroot \
+		--sysconfdir=${e} \
+		$(use_enable ipv6 dhcpv6) \
+		$(use_with ldap) \
+		$(use ldap && use_with ssl ldapcrypto || echo --without-ldapcrypto)
+
+	# configure local bind cruft.  symtable option requires
+	# perl and we don't want to require that #383837.
+	cd bind/bind-*/ || die
+	eval econf \
+		$(sed -n '/ [.].configure /{s:^[^-]*::;s:>.*::;p}' ../Makefile) \
+		--disable-symtable \
+		--without-make-clean
+}
+
+src_compile() {
+	# build local bind cruft first
+	emake -C bind/bind-*/lib/export install
+	# then build standard dhcp code
+	emake AR="$(tc-getAR)"
+}
+
+src_install() {
+	default
+
+	dodoc README RELNOTES doc/{api+protocol,IANA-arp-parameters}
+	dohtml doc/References.html
+
+	if [[ -e client/dhclient ]] ; then
+		# move the client to /
+		dodir /sbin
+		mv "${D}"/usr/sbin/dhclient "${D}"/sbin/ || die
+
+		exeinto /sbin
+		if use kernel_linux ; then
+			newexe "${S}"/client/scripts/linux dhclient-script
+		else
+			newexe "${S}"/client/scripts/freebsd dhclient-script
+		fi
+	fi
+
+	if [[ -e server/dhcpd ]] ; then
+		if use ldap ; then
+			insinto /etc/openldap/schema
+			doins contrib/ldap/dhcp.*
+			dosbin contrib/ldap/dhcpd-conf-to-ldap
+		fi
+
+		newinitd "${FILESDIR}"/dhcpd.init5 dhcpd
+		newconfd "${FILESDIR}"/dhcpd.conf2 dhcpd
+		newinitd "${FILESDIR}"/dhcrelay.init3 dhcrelay
+		newconfd "${FILESDIR}"/dhcrelay.conf dhcrelay
+		newinitd "${FILESDIR}"/dhcrelay.init3 dhcrelay6
+		newconfd "${FILESDIR}"/dhcrelay6.conf dhcrelay6
+
+		systemd_newtmpfilesd "${FILESDIR}"/dhcpd.tmpfiles dhcpd.conf
+		systemd_dounit "${FILESDIR}"/dhcpd4.service
+		systemd_dounit "${FILESDIR}"/dhcpd6.service
+		systemd_dounit "${FILESDIR}"/dhcrelay4.service
+		systemd_dounit "${FILESDIR}"/dhcrelay6.service
+		systemd_install_serviced "${FILESDIR}"/dhcrelay4.service.conf
+		systemd_install_serviced "${FILESDIR}"/dhcrelay6.service.conf
+
+		sed -i "s:#@slapd@:$(usex ldap slapd ''):" "${ED}"/etc/init.d/* || die #442560
+	fi
+
+	# the default config files aren't terribly useful #384087
+	local f
+	for f in "${ED}"/etc/dhcp/*.conf.example ; do
+		mv "${f}" "${f%.example}" || die
+	done
+	sed -i '/^[^#]/s:^:#:' "${ED}"/etc/dhcp/*.conf || die
+}
+
+pkg_preinst() {
+	enewgroup dhcp
+	enewuser dhcp -1 -1 /var/lib/dhcp dhcp
+
+	# Keep the user files over the sample ones.  The
+	# hashing is to ignore the crappy defaults #384087.
+	local f h
+	for f in dhclient:da7c8496a96452190aecf9afceef4510 dhcpd:10979e7b71134bd7f04d2a60bd58f070 ; do
+		h=${f#*:}
+		f="/etc/dhcp/${f%:*}.conf"
+		if [ -e "${EROOT}"${f} ] ; then
+			case $(md5sum "${EROOT}"${f}) in
+				${h}*) ;;
+				*) cp -p "${EROOT}"${f} "${ED}"${f};;
+			esac
+		fi
+	done
+}
+
+pkg_postinst() {
+	if [[ -e "${ROOT}"/etc/init.d/dhcp ]] ; then
+		ewarn
+		ewarn "WARNING: The dhcp init script has been renamed to dhcpd"
+		ewarn "/etc/init.d/dhcp and /etc/conf.d/dhcp need to be removed and"
+		ewarn "and dhcp should be removed from the default runlevel"
+		ewarn
+	fi
+}

diff --git a/net-misc/dhcp/files/dhcp-3.0-fix-perms.patch b/net-misc/dhcp/files/dhcp-3.0-fix-perms.patch
new file mode 100644
index 0000000..13debb2
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-3.0-fix-perms.patch
@@ -0,0 +1,15 @@
+--- server/dhcpd.c	2003-11-05 14:08:09.000000000 -0800
++++ server/dhcpd.c	2003-11-05 14:15:32.000000000 -0800
+@@ -602,6 +602,12 @@
+ 	if (lftest)
+ 		exit (0);
+ 
++#if defined (PARANOIA)
++	/* Set proper permissions... */
++	if (lchown (path_dhcpd_db, set_uid, set_gid))
++		log_fatal ("lchown(%s, %d, %d): %m", path_dhcpd_db, (int) set_uid, (int) set_gid);
++#endif /* PARANOIA */
++
+ 	/* Discover all the network interfaces and initialize them. */
+ 	discover_interfaces (DISCOVER_SERVER);
+ 

diff --git a/net-misc/dhcp/files/dhcp-3.0-paranoia.patch b/net-misc/dhcp/files/dhcp-3.0-paranoia.patch
new file mode 100644
index 0000000..886f5cb
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-3.0-paranoia.patch
@@ -0,0 +1,207 @@
+
+paranoia (non-root/chroot) patch for ISC dhcp 3.0
+file to patch: dhcp-3.0/server/dhcpd.c
+
+update from paranoia patch for ISC dhcp 2.0
+
+Adds 3 options:
+
+	-user <user>
+	-group <group>
+	-chroot <chroot_dir>
+
+Notes:
+	-DPARANOIA must be passed as an argument to the --copts option
+	of configure.  Otherwise, the paranoia code will not be compiled
+	in.  Example:  ./configure --copts -DPARANOIA
+
+	The chroot() call has been delayed in order to allow /dev/log to
+	be reopened after the configuration file has been read.  This is
+	beneficial for systems on which /dev/log is a unix domain socket.
+	The main side effect is that dhcpd.conf should be placed in /etc,
+	instead of <chroot_dir>/etc.
+
+	If dhcpd is to be run on a sysV-style architecture (or, more
+	generally, if /dev/log is a character device), one may opt to
+	create the <chroot_dir>/dev/log character device and add
+	-DEARLY_CHROOT to the --copts option of configure (in addition to
+	-DPARANOIA).  This will perform the chroot() call at the earliest
+	convenience (before reading the configuration file).
+
+	If the -user option is used, the lease and pid file directories
+	should be writable to the server process after it drops
+	privileges.
+
+
+ari edelkind (12/10/2001)
+last modified 12/10/2001
+
+
+--- dhcp-3.0/server/dhcpd.c	Thu Jun 21 22:12:58 2001
++++ dhcp-3.0+paranoia/server/dhcpd.c	Wed Oct 17 08:23:00 2001
+@@ -56,6 +56,16 @@
+ #include "version.h"
+ #include <omapip/omapip_p.h>
+ 
++#if defined (PARANOIA)
++#  include <sys/types.h>
++#  include <unistd.h>
++#  include <pwd.h>
++/* get around the ISC declaration of group */
++#  define group real_group 
++#    include <grp.h>
++#  undef group
++#endif /* PARANOIA */
++
+ static void usage PROTO ((void));
+ 
+ TIME cur_time;
+@@ -204,6 +214,22 @@
+ 	omapi_object_dereference (&listener, MDL);
+ }
+ 
++#if defined (PARANOIA)
++/* to be used in one of two possible scenarios */
++static void setup_chroot (char *chroot_dir) {
++	if (geteuid())
++		log_fatal ("you must be root to use chroot");
++
++	if (chroot(chroot_dir)) {
++		log_fatal ("chroot(\"%s\"): %m", chroot_dir);
++	}
++	if (chdir ("/")) {
++		/* probably permission denied */
++		log_fatal ("chdir(\"/\"): %m");
++	}
++}
++#endif /* PARANOIA */
++
+ int main (argc, argv, envp)
+ 	int argc;
+ 	char **argv, **envp;
+@@ -236,6 +262,14 @@
+ 	char *traceinfile = (char *)0;
+ 	char *traceoutfile = (char *)0;
+ #endif
++#if defined (PARANOIA)
++	char *set_user   = 0;
++	char *set_group  = 0;
++	char *set_chroot = 0;
++
++	uid_t set_uid = 0;
++	gid_t set_gid = 0;
++#endif /* PARANOIA */
+ 
+ 	/* Make sure we have stdin, stdout and stderr. */
+ 	status = open ("/dev/null", O_RDWR);
+@@ -298,6 +332,20 @@
+ 			if (++i == argc)
+ 				usage ();
+ 			server = argv [i];
++#if defined (PARANOIA)
++		} else if (!strcmp (argv [i], "-user")) {
++			if (++i == argc)
++				usage ();
++			set_user = argv [i];
++		} else if (!strcmp (argv [i], "-group")) {
++			if (++i == argc)
++				usage ();
++			set_group = argv [i];
++		} else if (!strcmp (argv [i], "-chroot")) {
++			if (++i == argc)
++				usage ();
++			set_chroot = argv [i];
++#endif /* PARANOIA */
+ 		} else if (!strcmp (argv [i], "-cf")) {
+ 			if (++i == argc)
+ 				usage ();
+@@ -397,6 +445,44 @@
+ 					     trace_seed_stop, MDL);
+ #endif
+ 
++#if defined (PARANOIA)
++	/* get user and group info if those options were given */
++	if (set_user) {
++		struct passwd *tmp_pwd;
++
++		if (geteuid())
++			log_fatal ("you must be root to set user");
++
++		if (!(tmp_pwd = getpwnam(set_user)))
++			log_fatal ("no such user: %s", set_user);
++
++		set_uid = tmp_pwd->pw_uid;
++
++		/* use the user's group as the default gid */
++		if (!set_group)
++			set_gid = tmp_pwd->pw_gid;
++	}
++
++	if (set_group) {
++/* get around the ISC declaration of group */
++#define group real_group
++		struct group *tmp_grp;
++
++		if (geteuid())
++			log_fatal ("you must be root to set group");
++
++		if (!(tmp_grp = getgrnam(set_group)))
++			log_fatal ("no such group: %s", set_group);
++
++		set_gid = tmp_grp->gr_gid;
++#undef group
++	}
++
++#  if defined (EARLY_CHROOT)
++	if (set_chroot) setup_chroot (set_chroot);
++#  endif /* EARLY_CHROOT */
++#endif /* PARANOIA */
++
+ 	/* Default to the DHCP/BOOTP port. */
+ 	if (!local_port)
+ 	{
+@@ -500,6 +586,10 @@
+ 
+ 	postconf_initialization (quiet);
+ 
++#if defined (PARANOIA) && !defined (EARLY_CHROOT)
++	if (set_chroot) setup_chroot (set_chroot);
++#endif /* PARANOIA && !EARLY_CHROOT */
++
+         /* test option should cause an early exit */
+  	if (cftest && !lftest) 
+  		exit(0);
+@@ -543,6 +633,22 @@
+ 			exit (0);
+ 	}
+ 
++#if defined (PARANOIA)
++	/* change uid to the specified one */
++
++	if (set_gid) {
++		if (setgroups (0, (void *)0))
++			log_fatal ("setgroups: %m");
++		if (setgid (set_gid))
++			log_fatal ("setgid(%d): %m", (int) set_gid);
++	}	
++
++	if (set_uid) {
++		if (setuid (set_uid))
++			log_fatal ("setuid(%d): %m", (int) set_uid);
++	}
++#endif /* PARANOIA */
++
+ 	/* Read previous pid file. */
+ 	if ((i = open (path_dhcpd_pid, O_RDONLY)) >= 0) {
+ 		status = read (i, pbuf, (sizeof pbuf) - 1);
+@@ -888,6 +994,10 @@
+ 
+ 	log_fatal ("Usage: dhcpd [-p <UDP port #>] [-d] [-f]%s%s%s%s",
+ 		   "\n             [-cf config-file] [-lf lease-file]",
++#if defined (PARANOIA)
++		   /* meld into the following string */
++		   "\n             [-user user] [-group group] [-chroot dir]"
++#endif /* PARANOIA */
+ #if defined (TRACING)
+ 		   "\n		   [-tf trace-output-file]",
+ 		   "\n		   [-play trace-input-file]",

diff --git a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-no-down.patch b/net-misc/dhcp/files/dhcp-3.0.3-dhclient-no-down.patch
new file mode 100644
index 0000000..518efec
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-3.0.3-dhclient-no-down.patch
@@ -0,0 +1,70 @@
+--- client/scripts/linux
++++ client/scripts/linux
+@@ -118,9 +118,9 @@
+ if [ x$reason = xPREINIT ]; then
+   if [ x$alias_ip_address != x ]; then
+     # Bring down alias interface. Its routes will disappear too.
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+-  ifconfig $interface 0 up
++  ifconfig $interface 0.0.0.0 up
+ 
+   # We need to give the kernel some time to get the interface up.
+   sleep 1
+@@ -145,12 +145,12 @@
+   if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
+ 		[ x$alias_ip_address != x$old_ip_address ]; then
+     # Possible new alias. Remove old alias.
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+   if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then
+     # IP address changed. Bringing down the interface will delete all routes,
+     # and clear the ARP cache.
+-    ifconfig $interface inet 0 down
++    ifconfig $interface inet 0.0.0.0
+ 
+   fi
+   if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
+@@ -171,7 +171,7 @@
+   fi
+   if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
+    then
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+     ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+     route add -host $alias_ip_address $interface:0
+   fi
+@@ -183,11 +183,11 @@
+    || [ x$reason = xSTOP ]; then
+   if [ x$alias_ip_address != x ]; then
+     # Turn off alias interface.
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+   if [ x$old_ip_address != x ]; then
+     # Shut down interface, which will delete routes and clear arp cache.
+-    ifconfig $interface inet 0 down
++    ifconfig $interface inet 0.0.0.0
+   fi
+   if [ x$alias_ip_address != x ]; then
+     ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+@@ -198,7 +198,7 @@
+ 
+ if [ x$reason = xTIMEOUT ]; then
+   if [ x$alias_ip_address != x ]; then
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+   ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ 					$new_broadcast_arg $mtu_arg
+@@ -223,7 +223,7 @@
+     make_resolv_conf
+     exit_with_hooks 0
+   fi
+-  ifconfig $interface inet 0 down
++  ifconfig $interface inet 0.0.0.0
+   exit_with_hooks 1
+ fi
+ 

diff --git a/net-misc/dhcp/files/dhcp-3.1.3-dhclient-no-down.patch b/net-misc/dhcp/files/dhcp-3.1.3-dhclient-no-down.patch
new file mode 100644
index 0000000..89935df
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-3.1.3-dhclient-no-down.patch
@@ -0,0 +1,77 @@
+diff -Nuar --exclude '*.orig' dhcp-3.1.3.orig//client/scripts/linux dhcp-3.1.3//client/scripts/linux
+--- dhcp-3.1.3.orig//client/scripts/linux	2010-10-15 04:59:15.890664245 +0000
++++ dhcp-3.1.3//client/scripts/linux	2010-10-15 05:04:57.940396350 +0000
+@@ -118,7 +118,7 @@
+ if [ x$reason = xPREINIT ]; then
+   if [ x$alias_ip_address != x ]; then
+     # Bring down alias interface. Its routes will disappear too.
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+   if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] )
+    then
+@@ -127,7 +127,7 @@
+     # Add route to make broadcast work. Do not omit netmask.
+     route add default dev $interface netmask 0.0.0.0
+   else
+-    ifconfig $interface 0 up
++    ifconfig $interface 0.0.0.0 up
+   fi
+ 
+   # We need to give the kernel some time to get the interface up.
+@@ -155,12 +155,12 @@
+   if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
+ 		[ x$alias_ip_address != x$old_ip_address ]; then
+     # Possible new alias. Remove old alias.
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+   if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then
+     # IP address changed. Bringing down the interface will delete all routes,
+     # and clear the ARP cache.
+-    ifconfig $interface inet 0 down
++    ifconfig $interface inet 0.0.0.0
+ 
+   fi
+   if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
+@@ -179,7 +179,7 @@
+   fi
+   if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
+    then
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+     ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+     route add -host $alias_ip_address $interface:0
+   fi
+@@ -191,11 +191,11 @@
+    || [ x$reason = xSTOP ]; then
+   if [ x$alias_ip_address != x ]; then
+     # Turn off alias interface.
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+   if [ x$old_ip_address != x ]; then
+     # Shut down interface, which will delete routes and clear arp cache.
+-    ifconfig $interface inet 0 down
++    ifconfig $interface inet 0.0.0.0
+   fi
+   if [ x$alias_ip_address != x ]; then
+     ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+@@ -206,7 +206,7 @@
+ 
+ if [ x$reason = xTIMEOUT ]; then
+   if [ x$alias_ip_address != x ]; then
+-    ifconfig $interface:0- inet 0
++    ifconfig $interface:0- inet 0.0.0.0
+   fi
+   ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ 					$new_broadcast_arg $mtu_arg
+@@ -227,7 +227,7 @@
+     make_resolv_conf
+     exit_with_hooks 0
+   fi
+-  ifconfig $interface inet 0 down
++  ifconfig $interface inet 0.0.0.0
+   exit_with_hooks 1
+ fi
+ 

diff --git a/net-misc/dhcp/files/dhcp-4.0-dhclient-ntp.patch b/net-misc/dhcp/files/dhcp-4.0-dhclient-ntp.patch
new file mode 100644
index 0000000..d3f2971
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.0-dhclient-ntp.patch
@@ -0,0 +1,216 @@
+diff -uNr dhcp-4.0.0.ORIG/client/clparse.c dhcp-4.0.0/client/clparse.c
+--- dhcp-4.0.0.ORIG/client/clparse.c	2008-09-01 11:38:51.000000000 +0100
++++ dhcp-4.0.0/client/clparse.c	2008-09-01 11:48:17.000000000 +0100
+@@ -37,7 +37,7 @@
+ 
+ struct client_config top_level_config;
+ 
+-#define NUM_DEFAULT_REQUESTED_OPTS	9
++#define NUM_DEFAULT_REQUESTED_OPTS	10
+ struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1];
+ 
+ static void parse_client_default_duid(struct parse *cfile);
+@@ -98,15 +98,20 @@
+ 				dhcp_universe.code_hash, &code, 0, MDL);
+ 
+ 	/* 8 */
+-	code = D6O_NAME_SERVERS;
++	code = DHO_NTP_SERVERS;
+ 	option_code_hash_lookup(&default_requested_options[7],
+-				dhcpv6_universe.code_hash, &code, 0, MDL);
++				dhcp_universe.code_hash, &code, 0, MDL);
+ 
+ 	/* 9 */
+-	code = D6O_DOMAIN_SEARCH;
++	code = D6O_NAME_SERVERS;
+ 	option_code_hash_lookup(&default_requested_options[8],
+ 				dhcpv6_universe.code_hash, &code, 0, MDL);
+ 
++	/* 10 */
++	code = D6O_DOMAIN_SEARCH;
++	option_code_hash_lookup(&default_requested_options[9],
++				dhcpv6_universe.code_hash, &code, 0, MDL);
++
+ 	for (code = 0 ; code < NUM_DEFAULT_REQUESTED_OPTS ; code++) {
+ 		if (default_requested_options[code] == NULL)
+ 			log_fatal("Unable to find option definition for "
+diff -uNr dhcp-4.0.0.ORIG/client/scripts/bsdos dhcp-4.0.0/client/scripts/bsdos
+--- dhcp-4.0.0.ORIG/client/scripts/bsdos	2008-09-01 11:38:51.000000000 +0100
++++ dhcp-4.0.0/client/scripts/bsdos	2008-09-01 11:39:30.000000000 +0100
+@@ -29,6 +29,26 @@
+ 
+     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+   fi
++  # If we're making confs, may as well make an ntp.conf too
++  make_ntp_conf
++}
++
++make_ntp_conf() {
++  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
++    if [ x$new_ntp_servers != x ]; then
++      conf="# Generated by dhclient for interface $interface\n"
++      conf="${conf}restrict default noquery notrust nomodify\n"
++      conf="${conf}restrict 127.0.0.1\n"
++      for ntpserver in $new_ntp_servers; do
++        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
++        conf="${conf}server $ntpserver\n"
++      done
++      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
++      conf="${conf}logfile /var/log/ntp.log\n"
++      printf "${conf}" > /etc/ntp.conf
++      chmod 644 /etc/ntp.conf
++    fi
++  fi
+ }
+ 
+ # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
+diff -uNr dhcp-4.0.0.ORIG/client/scripts/freebsd dhcp-4.0.0/client/scripts/freebsd
+--- dhcp-4.0.0.ORIG/client/scripts/freebsd	2008-09-01 11:38:51.000000000 +0100
++++ dhcp-4.0.0/client/scripts/freebsd	2008-09-01 11:39:30.000000000 +0100
+@@ -73,6 +73,26 @@
+       fi
+     fi
+   fi
++  # If we're making confs, may as well make an ntp.conf too
++  make_ntp_conf
++}
++
++make_ntp_conf() {
++  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
++    if [ "x$new_ntp_servers" != x ]; then
++      conf="# Generated by dhclient for interface $interface\n"
++      conf="${conf}restrict default noquery notrust nomodify\n"
++      conf="${conf}restrict 127.0.0.1\n"
++      for ntpserver in $new_ntp_servers; do
++        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
++        conf="${conf}server $ntpserver\n"
++      done
++      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
++      conf="${conf}logfile /var/log/ntp.log\n"
++      printf "${conf}" > /etc/ntp.conf
++      chmod 644 /etc/ntp.conf
++    fi
++  fi
+ }
+ 
+ # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
+diff -uNr dhcp-4.0.0.ORIG/client/scripts/linux dhcp-4.0.0/client/scripts/linux
+--- dhcp-4.0.0.ORIG/client/scripts/linux	2008-09-01 11:38:51.000000000 +0100
++++ dhcp-4.0.0/client/scripts/linux	2008-09-01 11:39:30.000000000 +0100
+@@ -55,6 +55,26 @@
+ 
+     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+   fi
++  # If we're making confs, may as well make an ntp.conf too
++  make_ntp_conf
++}
++
++make_ntp_conf() {
++  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
++    if [ "x$new_ntp_servers" != x ]; then
++      conf="# Generated by dhclient for interface $interface\n"
++      conf="${conf}restrict default noquery notrust nomodify\n"
++      conf="${conf}restrict 127.0.0.1\n"
++      for ntpserver in $new_ntp_servers; do
++        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
++        conf="${conf}server $ntpserver\n"
++      done
++      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
++      conf="${conf}logfile /var/log/ntp.log\n"
++      printf "${conf}" > /etc/ntp.conf
++      chmod 644 /etc/ntp.conf
++    fi
++  fi
+ }
+ 
+ # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
+diff -uNr dhcp-4.0.0.ORIG/client/scripts/netbsd dhcp-4.0.0/client/scripts/netbsd
+--- dhcp-4.0.0.ORIG/client/scripts/netbsd	2008-09-01 11:38:51.000000000 +0100
++++ dhcp-4.0.0/client/scripts/netbsd	2008-09-01 11:39:30.000000000 +0100
+@@ -29,6 +29,26 @@
+ 
+     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+   fi
++  # If we're making confs, may as well make an ntp.conf too
++  make_ntp_conf
++}
++
++make_ntp_conf() {
++  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
++    if [ "x$new_ntp_servers" != x ]; then
++      conf="# Generated by dhclient for interface $interface\n"
++      conf="${conf}restrict default noquery notrust nomodify\n"
++      conf="${conf}restrict 127.0.0.1\n"
++      for ntpserver in $new_ntp_servers; do
++        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
++        conf="${conf}server $ntpserver\n"
++      done
++      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
++      conf="${conf}logfile /var/log/ntp.log\n"
++      printf "${conf}" > /etc/ntp.conf
++      chmod 644 /etc/ntp.conf
++    fi
++  fi
+ }
+ 
+ # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
+diff -uNr dhcp-4.0.0.ORIG/client/scripts/openbsd dhcp-4.0.0/client/scripts/openbsd
+--- dhcp-4.0.0.ORIG/client/scripts/openbsd	2008-09-01 11:38:51.000000000 +0100
++++ dhcp-4.0.0/client/scripts/openbsd	2008-09-01 11:39:30.000000000 +0100
+@@ -29,6 +29,26 @@
+ 
+     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+   fi
++  # If we're making confs, may as well make an ntp.conf too
++  make_ntp_conf
++}
++
++make_ntp_conf() {
++  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
++    if [ "x$new_ntp_servers" != x ]; then
++      conf="# Generated by dhclient for interface $interface\n"
++      conf="${conf}restrict default noquery notrust nomodify\n"
++      conf="${conf}restrict 127.0.0.1\n"
++      for ntpserver in $new_ntp_servers; do
++        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
++        conf="${conf}server $ntpserver\n"
++      done
++      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
++      conf="${conf}logfile /var/log/ntp.log\n"
++      printf "${conf}" > /etc/ntp.conf
++      chmod 644 /etc/ntp.conf
++    fi
++  fi
+ }
+ 
+ # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
+diff -uNr dhcp-4.0.0.ORIG/client/scripts/solaris dhcp-4.0.0/client/scripts/solaris
+--- dhcp-4.0.0.ORIG/client/scripts/solaris	2008-09-01 11:38:51.000000000 +0100
++++ dhcp-4.0.0/client/scripts/solaris	2008-09-01 11:39:30.000000000 +0100
+@@ -17,6 +17,26 @@
+ 
+     mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   fi
++  # If we're making confs, may as well make an ntp.conf too
++  make_ntp_conf
++}
++
++make_ntp_conf() {
++  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
++    if [ "x$new_ntp_servers" != x ]; then
++      conf="# Generated by dhclient for interface $interface\n"
++      conf="${conf}restrict default noquery notrust nomodify\n"
++      conf="${conf}restrict 127.0.0.1\n"
++      for ntpserver in $new_ntp_servers; do
++        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
++        conf="${conf}server $ntpserver\n"
++      done
++      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
++      conf="${conf}logfile /var/log/ntp.log\n"
++      printf "${conf}" > /etc/ntp.conf
++      chmod 644 /etc/ntp.conf
++    fi
++  fi
+ }
+ 
+ # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.

diff --git a/net-misc/dhcp/files/dhcp-4.2.0-errwarn-message.patch b/net-misc/dhcp/files/dhcp-4.2.0-errwarn-message.patch
new file mode 100644
index 0000000..f882a13
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.0-errwarn-message.patch
@@ -0,0 +1,31 @@
+ripped from Fedora & tweaked 
+
+--- dhcp-4.2.0/omapip/errwarn.c
++++ dhcp-4.2.0/omapip/errwarn.c
+@@ -76,20 +76,13 @@
+ 
+ #if !defined (NOMINUM)
+   log_error ("%s", "");
+-  log_error ("If you did not get this software from ftp.isc.org, please");
+-  log_error ("get the latest from ftp.isc.org and install that before");
+-  log_error ("requesting help.");
++  log_error ("This version of ISC DHCP is based on the release available");
++  log_error ("on ftp.isc.org.  Features have been added and other changes");
++  log_error ("have been made to the base software release in order to make");
++  log_error ("it work better with this distribution.");
+   log_error ("%s", "");
+-  log_error ("If you did get this software from ftp.isc.org and have not");
+-  log_error ("yet read the README, please read it before requesting help.");
+-  log_error ("If you intend to request help from the dhcp-server@isc.org");
+-  log_error ("mailing list, please read the section on the README about");
+-  log_error ("submitting bug reports and requests for help.");
+-  log_error ("%s", "");
+-  log_error ("Please do not under any circumstances send requests for");
+-  log_error ("help directly to the authors of this software - please");
+-  log_error ("send them to the appropriate mailing list as described in");
+-  log_error ("the README file.");
++  log_error ("Please report for this software via the Gentoo Bugzilla site:");
++  log_error ("    http://bugs.gentoo.org/");
+   log_error ("%s", "");
+   log_error ("exiting.");
+ #endif

diff --git a/net-misc/dhcp/files/dhcp-4.2.2-bind-build-flags.patch b/net-misc/dhcp/files/dhcp-4.2.2-bind-build-flags.patch
new file mode 100644
index 0000000..ae33638
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.2-bind-build-flags.patch
@@ -0,0 +1,14 @@
+bind sets up BUILD_XXX vars for building native tools, but then
+doesn't use them for the "gen" tool
+
+--- a/bind/lib/export/dns/Makefile.in
++++ b/bind/lib/export/dns/Makefile.in
+@@ -166,7 +166,7 @@
+ 	./gen -s ${srcdir} > code.h
+ 
+ gen: ${srcdir}/gen.c
+-	${CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
++	${BUILD_CC} ${BUILD_CFLAGS} ${CINCLUDES} ${BUILD_LDFLAGS} -o $@ ${srcdir}/gen.c ${BUILD_LIBS}
+ 
+ #We don't need rbtdb64 for this library
+ #rbtdb64.@O@: rbtdb.c

diff --git a/net-misc/dhcp/files/dhcp-4.2.2-bind-disable.patch b/net-misc/dhcp/files/dhcp-4.2.2-bind-disable.patch
new file mode 100644
index 0000000..4c7810e
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.2-bind-disable.patch
@@ -0,0 +1,13 @@
+we take care of building this ourselves in the ebuild so
+build settings are properly respected
+
+--- dhcp-4.2.2/bind/Makefile
++++ dhcp-4.2.2/bind/Makefile
+@@ -29,6 +29,7 @@
+ bindsrcdir=bind-${version}
+ 
+ all:
++disable:
+ # Extract the source from the tarball, if it hasn't been already.
+ 	@if test -d ${bindsrcdir} ; then                    \
+ 		echo ${bindsrcdir} already unpacked... ;    \

diff --git a/net-misc/dhcp/files/dhcp-4.2.2-bind-parallel-build.patch b/net-misc/dhcp/files/dhcp-4.2.2-bind-parallel-build.patch
new file mode 100644
index 0000000..6136154
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.2-bind-parallel-build.patch
@@ -0,0 +1,14 @@
+fix the bind subdir parallel builds
+
+https://bugs.gentoo.org/380717
+
+--- a/bind/lib/export/isc/Makefile.in
++++ b/bind/lib/export/isc/Makefile.in
+@@ -114,6 +114,7 @@
+ 		-DLIBAGE=${LIBAGE} \
+ 		-c ${srcdir}/version.c
+ 
++${OBJS}: | subdirs
+ libisc.@SA@: ${OBJS}
+ 	${AR} ${ARFLAGS} $@ ${OBJS}
+ 	${RANLIB} $@

diff --git a/net-misc/dhcp/files/dhcp-4.2.2-dhclient-resolvconf.patch b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-resolvconf.patch
new file mode 100644
index 0000000..28080a8
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-resolvconf.patch
@@ -0,0 +1,409 @@
+--- a/client/scripts/bsdos
++++ b/client/scripts/bsdos
+@@ -1,40 +1,46 @@
+ #!/bin/sh
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+     if [ "x$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_search}\n"
+     elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >> /etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       case $nameserver in
+ 	  fe80:*) zone_id="%$interface";;
+ 	  FE80:*) zone_id="%$interface";;
+ 	  *)      zone_id='';;
+       esac
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/freebsd
++++ b/client/scripts/freebsd
+@@ -11,73 +11,45 @@
+ fi
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    ( cat /dev/null > /etc/resolv.conf.dhclient )
+-    exit_status=$?
+-    if [ $exit_status -ne 0 ]; then
+-      $LOGGER "Unable to create /etc/resolv.conf.dhclient: Error $exit_status"
+-    else
+-      if [ "x$new_domain_search" != x ]; then
+-	( echo search $new_domain_search >> /etc/resolv.conf.dhclient )
+-	exit_status=$?
+-      elif [ "x$new_domain_name" != x ]; then
+-	# Note that the DHCP 'Domain Name Option' is really just a domain
+-	# name, and that this practice of using the domain name option as
+-	# a search path is both nonstandard and deprecated.
+-	( echo search $new_domain_name >> /etc/resolv.conf.dhclient )
+-	exit_status=$?
+-      fi
+-      for nameserver in $new_domain_name_servers; do
+-	if [ $exit_status -ne 0 ]; then
+-	  break
+-	fi
+-	( echo nameserver $nameserver >>/etc/resolv.conf.dhclient )
+-	exit_status=$?
+-      done
+-
+-      # If there were no errors, attempt to mv the new file into place.
+-      if [ $exit_status -eq 0 ]; then
+-	( mv /etc/resolv.conf.dhclient /etc/resolv.conf )
+-	exit_status=$?
+-      fi
+-
+-      if [ $exit_status -ne 0 ]; then
+-	$LOGGER "Error while writing new /etc/resolv.conf."
+-      fi
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
++      # Note that the DHCP 'Domain Name Option' is really just a domain
++      # name, and that this practice of using the domain name option as
++      # a search path is both nonstandard and deprecated.
++      conf="${conf}search ${new_domain_name}\n"
+     fi
++    for nameserver in $new_domain_name_servers; do
++      conf="${conf}nameserver ${nameserver}\n"
++    done
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    ( cat /dev/null > /etc/resolv.conf.dhclient6 )
+-    exit_status=$?
+-    if [ $exit_status -ne 0 ] ; then
+-      $LOGGER "Unable to create /etc/resolv.conf.dhclient6: Error $exit_status"
+-    else
+-      if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-	( echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 )
+-	exit_status=$?
+-      fi
+-      for nameserver in ${new_dhcp6_name_servers} ; do
+-	if [ $exit_status -ne 0 ] ; then
+-	  break
+-	fi
+ 	# If the nameserver has a link-local address
+ 	# add a <zone_id> (interface name) to it.
+ 	case $nameserver in
+ 	    fe80:*) zone_id="%$interface";;
+ 	    FE80:*) zone_id="%$interface";;
+ 	    *)      zone_id='';;
+ 	esac
+-	( echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 )
+-	exit_status=$?
+-      done
+-
+-      if [ $exit_status -eq 0 ] ; then
+-        ( mv /etc/resolv.conf.dhclient6 /etc/resolv.conf )
+-	exit_status=$?
+-      fi
++    if [ "x${new_dhcp6_domain_search}" != x ] ; then
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
++    fi
++    for nameserver in ${new_dhcp6_name_servers} ; do
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
++    done
++  fi
+ 
+-      if [ $exit_status -ne 0 ] ; then
+-	$LOGGER "Error while writing new /etc/resolv.conf."
+-      fi
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
+     fi
+   fi
+ }
+--- a/client/scripts/linux
++++ b/client/scripts/linux
+@@ -26,44 +26,49 @@
+ ip=/sbin/ip
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    chmod 644 /etc/resolv.conf.dhclient
+-    if [ x"$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ x"$new_domain_name" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     shopt -s nocasematch 
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       if  [[ "$nameserver" =~ ^fe80:: ]]
+       then
+ 	zone_id="%$interface"
+       else
+ 	zone_id=
+       fi
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
+     shopt -u nocasematch 
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/netbsd
++++ b/client/scripts/netbsd
+@@ -1,40 +1,46 @@
+ #!/bin/sh
+ 
+ make_resolv_conf() {
+-  if [ "x$new_domain_name" != x ] && [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    if [ "x$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ "x$new_domain_name" != x ]; then
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
++  if [ x"$new_domain_name_servers" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       case $nameserver in
+ 	fe80:*) zone_id="%$interface";;
+ 	FE80:*) zone_id="%$interface";;
+ 	*)      zone_id='';;
+       esac
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/openbsd
++++ b/client/scripts/openbsd
+@@ -1,40 +1,46 @@
+ #!/bin/sh
+ 
+ make_resolv_conf() {
+-  if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    if [ x"$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ x"$new_domain_name" != x ]; then
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
++  if [ x"$new_domain_name_servers" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       case $nameserver in
+ 	fe80:*) zone_id="%$interface";;
+ 	FE80:*) zone_id="%$interface";;
+ 	*)      zone_id='';;
+       esac
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/solaris
++++ b/client/scripts/solaris
+@@ -1,21 +1,39 @@
+ #!/bin/sh  
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    if [ x"$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ x"$new_domain_name" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
++    done
++  elif [ "x${new_dhcp6_name_servers}" != x ] ; then
++    if [ "x${new_dhcp6_domain_search}" != x ] ; then
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
++    fi
++    for nameserver in ${new_dhcp6_name_servers} ; do
++      conf="${conf}nameserver ${nameserver}\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 

diff --git a/net-misc/dhcp/files/dhcp-4.2.2-dhclient-stdin-conf.patch b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-stdin-conf.patch
new file mode 100644
index 0000000..bf5a54c
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-stdin-conf.patch
@@ -0,0 +1,113 @@
+--- dhcp-4.2.2/client/clparse.c
++++ dhcp-4.2.2/client/clparse.c
+@@ -182,6 +182,10 @@ isc_result_t read_client_conf ()
+ #endif
+ 	}
+ 
++	/* Read any extra configuration from stdin */
++	extern int read_client_conf_stdin (struct interface_info *ip, struct client_config *client);
++	read_client_conf_stdin (NULL, &top_level_config);
++
+ 	/* Set up state and config structures for clients that don't
+ 	   have per-interface configuration statements. */
+ 	config = (struct client_config *)0;
+@@ -211,23 +215,13 @@ isc_result_t read_client_conf ()
+ 	return status;
+ }
+ 
+-int read_client_conf_file (const char *name, struct interface_info *ip,
++int read_client_conf_actual (struct parse *cfile, struct interface_info *ip,
+ 			   struct client_config *client)
+ {
+-	int file;
+-	struct parse *cfile;
+ 	const char *val;
+ 	int token;
+ 	isc_result_t status;
+ 
+-	if ((file = open (name, O_RDONLY)) < 0)
+-		return uerr2isc (errno);
+-
+-	cfile = NULL;
+-	status = new_parse(&cfile, file, NULL, 0, path_dhclient_conf, 0);
+-	if (status != ISC_R_SUCCESS || cfile == NULL)
+-		return status;
+-
+ 	do {
+ 		token = peek_token (&val, (unsigned *)0, cfile);
+ 		if (token == END_OF_FILE)
+@@ -238,10 +232,74 @@ int read_client_conf_file (const char *name, struct interface_info *ip,
+ 	status = (cfile -> warnings_occurred
+ 		  ? DHCP_R_BADPARSE
+ 		  : ISC_R_SUCCESS);
++	return status;
++}
++
++int read_client_conf_file (const char *name, struct interface_info *ip,
++			   struct client_config *client)
++{
++	int file;
++	struct parse *cfile;
++	isc_result_t status;
++	
++	if ((file = open (name, O_RDONLY)) < 0)
++		return uerr2isc (errno);
++
++	cfile = (struct parse *)0;
++	new_parse (&cfile, file, (char *)0, 0, path_dhclient_conf, 0);
++	status = read_client_conf_actual(cfile, ip, client);
+ 	end_parse (&cfile);
+ 	return status;
+ }
+ 
++int read_client_conf_stdin (struct interface_info *ip,
++			    struct client_config *client)
++{
++	int file;
++	char *buffer = NULL, *p;
++	unsigned buflen, len = 0;
++	struct parse *cfile;
++	size_t bytes;
++	isc_result_t status;
++
++	file = fileno(stdin);
++	if (isatty (file))
++		return ISC_R_NOTFOUND;
++	if (fcntl (file, F_SETFL, O_NONBLOCK) < 0)
++		log_fatal ("could not set stdin to non blocking!");
++
++	buflen = BUFSIZ;
++	buffer = malloc (BUFSIZ + 1);
++	p = buffer;
++	do {
++		bytes = read (file, p, BUFSIZ);
++		if (bytes == 0)
++			break;
++		if (bytes == -1)
++			log_fatal ("failed to read stdin!");
++		if (bytes >= BUFSIZ) {
++			buflen += BUFSIZ;
++			len += BUFSIZ;
++			buffer = realloc (buffer, buflen + 1);
++			if (!buffer)
++				log_fatal ("not enough buffer to read stdin!");
++			p = buffer + len;
++		} else {
++			len += bytes;
++			break;
++		}
++	} while(1);
++	buffer[len] = '\0';
++
++	cfile = (struct parse *)0;
++	status = new_parse (&cfile, -1, buffer, len, "stdin", 0);
++	if (status == ISC_R_SUCCESS) {
++		status = read_client_conf_actual (cfile, ip, client);
++		end_parse (&cfile);
++	}
++	free(buffer);
++	return status;
++}
+ 
+ /* lease-file :== client-lease-statements END_OF_FILE
+    client-lease-statements :== <nil>

diff --git a/net-misc/dhcp/files/dhcp-4.2.2-nogateway.patch b/net-misc/dhcp/files/dhcp-4.2.2-nogateway.patch
new file mode 100644
index 0000000..27fb2b0
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.2-nogateway.patch
@@ -0,0 +1,46 @@
+http://bugs.gentoo.org/265531
+
+--- dhcp-4.2.2/client/scripts/linux
++++ dhcp-4.2.2/client/scripts/linux
+@@ -193,12 +193,14 @@
+     ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ 					$new_broadcast_arg $mtu_arg
+     # Add a network route to the computed network address.
+-    for router in $new_routers; do
+-      if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then
+-	route add -host $router dev $interface
+-      fi
+-      route add default gw $router $metric_arg dev $interface
+-    done
++    if [ x$PEER_ROUTERS = x ] || [ x$PEER_ROUTERS = xyes ]; then
++      for router in $new_routers; do
++        if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then
++	  route add -host $router dev $interface
++        fi
++        route add default gw $router $metric_arg dev $interface
++      done
++    fi
+   else
+     # we haven't changed the address, have we changed other options           
+     # that we wish to update?
+@@ -244,12 +246,14 @@
+       ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+       route add -host $alias_ip_address dev $interface:0
+     fi
+-    for router in $new_routers; do
+-      if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then
+-	route add -host $router dev $interface
+-      fi
+-      route add default gw $router $metric_arg dev $interface
+-    done
++    if [ x$PEER_ROUTERS = x ] || [ x$PEER_ROUTERS = xyes ]; then
++      for router in $new_routers; do
++        if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then
++	  route add -host $router dev $interface
++        fi
++        route add default gw $router $metric_arg dev $interface
++      done
++    fi
+     make_resolv_conf
+     exit_with_hooks 0
+   fi

diff --git a/net-misc/dhcp/files/dhcp-4.2.4-always-accept-4.patch b/net-misc/dhcp/files/dhcp-4.2.4-always-accept-4.patch
new file mode 100644
index 0000000..6cec86c
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.4-always-accept-4.patch
@@ -0,0 +1,29 @@
+https://bugs.gentoo.org/437108
+
+always accept the -4 option even if we don't have IPv6 support enabled.
+the relay code does this already.
+
+--- a/client/dhclient.c
++++ b/client/dhclient.c
+@@ -170,8 +170,8 @@ main(int argc, char **argv) {
+ 		if (!strcmp(argv[i], "-r")) {
+ 			release_mode = 1;
+ 			no_daemon = 1;
+-#ifdef DHCPv6
+ 		} else if (!strcmp(argv[i], "-4")) {
++#ifdef DHCPv6
+ 			if (local_family_set && local_family != AF_INET)
+ 				log_fatal("Client can only do v4 or v6, not "
+ 					  "both.");
+--- a/server/dhcpd.c
++++ b/server/dhcpd.c
+@@ -373,8 +373,8 @@ main(int argc, char **argv) {
+ 		} else if (!strcmp (argv [i], "-q")) {
+ 			quiet = 1;
+ 			quiet_interface_discovery = 1;
+-#ifdef DHCPv6
+ 		} else if (!strcmp(argv[i], "-4")) {
++#ifdef DHCPv6
+ 			if (local_family_set && (local_family != AF_INET)) {
+ 				log_fatal("Server cannot run in both IPv4 and "
+ 					  "IPv6 mode at the same time.");

diff --git a/net-misc/dhcp/files/dhcp-4.2.4-quieter-ping.patch b/net-misc/dhcp/files/dhcp-4.2.4-quieter-ping.patch
new file mode 100644
index 0000000..66a1fcd
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.4-quieter-ping.patch
@@ -0,0 +1,72 @@
+https://bugs.gentoo.org/296921
+
+`ping -q` will still print out summary information.  send that to /dev/null.
+
+patch by Martin Mokrejš
+
+--- a/client/scripts/bsdos
++++ b/client/scripts/bsdos
+@@ -251,7 +251,7 @@ if [ x$reason = xTIMEOUT ]; then
+   sleep 1
+   if [ "$new_routers" != "" ]; then
+     set $new_routers
+-    if ping -q -c 1 -w 1 $1; then
++    if ping -q -c 1 -w 1 $1 >/dev/null; then
+       if [ x$new_ip_address != x$alias_ip_address ] && \
+ 			[ x$alias_ip_address != x ]; then
+ 	ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+--- a/client/scripts/freebsd
++++ b/client/scripts/freebsd
+@@ -284,7 +284,7 @@ if [ x$reason = xTIMEOUT ]; then
+   if [ -n "$new_routers" ]; then
+     $LOGGER "New Routers: $new_routers"
+     set -- $new_routers
+-    if ping -q -c 1 $1; then
++    if ping -q -c 1 $1 >/dev/null; then
+       if [ x$new_ip_address != x$alias_ip_address ] && \
+ 			[ x$alias_ip_address != x ]; then
+ 	ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+--- a/client/scripts/linux
++++ b/client/scripts/linux
+@@ -253,7 +253,7 @@ if [ x$reason = xTIMEOUT ]; then
+   ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ 					$new_broadcast_arg $mtu_arg
+   set $new_routers
+-  if ping -q -c 1 $1; then
++  if ping -q -c 1 $1 >/dev/null; then
+     if [ x$new_ip_address != x$alias_ip_address ] && \
+ 			[ x$alias_ip_address != x ]; then
+       ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+--- a/client/scripts/netbsd
++++ b/client/scripts/netbsd
+@@ -251,7 +251,7 @@ if [ x$reason = xTIMEOUT ]; then
+   sleep 1
+   if [ "$new_routers" != "" ]; then
+     set $new_routers
+-    if ping -q -c 1 -w 1 $1; then
++    if ping -q -c 1 -w 1 $1 >/dev/null; then
+       if [ x$new_ip_address != x$alias_ip_address ] && \
+ 			[ x$alias_ip_address != x ]; then
+ 	ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+--- a/client/scripts/openbsd
++++ b/client/scripts/openbsd
+@@ -245,7 +245,7 @@ if [ x$reason = xTIMEOUT ]; then
+   sleep 1
+   if [ "$new_routers" != "" ]; then
+     set $new_routers
+-    if ping -q -c 1 -w 1 $1; then
++    if ping -q -c 1 -w 1 $1 >/dev/null; then
+       if [ x$new_ip_address != x$alias_ip_address ] && \
+ 			[ x$alias_ip_address != x ]; then
+ 	ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+--- a/client/scripts/openwrt
++++ b/client/scripts/openwrt
+@@ -186,7 +186,7 @@ if [ x$reason = xTIMEOUT ]; then
+   ifconfig $interface $new_ip_address $new_subnet_arg \
+ 				$new_broadcast_arg $mtu_arg $metric_arg
+   set $new_routers
+-  if ping -q -c 1 $1; then
++  if ping -q -c 1 $1 >/dev/null; then
+     if [ x$new_ip_address != x$alias_ip_address ] && \
+ 			[ x$alias_ip_address != x ]; then
+       ifconfig $interface:0 $alias_ip_address $alias_subnet_arg

diff --git a/net-misc/dhcp/files/dhcp-4.2.5-bindtodevice-inet6.patch b/net-misc/dhcp/files/dhcp-4.2.5-bindtodevice-inet6.patch
new file mode 100644
index 0000000..77254c3
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.5-bindtodevice-inet6.patch
@@ -0,0 +1,19 @@
+https://bugs.gentoo.org/471142
+
+snipped from fedora
+
+# dhclient -6: bind socket to interface (#1001742)
+# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #34784])
+
+diff -up dhcp-4.2.5/common/socket.c.bindtodevice_inet6 dhcp-4.2.5/common/socket.c
+--- dhcp-4.2.5/common/socket.c.bindtodevice_inet6	2013-09-17 16:47:05.000000000 +0200
++++ dhcp-4.2.5/common/socket.c	2013-09-17 16:48:18.975997842 +0200
+@@ -245,7 +245,7 @@ if_register_socket(struct interface_info
+ 
+ #if defined(SO_BINDTODEVICE)
+ 	/* Bind this socket to this interface. */
+-	if ((local_family != AF_INET6) && (info->ifp != NULL) &&
++	if (((do_multicast == 0)||(*do_multicast == 0)) && (info->ifp != NULL) &&
+ 	    setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE,
+ 			(char *)(info -> ifp), sizeof(*(info -> ifp))) < 0) {
+ 		log_fatal("setsockopt: SO_BINDTODEVICE: %m");

diff --git a/net-misc/dhcp/files/dhcp-4.2.5-iproute2-path.patch b/net-misc/dhcp/files/dhcp-4.2.5-iproute2-path.patch
new file mode 100644
index 0000000..ea223ed
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.2.5-iproute2-path.patch
@@ -0,0 +1,15 @@
+find `ip` via $PATH and not hardcoded path
+
+https://bugs.gentoo.org/480636
+
+--- a/client/scripts/linux
++++ b/client/scripts/linux
+@@ -23,7 +23,7 @@
+ # of the $1 in its args.
+ 
+ # 'ip' just looks too weird.  /sbin/ip looks less weird.
+-ip=/sbin/ip
++ip=ip
+ 
+ make_resolv_conf() {
+   if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then

diff --git a/net-misc/dhcp/files/dhcp-4.3.1-dhclient-resolvconf.patch b/net-misc/dhcp/files/dhcp-4.3.1-dhclient-resolvconf.patch
new file mode 100644
index 0000000..71d3f2c
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.3.1-dhclient-resolvconf.patch
@@ -0,0 +1,411 @@
+resolvconf support in dhclient-script
+
+--- a/client/scripts/bsdos
++++ b/client/scripts/bsdos
+@@ -1,40 +1,46 @@
+ #!/bin/sh
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+     if [ "x$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_search}\n"
+     elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >> /etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       case $nameserver in
+ 	  fe80:*) zone_id="%$interface";;
+ 	  FE80:*) zone_id="%$interface";;
+ 	  *)      zone_id="";;
+       esac
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/freebsd
++++ b/client/scripts/freebsd
+@@ -11,73 +11,45 @@
+ fi
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    ( cat /dev/null > /etc/resolv.conf.dhclient )
+-    exit_status=$?
+-    if [ $exit_status -ne 0 ]; then
+-      $LOGGER "Unable to create /etc/resolv.conf.dhclient: Error $exit_status"
+-    else
+-      if [ "x$new_domain_search" != x ]; then
+-	( echo search $new_domain_search >> /etc/resolv.conf.dhclient )
+-	exit_status=$?
+-      elif [ "x$new_domain_name" != x ]; then
+-	# Note that the DHCP 'Domain Name Option' is really just a domain
+-	# name, and that this practice of using the domain name option as
+-	# a search path is both nonstandard and deprecated.
+-	( echo search $new_domain_name >> /etc/resolv.conf.dhclient )
+-	exit_status=$?
+-      fi
+-      for nameserver in $new_domain_name_servers; do
+-	if [ $exit_status -ne 0 ]; then
+-	  break
+-	fi
+-	( echo nameserver $nameserver >>/etc/resolv.conf.dhclient )
+-	exit_status=$?
+-      done
+-
+-      # If there were no errors, attempt to mv the new file into place.
+-      if [ $exit_status -eq 0 ]; then
+-	( mv /etc/resolv.conf.dhclient /etc/resolv.conf )
+-	exit_status=$?
+-      fi
+-
+-      if [ $exit_status -ne 0 ]; then
+-	$LOGGER "Error while writing new /etc/resolv.conf."
+-      fi
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
++      # Note that the DHCP 'Domain Name Option' is really just a domain
++      # name, and that this practice of using the domain name option as
++      # a search path is both nonstandard and deprecated.
++      conf="${conf}search ${new_domain_name}\n"
+     fi
++    for nameserver in $new_domain_name_servers; do
++      conf="${conf}nameserver ${nameserver}\n"
++    done
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    ( cat /dev/null > /etc/resolv.conf.dhclient6 )
+-    exit_status=$?
+-    if [ $exit_status -ne 0 ] ; then
+-      $LOGGER "Unable to create /etc/resolv.conf.dhclient6: Error $exit_status"
+-    else
+-      if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-	( echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 )
+-	exit_status=$?
+-      fi
+-      for nameserver in ${new_dhcp6_name_servers} ; do
+-	if [ $exit_status -ne 0 ] ; then
+-	  break
+-	fi
+ 	# If the nameserver has a link-local address
+ 	# add a <zone_id> (interface name) to it.
+ 	case $nameserver in
+ 	    fe80:*) zone_id="%$interface";;
+ 	    FE80:*) zone_id="%$interface";;
+ 	    *)      zone_id="";;
+ 	esac
+-	( echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 )
+-	exit_status=$?
+-      done
+-
+-      if [ $exit_status -eq 0 ] ; then
+-        ( mv /etc/resolv.conf.dhclient6 /etc/resolv.conf )
+-	exit_status=$?
+-      fi
++    if [ "x${new_dhcp6_domain_search}" != x ] ; then
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
++    fi
++    for nameserver in ${new_dhcp6_name_servers} ; do
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
++    done
++  fi
+ 
+-      if [ $exit_status -ne 0 ] ; then
+-	$LOGGER "Error while writing new /etc/resolv.conf."
+-      fi
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
+     fi
+   fi
+ }
+--- a/client/scripts/linux
++++ b/client/scripts/linux
+@@ -26,44 +26,49 @@
+ ip=/sbin/ip
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    chmod 644 /etc/resolv.conf.dhclient
+-    if [ x"$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ x"$new_domain_name" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     shopt -s nocasematch 
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       if  [[ "$nameserver" =~ ^fe80:: ]]
+       then
+ 	zone_id="%$interface"
+       else
+ 	zone_id=
+       fi
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
+     shopt -u nocasematch 
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/netbsd
++++ b/client/scripts/netbsd
+@@ -1,40 +1,46 @@
+ #!/bin/sh
+ 
+ make_resolv_conf() {
+-  if [ "x$new_domain_name" != x ] && [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    if [ "x$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ "x$new_domain_name" != x ]; then
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
++  if [ x"$new_domain_name_servers" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       case $nameserver in
+ 	fe80:*) zone_id="%$interface";;
+ 	FE80:*) zone_id="%$interface";;
+ 	*)      zone_id="";;
+       esac
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/openbsd
++++ b/client/scripts/openbsd
+@@ -1,40 +1,46 @@
+ #!/bin/sh
+ 
+ make_resolv_conf() {
+-  if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    if [ x"$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ x"$new_domain_name" != x ]; then
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
++  if [ x"$new_domain_name_servers" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
+     done
+-
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+-    cat /dev/null > /etc/resolv.conf.dhclient6
+-    chmod 644 /etc/resolv.conf.dhclient6
+-
+     if [ "x${new_dhcp6_domain_search}" != x ] ; then
+-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
+     fi
+     for nameserver in ${new_dhcp6_name_servers} ; do
+       # If the nameserver has a link-local address
+       # add a <zone_id> (interface name) to it.
+       case $nameserver in
+ 	fe80:*) zone_id="%$interface";;
+ 	FE80:*) zone_id="%$interface";;
+ 	*)      zone_id="";;
+       esac
+-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
++      conf="${conf}nameserver ${nameserver}$zone_id\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 
+--- a/client/scripts/solaris
++++ b/client/scripts/solaris
+@@ -1,21 +1,39 @@
+ #!/bin/sh  
+ 
+ make_resolv_conf() {
++  if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
++    return 0
++  fi
++  local conf=
+   if [ x"$new_domain_name_servers" != x ]; then
+-    cat /dev/null > /etc/resolv.conf.dhclient
+-    if [ x"$new_domain_search" != x ]; then
+-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+-    elif [ x"$new_domain_name" != x ]; then
++    if [ "x$new_domain_search" != x ]; then
++      conf="${conf}search ${new_domain_search}\n"
++    elif [ "x$new_domain_name" != x ]; then
+       # Note that the DHCP 'Domain Name Option' is really just a domain
+       # name, and that this practice of using the domain name option as
+       # a search path is both nonstandard and deprecated.
+-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
++      conf="${conf}search ${new_domain_name}\n"
+     fi
+     for nameserver in $new_domain_name_servers; do
+-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
++      conf="${conf}nameserver ${nameserver}\n"
++    done
++  elif [ "x${new_dhcp6_name_servers}" != x ] ; then
++    if [ "x${new_dhcp6_domain_search}" != x ] ; then
++      conf="${conf}search ${new_dhcp6_domain_search}\n"
++    fi
++    for nameserver in ${new_dhcp6_name_servers} ; do
++      conf="${conf}nameserver ${nameserver}\n"
+     done
++  fi
+ 
+-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
++  if [ x"$conf" != x ]; then
++    conf="# Generated by dhclient or interface $interface\n${conf}"
++    if type resolvconf >/dev/null 2>&1; then
++      printf "${conf}" | resolvconf -a $interface
++    else
++      printf "${conf}" > /etc/resolv.conf
++      chmod 644 /etc/resolv.conf
++    fi
+   fi
+ }
+ 

diff --git a/net-misc/dhcp/files/dhcp-4.3.2-fix-compilation-for-musl.patch b/net-misc/dhcp/files/dhcp-4.3.2-fix-compilation-for-musl.patch
new file mode 100644
index 0000000..841f727
--- /dev/null
+++ b/net-misc/dhcp/files/dhcp-4.3.2-fix-compilation-for-musl.patch
@@ -0,0 +1,44 @@
+diff -Naur dhcp-4.3.2.orig/dst/dst_api.c dhcp-4.3.2/dst/dst_api.c
+--- dhcp-4.3.2.orig/dst/dst_api.c	2015-02-26 20:35:43.000000000 +0100
++++ dhcp-4.3.2/dst/dst_api.c	2015-05-19 01:11:22.520053688 +0200
+@@ -49,6 +49,7 @@
+ #include <sys/param.h>
+ #include <sys/stat.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
+ #include <netinet/in.h>
+ 
+ #include "cdefs.h"
+diff -Naur dhcp-4.3.2.orig/dst/dst_internal.h dhcp-4.3.2/dst/dst_internal.h
+--- dhcp-4.3.2.orig/dst/dst_internal.h	2015-02-26 20:35:43.000000000 +0100
++++ dhcp-4.3.2/dst/dst_internal.h	2015-05-19 01:02:22.090054505 +0200
+@@ -20,6 +20,7 @@
+  */
+ #include <limits.h>
+ #include <sys/param.h>
++#include <sys/types.h>
+ 
+ #ifndef PATH_MAX
+ # ifdef POSIX_PATH_MAX
+diff -Naur dhcp-4.3.2.orig/dst/dst_support.c dhcp-4.3.2/dst/dst_support.c
+--- dhcp-4.3.2.orig/dst/dst_support.c	2015-02-26 20:35:43.000000000 +0100
++++ dhcp-4.3.2/dst/dst_support.c	2015-05-19 01:10:29.790053768 +0200
+@@ -25,6 +25,7 @@
+ #include <sys/stat.h>
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
+ 
+ #include "cdefs.h"
+ #include "osdep.h"
+diff -Naur dhcp-4.3.2.orig/dst/hmac_link.c dhcp-4.3.2/dst/hmac_link.c
+--- dhcp-4.3.2.orig/dst/hmac_link.c	2015-02-26 20:35:43.000000000 +0100
++++ dhcp-4.3.2/dst/hmac_link.c	2015-05-19 01:12:14.190053610 +0200
+@@ -31,6 +31,7 @@
+ #include <sys/time.h>
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
+ 
+ #include "cdefs.h"
+ #include "osdep.h"

diff --git a/net-misc/dhcp/files/dhcpd.conf2 b/net-misc/dhcp/files/dhcpd.conf2
new file mode 100644
index 0000000..5cd2eec
--- /dev/null
+++ b/net-misc/dhcp/files/dhcpd.conf2
@@ -0,0 +1,28 @@
+# /etc/conf.d/dhcpd: config file for /etc/init.d/dhcpd
+
+# If you require more than one instance of dhcpd you can create symbolic
+# links to dhcpd service like so
+#   cd /etc/init.d
+#   ln -s dhcpd dhcpd.foo
+#   cd ../conf.d
+#   cp dhcpd dhcpd.foo
+# Now you can edit dhcpd.foo and specify a different configuration file.
+# You'll also need to specify a pidfile in that dhcpd.conf file.
+# See the pid-file-name option in the dhcpd.conf man page for details.
+
+# If you wish to run dhcpd in a chroot, uncomment the following line
+# DHCPD_CHROOT="/var/lib/dhcp/chroot"
+
+# All file paths below are relative to the chroot.
+# You can specify a different chroot directory but MAKE SURE it's empty.
+
+# Specify a configuration file - the default is /etc/dhcp/dhcpd.conf
+# DHCPD_CONF="/etc/dhcp/dhcpd.conf"
+
+# Configure which interface or interfaces to for dhcpd to listen on.
+# List all interfaces space separated. If this is not specified then
+# we listen on all interfaces.
+# DHCPD_IFACE=""
+
+# Insert any other dhcpd options - see the man page for a full list.
+# DHCPD_OPTS=""

diff --git a/net-misc/dhcp/files/dhcpd.init5 b/net-misc/dhcp/files/dhcpd.init5
new file mode 100755
index 0000000..65148e0
--- /dev/null
+++ b/net-misc/dhcp/files/dhcpd.init5
@@ -0,0 +1,115 @@
+#!/sbin/runscript
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/files/dhcpd.init5,v 1.6 2015/02/10 00:27:08 polynomial-c Exp $
+
+extra_commands="configtest"
+
+: ${DHCPD_CONF:=/etc/dhcp/${SVCNAME}.conf}
+
+depend() {
+	need net
+	use logger dns #@slapd@
+}
+
+get_var() {
+	local var="$(sed -n 's/^[[:blank:]]\?'"$1"' "*\([^#";]\+\).*/\1/p' "${chroot}${DHCPD_CONF}")"
+	echo ${var:-$2}
+}
+
+checkconfig() {
+	set -- ${DHCPD_OPTS} ${chroot:+-chroot} ${chroot} -t
+
+	dhcpd "$@" 1>/dev/null 2>&1
+	local ret=$?
+	if [ ${ret} -ne 0 ] ; then
+		eerror "${SVCNAME} has detected a syntax error in your configuration files:"
+		dhcpd "$@"
+	fi
+
+	return ${ret}
+}
+
+configtest() {
+	local chroot=${DHCPD_CHROOT%/}
+
+	ebegin "Checking ${SVCNAME} configuration"
+	checkconfig
+	eend $?
+}
+
+start() {
+	local chroot=${DHCPD_CHROOT%/}
+
+	# Work out our cffile if it's in our DHCPD_OPTS
+	case " ${DHCPD_OPTS} " in
+		*" -cf "*)
+			DHCPD_CONF=" ${DHCPD_OPTS} "
+			DHCPD_CONF="${DHCPD_CONF##* -cf }"
+			DHCPD_CONF="${DHCPD_CONF%% *}"
+			;;
+		*)	DHCPD_OPTS="${DHCPD_OPTS} -cf ${DHCPD_CONF}"
+			;;
+	esac
+
+	if [ -n "${chroot}" ] ; then
+		# the config test want's these to exist
+		mkdir -p \
+			"${chroot}"/var/run/dhcp \
+			"${chroot}"/var/lib/dhcp \
+			"${chroot}"/etc/dhcp
+	fi
+
+	# see comment in get_var() above
+	if [ ! -f "${chroot}${DHCPD_CONF}" ] ; then
+		eerror "${chroot}${DHCPD_CONF} does not exist"
+		return 1
+	fi
+
+	checkconfig || return 1
+
+	checkpath -d -o dhcp:dhcp "${chroot}"/var/run/dhcp "${chroot}"/var/lib/dhcp
+
+	local leasefile="$(get_var lease-file-name /var/lib/dhcp/${SVCNAME}.leases)"
+	checkpath -f -o dhcp:dhcp "${chroot}${leasefile}"
+
+	# Setup LD_PRELOAD so name resolution works in our chroot.
+	if [ -n "${chroot}" ] ; then
+		checkpath -d -o root:root -m 755 "${chroot}"/dev "${chroot}"/etc "${chroot}"/proc
+		cp -pP /etc/localtime /etc/resolv.conf "${chroot}"/etc/
+		export LD_PRELOAD="${LD_PRELOAD} libresolv.so libnss_dns.so"
+		if ! mountinfo -q "${chroot}/proc" ; then
+			mount --bind /proc "${chroot}/proc"
+		fi
+	fi
+
+	local pidfile="$(get_var pid-file-name /var/run/dhcp/${SVCNAME}.pid)"
+
+	ebegin "Starting ${chroot:+chrooted }${SVCNAME}"
+	start-stop-daemon --start --exec /usr/sbin/dhcpd \
+		--pidfile "${chroot}/${pidfile}" \
+		-- ${DHCPD_OPTS} -q -pf "${pidfile}" -lf "${leasefile}" \
+		-user dhcp -group dhcp \
+		${chroot:+-chroot} ${chroot} ${DHCPD_IFACE}
+	eend $? \
+		&& save_options dhcpd_chroot "${chroot}" \
+		&& save_options pidfile "${pidfile}"
+}
+
+stop() {
+	local chroot="$(get_options dhcpd_chroot)"
+	[ -z "$chroot" ] && chroot="$(get_options chroot)"
+
+	ebegin "Stopping ${chroot:+chrooted }${SVCNAME}"
+	start-stop-daemon --stop --exec /usr/sbin/dhcpd \
+		--pidfile "${chroot}/$(get_options pidfile)"
+	res=$?
+
+	if [ ${res} -eq 0 ] && [ -n "${chroot}" ] ; then
+		if mountinfo -q "${chroot}/proc" ; then
+			umount "${chroot}/proc"
+		fi
+	fi
+
+	eend $res
+}

diff --git a/net-misc/dhcp/files/dhcpd.tmpfiles b/net-misc/dhcp/files/dhcpd.tmpfiles
new file mode 100644
index 0000000..ee2f4de
--- /dev/null
+++ b/net-misc/dhcp/files/dhcpd.tmpfiles
@@ -0,0 +1,2 @@
+d /var/lib/dhcp/ 0755 dhcp dhcp
+f /var/lib/dhcp/dhcpd.leases 0644 dhcp dhcp
\ No newline at end of file

diff --git a/net-misc/dhcp/files/dhcpd4.service b/net-misc/dhcp/files/dhcpd4.service
new file mode 100644
index 0000000..b064bd9
--- /dev/null
+++ b/net-misc/dhcp/files/dhcpd4.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=DHCPv4 Server Daemon
+Documentation=man:dhcpd(8) man:dhcpd.conf(5)
+After=network.target
+After=time-sync.target
+
+[Service]
+ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcp -group dhcp --no-pid
+
+[Install]
+WantedBy=multi-user.target

diff --git a/net-misc/dhcp/files/dhcpd6.service b/net-misc/dhcp/files/dhcpd6.service
new file mode 100644
index 0000000..603cacd
--- /dev/null
+++ b/net-misc/dhcp/files/dhcpd6.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=DHCPv6 Server Daemon
+Documentation=man:dhcpd(8) man:dhcpd.conf(5)
+After=network.target
+After=time-sync.target
+
+[Service]
+ExecStart=/usr/sbin/dhcpd -f -s -6 -cf /etc/dhcp/dhcpd.conf -user dhcp -group dhcp --no-pid
+
+[Install]
+WantedBy=multi-user.target

diff --git a/net-misc/dhcp/files/dhcrelay.conf b/net-misc/dhcp/files/dhcrelay.conf
new file mode 100644
index 0000000..4469968
--- /dev/null
+++ b/net-misc/dhcp/files/dhcrelay.conf
@@ -0,0 +1,16 @@
+# /etc/conf.d/dhcrelay: config file for /etc/init.d/dhcrelay
+
+# Configure which interface or interfaces to for dhcrelay to listen on
+# and send to.
+# List all interfaces space separated. If this is not specified then
+# we use all interfaces.
+#IFACE=""
+# If you have split net interfaces, you might want to depend on them
+# explicitly here.
+#rc_need=$(printf 'net.%s ' ${IFACE})
+
+# Insert any other options needed.  See dhcrelay(8) for details.
+#DHCRELAY_OPTS=""
+
+# Space separated list of IPs to forward BOOTP/DHCP packets to.
+DHCRELAY_SERVERS=""

diff --git a/net-misc/dhcp/files/dhcrelay.init3 b/net-misc/dhcp/files/dhcrelay.init3
new file mode 100755
index 0000000..fe4ec8c
--- /dev/null
+++ b/net-misc/dhcp/files/dhcrelay.init3
@@ -0,0 +1,34 @@
+#!/sbin/runscript
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/files/dhcrelay.init3,v 1.3 2012/11/11 21:42:02 vapier Exp $
+
+depend() {
+	need net
+	use logger #@slapd@
+}
+
+start() {
+	if [ -z "${DHCRELAY_SERVERS}" ] ; then
+		eerror "No DHCRELAY_SERVERS specified in /etc/conf.d/${SVCNAME}"
+		return 1
+	fi
+
+	checkpath -d /var/run/dhcp
+
+	local iface_opts
+	if [ -n "${IFACE}" ] ; then
+		iface_opts=$(printf -- '-i %s ' ${IFACE})
+	fi
+
+	ebegin "Starting ${SVCNAME}"
+	start-stop-daemon --start --exec /usr/sbin/dhcrelay \
+		-- -q ${iface_opts} ${DHCRELAY_OPTS} ${DHCRELAY_SERVERS}
+	eend $?
+}
+
+stop() {
+	ebegin "Stopping ${SVCNAME}"
+	start-stop-daemon --stop --pidfile /var/run/dhcp/${SVCNAME}.pid
+	eend $?
+}

diff --git a/net-misc/dhcp/files/dhcrelay4.service b/net-misc/dhcp/files/dhcrelay4.service
new file mode 100644
index 0000000..09e835d
--- /dev/null
+++ b/net-misc/dhcp/files/dhcrelay4.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=DHCP Relay Agent Daemon
+Documentation=man:dhcrelay(8)
+After=network.target
+
+[Service]
+ExecStart=/usr/sbin/dhcrelay -d --no-pid $DHCRELAY_SERVERS
+
+[Install]
+WantedBy=multi-user.target

diff --git a/net-misc/dhcp/files/dhcrelay4.service.conf b/net-misc/dhcp/files/dhcrelay4.service.conf
new file mode 100644
index 0000000..1a0465b
--- /dev/null
+++ b/net-misc/dhcp/files/dhcrelay4.service.conf
@@ -0,0 +1,3 @@
+# Space separated list of IPs to forward BOOTP/DHCP packets to.
+[Service]
+Environment="DHCRELAY_SERVERS="
\ No newline at end of file

diff --git a/net-misc/dhcp/files/dhcrelay6.conf b/net-misc/dhcp/files/dhcrelay6.conf
new file mode 100644
index 0000000..4e8b8c6
--- /dev/null
+++ b/net-misc/dhcp/files/dhcrelay6.conf
@@ -0,0 +1,8 @@
+# /etc/conf.d/dhcrelay6: config file for /etc/init.d/dhcrelay6
+
+# Insert any other options needed.  See dhcrelay(8) for details.
+# Make sure you specify the lower (-l)/upper (-u) interfaces.
+DHCRELAY_OPTS="-6 -l lower-iface -u upper-iface"
+
+# Space separated list of IPs to forward BOOTP/DHCP packets to.
+DHCRELAY_SERVERS=""

diff --git a/net-misc/dhcp/files/dhcrelay6.service b/net-misc/dhcp/files/dhcrelay6.service
new file mode 100644
index 0000000..1e5e498
--- /dev/null
+++ b/net-misc/dhcp/files/dhcrelay6.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=DHCP Relay Agent Daemon
+Documentation=man:dhcrelay(8)
+After=network.target
+
+[Service]
+ExecStart=/usr/sbin/dhcrelay -d --no-pid -6 -l $lower-iface -u $upper-iface $DHCRELAY_SERVERS
+
+[Install]
+WantedBy=multi-user.target

diff --git a/net-misc/dhcp/files/dhcrelay6.service.conf b/net-misc/dhcp/files/dhcrelay6.service.conf
new file mode 100644
index 0000000..ae293ab
--- /dev/null
+++ b/net-misc/dhcp/files/dhcrelay6.service.conf
@@ -0,0 +1,6 @@
+[Service]
+# Space separated list of IPs to forward BOOTP/DHCP packets to
+Environment="DHCRELAY_SERVERS="
+# Make sure you specify the lower (-l)/upper (-u) interfaces
+Environment="lower-iface="
+Environment="upper-iface="

diff --git a/net-misc/dhcp/metadata.xml b/net-misc/dhcp/metadata.xml
new file mode 100644
index 0000000..9ee6944
--- /dev/null
+++ b/net-misc/dhcp/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<herd>base-system</herd>
+	<longdescription lang="en">The ISC DHCP client/server package.</longdescription>
+	<longdescription lang="ja">ISC DHCP クライアント/サーバ・パッケージです。</longdescription>
+	<use>
+		<flag name='client'>Install the dhclient program</flag>
+		<flag name='server'>Install the dhcpd and dhcrelay programs</flag>
+	</use>
+	<upstream>
+		<remote-id type="cpe">cpe:/a:isc:dhcp</remote-id>
+	</upstream>
+</pkgmetadata>


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-05-22 11:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-22 11:30 [gentoo-commits] proj/hardened-dev:musl commit in: net-misc/dhcp/files/, net-misc/dhcp/ Anthony G. Basile

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox