From eadee3969819bdd7c97a95fea2afcb9e0947e536 Mon Sep 17 00:00:00 2001 From: Ted Lemon Date: Wed, 27 Sep 2000 23:37:44 +0000 Subject: [PATCH] Panic commit. --- Makefile.conf | 1 + dhcpctl/remote.c | 12 ++- dhcpctl/test.c | 189 ++++++++++++++--------------------------- includes/netinet/udp.h | 2 +- includes/site.h | 2 +- omapip/support.c | 36 +++++++- server/omapi.c | 7 +- 7 files changed, 108 insertions(+), 141 deletions(-) diff --git a/Makefile.conf b/Makefile.conf index 37c3c2d3..aa46b166 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -129,6 +129,7 @@ MINORVERSION=MinorVersion #VARRUN = /etc #VARDB = /etc #SCRIPT=solaris +#AR=/bin/true ##--sunos5-gcc-- ## Solaris 2.5 (with Sun cc) diff --git a/dhcpctl/remote.c b/dhcpctl/remote.c index 54650874..6d14807a 100644 --- a/dhcpctl/remote.c +++ b/dhcpctl/remote.c @@ -111,13 +111,11 @@ dhcpctl_status dhcpctl_new_object (dhcpctl_handle *h, omapi_object_t *g; isc_result_t status; - m = dmalloc (sizeof *m, MDL); - if (!m) - return ISC_R_NOMEMORY; - memset (m, 0, sizeof *m); - m -> type = dhcpctl_remote_type; - m -> refcnt = 1; - rc_register_mdl (&m, m, m -> refcnt); + m = (dhcpctl_remote_object_t *)0; + status = omapi_object_allocate ((omapi_object_t **)&m, + dhcpctl_remote_type, 0, MDL); + if (status != ISC_R_SUCCESS) + return status; g = (omapi_object_t *)0; status = omapi_generic_new (&g, MDL); diff --git a/dhcpctl/test.c b/dhcpctl/test.c index c4c91ed9..dda9d902 100644 --- a/dhcpctl/test.c +++ b/dhcpctl/test.c @@ -122,6 +122,7 @@ int main (argc, argv) exit (1); } +#if 0 /* Create a named group that contains the values we want to assign to the host. */ memset (&group_handle, 0, sizeof group_handle); @@ -173,6 +174,7 @@ option domain-name-servers 10.0.0.1, 10.0.0.2;", printf ("group name = %.*s\n", (int)groupname -> len, groupname -> value); +#endif memset (&host_handle, 0, sizeof host_handle); status = dhcpctl_new_object (&host_handle, connection, "host"); @@ -191,27 +193,20 @@ option domain-name-servers 10.0.0.1, 10.0.0.2;", exit (1); } - cid -> value [0] = 0; cid -> value [1] = 0x10; - cid -> value [2] = 0x5a; cid -> value [3] = 0xf8; - cid -> value [4] = 0x00; cid -> value [5] = 0xbb; + memset (&cid -> value [0], 0, 6); - doitagain: status = dhcpctl_set_value (host_handle, - cid, "dhcp-client-identifier"); -/*#else - doitagain: */ - status = dhcpctl_set_string_value (host_handle, "gnorf", - "name"); + cid, "hardware-address"); if (status != ISC_R_SUCCESS) { fprintf (stderr, "dhcpctl_set_value: %s\n", isc_result_totext (status)); exit (1); } -/*#endif*/ - status = dhcpctl_set_value (host_handle, groupname, "group"); + status = dhcpctl_set_string_value (host_handle, "gnorf", + "name"); if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_set_value: %s\n", + fprintf (stderr, "dhcpctl_set_string_value: %s\n", isc_result_totext (status)); exit (1); } @@ -244,6 +239,7 @@ option domain-name-servers 10.0.0.1, 10.0.0.2;", exit (1); } +#if 0 status = dhcpctl_set_string_value (host_handle, "\n\ option host-name \"bar\";\n\ option smtp-server 10.0.0.1;", @@ -253,6 +249,7 @@ option smtp-server 10.0.0.1;", isc_result_totext (status)); exit (1); } +#endif status = dhcpctl_open_object (host_handle, connection, DHCPCTL_CREATE | DHCPCTL_EXCL); @@ -264,75 +261,49 @@ option smtp-server 10.0.0.1;", status = dhcpctl_wait_for_completion (host_handle, &waitstatus); if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_wait_for_completion: %s\n", + fprintf (stderr, "create: dhcpctl_wait_for_completion: %s\n", isc_result_totext (status)); exit (1); } if (waitstatus != ISC_R_SUCCESS) { - status = dhcpctl_open_object (host_handle, connection, 0); - if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_open_object: %s\n", - isc_result_totext (status)); - exit (1); - } - status = dhcpctl_wait_for_completion (host_handle, - &waitstatus); - if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_wait_for_completion: %s\n", - isc_result_totext (status)); - exit (1); - } - if (waitstatus != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_wait_for_completion: %s\n", - isc_result_totext (waitstatus)); - exit (1); - } - - status = dhcpctl_object_remove (connection, host_handle); - if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_object_remove: %s\n", - isc_result_totext (status)); - exit (1); - } - status = dhcpctl_wait_for_completion (host_handle, - &waitstatus); - if (status != ISC_R_SUCCESS) { - fprintf (stderr, - "remove: dhcpctl_wait_for_completion: %s\n", - isc_result_totext (status)); - exit (1); - } - if (waitstatus != ISC_R_SUCCESS) { - fprintf (stderr, - "remove: dhcpctl_wait_for_completion: %s\n", - isc_result_totext (waitstatus)); - exit (1); - } - - omapi_object_dereference (&host_handle, MDL); - - status = dhcpctl_new_object (&host_handle, connection, "host"); - if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_new_object: %s\n", - isc_result_totext (status)); - exit (1); - } - - goto doitagain; + fprintf (stderr, "dhcpctl_open_object: %s\n", + isc_result_totext (waitstatus)); + exit (1); } - memset (&result, 0, sizeof result); - status = dhcpctl_get_value (&result, host_handle, "name"); + cid -> value [0] = 0; cid -> value [1] = 0x10; + cid -> value [2] = 0x5a; cid -> value [3] = 0xf8; + cid -> value [4] = 0x00; cid -> value [5] = 0xbb; + + status = dhcpctl_set_value (host_handle, + cid, "hardware-address"); if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_get_value: %s\n", + fprintf (stderr, "dhcpctl_set_value: %s\n", isc_result_totext (status)); exit (1); } - printf ("host name = %.*s\n", (int)result -> len, result -> value); + status = dhcpctl_object_update (connection, host_handle); + if (status != ISC_R_SUCCESS) { + fprintf (stderr, "dhcpctl_object_update: %s\n", + isc_result_totext (status)); + exit (1); + } + + status = dhcpctl_wait_for_completion (host_handle, &waitstatus); + if (status != ISC_R_SUCCESS) { + fprintf (stderr, "update: dhcpctl_wait_for_completion: %s\n", + isc_result_totext (status)); + exit (1); + } + + if (waitstatus != ISC_R_SUCCESS) { + fprintf (stderr, "dhcpctl_object_update: %s\n", + isc_result_totext (waitstatus)); + exit (1); + } -#if 0 status = dhcpctl_object_remove (connection, host_handle); if (status != ISC_R_SUCCESS) { fprintf (stderr, "dhcpctl_object_remove: %s\n", @@ -342,97 +313,65 @@ option smtp-server 10.0.0.1;", status = dhcpctl_wait_for_completion (host_handle, &waitstatus); if (status != ISC_R_SUCCESS) { - fprintf (stderr, "remove: dhcpctl_wait_for_completion: %s\n", + fprintf (stderr, + "remove: dhcpctl_wait_for_completion: %s\n", isc_result_totext (status)); exit (1); } if (waitstatus != ISC_R_SUCCESS) { - fprintf (stderr, "remove: dhcpctl_wait_for_completion: %s\n", + fprintf (stderr, + "remove: dhcpctl_wait_for_completion: %s\n", isc_result_totext (waitstatus)); exit (1); } -#endif - /* Create a named group that contains the values we want to assign - to the host. */ - memset (&lease_handle, 0, sizeof lease_handle); - status = dhcpctl_new_object (&lease_handle, connection, "lease"); + omapi_object_dereference (&host_handle, MDL); + + status = dhcpctl_new_object (&host_handle, connection, "host"); if (status != ISC_R_SUCCESS) { fprintf (stderr, "dhcpctl_new_object: %s\n", isc_result_totext (status)); exit (1); } - memset (&ip_addr, 0, sizeof ip_addr); - status = omapi_data_string_new (&ip_addr, 4, MDL); - if (status != ISC_R_SUCCESS) { - fprintf (stderr, "omapi_data_string_new: %s\n", - isc_result_totext (status)); - exit (1); - } + memset (&cid -> value [0], 0, 6); - ip_addr -> value [0] = 10; ip_addr -> value [1] = 0; - ip_addr -> value [2] = 0; ip_addr -> value [3] = 4; - - status = dhcpctl_set_value (lease_handle, ip_addr, "ip-address"); + status = dhcpctl_set_value (host_handle, + cid, "hardware-address"); if (status != ISC_R_SUCCESS) { fprintf (stderr, "dhcpctl_set_value: %s\n", isc_result_totext (status)); exit (1); } - status = dhcpctl_open_object (lease_handle, connection, 0); + status = dhcpctl_set_string_value (host_handle, "gnorf", + "name"); if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_open_object: %s\n", + fprintf (stderr, "dhcpctl_set_string_value: %s\n", isc_result_totext (status)); exit (1); } - status = dhcpctl_wait_for_completion (lease_handle, &waitstatus); + status = dhcpctl_open_object (host_handle, connection, + DHCPCTL_CREATE | DHCPCTL_EXCL); if (status != ISC_R_SUCCESS) { - fprintf (stderr, "dhcpctl_wait_for_completion: %s\n", + fprintf (stderr, "dhcpctl_open_object 2: %s\n", isc_result_totext (status)); exit (1); } + + status = dhcpctl_wait_for_completion (host_handle, &waitstatus); + if (status != ISC_R_SUCCESS) { + fprintf (stderr, "create: dhcpctl_wait_for_completion: %s\n", + isc_result_totext (status)); + exit (1); + } + if (waitstatus != ISC_R_SUCCESS) { - fprintf (stderr, "lease object lookup: %s\n", + fprintf (stderr, "dhcpctl_open_object 2: %s\n", isc_result_totext (waitstatus)); exit (1); } - memset (&identifier, 0, sizeof identifier); - status = dhcpctl_get_value (&identifier, lease_handle, - "dhcp-client-identifier"); - if (status == ISC_R_SUCCESS) { - printf ("lease client-identifier = %02x", - identifier -> value [0]); - for (i = 1; i < identifier -> len; i++) { - printf (":%02x", identifier -> value [i]); - } - putchar ('\n'); - } else { - status = dhcpctl_get_value (&identifier, lease_handle, - "hardware-address"); - if (status == ISC_R_SUCCESS) { - printf ("lease hardware address = %02x", - identifier -> value [0]); - for (i = 1; i < identifier -> len; i++) { - printf (":%02x", identifier -> value [i]); - } - putchar ('\n'); - dhcpctl_data_string_dereference (&identifier, MDL); - status = dhcpctl_get_value (&identifier, lease_handle, - "hardware-type"); - if (status == ISC_R_SUCCESS) { - printf ("lease hardware type = %d\n", - identifier -> value [0]); - dhcpctl_data_string_dereference (&identifier, - MDL); - } - } else { - printf ("Unable to find identifier for lease.\n"); - } - } - exit (0); } diff --git a/includes/netinet/udp.h b/includes/netinet/udp.h index c7964dfd..95bc044f 100644 --- a/includes/netinet/udp.h +++ b/includes/netinet/udp.h @@ -42,6 +42,6 @@ struct udphdr { u_int16_t uh_sport; /* source port */ u_int16_t uh_dport; /* destination port */ - int16_t uh_ulen; /* udp length */ + u_int16_t uh_ulen; /* udp length */ u_int16_t uh_sum; /* udp checksum */ }; diff --git a/includes/site.h b/includes/site.h index ba0e1325..e0b04a3d 100644 --- a/includes/site.h +++ b/includes/site.h @@ -126,7 +126,7 @@ the aforementioned problems do not matter to you, or if no other API is supported for your system, you may want to go with it. */ -/* #define USE_SOCKETS */ +#define USE_SOCKETS /* Define this to use the Sun Streams NIT API. diff --git a/omapip/support.c b/omapip/support.c index f9f14887..9f92ad18 100644 --- a/omapip/support.c +++ b/omapip/support.c @@ -290,13 +290,43 @@ isc_result_t omapi_set_value (omapi_object_t *h, omapi_typed_data_t *value) { omapi_object_t *outer; + isc_result_t status; + + if (!value) { + log_info ("omapi_set_value (%.*s, NULL)", + (int)name -> len, name -> value); + } else if (value -> type == omapi_datatype_int) { + log_info ("omapi_set_value (%.*s, %ld)", + (int)name -> len, name -> value, + (long)value -> u.integer); + } else if (value -> type == omapi_datatype_string) { + log_info ("omapi_set_value (%.*s, %.*s)", + (int)name -> len, name -> value, + (int)value -> u.buffer.len, value -> u.buffer.value); + } else if (value -> type == omapi_datatype_data) { + log_info ("omapi_set_value (%.*s, %ld %lx)", + (int)name -> len, name -> value, + (long)value -> u.buffer.len, + (unsigned long)value -> u.buffer.value); + } else if (value -> type == omapi_datatype_object) { + log_info ("omapi_set_value (%.*s, %s)", + (int)name -> len, name -> value, + value -> u.object + ? (value -> u.object -> type + ? value -> u.object -> type -> name + : "(unknown object)") + : "(unknown object)"); + } for (outer = h; outer -> outer; outer = outer -> outer) ; if (outer -> type -> set_value) - return (*(outer -> type -> set_value)) (outer, - id, name, value); - return ISC_R_NOTFOUND; + status = (*(outer -> type -> set_value)) (outer, + id, name, value); + else + status = ISC_R_NOTFOUND; + log_info (" ==> %s", isc_result_totext (status)); + return status; } isc_result_t omapi_set_value_str (omapi_object_t *h, diff --git a/server/omapi.c b/server/omapi.c index f95bb6a5..d0292cf2 100644 --- a/server/omapi.c +++ b/server/omapi.c @@ -50,7 +50,7 @@ #ifndef lint static char copyright[] = -"$Id: omapi.c,v 1.35 2000/09/08 01:34:30 mellon Exp $ Copyright (c) 1999-2000 The Internet Software Consortium. All rights reserved.\n"; +"$Id: omapi.c,v 1.36 2000/09/27 23:37:44 mellon Exp $ Copyright (c) 1999-2000 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -973,9 +973,8 @@ isc_result_t dhcp_host_signal_handler (omapi_object_t *h, host = (struct host_decl *)h; if (!strcmp (name, "updated")) { - if ((host -> interface.hlen == 0 || - host -> interface.hbuf [0] == 0 || - host -> interface.hlen > 17) && + /* There must be a client identifier of some sort. */ + if (host -> interface.hlen == 0 && !host -> client_identifier.len) return ISC_R_INVALIDARG;