- Carry over RES_OPTIONS from ifcfg-ethX files to /etc/resolv.conf

(#202923)
- Clean up Requires tags for devel packages
- Allow SEARCH variable in ifcfg files to override search path (#454152)
- Do not down interface if there is an active lease (#453982)
- Clean up how dhclient-script restarts ypbind
This commit is contained in:
David Cantrell 2008-08-01 21:16:41 +00:00
parent d016d23988
commit ddfb139a17
15 changed files with 963 additions and 924 deletions

View File

@ -1,15 +0,0 @@
--- dhcp-3.0.5/common/dispatch.c.ecat 2006-02-22 17:43:27.000000000 -0500
+++ dhcp-3.0.5/common/dispatch.c 2007-03-30 15:54:15.000000000 -0400
@@ -195,7 +195,6 @@
}
}
-#if defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
void cancel_all_timeouts ()
{
struct timeout *t, *n;
@@ -216,4 +215,3 @@
dfree (t, MDL);
}
}
-#endif

View File

@ -1,37 +0,0 @@
diff -up dhcp-3.0.6/minires/ns_name.c.memory dhcp-3.0.6/minires/ns_name.c
--- dhcp-3.0.6/minires/ns_name.c.memory 2004-06-10 13:59:40.000000000 -0400
+++ dhcp-3.0.6/minires/ns_name.c 2007-07-10 11:43:29.000000000 -0400
@@ -71,6 +71,11 @@ ns_name_ntop(const u_char *src, char *ds
dn = dst;
eom = dst + dstsiz;
+ if (dn >= eom) {
+ errno = EMSGSIZE;
+ return (-1);
+ }
+
while ((n = *cp++) != 0) {
if ((n & NS_CMPRSFLGS) != 0) {
/* Some kind of compression pointer. */
diff -up dhcp-3.0.6/common/packet.c.memory dhcp-3.0.6/common/packet.c
--- dhcp-3.0.6/common/packet.c.memory 2007-05-01 16:42:55.000000000 -0400
+++ dhcp-3.0.6/common/packet.c 2007-07-10 11:43:29.000000000 -0400
@@ -140,6 +140,7 @@ void assemble_udp_ip_header (interface,
struct ip ip;
struct udphdr udp;
+ memset( &ip, '\0', sizeof ip);
/* Fill out the IP header */
IP_V_SET (&ip, 4);
IP_HL_SET (&ip, 20);
diff -up dhcp-3.0.6/common/lpf.c.memory dhcp-3.0.6/common/lpf.c
--- dhcp-3.0.6/common/lpf.c.memory 2007-07-10 11:43:29.000000000 -0400
+++ dhcp-3.0.6/common/lpf.c 2007-07-10 11:43:29.000000000 -0400
@@ -246,6 +246,7 @@ static void lpf_tr_filter_setup (info)
struct interface_info *info;
{
struct sock_fprog p;
+ memset(&p,'\0', sizeof(struct sock_fprog));
/* Set up the bpf filter program structure. This is defined in
bpf.c */

View File

@ -1,6 +1,7 @@
--- dhcp-3.0.5/client/dhclient.c.decline 2007-03-30 15:29:58.000000000 -0400
+++ dhcp-3.0.5/client/dhclient.c 2007-03-30 15:50:25.000000000 -0400
@@ -934,6 +934,7 @@
diff -up dhcp-4.0.0//client/dhclient.c.backoff dhcp-4.0.0//client/dhclient.c
--- dhcp-4.0.0//client/dhclient.c.backoff 2008-08-01 10:09:17.000000000 -1000
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 10:10:10.000000000 -1000
@@ -1003,6 +1003,7 @@ void state_init (cpp)
void *cpp;
{
struct client_state *client = cpp;
@ -8,7 +9,7 @@
ASSERT_STATE(state, S_INIT);
@@ -946,9 +947,16 @@
@@ -1015,9 +1016,16 @@ void state_init (cpp)
client -> first_sending = cur_time;
client -> interval = client -> config -> initial_interval;
@ -28,7 +29,7 @@
}
/* state_selecting is called when one or more DHCPOFFER packets have been
@@ -1215,6 +1223,7 @@
@@ -1284,6 +1292,7 @@ void bind_lease (client)
send_decline (client);
destroy_client_lease (client -> new);
client -> new = (struct client_lease *)0;
@ -36,7 +37,7 @@
state_init (client);
return;
}
@@ -3183,6 +3192,7 @@
@@ -3439,6 +3448,7 @@ void client_location_changed ()
case S_INIT:
case S_REBINDING:
case S_STOPPED:
@ -44,9 +45,10 @@
break;
}
client -> state = S_INIT;
--- dhcp-3.0.5/includes/dhcpd.h.decline 2007-03-30 15:30:14.000000000 -0400
+++ dhcp-3.0.5/includes/dhcpd.h 2007-03-30 15:50:53.000000000 -0400
@@ -704,7 +704,8 @@
diff -up dhcp-4.0.0//includes/dhcpd.h.backoff dhcp-4.0.0//includes/dhcpd.h
--- dhcp-4.0.0//includes/dhcpd.h.backoff 2008-08-01 10:09:01.000000000 -1000
+++ dhcp-4.0.0//includes/dhcpd.h 2008-08-01 10:10:10.000000000 -1000
@@ -992,7 +992,8 @@ enum dhcp_state {
S_BOUND = 5,
S_RENEWING = 6,
S_REBINDING = 7,

View File

@ -0,0 +1,16 @@
diff -up dhcp-4.0.0//common/dispatch.c.timeout dhcp-4.0.0//common/dispatch.c
--- dhcp-4.0.0//common/dispatch.c.timeout 2007-09-05 07:32:10.000000000 -1000
+++ dhcp-4.0.0//common/dispatch.c 2008-08-01 10:11:35.000000000 -1000
@@ -190,7 +190,6 @@ void cancel_timeout (where, what)
}
}
-#if defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
void cancel_all_timeouts ()
{
struct timeout *t, *n;
@@ -211,4 +210,3 @@ void relinquish_timeouts ()
dfree (t, MDL);
}
}
-#endif

View File

@ -1,6 +1,7 @@
--- dhcp-3.0.5/omapip/errwarn.c.message 2007-03-29 15:03:12.000000000 -0400
+++ dhcp-3.0.5/omapip/errwarn.c 2007-03-29 15:08:50.000000000 -0400
@@ -80,20 +80,13 @@
diff -up dhcp-4.0.0//omapip/errwarn.c.errwarn dhcp-4.0.0//omapip/errwarn.c
--- dhcp-4.0.0//omapip/errwarn.c.errwarn 2007-07-12 20:43:42.000000000 -1000
+++ dhcp-4.0.0//omapip/errwarn.c 2008-08-01 10:06:05.000000000 -1000
@@ -76,20 +76,13 @@ void log_fatal (const char * fmt, ... )
#if !defined (NOMINUM)
log_error ("%s", "");

View File

@ -1,6 +1,7 @@
--- dhcp-3.0.5/server/confpars.c.failover 2007-03-30 16:28:08.000000000 -0400
+++ dhcp-3.0.5/server/confpars.c 2007-03-30 16:32:39.000000000 -0400
@@ -998,10 +998,17 @@
diff -up dhcp-4.0.0//server/confpars.c.failover dhcp-4.0.0//server/confpars.c
--- dhcp-4.0.0//server/confpars.c.failover 2008-08-01 10:07:46.000000000 -1000
+++ dhcp-4.0.0//server/confpars.c 2008-08-01 10:14:03.000000000 -1000
@@ -1065,10 +1065,17 @@ void parse_failover_peer (cfile, group,
parse_warn (cfile, "peer address may not be omitted");
/* XXX - when/if we get a port number assigned, just set as default */

View File

@ -1,7 +1,7 @@
diff -up dhcp-4.0.0/client/dhclient.c.fast dhcp-4.0.0/client/dhclient.c
--- dhcp-4.0.0/client/dhclient.c.fast 2007-12-29 06:07:14.000000000 -1000
+++ dhcp-4.0.0/client/dhclient.c 2007-12-29 06:08:07.000000000 -1000
@@ -3624,10 +3624,7 @@ isc_result_t dhclient_interface_startup_
diff -up dhcp-4.0.0//client/dhclient.c.fast_timeout dhcp-4.0.0//client/dhclient.c
--- dhcp-4.0.0//client/dhclient.c.fast_timeout 2008-08-01 10:10:10.000000000 -1000
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 10:13:37.000000000 -1000
@@ -3613,10 +3613,7 @@ isc_result_t dhclient_interface_startup_
ip -> flags |= INTERFACE_RUNNING;
for (client = ip -> client; client; client = client -> next) {
client -> state = S_INIT;

View File

@ -0,0 +1,19 @@
diff -up dhcp-4.0.0//client/dhclient.c.inherit dhcp-4.0.0//client/dhclient.c
--- dhcp-4.0.0//client/dhclient.c.inherit 2008-08-01 09:49:36.000000000 -1000
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 09:53:28.000000000 -1000
@@ -2393,6 +2393,15 @@ void send_request (cpp)
/* Now do a preinit on the interface so that we can
discover a new address. */
script_init (client, "PREINIT", (struct string_list *)0);
+ /* Has an active lease */
+ if (client -> active &&
+ client -> active -> is_bootp &&
+ client -> active -> expiry > cur_time &&
+ primary_address.s_addr != 0 &&
+ client -> active -> address.len == 4 &&
+ memcpy (client -> active -> address.iabuf, &primary_address, 4) == 0)
+ client_envadd (client, "", "keep_old_ip", "%s", "yes");
+
if (client -> alias)
script_write_params (client, "alias_",
client -> alias);

File diff suppressed because it is too large Load Diff

37
dhcp-4.0.0-memory.patch Normal file
View File

@ -0,0 +1,37 @@
diff -up dhcp-4.0.0//common/lpf.c.memory dhcp-4.0.0//common/lpf.c
--- dhcp-4.0.0//common/lpf.c.memory 2007-07-12 20:43:41.000000000 -1000
+++ dhcp-4.0.0//common/lpf.c 2008-08-01 10:08:01.000000000 -1000
@@ -245,6 +245,7 @@ static void lpf_tr_filter_setup (info)
struct interface_info *info;
{
struct sock_fprog p;
+ memset(&p,'\0', sizeof(struct sock_fprog));
/* Set up the bpf filter program structure. This is defined in
bpf.c */
diff -up dhcp-4.0.0//common/packet.c.memory dhcp-4.0.0//common/packet.c
--- dhcp-4.0.0//common/packet.c.memory 2007-11-30 11:51:43.000000000 -1000
+++ dhcp-4.0.0//common/packet.c 2008-08-01 10:08:01.000000000 -1000
@@ -135,6 +135,7 @@ void assemble_udp_ip_header (interface,
struct ip ip;
struct udphdr udp;
+ memset( &ip, '\0', sizeof ip);
/* Fill out the IP header */
IP_V_SET (&ip, 4);
IP_HL_SET (&ip, 20);
diff -up dhcp-4.0.0//minires/ns_name.c.memory dhcp-4.0.0//minires/ns_name.c
--- dhcp-4.0.0//minires/ns_name.c.memory 2005-03-17 10:15:17.000000000 -1000
+++ dhcp-4.0.0//minires/ns_name.c 2008-08-01 10:08:01.000000000 -1000
@@ -71,6 +71,11 @@ ns_name_ntop(const u_char *src, char *ds
dn = dst;
eom = dst + dstsiz;
+ if (dn >= eom) {
+ errno = EMSGSIZE;
+ return (-1);
+ }
+
while ((n = *cp++) != 0) {
if ((n & NS_CMPRSFLGS) != 0) {
/* Some kind of compression pointer. */

View File

@ -1,7 +1,8 @@
--- dhcp-3.0.5/client/dhclient.c.release 2007-03-30 15:30:14.000000000 -0400
+++ dhcp-3.0.5/client/dhclient.c 2007-03-30 15:29:58.000000000 -0400
@@ -366,9 +366,81 @@
}
diff -up dhcp-4.0.0//client/dhclient.c.release dhcp-4.0.0//client/dhclient.c
--- dhcp-4.0.0//client/dhclient.c.release 2008-08-01 10:09:01.000000000 -1000
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 10:09:17.000000000 -1000
@@ -412,9 +412,81 @@ main(int argc, char **argv) {
kill(oldpid, SIGTERM);
}
fclose(pidfd);
+ } else {
@ -80,5 +81,5 @@
+ write_client_pid_file();
+
if (!quiet) {
log_info ("%s %s", message, DHCP_VERSION);
log_info ("%s %s", message, PACKAGE_VERSION);
log_info (copyright);

View File

@ -1,7 +1,7 @@
diff -up dhcp-4.0.0//client/dhclient.c.selinux dhcp-4.0.0//client/dhclient.c
--- dhcp-4.0.0//client/dhclient.c.selinux 2008-05-16 13:42:18.000000000 -1000
+++ dhcp-4.0.0//client/dhclient.c 2008-05-16 13:57:54.000000000 -1000
@@ -2908,6 +2908,11 @@ void rewrite_client_leases ()
--- dhcp-4.0.0//client/dhclient.c.selinux 2008-08-01 10:16:48.000000000 -1000
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 10:16:48.000000000 -1000
@@ -2708,6 +2708,11 @@ void rewrite_client_leases ()
return;
}
@ -13,7 +13,7 @@ diff -up dhcp-4.0.0//client/dhclient.c.selinux dhcp-4.0.0//client/dhclient.c
/* If there is a default duid, write it out. */
if (default_duid.len != 0)
write_duid(&default_duid);
@@ -3011,6 +3016,10 @@ write_duid(struct data_string *duid)
@@ -2811,6 +2816,10 @@ write_duid(struct data_string *duid)
log_error("can't create %s: %m", path_dhclient_db);
return ISC_R_IOERROR;
}
@ -24,7 +24,7 @@ diff -up dhcp-4.0.0//client/dhclient.c.selinux dhcp-4.0.0//client/dhclient.c
}
/* It would make more sense to write this as a hex string,
@@ -3058,6 +3067,10 @@ write_client6_lease(struct client_state
@@ -2858,6 +2867,10 @@ write_client6_lease(struct client_state
log_error("can't create %s: %m", path_dhclient_db);
return ISC_R_IOERROR;
}
@ -35,7 +35,7 @@ diff -up dhcp-4.0.0//client/dhclient.c.selinux dhcp-4.0.0//client/dhclient.c
}
stat = fprintf(leaseFile, "lease6 {\n");
@@ -3161,6 +3174,10 @@ int write_client_lease (client, lease, r
@@ -2961,6 +2974,10 @@ int write_client_lease (client, lease, r
log_error ("can't create %s: %m", path_dhclient_db);
return 0;
}

View File

@ -1,6 +1,7 @@
--- dhcp-3.0.5/server/bootp.c.unicast 2005-05-18 15:54:17.000000000 -0400
+++ dhcp-3.0.5/server/bootp.c 2007-03-30 16:16:00.000000000 -0400
@@ -62,6 +62,7 @@
diff -up dhcp-4.0.0//server/bootp.c.unicast dhcp-4.0.0//server/bootp.c
--- dhcp-4.0.0//server/bootp.c.unicast 2007-10-26 12:46:50.000000000 -1000
+++ dhcp-4.0.0//server/bootp.c 2008-08-01 10:12:38.000000000 -1000
@@ -58,6 +58,7 @@ void bootp (packet)
char msgbuf [1024];
int ignorep;
int peer_has_leases = 0;
@ -8,7 +9,7 @@
if (packet -> raw -> op != BOOTREQUEST)
return;
@@ -77,7 +78,7 @@
@@ -73,7 +74,7 @@ void bootp (packet)
? inet_ntoa (packet -> raw -> giaddr)
: packet -> interface -> name);
@ -17,7 +18,7 @@
log_info ("%s: network unknown", msgbuf);
return;
}
@@ -357,6 +358,13 @@
@@ -384,6 +385,13 @@ void bootp (packet)
from, &to, &hto);
goto out;
}
@ -31,17 +32,18 @@
/* If it comes from a client that already knows its address
and is not requesting a broadcast response, and we can
--- dhcp-3.0.5/server/dhcp.c.unicast 2007-03-30 16:13:36.000000000 -0400
+++ dhcp-3.0.5/server/dhcp.c 2007-03-30 16:19:35.000000000 -0400
@@ -3817,6 +3817,7 @@
diff -up dhcp-4.0.0//server/dhcp.c.unicast dhcp-4.0.0//server/dhcp.c
--- dhcp-4.0.0//server/dhcp.c.unicast 2007-11-02 12:09:02.000000000 -1000
+++ dhcp-4.0.0//server/dhcp.c 2008-08-01 10:12:38.000000000 -1000
@@ -3904,6 +3904,7 @@ int locate_network (packet)
struct data_string data;
struct subnet *subnet = (struct subnet *)0;
struct option_cache *oc;
+ int norelay = 0;
/* See if there's a subnet selection option. */
oc = lookup_option (&dhcp_universe, packet -> options,
@@ -3826,12 +3827,24 @@
/* See if there's a Relay Agent Link Selection Option, or a
* Subnet Selection Option. The Link-Select and Subnet-Select
@@ -3919,12 +3920,24 @@ int locate_network (packet)
from the interface, if there is one. If not, fail. */
if (!oc && !packet -> raw -> giaddr.s_addr) {
if (packet -> interface -> shared_network) {
@ -70,8 +72,8 @@
- return 0;
}
/* If there's an SSO, and it's valid, use it to figure out the
@@ -3853,7 +3866,10 @@
/* If there's an option indicating link connection, and it's valid,
@@ -3947,7 +3960,10 @@ int locate_network (packet)
data_string_forget (&data, MDL);
} else {
ia.len = 4;
@ -83,7 +85,7 @@
}
/* If we know the subnet on which the IP address lives, use it. */
@@ -3861,7 +3877,10 @@
@@ -3955,7 +3971,10 @@ int locate_network (packet)
shared_network_reference (&packet -> shared_network,
subnet -> shared_network, MDL);
subnet_dereference (&subnet, MDL);

View File

@ -26,16 +26,16 @@ Source10: libdhcp_control.h
Source11: dhcp.schema
Source12: get-ldap-patch.sh
Patch0: %{name}-3.0.5-errwarn-message.patch
Patch0: %{name}-4.0.0-errwarn-message.patch
Patch1: %{name}-4.0.0-ldap-configuration.patch
Patch2: %{name}-3.0.6-memory.patch
Patch2: %{name}-4.0.0-memory.patch
Patch3: %{name}-4.0.0-options.patch
Patch4: %{name}-3.0.5-release-by-ifup.patch
Patch5: %{name}-3.0.5-dhclient-decline-backoff.patch
Patch6: %{name}-3.0.5-enable-timeout-functions.patch
Patch7: %{name}-3.0.5-unicast-bootp.patch
Patch4: %{name}-4.0.0-release-by-ifup.patch
Patch5: %{name}-4.0.0-dhclient-decline-backoff.patch
Patch6: %{name}-4.0.0-enable-timeout-functions.patch
Patch7: %{name}-4.0.0-unicast-bootp.patch
Patch8: %{name}-4.0.0-fast-timeout.patch
Patch9: %{name}-3.0.5-failover-ports.patch
Patch9: %{name}-4.0.0-failover-ports.patch
Patch10: %{name}-4.0.0-dhclient-usage.patch
Patch11: %{name}-4.0.0-default-requested-options.patch
Patch12: %{name}-4.0.0-xen-checksum.patch
@ -46,6 +46,7 @@ Patch16: %{name}-4.0.0-NetworkManager-crash.patch
Patch17: %{name}-4.0.0-selinux.patch
Patch18: %{name}-4.0.0-libdhcp4client.patch
Patch19: %{name}-4.0.0-O_CLOEXEC.patch
Patch20: %{name}-4.0.0-inherit-leases.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: autoconf
@ -199,6 +200,9 @@ client library.
# Make sure all open file descriptors are closed-on-exec for SELinux
%patch19 -p1
# If we have an active lease, do not down the interface (#453982)
%patch20 -p1
# Copy in documentation and example scripts for LDAP patch to dhcpd
%{__install} -p -m 0644 %{SOURCE5} .
%{__install} -p -m 0644 %{SOURCE6} doc/
@ -427,9 +431,12 @@ fi
%{_libdir}/libdhcp4client.so
%changelog
* Thu Jul 24 2008 David Cantrell <dcantrell@redhat.com> - 12:4.0.0-17
* Fri Aug 01 2008 David Cantrell <dcantrell@redhat.com> - 12:4.0.0-17
- Carry over RES_OPTIONS from ifcfg-ethX files to /etc/resolv.conf (#202923)
- Clean up Requires tags for devel packages
- Allow SEARCH variable in ifcfg files to override search path (#454152)
- Do not down interface if there is an active lease (#453982)
- Clean up how dhclient-script restarts ypbind
* Sat Jun 21 2008 David Cantrell <dcantrell@redhat.com> - 12:4.0.0-16
- Remove instaces of \032 in domain search option (#450042)

37
linux
View File

@ -47,16 +47,20 @@ make_resolv_conf() {
rscf=`mktemp /tmp/XXXXXX`;
echo '; generated by /sbin/dhclient-script' > $rscf
if [ -n "$new_domain_search" ]; then
echo "search ${new_domain_search//\\032/ }" >> $rscf
else
if [ -n "$new_domain_name" ]; then
echo "search ${new_domain_name//\\032/ }" >> $rscf
if [ -z "$SEARCH" ]; then
if [ -n "$new_domain_search" ]; then
echo "search ${new_domain_search//\\032/ }" >> $rscf
else
if [ -n "$new_domain_name" ]; then
echo "search ${new_domain_name//\\032/ }" >> $rscf
fi
fi
else
echo "search $SEARCH" >> $rscf
fi
if [ -n "$RES_OPTIONS" ]; then
echo options $RES_OPTIONS >> $rscf
echo "options $RES_OPTIONS" >> $rscf
fi
for nameserver in $new_domain_name_servers; do
@ -355,8 +359,10 @@ function dhconfig() {
let contents=contents+1
fi
if [ $contents -gt 0 ] && [ -r /var/run/ypbind.pid ] && yppid=$(cat /var/run/ypbind.pid) && [ -d /proc/${yppid} ] && [ "$(if [ -x /usr/bin/readlink ]; then readlink /proc/${yppid}/exe; else echo /sbin/ypbind; fi)" = "/sbin/ypbind" ]; then
kill -HUP $yppid
if [ $contents -gt 0 ]; then
if [ -x /etc/rc.d/init.d/ypbind ] && [ -r /var/run/ypbind.pid ]; then
service ypbind restart >/dev/null 2>&1
fi
fi
elif [ -n "$new_nis_servers" ]; then
save_previous /etc/yp.conf
@ -368,8 +374,10 @@ function dhconfig() {
let contents=contents+1
done
if [ $contents -gt 0 ] && [ -r /var/run/ypbind.pid ] && yppid=$(cat /var/run/ypbind.pid) && [ -d /proc/${yppid} ] && [ "$(if [ -x /usr/bin/readlink ]; then readlink /proc/${yppid}/exe; else echo /sbin/ypbind; fi)" = "/sbin/ypbind" ]; then
kill -HUP $yppid
if [ $contents -gt 0 ]; then
if [ -x /etc/rc.d/init.d/ypbind ] && [ -r /var/run/ypbind.pid ]; then
service ypbind restart >/dev/null 2>&1
fi
fi
fi
@ -511,8 +519,8 @@ if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
/bin/rm -f /etc/yp.conf
/bin/mv -f /etc/yp.conf.predhclient.$interface /etc/yp.conf
if [ -r /var/run/ypbind.pid ] && yppid=$(cat /var/run/ypbind.pid) && [ -d /proc/${yppid} ] && [ "$(if [ -x /usr/bin/readlink ]; then readlink /proc/${yppid}/exe; else echo /sbin/ypbind; fi)" = "/sbin/ypbind" ]; then
kill -HUP $yppid
if [ -x /etc/rc.d/init.d/ypbind ] && [ -r /var/run/ypbind.pid ]; then
service ypbind restart >/dev/null 2>&1
fi
fi
fi
@ -554,10 +562,7 @@ if [ x$reason = xTIMEOUT ] && [ "x$new_routers" != 'x' ]; then
exit_with_hooks 0
fi
if [ -z "${dhc_dbus}" ] || (( ( dhc_dbus & 2 ) != 2 )); then
ifconfig $interface inet 0 down
fi
ifconfig $interface inet 0 down
exit_with_hooks 1
elif [ x$reason = xTIMEOUT ]; then
exit_with_hooks 1