2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-29 13:28:14 +00:00

Panic commit.

This commit is contained in:
Ted Lemon 2000-09-27 23:37:44 +00:00
parent 639b70fa45
commit eadee39698
7 changed files with 108 additions and 141 deletions

View File

@ -129,6 +129,7 @@ MINORVERSION=MinorVersion
#VARRUN = /etc #VARRUN = /etc
#VARDB = /etc #VARDB = /etc
#SCRIPT=solaris #SCRIPT=solaris
#AR=/bin/true
##--sunos5-gcc-- ##--sunos5-gcc--
## Solaris 2.5 (with Sun cc) ## Solaris 2.5 (with Sun cc)

View File

@ -111,13 +111,11 @@ dhcpctl_status dhcpctl_new_object (dhcpctl_handle *h,
omapi_object_t *g; omapi_object_t *g;
isc_result_t status; isc_result_t status;
m = dmalloc (sizeof *m, MDL); m = (dhcpctl_remote_object_t *)0;
if (!m) status = omapi_object_allocate ((omapi_object_t **)&m,
return ISC_R_NOMEMORY; dhcpctl_remote_type, 0, MDL);
memset (m, 0, sizeof *m); if (status != ISC_R_SUCCESS)
m -> type = dhcpctl_remote_type; return status;
m -> refcnt = 1;
rc_register_mdl (&m, m, m -> refcnt);
g = (omapi_object_t *)0; g = (omapi_object_t *)0;
status = omapi_generic_new (&g, MDL); status = omapi_generic_new (&g, MDL);

View File

@ -122,6 +122,7 @@ int main (argc, argv)
exit (1); exit (1);
} }
#if 0
/* Create a named group that contains the values we want to assign /* Create a named group that contains the values we want to assign
to the host. */ to the host. */
memset (&group_handle, 0, sizeof group_handle); 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", printf ("group name = %.*s\n",
(int)groupname -> len, (int)groupname -> len,
groupname -> value); groupname -> value);
#endif
memset (&host_handle, 0, sizeof host_handle); memset (&host_handle, 0, sizeof host_handle);
status = dhcpctl_new_object (&host_handle, connection, "host"); 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); exit (1);
} }
cid -> value [0] = 0; cid -> value [1] = 0x10; memset (&cid -> value [0], 0, 6);
cid -> value [2] = 0x5a; cid -> value [3] = 0xf8;
cid -> value [4] = 0x00; cid -> value [5] = 0xbb;
doitagain:
status = dhcpctl_set_value (host_handle, status = dhcpctl_set_value (host_handle,
cid, "dhcp-client-identifier"); cid, "hardware-address");
/*#else
doitagain: */
status = dhcpctl_set_string_value (host_handle, "gnorf",
"name");
if (status != ISC_R_SUCCESS) { if (status != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_set_value: %s\n", fprintf (stderr, "dhcpctl_set_value: %s\n",
isc_result_totext (status)); isc_result_totext (status));
exit (1); 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) { if (status != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_set_value: %s\n", fprintf (stderr, "dhcpctl_set_string_value: %s\n",
isc_result_totext (status)); isc_result_totext (status));
exit (1); exit (1);
} }
@ -244,6 +239,7 @@ option domain-name-servers 10.0.0.1, 10.0.0.2;",
exit (1); exit (1);
} }
#if 0
status = dhcpctl_set_string_value (host_handle, "\n\ status = dhcpctl_set_string_value (host_handle, "\n\
option host-name \"bar\";\n\ option host-name \"bar\";\n\
option smtp-server 10.0.0.1;", option smtp-server 10.0.0.1;",
@ -253,6 +249,7 @@ option smtp-server 10.0.0.1;",
isc_result_totext (status)); isc_result_totext (status));
exit (1); exit (1);
} }
#endif
status = dhcpctl_open_object (host_handle, connection, status = dhcpctl_open_object (host_handle, connection,
DHCPCTL_CREATE | DHCPCTL_EXCL); DHCPCTL_CREATE | DHCPCTL_EXCL);
@ -264,27 +261,45 @@ option smtp-server 10.0.0.1;",
status = dhcpctl_wait_for_completion (host_handle, &waitstatus); status = dhcpctl_wait_for_completion (host_handle, &waitstatus);
if (status != ISC_R_SUCCESS) { 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)); isc_result_totext (status));
exit (1); exit (1);
} }
if (waitstatus != ISC_R_SUCCESS) { 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", fprintf (stderr, "dhcpctl_open_object: %s\n",
isc_result_totext (status)); isc_result_totext (waitstatus));
exit (1); exit (1);
} }
status = dhcpctl_wait_for_completion (host_handle,
&waitstatus); 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) { if (status != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_wait_for_completion: %s\n", fprintf (stderr, "dhcpctl_set_value: %s\n",
isc_result_totext (status)); isc_result_totext (status));
exit (1); exit (1);
} }
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) { if (waitstatus != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_wait_for_completion: %s\n", fprintf (stderr, "dhcpctl_object_update: %s\n",
isc_result_totext (waitstatus)); isc_result_totext (waitstatus));
exit (1); exit (1);
} }
@ -319,120 +334,44 @@ option smtp-server 10.0.0.1;",
exit (1); exit (1);
} }
goto doitagain; memset (&cid -> value [0], 0, 6);
}
memset (&result, 0, sizeof result); status = dhcpctl_set_value (host_handle,
status = dhcpctl_get_value (&result, host_handle, "name"); cid, "hardware-address");
if (status != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_get_value: %s\n",
isc_result_totext (status));
exit (1);
}
printf ("host name = %.*s\n", (int)result -> len, result -> value);
#if 0
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);
}
#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");
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);
}
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");
if (status != ISC_R_SUCCESS) { if (status != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_set_value: %s\n", fprintf (stderr, "dhcpctl_set_value: %s\n",
isc_result_totext (status)); isc_result_totext (status));
exit (1); exit (1);
} }
status = dhcpctl_open_object (lease_handle, connection, 0); status = dhcpctl_set_string_value (host_handle, "gnorf",
"name");
if (status != ISC_R_SUCCESS) { if (status != ISC_R_SUCCESS) {
fprintf (stderr, "dhcpctl_open_object: %s\n", fprintf (stderr, "dhcpctl_set_string_value: %s\n",
isc_result_totext (status)); isc_result_totext (status));
exit (1); 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) { 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)); isc_result_totext (status));
exit (1); 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) { if (waitstatus != ISC_R_SUCCESS) {
fprintf (stderr, "lease object lookup: %s\n", fprintf (stderr, "dhcpctl_open_object 2: %s\n",
isc_result_totext (waitstatus)); isc_result_totext (waitstatus));
exit (1); 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); exit (0);
} }

View File

@ -42,6 +42,6 @@
struct udphdr { struct udphdr {
u_int16_t uh_sport; /* source port */ u_int16_t uh_sport; /* source port */
u_int16_t uh_dport; /* destination 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 */ u_int16_t uh_sum; /* udp checksum */
}; };

View File

@ -126,7 +126,7 @@
the aforementioned problems do not matter to you, or if no other 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. */ 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. /* Define this to use the Sun Streams NIT API.

View File

@ -290,13 +290,43 @@ isc_result_t omapi_set_value (omapi_object_t *h,
omapi_typed_data_t *value) omapi_typed_data_t *value)
{ {
omapi_object_t *outer; 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) for (outer = h; outer -> outer; outer = outer -> outer)
; ;
if (outer -> type -> set_value) if (outer -> type -> set_value)
return (*(outer -> type -> set_value)) (outer, status = (*(outer -> type -> set_value)) (outer,
id, name, value); id, name, value);
return ISC_R_NOTFOUND; 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, isc_result_t omapi_set_value_str (omapi_object_t *h,

View File

@ -50,7 +50,7 @@
#ifndef lint #ifndef lint
static char copyright[] = 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 */ #endif /* not lint */
#include "dhcpd.h" #include "dhcpd.h"
@ -973,9 +973,8 @@ isc_result_t dhcp_host_signal_handler (omapi_object_t *h,
host = (struct host_decl *)h; host = (struct host_decl *)h;
if (!strcmp (name, "updated")) { if (!strcmp (name, "updated")) {
if ((host -> interface.hlen == 0 || /* There must be a client identifier of some sort. */
host -> interface.hbuf [0] == 0 || if (host -> interface.hlen == 0 &&
host -> interface.hlen > 17) &&
!host -> client_identifier.len) !host -> client_identifier.len)
return ISC_R_INVALIDARG; return ISC_R_INVALIDARG;