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

index d323f2a623d7a281888999428273a270eab4f7cb..ea32a3541fdb298ffd66212eb6a3d065e09d1667 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -69,6 +69,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.3.0rc1
 
 - None
index 38d350f4e76c5aa74937bc3695f9c2a61cefb0d5..2e363c2cc43d41d9f7b7bd33dffe4e334cd79a9f 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 |