From 0013096e4fc1cb6e2e8728ce10c7b65b4fc22358 Mon Sep 17 00:00:00 2001
From: Oliver Eikemeier <eik@FreeBSD.org>
Date: Fri, 25 Jun 2004 18:51:12 +0000
Subject: Grml. files forgotten in last commit.

---
 .../files/client::scripts::freebsd                 | 509 +++++++++++++++++++++
 net/isc-dhcp3-server/files/patch-freebsd           |  75 ---
 .../files/client::scripts::freebsd                 | 509 +++++++++++++++++++++
 net/isc-dhcp30-server/files/patch-freebsd          |  75 ---
 .../files/client::scripts::freebsd                 | 509 +++++++++++++++++++++
 net/isc-dhcp31-server/files/patch-freebsd          |  75 ---
 .../files/client::scripts::freebsd                 | 509 +++++++++++++++++++++
 net/isc-dhcp40-server/files/patch-freebsd          |  75 ---
 8 files changed, 2036 insertions(+), 300 deletions(-)
 create mode 100644 net/isc-dhcp3-server/files/client::scripts::freebsd
 delete mode 100644 net/isc-dhcp3-server/files/patch-freebsd
 create mode 100644 net/isc-dhcp30-server/files/client::scripts::freebsd
 delete mode 100644 net/isc-dhcp30-server/files/patch-freebsd
 create mode 100644 net/isc-dhcp31-server/files/client::scripts::freebsd
 delete mode 100644 net/isc-dhcp31-server/files/patch-freebsd
 create mode 100644 net/isc-dhcp40-server/files/client::scripts::freebsd
 delete mode 100644 net/isc-dhcp40-server/files/patch-freebsd

diff --git a/net/isc-dhcp3-server/files/client::scripts::freebsd b/net/isc-dhcp3-server/files/client::scripts::freebsd
new file mode 100644
index 000000000000..ceaeb950d2d5
--- /dev/null
+++ b/net/isc-dhcp3-server/files/client::scripts::freebsd
@@ -0,0 +1,509 @@
+#!/bin/sh
+
+#############################################################################
+#
+# Copyright (c) 1999, MindStep Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+#############################################################################
+#
+# This script was written by Patrick Bihan-Faou, patrick@mindstep.com,
+# Please contact us for bug reports, etc.
+#
+#############################################################################
+# $MindStep_Id: dhclient-script.sh,v 1.8 1999/12/07 22:11:08 patrick Exp $
+# $MindStep_Tag: CONTRIB_19991207 $
+# $FreeBSD$
+#############################################################################
+
+
+#############################################################################
+# hook functions prototypes
+#
+# The "pre_state_XXX_hook" functions are called before the main
+# work is done for the state XXX
+#
+# The "post_state_XXX_hook" functions are called after the main
+# work is done for the state XXX
+#
+# These functions are meant to be overridden by the user's
+# dhclient-enter-hooks file
+#############################################################################
+
+pre_state_MEDIUM_hook () { }
+pre_state_PREINIT_hook () { }
+pre_state_ARPCHECK_hook () { }
+pre_state_ARPSEND_hook () { }
+pre_state_RENEW_hook () { }
+pre_state_REBIND_hook () { }
+pre_state_BOUND_hook () { }
+pre_state_REBOOT_hook () { }
+pre_state_EXPIRE_hook () { }
+pre_state_FAIL_hook () { }
+pre_state_TIMEOUT_hook () { }
+post_state_MEDIUM_hook () { }
+post_state_PREINIT_hook () { }
+post_state_ARPCHECK_hook () { }
+post_state_ARPSEND_hook () { }
+post_state_RENEW_hook () { }
+post_state_REBIND_hook () { }
+post_state_BOUND_hook () { }
+post_state_REBOOT_hook () { }
+post_state_EXPIRE_hook () { }
+post_state_FAIL_hook () { }
+post_state_TIMEOUT_hook () { }
+
+#############################################################################
+# make_resolv_conf
+#
+# This function is called to update the information related to the
+# DNS configuration (the resolver part)
+#############################################################################
+make_resolv_conf () 
+{
+   if [ "x$new_domain_name" != x ] && [ "x$new_domain_name_servers" != x ]; then
+     echo search $new_domain_name >/etc/resolv.conf
+     for nameserver in $new_domain_name_servers; do
+       echo nameserver $nameserver >>/etc/resolv.conf
+     done
+   fi
+}
+
+#############################################################################
+# set_XXX
+# unset_XXX
+#
+# These function each deal with one particular setting.
+# They are OS dependent and may be overridden in the 
+# dhclient-enter-hooks file if needed.
+#
+# These functions are called with either "new" or "old" to indicate which
+# set of variables to use (new_ip_address or old_ip_address...)
+#
+#############################################################################
+
+update_hostname ()
+{
+	local current_hostname=`/bin/hostname`
+
+  	if	[ "$current_hostname" = "" ] || \
+		[ "$current_hostname" = "$old_host_name" ]
+	then
+		if [ "$new_host_name" != "$old_host_name" ]
+		then
+			$LOGGER "New Hostname: $new_host_name"
+			hostname $new_host_name
+		fi
+	fi
+}
+
+set_ip_address () 
+{
+	local ip
+	local mask
+	local bcast
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+	eval mask="\$${1}_subnet_mask"
+	eval bcast="\$${1}_broadcast_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet $ip netmask $mask broadcast $bcast $medium
+#		route add $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+unset_ip_address () 
+{
+	local ip
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet -alias $ip $medium
+#		route delete $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet alias $alias_ip_address netmask $alias_subnet_mask
+#		route add $alias_ip_address 127.0.0.1
+	fi
+}
+
+unset_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
+#		route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route add default $router >/dev/null 2>&1
+	done
+}
+
+unset_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route delete default $router >/dev/null 2>&1
+	done
+}
+
+set_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		$LOGGER "New Static Route: $1 -> $2"
+		route add $1 $2
+		shift; shift
+	done
+}
+
+unset_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		route delete $1 $2
+		shift; shift
+	done
+}
+
+#############################################################################
+#
+# utility functions grouping what needs to be done in logical units.
+#
+#############################################################################
+
+set_all ()
+{
+	set_ip_address new
+	set_routers new
+	set_static_routes new
+
+	if	[ "$new_ip_address" != "$alias_ip_address" ]
+	then
+		set_ip_alias
+	fi
+}
+
+set_others ()
+{
+	update_hostname
+	make_resolv_conf
+}
+
+clear_arp_table () 
+{
+	arp -d -a
+}
+
+unset_all ()
+{
+	if [ "$alias_ip_address" != "$old_ip_address" ]
+	then
+		unset_ip_alias
+	fi
+
+	if [ "$old_ip_address" != "" ] 
+	then
+		unset_ip_address old
+		unset_routers old
+		unset_static_routes old
+		clear_arp_table
+	fi
+}
+
+test_new_lease () 
+{
+	local rc
+
+	set $new_routers
+
+	if [ $# -ge 1 ]
+	then
+		set_ip_address new
+		if ping -q -c 1 $1
+		then
+			rc=0
+		else
+			rc=1
+		fi
+		unset_ip_address new
+	else
+		rc=1
+	fi
+	return  $rc
+}
+
+#############################################################################
+# Main State functions.
+#
+# There is a state function for each state of the DHCP client
+# These functions are OS specific and should be be tampered with.
+#############################################################################
+
+in_state_MEDIUM () 
+{
+  ifconfig $interface $medium
+  ifconfig $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1
+  sleep 1
+  exit_status=0
+}
+
+in_state_PREINIT () 
+{
+	unset_ip_alias
+
+	ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
+			broadcast 255.255.255.255 up
+	exit_status=0
+}
+
+in_state_ARPCHECK () 
+{
+  exit_status=0
+}
+
+in_state_ARPSEND () 
+{
+  exit_status=0
+}
+
+in_state_RENEW () 
+{
+	if [ "$old_ip_address" != "$new_ip_address" ]
+	then
+		unset_all
+		set_all
+	fi
+
+	set_others
+}
+
+in_state_REBIND () {
+	in_state_RENEW
+}
+
+in_state_BOUND () {
+	unset_all
+	set_all
+	set_others
+}
+
+in_state_REBOOT () {
+	in_state_BOUND
+}
+
+in_state_EXPIRE () 
+{
+	unset_all
+	set_ip_alias
+	exit_status=0
+}
+
+in_state_FAIL () {
+	in_state_EXPIRE
+}
+
+in_state_TIMEOUT () 
+{
+	unset_all
+
+	if test_new_lease
+	then
+		set_all
+		set_others
+	else
+	 	$LOGGER "No good lease information in TIMEOUT state"	
+		set_ip_alias
+		exit_status=1
+	fi
+}
+
+#############################################################################
+# Main functions:
+#
+# dhclient_script_init() parses the optional "enter_hooks" script which can
+#   override any of the state functions
+#
+# This function also parses the variables and notifies the detected changes.
+#############################################################################
+dhclient_script_init ()
+{
+	if [ "$new_network_number" != "" ]
+	then
+		$LOGGER "New Network Number: $new_network_number"
+	fi
+
+	if [ "$new_ip_address" != "" ]
+	then
+		$LOGGER "New IP Address: $new_ip_address"
+	fi
+
+	if [ "$new_broadcast_address" != "" ]
+	then
+		$LOGGER "New Broadcast Address: $new_broadcast_address"
+	fi
+
+	if [ "$new_subnet_mask" != "" ]
+	then
+		$LOGGER "New Subnet Mask for $interface: $new_subnet_mask"
+	fi
+
+	if [ "$alias_subnet_mask" != "" ]
+	then
+	fi
+}
+
+#############################################################################
+# dhclient_main() does the appropriate work depending on the state of
+# the dhcp client
+#############################################################################
+dhclient_script_main ()
+{
+#	set -x
+	exit_status=0
+
+	case $reason in
+		MEDIUM|\
+		PREINIT|\
+		ARPCHECK|\
+		ARPSEND|\
+		RENEW|\
+		REBIND|\
+		BOUND|\
+		REBOOT|\
+		EXPIRE|\
+		FAIL|\
+		TIMEOUT)
+			pre_state_${reason}_hook
+			in_state_${reason}
+			post_state_${reason}_hook
+			;;
+		*)
+			$LOGGER "dhclient-script called with invalid reason $reason"
+			exit_status=1
+			;;
+	esac
+}
+
+#############################################################################
+# Let's do the work...
+#############################################################################
+
+if [ -x /usr/bin/logger ]; then
+	LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
+else
+	LOGGER=echo
+fi
+
+# Invoke the local dhcp client enter hooks, if they exist.
+if [ -x %%PREFIX%%/etc/dhclient-enter-hooks ]
+then
+	exit_status=0
+	. %%PREFIX%%/etc/dhclient-enter-hooks
+	# allow the local script to abort processing of this state
+	# local script must set exit_status variable to nonzero.
+	if [ $exit_status -ne 0 ]
+	then
+		exit $exit_status
+	fi
+fi
+
+dhclient_script_init
+dhclient_script_main
+
+# Invokes the local dhcp client exit hooks, if any.
+if [ -x %%PREFIX%%/etc/dhclient-exit-hooks ]; then
+	. %%PREFIX%%/etc/dhclient-exit-hooks
+fi
+
+exit $exit_status
+
+#############################################################################
+# That's all folks
+#############################################################################
diff --git a/net/isc-dhcp3-server/files/patch-freebsd b/net/isc-dhcp3-server/files/patch-freebsd
deleted file mode 100644
index 9fef4fdab877..000000000000
--- a/net/isc-dhcp3-server/files/patch-freebsd
+++ /dev/null
@@ -1,75 +0,0 @@
---- client/scripts/freebsd.orig	Sun Apr 27 21:44:01 2003
-+++ client/scripts/freebsd	Wed Mar  3 02:28:29 2004
-@@ -16,7 +16,7 @@
-       ( echo search $new_domain_name >/etc/resolv.conf )
-       exit_status=$?
-     else
--      rm /etc/resolv.conf
-+      ( rm /etc/resolv.conf )
-       exit_status=$?
-     fi
-     if [ $exit_status -ne 0 ]; then
-@@ -32,17 +32,17 @@
- # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
- exit_with_hooks() {
-   exit_status=$1
--  if [ -f /etc/dhclient-exit-hooks ]; then
--    . /etc/dhclient-exit-hooks
-+  if [ -f %%PREFIX%%/etc/dhclient-exit-hooks ]; then
-+    . %%PREFIX%%/etc/dhclient-exit-hooks
-   fi
- # probably should do something with exit status of the local script
-   exit $exit_status
- }
- 
- # Invoke the local dhcp client enter hooks, if they exist.
--if [ -f /etc/dhclient-enter-hooks ]; then
-+if [ -f %%PREFIX%%/etc/dhclient-enter-hooks ]; then
-   exit_status=0
--  . /etc/dhclient-enter-hooks
-+  . %%PREFIX%%/etc/dhclient-enter-hooks
-   # allow the local script to abort processing of this state
-   # local script must set exit_status variable to nonzero.
-   if [ $exit_status -ne 0 ]; then
-@@ -51,11 +51,11 @@
- fi
- 
- if [ x$new_network_number != x ]; then
--   $LOGGER New Network Number: $new_network_number
-+  $LOGGER "New Network Number: $new_network_number"
- fi
- 
- if [ x$new_broadcast_address != x ]; then
-- $LOGGER New Broadcast Address: $new_broadcast_address
-+  $LOGGER "New Broadcast Address: $new_broadcast_address"
-   new_broadcast_arg="broadcast $new_broadcast_address"
- fi
- if [ x$old_broadcast_address != x ]; then
-@@ -71,6 +71,15 @@
-   alias_subnet_arg="netmask $alias_subnet_mask"
- fi
- 
-+# Get the interface to which our default route is bound to.
-+if [ -x /usr/bin/netstat ]; then
-+	if_defaultroute=`/usr/bin/netstat -rn \
-+		| /usr/bin/grep "^default" \
-+		| /usr/bin/awk '{print $6}'`
-+else
-+	if_defaultroute=""
-+fi
-+
- if [ x$reason = xMEDIUM ]; then
-   eval "ifconfig $interface $medium"
-   eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
-@@ -113,7 +122,10 @@
-     eval "ifconfig $interface inet -alias $old_ip_address $medium"
-     route delete $old_ip_address 127.1 >/dev/null 2>&1
-     for router in $old_routers; do
--      route delete default $router >/dev/null 2>&1
-+	if [ x$if_defaultroute = x ] || [ x$if_defaultroute = x$interface ]
-+	 then
-+	      route delete default $router >/dev/null 2>&1
-+	fi
-     done
-     if [ -n "$old_static_routes" ]; then
-       set -- $old_static_routes
diff --git a/net/isc-dhcp30-server/files/client::scripts::freebsd b/net/isc-dhcp30-server/files/client::scripts::freebsd
new file mode 100644
index 000000000000..ceaeb950d2d5
--- /dev/null
+++ b/net/isc-dhcp30-server/files/client::scripts::freebsd
@@ -0,0 +1,509 @@
+#!/bin/sh
+
+#############################################################################
+#
+# Copyright (c) 1999, MindStep Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+#############################################################################
+#
+# This script was written by Patrick Bihan-Faou, patrick@mindstep.com,
+# Please contact us for bug reports, etc.
+#
+#############################################################################
+# $MindStep_Id: dhclient-script.sh,v 1.8 1999/12/07 22:11:08 patrick Exp $
+# $MindStep_Tag: CONTRIB_19991207 $
+# $FreeBSD$
+#############################################################################
+
+
+#############################################################################
+# hook functions prototypes
+#
+# The "pre_state_XXX_hook" functions are called before the main
+# work is done for the state XXX
+#
+# The "post_state_XXX_hook" functions are called after the main
+# work is done for the state XXX
+#
+# These functions are meant to be overridden by the user's
+# dhclient-enter-hooks file
+#############################################################################
+
+pre_state_MEDIUM_hook () { }
+pre_state_PREINIT_hook () { }
+pre_state_ARPCHECK_hook () { }
+pre_state_ARPSEND_hook () { }
+pre_state_RENEW_hook () { }
+pre_state_REBIND_hook () { }
+pre_state_BOUND_hook () { }
+pre_state_REBOOT_hook () { }
+pre_state_EXPIRE_hook () { }
+pre_state_FAIL_hook () { }
+pre_state_TIMEOUT_hook () { }
+post_state_MEDIUM_hook () { }
+post_state_PREINIT_hook () { }
+post_state_ARPCHECK_hook () { }
+post_state_ARPSEND_hook () { }
+post_state_RENEW_hook () { }
+post_state_REBIND_hook () { }
+post_state_BOUND_hook () { }
+post_state_REBOOT_hook () { }
+post_state_EXPIRE_hook () { }
+post_state_FAIL_hook () { }
+post_state_TIMEOUT_hook () { }
+
+#############################################################################
+# make_resolv_conf
+#
+# This function is called to update the information related to the
+# DNS configuration (the resolver part)
+#############################################################################
+make_resolv_conf () 
+{
+   if [ "x$new_domain_name" != x ] && [ "x$new_domain_name_servers" != x ]; then
+     echo search $new_domain_name >/etc/resolv.conf
+     for nameserver in $new_domain_name_servers; do
+       echo nameserver $nameserver >>/etc/resolv.conf
+     done
+   fi
+}
+
+#############################################################################
+# set_XXX
+# unset_XXX
+#
+# These function each deal with one particular setting.
+# They are OS dependent and may be overridden in the 
+# dhclient-enter-hooks file if needed.
+#
+# These functions are called with either "new" or "old" to indicate which
+# set of variables to use (new_ip_address or old_ip_address...)
+#
+#############################################################################
+
+update_hostname ()
+{
+	local current_hostname=`/bin/hostname`
+
+  	if	[ "$current_hostname" = "" ] || \
+		[ "$current_hostname" = "$old_host_name" ]
+	then
+		if [ "$new_host_name" != "$old_host_name" ]
+		then
+			$LOGGER "New Hostname: $new_host_name"
+			hostname $new_host_name
+		fi
+	fi
+}
+
+set_ip_address () 
+{
+	local ip
+	local mask
+	local bcast
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+	eval mask="\$${1}_subnet_mask"
+	eval bcast="\$${1}_broadcast_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet $ip netmask $mask broadcast $bcast $medium
+#		route add $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+unset_ip_address () 
+{
+	local ip
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet -alias $ip $medium
+#		route delete $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet alias $alias_ip_address netmask $alias_subnet_mask
+#		route add $alias_ip_address 127.0.0.1
+	fi
+}
+
+unset_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
+#		route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route add default $router >/dev/null 2>&1
+	done
+}
+
+unset_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route delete default $router >/dev/null 2>&1
+	done
+}
+
+set_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		$LOGGER "New Static Route: $1 -> $2"
+		route add $1 $2
+		shift; shift
+	done
+}
+
+unset_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		route delete $1 $2
+		shift; shift
+	done
+}
+
+#############################################################################
+#
+# utility functions grouping what needs to be done in logical units.
+#
+#############################################################################
+
+set_all ()
+{
+	set_ip_address new
+	set_routers new
+	set_static_routes new
+
+	if	[ "$new_ip_address" != "$alias_ip_address" ]
+	then
+		set_ip_alias
+	fi
+}
+
+set_others ()
+{
+	update_hostname
+	make_resolv_conf
+}
+
+clear_arp_table () 
+{
+	arp -d -a
+}
+
+unset_all ()
+{
+	if [ "$alias_ip_address" != "$old_ip_address" ]
+	then
+		unset_ip_alias
+	fi
+
+	if [ "$old_ip_address" != "" ] 
+	then
+		unset_ip_address old
+		unset_routers old
+		unset_static_routes old
+		clear_arp_table
+	fi
+}
+
+test_new_lease () 
+{
+	local rc
+
+	set $new_routers
+
+	if [ $# -ge 1 ]
+	then
+		set_ip_address new
+		if ping -q -c 1 $1
+		then
+			rc=0
+		else
+			rc=1
+		fi
+		unset_ip_address new
+	else
+		rc=1
+	fi
+	return  $rc
+}
+
+#############################################################################
+# Main State functions.
+#
+# There is a state function for each state of the DHCP client
+# These functions are OS specific and should be be tampered with.
+#############################################################################
+
+in_state_MEDIUM () 
+{
+  ifconfig $interface $medium
+  ifconfig $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1
+  sleep 1
+  exit_status=0
+}
+
+in_state_PREINIT () 
+{
+	unset_ip_alias
+
+	ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
+			broadcast 255.255.255.255 up
+	exit_status=0
+}
+
+in_state_ARPCHECK () 
+{
+  exit_status=0
+}
+
+in_state_ARPSEND () 
+{
+  exit_status=0
+}
+
+in_state_RENEW () 
+{
+	if [ "$old_ip_address" != "$new_ip_address" ]
+	then
+		unset_all
+		set_all
+	fi
+
+	set_others
+}
+
+in_state_REBIND () {
+	in_state_RENEW
+}
+
+in_state_BOUND () {
+	unset_all
+	set_all
+	set_others
+}
+
+in_state_REBOOT () {
+	in_state_BOUND
+}
+
+in_state_EXPIRE () 
+{
+	unset_all
+	set_ip_alias
+	exit_status=0
+}
+
+in_state_FAIL () {
+	in_state_EXPIRE
+}
+
+in_state_TIMEOUT () 
+{
+	unset_all
+
+	if test_new_lease
+	then
+		set_all
+		set_others
+	else
+	 	$LOGGER "No good lease information in TIMEOUT state"	
+		set_ip_alias
+		exit_status=1
+	fi
+}
+
+#############################################################################
+# Main functions:
+#
+# dhclient_script_init() parses the optional "enter_hooks" script which can
+#   override any of the state functions
+#
+# This function also parses the variables and notifies the detected changes.
+#############################################################################
+dhclient_script_init ()
+{
+	if [ "$new_network_number" != "" ]
+	then
+		$LOGGER "New Network Number: $new_network_number"
+	fi
+
+	if [ "$new_ip_address" != "" ]
+	then
+		$LOGGER "New IP Address: $new_ip_address"
+	fi
+
+	if [ "$new_broadcast_address" != "" ]
+	then
+		$LOGGER "New Broadcast Address: $new_broadcast_address"
+	fi
+
+	if [ "$new_subnet_mask" != "" ]
+	then
+		$LOGGER "New Subnet Mask for $interface: $new_subnet_mask"
+	fi
+
+	if [ "$alias_subnet_mask" != "" ]
+	then
+	fi
+}
+
+#############################################################################
+# dhclient_main() does the appropriate work depending on the state of
+# the dhcp client
+#############################################################################
+dhclient_script_main ()
+{
+#	set -x
+	exit_status=0
+
+	case $reason in
+		MEDIUM|\
+		PREINIT|\
+		ARPCHECK|\
+		ARPSEND|\
+		RENEW|\
+		REBIND|\
+		BOUND|\
+		REBOOT|\
+		EXPIRE|\
+		FAIL|\
+		TIMEOUT)
+			pre_state_${reason}_hook
+			in_state_${reason}
+			post_state_${reason}_hook
+			;;
+		*)
+			$LOGGER "dhclient-script called with invalid reason $reason"
+			exit_status=1
+			;;
+	esac
+}
+
+#############################################################################
+# Let's do the work...
+#############################################################################
+
+if [ -x /usr/bin/logger ]; then
+	LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
+else
+	LOGGER=echo
+fi
+
+# Invoke the local dhcp client enter hooks, if they exist.
+if [ -x %%PREFIX%%/etc/dhclient-enter-hooks ]
+then
+	exit_status=0
+	. %%PREFIX%%/etc/dhclient-enter-hooks
+	# allow the local script to abort processing of this state
+	# local script must set exit_status variable to nonzero.
+	if [ $exit_status -ne 0 ]
+	then
+		exit $exit_status
+	fi
+fi
+
+dhclient_script_init
+dhclient_script_main
+
+# Invokes the local dhcp client exit hooks, if any.
+if [ -x %%PREFIX%%/etc/dhclient-exit-hooks ]; then
+	. %%PREFIX%%/etc/dhclient-exit-hooks
+fi
+
+exit $exit_status
+
+#############################################################################
+# That's all folks
+#############################################################################
diff --git a/net/isc-dhcp30-server/files/patch-freebsd b/net/isc-dhcp30-server/files/patch-freebsd
deleted file mode 100644
index 9fef4fdab877..000000000000
--- a/net/isc-dhcp30-server/files/patch-freebsd
+++ /dev/null
@@ -1,75 +0,0 @@
---- client/scripts/freebsd.orig	Sun Apr 27 21:44:01 2003
-+++ client/scripts/freebsd	Wed Mar  3 02:28:29 2004
-@@ -16,7 +16,7 @@
-       ( echo search $new_domain_name >/etc/resolv.conf )
-       exit_status=$?
-     else
--      rm /etc/resolv.conf
-+      ( rm /etc/resolv.conf )
-       exit_status=$?
-     fi
-     if [ $exit_status -ne 0 ]; then
-@@ -32,17 +32,17 @@
- # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
- exit_with_hooks() {
-   exit_status=$1
--  if [ -f /etc/dhclient-exit-hooks ]; then
--    . /etc/dhclient-exit-hooks
-+  if [ -f %%PREFIX%%/etc/dhclient-exit-hooks ]; then
-+    . %%PREFIX%%/etc/dhclient-exit-hooks
-   fi
- # probably should do something with exit status of the local script
-   exit $exit_status
- }
- 
- # Invoke the local dhcp client enter hooks, if they exist.
--if [ -f /etc/dhclient-enter-hooks ]; then
-+if [ -f %%PREFIX%%/etc/dhclient-enter-hooks ]; then
-   exit_status=0
--  . /etc/dhclient-enter-hooks
-+  . %%PREFIX%%/etc/dhclient-enter-hooks
-   # allow the local script to abort processing of this state
-   # local script must set exit_status variable to nonzero.
-   if [ $exit_status -ne 0 ]; then
-@@ -51,11 +51,11 @@
- fi
- 
- if [ x$new_network_number != x ]; then
--   $LOGGER New Network Number: $new_network_number
-+  $LOGGER "New Network Number: $new_network_number"
- fi
- 
- if [ x$new_broadcast_address != x ]; then
-- $LOGGER New Broadcast Address: $new_broadcast_address
-+  $LOGGER "New Broadcast Address: $new_broadcast_address"
-   new_broadcast_arg="broadcast $new_broadcast_address"
- fi
- if [ x$old_broadcast_address != x ]; then
-@@ -71,6 +71,15 @@
-   alias_subnet_arg="netmask $alias_subnet_mask"
- fi
- 
-+# Get the interface to which our default route is bound to.
-+if [ -x /usr/bin/netstat ]; then
-+	if_defaultroute=`/usr/bin/netstat -rn \
-+		| /usr/bin/grep "^default" \
-+		| /usr/bin/awk '{print $6}'`
-+else
-+	if_defaultroute=""
-+fi
-+
- if [ x$reason = xMEDIUM ]; then
-   eval "ifconfig $interface $medium"
-   eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
-@@ -113,7 +122,10 @@
-     eval "ifconfig $interface inet -alias $old_ip_address $medium"
-     route delete $old_ip_address 127.1 >/dev/null 2>&1
-     for router in $old_routers; do
--      route delete default $router >/dev/null 2>&1
-+	if [ x$if_defaultroute = x ] || [ x$if_defaultroute = x$interface ]
-+	 then
-+	      route delete default $router >/dev/null 2>&1
-+	fi
-     done
-     if [ -n "$old_static_routes" ]; then
-       set -- $old_static_routes
diff --git a/net/isc-dhcp31-server/files/client::scripts::freebsd b/net/isc-dhcp31-server/files/client::scripts::freebsd
new file mode 100644
index 000000000000..ceaeb950d2d5
--- /dev/null
+++ b/net/isc-dhcp31-server/files/client::scripts::freebsd
@@ -0,0 +1,509 @@
+#!/bin/sh
+
+#############################################################################
+#
+# Copyright (c) 1999, MindStep Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+#############################################################################
+#
+# This script was written by Patrick Bihan-Faou, patrick@mindstep.com,
+# Please contact us for bug reports, etc.
+#
+#############################################################################
+# $MindStep_Id: dhclient-script.sh,v 1.8 1999/12/07 22:11:08 patrick Exp $
+# $MindStep_Tag: CONTRIB_19991207 $
+# $FreeBSD$
+#############################################################################
+
+
+#############################################################################
+# hook functions prototypes
+#
+# The "pre_state_XXX_hook" functions are called before the main
+# work is done for the state XXX
+#
+# The "post_state_XXX_hook" functions are called after the main
+# work is done for the state XXX
+#
+# These functions are meant to be overridden by the user's
+# dhclient-enter-hooks file
+#############################################################################
+
+pre_state_MEDIUM_hook () { }
+pre_state_PREINIT_hook () { }
+pre_state_ARPCHECK_hook () { }
+pre_state_ARPSEND_hook () { }
+pre_state_RENEW_hook () { }
+pre_state_REBIND_hook () { }
+pre_state_BOUND_hook () { }
+pre_state_REBOOT_hook () { }
+pre_state_EXPIRE_hook () { }
+pre_state_FAIL_hook () { }
+pre_state_TIMEOUT_hook () { }
+post_state_MEDIUM_hook () { }
+post_state_PREINIT_hook () { }
+post_state_ARPCHECK_hook () { }
+post_state_ARPSEND_hook () { }
+post_state_RENEW_hook () { }
+post_state_REBIND_hook () { }
+post_state_BOUND_hook () { }
+post_state_REBOOT_hook () { }
+post_state_EXPIRE_hook () { }
+post_state_FAIL_hook () { }
+post_state_TIMEOUT_hook () { }
+
+#############################################################################
+# make_resolv_conf
+#
+# This function is called to update the information related to the
+# DNS configuration (the resolver part)
+#############################################################################
+make_resolv_conf () 
+{
+   if [ "x$new_domain_name" != x ] && [ "x$new_domain_name_servers" != x ]; then
+     echo search $new_domain_name >/etc/resolv.conf
+     for nameserver in $new_domain_name_servers; do
+       echo nameserver $nameserver >>/etc/resolv.conf
+     done
+   fi
+}
+
+#############################################################################
+# set_XXX
+# unset_XXX
+#
+# These function each deal with one particular setting.
+# They are OS dependent and may be overridden in the 
+# dhclient-enter-hooks file if needed.
+#
+# These functions are called with either "new" or "old" to indicate which
+# set of variables to use (new_ip_address or old_ip_address...)
+#
+#############################################################################
+
+update_hostname ()
+{
+	local current_hostname=`/bin/hostname`
+
+  	if	[ "$current_hostname" = "" ] || \
+		[ "$current_hostname" = "$old_host_name" ]
+	then
+		if [ "$new_host_name" != "$old_host_name" ]
+		then
+			$LOGGER "New Hostname: $new_host_name"
+			hostname $new_host_name
+		fi
+	fi
+}
+
+set_ip_address () 
+{
+	local ip
+	local mask
+	local bcast
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+	eval mask="\$${1}_subnet_mask"
+	eval bcast="\$${1}_broadcast_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet $ip netmask $mask broadcast $bcast $medium
+#		route add $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+unset_ip_address () 
+{
+	local ip
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet -alias $ip $medium
+#		route delete $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet alias $alias_ip_address netmask $alias_subnet_mask
+#		route add $alias_ip_address 127.0.0.1
+	fi
+}
+
+unset_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
+#		route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route add default $router >/dev/null 2>&1
+	done
+}
+
+unset_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route delete default $router >/dev/null 2>&1
+	done
+}
+
+set_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		$LOGGER "New Static Route: $1 -> $2"
+		route add $1 $2
+		shift; shift
+	done
+}
+
+unset_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		route delete $1 $2
+		shift; shift
+	done
+}
+
+#############################################################################
+#
+# utility functions grouping what needs to be done in logical units.
+#
+#############################################################################
+
+set_all ()
+{
+	set_ip_address new
+	set_routers new
+	set_static_routes new
+
+	if	[ "$new_ip_address" != "$alias_ip_address" ]
+	then
+		set_ip_alias
+	fi
+}
+
+set_others ()
+{
+	update_hostname
+	make_resolv_conf
+}
+
+clear_arp_table () 
+{
+	arp -d -a
+}
+
+unset_all ()
+{
+	if [ "$alias_ip_address" != "$old_ip_address" ]
+	then
+		unset_ip_alias
+	fi
+
+	if [ "$old_ip_address" != "" ] 
+	then
+		unset_ip_address old
+		unset_routers old
+		unset_static_routes old
+		clear_arp_table
+	fi
+}
+
+test_new_lease () 
+{
+	local rc
+
+	set $new_routers
+
+	if [ $# -ge 1 ]
+	then
+		set_ip_address new
+		if ping -q -c 1 $1
+		then
+			rc=0
+		else
+			rc=1
+		fi
+		unset_ip_address new
+	else
+		rc=1
+	fi
+	return  $rc
+}
+
+#############################################################################
+# Main State functions.
+#
+# There is a state function for each state of the DHCP client
+# These functions are OS specific and should be be tampered with.
+#############################################################################
+
+in_state_MEDIUM () 
+{
+  ifconfig $interface $medium
+  ifconfig $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1
+  sleep 1
+  exit_status=0
+}
+
+in_state_PREINIT () 
+{
+	unset_ip_alias
+
+	ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
+			broadcast 255.255.255.255 up
+	exit_status=0
+}
+
+in_state_ARPCHECK () 
+{
+  exit_status=0
+}
+
+in_state_ARPSEND () 
+{
+  exit_status=0
+}
+
+in_state_RENEW () 
+{
+	if [ "$old_ip_address" != "$new_ip_address" ]
+	then
+		unset_all
+		set_all
+	fi
+
+	set_others
+}
+
+in_state_REBIND () {
+	in_state_RENEW
+}
+
+in_state_BOUND () {
+	unset_all
+	set_all
+	set_others
+}
+
+in_state_REBOOT () {
+	in_state_BOUND
+}
+
+in_state_EXPIRE () 
+{
+	unset_all
+	set_ip_alias
+	exit_status=0
+}
+
+in_state_FAIL () {
+	in_state_EXPIRE
+}
+
+in_state_TIMEOUT () 
+{
+	unset_all
+
+	if test_new_lease
+	then
+		set_all
+		set_others
+	else
+	 	$LOGGER "No good lease information in TIMEOUT state"	
+		set_ip_alias
+		exit_status=1
+	fi
+}
+
+#############################################################################
+# Main functions:
+#
+# dhclient_script_init() parses the optional "enter_hooks" script which can
+#   override any of the state functions
+#
+# This function also parses the variables and notifies the detected changes.
+#############################################################################
+dhclient_script_init ()
+{
+	if [ "$new_network_number" != "" ]
+	then
+		$LOGGER "New Network Number: $new_network_number"
+	fi
+
+	if [ "$new_ip_address" != "" ]
+	then
+		$LOGGER "New IP Address: $new_ip_address"
+	fi
+
+	if [ "$new_broadcast_address" != "" ]
+	then
+		$LOGGER "New Broadcast Address: $new_broadcast_address"
+	fi
+
+	if [ "$new_subnet_mask" != "" ]
+	then
+		$LOGGER "New Subnet Mask for $interface: $new_subnet_mask"
+	fi
+
+	if [ "$alias_subnet_mask" != "" ]
+	then
+	fi
+}
+
+#############################################################################
+# dhclient_main() does the appropriate work depending on the state of
+# the dhcp client
+#############################################################################
+dhclient_script_main ()
+{
+#	set -x
+	exit_status=0
+
+	case $reason in
+		MEDIUM|\
+		PREINIT|\
+		ARPCHECK|\
+		ARPSEND|\
+		RENEW|\
+		REBIND|\
+		BOUND|\
+		REBOOT|\
+		EXPIRE|\
+		FAIL|\
+		TIMEOUT)
+			pre_state_${reason}_hook
+			in_state_${reason}
+			post_state_${reason}_hook
+			;;
+		*)
+			$LOGGER "dhclient-script called with invalid reason $reason"
+			exit_status=1
+			;;
+	esac
+}
+
+#############################################################################
+# Let's do the work...
+#############################################################################
+
+if [ -x /usr/bin/logger ]; then
+	LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
+else
+	LOGGER=echo
+fi
+
+# Invoke the local dhcp client enter hooks, if they exist.
+if [ -x %%PREFIX%%/etc/dhclient-enter-hooks ]
+then
+	exit_status=0
+	. %%PREFIX%%/etc/dhclient-enter-hooks
+	# allow the local script to abort processing of this state
+	# local script must set exit_status variable to nonzero.
+	if [ $exit_status -ne 0 ]
+	then
+		exit $exit_status
+	fi
+fi
+
+dhclient_script_init
+dhclient_script_main
+
+# Invokes the local dhcp client exit hooks, if any.
+if [ -x %%PREFIX%%/etc/dhclient-exit-hooks ]; then
+	. %%PREFIX%%/etc/dhclient-exit-hooks
+fi
+
+exit $exit_status
+
+#############################################################################
+# That's all folks
+#############################################################################
diff --git a/net/isc-dhcp31-server/files/patch-freebsd b/net/isc-dhcp31-server/files/patch-freebsd
deleted file mode 100644
index 9fef4fdab877..000000000000
--- a/net/isc-dhcp31-server/files/patch-freebsd
+++ /dev/null
@@ -1,75 +0,0 @@
---- client/scripts/freebsd.orig	Sun Apr 27 21:44:01 2003
-+++ client/scripts/freebsd	Wed Mar  3 02:28:29 2004
-@@ -16,7 +16,7 @@
-       ( echo search $new_domain_name >/etc/resolv.conf )
-       exit_status=$?
-     else
--      rm /etc/resolv.conf
-+      ( rm /etc/resolv.conf )
-       exit_status=$?
-     fi
-     if [ $exit_status -ne 0 ]; then
-@@ -32,17 +32,17 @@
- # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
- exit_with_hooks() {
-   exit_status=$1
--  if [ -f /etc/dhclient-exit-hooks ]; then
--    . /etc/dhclient-exit-hooks
-+  if [ -f %%PREFIX%%/etc/dhclient-exit-hooks ]; then
-+    . %%PREFIX%%/etc/dhclient-exit-hooks
-   fi
- # probably should do something with exit status of the local script
-   exit $exit_status
- }
- 
- # Invoke the local dhcp client enter hooks, if they exist.
--if [ -f /etc/dhclient-enter-hooks ]; then
-+if [ -f %%PREFIX%%/etc/dhclient-enter-hooks ]; then
-   exit_status=0
--  . /etc/dhclient-enter-hooks
-+  . %%PREFIX%%/etc/dhclient-enter-hooks
-   # allow the local script to abort processing of this state
-   # local script must set exit_status variable to nonzero.
-   if [ $exit_status -ne 0 ]; then
-@@ -51,11 +51,11 @@
- fi
- 
- if [ x$new_network_number != x ]; then
--   $LOGGER New Network Number: $new_network_number
-+  $LOGGER "New Network Number: $new_network_number"
- fi
- 
- if [ x$new_broadcast_address != x ]; then
-- $LOGGER New Broadcast Address: $new_broadcast_address
-+  $LOGGER "New Broadcast Address: $new_broadcast_address"
-   new_broadcast_arg="broadcast $new_broadcast_address"
- fi
- if [ x$old_broadcast_address != x ]; then
-@@ -71,6 +71,15 @@
-   alias_subnet_arg="netmask $alias_subnet_mask"
- fi
- 
-+# Get the interface to which our default route is bound to.
-+if [ -x /usr/bin/netstat ]; then
-+	if_defaultroute=`/usr/bin/netstat -rn \
-+		| /usr/bin/grep "^default" \
-+		| /usr/bin/awk '{print $6}'`
-+else
-+	if_defaultroute=""
-+fi
-+
- if [ x$reason = xMEDIUM ]; then
-   eval "ifconfig $interface $medium"
-   eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
-@@ -113,7 +122,10 @@
-     eval "ifconfig $interface inet -alias $old_ip_address $medium"
-     route delete $old_ip_address 127.1 >/dev/null 2>&1
-     for router in $old_routers; do
--      route delete default $router >/dev/null 2>&1
-+	if [ x$if_defaultroute = x ] || [ x$if_defaultroute = x$interface ]
-+	 then
-+	      route delete default $router >/dev/null 2>&1
-+	fi
-     done
-     if [ -n "$old_static_routes" ]; then
-       set -- $old_static_routes
diff --git a/net/isc-dhcp40-server/files/client::scripts::freebsd b/net/isc-dhcp40-server/files/client::scripts::freebsd
new file mode 100644
index 000000000000..ceaeb950d2d5
--- /dev/null
+++ b/net/isc-dhcp40-server/files/client::scripts::freebsd
@@ -0,0 +1,509 @@
+#!/bin/sh
+
+#############################################################################
+#
+# Copyright (c) 1999, MindStep Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+#############################################################################
+#
+# This script was written by Patrick Bihan-Faou, patrick@mindstep.com,
+# Please contact us for bug reports, etc.
+#
+#############################################################################
+# $MindStep_Id: dhclient-script.sh,v 1.8 1999/12/07 22:11:08 patrick Exp $
+# $MindStep_Tag: CONTRIB_19991207 $
+# $FreeBSD$
+#############################################################################
+
+
+#############################################################################
+# hook functions prototypes
+#
+# The "pre_state_XXX_hook" functions are called before the main
+# work is done for the state XXX
+#
+# The "post_state_XXX_hook" functions are called after the main
+# work is done for the state XXX
+#
+# These functions are meant to be overridden by the user's
+# dhclient-enter-hooks file
+#############################################################################
+
+pre_state_MEDIUM_hook () { }
+pre_state_PREINIT_hook () { }
+pre_state_ARPCHECK_hook () { }
+pre_state_ARPSEND_hook () { }
+pre_state_RENEW_hook () { }
+pre_state_REBIND_hook () { }
+pre_state_BOUND_hook () { }
+pre_state_REBOOT_hook () { }
+pre_state_EXPIRE_hook () { }
+pre_state_FAIL_hook () { }
+pre_state_TIMEOUT_hook () { }
+post_state_MEDIUM_hook () { }
+post_state_PREINIT_hook () { }
+post_state_ARPCHECK_hook () { }
+post_state_ARPSEND_hook () { }
+post_state_RENEW_hook () { }
+post_state_REBIND_hook () { }
+post_state_BOUND_hook () { }
+post_state_REBOOT_hook () { }
+post_state_EXPIRE_hook () { }
+post_state_FAIL_hook () { }
+post_state_TIMEOUT_hook () { }
+
+#############################################################################
+# make_resolv_conf
+#
+# This function is called to update the information related to the
+# DNS configuration (the resolver part)
+#############################################################################
+make_resolv_conf () 
+{
+   if [ "x$new_domain_name" != x ] && [ "x$new_domain_name_servers" != x ]; then
+     echo search $new_domain_name >/etc/resolv.conf
+     for nameserver in $new_domain_name_servers; do
+       echo nameserver $nameserver >>/etc/resolv.conf
+     done
+   fi
+}
+
+#############################################################################
+# set_XXX
+# unset_XXX
+#
+# These function each deal with one particular setting.
+# They are OS dependent and may be overridden in the 
+# dhclient-enter-hooks file if needed.
+#
+# These functions are called with either "new" or "old" to indicate which
+# set of variables to use (new_ip_address or old_ip_address...)
+#
+#############################################################################
+
+update_hostname ()
+{
+	local current_hostname=`/bin/hostname`
+
+  	if	[ "$current_hostname" = "" ] || \
+		[ "$current_hostname" = "$old_host_name" ]
+	then
+		if [ "$new_host_name" != "$old_host_name" ]
+		then
+			$LOGGER "New Hostname: $new_host_name"
+			hostname $new_host_name
+		fi
+	fi
+}
+
+set_ip_address () 
+{
+	local ip
+	local mask
+	local bcast
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+	eval mask="\$${1}_subnet_mask"
+	eval bcast="\$${1}_broadcast_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet $ip netmask $mask broadcast $bcast $medium
+#		route add $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+unset_ip_address () 
+{
+	local ip
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval ip="\$${1}_ip_address"
+
+	if [ "$ip" != "" ]
+	then
+		ifconfig $interface inet -alias $ip $medium
+#		route delete $ip 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet alias $alias_ip_address netmask $alias_subnet_mask
+#		route add $alias_ip_address 127.0.0.1
+	fi
+}
+
+unset_ip_alias () 
+{
+	if [ "$alias_ip_address" != "" ]
+	then
+		ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
+#		route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
+	fi
+}
+
+set_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route add default $router >/dev/null 2>&1
+	done
+}
+
+unset_routers () 
+{
+	local router_list
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval router_list="\$${1}_routers"
+
+	for router in $router_list
+	do
+		route delete default $router >/dev/null 2>&1
+	done
+}
+
+set_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		$LOGGER "New Static Route: $1 -> $2"
+		route add $1 $2
+		shift; shift
+	done
+}
+
+unset_static_routes () 
+{
+	local static_routes
+
+	if [ $# -lt 1 ]
+	then
+		return  1
+	fi
+
+	eval static_routes="\$${1}_static_routes"
+
+	set static_routes
+
+	while [ $# -ge 2 ]
+	do
+		route delete $1 $2
+		shift; shift
+	done
+}
+
+#############################################################################
+#
+# utility functions grouping what needs to be done in logical units.
+#
+#############################################################################
+
+set_all ()
+{
+	set_ip_address new
+	set_routers new
+	set_static_routes new
+
+	if	[ "$new_ip_address" != "$alias_ip_address" ]
+	then
+		set_ip_alias
+	fi
+}
+
+set_others ()
+{
+	update_hostname
+	make_resolv_conf
+}
+
+clear_arp_table () 
+{
+	arp -d -a
+}
+
+unset_all ()
+{
+	if [ "$alias_ip_address" != "$old_ip_address" ]
+	then
+		unset_ip_alias
+	fi
+
+	if [ "$old_ip_address" != "" ] 
+	then
+		unset_ip_address old
+		unset_routers old
+		unset_static_routes old
+		clear_arp_table
+	fi
+}
+
+test_new_lease () 
+{
+	local rc
+
+	set $new_routers
+
+	if [ $# -ge 1 ]
+	then
+		set_ip_address new
+		if ping -q -c 1 $1
+		then
+			rc=0
+		else
+			rc=1
+		fi
+		unset_ip_address new
+	else
+		rc=1
+	fi
+	return  $rc
+}
+
+#############################################################################
+# Main State functions.
+#
+# There is a state function for each state of the DHCP client
+# These functions are OS specific and should be be tampered with.
+#############################################################################
+
+in_state_MEDIUM () 
+{
+  ifconfig $interface $medium
+  ifconfig $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1
+  sleep 1
+  exit_status=0
+}
+
+in_state_PREINIT () 
+{
+	unset_ip_alias
+
+	ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
+			broadcast 255.255.255.255 up
+	exit_status=0
+}
+
+in_state_ARPCHECK () 
+{
+  exit_status=0
+}
+
+in_state_ARPSEND () 
+{
+  exit_status=0
+}
+
+in_state_RENEW () 
+{
+	if [ "$old_ip_address" != "$new_ip_address" ]
+	then
+		unset_all
+		set_all
+	fi
+
+	set_others
+}
+
+in_state_REBIND () {
+	in_state_RENEW
+}
+
+in_state_BOUND () {
+	unset_all
+	set_all
+	set_others
+}
+
+in_state_REBOOT () {
+	in_state_BOUND
+}
+
+in_state_EXPIRE () 
+{
+	unset_all
+	set_ip_alias
+	exit_status=0
+}
+
+in_state_FAIL () {
+	in_state_EXPIRE
+}
+
+in_state_TIMEOUT () 
+{
+	unset_all
+
+	if test_new_lease
+	then
+		set_all
+		set_others
+	else
+	 	$LOGGER "No good lease information in TIMEOUT state"	
+		set_ip_alias
+		exit_status=1
+	fi
+}
+
+#############################################################################
+# Main functions:
+#
+# dhclient_script_init() parses the optional "enter_hooks" script which can
+#   override any of the state functions
+#
+# This function also parses the variables and notifies the detected changes.
+#############################################################################
+dhclient_script_init ()
+{
+	if [ "$new_network_number" != "" ]
+	then
+		$LOGGER "New Network Number: $new_network_number"
+	fi
+
+	if [ "$new_ip_address" != "" ]
+	then
+		$LOGGER "New IP Address: $new_ip_address"
+	fi
+
+	if [ "$new_broadcast_address" != "" ]
+	then
+		$LOGGER "New Broadcast Address: $new_broadcast_address"
+	fi
+
+	if [ "$new_subnet_mask" != "" ]
+	then
+		$LOGGER "New Subnet Mask for $interface: $new_subnet_mask"
+	fi
+
+	if [ "$alias_subnet_mask" != "" ]
+	then
+	fi
+}
+
+#############################################################################
+# dhclient_main() does the appropriate work depending on the state of
+# the dhcp client
+#############################################################################
+dhclient_script_main ()
+{
+#	set -x
+	exit_status=0
+
+	case $reason in
+		MEDIUM|\
+		PREINIT|\
+		ARPCHECK|\
+		ARPSEND|\
+		RENEW|\
+		REBIND|\
+		BOUND|\
+		REBOOT|\
+		EXPIRE|\
+		FAIL|\
+		TIMEOUT)
+			pre_state_${reason}_hook
+			in_state_${reason}
+			post_state_${reason}_hook
+			;;
+		*)
+			$LOGGER "dhclient-script called with invalid reason $reason"
+			exit_status=1
+			;;
+	esac
+}
+
+#############################################################################
+# Let's do the work...
+#############################################################################
+
+if [ -x /usr/bin/logger ]; then
+	LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
+else
+	LOGGER=echo
+fi
+
+# Invoke the local dhcp client enter hooks, if they exist.
+if [ -x %%PREFIX%%/etc/dhclient-enter-hooks ]
+then
+	exit_status=0
+	. %%PREFIX%%/etc/dhclient-enter-hooks
+	# allow the local script to abort processing of this state
+	# local script must set exit_status variable to nonzero.
+	if [ $exit_status -ne 0 ]
+	then
+		exit $exit_status
+	fi
+fi
+
+dhclient_script_init
+dhclient_script_main
+
+# Invokes the local dhcp client exit hooks, if any.
+if [ -x %%PREFIX%%/etc/dhclient-exit-hooks ]; then
+	. %%PREFIX%%/etc/dhclient-exit-hooks
+fi
+
+exit $exit_status
+
+#############################################################################
+# That's all folks
+#############################################################################
diff --git a/net/isc-dhcp40-server/files/patch-freebsd b/net/isc-dhcp40-server/files/patch-freebsd
deleted file mode 100644
index 9fef4fdab877..000000000000
--- a/net/isc-dhcp40-server/files/patch-freebsd
+++ /dev/null
@@ -1,75 +0,0 @@
---- client/scripts/freebsd.orig	Sun Apr 27 21:44:01 2003
-+++ client/scripts/freebsd	Wed Mar  3 02:28:29 2004
-@@ -16,7 +16,7 @@
-       ( echo search $new_domain_name >/etc/resolv.conf )
-       exit_status=$?
-     else
--      rm /etc/resolv.conf
-+      ( rm /etc/resolv.conf )
-       exit_status=$?
-     fi
-     if [ $exit_status -ne 0 ]; then
-@@ -32,17 +32,17 @@
- # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
- exit_with_hooks() {
-   exit_status=$1
--  if [ -f /etc/dhclient-exit-hooks ]; then
--    . /etc/dhclient-exit-hooks
-+  if [ -f %%PREFIX%%/etc/dhclient-exit-hooks ]; then
-+    . %%PREFIX%%/etc/dhclient-exit-hooks
-   fi
- # probably should do something with exit status of the local script
-   exit $exit_status
- }
- 
- # Invoke the local dhcp client enter hooks, if they exist.
--if [ -f /etc/dhclient-enter-hooks ]; then
-+if [ -f %%PREFIX%%/etc/dhclient-enter-hooks ]; then
-   exit_status=0
--  . /etc/dhclient-enter-hooks
-+  . %%PREFIX%%/etc/dhclient-enter-hooks
-   # allow the local script to abort processing of this state
-   # local script must set exit_status variable to nonzero.
-   if [ $exit_status -ne 0 ]; then
-@@ -51,11 +51,11 @@
- fi
- 
- if [ x$new_network_number != x ]; then
--   $LOGGER New Network Number: $new_network_number
-+  $LOGGER "New Network Number: $new_network_number"
- fi
- 
- if [ x$new_broadcast_address != x ]; then
-- $LOGGER New Broadcast Address: $new_broadcast_address
-+  $LOGGER "New Broadcast Address: $new_broadcast_address"
-   new_broadcast_arg="broadcast $new_broadcast_address"
- fi
- if [ x$old_broadcast_address != x ]; then
-@@ -71,6 +71,15 @@
-   alias_subnet_arg="netmask $alias_subnet_mask"
- fi
- 
-+# Get the interface to which our default route is bound to.
-+if [ -x /usr/bin/netstat ]; then
-+	if_defaultroute=`/usr/bin/netstat -rn \
-+		| /usr/bin/grep "^default" \
-+		| /usr/bin/awk '{print $6}'`
-+else
-+	if_defaultroute=""
-+fi
-+
- if [ x$reason = xMEDIUM ]; then
-   eval "ifconfig $interface $medium"
-   eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
-@@ -113,7 +122,10 @@
-     eval "ifconfig $interface inet -alias $old_ip_address $medium"
-     route delete $old_ip_address 127.1 >/dev/null 2>&1
-     for router in $old_routers; do
--      route delete default $router >/dev/null 2>&1
-+	if [ x$if_defaultroute = x ] || [ x$if_defaultroute = x$interface ]
-+	 then
-+	      route delete default $router >/dev/null 2>&1
-+	fi
-     done
-     if [ -n "$old_static_routes" ]; then
-       set -- $old_static_routes
-- 
cgit debian/1.2.3+git2.25.1-1-2-gaceb0