#ifndef lint
static char copyright[] =
-"$Id: parse.c,v 1.40 1999/10/01 03:17:59 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
+"$Id: parse.c,v 1.41 1999/10/05 19:01:33 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
(*expr) -> op = expr_host_decl_name;
break;
+ case DDNS_FWD_NAME:
+ token = next_token (&val, cfile);
+ if (!expression_allocate (expr,
+ "parse_expression: DDNS_FWD_NAME"))
+ log_fatal ("can't allocate expression");
+ (*expr) -> op = expr_dns_fwd_name;
+ break;
+
+ case DDNS_REV_NAME:
+ token = next_token (&val, cfile);
+ if (!expression_allocate (expr,
+ "parse_expression: DDNS_REV_NAME"))
+ log_fatal ("can't allocate expression");
+ (*expr) -> op = expr_dns_rev_name;
+ break;
+
case PACKET:
token = next_token (&val, cfile);
if (!expression_allocate (expr, "parse_expression: PACKET"))
#ifndef lint
static char copyright[] =
-"$Id: tree.c,v 1.53 1999/10/04 23:17:37 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n";
+"$Id: tree.c,v 1.54 1999/10/05 19:01:32 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
case expr_host_decl_name:
case expr_config_option:
case expr_leased_address:
+ case expr_dns_fwd_name:
+ case expr_dns_rev_name:
log_error ("Data opcode in evaluate_boolean_expression: %d",
expr -> op);
return 0;
if (buffer_allocate (&result -> buffer, result -> len + 1,
"host-decl-name")) {
result -> data = &result -> buffer -> data [0];
- strcpy ((char *)&result -> data [0], lease -> host -> name);
+ strcpy ((char *)&result -> data [0],
+ lease -> host -> name);
result -> terminated = 1;
} else {
log_error ("data: host-decl-name: no memory.");
#endif
return 1;
+ case expr_dns_fwd_name:
+ if (!lease || !lease -> ddns_fwd_name) {
+ log_error ("data: dns-fwd-name: not available");
+ return 0;
+ }
+ result -> len = strlen (lease -> ddns_fwd_name);
+ if (buffer_allocate (&result -> buffer, result -> len + 1,
+ "ddns-fwd-name")) {
+ result -> data = &result -> buffer -> data [0];
+ strcpy ((char *)&result -> data [0],
+ lease -> ddns_fwd_name);
+ result -> terminated = 1;
+ } else {
+ log_error ("data: ddns-fwd-name: no memory.");
+ return 0;
+ }
+#if defined (DEBUG_EXPRESSIONS)
+ log_info ("data: ddns-fwd-name = %s",
+ lease -> ddns_fwd_name);
+#endif
+ return 1;
+
+ case expr_dns_rev_name:
+ if (!lease || !lease -> ddns_rev_name) {
+ log_error ("data: ddns-rev-name: not available");
+ return 0;
+ }
+ result -> len = strlen (lease -> ddns_rev_name);
+ if (buffer_allocate (&result -> buffer, result -> len + 1,
+ "ddns-rev-name")) {
+ result -> data = &result -> buffer -> data [0];
+ strcpy ((char *)&result -> data [0],
+ lease -> ddns_rev_name);
+ result -> terminated = 1;
+ } else {
+ log_error ("data: ddns-rev-name: no memory.");
+ return 0;
+ }
+#if defined (DEBUG_EXPRESSIONS)
+ log_info ("data: ddns-rev-name = %s",
+ lease -> ddns_rev_name);
+#endif
+ return 1;
+
case expr_check:
case expr_equal:
case expr_and:
(&expr -> data.reverse.buffer, name);
break;
+ case expr_dns_update:
+ if (expr -> data.dns_update.type)
+ expression_dereference (&expr -> data.dns_update.type,
+ name);
+ if (expr -> data.dns_update.expr1)
+ expression_dereference (&expr -> data.dns_update.type,
+ name);
+ if (expr -> data.dns_update.expr2)
+ expression_dereference (&expr -> data.dns_update.type,
+ name);
+ if (expr -> data.dns_update.ttl)
+ expression_dereference (&expr -> data.dns_update.type,
+ name);
+
/* No subexpressions. */
case expr_leased_address:
case expr_lease_time:
case expr_hardware:
case expr_exists:
case expr_known:
+ case expr_dns_fwd_name:
+ case expr_dns_rev_name:
break;
default:
expr -> op == expr_pick_first_value ||
expr -> op == expr_host_decl_name ||
expr -> op == expr_leased_address ||
- expr -> op == expr_config_option);
+ expr -> op == expr_config_option ||
+ expr -> op == expr_dns_fwd_name ||
+ expr -> op == expr_dns_rev_name);
}
int is_numeric_expression (expr)
case expr_config_option:
case expr_leased_address:
case expr_lease_time:
+ case expr_dns_update:
+ case expr_dns_fwd_name:
+ case expr_dns_rev_name:
return 100;
case expr_equal:
case expr_config_option:
case expr_leased_address:
case expr_lease_time:
+ case expr_dns_update:
+ case expr_dns_fwd_name:
+ case expr_dns_rev_name:
return context_any;
case expr_equal:
")");
break;
+ case expr_dns_fwd_name:
+ col = token_print_indent (file, col, indent, "", "",
+ "dns-fwd-name");
+ break;
+
+ case expr_dns_rev_name:
+ col = token_print_indent (file, col, indent, "", "",
+ "dns-rev-name");
+ break;
+
default:
log_fatal ("invalid expression type in print_expression: %d",
expr -> op);