* 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>
#include <isc/util.h>
#include <isccfg/cfg.h>
+#include <isccfg/check.h>
#include <isccc/alist.h>
#include <isccc/cc.h>
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);
* 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>
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)
{
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);
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);
}
}
* 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
* 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 */