]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
[v4_2] Add a better warning about multiple key definitions
authorShawn Routhier <sar@isc.org>
Mon, 28 Apr 2014 21:56:19 +0000 (14:56 -0700)
committerShawn Routhier <sar@isc.org>
Mon, 28 Apr 2014 21:56:19 +0000 (14:56 -0700)
RELNOTES
common/parse.c

index 97175e763d0a8180acb224dec62e73df6d44208d..46ab6f5e55707d9fe29b2a0cc757dbb824b4ae65 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -1,5 +1,5 @@
              Internet Systems Consortium DHCP Distribution
-                             Version 4.2.6
+                             Version 4.2.7-pre-beta
                             3 February 2014
 
                              Release Notes
@@ -61,6 +61,11 @@ by Eric Young (eay@cryptsoft.com).
 - Remove an extra set of the msg_controllen variable.
   [ISC-Bugs #21035]
 
+- Add a more understandable error message if a configuration attempts
+  to add multiple keys for a single zone.  Thanks to a patch from Jiri
+  Popelka at Red Hat.
+  [ISC-Bugs #31892]
+
                        Changes since 4.2.6rc1
 
 - None
index db2e1d0dc2b47620e668052f70bec4078682bab9..5333704f16de6046e35aad63c6f462b5da23110a 100644 (file)
@@ -2872,27 +2872,31 @@ int parse_zone (struct dns_zone *zone, struct parse *cfile)
                    break;
 
                  case KEY:
-                   skip_token(&val, (unsigned *)0, cfile);
-                   token = peek_token (&val, (unsigned *)0, cfile);
+                   skip_token(&val, NULL, cfile);
+                   token = peek_token(&val, NULL, cfile);
                    if (token == STRING) {
-                           skip_token(&val, (unsigned *)0, cfile);
-                           key_name = (char *)0;
+                           skip_token(&val, NULL, cfile);
+                           key_name = NULL;
                    } else {
-                           key_name = parse_host_name (cfile);
+                           key_name = parse_host_name(cfile);
                            if (!key_name) {
-                                   parse_warn (cfile, "expecting key name.");
-                                   skip_to_semi (cfile);
-                                   return 0;
+                                   parse_warn(cfile, "expecting key name.");
+                                   skip_to_semi(cfile);
+                                   return (0);
                            }
                            val = key_name;
                    }
-                   if (omapi_auth_key_lookup_name (&zone -> key, val) !=
+                   if (zone->key) {
+                           log_fatal("Multiple key definitions for zone %s.",
+                                     zone->name);
+                   }
+                   if (omapi_auth_key_lookup_name(&zone->key, val) !=
                        ISC_R_SUCCESS)
-                           parse_warn (cfile, "unknown key %s", val);
+                           parse_warn(cfile, "unknown key %s", val);
                    if (key_name)
-                           dfree (key_name, MDL);
-                   if (!parse_semi (cfile))
-                           return 0;
+                           dfree(key_name, MDL);
+                   if (!parse_semi(cfile))
+                           return (0);
                    break;
                    
                  default:
@@ -2901,12 +2905,12 @@ int parse_zone (struct dns_zone *zone, struct parse *cfile)
            }
        } while (!done);
 
-       token = next_token (&val, (unsigned *)0, cfile);
+       token = next_token(&val, NULL, cfile);
        if (token != RBRACE) {
-               parse_warn (cfile, "expecting right brace.");
-               return 0;
+               parse_warn(cfile, "expecting right brace.");
+               return (0);
        }
-       return 1;
+       return (1);
 }
 
 /* key-statements :== key-statement |