Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-1-5]: src/usr.sbin/dhcp/server Pull up revision 1.24 (requested b...



details:   https://anonhg.NetBSD.org/src/rev/1b4bafbe315b
branches:  netbsd-1-5
changeset: 491115:1b4bafbe315b
user:      he <he%NetBSD.org@localhost>
date:      Wed Apr 04 20:56:49 2001 +0000

description:
Pull up revision 1.24 (requested by mellon):
  Update DHCP software to ISC version 3, Beta 2, Patchlevel 23.

diffstat:

 usr.sbin/dhcp/server/dhcpd.c |  641 ++++++++++++++++++++++++++++--------------
 1 files changed, 427 insertions(+), 214 deletions(-)

diffs (truncated from 810 to 300 lines):

diff -r b28fcc8b0efd -r 1b4bafbe315b usr.sbin/dhcp/server/dhcpd.c
--- a/usr.sbin/dhcp/server/dhcpd.c      Wed Apr 04 20:56:47 2001 +0000
+++ b/usr.sbin/dhcp/server/dhcpd.c      Wed Apr 04 20:56:49 2001 +0000
@@ -3,7 +3,7 @@
    DHCP Server Daemon. */
 
 /*
- * Copyright (c) 1996-2000 Internet Software Consortium.
+ * Copyright (c) 1996-2001 Internet Software Consortium.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -43,14 +43,14 @@
 
 #ifndef lint
 static char ocopyright[] =
-"$Id: dhcpd.c,v 1.17.2.3 2000/10/18 04:11:43 tv Exp $ Copyright 1995-2000 Internet Software Consortium.";
+"$Id: dhcpd.c,v 1.17.2.4 2001/04/04 20:56:49 he Exp $ Copyright 1995-2001 Internet Software Consortium.";
 #endif
 
-  static const char copyright[] =
-"Copyright 1995-2000 Internet Software Consortium.";
-static const char arr [] = "All rights reserved.";
-static const char message [] = "Internet Software Consortium DHCP Server";
-static const char url [] = "For info, please visit http://www.isc.org/products/DHCP";;
+  static char copyright[] =
+"Copyright 1995-2001 Internet Software Consortium.";
+static char arr [] = "All rights reserved.";
+static char message [] = "Internet Software Consortium DHCP Server";
+static char url [] = "For info, please visit http://www.isc.org/products/DHCP";;
 
 #include "dhcpd.h"
 #include "version.h"
@@ -63,72 +63,99 @@
 struct iaddr server_identifier;
 int server_identifier_matched;
 
-/* This is the standard name service updater that is executed whenever a
-   lease is committed.   Right now it's not following the DHCP-DNS draft
-   at all, but as soon as I fix the resolver it should try to. */
+#if defined (NSUPDATE)
+
+/* This stuff is always executed to figure the default values for certain
+   ddns variables. */
 
-#if defined (NSUPDATE)
 char std_nsupdate [] = "                                                   \n\
+option server.ddns-hostname =                                              \n\
+  pick (option fqdn.hostname, option host-name);                           \n\
+option server.ddns-domainname =        config-option domain-name;                  \n\
+option server.ddns-ttl = encode-int(lease-time / 2, 32);                   \n\
+option server.ddns-rev-domainname = \"in-addr.arpa.\";";
+
+/* This is the old-style name service updater that is executed
+   whenever a lease is committed.  It does not follow the DHCP-DNS
+   draft at all. */
+
+char old_nsupdate [] = "                                                   \n\
 on commit {                                                                \n\
-  if (((config-option server.ddns-updates = null) or                       \n\
-       (config-option server.ddns-updates != 0)) and                       \n\
-      (not defined (ddns-fwd-name))) {                                     \n\
-    set ddns-fwd-name = concat (pick (config-option server.ddns-hostname,   \n\
-                                     option host-name), \".\",             \n\
-                               pick (config-option server.ddns-domainname, \n\
-                                     config-option domain-name));          \n\
-    if defined (ddns-fwd-name) {                                           \n\
-      switch (ns-update (not exists (IN, A, ddns-fwd-name, null),          \n\
-                        add (IN, A, ddns-fwd-name, leased-address,         \n\
-                             lease-time / 2))) {                           \n\
-       default:                                                                    \n\
-        unset ddns-fwd-name;                                               \n\
-        break;                                                             \n\
+  if (not static and                                                       \n\
+      ((config-option server.ddns-updates = null) or                       \n\
+       (config-option server.ddns-updates != 0))) {                        \n\
+    set new-ddns-fwd-name =                                                \n\
+      concat (pick (config-option server.ddns-hostname,                            \n\
+                   option host-name), \".\",                               \n\
+             pick (config-option server.ddns-domainname,                   \n\
+                   config-option domain-name));                            \n\
+    if (defined (ddns-fwd-name) and ddns-fwd-name != new-ddns-fwd-name) {   \n\
+      switch (ns-update (delete (IN, A, ddns-fwd-name, leased-address))) {  \n\
+      case NOERROR:                                                        \n\
+       unset ddns-fwd-name;                                                \n\
+       on expiry or release {                                              \n\
+       }                                                                   \n\
+      }                                                                            \n\
+    }                                                                      \n\
                                                                            \n\
-       case NOERROR:                                                       \n\
-        set ddns-rev-name =                                                \n\
-               concat (binary-to-ascii (10, 8, \".\",                      \n\
-                                        reverse (1,                        \n\
-                                                 leased-address)), \".\",  \n\
-                       pick (config-option server.ddns-rev-domainname,     \n\
-                             \"in-addr.arpa.\"));                          \n\
-        switch (ns-update (delete (IN, PTR, ddns-rev-name, null),          \n\
-                          add (IN, PTR, ddns-rev-name, ddns-fwd-name,      \n\
-                               lease-time / 2)))                           \n\
-       {                                                                   \n\
-         default:                                                          \n\
-         unset ddns-rev-name;                                              \n\
-         on release or expiry {                                            \n\
-           switch (ns-update (delete (IN, A, ddns-fwd-name,                \n\
-                                      leased-address))) {                  \n\
-             case NOERROR:                                                 \n\
-               unset ddns-fwd-name;                                        \n\
-               break;                                                      \n\
-           }                                                               \n\
-           on release or expiry;                                           \n\
-          }                                                                \n\
+    if (not defined (ddns-fwd-name)) {                                     \n\
+      set ddns-fwd-name = new-ddns-fwd-name;                               \n\
+      if defined (ddns-fwd-name) {                                         \n\
+       switch (ns-update (not exists (IN, A, ddns-fwd-name, null),         \n\
+                          add (IN, A, ddns-fwd-name, leased-address,       \n\
+                               lease-time / 2))) {                         \n\
+       default:                                                            \n\
+         unset ddns-fwd-name;                                              \n\
          break;                                                            \n\
                                                                            \n\
-         case NOERROR:                                                     \n\
-         on release or expiry {                                            \n\
-           switch (ns-update (delete (IN, PTR, ddns-rev-name, null))) {    \n\
-             case NOERROR:                                                 \n\
-               unset ddns-rev-name;                                        \n\
-               break;                                                      \n\
+       case NOERROR:                                                       \n\
+         set ddns-rev-name =                                               \n\
+           concat (binary-to-ascii (10, 8, \".\",                          \n\
+                                    reverse (1,                            \n\
+                                             leased-address)), \".\",      \n\
+                   pick (config-option server.ddns-rev-domainname,         \n\
+                         \"in-addr.arpa.\"));                              \n\
+         switch (ns-update (delete (IN, PTR, ddns-rev-name, null),         \n\
+                            add (IN, PTR, ddns-rev-name, ddns-fwd-name,    \n\
+                                 lease-time / 2)))                         \n\
+           {                                                               \n\
+           default:                                                        \n\
+             unset ddns-rev-name;                                          \n\
+             on release or expiry {                                        \n\
+               switch (ns-update (delete (IN, A, ddns-fwd-name,            \n\
+                                          leased-address))) {              \n\
+               case NOERROR:                                               \n\
+                 unset ddns-fwd-name;                                      \n\
+                 break;                                                    \n\
+               }                                                           \n\
+               on release or expiry;                                       \n\
+             }                                                             \n\
+             break;                                                        \n\
+                                                                           \n\
+           case NOERROR:                                                   \n\
+             on release or expiry {                                        \n\
+               switch (ns-update (delete (IN, PTR, ddns-rev-name, null))) {\n\
+               case NOERROR:                                               \n\
+                 unset ddns-rev-name;                                      \n\
+                 break;                                                    \n\
+               }                                                           \n\
+               switch (ns-update (delete (IN, A, ddns-fwd-name,            \n\
+                                          leased-address))) {              \n\
+               case NOERROR:                                               \n\
+                 unset ddns-fwd-name;                                      \n\
+                 break;                                                    \n\
+               }                                                           \n\
+               on release or expiry;                                       \n\
+             }                                                             \n\
            }                                                               \n\
-           switch (ns-update (delete (IN, A, ddns-fwd-name,                \n\
-                                      leased-address))) {                  \n\
-             case NOERROR:                                                 \n\
-               unset ddns-fwd-name;                                        \n\
-               break;                                                      \n\
-           }                                                               \n\
-           on release or expiry;                                           \n\
-         }                                                                 \n\
-        }                                                                  \n\
+       }                                                                   \n\
       }                                                                            \n\
     }                                                                      \n\
+    unset new-ddns-fwd-name;                                               \n\
   }                                                                        \n\
 }";
+
+int ddns_update_style;
 #endif /* NSUPDATE */
 
 const char *path_dhcpd_conf = _PATH_DHCPD_CONF;
@@ -138,6 +165,11 @@
 int dhcp_max_agent_option_packet_length = DHCP_MTU_MAX;
 
 static omapi_auth_key_t *omapi_key = (omapi_auth_key_t *)0;
+int omapi_port;
+
+#if defined (TRACING)
+trace_type_t *trace_srandom;
+#endif
 
 static isc_result_t verify_addr (omapi_object_t *l, omapi_addr_t *addr) {
        return ISC_R_SUCCESS;
@@ -170,18 +202,18 @@
        omapi_object_t *listener;
        unsigned seed;
        struct interface_info *ip;
-       struct data_string db;
-       struct option_cache *oc;
-       struct option_state *options = (struct option_state *)0;
        struct parse *parse;
        int lose;
-       int omapi_port;
        omapi_object_t *auth;
        struct tsig_key *key;
        omapi_typed_data_t *td;
        int no_dhcpd_conf = 0;
        int no_dhcpd_db = 0;
        int no_dhcpd_pid = 0;
+#if defined (TRACING)
+       char *traceinfile = (char *)0;
+       char *traceoutfile = (char *)0;
+#endif
 
        /* Set up the client classification system. */
        classification_setup ();
@@ -192,9 +224,10 @@
                log_fatal ("Can't initialize OMAPI: %s",
                           isc_result_totext (result));
 
+       /* Set up the OMAPI wrappers for common objects. */
+       dhcp_db_objects_setup ();
        /* Set up the OMAPI wrappers for various server database internal
           objects. */
-       dhcp_db_objects_setup ();
        dhcp_common_objects_setup ();
 
        /* Initially, log errors to stderr as well as to syslogd. */
@@ -266,6 +299,20 @@
                } else if (!strcmp (argv [i], "-q")) {
                        quiet = 1;
                        quiet_interface_discovery = 1;
+               } else if (!strcmp (argv [i], "--version")) {
+                       log_info ("isc-dhcpd-%s", DHCP_VERSION);
+                       exit (0);
+#if defined (TRACING)
+               } else if (!strcmp (argv [i], "-tf")) {
+                       if (++i == argc)
+                               usage ();
+                       traceoutfile = argv [i];
+               } else if (!strcmp (argv [i], "-play")) {
+                       if (++i == argc)
+                               usage ();
+                       traceinfile = argv [i];
+                       trace_replay_init ();
+#endif /* TRACING */
                } else if (argv [i][0] == '-') {
                        usage ();
                } else {
@@ -307,17 +354,34 @@
                log_perror = 0;
        }
 
+#if defined (TRACING)
+       trace_init (set_time, MDL);
+       if (traceoutfile)
+               trace_begin (traceoutfile, MDL);
+       interface_trace_setup ();
+       parse_trace_setup ();
+       trace_srandom = trace_type_register ("random-seed", (void *)0,
+                                            trace_seed_input,
+                                            trace_seed_stop, MDL);
+#endif
+
        /* Default to the DHCP/BOOTP port. */
        if (!local_port)
        {
-               ent = getservbyname ("dhcp", "udp");
-               if (!ent)
-                       local_port = htons (67);
-               else
-                       local_port = ent -> s_port;
+               if ((s = getenv ("DHCPD_PORT"))) {
+                       local_port = htons (atoi (s));
+                       log_debug ("binding to environment-specified port %d",
+                                  ntohs (local_port));
+               } else {
+                       ent = getservbyname ("dhcp", "udp");
+                       if (!ent)
+                               local_port = htons (67);
+                       else
+                               local_port = ent -> s_port;
 #ifndef __CYGWIN32__ /* XXX */
-               endservent ();
+                       endservent ();
 #endif
+               }
        }
   
        remote_port = htons (ntohs (local_port) + 1);
@@ -344,10 +408,18 @@
        initialize_common_option_spaces ();
        initialize_server_option_spaces ();



Home | Main Index | Thread Index | Old Index