]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
the server would catch an assertion failure if the key statement in rndc.key
authorAndreas Gustafsson <source@isc.org>
Fri, 3 Aug 2001 17:24:11 +0000 (17:24 +0000)
committerAndreas Gustafsson <source@isc.org>
Fri, 3 Aug 2001 17:24:11 +0000 (17:24 +0000)
was missing the algorithm or secret clause

bin/named/controlconf.c
lib/isccfg/check.c
lib/isccfg/include/isccfg/check.h

index 627c3db5f8a76e8b7bda7e5e29ba1a7cc26ecc8c..57712b03c2a19066628a12beb958314ceb885e12 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: controlconf.c,v 1.18 2001/08/03 05:56:19 marka Exp $ */
+/* $Id: controlconf.c,v 1.19 2001/08/03 17:24:08 gson Exp $ */
 
 #include <config.h>
 
@@ -36,6 +36,7 @@
 #include <isc/util.h>
 
 #include <isccfg/cfg.h>
+#include <isccfg/check.h>
 
 #include <isccc/alist.h>
 #include <isccc/cc.h>
@@ -750,6 +751,8 @@ get_rndckey(isc_mem_t *mctx, controlkeylist_t *keyids) {
        if (keyid->keyname == NULL) 
                CHECK(ISC_R_NOMEMORY);
 
+       CHECK(cfg_check_key(key, ns_g_lctx));
+
        (void)cfg_map_get(key, "algorithm", &algobj);
        (void)cfg_map_get(key, "secret", &secretobj);
        INSIST(algobj != NULL && secretobj != NULL);
index 0007db5b554c0bfb74ddc2c20348dd209701b39f..acfa25f049ae636873d0585c0024d28ea2fdb07d 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: check.c,v 1.13 2001/07/19 16:29:14 bwelling Exp $ */
+/* $Id: check.c,v 1.14 2001/08/03 17:24:10 gson Exp $ */
 
 #include <config.h>
 
@@ -294,6 +294,24 @@ check_zoneconf(cfg_obj_t *zconfig, isc_symtab_t *symtab, isc_log_t *logctx) {
        return (result);
 }
 
+isc_result_t
+cfg_check_key(cfg_obj_t *key, isc_log_t *logctx) {
+       cfg_obj_t *algobj = NULL;
+       cfg_obj_t *secretobj = NULL;
+       const char *keyname = cfg_obj_asstring(cfg_map_getname(key));
+       
+       cfg_map_get(key, "algorithm", &algobj);
+       cfg_map_get(key, "secret", &secretobj);
+       if (secretobj == NULL || algobj == NULL) {
+               cfg_obj_log(key, logctx, ISC_LOG_ERROR,
+                           "key '%s' must have both 'secret' and "
+                           "'algorithm' defined",
+                           keyname);
+               return ISC_R_FAILURE;
+       }
+       return ISC_R_SUCCESS;
+}
+               
 static isc_result_t
 check_viewconf(cfg_obj_t *vconfig, const char *vname, isc_log_t *logctx,
               isc_mem_t *mctx)
@@ -341,10 +359,8 @@ check_viewconf(cfg_obj_t *vconfig, const char *vname, isc_log_t *logctx,
        {
                cfg_obj_t *key = cfg_listelt_value(element);
                const char *keyname = cfg_obj_asstring(cfg_map_getname(key));
-               cfg_obj_t *algobj = NULL;
-               cfg_obj_t *secretobj = NULL;
                isc_symvalue_t symvalue;
-               
+
                symvalue.as_pointer = NULL;
                tresult = isc_symtab_define(symtab, keyname, 1,
                                            symvalue, isc_symexists_reject);
@@ -356,14 +372,11 @@ check_viewconf(cfg_obj_t *vconfig, const char *vname, isc_log_t *logctx,
                        isc_symtab_destroy(&symtab);
                        return (tresult);
                }
-               cfg_map_get(key, "algorithm", &algobj);
-               cfg_map_get(key, "secret", &secretobj);
-               if (secretobj == NULL || algobj == NULL) {
-                       cfg_obj_log(key, logctx, ISC_LOG_ERROR,
-                                   "key '%s' must have both 'secret' and "
-                                   "algorithm defined",
-                                   keyname);
-                       result = ISC_R_FAILURE;
+
+               tresult = cfg_check_key(key, logctx);
+               if (result != ISC_R_SUCCESS) {
+                       isc_symtab_destroy(&symtab);
+                       return (tresult);
                }
        }
 
index 70742424244b95396d5fe5fe459ec604226b7139..737c6287542cce0c8b289197964f56682cc43ddd 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: check.h,v 1.3 2001/03/08 00:55:50 bwelling Exp $ */
+/* $Id: check.h,v 1.4 2001/08/03 17:24:11 gson Exp $ */
 
 #ifndef ISCCFG_CHECK_H
 #define ISCCFG_CHECK_H 1
@@ -43,6 +43,12 @@ cfg_check_namedconf(cfg_obj_t *config, isc_log_t *logctx, isc_mem_t *mctx);
  *     ISC_R_FAILURE
  */
 
+isc_result_t
+cfg_check_key(cfg_obj_t *config, isc_log_t *logctx);
+/*
+ * As above, but for a single 'key' statement.
+ */
+
 ISC_LANG_ENDDECLS
 
 #endif /* ISCCFG_CHECK_H */