diff options
author | Ted Lemon <source@isc.org> | 2001-03-22 06:59:28 +0000 |
---|---|---|
committer | Ted Lemon <source@isc.org> | 2001-03-22 06:59:28 +0000 |
commit | c08637bb394280947261d15b5f0dc64e29203035 (patch) | |
tree | 52a3b0375850c1a531dea7ff129892adeb13dd4b /client | |
parent | 4ca9936c1be980383c6c86d9b18c32d4c457e4b5 (diff) | |
download | isc-dhcp-c08637bb394280947261d15b5f0dc64e29203035.tar.gz |
Add some changes suggested by Cyrille Lefevre
Diffstat (limited to 'client')
-rw-r--r-- | client/dhclient.c | 32 | ||||
-rwxr-xr-x | client/scripts/freebsd | 40 |
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 |