summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>2001-03-22 06:59:28 +0000
committerTed Lemon <source@isc.org>2001-03-22 06:59:28 +0000
commitc08637bb394280947261d15b5f0dc64e29203035 (patch)
tree52a3b0375850c1a531dea7ff129892adeb13dd4b /client
parent4ca9936c1be980383c6c86d9b18c32d4c457e4b5 (diff)
downloadisc-dhcp-c08637bb394280947261d15b5f0dc64e29203035.tar.gz
Add some changes suggested by Cyrille Lefevre
Diffstat (limited to 'client')
-rw-r--r--client/dhclient.c32
-rwxr-xr-xclient/scripts/freebsd40
2 files changed, 56 insertions, 16 deletions
diff --git a/client/dhclient.c b/client/dhclient.c
index cbadf201..56b9386d 100644
--- a/client/dhclient.c
+++ b/client/dhclient.c
@@ -41,7 +41,7 @@
#ifndef lint
static char ocopyright[] =
-"$Id: dhclient.c,v 1.124 2001/03/15 23:12:03 mellon Exp $ Copyright (c) 1995-2001 Internet Software Consortium. All rights reserved.\n";
+"$Id: dhclient.c,v 1.125 2001/03/22 06:59:09 mellon Exp $ Copyright (c) 1995-2001 Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -54,6 +54,8 @@ TIME max_lease_time = 86400; /* 24 hours... */
const char *path_dhclient_conf = _PATH_DHCLIENT_CONF;
const char *path_dhclient_db = _PATH_DHCLIENT_DB;
const char *path_dhclient_pid = _PATH_DHCLIENT_PID;
+static char path_dhclient_script_array [] = _PATH_DHCLIENT_SCRIPT;
+char *path_dhclient_script = path_dhclient_script_array;
int dhcp_max_agent_option_packet_length = 0;
@@ -80,6 +82,8 @@ int no_daemon;
int save_scripts;
struct string_list *client_env;
int client_env_count;
+int onetry;
+int quiet;
static void usage PROTO ((void));
@@ -94,7 +98,6 @@ int main (argc, argv, envp)
struct interface_info *ip;
struct client_state *client;
unsigned seed;
- int quiet = 0;
char *server = (char *)0;
char *relay = (char *)0;
isc_result_t status;
@@ -106,6 +109,7 @@ int main (argc, argv, envp)
int no_dhclient_conf = 0;
int no_dhclient_db = 0;
int no_dhclient_pid = 0;
+ int no_dhclient_script = 0;
char *s;
#ifdef SYSLOG_4_2
@@ -161,6 +165,13 @@ int main (argc, argv, envp)
usage ();
path_dhclient_db = argv [i];
no_dhclient_db = 1;
+ } else if (!strcmp (argv [i], "-sf")) {
+ if (++i == argc)
+ usage ();
+ path_dhclient_script = argv [i];
+ no_dhclient_script = 1;
+ } else if (!strcmp (argv [i], "-1")) {
+ onetry = 1;
} else if (!strcmp (argv [i], "-q")) {
quiet = 1;
quiet_interface_discovery = 1;
@@ -224,6 +235,9 @@ int main (argc, argv, envp)
if (!no_dhclient_pid && (s = getenv ("PATH_DHCLIENT_PID"))) {
path_dhclient_pid = s;
}
+ if (!no_dhclient_script && (s = getenv ("PATH_DHCLIENT_SCRIPT"))) {
+ path_dhclient_script = s;
+ }
/* first kill of any currently running client */
if (release_mode) {
@@ -445,10 +459,11 @@ static void usage ()
log_info (arr);
log_info (url);
- log_error ("Usage: dhclient [-d] [-D] [-q] [-p <port>] %s",
+ log_error ("Usage: dhclient [-1dDqr] [-p <port>] %s",
"[-s server]");
- log_fatal (" [-lf lease-file] [-pf pid-file]%s",
- "[-cf config-file] [interface] [-e VAR=val]");
+ log_error (" [-cf config-file] [-lf lease-file]%s",
+ "[-pf pid-file] [-e VAR=val]");
+ log_fatal (" [-sf script-file] [interface]");
}
isc_result_t find_class (struct class **c,
@@ -1453,6 +1468,13 @@ void state_panic (cpp)
/* No leases were available, or what was available didn't work, so
tell the shell script that we failed to allocate an address,
and try again later. */
+ if (onetry) {
+ if (!quiet)
+ log_info ("Unable to obtain a lease on first try.%s",
+ " Exiting.");
+ exit (2);
+ }
+
log_info ("No working leases in persistent database - sleeping.");
script_init (client, "FAIL", (struct string_list *)0);
if (client -> alias)
diff --git a/client/scripts/freebsd b/client/scripts/freebsd
index 544ac05b..b9d7a36c 100755
--- a/client/scripts/freebsd
+++ b/client/scripts/freebsd
@@ -1,5 +1,11 @@
#!/bin/sh
+if [ -x /usr/bin/logger ]; then
+ LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
+else
+ LOGGER=echo
+fi
+
make_resolv_conf() {
echo search $new_domain_name >/etc/resolv.conf
for nameserver in $new_domain_name_servers; do
@@ -29,11 +35,11 @@ if [ -x /etc/dhclient-enter-hooks ]; then
fi
if [ x$new_network_number != x ]; then
- echo New Network Number: $new_network_number
+ $LOGGER New Network Number: $new_network_number
fi
if [ x$new_broadcast_address != x ]; then
- echo 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
@@ -77,6 +83,7 @@ if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
[ x$current_hostname = x$old_host_name ]; then
if [ x$current_hostname = x ] || \
[ x$new_host_name != x$old_host_name ]; then
+ $LOGGER "New Hostname: $new_host_name"
hostname $new_host_name
fi
fi
@@ -93,24 +100,31 @@ if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
route delete default $router >/dev/null 2>&1
done
if [ "$old_static_routes" != "" ]; then
- set $old_static_routes
+ set -- $old_static_routes
while [ $# -gt 1 ]; do
route delete $1 $2
shift; shift
done
fi
- arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' |sh
+ arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' |sh
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_netmask_arg \
$new_broadcast_arg $medium"
+ $LOGGER "New IP Address($interface): $new_ip_address"
+ $LOGGER "New Subnet Mask($interface): $new_subnet_mask"
+ $LOGGER "New Broadcast Address($interface): $new_broadcast_address"
+ if [ "$new_routers" != "" ]; then
+ $LOGGER "New Routers: $new_routers"
+ 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
if [ "$new_static_routes" != "" ]; then
- set $new_static_routes
+ $LOGGER "New Static Routes: $new_static_routes"
+ set -- $new_static_routes
while [ $# -gt 1 ]; do
route add $1 $2
shift; shift
@@ -138,7 +152,7 @@ if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ]; then
route delete default $router >/dev/null 2>&1
done
if [ "$old_static_routes" != "" ]; then
- set $old_static_routes
+ set -- $old_static_routes
while [ $# -gt 1 ]; do
route delete $1 $2
shift; shift
@@ -161,9 +175,13 @@ if [ x$reason = xTIMEOUT ]; then
fi
eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
$new_broadcast_arg $medium"
+ $LOGGER "New IP Address($interface): $new_ip_address"
+ $LOGGER "New Subnet Mask($interface): $new_subnet_mask"
+ $LOGGER "New Broadcast Address($interface): $new_broadcast_address"
sleep 1
if [ "$new_routers" != "" ]; then
- set $new_routers
+ $LOGGER "New Routers: $new_routers"
+ 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
@@ -174,9 +192,9 @@ if [ x$reason = xTIMEOUT ]; then
for router in $new_routers; do
route add default $router >/dev/null 2>&1
done
- set $new_static_routes
+ set -- $new_static_routes
while [ $# -gt 1 ]; do
- route add $0 $1
+ route add $1 $2
shift; shift
done
make_resolv_conf
@@ -188,13 +206,13 @@ if [ x$reason = xTIMEOUT ]; then
route delete default $router >/dev/null 2>&1
done
if [ "$old_static_routes" != "" ]; then
- set $old_static_routes
+ set -- $old_static_routes
while [ $# -gt 1 ]; do
route delete $1 $2
shift; shift
done
fi
- arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' \
+ arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' \
|sh >/dev/null 2>&1
exit_with_hooks 1
fi