summaryrefslogtreecommitdiff
path: root/common/parse.c
diff options
context:
space:
mode:
authorShawn Routhier <sar@isc.org>2013-10-14 15:53:24 -0700
committerShawn Routhier <sar@isc.org>2013-10-14 15:53:24 -0700
commitd7d9c0c7c36d37fc42e51987af77207ced36d9bf (patch)
tree2f7b49de9f03c1097c109e425f0034accc3e7de9 /common/parse.c
parent1d851cff2c59ba728cf6a862db9b1890967de317 (diff)
downloadisc-dhcp-d7d9c0c7c36d37fc42e51987af77207ced36d9bf.tar.gz
-n [master]
Add code to support the standards version of DDNS
Diffstat (limited to 'common/parse.c')
-rw-r--r--common/parse.c380
1 files changed, 7 insertions, 373 deletions
diff --git a/common/parse.c b/common/parse.c
index ad31f8ab..d931b97c 100644
--- a/common/parse.c
+++ b/common/parse.c
@@ -3514,42 +3514,7 @@ int parse_numeric_expression (expr, cfile, lose)
}
return 1;
}
-#if defined (NSUPDATE_OLD)
-/*
- * dns-expression :==
- * UPDATE LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
- * data-expression COMMA numeric-expression RPAREN
- * DELETE LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
- * data-expression RPAREN
- * EXISTS LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
- * data-expression RPAREN
- * NOT EXISTS LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
- * data-expression RPAREN
- * ns-class :== IN | CHAOS | HS | NUMBER
- * ns-type :== A | PTR | MX | TXT | NUMBER
- */
-int parse_dns_expression (expr, cfile, lose)
- struct expression **expr;
- struct parse *cfile;
- int *lose;
-{
- /* Parse an expression... */
- if (!parse_expression (expr, cfile, lose, context_dns,
- (struct expression **)0, expr_none))
- return 0;
-
- if (!is_dns_expression (*expr) &&
- (*expr) -> op != expr_variable_reference &&
- (*expr) -> op != expr_funcall) {
- expression_dereference (expr, MDL);
- parse_warn (cfile, "Expecting a dns update subexpression.");
- *lose = 1;
- return 0;
- }
- return 1;
-}
-#endif /* NSUPDATE_OLD */
/* Parse a subexpression that does not contain a binary operator. */
int parse_non_binary (expr, cfile, lose, context)
@@ -3564,11 +3529,6 @@ int parse_non_binary (expr, cfile, lose, context)
struct expression *nexp, **ep;
int known;
char *cptr;
-#if defined (NSUPDATE_OLD)
- enum expr_op opcode;
- const char *s;
- unsigned long u;
-#endif
isc_result_t status;
unsigned len;
@@ -3600,17 +3560,11 @@ int parse_non_binary (expr, cfile, lose, context)
break;
case TOKEN_NOT:
- skip_token(&val, (unsigned *)0, cfile);
-#if defined(NSUPDATE_OLD)
- if (context == context_dns) {
- token = peek_token (&val, (unsigned *)0, cfile);
- goto not_exists;
- }
-#endif
+ skip_token(&val, NULL, cfile);
if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression");
- (*expr) -> op = expr_not;
- if (!parse_non_binary (&(*expr) -> data.not,
+ (*expr)->op = expr_not;
+ if (!parse_non_binary (&(*expr)->data.not,
cfile, lose, context_boolean)) {
if (!*lose) {
parse_warn (cfile, "expression expected");
@@ -3618,7 +3572,7 @@ int parse_non_binary (expr, cfile, lose, context)
}
*lose = 1;
expression_dereference (expr, MDL);
- return 0;
+ return (0);
}
if (!is_boolean_expression ((*expr) -> data.not)) {
*lose = 1;
@@ -3650,14 +3604,10 @@ int parse_non_binary (expr, cfile, lose, context)
break;
case EXISTS:
-#if defined(NSUPDATE_OLD)
- if (context == context_dns)
- goto ns_exists;
-#endif
- skip_token(&val, (unsigned *)0, cfile);
+ skip_token(&val, NULL, cfile);
if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression");
- (*expr) -> op = expr_exists;
+ (*expr)->op = expr_exists;
known = 0;
/* Pass reference directly to expression structure. */
status = parse_option_name(cfile, 0, &known,
@@ -3666,7 +3616,7 @@ int parse_non_binary (expr, cfile, lose, context)
(*expr)->data.option == NULL) {
*lose = 1;
expression_dereference (expr, MDL);
- return 0;
+ return (0);
}
break;
@@ -3967,285 +3917,6 @@ int parse_non_binary (expr, cfile, lose, context)
goto norparen;
break;
-#if defined(NSUPDATE_OLD)
- /* dns-update and dns-delete are present for historical
- purposes, but are deprecated in favor of ns-update
- in combination with update, delete, exists and not
- exists. */
- case DNS_UPDATE:
- case DNS_DELETE:
-#if !defined (NSUPDATE)
- parse_warn (cfile,
- "Please rebuild dhcpd with --with-nsupdate.");
-#endif
- skip_token(&val, (unsigned *)0, cfile);
- if (token == DNS_UPDATE)
- opcode = expr_ns_add;
- else
- opcode = expr_ns_delete;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != LPAREN)
- goto nolparen;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != STRING) {
- parse_warn (cfile,
- "parse_expression: expecting string.");
- badnsupdate:
- skip_to_semi (cfile);
- *lose = 1;
- return 0;
- }
-
- if (!strcasecmp (val, "a"))
- u = T_A;
- else if (!strcasecmp (val, "aaaa"))
- u = T_AAAA;
- else if (!strcasecmp (val, "ptr"))
- u = T_PTR;
- else if (!strcasecmp (val, "mx"))
- u = T_MX;
- else if (!strcasecmp (val, "cname"))
- u = T_CNAME;
- else if (!strcasecmp (val, "TXT"))
- u = T_TXT;
- else {
- parse_warn (cfile, "unexpected rrtype: %s", val);
- goto badnsupdate;
- }
-
- s = (opcode == expr_ns_add
- ? "old-dns-update"
- : "old-dns-delete");
- cptr = dmalloc (strlen (s) + 1, MDL);
- if (!cptr)
- log_fatal ("can't allocate name for %s", s);
- strcpy (cptr, s);
- if (!expression_allocate (expr, MDL))
- log_fatal ("can't allocate expression");
- (*expr) -> op = expr_funcall;
- (*expr) -> data.funcall.name = cptr;
-
- /* Fake up a function call. */
- ep = &(*expr) -> data.funcall.arglist;
- if (!expression_allocate (ep, MDL))
- log_fatal ("can't allocate expression");
- (*ep) -> op = expr_arg;
- if (!make_const_int (&(*ep) -> data.arg.val, u))
- log_fatal ("can't allocate rrtype value.");
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != COMMA)
- goto nocomma;
- ep = &((*ep) -> data.arg.next);
- if (!expression_allocate (ep, MDL))
- log_fatal ("can't allocate expression");
- (*ep) -> op = expr_arg;
- if (!(parse_data_expression (&(*ep) -> data.arg.val,
- cfile, lose)))
- goto nodata;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != COMMA)
- goto nocomma;
-
- ep = &((*ep) -> data.arg.next);
- if (!expression_allocate (ep, MDL))
- log_fatal ("can't allocate expression");
- (*ep) -> op = expr_arg;
- if (!(parse_data_expression (&(*ep) -> data.arg.val,
- cfile, lose)))
- goto nodata;
-
- if (opcode == expr_ns_add) {
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != COMMA)
- goto nocomma;
-
- ep = &((*ep) -> data.arg.next);
- if (!expression_allocate (ep, MDL))
- log_fatal ("can't allocate expression");
- (*ep) -> op = expr_arg;
- if (!(parse_numeric_expression (&(*ep) -> data.arg.val,
- cfile, lose))) {
- parse_warn (cfile,
- "expecting numeric expression.");
- goto badnsupdate;
- }
- }
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != RPAREN)
- goto norparen;
- break;
-
- case NS_UPDATE:
-#if !defined (NSUPDATE)
- parse_warn (cfile,
- "Please rebuild dhcpd with --with-nsupdate.");
-#endif
- skip_token(&val, (unsigned *)0, cfile);
- if (!expression_allocate (expr, MDL))
- log_fatal ("can't allocate expression");
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != LPAREN)
- goto nolparen;
-
- nexp = *expr;
- do {
- nexp -> op = expr_dns_transaction;
- if (!(parse_dns_expression
- (&nexp -> data.dns_transaction.car,
- cfile, lose)))
- {
- if (!*lose)
- parse_warn
- (cfile,
- "expecting dns expression.");
- expression_dereference (expr, MDL);
- *lose = 1;
- return 0;
- }
-
- token = next_token (&val, (unsigned *)0, cfile);
-
- if (token == COMMA) {
- if (!(expression_allocate
- (&nexp -> data.dns_transaction.cdr,
- MDL)))
- log_fatal
- ("can't allocate expression");
- nexp = nexp -> data.dns_transaction.cdr;
- }
- } while (token == COMMA);
-
- if (token != RPAREN)
- goto norparen;
- break;
-
- /* NOT EXISTS is special cased above... */
- not_exists:
- token = peek_token (&val, (unsigned *)0, cfile);
- if (token != EXISTS) {
- parse_warn (cfile, "expecting DNS prerequisite.");
- *lose = 1;
- return 0;
- }
- opcode = expr_ns_not_exists;
- goto nsupdatecode;
- case TOKEN_ADD:
- opcode = expr_ns_add;
- goto nsupdatecode;
- case TOKEN_DELETE:
- opcode = expr_ns_delete;
- goto nsupdatecode;
- ns_exists:
- opcode = expr_ns_exists;
- nsupdatecode:
- token = next_token (&val, (unsigned *)0, cfile);
-
-#if !defined (NSUPDATE)
- parse_warn (cfile,
- "Please rebuild dhcpd with --with-nsupdate.");
-#endif
- if (!expression_allocate (expr, MDL))
- log_fatal ("can't allocate expression");
- (*expr) -> op = opcode;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != LPAREN)
- goto nolparen;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (!is_identifier (token) && token != NUMBER) {
- parse_warn (cfile, "expecting identifier or number.");
- badnsop:
- expression_dereference (expr, MDL);
- skip_to_semi (cfile);
- *lose = 1;
- return 0;
- }
-
- if (token == NUMBER)
- (*expr) -> data.ns_add.rrclass = atoi (val);
- else if (!strcasecmp (val, "in"))
- (*expr) -> data.ns_add.rrclass = C_IN;
- else if (!strcasecmp (val, "chaos"))
- (*expr) -> data.ns_add.rrclass = C_CHAOS;
- else if (!strcasecmp (val, "hs"))
- (*expr) -> data.ns_add.rrclass = C_HS;
- else {
- parse_warn (cfile, "unexpected rrclass: %s", val);
- goto badnsop;
- }
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != COMMA)
- goto nocomma;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (!is_identifier (token) && token != NUMBER) {
- parse_warn (cfile, "expecting identifier or number.");
- goto badnsop;
- }
-
- if (token == NUMBER)
- (*expr) -> data.ns_add.rrtype = atoi (val);
- else if (!strcasecmp (val, "a"))
- (*expr) -> data.ns_add.rrtype = T_A;
- else if (!strcasecmp (val, "aaaa"))
- (*expr) -> data.ns_add.rrtype = T_AAAA;
- else if (!strcasecmp (val, "ptr"))
- (*expr) -> data.ns_add.rrtype = T_PTR;
- else if (!strcasecmp (val, "mx"))
- (*expr) -> data.ns_add.rrtype = T_MX;
- else if (!strcasecmp (val, "cname"))
- (*expr) -> data.ns_add.rrtype = T_CNAME;
- else if (!strcasecmp (val, "TXT"))
- (*expr) -> data.ns_add.rrtype = T_TXT;
- else {
- parse_warn (cfile, "unexpected rrtype: %s", val);
- goto badnsop;
- }
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != COMMA)
- goto nocomma;
-
- if (!(parse_data_expression
- (&(*expr) -> data.ns_add.rrname, cfile, lose)))
- goto nodata;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != COMMA)
- goto nocomma;
-
- if (!(parse_data_expression
- (&(*expr) -> data.ns_add.rrdata, cfile, lose)))
- goto nodata;
-
- if (opcode == expr_ns_add) {
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != COMMA)
- goto nocomma;
-
- if (!(parse_numeric_expression
- (&(*expr) -> data.ns_add.ttl, cfile,
- lose))) {
- if (!*lose)
- parse_warn (cfile,
- "expecting numeric expression.");
- goto badnsupdate;
- }
- }
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != RPAREN)
- goto norparen;
- break;
-#endif /* NSUPDATE_OLD */
case OPTION:
case CONFIG_OPTION:
if (!expression_allocate (expr, MDL))
@@ -4322,43 +3993,6 @@ int parse_non_binary (expr, cfile, lose, context)
(*expr) -> op = expr_host_decl_name;
break;
-#if defined(NSUPDATE_OLD)
- case UPDATED_DNS_RR:
- skip_token(&val, (unsigned *)0, cfile);
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != LPAREN)
- goto nolparen;
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != STRING) {
- parse_warn (cfile, "expecting string.");
- bad_rrtype:
- *lose = 1;
- return 0;
- }
- if (!strcasecmp (val, "a"))
- s = "ddns-fwd-name";
- else if (!strcasecmp (val, "ptr"))
- s = "ddns-rev-name";
- else {
- parse_warn (cfile, "invalid DNS rrtype: %s", val);
- goto bad_rrtype;
- }
-
- token = next_token (&val, (unsigned *)0, cfile);
- if (token != RPAREN)
- goto norparen;
-
- if (!expression_allocate (expr, MDL))
- log_fatal ("can't allocate expression");
- (*expr) -> op = expr_variable_reference;
- (*expr) -> data.variable =
- dmalloc (strlen (s) + 1, MDL);
- if (!(*expr) -> data.variable)
- log_fatal ("can't allocate variable name.");
- strcpy ((*expr) -> data.variable, s);
- break;
-#endif /* NSUPDATE_OLD */
case PACKET:
skip_token(&val, (unsigned *)0, cfile);
if (!expression_allocate (expr, MDL))