summaryrefslogtreecommitdiff
path: root/server/confpars.c
diff options
context:
space:
mode:
authorThomas Markwalder <tmark@isc.org>2019-11-22 13:39:45 -0500
committerThomas Markwalder <tmark@isc.org>2019-11-22 13:39:45 -0500
commit0cd94b5ef4a078097fc2bd1dc72f5e80c2cf1844 (patch)
treee4dfe9a92d676a49b18ab547d781fb3fb10c8e6a /server/confpars.c
parent97c155273c0df0c8518f226e2b5e338e3ad63e87 (diff)
downloadisc-dhcp-0cd94b5ef4a078097fc2bd1dc72f5e80c2cf1844.tar.gz
[#64,!35] Restored work
Restored cummulative work.
Diffstat (limited to 'server/confpars.c')
-rw-r--r--server/confpars.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/server/confpars.c b/server/confpars.c
index 7ad28d55..4f0b58ee 100644
--- a/server/confpars.c
+++ b/server/confpars.c
@@ -775,8 +775,11 @@ int parse_statement (cfile, group, type, host_decl, declaration)
et = (struct executable_statement *)0;
if (!parse_option_statement
(&et, cfile, 1, option,
- supersede_option_statement))
+ supersede_option_statement)) {
+ option_dereference(&option, MDL);
return declaration;
+ }
+
option_dereference(&option, MDL);
goto insert_statement;
} else
@@ -2048,12 +2051,15 @@ void parse_host_declaration (cfile, group)
unsigned len;
skip_token(&val, (unsigned *)0, cfile);
- data_string_forget (&host -> client_identifier, MDL);
-
if (host->client_identifier.len != 0) {
- parse_warn(cfile, "Host %s already has a "
- "client identifier.",
- host->name);
+ char buf[256];
+ print_hex_or_string(host->client_identifier.len,
+ host->client_identifier.data,
+ sizeof(buf) - 1, buf);
+ parse_warn(cfile,
+ "Host '%s' already has a uid '%s'",
+ host->name, buf);
+ skip_to_rbrace(cfile, 1);
break;
}
@@ -2795,6 +2801,7 @@ void parse_subnet_declaration (cfile, share)
if (token != NETMASK) {
parse_warn (cfile, "Expecting netmask");
skip_to_semi (cfile);
+ subnet_dereference (&subnet, MDL);
return;
}
@@ -2898,6 +2905,7 @@ parse_subnet6_declaration(struct parse *cfile, struct shared_network *share) {
token = next_token(&val, NULL, cfile);
if (token != SLASH) {
parse_warn(cfile, "Expecting a '/'.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
@@ -2905,6 +2913,7 @@ parse_subnet6_declaration(struct parse *cfile, struct shared_network *share) {
token = next_token(&val, NULL, cfile);
if (token != NUMBER) {
parse_warn(cfile, "Expecting a number.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
@@ -2914,12 +2923,14 @@ parse_subnet6_declaration(struct parse *cfile, struct shared_network *share) {
(subnet->prefix_len > 128) ||
(*endp != '\0')) {
parse_warn(cfile, "Expecting a number between 0 and 128.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
if (!is_cidr_mask_valid(&subnet->net, subnet->prefix_len)) {
parse_warn(cfile, "New subnet mask too short.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
@@ -3578,6 +3589,11 @@ int parse_lease_declaration (struct lease **lp, struct parse *cfile)
if (token != EQUAL) {
parse_warn (cfile,
"expecting '=' in set statement.");
+ binding_value_dereference(&nv, MDL);
+ if (newbinding) {
+ dfree(binding->name, MDL);
+ dfree(binding, MDL);
+ }
goto badset;
}
}
@@ -3585,6 +3601,10 @@ int parse_lease_declaration (struct lease **lp, struct parse *cfile)
if (!parse_binding_value(cfile, nv)) {
binding_value_dereference(&nv, MDL);
lease_dereference(&lease, MDL);
+ if (newbinding) {
+ dfree(binding->name, MDL);
+ dfree(binding, MDL);
+ }
return 0;
}
@@ -4762,6 +4782,7 @@ parse_ia_na_declaration(struct parse *cfile) {
if (token != LBRACE) {
parse_warn(cfile, "corrupt lease file; expecting left brace");
skip_to_semi(cfile);
+ ia_dereference(&ia, MDL);
return;
}
@@ -5209,6 +5230,7 @@ parse_ia_ta_declaration(struct parse *cfile) {
if (token != LBRACE) {
parse_warn(cfile, "corrupt lease file; expecting left brace");
skip_to_semi(cfile);
+ ia_dereference(&ia, MDL);
return;
}
@@ -5646,6 +5668,7 @@ parse_ia_pd_declaration(struct parse *cfile) {
if (token != LBRACE) {
parse_warn(cfile, "corrupt lease file; expecting left brace");
skip_to_semi(cfile);
+ ia_dereference(&ia, MDL);
return;
}