ISC DHCP  4.4.3
A reference DHCPv4 and DHCPv6 implementation
keama.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2017-2022 Internet Systems Consortium, Inc. ("ISC")
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
14  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  *
16  * Internet Systems Consortium, Inc.
17  * PO Box 360
18  * Newmarket, NH 03857 USA
19  * <info@isc.org>
20  * https://www.isc.org/
21  *
22  */
23 
24 #ifndef EOL
25 #define EOL '\n'
26 #endif
27 
28 #include "data.h"
29 #include "dhctoken.h"
30 
31 #include <time.h>
32 
33 /* Resolution of FQDNs into IPv4 addresses */
34 enum resolve {
35  perform = 0, /* resolve */
36  fatal, /* raise a fatal error */
37  pass /* pass the string wth a warning */
38 };
39 
40 extern enum resolve resolve;
41 
42 /* From includes/dhcp.h */
43 
44 #define HTYPE_ETHER 1
45 #define HTYPE_IEEE802 6
46 #define HTYPE_FDDI 8
47 
48 #define DHO_DHCP_SERVER_IDENTIFIER 54
49 #define DHO_VENDOR_CLASS_IDENTIFIER 60
50 #define DHO_USER_CLASS 77
51 #define DHO_VIVSO_SUBOPTIONS 125
52 
53 /* From includes/dhcp6.h */
54 #define D6O_VENDOR_OPTS 17
55 #define MAX_V6RELAY_HOPS 32
56 
57 /* From includes/dhcpd.h */
58 
59 extern int local_family;
60 
61 /* A parsing context. */
62 
63 struct parse {
64  int lexline;
65  int lexchar;
66  char *token_line;
67  char *prev_line;
68  char *cur_line;
69  const char *tlname;
70  int eol_token;
71 
72  /*
73  * In order to give nice output when we have a parsing error
74  * in our file, we keep track of where we are in the line so
75  * that we can show the user.
76  *
77  * We need to keep track of two lines, because we can look
78  * ahead, via the "peek" function, to the next line sometimes.
79  *
80  * The "line1" and "line2" variables act as buffers for this
81  * information. The "lpos" variable tells us where we are in the
82  * line.
83  *
84  * When we "put back" a character from the parsing context, we
85  * do not want to have the character appear twice in the error
86  * output. So, we set a flag, the "ugflag", which the
87  * get_char() function uses to check for this condition.
88  */
89  char line1[81];
90  char line2[81];
91  int lpos;
92  int line;
93  int tlpos;
94  int tline;
95  enum dhcp_token token;
96  int ugflag;
97  char *tval;
98  int tlen;
99  char tokbuf[1500];
100 
101  int warnings_occurred;
102  int file;
103  char *inbuf;
104  size_t bufix, buflen;
105  size_t bufsiz;
106 
107  /*
108  * Additions for the Kea Migration Assistant.
109  */
110  struct element **stack;
111  size_t stack_size;
112  size_t stack_top;
114 
115  /* don't save below this */
116  struct comments comments;
117 
118  /* TAILQ_NEXT(self) is the saved state */
120 
121 };
122 
124 
125 #define PARAMETER 0
126 #define TOPLEVEL 1
127 #define ROOT_GROUP 2
128 #define HOST_DECL 3
129 #define SHARED_NET_DECL 4
130 #define SUBNET_DECL 5
131 #define CLASS_DECL 6
132 #define GROUP_DECL 7
133 #define POOL_DECL 8
134 
135 /* Used as an argument to parse_class_decl() */
136 #define CLASS_TYPE_VENDOR 0
137 #define CLASS_TYPE_USER 1
138 #define CLASS_TYPE_CLASS 2
139 #define CLASS_TYPE_SUBCLASS 3
140 
141 #define CLASS_DECL_DELETED 1
142 #define CLASS_DECL_DYNAMIC 2
143 #define CLASS_DECL_STATIC 4
144 #define CLASS_DECL_SUBCLASS 8
145 
146 /* Hardware buffer size */
147 #define HARDWARE_ADDR_LEN 20
148 
149 /* Expression context */
150 
152  context_any, /* indefinite */
157  context_data_or_numeric, /* indefinite */
159 };
160 
161 /* Statements */
162 
187 };
188 
189 /* Expression tree structure. */
190 
191 enum expr_op {
205  expr_hw_type, /* derived from expr_hardware */
206  expr_hw_address, /* derived from expr_hardware */
257 };
258 
259 /* options */
260 
262  kea_unknown = 0, /* known only by ISC DHCP */
263  isc_dhcp_unknown = 1, /* known only by Kea */
264  known = 2, /* known by both ISC DHCP and Kea */
265  special = 3, /* requires special processing */
266  dynamic = 4 /* dynamic entry */
267 };
268 
269 struct option_def { /* ISC DHCP option definition */
270  const char *name; /* option name */
271  const char *format; /* format string */
272  const char *space; /* space (aka universe) */
273  unsigned code; /* code point */
274  enum option_status status; /* status */
275 };
276 
277 struct space_def { /* ISC DHCP space definition */
278  const char *old; /* ISC DHCP space name */
279  const char *name; /* Kea space name */
280  enum option_status status; /* status */
281 };
282 
283 struct space {
284  const char *old; /* ISC DHCP space name */
285  const char *name; /* Kea space name */
286  enum option_status status; /* status */
287  struct element *vendor; /* vendor option */
288  TAILQ_ENTRY(space) next; /* next space */
289 };
290 
291 struct option {
292  const char *old; /* ISC DHCP option name */
293  const char *name; /* Kea option name */
294  const char *format; /* ISC DHCP format string */
295  const struct space *space; /* space (aka universe) */
296  unsigned code; /* code point */
297  enum option_status status; /* status */
298  TAILQ_ENTRY(option) next; /* next option */
299 };
300 
301 /* Kea parse tools */
302 void stackPush(struct parse *cfile, struct element *elem);
303 
304 /* From command line */
305 extern char *hook_library_path;
307 extern isc_boolean_t global_hr;
308 
309 /* From common/parse.c */
310 void parse_error(struct parse *, const char *, ...)
311  __attribute__((__format__(__printf__,2,3)))
312  __attribute__((noreturn));
313 
314 /* conflex.c */
315 struct parse *new_parse(int, char *, size_t, const char *, int);
316 void end_parse(struct parse *);
317 void save_parse_state(struct parse *);
318 void restore_parse_state(struct parse *);
319 enum dhcp_token next_token(const char **, unsigned *, struct parse *);
320 enum dhcp_token peek_token(const char **, unsigned *, struct parse *);
321 enum dhcp_token next_raw_token(const char **, unsigned *, struct parse *);
322 enum dhcp_token peek_raw_token(const char **, unsigned *, struct parse *);
323 /*
324  * Use skip_token when we are skipping a token we have previously
325  * used peek_token on as we know what the result will be in this case.
326  */
327 #define skip_token(a,b,c) ((void) next_token((a),(b),(c)))
328 
329 /* confparse.c */
330 size_t conf_file_parse(struct parse *);
331 void read_conf_file(struct parse *, const char *, int);
332 size_t conf_file_subparse(struct parse *, int);
334 void get_permit(struct parse *, struct element *);
335 void parse_pool_statement(struct parse *, int);
336 void parse_lbrace(struct parse *);
337 void parse_host_declaration(struct parse *);
338 void parse_class_declaration(struct parse *, int);
339 void parse_shared_net_declaration(struct parse *);
340 void parse_subnet_declaration(struct parse *);
341 void parse_subnet6_declaration(struct parse *);
342 void parse_group_declaration(struct parse *);
343 void close_group(struct parse *, struct element *);
344 struct element *parse_fixed_addr_param(struct parse *, enum dhcp_token);
345 void parse_address_range(struct parse *, int, size_t);
346 void parse_address_range6(struct parse *, int, size_t);
347 void parse_prefix6(struct parse *, int, size_t);
348 void parse_fixed_prefix6(struct parse *, size_t);
349 void parse_pool6_statement(struct parse *, int);
350 struct element *parse_allow_deny(struct parse *, int);
351 void parse_server_duid_conf(struct parse *);
352 void parse_directive(struct parse *);
353 void parse_option_space_dir(struct parse *);
354 void parse_option_code_dir(struct parse *, struct option *);
355 void parse_option_status_dir(struct parse *, struct option *, enum dhcp_token);
356 void parse_option_local_dir(struct parse *, struct option *);
357 void parse_option_define_dir(struct parse *, struct option *);
358 
359 /* parse.c */
360 void skip_to_semi(struct parse *);
361 void skip_to_rbrace(struct parse *, int);
362 void parse_semi(struct parse *);
363 void parse_string(struct parse *, char **, unsigned *);
364 struct string *parse_host_name(struct parse *);
366 struct string *parse_ip_addr(struct parse *);
367 struct string *parse_ip6_addr(struct parse *);
368 struct string *parse_ip6_addr_txt(struct parse *);
369 struct element *parse_hardware_param(struct parse *);
370 void parse_lease_time(struct parse *, time_t *);
371 struct string *parse_numeric_aggregate(struct parse *,
372  unsigned char *, unsigned *,
373  int, int, unsigned);
374 void convert_num(struct parse *, unsigned char *, const char *,
375  int, unsigned);
376 struct option *parse_option_name(struct parse *, isc_boolean_t,
377  isc_boolean_t *);
378 void parse_option_space_decl(struct parse *);
379 void parse_option_code_definition(struct parse *, struct option *);
380 void parse_vendor_code_definition(struct parse *, struct option *);
381 struct string *convert_format(const char *, isc_boolean_t *, isc_boolean_t *);
382 struct string *parse_base64(struct parse *);
383 struct string *parse_cshl(struct parse *);
384 struct string *parse_hexa(struct parse *);
386  struct parse *, isc_boolean_t *,
387  enum expression_context);
389  struct parse *, isc_boolean_t *,
390  enum expression_context,
391  isc_boolean_t);
392 isc_boolean_t parse_zone(struct element *, struct parse *);
393 isc_boolean_t parse_key(struct element *, struct parse *);
394 isc_boolean_t parse_on_statement(struct element *, struct parse *,
395  isc_boolean_t *);
397  isc_boolean_t *);
400 isc_boolean_t parse_if_statement(struct element *, struct parse *,
401  isc_boolean_t *);
403  isc_boolean_t *);
404 /* currently unused */
407  isc_boolean_t *);
409  isc_boolean_t *);
410 isc_boolean_t parse_non_binary(struct element *, struct parse *,
412 isc_boolean_t parse_expression(struct element *, struct parse *,
414  struct element *, enum expr_op);
415 struct string *escape_option_string(unsigned, const char *,
417 isc_boolean_t parse_option_data(struct element *, struct parse *,
418  struct option *);
420  struct option *, isc_boolean_t);
421 struct string * parse_option_textbin(struct parse *, struct option *);
423  struct option *, enum statement_op);
424 isc_boolean_t parse_config_data(struct element *, struct parse *,
425  struct option *);
427  struct option *, enum statement_op);
428 struct string *parse_option_token(struct parse *, const char *,
430  isc_boolean_t *);
431 struct string *parse_option_token_binary(struct parse *, const char *);
432 struct string *parse_domain_list(struct parse *, isc_boolean_t);
436 int expr_precedence(enum expr_op, struct element *);
437 
438 /* options.c */
439 void spaces_init(void);
440 void options_init(void);
441 struct space *space_lookup(const char *);
442 struct option *option_lookup_name(const char *, const char *);
443 struct option *kea_lookup_name(const char *, const char *);
444 struct option *option_lookup_code(const char *, unsigned);
445 void push_space(struct space *);
446 void push_option(struct option *);
447 void add_option_data(struct element *, struct element *);
448 void merge_option_data(struct element *, struct element *);
449 struct comments *get_config_comments(unsigned);
450 const char *display_status(enum option_status);
451 
452 /* json.c */
453 struct element *json_parse(struct parse *);
454 struct element *json_list_parse(struct parse *);
455 struct element *json_map_parse(struct parse *);
456 
457 /* print.c */
458 const char *print_expression(struct element *, isc_boolean_t *);
459 const char *print_boolean_expression(struct element *, isc_boolean_t *);
460 const char *print_data_expression(struct element *, isc_boolean_t *);
461 const char *print_numeric_expression(struct element *, isc_boolean_t *);
462 
463 /* reduce.c */
464 struct element *reduce_boolean_expression(struct element *);
465 struct element *reduce_data_expression(struct element *);
466 struct element *reduce_numeric_expression(struct element *);
467 
468 /* eval */
469 struct element *eval_expression(struct element *, isc_boolean_t *);
parse::line1
char line1[81]
Definition: dhcpd.h:314
parse::tval
char * tval
Definition: dhcpd.h:322
parse_numeric_aggregate
struct string * parse_numeric_aggregate(struct parse *, unsigned char *, unsigned *, int, int, unsigned)
Definition: parse.c:734
parse_fixed_addr_param
struct element * parse_fixed_addr_param(struct parse *, enum dhcp_token)
Definition: confparse.c:3008
expr_lease_time
@ expr_lease_time
Definition: keama.h:225
option_def
Definition: keama.h:269
kea_unknown
@ kea_unknown
Definition: keama.h:262
dhcp_token
dhcp_token
Definition: dhctoken.h:34
expr_encode_int32
@ expr_encode_int32
Definition: keama.h:214
print_expression
const char * print_expression(struct element *, isc_boolean_t *)
Definition: print.c:39
expr_encode_int16
@ expr_encode_int16
Definition: keama.h:213
expr_hw_type
@ expr_hw_type
Definition: keama.h:205
expr_none
@ expr_none
Definition: keama.h:192
parse_option_code_dir
void parse_option_code_dir(struct parse *, struct option *)
Definition: confparse.c:4156
append_option_statement
@ append_option_statement
Definition: keama.h:171
parse::prev_line
char * prev_line
Definition: dhcpd.h:292
eval_boolean_expression
struct element * eval_boolean_expression(struct element *, isc_boolean_t *)
Definition: eval.c:72
context_data_or_numeric
@ context_data_or_numeric
Definition: keama.h:157
is_data_expression
isc_boolean_t is_data_expression(struct element *)
Definition: parse.c:5722
parse_switch_statement
isc_boolean_t parse_switch_statement(struct element *, struct parse *, isc_boolean_t *)
Definition: parse.c:2375
parse_non_binary
isc_boolean_t parse_non_binary(struct element *, struct parse *, isc_boolean_t *, enum expression_context)
Definition: parse.c:2687
parse_option_binary
isc_boolean_t parse_option_binary(struct element *, struct parse *, struct option *, isc_boolean_t)
Definition: parse.c:4047
parse_executable_statements
isc_boolean_t parse_executable_statements(struct element *, struct parse *, isc_boolean_t *, enum expression_context)
Definition: parse.c:1566
parse::issue_counter
size_t issue_counter
Definition: keama.h:113
option_def::format
const char * format
Definition: keama.h:271
expr_ns_delete
@ expr_ns_delete
Definition: keama.h:229
parse::ugflag
int ugflag
Definition: dhcpd.h:321
expr_function
@ expr_function
Definition: keama.h:240
expr_reverse
@ expr_reverse
Definition: keama.h:219
parse_boolean
isc_boolean_t parse_boolean(struct parse *)
Definition: parse.c:3498
parse_subnet_declaration
void parse_subnet_declaration(struct parse *)
Definition: confparse.c:2337
expr_substring
@ expr_substring
Definition: keama.h:196
eval_numeric_expression
struct element * eval_numeric_expression(struct element *, isc_boolean_t *)
Definition: eval.c:1481
next_raw_token
enum dhcp_token next_raw_token(const char **, unsigned *, struct parse *)
Definition: conflex.c:380
expr_extract_int32
@ expr_extract_int32
Definition: keama.h:211
expr_op
expr_op
Definition: tree.h:131
parse_directive
void parse_directive(struct parse *)
Parse (and execute) a directive (extension)
Definition: confparse.c:4001
expr_encode_int8
@ expr_encode_int8
Definition: keama.h:212
expr_suffix
@ expr_suffix
Definition: keama.h:197
parse_config_statement
isc_boolean_t parse_config_statement(struct element *, struct parse *, struct option *, enum statement_op)
Definition: parse.c:4831
expr_known
@ expr_known
Definition: keama.h:218
skip_to_semi
void skip_to_semi(struct parse *)
Definition: parse.c:81
expression_context
expression_context
Definition: tree.h:83
expr_host_lookup
@ expr_host_lookup
Definition: keama.h:199
parse_error
void parse_error(struct parse *, const char *,...) __attribute__((__format__(__printf__
conf_file_subparse
size_t conf_file_subparse(struct parse *, int)
Definition: confparse.c:535
parse_config_data
isc_boolean_t parse_config_data(struct element *, struct parse *, struct option *)
Definition: parse.c:4692
pass
@ pass
Definition: keama.h:37
parse_lease_time
void parse_lease_time(struct parse *, time_t *)
Definition: parse.c:690
expr_const_data
@ expr_const_data
Definition: keama.h:208
save_parse_state
void save_parse_state(struct parse *)
Definition: conflex.c:128
space::vendor
struct element * vendor
Definition: keama.h:287
expr_lcase
@ expr_lcase
Definition: keama.h:251
string
Definition: data.h:171
parse::stack
struct element ** stack
Definition: keama.h:110
expr_extract_int8
@ expr_extract_int8
Definition: keama.h:209
parse_option_space_dir
void parse_option_space_dir(struct parse *)
Definition: confparse.c:4091
expr_encapsulate
@ expr_encapsulate
Definition: keama.h:217
parse::tokbuf
char tokbuf[1500]
Definition: dhcpd.h:324
expr_packet
@ expr_packet
Definition: keama.h:207
option_lookup_code
struct option * option_lookup_code(const char *, unsigned)
Definition: options.c:624
expr_match
@ expr_match
Definition: keama.h:193
expr_divide
@ expr_divide
Definition: keama.h:244
option_def::code
unsigned code
Definition: keama.h:273
expr_concat
@ expr_concat
Definition: keama.h:198
expr_subtract
@ expr_subtract
Definition: keama.h:242
return_statement
@ return_statement
Definition: keama.h:184
context_dns
@ context_dns
Definition: keama.h:156
is_numeric_expression
isc_boolean_t is_numeric_expression(struct element *)
Definition: parse.c:5758
expr_const_int
@ expr_const_int
Definition: keama.h:215
isc_boolean_t
isc_boolean_t
Definition: data.h:150
option::old
const char * old
Definition: keama.h:292
default_option_statement
@ default_option_statement
Definition: keama.h:169
parse_option_define_dir
void parse_option_define_dir(struct parse *, struct option *)
Definition: confparse.c:4316
expr_client_state
@ expr_client_state
Definition: keama.h:249
option_def::space
const char * space
Definition: keama.h:272
switch_statement
@ switch_statement
Definition: keama.h:176
kea_lookup_name
struct option * kea_lookup_name(const char *, const char *)
Definition: options.c:599
json_map_parse
struct element * json_map_parse(struct parse *)
Definition: json.c:120
local_family
int local_family
Definition: discover.c:59
parse_option_statement
isc_boolean_t parse_option_statement(struct element *, struct parse *, struct option *, enum statement_op)
Definition: parse.c:4211
parse::tline
int tline
Definition: dhcpd.h:319
peek_token
enum dhcp_token peek_token(const char **, unsigned *, struct parse *)
Definition: conflex.c:443
parse_option_local_dir
void parse_option_local_dir(struct parse *, struct option *)
Definition: confparse.c:4268
parse_class_declaration
void parse_class_declaration(struct parse *, int)
Definition: confparse.c:1584
option::space
const struct space * space
Definition: keama.h:295
stackPush
void stackPush(struct parse *cfile, struct element *elem)
Definition: keama.c:181
parse::lexline
int lexline
Definition: dhcpd.h:289
space
Definition: keama.h:283
new_parse
struct parse * new_parse(int, char *, size_t, const char *, int)
Definition: conflex.c:48
parse::warnings_occurred
int warnings_occurred
Definition: dhcpd.h:326
print_data_expression
const char * print_data_expression(struct element *, isc_boolean_t *)
Definition: print.c:496
parse_domain_list
struct string * parse_domain_list(struct parse *, isc_boolean_t)
Definition: parse.c:4646
expr_multiply
@ expr_multiply
Definition: keama.h:243
expr_pick_first_value
@ expr_pick_first_value
Definition: keama.h:224
convert_format
struct string * convert_format(const char *, isc_boolean_t *, isc_boolean_t *)
Definition: parse.c:1338
option_lookup_name
struct option * option_lookup_name(const char *, const char *)
Definition: options.c:579
parse_executable_statement
isc_boolean_t parse_executable_statement(struct element *, struct parse *, isc_boolean_t *, enum expression_context, isc_boolean_t)
Definition: parse.c:1590
print_numeric_expression
const char * print_numeric_expression(struct element *, isc_boolean_t *)
Definition: print.c:1023
known
@ known
Definition: keama.h:264
parse_expression
isc_boolean_t parse_expression(struct element *, struct parse *, isc_boolean_t *, enum expression_context, struct element *, enum expr_op)
Definition: parse.c:3617
parse_ip6_addr_txt
struct string * parse_ip6_addr_txt(struct parse *)
Definition: parse.c:379
space_def::old
const char * old
Definition: keama.h:278
parse_hardware_param
struct element * parse_hardware_param(struct parse *)
Definition: parse.c:395
case_statement
@ case_statement
Definition: keama.h:177
parse_vendor_code_definition
void parse_vendor_code_definition(struct parse *, struct option *)
Definition: parse.c:1283
close_group
void close_group(struct parse *, struct element *)
Definition: confparse.c:2589
option::code
unsigned code
Definition: tree.h:349
parse_host_name
struct string * parse_host_name(struct parse *)
Definition: parse.c:196
is_boolean_expression
isc_boolean_t is_boolean_expression(struct element *)
Definition: parse.c:5701
next_token
enum dhcp_token next_token(const char **, unsigned *, struct parse *)
Definition: conflex.c:369
expr_precedence
int expr_precedence(enum expr_op, struct element *)
Definition: parse.c:6135
option::TAILQ_ENTRY
TAILQ_ENTRY(option) next
escape_option_string
struct string * escape_option_string(unsigned, const char *, isc_boolean_t *, isc_boolean_t *)
Definition: parse.c:3896
parse::cur_line
char * cur_line
Definition: dhcpd.h:293
conf_file_parse
size_t conf_file_parse(struct parse *)
parse
Definition: dhcpd.h:288
parse::tlpos
int tlpos
Definition: dhcpd.h:318
parse_ip_addr_or_hostname
struct string * parse_ip_addr_or_hostname(struct parse *, isc_boolean_t)
Definition: parse.c:215
expr_regex_match
@ expr_regex_match
Definition: keama.h:252
expr_not
@ expr_not
Definition: keama.h:202
expr_gethostname
@ expr_gethostname
Definition: keama.h:254
display_status
const char * display_status(enum option_status)
Definition: options.c:1140
parse_data_expression
isc_boolean_t parse_data_expression(struct element *, struct parse *, isc_boolean_t *)
Definition: parse.c:2645
spaces_init
void spaces_init(void)
Definition: options.c:400
dynamic
@ dynamic
Definition: keama.h:266
end_parse
void end_parse(struct parse *)
Definition: conflex.c:97
get_config_comments
struct comments * get_config_comments(unsigned)
Definition: options.c:720
break_statement
@ break_statement
Definition: keama.h:168
expr_hw_address
@ expr_hw_address
Definition: keama.h:206
TAILQ_HEAD
TAILQ_HEAD(parses, parse) parses
parse_cshl
struct string * parse_cshl(struct parse *)
Definition: parse.c:1489
parse_host_declaration
void parse_host_declaration(struct parse *)
Definition: confparse.c:1282
fatal
@ fatal
Definition: keama.h:36
parse::bufix
size_t bufix
Definition: dhcpd.h:329
parse_option_space_decl
void parse_option_space_decl(struct parse *)
Definition: parse.c:1349
parse_shared_net_declaration
void parse_shared_net_declaration(struct parse *)
Definition: confparse.c:2105
parse::lpos
int lpos
Definition: dhcpd.h:316
option::status
enum option_status status
Definition: keama.h:297
expr_variable_reference
@ expr_variable_reference
Definition: keama.h:235
convert_num
void convert_num(struct parse *, unsigned char *, const char *, int, unsigned)
Definition: parse.c:840
parse::file
int file
Definition: dhcpd.h:327
space::TAILQ_ENTRY
TAILQ_ENTRY(space) next
parse_key
isc_boolean_t parse_key(struct element *, struct parse *)
Definition: parse.c:2210
json_parse
struct element * json_parse(struct parse *)
Definition: json.c:32
add_option_data
void add_option_data(struct element *, struct element *)
Definition: options.c:658
parse::TAILQ_ENTRY
TAILQ_ENTRY(parse) next
options_init
void options_init(void)
Definition: options.c:420
parse::eol_token
int eol_token
Definition: dhcpd.h:295
json_list_parse
struct element * json_list_parse(struct parse *)
Definition: json.c:80
parse::line2
char line2[81]
Definition: dhcpd.h:315
parse::buflen
size_t buflen
Definition: dhcpd.h:329
expr_and
@ expr_and
Definition: keama.h:200
restore_parse_state
void restore_parse_state(struct parse *)
Definition: conflex.c:159
option_def::status
enum option_status status
Definition: keama.h:274
expr_remainder
@ expr_remainder
Definition: keama.h:245
expr_ns_exists
@ expr_ns_exists
Definition: keama.h:230
parse_option_data
isc_boolean_t parse_option_data(struct element *, struct parse *, struct option *)
Definition: parse.c:3929
expr_null
@ expr_null
Definition: keama.h:233
vendor_opt_statement
@ vendor_opt_statement
Definition: keama.h:186
parse_lbrace
void parse_lbrace(struct parse *)
Definition: confparse.c:1269
parse_fixed_prefix6
void parse_fixed_prefix6(struct parse *, size_t)
Definition: confparse.c:3409
parse::stack_top
size_t stack_top
Definition: keama.h:112
parse::comments
struct comments comments
Definition: keama.h:116
parse_boolean_expression
isc_boolean_t parse_boolean_expression(struct element *, struct parse *, isc_boolean_t *)
Definition: parse.c:2586
expr_concat_dclist
@ expr_concat_dclist
Definition: keama.h:256
expr_host_decl_name
@ expr_host_decl_name
Definition: keama.h:223
space_lookup
struct space * space_lookup(const char *)
Definition: options.c:565
resolve
resolve
Definition: keama.h:34
space_def::status
enum option_status status
Definition: keama.h:280
push_option
void push_option(struct option *)
Definition: options.c:649
log_statement
@ log_statement
Definition: keama.h:183
option::name
const char * name
Definition: tree.h:346
eval_data_expression
struct element * eval_data_expression(struct element *, isc_boolean_t *)
Definition: eval.c:476
context_data
@ context_data
Definition: keama.h:154
statement_op
statement_op
Definition: keama.h:163
parse_subnet6_declaration
void parse_subnet6_declaration(struct parse *)
Definition: confparse.c:2429
on_statement
@ on_statement
Definition: keama.h:175
numeric_expression
isc_boolean_t numeric_expression(struct element *, struct parse *, isc_boolean_t *)
get_permit
void get_permit(struct parse *, struct element *)
Parse allow and deny statements.
Definition: confparse.c:1004
space::old
const char * old
Definition: keama.h:284
parse_address_range
void parse_address_range(struct parse *, int, size_t)
Definition: confparse.c:3097
parse_server_duid_conf
void parse_server_duid_conf(struct parse *)
Definition: confparse.c:3790
add_statement
@ add_statement
Definition: keama.h:166
perform
@ perform
Definition: keama.h:35
parse_pool6_statement
void parse_pool6_statement(struct parse *, int)
Parse a pool6 statement.
Definition: confparse.c:3472
parse::lexchar
int lexchar
Definition: dhcpd.h:290
parse_ip6_addr
struct string * parse_ip6_addr(struct parse *)
Definition: parse.c:325
context_numeric
@ context_numeric
Definition: keama.h:155
parse_option_token
struct string * parse_option_token(struct parse *, const char *, isc_boolean_t *, isc_boolean_t *, isc_boolean_t *)
Definition: parse.c:4388
space::status
enum option_status status
Definition: keama.h:286
set_statement
@ set_statement
Definition: keama.h:179
option::format
const char * format
Definition: tree.h:347
isc_dhcp_unknown
@ isc_dhcp_unknown
Definition: keama.h:263
expr_ucase
@ expr_ucase
Definition: keama.h:250
option_status
option_status
Definition: keama.h:261
parse_option_name
struct option * parse_option_name(struct parse *, isc_boolean_t, isc_boolean_t *)
Definition: parse.c:643
parse_prefix6
void parse_prefix6(struct parse *, int, size_t)
Definition: confparse.c:3333
null_statement
@ null_statement
Definition: keama.h:164
option_def::name
const char * name
Definition: keama.h:270
define_statement
@ define_statement
Definition: keama.h:182
default_statement
@ default_statement
Definition: keama.h:178
expr_static
@ expr_static
Definition: keama.h:227
option
Definition: tree.h:345
parse_ip_addr
struct string * parse_ip_addr(struct parse *)
Definition: parse.c:291
statements_statement
@ statements_statement
Definition: keama.h:174
expr_hardware
@ expr_hardware
Definition: keama.h:204
parse_semi
void parse_semi(struct parse *)
Definition: parse.c:139
reduce_data_expression
struct element * reduce_data_expression(struct element *)
Definition: reduce.c:375
expr_funcall
@ expr_funcall
Definition: keama.h:239
parse_pool_statement
void parse_pool_statement(struct parse *, int)
Parse a pool statement.
Definition: confparse.c:1142
parse_option_token_binary
struct string * parse_option_token_binary(struct parse *, const char *)
Definition: parse.c:4511
space_def::name
const char * name
Definition: keama.h:279
parse_address_range6
void parse_address_range6(struct parse *, int, size_t)
Definition: confparse.c:3212
expr_exists
@ expr_exists
Definition: keama.h:216
parse::tlen
int tlen
Definition: dhcpd.h:323
dhctoken.h
push_space
void push_space(struct space *)
Definition: options.c:642
expr_ns_not_exists
@ expr_ns_not_exists
Definition: keama.h:231
eval_statement
@ eval_statement
Definition: keama.h:167
if_statement
@ if_statement
Definition: keama.h:165
data.h
expr_binary_and
@ expr_binary_and
Definition: keama.h:246
expr_arg
@ expr_arg
Definition: keama.h:238
hook_library_path
char * hook_library_path
Definition: keama.c:54
read_conf_file
void read_conf_file(struct parse *, const char *, int)
Definition: confparse.c:480
parse_base64
struct string * parse_base64(struct parse *)
Definition: parse.c:1434
parse::token_line
char * token_line
Definition: dhcpd.h:291
special
@ special
Definition: keama.h:265
prepend_option_statement
@ prepend_option_statement
Definition: keama.h:172
expr_add
@ expr_add
Definition: keama.h:241
unset_statement
@ unset_statement
Definition: keama.h:180
parse_zone
isc_boolean_t parse_zone(struct element *, struct parse *)
Definition: parse.c:2098
context_boolean
@ context_boolean
Definition: keama.h:153
parse_if_statement
isc_boolean_t parse_if_statement(struct element *, struct parse *, isc_boolean_t *)
Definition: parse.c:2477
expr_v6relay
@ expr_v6relay
Definition: keama.h:255
expr_leased_address
@ expr_leased_address
Definition: keama.h:220
reduce_boolean_expression
struct element * reduce_boolean_expression(struct element *)
Definition: reduce.c:52
parse_group_declaration
void parse_group_declaration(struct parse *)
Definition: confparse.c:2520
expr_option
@ expr_option
Definition: keama.h:203
expr_check
@ expr_check
Definition: keama.h:194
element
Definition: data.h:216
context_function
@ context_function
Definition: keama.h:158
expr_binary_xor
@ expr_binary_xor
Definition: keama.h:248
supersede_option_statement
@ supersede_option_statement
Definition: keama.h:170
expr_binary_to_ascii
@ expr_binary_to_ascii
Definition: keama.h:221
expr_ns_add
@ expr_ns_add
Definition: keama.h:228
merge_option_data
void merge_option_data(struct element *, struct element *)
Definition: options.c:708
reduce_numeric_expression
struct element * reduce_numeric_expression(struct element *)
Definition: reduce.c:946
use_isc_lifetimes
isc_boolean_t use_isc_lifetimes
Definition: keama.c:59
expr_filename
@ expr_filename
Definition: keama.h:236
parse_string
void parse_string(struct parse *, char **, unsigned *)
Definition: parse.c:156
send_option_statement
@ send_option_statement
Definition: keama.h:173
global_hr
isc_boolean_t global_hr
Definition: keama.c:60
peek_raw_token
enum dhcp_token peek_raw_token(const char **, unsigned *, struct parse *)
Definition: conflex.c:454
parse_option_code_definition
void parse_option_code_definition(struct parse *, struct option *)
Definition: parse.c:1572
expr_dns_transaction
@ expr_dns_transaction
Definition: keama.h:226
skip_to_rbrace
void skip_to_rbrace(struct parse *, int)
Definition: parse.c:98
parse_option_textbin
struct string * parse_option_textbin(struct parse *, struct option *)
Definition: parse.c:4169
print_boolean_expression
const char * print_boolean_expression(struct element *, isc_boolean_t *)
Definition: print.c:59
expr_extract_int16
@ expr_extract_int16
Definition: keama.h:210
parse_hexa
struct string * parse_hexa(struct parse *)
Definition: parse.c:1524
parses
struct parses parses
Definition: keama.c:51
expr_sname
@ expr_sname
Definition: keama.h:237
parse_statement
isc_boolean_t parse_statement(struct parse *, int, isc_boolean_t)
Definition: confparse.c:584
parse::line
int line
Definition: dhcpd.h:317
parse::inbuf
char * inbuf
Definition: dhcpd.h:328
expr_equal
@ expr_equal
Definition: keama.h:195
expr_variable_exists
@ expr_variable_exists
Definition: keama.h:234
parse_case_statement
isc_boolean_t parse_case_statement(struct element *, struct parse *, isc_boolean_t *, enum expression_context)
Definition: parse.c:2437
eval_expression
struct element * eval_expression(struct element *, isc_boolean_t *)
Definition: eval.c:43
parse::tlname
const char * tlname
Definition: dhcpd.h:294
parse::stack_size
size_t stack_size
Definition: keama.h:111
parse::token
enum dhcp_token token
Definition: dhcpd.h:320
space_def
Definition: keama.h:277
expr_iregex_match
@ expr_iregex_match
Definition: keama.h:253
parse_allow_deny
struct element * parse_allow_deny(struct parse *, int)
Definition: confparse.c:3703
expr_or
@ expr_or
Definition: keama.h:201
expr_not_equal
@ expr_not_equal
Definition: keama.h:232
parse_option_status_dir
void parse_option_status_dir(struct parse *, struct option *, enum dhcp_token)
Definition: confparse.c:4236
__attribute__
void __attribute__((noreturn))
space::name
const char * name
Definition: keama.h:285
parse::bufsiz
size_t bufsiz
Definition: dhcpd.h:330
expr_config_option
@ expr_config_option
Definition: keama.h:222
let_statement
@ let_statement
Definition: keama.h:181
execute_statement
@ execute_statement
Definition: keama.h:185
parse_on_statement
isc_boolean_t parse_on_statement(struct element *, struct parse *, isc_boolean_t *)
Definition: parse.c:2309
context_any
@ context_any
Definition: keama.h:152
expr_binary_or
@ expr_binary_or
Definition: keama.h:247