ISC DHCP  4.3.5
A reference DHCPv4 and DHCPv6 implementation
omapip_p.h
Go to the documentation of this file.
1 /* omapip_p.h
2 
3  Private master include file for the OMAPI library. */
4 
5 /*
6  * Copyright (c) 2014-2015 by Internet Systems Consortium, Inc. ("ISC")
7  * Copyright (c) 2009-2010 by Internet Systems Consortium, Inc. ("ISC")
8  * Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC")
9  * Copyright (c) 1996-2003 by Internet Software Consortium
10  *
11  * Permission to use, copy, modify, and distribute this software for any
12  * purpose with or without fee is hereby granted, provided that the above
13  * copyright notice and this permission notice appear in all copies.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
16  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
18  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22  *
23  * Internet Systems Consortium, Inc.
24  * 950 Charter Street
25  * Redwood City, CA 94063
26  * <info@isc.org>
27  * https://www.isc.org/
28  *
29  */
30 
31 #ifndef __OMAPIP_OMAPIP_P_H__
32 #define __OMAPIP_OMAPIP_P_H__
33 
34 #ifndef __CYGWIN32__
35 #include <sys/types.h>
36 #include <netinet/in.h>
37 #include <sys/socket.h>
38 #include <sys/un.h>
39 #include <arpa/inet.h>
40 
41 #include <netdb.h>
42 #else
43 #define fd_set cygwin_fd_set
44 #include <sys/types.h>
45 #endif
46 #include <fcntl.h>
47 #include <stdio.h>
48 #include <unistd.h>
49 #include <string.h>
50 #include <memory.h>
51 #include <stdlib.h>
52 #include <sys/stat.h>
53 #include <ctype.h>
54 #include <time.h>
55 
56 /*
57  * XXX: I'm not sure why these were here.
58 #include "cdefs.h"
59 #include "osdep.h"
60  */
61 
62 #include <dst/dst.h>
63 #include "result.h"
64 
65 #include <omapip/convert.h>
66 #include <omapip/hash.h>
67 #include <omapip/omapip.h>
68 #include <omapip/trace.h>
69 
70 /* DST_API control flags */
71 /* These are used in functions dst_sign_data and dst_verify_data */
72 #define SIG_MODE_INIT 1 /* initalize digest */
73 #define SIG_MODE_UPDATE 2 /* add data to digest */
74 #define SIG_MODE_FINAL 4 /* generate/verify signature */
75 #define SIG_MODE_ALL (SIG_MODE_INIT|SIG_MODE_UPDATE|SIG_MODE_FINAL)
76 
77 /* OMAPI protocol header, version 1.00 */
78 typedef struct {
79  u_int32_t authlen; /* Length of authenticator. */
80  u_int32_t authid; /* Authenticator object ID. */
81  u_int32_t op; /* Opcode. */
82  omapi_handle_t handle; /* Handle of object being operated on,
83  or zero. */
84  u_int32_t id; /* Transaction ID. */
85  u_int32_t rid; /* ID of transaction to which this is a response. */
87 
88 #define OMAPI_PROTOCOL_VERSION 100
89 
90 #define OMAPI_OP_OPEN 1
91 #define OMAPI_OP_REFRESH 2
92 #define OMAPI_OP_UPDATE 3
93 #define OMAPI_OP_NOTIFY 4
94 #define OMAPI_OP_STATUS 5
95 #define OMAPI_OP_DELETE 6
96 
97 typedef enum {
104 
105 typedef enum {
114 
115 typedef struct __omapi_message_object {
121  u_int32_t authlen;
123  u_int32_t authid;
125  u_int32_t op;
126  u_int32_t h;
127  u_int32_t id;
128  u_int32_t rid;
130 
131 typedef struct __omapi_remote_auth {
136 
137 typedef struct __omapi_protocol_object {
139  u_int32_t header_size;
140  u_int32_t protocol_version;
141  u_int32_t next_xid;
142 
143  omapi_protocol_state_t state; /* Input state. */
144  int reading_message_values; /* True if reading message-specific
145  values. */
146  omapi_message_object_t *message; /* Incoming message. */
147  omapi_data_string_t *name; /* Incoming name. */
148  omapi_typed_data_t *value; /* Incoming value. */
149  isc_result_t verify_result;
150  omapi_remote_auth_t *default_auth; /* Default authinfo to use. */
151  omapi_remote_auth_t *remote_auth_list; /* Authenticators active on
152  this connection. */
153 
154  isc_boolean_t insecure; /* Set to allow unauthenticated
155  messages. */
156 
159 
160 typedef struct {
162 
163  isc_boolean_t insecure; /* Set to allow unauthenticated
164  messages. */
165 
166  isc_result_t (*verify_auth) (omapi_object_t *, omapi_auth_key_t *);
168 
169 #include <omapip/buffer.h>
170 
171 typedef struct __omapi_listener_object {
173  int socket; /* Connection socket. */
174  int index;
175  struct sockaddr_in address;
176  isc_result_t (*verify_addr) (omapi_object_t *, omapi_addr_t *);
178 
181  int socket; /* Connection socket. */
182  int32_t index;
184  struct sockaddr_in remote_addr;
185  struct sockaddr_in local_addr;
186  omapi_addr_list_t *connect_list; /* List of addresses to which
187  to connect. */
188  int cptr; /* Current element we are connecting to. */
189  u_int32_t bytes_needed; /* Bytes of input needed before wakeup. */
190  u_int32_t in_bytes; /* Bytes of input already buffered. */
192  u_int32_t out_bytes; /* Bytes of output in buffers. */
194  omapi_listener_object_t *listener; /* Listener that accepted this
195  connection, if any. */
196  dst_key_t *in_key; /* Authenticator signing incoming
197  data. */
198  void *in_context; /* Input hash context. */
199  dst_key_t *out_key; /* Authenticator signing outgoing
200  data. */
201  void *out_context; /* Output hash context. */
203 
204 typedef struct __omapi_io_object {
209  isc_result_t (*reader) (omapi_object_t *);
210  isc_result_t (*writer) (omapi_object_t *);
211  isc_result_t (*reaper) (omapi_object_t *);
212  isc_socket_t *fd;
213  isc_boolean_t closed; /* ISC_TRUE = closed, do not use */
215 
216 typedef struct __omapi_generic_object {
219  u_int8_t *changed;
222 
223 typedef struct __omapi_waiter_object {
225  int ready;
226  isc_result_t waitstatus;
229 
230 #define OMAPI_HANDLE_TABLE_SIZE 120
231 
232 typedef struct __omapi_handle_table {
235  int leafp;
236  union {
241 
242 #include <omapip/alloc.h>
243 
246 OMAPI_OBJECT_ALLOC_DECL (omapi_protocol_listener,
249 OMAPI_OBJECT_ALLOC_DECL (omapi_connection,
251 OMAPI_OBJECT_ALLOC_DECL (omapi_listener,
255 OMAPI_OBJECT_ALLOC_DECL (omapi_waiter,
257 OMAPI_OBJECT_ALLOC_DECL (omapi_generic,
259 OMAPI_OBJECT_ALLOC_DECL (omapi_message,
261 
262 isc_result_t omapi_connection_sign_data (int mode,
263  dst_key_t *key,
264  void **context,
265  const unsigned char *data,
266  const unsigned len,
267  omapi_typed_data_t **result);
269  omapi_listener_object_t *listener,
270  int socket,
271  struct sockaddr_in *remote_addr);
276  const char *, int);
279 
280 isc_result_t omapi_handle_clear(omapi_handle_t);
281 
282 extern int log_perror;
283 extern void (*log_cleanup) (void);
284 
285 void log_fatal (const char *, ...)
286  __attribute__((__format__(__printf__,1,2))) ISC_DHCP_NORETURN;
287 int log_error (const char *, ...)
288  __attribute__((__format__(__printf__,1,2)));
289 int log_info (const char *, ...)
290  __attribute__((__format__(__printf__,1,2)));
291 int log_debug (const char *, ...)
292  __attribute__((__format__(__printf__,1,2)));
293 void do_percentm (char *obuf, const char *ibuf);
294 
295 isc_result_t uerr2isc (int);
296 isc_result_t ns_rcode_to_isc (int);
297 
299 
300 #endif /* __OMAPIP_OMAPIP_P_H__ */
__omapi_io_object
Definition: omapip_p.h:204
log_cleanup
void(* log_cleanup)(void)
Definition: errwarn.c:46
__omapi_connection_object::local_addr
struct sockaddr_in local_addr
Definition: omapip_p.h:185
__omapi_connection_object::index
int32_t index
Definition: omapip_p.h:182
__omapi_message_object::id
u_int32_t id
Definition: omapip_p.h:127
__omapi_protocol_object::insecure
isc_boolean_t insecure
Definition: omapip_p.h:154
__omapi_connection_object::in_bytes
u_int32_t in_bytes
Definition: omapip_p.h:190
__omapi_io_object::next
struct __omapi_io_object * next
Definition: omapip_p.h:206
log_perror
int log_perror
Definition: errwarn.c:44
__omapi_message_object::rid
u_int32_t rid
Definition: omapip_p.h:128
__omapi_connection_object::out_key
dst_key_t * out_key
Definition: omapip_p.h:199
omapi_listener_connect
isc_result_t omapi_listener_connect(omapi_connection_object_t **obj, omapi_listener_object_t *listener, int socket, struct sockaddr_in *remote_addr)
Definition: listener.c:278
omapi_type_protocol_listener
omapi_object_type_t * omapi_type_protocol_listener
Definition: support.c:40
omapi_protocol_value_length_wait
@ omapi_protocol_value_length_wait
Definition: omapip_p.h:112
log_fatal
void log_fatal(const char *,...) __attribute__((__format__(__printf__
__omapi_waiter_object::next
struct __omapi_waiter_object * next
Definition: omapip_p.h:227
omapi_protocol_listener_object_t::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:161
omapi_type_waiter
omapi_object_type_t * omapi_type_waiter
Definition: support.c:41
omapi_connection_object_t
struct __omapi_connection_object omapi_connection_object_t
__omapi_generic_object::values
omapi_value_t ** values
Definition: omapip_p.h:218
__omapi_remote_auth::remote_handle
omapi_handle_t remote_handle
Definition: omapip_p.h:133
OMAPI_OBJECT_ALLOC_DECL
OMAPI_OBJECT_ALLOC_DECL(omapi_protocol, omapi_protocol_object_t, omapi_type_protocol) OMAPI_OBJECT_ALLOC_DECL(omapi_protocol_listener
omapi_data_string_t
Definition: omapip.h:81
__omapi_generic_object::va_max
int va_max
Definition: omapip_p.h:220
__omapi_protocol_object::value
omapi_typed_data_t * value
Definition: omapip_p.h:148
__omapi_protocol_object::name
omapi_data_string_t * name
Definition: omapip_p.h:147
__omapi_message_object::id_object
omapi_object_t * id_object
Definition: omapip_p.h:124
uerr2isc
isc_result_t uerr2isc(int)
Definition: toisc.c:37
__omapi_waiter_object
Definition: omapip_p.h:223
omapi_protocol_header_t
Definition: omapip_p.h:78
ISC_DHCP_NORETURN
void ISC_DHCP_NORETURN
Definition: omapip_p.h:286
__omapi_handle_table::leafp
int leafp
Definition: omapip_p.h:235
__omapi_io_object::fd
isc_socket_t * fd
Definition: omapip_p.h:212
__omapi_protocol_object::header_size
u_int32_t header_size
Definition: omapip_p.h:139
omapi_handle_clear
isc_result_t omapi_handle_clear(omapi_handle_t)
Definition: handle.c:299
trace.h
omapi_connection_register
void omapi_connection_register(omapi_connection_object_t *, const char *, int)
omapi_addr_list_t
Definition: omapip.h:142
__omapi_connection_object::connect_list
omapi_addr_list_t * connect_list
Definition: omapip_p.h:186
__omapi_connection_object::inbufs
omapi_buffer_t * inbufs
Definition: omapip_p.h:191
__omapi_handle_table
Definition: omapip_p.h:232
__omapi_listener_object::verify_addr
isc_result_t(* verify_addr)(omapi_object_t *, omapi_addr_t *)
Definition: omapip_p.h:176
__omapi_io_object::reaper
isc_result_t(* reaper)(omapi_object_t *)
Definition: omapip_p.h:211
__omapi_connection_object::bytes_needed
u_int32_t bytes_needed
Definition: omapip_p.h:189
omapi_connection_trace_setup
void omapi_connection_trace_setup(void)
omapi_protocol_header_wait
@ omapi_protocol_header_wait
Definition: omapip_p.h:107
__omapi_handle_table::limit
omapi_handle_t limit
Definition: omapip_p.h:233
omapi_handle_table_t
struct __omapi_handle_table omapi_handle_table_t
omapi_type_message
omapi_object_type_t * omapi_type_message
Definition: support.c:43
__omapi_message_object::next
struct __omapi_message_object * next
Definition: omapip_p.h:117
__omapi_protocol_object::state
omapi_protocol_state_t state
Definition: omapip_p.h:143
__omapi_message_object::notify_object
omapi_object_t * notify_object
Definition: omapip_p.h:119
omapi_listener_object_t
struct __omapi_listener_object omapi_listener_object_t
Definition: omapip_p.h:252
omapi_protocol_listener_object_t::insecure
isc_boolean_t insecure
Definition: omapip_p.h:163
__omapi_connection_object::remote_addr
struct sockaddr_in remote_addr
Definition: omapip_p.h:184
__omapi_message_object::authenticator
omapi_typed_data_t * authenticator
Definition: omapip_p.h:122
omapi_protocol_listener_object_t
omapi_protocol_listener_object_t
Definition: omapip_p.h:247
omapi_protocol_object_t
struct __omapi_protocol_object omapi_protocol_object_t
omapi_protocol_header_t::id
u_int32_t id
Definition: omapip_p.h:84
__omapi_listener_object::index
int index
Definition: omapip_p.h:174
__omapi_remote_auth::next
struct __omapi_remote_auth * next
Definition: omapip_p.h:132
log_info
int int log_info(const char *,...) __attribute__((__format__(__printf__
__omapi_generic_object::nvalues
int nvalues
Definition: omapip_p.h:220
__omapi_waiter_object::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:224
omapi_protocol_state_t
omapi_protocol_state_t
Definition: omapip_p.h:105
omapi_registered_messages
omapi_message_object_t * omapi_registered_messages
omapi_type_listener
omapi_object_type_t * omapi_type_listener
Definition: support.c:35
__omapi_message_object::authlen
u_int32_t authlen
Definition: omapip_p.h:121
__omapi_connection_object::listener
omapi_listener_object_t * listener
Definition: omapip_p.h:194
__omapi_remote_auth
Definition: omapip_p.h:131
OMAPI_ARRAY_TYPE_DECL
OMAPI_ARRAY_TYPE_DECL(omapi_listener, omapi_listener_object_t)
omapi_connection_unconnected
@ omapi_connection_unconnected
Definition: omapip_p.h:98
__omapi_handle_table::first
omapi_handle_t first
Definition: omapip_p.h:233
__omapi_connection_object::cptr
int cptr
Definition: omapip_p.h:188
__omapi_handle_table::children
union __omapi_handle_table::@6 children[OMAPI_HANDLE_TABLE_SIZE]
__omapi_listener_object::address
struct sockaddr_in address
Definition: omapip_p.h:175
log_error
int log_error(const char *,...) __attribute__((__format__(__printf__
omapi_connection_connected
@ omapi_connection_connected
Definition: omapip_p.h:100
__omapi_message_object::prev
struct __omapi_message_object * prev
Definition: omapip_p.h:117
omapi_protocol_intro_wait
@ omapi_protocol_intro_wait
Definition: omapip_p.h:106
__omapi_connection_object::in_context
void * in_context
Definition: omapip_p.h:198
__omapi_message_object::object
omapi_object_t * object
Definition: omapip_p.h:118
__omapi_protocol_object
Definition: omapip_p.h:137
int
const char int
Definition: omapip.h:443
omapi_protocol_listener_object_t
Definition: omapip_p.h:160
omapi_message_object_t
struct __omapi_message_object omapi_message_object_t
Definition: omapip_p.h:260
omapi_type_protocol
omapi_object_type_t * omapi_type_protocol
Definition: support.c:39
omapi_protocol_name_wait
@ omapi_protocol_name_wait
Definition: omapip_p.h:109
alloc.h
omapi_protocol_header_t::authid
u_int32_t authid
Definition: omapip_p.h:80
buffer.h
omapi_protocol_header_t::authlen
u_int32_t authlen
Definition: omapip_p.h:79
omapi_type_io_object
omapi_object_type_t * omapi_type_io_object
Definition: support.c:36
omapi_type_generic
omapi_object_type_t * omapi_type_generic
Definition: support.c:38
__omapi_waiter_object::waitstatus
isc_result_t waitstatus
Definition: omapip_p.h:226
__omapi_io_object::closed
isc_boolean_t closed
Definition: omapip_p.h:213
convert.h
auth_key
Definition: omapip.h:148
omapi_connection_connecting
@ omapi_connection_connecting
Definition: omapip_p.h:99
omapi_connection_state_t
omapi_connection_state_t
Definition: omapip_p.h:97
result.h
__omapi_protocol_object::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:138
__omapi_io_object::readfd
int(* readfd)(omapi_object_t *)
Definition: omapip_p.h:207
__omapi_connection_object::outbufs
omapi_buffer_t * outbufs
Definition: omapip_p.h:193
omapi_connection_sign_data
omapi_type_protocol_listener omapi_type_listener omapi_type_waiter omapi_type_message isc_result_t omapi_connection_sign_data(int mode, dst_key_t *key, void **context, const unsigned char *data, const unsigned len, omapi_typed_data_t **result)
Definition: connection.c:829
__omapi_connection_object::socket
int socket
Definition: omapip_p.h:181
__omapi_message_object
Definition: omapip_p.h:115
__omapi_listener_object
Definition: omapip_p.h:171
__omapi_handle_table::table
struct __omapi_handle_table * table
Definition: omapip_p.h:238
__omapi_message_object::authid
u_int32_t authid
Definition: omapip_p.h:123
__omapi_io_object::reader
isc_result_t(* reader)(omapi_object_t *)
Definition: omapip_p.h:209
__omapi_message_object::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:116
__omapi_protocol_object::verify_result
isc_result_t verify_result
Definition: omapip_p.h:149
omapi_listener_trace_setup
void omapi_listener_trace_setup(void)
omapi_typed_data_t
Definition: omapip.h:49
__omapi_io_object::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:205
__omapi_connection_object::state
omapi_connection_state_t state
Definition: omapip_p.h:183
OMAPI_HANDLE_TABLE_SIZE
#define OMAPI_HANDLE_TABLE_SIZE
Definition: omapip_p.h:230
__omapi_connection_object::in_key
dst_key_t * in_key
Definition: omapip_p.h:196
omapi_connection_disconnecting
@ omapi_connection_disconnecting
Definition: omapip_p.h:101
omapi_protocol_signature_wait
@ omapi_protocol_signature_wait
Definition: omapip_p.h:108
omapi_generic_object_t
struct __omapi_generic_object omapi_generic_object_t
omapi_waiter_object_t
struct __omapi_waiter_object omapi_waiter_object_t
Definition: omapip_p.h:256
omapi_io_object_t
struct __omapi_io_object omapi_io_object_t
omapi_handle_t
unsigned int omapi_handle_t
Definition: omapip.h:37
__omapi_connection_object
Definition: omapip_p.h:179
omapip.h
ns_rcode_to_isc
isc_result_t ns_rcode_to_isc(int)
__omapi_protocol_object::next_xid
u_int32_t next_xid
Definition: omapip_p.h:141
__omapi_object
Definition: omapip.h:128
__omapi_connection_object::out_bytes
u_int32_t out_bytes
Definition: omapip_p.h:192
__omapi_listener_object::socket
int socket
Definition: omapip_p.h:173
hash.h
log_debug
int int int log_debug(const char *,...) __attribute__((__format__(__printf__
__omapi_message_object::op
u_int32_t op
Definition: omapip_p.h:125
omapi_connection_closed
@ omapi_connection_closed
Definition: omapip_p.h:102
__omapi_handle_table::object
omapi_object_t * object
Definition: omapip_p.h:237
__omapi_io_object::writer
isc_result_t(* writer)(omapi_object_t *)
Definition: omapip_p.h:210
__attribute__
#define __attribute__(x)
Definition: cdefs.h:40
__omapi_protocol_object::message
omapi_message_object_t * message
Definition: omapip_p.h:146
_omapi_buffer
Definition: buffer.h:49
omapi_protocol_header_t::op
u_int32_t op
Definition: omapip_p.h:81
__omapi_generic_object
Definition: omapip_p.h:216
omapi_protocol_header_t::handle
omapi_handle_t handle
Definition: omapip_p.h:82
omapi_protocol_header_t::rid
u_int32_t rid
Definition: omapip_p.h:85
__omapi_listener_object::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:172
__omapi_remote_auth::a
omapi_object_t * a
Definition: omapip_p.h:134
__omapi_generic_object::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:217
__omapi_connection_object::out_context
void * out_context
Definition: omapip_p.h:201
__omapi_handle_table::next
omapi_handle_t next
Definition: omapip_p.h:234
omapi_buffer_trace_setup
void omapi_buffer_trace_setup(void)
omapi_addr_t
Definition: omapip.h:135
omapi_protocol_name_length_wait
@ omapi_protocol_name_length_wait
Definition: omapip_p.h:110
__omapi_protocol_object::reading_message_values
int reading_message_values
Definition: omapip_p.h:144
__omapi_message_object::protocol_object
struct __omapi_protocol_object * protocol_object
Definition: omapip_p.h:120
__omapi_protocol_object::default_auth
omapi_remote_auth_t * default_auth
Definition: omapip_p.h:150
__omapi_waiter_object::ready
int ready
Definition: omapip_p.h:225
omapi_remote_auth_t
struct __omapi_remote_auth omapi_remote_auth_t
omapi_value_t
Definition: omapip.h:88
__omapi_message_object::h
u_int32_t h
Definition: omapip_p.h:126
__omapi_protocol_object::protocol_version
u_int32_t protocol_version
Definition: omapip_p.h:140
__omapi_protocol_object::verify_auth
isc_result_t(* verify_auth)(omapi_object_t *, omapi_auth_key_t *)
Definition: omapip_p.h:157
__omapi_io_object::writefd
int(* writefd)(omapi_object_t *)
Definition: omapip_p.h:208
__omapi_generic_object::changed
u_int8_t * changed
Definition: omapip_p.h:219
__omapi_protocol_object::remote_auth_list
omapi_remote_auth_t * remote_auth_list
Definition: omapip_p.h:151
omapi_protocol_value_wait
@ omapi_protocol_value_wait
Definition: omapip_p.h:111
omapi_type_connection
omapi_object_type_t * omapi_type_connection
Definition: support.c:34
__omapi_connection_object::OMAPI_OBJECT_PREAMBLE
OMAPI_OBJECT_PREAMBLE
Definition: omapip_p.h:180
do_percentm
int int int void do_percentm(char *obuf, const char *ibuf)
Definition: errwarn.c:211