On Wed, Aug 24, 2005 at 11:23:00PM +1000, Andrew Pollock wrote:
> Hi Aurelien,
Hi!
> Thanks for your patch. There seems to be a slight problem with the
> architecture-specific documentation installing bit, and I don't have a lot
> of time to try and triage it myself at the moment, so if you want to refine
> your patch a bit more, it'll improve the chances of me applying it quickly.
Oops, sorry for that. Please find attached a fixed patch, now tested on
GNU/Linux.
Bye,
Aurelien
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian GNU/Linux developer | Electrical Engineer
`. `' [EMAIL PROTECTED] | [EMAIL PROTECTED]
`- people.debian.org/~aurel32 | www.aurel32.net
--- dhcp3-3.0.2/debian/dhclient-script
+++ dhcp3-3.0.2.orig/debian/dhclient-script
@@ -1,234 +0,0 @@
-#!/bin/bash
-
-# dhclient-script for Linux. Dan Halbert, March, 1997.
-# Updated for Linux 2.[12] by Brian J. Murrell, January 1999.
-# Modified for Debian. Matt Zimmerman and Eloy Paris, December 2003
-# Modified to remove useless tests for antiquated kernel versions that
-# this doesn't even work with anyway, and introduces a dependency on /usr
-# being mounted, which causes cosmetic errors on hosts that NFS mount /usr
-# Andrew Pollock, February 2005
-# Modified to work on point-to-point links. Andrew Pollock, June 2005
-
-# The alias handling in here probably still sucks. -mdz
-
-make_resolv_conf() {
- if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then
- local new_resolv_conf=/etc/resolv.conf.dhclient-new
- rm -f $new_resolv_conf
- if [ -n "$new_domain_name" ]; then
- echo search $new_domain_name >>$new_resolv_conf
- fi
- if [ -n "$new_domain_name_servers" ]; then
- for nameserver in $new_domain_name_servers; do
- echo nameserver $nameserver >>$new_resolv_conf
- done
- else # keep 'old' nameservers
- sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p
/etc/resolv.conf >>$new_resolv_conf
- fi
- chown --reference=/etc/resolv.conf $new_resolv_conf
- chmod --reference=/etc/resolv.conf $new_resolv_conf
- mv -f $new_resolv_conf /etc/resolv.conf
- fi
-}
-
-run_hook() {
- local script="$1"
- local exit_status
-
- if [ -f $script ]; then
- . $script
- fi
-
-
- if [ -n "$exit_status" ] && [ "$exit_status" -ne 0 ]; then
- logger -p daemon.err "$script returned non-zero exit status
$exit_status"
- save_exit_status=$exit_status
- fi
-
- return $exit_status
-}
-
-run_hookdir() {
- local dir="$1"
- local exit_status
-
- if [ -d "$dir" ]; then
- for script in $(run-parts --list $dir); do
- run_hook $script || true
- exit_status=$?
- done
- fi
-
- return $exit_status
-}
-
-# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
-exit_with_hooks() {
- exit_status=$1
-
- # Source the documented exit-hook script, if it exists
- if ! run_hook /etc/dhcp3/dhclient-exit-hooks; then
- exit_status=$?
- fi
-
- # Now run scripts in the Debian-specific directory.
- if ! run_hookdir /etc/dhcp3/dhclient-exit-hooks.d; then
- exit_status=$?
- fi
-
- exit $exit_status
-}
-
-set_hostname() {
- local current_hostname=$(hostname)
- if [ -z "$current_hostname" -o "$current_hostname" = "(none)" ]; then
- hostname "$new_host_name"
- fi
-}
-
-if [ -n "$new_broadcast_address" ]; then
- new_broadcast_arg="broadcast $new_broadcast_address"
-fi
-if [ -n "$old_broadcast_address" ]; then
- old_broadcast_arg="broadcast $old_broadcast_address"
-fi
-if [ -n "$new_subnet_mask" ]; then
- new_subnet_arg="netmask $new_subnet_mask"
-fi
-if [ -n "$old_subnet_mask" ]; then
- old_subnet_arg="netmask $old_subnet_mask"
-fi
-if [ -n "$alias_subnet_mask" ]; then
- alias_subnet_arg="netmask $alias_subnet_mask"
-fi
-if [ -n "$new_interface_mtu" ]; then
- mtu_arg="mtu $new_interface_mtu"
-fi
-if [ -n "$IF_METRIC" ]; then
- metric_arg="metric $IF_METRIC" # interfaces(5), "metric" option
-fi
-
-
-# The action starts here
-
-# Invoke the local dhcp client enter hooks, if they exist.
-run_hook /etc/dhcp3/dhclient-enter-hooks
-run_hookdir /etc/dhcp3/dhclient-enter-hooks.d
-
-# Execute the operation
-case "$reason" in
- MEDIUM|ARPCHECK|ARPSEND)
- # Do nothing
- ;;
- PREINIT)
- # The DHCP client is requesting that an interface be
- # configured as required in order to send packets prior to
- # receiving an actual address. - dhclient-script(8)
-
- if [ -n "$alias_ip_address" ]; then
- # Bring down alias interface. Its routes will disappear too.
- ifconfig $interface:0- inet 0
- fi
- ifconfig $interface 0 up
-
- # We need to give the kernel some time to get the interface up.
- sleep 1
- ;;
- BOUND|RENEW|REBIND|REBOOT)
-
- set_hostname
-
- if [ -n "$old_ip_address" -a -n "$alias_ip_address" -a \
- "$alias_ip_address" != "$old_ip_address" ]; then
- # Possible new alias. Remove old alias.
- ifconfig $interface:0- inet 0
- fi
-
- if [ -n "$old_ip_address" -a \
- "$old_ip_address" != "$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
-
- fi
-
- if [ -z "$old_ip_address" -o "$old_ip_address" != "$new_ip_address" -o
\
- "$reason" = "BOUND" -o "$reason" = "REBOOT" ]; then
-
- ifconfig $interface inet $new_ip_address $new_subnet_arg \
- $new_broadcast_arg $mtu_arg
-
- for router in $new_routers; do
- route add default dev $interface gw $router $metric_arg
- done
- fi
-
- if [ "$new_ip_address" != "$alias_ip_address" -a -n
"$alias_ip_address" ];
- then
- ifconfig $interface:0- inet 0
- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
- route add -host $alias_ip_address $interface:0
- fi
-
- make_resolv_conf
-
- ;;
-
- EXPIRE|FAIL|RELEASE|STOP)
- if [ -n "$alias_ip_address" ]; then
- # Turn off alias interface.
- ifconfig $interface:0- inet 0
- fi
-
- if [ -n "$old_ip_address" ]; then
- # Shut down interface, which will delete routes and clear arp
cache.
- ifconfig $interface inet 0 down
- fi
-
- if [ -n "$alias_ip_address" ]; then
- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
- route add -host $alias_ip_address $interface:0
- fi
-
- ;;
-
- TIMEOUT)
- if [ -n "$alias_ip_address" ]; then
- ifconfig $interface:0- inet 0
- fi
-
- ifconfig $interface inet $new_ip_address $new_subnet_arg \
- $new_broadcast_arg $mtu_arg
-
- set -- $new_routers
- first_router="$1"
-
- if ping -q -c 1 $first_router; then
- if [ "$new_ip_address" != "$alias_ip_address" -a \
- -n "$alias_ip_address" ]; then
- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
- route add -host $alias_ip_address dev $interface:0
- fi
-
- # point to point
- if [ "$new_subnet_mask" == "255.255.255.255" ]; then
- for router in $new_routers; do
- route add -host $router dev $interface
- done
- fi
-
- for router in $new_routers; do
- route add default dev $interface gw $router $metric_arg
- done
-
- make_resolv_conf
- else
- # Changed from 'ifconfig $interface inet 0 down' - see Debian bug
#144666
- ifconfig $interface inet 0
- exit_with_hooks 2
- fi
-
- ;;
-esac
-
-exit_with_hooks 0
diff -u dhcp3-3.0.2/debian/dhcp3-client.docs
dhcp3-3.0.2/debian/dhcp3-client.docs
--- dhcp3-3.0.2/debian/dhcp3-client.docs
+++ dhcp3-3.0.2/debian/dhcp3-client.docs
@@ -1 +1 @@
-README RELNOTES doc/ debian/dhcp-on-linux.txt
+README RELNOTES doc/
diff -u dhcp3-3.0.2/debian/dhcp3-relay.docs dhcp3-3.0.2/debian/dhcp3-relay.docs
--- dhcp3-3.0.2/debian/dhcp3-relay.docs
+++ dhcp3-3.0.2/debian/dhcp3-relay.docs
@@ -1 +1 @@
-README RELNOTES doc/ debian/dhcp-on-linux.txt
+README RELNOTES doc/
diff -u dhcp3-3.0.2/debian/dhcp3-server.docs
dhcp3-3.0.2/debian/dhcp3-server.docs
--- dhcp3-3.0.2/debian/dhcp3-server.docs
+++ dhcp3-3.0.2/debian/dhcp3-server.docs
@@ -1 +1 @@
-README RELNOTES doc/ debian/dhcp-on-linux.txt
+README RELNOTES doc/
diff -u dhcp3-3.0.2/debian/patches/00list dhcp3-3.0.2/debian/patches/00list
--- dhcp3-3.0.2/debian/patches/00list
+++ dhcp3-3.0.2/debian/patches/00list
@@ -9,0 +10 @@
+kfreebsd
diff -u dhcp3-3.0.2/debian/rules dhcp3-3.0.2/debian/rules
--- dhcp3-3.0.2/debian/rules
+++ dhcp3-3.0.2/debian/rules
@@ -8,6 +8,8 @@
export DH_COMPAT=3
+DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
+
DESTDIR = `pwd`/debian/tmp
PACKAGE = dhcp3
@@ -58,7 +60,7 @@
#cat site.conf
$(MAKE) $(BVARS)
- cp debian/dhclient-script client/scripts/debian
+ cp debian/dhclient-script.$(DEB_HOST_ARCH_OS) client/scripts/debian
touch build-stamp
@@ -72,7 +74,7 @@
-$(MAKE) distclean
# Remove leftover junk...
- rm -Rf work.linux-2.2/
+ rm -Rf work.*/
dh_clean
@@ -129,6 +131,14 @@
rmdir $(DESTDIR)/usr/lib/
rm -Rf $(DESTDIR)/usr/include/
+ # Install Linux specific documentation
+ifeq ($(DEB_HOST_ARCH_OS), linux)
+ for p in dhcp3-client dhcp3-relay dhcp3-server ; do \
+ install -d -m 755 `pwd`/debian/$p/usr/share/doc; \
+ install -m 644 `pwd`/debian/dhcp-on-linux.txt
`pwd`/debian/$p/usr/share/doc; \
+ done
+endif
+
touch install-stamp
UDEBPACKAGE=dhcp3-client-udeb
--- dhcp3-3.0.2.orig/debian/dhclient-script.linux
+++ dhcp3-3.0.2/debian/dhclient-script.linux
@@ -0,0 +1,234 @@
+#!/bin/bash
+
+# dhclient-script for Linux. Dan Halbert, March, 1997.
+# Updated for Linux 2.[12] by Brian J. Murrell, January 1999.
+# Modified for Debian. Matt Zimmerman and Eloy Paris, December 2003
+# Modified to remove useless tests for antiquated kernel versions that
+# this doesn't even work with anyway, and introduces a dependency on /usr
+# being mounted, which causes cosmetic errors on hosts that NFS mount /usr
+# Andrew Pollock, February 2005
+# Modified to work on point-to-point links. Andrew Pollock, June 2005
+
+# The alias handling in here probably still sucks. -mdz
+
+make_resolv_conf() {
+ if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then
+ local new_resolv_conf=/etc/resolv.conf.dhclient-new
+ rm -f $new_resolv_conf
+ if [ -n "$new_domain_name" ]; then
+ echo search $new_domain_name >>$new_resolv_conf
+ fi
+ if [ -n "$new_domain_name_servers" ]; then
+ for nameserver in $new_domain_name_servers; do
+ echo nameserver $nameserver >>$new_resolv_conf
+ done
+ else # keep 'old' nameservers
+ sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p
/etc/resolv.conf >>$new_resolv_conf
+ fi
+ chown --reference=/etc/resolv.conf $new_resolv_conf
+ chmod --reference=/etc/resolv.conf $new_resolv_conf
+ mv -f $new_resolv_conf /etc/resolv.conf
+ fi
+}
+
+run_hook() {
+ local script="$1"
+ local exit_status
+
+ if [ -f $script ]; then
+ . $script
+ fi
+
+
+ if [ -n "$exit_status" ] && [ "$exit_status" -ne 0 ]; then
+ logger -p daemon.err "$script returned non-zero exit status
$exit_status"
+ save_exit_status=$exit_status
+ fi
+
+ return $exit_status
+}
+
+run_hookdir() {
+ local dir="$1"
+ local exit_status
+
+ if [ -d "$dir" ]; then
+ for script in $(run-parts --list $dir); do
+ run_hook $script || true
+ exit_status=$?
+ done
+ fi
+
+ return $exit_status
+}
+
+# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
+exit_with_hooks() {
+ exit_status=$1
+
+ # Source the documented exit-hook script, if it exists
+ if ! run_hook /etc/dhcp3/dhclient-exit-hooks; then
+ exit_status=$?
+ fi
+
+ # Now run scripts in the Debian-specific directory.
+ if ! run_hookdir /etc/dhcp3/dhclient-exit-hooks.d; then
+ exit_status=$?
+ fi
+
+ exit $exit_status
+}
+
+set_hostname() {
+ local current_hostname=$(hostname)
+ if [ -z "$current_hostname" -o "$current_hostname" = "(none)" ]; then
+ hostname "$new_host_name"
+ fi
+}
+
+if [ -n "$new_broadcast_address" ]; then
+ new_broadcast_arg="broadcast $new_broadcast_address"
+fi
+if [ -n "$old_broadcast_address" ]; then
+ old_broadcast_arg="broadcast $old_broadcast_address"
+fi
+if [ -n "$new_subnet_mask" ]; then
+ new_subnet_arg="netmask $new_subnet_mask"
+fi
+if [ -n "$old_subnet_mask" ]; then
+ old_subnet_arg="netmask $old_subnet_mask"
+fi
+if [ -n "$alias_subnet_mask" ]; then
+ alias_subnet_arg="netmask $alias_subnet_mask"
+fi
+if [ -n "$new_interface_mtu" ]; then
+ mtu_arg="mtu $new_interface_mtu"
+fi
+if [ -n "$IF_METRIC" ]; then
+ metric_arg="metric $IF_METRIC" # interfaces(5), "metric" option
+fi
+
+
+# The action starts here
+
+# Invoke the local dhcp client enter hooks, if they exist.
+run_hook /etc/dhcp3/dhclient-enter-hooks
+run_hookdir /etc/dhcp3/dhclient-enter-hooks.d
+
+# Execute the operation
+case "$reason" in
+ MEDIUM|ARPCHECK|ARPSEND)
+ # Do nothing
+ ;;
+ PREINIT)
+ # The DHCP client is requesting that an interface be
+ # configured as required in order to send packets prior to
+ # receiving an actual address. - dhclient-script(8)
+
+ if [ -n "$alias_ip_address" ]; then
+ # Bring down alias interface. Its routes will disappear too.
+ ifconfig $interface:0- inet 0
+ fi
+ ifconfig $interface 0 up
+
+ # We need to give the kernel some time to get the interface up.
+ sleep 1
+ ;;
+ BOUND|RENEW|REBIND|REBOOT)
+
+ set_hostname
+
+ if [ -n "$old_ip_address" -a -n "$alias_ip_address" -a \
+ "$alias_ip_address" != "$old_ip_address" ]; then
+ # Possible new alias. Remove old alias.
+ ifconfig $interface:0- inet 0
+ fi
+
+ if [ -n "$old_ip_address" -a \
+ "$old_ip_address" != "$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
+
+ fi
+
+ if [ -z "$old_ip_address" -o "$old_ip_address" != "$new_ip_address" -o
\
+ "$reason" = "BOUND" -o "$reason" = "REBOOT" ]; then
+
+ ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ $new_broadcast_arg $mtu_arg
+
+ for router in $new_routers; do
+ route add default dev $interface gw $router $metric_arg
+ done
+ fi
+
+ if [ "$new_ip_address" != "$alias_ip_address" -a -n
"$alias_ip_address" ];
+ then
+ ifconfig $interface:0- inet 0
+ ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+ route add -host $alias_ip_address $interface:0
+ fi
+
+ make_resolv_conf
+
+ ;;
+
+ EXPIRE|FAIL|RELEASE|STOP)
+ if [ -n "$alias_ip_address" ]; then
+ # Turn off alias interface.
+ ifconfig $interface:0- inet 0
+ fi
+
+ if [ -n "$old_ip_address" ]; then
+ # Shut down interface, which will delete routes and clear arp
cache.
+ ifconfig $interface inet 0 down
+ fi
+
+ if [ -n "$alias_ip_address" ]; then
+ ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+ route add -host $alias_ip_address $interface:0
+ fi
+
+ ;;
+
+ TIMEOUT)
+ if [ -n "$alias_ip_address" ]; then
+ ifconfig $interface:0- inet 0
+ fi
+
+ ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ $new_broadcast_arg $mtu_arg
+
+ set -- $new_routers
+ first_router="$1"
+
+ if ping -q -c 1 $first_router; then
+ if [ "$new_ip_address" != "$alias_ip_address" -a \
+ -n "$alias_ip_address" ]; then
+ ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
+ route add -host $alias_ip_address dev $interface:0
+ fi
+
+ # point to point
+ if [ "$new_subnet_mask" == "255.255.255.255" ]; then
+ for router in $new_routers; do
+ route add -host $router dev $interface
+ done
+ fi
+
+ for router in $new_routers; do
+ route add default dev $interface gw $router $metric_arg
+ done
+
+ make_resolv_conf
+ else
+ # Changed from 'ifconfig $interface inet 0 down' - see Debian bug
#144666
+ ifconfig $interface inet 0
+ exit_with_hooks 2
+ fi
+
+ ;;
+esac
+
+exit_with_hooks 0
--- dhcp3-3.0.2.orig/debian/dhclient-script.kfreebsd
+++ dhcp3-3.0.2/debian/dhclient-script.kfreebsd
@@ -0,0 +1,246 @@
+#!/bin/bash
+# dhclient-script for GNU/kFreeBSD. Aurelien Jarno, May, 2005.
+# Based on Linux and FreeBSD scripts.
+
+make_resolv_conf() {
+ if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then
+ local new_resolv_conf=/etc/resolv.conf.dhclient-new
+ rm -f $new_resolv_conf
+ if [ -n "$new_domain_name" ]; then
+ echo search $new_domain_name >>$new_resolv_conf
+ fi
+ if [ -n "$new_domain_name_servers" ]; then
+ for nameserver in $new_domain_name_servers; do
+ echo nameserver $nameserver >>$new_resolv_conf
+ done
+ else # keep 'old' nameservers
+ sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p
/etc/resolv.conf >>$new_resolv_conf
+ fi
+ chown --reference=/etc/resolv.conf $new_resolv_conf
+ chmod --reference=/etc/resolv.conf $new_resolv_conf
+ mv -f $new_resolv_conf /etc/resolv.conf
+ fi
+}
+
+run_hook() {
+ local script="$1"
+ local exit_status
+
+ if [ -f $script ]; then
+ . $script
+ fi
+
+
+ if [ -n "$exit_status" ] && [ "$exit_status" -ne 0 ]; then
+ logger -p daemon.err "$script returned non-zero exit status
$exit_status"
+ save_exit_status=$exit_status
+ fi
+
+ return $exit_status
+}
+
+run_hookdir() {
+ local dir="$1"
+ local exit_status
+
+ if [ -d "$dir" ]; then
+ for script in $(run-parts --list $dir); do
+ run_hook $script || true
+ exit_status=$?
+ done
+ fi
+
+ return $exit_status
+}
+
+# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
+exit_with_hooks() {
+ exit_status=$1
+
+ # Source the documented exit-hook script, if it exists
+ if ! run_hook /etc/dhcp3/dhclient-exit-hooks; then
+ exit_status=$?
+ fi
+
+ # Now run scripts in the Debian-specific directory.
+ if ! run_hookdir /etc/dhcp3/dhclient-exit-hooks.d; then
+ exit_status=$?
+ fi
+
+ exit $exit_status
+}
+
+set_hostname() {
+ local current_hostname=$(hostname)
+ if [ -z "$current_hostname" -o "$current_hostname" = "(none)" ]; then
+ hostname "$new_host_name"
+ fi
+}
+
+if [ -n "$new_broadcast_address" ]; then
+ new_broadcast_arg="broadcast $new_broadcast_address"
+fi
+if [ -n "$old_broadcast_address" ]; then
+ old_broadcast_arg="broadcast $old_broadcast_address"
+fi
+if [ -n "$new_subnet_mask" ]; then
+ new_subnet_arg="netmask $new_subnet_mask"
+fi
+if [ -n "$old_subnet_mask" ]; then
+ old_subnet_arg="netmask $old_subnet_mask"
+fi
+if [ -n "$alias_subnet_mask" ]; then
+ alias_subnet_arg="netmask $alias_subnet_mask"
+fi
+if [ -n "$new_interface_mtu" ]; then
+ mtu_arg="mtu $new_interface_mtu"
+fi
+if [ -n "$IF_METRIC" ]; then
+ metric_arg="metric $IF_METRIC" # interfaces(5), "metric" option
+fi
+
+
+# The action starts here
+
+# Invoke the local dhcp client enter hooks, if they exist.
+run_hook /etc/dhcp3/dhclient-enter-hooks
+run_hookdir /etc/dhcp3/dhclient-enter-hooks.d
+
+# Execute the operation
+case "$reason" in
+ ARPCHECK|ARPSEND)
+ # Do nothing
+ ;;
+ MEDIUM)
+ ifconfig $interface $medium
+ ifconfig $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1
+ sleep 1
+ ;;
+ PREINIT)
+ # The DHCP client is requesting that an interface be
+ # configured as required in order to send packets prior to
+ # receiving an actual address. - dhclient-script(8)
+
+ if [ -n "$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
+ ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
+ broadcast 255.255.255.255 up
+ ;;
+ BOUND|RENEW|REBIND|REBOOT)
+
+ set_hostname
+
+ if [ -n "$old_ip_address" -a -n "$alias_ip_address" -a \
+ "$alias_ip_address" != "$old_ip_address" ]; then
+ # Possible new alias. Remove old alias.
+ 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
+ if [ -n "$old_ip_address" -a \
+ "$old_ip_address" != "$new_ip_address" ]; then
+ ifconfig $interface inet -alias $old_ip_address $medium
+ route delete $old_ip_address 127.1 >/dev/null 2>&1
+ # IP address changed. Bringing down the interface will delete all
other
+ # route, and clear the ARP cache.
+ ifconfig $interface inet 0 down
+ fi
+
+ if [ -z "$old_ip_address" -o "$old_ip_address" != "$new_ip_address" -o
\
+ "$reason" = "BOUND" -o "$reason" = "REBOOT" ]; then
+
+ ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ $new_broadcast_arg $medium $mtu_arg
+ route add $new_ip_address 127.1 $metric_arg >/dev/null 2>&1
+ for router in $new_routers; do
+ route add default $router >/dev/null 2>&1
+ done
+ if [ -n "$new_static_routes" ]; then
+ set -- $new_static_routes
+ while [ $# -gt 1 ]; do
+ route add $1 $2
+ shift; shift
+ done
+ fi
+ fi
+
+ if [ "$new_ip_address" != "$alias_ip_address" -a -n
"$alias_ip_address" ];
+ then
+ ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+ route add $alias_ip_address 127.0.0.1
+ fi
+
+ make_resolv_conf
+
+ ;;
+
+ EXPIRE|FAIL|RELEASE|STOP)
+ if [ -n "$alias_ip_address" ]; then
+ # Turn off alias interface.
+ 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
+
+ if [ -n "$old_ip_address" ]; then
+ ifconfig $interface inet -alias $old_ip_address $medium
+ route delete $old_ip_address 127.1 >/dev/null 2>&1
+ # Shut down interface, which will delete all other routes and
clear arp cache.
+ ifconfig $interface inet 0 down
+ fi
+
+ if [ -n "$alias_ip_address" ]; then
+ ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+ route add $alias_ip_address 127.0.0.1
+ fi
+
+ ;;
+
+ TIMEOUT)
+ if [ -n "$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
+
+ ifconfig $interface inet $new_ip_address $new_subnet_arg \
+ $new_broadcast_arg $medium $mtu_arg
+ sleep 1
+
+ set -- $new_routers
+ first_router="$1"
+
+ if ping -q -c 1 $first_router; then
+ if [ "$new_ip_address" != "$alias_ip_address" -a \
+ -n "$alias_ip_address" ]; then
+ ifconfig $interface inet alias $alias_ip_address
$alias_subnet_arg
+ route add $alias_ip_address 127.0.0.1
+ fi
+ route add $new_ip_address 127.1 >/dev/null 2>&1
+
+ # point to point
+ if [ "$new_subnet_mask" == "255.255.255.255" ]; then
+ for router in $new_routers; do
+ route add $router $new_ip_address
+ done
+ fi
+
+ for router in $new_routers; do
+ route add default $router $metric_arg
+ done
+ set -- $new_static_routes
+ while [ $# -gt 1 ]; do
+ route add $1 $2
+ shift; shift
+ done
+
+ make_resolv_conf
+ else
+ # Changed from 'ifconfig $interface inet 0 down' - see Debian bug
#144666
+ ifconfig $interface inet 0
+ exit_with_hooks 2
+ fi
+
+ ;;
+esac
+
+exit_with_hooks 0
--- dhcp3-3.0.2.orig/debian/patches/kfreebsd.dpatch
+++ dhcp3-3.0.2/debian/patches/kfreebsd.dpatch
@@ -0,0 +1,403 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## kfreebsd.dpatch by <[EMAIL PROTECTED]>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
[EMAIL PROTECTED]@
+--- dhcp3-3.0.2.orig/Makefile.conf
++++ dhcp3-3.0.2/Makefile.conf
+@@ -485,3 +485,22 @@
+ #FFMANEXT = .5
+ #MANINSTALL = install -i -m 444
+ ##--hpux-gcc--
++
++## GNU/kFreeBSD
++##--kfreebsd--
++#CF = cf/kfreebsd.h
++#COPTS = $(BINDDEF) $(CC_OPTIONS)
++#ADMMANDIR = /usr/share/man/man8
++#ADMMANEXT = .8
++#FFMANDIR = /usr/share/man/man5
++#FFMANEXT = .5
++#LIBMANDIR = /usr/share/man/man3
++#LIBMANEXT = .3
++#USRMANDIR = /usr/share/man/man1
++#USRMANEXT = .1
++#MANCAT = man
++#VARRUN = /var/run
++#VARDB = /var/lib/dhcp
++#SCRIPT=kfreebsd
++##--kfreebsd--
++
+--- dhcp3-3.0.2.orig/configure
++++ dhcp3-3.0.2/configure
+@@ -184,6 +184,8 @@
+ sysname=nextstep;;
+ UnixWare)
+ sysname=uw7;;
++ GNU/kFreeBSD)
++ sysname=kfreebsd;
+ esac
+ fi
+
+@@ -213,6 +215,7 @@
+ echo " qnx QNX 4.2 or higher"
+ echo " NEXTSTEP NeXTSTEP"
+ echo " sco SCO Open Server"
++ echo " kfreebsd GNU/kFreeBSD"
+ exit 1;
+ fi
+ fi
+--- dhcp3-3.0.2.orig/common/bpf.c
++++ dhcp3-3.0.2/common/bpf.c
+@@ -407,7 +407,7 @@
+ interface -> rbuf,
+ (size_t)interface -> rbuf_max);
+ if (length <= 0) {
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ if (errno == ENXIO) {
+ #else
+ if (errno == EIO) {
+--- dhcp3-3.0.2.orig/includes/osdep.h
++++ dhcp3-3.0.2/includes/osdep.h
+@@ -133,6 +133,10 @@
+ # endif
+ #endif
+
++#if defined(__FreeBSD_kernel__) && defined(__GLIBC__)
++# include "cf/kfreebsd.h"
++#endif
++
+ /* snprintf/vsnprintf hacks. for systems with no libc versions only. */
+ #ifdef NO_SNPRINTF
+ extern int isc_print_snprintf(char *, size_t, const char *, ...);
+--- dhcp3-3.0.2.orig/includes/cf/kfreebsd.h
++++ dhcp3-3.0.2/includes/cf/kfreebsd.h
+@@ -0,0 +1,148 @@
++/* kfreebsd.h
++
++ System dependencies for GNU/kFreeBSD... */
++
++/*
++ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
++ * Copyright (c) 1996-2003 by Internet Software Consortium
++ *
++ * Permission to use, copy, modify, and distribute this software for any
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in all copies.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
++ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ *
++ * Internet Systems Consortium, Inc.
++ * 950 Charter Street
++ * Redwood City, CA 94063
++ * <[EMAIL PROTECTED]>
++ * http://www.isc.org/
++ *
++ * This software has been written for Internet Systems Consortium
++ * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc.
++ * To learn more about Internet Systems Consortium, see
++ * ``http://www.isc.org/''. To learn more about Vixie Enterprises,
++ * see ``http://www.vix.com''. To learn more about Nominum, Inc., see
++ * ``http://www.nominum.com''.
++ */
++
++#include <features.h>
++
++typedef u_int8_t u8;
++typedef u_int16_t u16;
++typedef u_int32_t u32;
++
++#include <syslog.h>
++#include <sys/types.h>
++#include <string.h>
++#include <paths.h>
++#include <errno.h>
++#include <unistd.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <setjmp.h>
++#include <limits.h>
++
++extern int h_errno;
++
++#include <net/if.h>
++#include <net/if_dl.h>
++#include <net/if_arp.h>
++#include <net/route.h>
++#if !defined (INADDR_LOOPBACK)
++# define INADDR_LOOPBACK ((u_int32_t)0x7f000001)
++#endif
++
++#include <sys/time.h> /* gettimeofday()*/
++
++/* Databases go in /var/state/dhcp. It would also be valid to put them
++ in /var/state/misc - indeed, given that there's only one lease file, it
++ would probably be better. However, I have some ideas for optimizing
++ the lease database that may result in a _lot_ of smaller files being
++ created, so in that context it makes more sense to have a seperate
++ directory. */
++
++#ifndef _PATH_DHCPD_DB
++#define _PATH_DHCPD_DB "/var/state/dhcp/dhcpd.leases"
++#endif
++
++#ifndef _PATH_DHCLIENT_DB
++#define _PATH_DHCLIENT_DB "/var/state/dhcp/dhclient.leases"
++#endif
++
++/* Varargs stuff... */
++#include <stdarg.h>
++#define VA_DOTDOTDOT ...
++#define VA_start(list, last) va_start (list, last)
++#define va_dcl
++
++#if defined(__alpha__) || defined(__amd64__) || defined(__ia64__) || \
++ defined(__sparc64__)
++# define PTRSIZE_64BIT
++#endif
++
++#define VOIDPTR void *
++
++#define EOL '\n'
++
++/* Time stuff... */
++
++#include <time.h>
++
++#define TIME time_t
++#define GET_TIME(x) time ((x))
++
++#define HAVE_SA_LEN
++
++#if defined (USE_DEFAULT_NETWORK)
++# define USE_BPF
++#endif
++#define HAVE_MKSTEMP
++#ifdef NEED_PRAND_CONF
++#ifndef HAVE_DEV_RANDOM
++ # define HAVE_DEV_RANDOM 1
++ #endif /* HAVE_DEV_RANDOM */
++
++const char *cmds[] = {
++ "/bin/ps -axlw 2>&1",
++ "/sbin/arp -an 2>&1",
++ "/bin/netstat -an 2>&1",
++ "/bin/df 2>&1",
++ "/usr/bin/dig com. soa +ti=1 +retry=0 2>&1",
++ "/usr/bin/uptime 2>&1",
++ "/usr/bin/netstat -an 2>&1",
++ "/usr/bin/dig . soa +ti=1 +retry=0 2>&1",
++ "/usr/bin/vmstat 2>&1",
++ "/usr/bin/w 2>&1",
++ NULL
++};
++
++const char *dirs[] = {
++ "/tmp",
++ "/usr/tmp",
++ ".",
++ "/",
++ "/var/spool",
++ "/dev",
++ "/var/spool/mail",
++ "/home",
++ "/usr/home",
++ NULL
++};
++
++const char *files[] = {
++ "/proc/stat",
++ "/proc/meminfo",
++ "/proc/self/status",
++ "/var/log/messages",
++ "/var/log/wtmp",
++ "/var/log/lastlog",
++ NULL
++};
++#endif /* NEED_PRAND_CONF */
+--- dhcp3-3.0.2.orig/client/scripts/kfreebsd
++++ dhcp3-3.0.2/client/scripts/kfreebsd
+@@ -0,0 +1,174 @@
++#!/bin/bash
++# dhclient-script for GNU/kFreeBSD. Aurelien Jarno, May, 2005.
++# Based on Linux and FreeBSD scripts.
++
++make_resolv_conf() {
++ if [ "x$new_domain_name" != x ] && [ x"$new_domain_name_servers" != x ];
then
++ echo search $new_domain_name >/etc/resolv.conf
++ chmod 644 /etc/resolv.conf
++ for nameserver in $new_domain_name_servers; do
++ echo nameserver $nameserver >>/etc/resolv.conf
++ done
++ fi
++}
++
++# 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
++ 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
++ exit_status=0
++ . /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
++
++if [ x$new_broadcast_address != x ]; then
++ new_broadcast_arg="broadcast $new_broadcast_address"
++fi
++if [ x$old_broadcast_address != x ]; then
++ old_broadcast_arg="broadcast $old_broadcast_address"
++fi
++if [ x$new_subnet_mask != x ]; then
++ new_subnet_arg="netmask $new_subnet_mask"
++fi
++if [ x$old_subnet_mask != x ]; then
++ old_subnet_arg="netmask $old_subnet_mask"
++fi
++if [ x$alias_subnet_mask != x ]; then
++ alias_subnet_arg="netmask $alias_subnet_mask"
++fi
++
++if [ x$reason = xMEDIUM ]; then
++ eval "ifconfig $interface $medium"
++ eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
++ sleep 1
++ exit_with_hooks 0
++fi
++
++if [ x$reason = xPREINIT ]; then
++ if [ x$alias_ip_address != x ]; 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
++ ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
++ broadcast 255.255.255.255 up
++ exit_with_hooks 0
++fi
++
++if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
++ exit_with_hooks 0
++fi
++
++if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
++ [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
++ current_hostname=`hostname`
++ if [ x$current_hostname = x ] || \
++ [ x$current_hostname = x$old_host_name ]; then
++ if [ x$current_hostname = x ] || \
++ [ x$new_host_name != x$old_host_name ]; then
++ hostname $new_host_name
++ fi
++ fi
++
++ if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
++ [ x$alias_ip_address != x$old_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
++ if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ];
then
++ eval "ifconfig $interface inet -alias $old_ip_address $medium"
++ route delete $old_ip_address 127.1 >/dev/null 2>&1
++ # IP address changed. Bringing down the interface will delete all other
++ # routes, and clear the ARP cache.
++ ifconfig $interface inet 0 down
++ fi
++ if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
++ [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
++ eval "ifconfig $interface inet $new_ip_address $new_subnet_arg \
++ $new_broadcast_arg $medium"
++ route add $new_ip_address 127.1 >/dev/null 2>&1
++ for router in $new_routers; do
++ route add default $router >/dev/null 2>&1
++ done
++ if [ -n "$new_static_routes" ]; then
++ set -- $new_static_routes
++ while [ $# -gt 1 ]; do
++ route add $1 $2
++ shift; shift
++ done
++ fi
++ fi
++ 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
++ route add $alias_ip_address 127.0.0.1
++ fi
++ make_resolv_conf
++ exit_with_hooks 0
++fi
++
++if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
++ || [ x$reason = xSTOP ]; then
++ if [ x$alias_ip_address != x ]; 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
++ if [ x$old_ip_address != x ]; then
++ eval "ifconfig $interface inet -alias $old_ip_address $medium"
++ route delete $old_ip_address 127.1 >/dev/null 2>&1
++ # Shut down interface, which will delete all other routes and clear arp
cache.
++ ifconfig $interface inet 0 down
++ fi
++ if [ x$alias_ip_address != x ]; then
++ ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
++ route add $alias_ip_address 127.0.0.1
++ fi
++ exit_with_hooks 0
++fi
++
++if [ x$reason = xTIMEOUT ]; then
++ if [ x$alias_ip_address != x ]; 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
++ eval "ifconfig $interface inet $new_ip_address $new_subnet_arg \
++ $new_broadcast_arg $medium"
++ sleep 1
++ if [ -n "$new_routers" ]; then
++ set -- $new_routers
++ if ping -q -c 1 $1; 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
++ route add $alias_ip_address 127.0.0.1
++ fi
++ route add $new_ip_address 127.1 >/dev/null 2>&1
++ for router in $new_routers; do
++ route add default $router >/dev/null 2>&1
++ done
++ set -- $new_static_routes
++ while [ $# -gt 1 ]; do
++ route add $1 $2
++ shift; shift
++ done
++ make_resolv_conf
++ exit_with_hooks 0
++ fi
++ fi
++ eval "ifconfig $interface inet -alias $new_ip_address $medium"
++ ifconfig $interface inet 0
++ exit_with_hooks 1
++fi
++
++exit_with_hooks 0