mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-09-01 06:45:27 +00:00
- Clean up lease parser, remove ddns_fwd and ddns_rev, support multiple
on events
This commit is contained in:
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static char copyright[] =
|
static char copyright[] =
|
||||||
"$Id: confpars.c,v 1.94 2000/01/05 18:42:57 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
|
"$Id: confpars.c,v 1.95 2000/01/08 01:43:52 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include "dhcpd.h"
|
#include "dhcpd.h"
|
||||||
@@ -518,7 +518,8 @@ int parse_statement (cfile, group, type, host_decl, declaration)
|
|||||||
|
|
||||||
if (!et) {
|
if (!et) {
|
||||||
lose = 0;
|
lose = 0;
|
||||||
if (!parse_executable_statement (&et, cfile, &lose)) {
|
if (!parse_executable_statement (&et, cfile, &lose,
|
||||||
|
context_any)) {
|
||||||
if (!lose) {
|
if (!lose) {
|
||||||
if (declaration)
|
if (declaration)
|
||||||
parse_warn (cfile,
|
parse_warn (cfile,
|
||||||
@@ -2034,7 +2035,6 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
}
|
}
|
||||||
memcpy (tuid, val, lease.uid_len);
|
memcpy (tuid, val, lease.uid_len);
|
||||||
lease.uid = tuid;
|
lease.uid = tuid;
|
||||||
parse_semi (cfile);
|
|
||||||
} else {
|
} else {
|
||||||
lease.uid_len = 0;
|
lease.uid_len = 0;
|
||||||
lease.uid = (parse_numeric_aggregate
|
lease.uid = (parse_numeric_aggregate
|
||||||
@@ -2048,9 +2048,11 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
lease.uid = (unsigned char *)0;
|
lease.uid = (unsigned char *)0;
|
||||||
parse_warn (cfile, "zero-length uid");
|
parse_warn (cfile, "zero-length uid");
|
||||||
seenbit = 0;
|
seenbit = 0;
|
||||||
|
parse_semi (cfile);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
parse_semi (cfile);
|
||||||
if (!lease.uid) {
|
if (!lease.uid) {
|
||||||
log_fatal ("No memory for lease uid");
|
log_fatal ("No memory for lease uid");
|
||||||
}
|
}
|
||||||
@@ -2064,6 +2066,7 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
skip_to_rbrace (cfile, 1);
|
skip_to_rbrace (cfile, 1);
|
||||||
return (struct lease *)0;
|
return (struct lease *)0;
|
||||||
}
|
}
|
||||||
|
parse_semi (cfile);
|
||||||
/* for now, we aren't using this. */
|
/* for now, we aren't using this. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2076,6 +2079,7 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
case DYNAMIC_BOOTP:
|
case DYNAMIC_BOOTP:
|
||||||
seenbit = 128;
|
seenbit = 128;
|
||||||
lease.flags |= BOOTP_LEASE;
|
lease.flags |= BOOTP_LEASE;
|
||||||
|
parse_semi (cfile);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PEER:
|
case PEER:
|
||||||
@@ -2092,11 +2096,13 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
}
|
}
|
||||||
seenbit = 262144;
|
seenbit = 262144;
|
||||||
lease.flags |= PEER_IS_OWNER;
|
lease.flags |= PEER_IS_OWNER;
|
||||||
|
parse_semi (cfile);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ABANDONED:
|
case ABANDONED:
|
||||||
seenbit = 256;
|
seenbit = 256;
|
||||||
lease.flags |= ABANDONED_LEASE;
|
lease.flags |= ABANDONED_LEASE;
|
||||||
|
parse_semi (cfile);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HOSTNAME:
|
case HOSTNAME:
|
||||||
@@ -2104,9 +2110,11 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
token = peek_token (&val, cfile);
|
token = peek_token (&val, cfile);
|
||||||
if (token == STRING)
|
if (token == STRING)
|
||||||
lease.hostname = parse_string (cfile);
|
lease.hostname = parse_string (cfile);
|
||||||
else
|
else {
|
||||||
lease.hostname =
|
lease.hostname = parse_host_name (cfile);
|
||||||
parse_host_name (cfile);
|
if (lease.hostname)
|
||||||
|
parse_semi (cfile);
|
||||||
|
}
|
||||||
if (!lease.hostname) {
|
if (!lease.hostname) {
|
||||||
seenbit = 0;
|
seenbit = 0;
|
||||||
return (struct lease *)0;
|
return (struct lease *)0;
|
||||||
@@ -2117,11 +2125,17 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
seenbit = 1024;
|
seenbit = 1024;
|
||||||
token = peek_token (&val, cfile);
|
token = peek_token (&val, cfile);
|
||||||
if (token == STRING)
|
if (token == STRING)
|
||||||
lease.client_hostname =
|
lease.client_hostname = parse_string (cfile);
|
||||||
parse_string (cfile);
|
else {
|
||||||
else
|
|
||||||
lease.client_hostname =
|
lease.client_hostname =
|
||||||
parse_host_name (cfile);
|
parse_host_name (cfile);
|
||||||
|
if (lease.client_hostname)
|
||||||
|
parse_semi (cfile);
|
||||||
|
}
|
||||||
|
if (!lease.client_hostname) {
|
||||||
|
seenbit = 0;
|
||||||
|
return (struct lease *)0;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BILLING:
|
case BILLING:
|
||||||
@@ -2150,25 +2164,6 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
if (token != SEMI)
|
if (token != SEMI)
|
||||||
skip_to_semi (cfile);
|
skip_to_semi (cfile);
|
||||||
}
|
}
|
||||||
token = BILLING;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DDNS_FWD_NAME:
|
|
||||||
seenbit = 4096;
|
|
||||||
token = peek_token (&val, cfile);
|
|
||||||
if (token == STRING)
|
|
||||||
lease.ddns_fwd_name = parse_string (cfile);
|
|
||||||
else
|
|
||||||
lease.ddns_fwd_name = parse_host_name (cfile);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DDNS_REV_NAME:
|
|
||||||
seenbit = 8192;
|
|
||||||
token = peek_token (&val, cfile);
|
|
||||||
if (token == STRING)
|
|
||||||
lease.ddns_rev_name = parse_string (cfile);
|
|
||||||
else
|
|
||||||
lease.ddns_rev_name = parse_host_name (cfile);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ON:
|
case ON:
|
||||||
@@ -2178,22 +2173,21 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
skip_to_rbrace (cfile, 1);
|
skip_to_rbrace (cfile, 1);
|
||||||
return (struct lease *)0;
|
return (struct lease *)0;
|
||||||
}
|
}
|
||||||
if (on -> data.on.evtype == expiry &&
|
if ((on -> data.on.evtypes & ON_EXPIRY) &&
|
||||||
on -> data.on.statements) {
|
on -> data.on.statements) {
|
||||||
seenbit = 16384;
|
seenbit = 16384;
|
||||||
executable_statement_reference
|
executable_statement_reference
|
||||||
(&lease.on_expiry,
|
(&lease.on_expiry,
|
||||||
on -> data.on.statements,
|
on -> data.on.statements,
|
||||||
"parse_lease_declaration");
|
"parse_lease_declaration");
|
||||||
} else if (on -> data.on.evtype == release &&
|
}
|
||||||
on -> data.on.statements) {
|
if ((on -> data.on.evtypes & ON_RELEASE) &&
|
||||||
|
on -> data.on.statements) {
|
||||||
seenbit = 32768;
|
seenbit = 32768;
|
||||||
executable_statement_reference
|
executable_statement_reference
|
||||||
(&lease.on_release,
|
(&lease.on_release,
|
||||||
on -> data.on.statements,
|
on -> data.on.statements,
|
||||||
"parse_lease_declaration");
|
"parse_lease_declaration");
|
||||||
} else {
|
|
||||||
seenbit = 0;
|
|
||||||
}
|
}
|
||||||
executable_statement_dereference
|
executable_statement_dereference
|
||||||
(&on, "parse_lease_declaration");
|
(&on, "parse_lease_declaration");
|
||||||
@@ -2205,17 +2199,6 @@ struct lease *parse_lease_declaration (cfile)
|
|||||||
return (struct lease *)0;
|
return (struct lease *)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (token != HARDWARE && token != STRING
|
|
||||||
&& token != BILLING && token != ON) {
|
|
||||||
token = next_token (&val, cfile);
|
|
||||||
if (token != SEMI) {
|
|
||||||
parse_warn (cfile,
|
|
||||||
"semicolon expected.");
|
|
||||||
skip_to_semi (cfile);
|
|
||||||
return (struct lease *)0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (seenmask & seenbit) {
|
if (seenmask & seenbit) {
|
||||||
parse_warn (cfile,
|
parse_warn (cfile,
|
||||||
"Too many %s parameters in lease %s\n",
|
"Too many %s parameters in lease %s\n",
|
||||||
|
Reference in New Issue
Block a user