]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
Add some changes suggested by Cyrille Lefevre
authorTed Lemon <source@isc.org>
Thu, 22 Mar 2001 06:59:28 +0000 (06:59 +0000)
committerTed Lemon <source@isc.org>
Thu, 22 Mar 2001 06:59:28 +0000 (06:59 +0000)
client/dhclient.c
client/scripts/freebsd

index cbadf2011460259e2d63aa7ba81c7c55a4b11c41..56b9386d69ecd96eb670c1fe31722a6a3d84f397 100644 (file)
@@ -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)
index 544ac05bb673169c63e8f5539ea923f9ee18ecd3..b9d7a36c58ed032afbbff6c4c14845cc20b7c62c 100755 (executable)
@@ -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