]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
- Delete dns-fwd-name and dns-rev-name expressions and replace with
authorTed Lemon <source@isc.org>
Tue, 5 Oct 1999 19:43:44 +0000 (19:43 +0000)
committerTed Lemon <source@isc.org>
Tue, 5 Oct 1999 19:43:44 +0000 (19:43 +0000)
  updated-dns-rr (rrtype).

common/conflex.c
common/parse.c
common/tree.c
includes/dhctoken.h
includes/tree.h

index 78cf4b3a9562ff9a689a51525eca48e8ac46e1e5..aaf4d0ce520a5a10555899a218b36f627a8bb79d 100644 (file)
@@ -22,7 +22,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: conflex.c,v 1.56 1999/10/01 03:33:44 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.  All rights reserved.\n";
+"$Id: conflex.c,v 1.57 1999/10/05 19:43:41 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -758,6 +758,8 @@ static enum dhcp_token intern (atom, dfv)
                }
                if (!strcasecmp (atom + 1, "nauthenticated"))
                        return AUTHENTICATED;
+               if (!strcasecmp (atom + 1, "pdated-dns-rr"))
+                       return UPDATED_DNS_RR;
                break;
              case 'v':
                if (!strcasecmp (atom + 1, "endor-class"))
index b871936b7088f73f3946fa3e7952db3817572e7c..e4aea4b791e5898ed067c9eca48c4fa4616bb3b9 100644 (file)
@@ -22,7 +22,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$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";
+"$Id: parse.c,v 1.42 1999/10/05 19:43:40 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -2037,20 +2037,24 @@ int parse_non_binary (expr, cfile, lose, context)
                (*expr) -> op = expr_host_decl_name;
                break;
 
-             case DDNS_FWD_NAME:
+             case UPDATED_DNS_RR:
                token = next_token (&val, cfile);
                if (!expression_allocate (expr,
-                                         "parse_expression: DDNS_FWD_NAME"))
+                                         "parse_expression: UPDATED_DNS_RR"))
                        log_fatal ("can't allocate expression");
-               (*expr) -> op = expr_dns_fwd_name;
-               break;
+               (*expr) -> op = expr_updated_dns_rr;
 
-             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;
+               if (token != LPAREN)
+                       goto nolparen;
+               if (!parse_data_expression (&(*expr) -> data.updated_dns_rr,
+                                           cfile, lose))
+                       goto nodata;
+
+               token = next_token (&val, cfile);
+               if (token != RPAREN)
+                       goto norparen;
+
                break;
 
              case PACKET:
index 009e298c8d85a0ea3a4a30096798e9162cda636e..10d4d386118777fe83d84ab4e8c577a6a18585a6 100644 (file)
@@ -22,7 +22,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$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";
+"$Id: tree.c,v 1.55 1999/10/05 19:43:40 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -619,8 +619,7 @@ int evaluate_boolean_expression (result, packet, lease, in_options,
              case expr_host_decl_name:
              case expr_config_option:
              case expr_leased_address:
-             case expr_dns_fwd_name:
-             case expr_dns_rev_name:
+             case expr_updated_dns_rr:
                log_error ("Data opcode in evaluate_boolean_expression: %d",
                      expr -> op);
                return 0;
@@ -653,6 +652,7 @@ int evaluate_data_expression (result, packet, lease,
        unsigned long offset, len, i;
        int s0, s1, s2, s3;
        int status;
+       char *s;
 
        switch (expr -> op) {
                /* Extract N bytes starting at byte M of a data string. */
@@ -1267,47 +1267,58 @@ int evaluate_data_expression (result, packet, lease,
 #endif
                return 1;
 
-             case expr_dns_fwd_name:
-               if (!lease || !lease -> ddns_fwd_name) {
-                       log_error ("data: dns-fwd-name: not available");
+             case expr_updated_dns_rr:
+               if (!lease) {
+#if defined (DEBUG_EXPRESSIONS)
+                       log_debug ("data: updated-dns-rr w/no lease = NULL");
+#endif
                        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.");
+               memset (&data, 0, sizeof data);
+               s0 = evaluate_data_expression
+                       (result, packet, lease, in_options, cfg_options,
+                        expr -> data.updated_dns_rr);
+               if (!s0) {
+#if defined (DEBUG_EXPRESSIONS)
+                       log_debug ("data: updated-dns-rr (NULL) = NULL");
+#endif
                        return 0;
                }
+               if (data.len == 1 &&
+                   !strncasecmp (data.data, "a", 1)) {
+                       s = lease -> ddns_fwd_name;
+               } else if (data.len == 3 &&
+                          !strncasecmp (data.data, "ptr", 3)) {
+                       s = lease -> ddns_rev_name;
+               } else {
 #if defined (DEBUG_EXPRESSIONS)
-               log_info ("data: ddns-fwd-name = %s",
-                         lease -> ddns_fwd_name);
+                       log_debug ("data: updated-dns-rr (%*s) = NULL",
+                                  result -> len > 50 ? 50 : result -> len,
+                                  result -> data);
 #endif
-               return 1;
-
-             case expr_dns_rev_name:
-               if (!lease || !lease -> ddns_rev_name) {
-                       log_error ("data: ddns-rev-name: not available");
+                       data_string_forget (&data, "data: updated-dns-rr");
                        return 0;
                }
-               result -> len = strlen (lease -> ddns_rev_name);
+               data_string_forget (&data, "data: updated-dns-rr");
+               result -> len = strlen (s);
                if (buffer_allocate (&result -> buffer, result -> len + 1,
-                                    "ddns-rev-name")) {
+                                    "updated-dns-rr")) {
                        result -> data = &result -> buffer -> data [0];
-                       strcpy ((char *)&result -> data [0],
-                               lease -> ddns_rev_name);
+                       strcpy ((char *)&result -> data [0], s);
                        result -> terminated = 1;
                } else {
-                       log_error ("data: ddns-rev-name: no memory.");
+#if defined (DEBUG_EXPRESSIONS)
+                       log_debug ("data: updated-dns-rr (%*s)",
+                                  result -> len > 50 ? 50 : result -> len,
+                                  result -> data));
+#endif
+                       log_error ("data: updated-dns-rr: no memory.");
                        return 0;
                }
 #if defined (DEBUG_EXPRESSIONS)
-               log_info ("data: ddns-rev-name = %s",
-                         lease -> ddns_rev_name);
+               log_info ("data: updated-dns-rr (%s) = %s",
+                         result -> len > 50 ? 50 : result -> len,
+                         result -> data, s);
 #endif
                return 1;
 
@@ -1699,8 +1710,7 @@ void expression_dereference (eptr, name)
              case expr_hardware:
              case expr_exists:
              case expr_known:
-             case expr_dns_fwd_name:
-             case expr_dns_rev_name:
+             case expr_updated_dns_rr:
                break;
 
              default:
@@ -1785,8 +1795,7 @@ int is_data_expression (expr)
                expr -> op == expr_host_decl_name ||
                expr -> op == expr_leased_address ||
                expr -> op == expr_config_option ||
-               expr -> op == expr_dns_fwd_name ||
-               expr -> op == expr_dns_rev_name);
+               expr -> op == expr_updated_dns_rr);
 }
 
 int is_numeric_expression (expr)
@@ -1836,8 +1845,7 @@ static int op_val (op)
              case expr_leased_address:
              case expr_lease_time:
              case expr_dns_update:
-             case expr_dns_fwd_name:
-             case expr_dns_rev_name:
+             case expr_updated_dns_rr:
                return 100;
 
              case expr_equal:
@@ -1896,8 +1904,7 @@ enum expression_context op_context (op)
              case expr_leased_address:
              case expr_lease_time:
              case expr_dns_update:
-             case expr_dns_fwd_name:
-             case expr_dns_rev_name:
+             case expr_updated_dns_rr:
                return context_any;
 
              case expr_equal:
@@ -2248,14 +2255,16 @@ int write_expression (file, expr, col, indent)
                                          ")");
                break;
 
-             case expr_dns_fwd_name:
-               col = token_print_indent (file, col, indent, "", "",
-                                         "dns-fwd-name");
-               break;
-
-             case expr_dns_rev_name:
+             case expr_updated_dns_rr:
                col = token_print_indent (file, col, indent, "", "",
                                          "dns-rev-name");
+               col = token_print_indent (file, col, indent, " ", "",
+                                         "(");
+               scol = col;
+               col = write_expression (file, expr -> data.updated_dns_rr,
+                                       col, scol);
+               col = token_print_indent (file, col, indent, "", "",
+                                         ")");
                break;
 
              default:
index 473b4b954a9a580ffff39d3d400189a872b3e1c9..3c8702248b043145f218f33d0af93fad41548481 100644 (file)
@@ -197,6 +197,7 @@ enum dhcp_token {
        NEVER = 415,
        INFINITE = 416,
        DELETED = 417,
+       UPDATED_DNS_RR = 418,
 };
 
 #define is_identifier(x)       ((x) >= FIRST_TOKEN &&  \
index 3859f821bbaaa82b8ab1277a86a15ecbfbbb426c..8673a69864e27f3c961d59f4d785e8652838e4f4 100644 (file)
@@ -92,8 +92,7 @@ enum expr_op {
        expr_lease_time,
        expr_dns_update,
        expr_static,
-       expr_dns_fwd_name,
-       expr_dns_rev_name,
+       expr_updated_dns_rr,
 };
 
 struct expression {
@@ -148,6 +147,7 @@ struct expression {
                        struct expression *expr2;
                        struct expression *ttl;
                } dns_update;
+               struct expression *updated_dns_rr;
        } data;
        int flags;
 #      define EXPR_EPHEMERAL   1