bool inline_signing = false;
bool check_keys = (flags & BIND_CHECK_KEYS) != 0;
const void *clauses = NULL;
- const char *option = NULL;
+ const cfg_clausedef_t *option = NULL;
const char *kaspname = NULL;
const char *dir = NULL;
static const char *acls[] = {
while (option != NULL) {
obj = NULL;
bool topt = false;
- (void)cfg_map_get(zoptions, option, &obj);
+ (void)cfg_map_get(zoptions, option->name, &obj);
if (obj == NULL && toptions != NULL) {
- (void)cfg_map_get(toptions, option, &obj);
+ (void)cfg_map_get(toptions, option->name, &obj);
topt = true;
}
- if (obj != NULL && !cfg_clause_validforzone(option, ztype)) {
+ if (obj != NULL &&
+ !cfg_clause_validforzone(option->name, ztype))
+ {
cfg_obj_log(obj, ISC_LOG_WARNING,
"option '%s' is not allowed "
"in '%s' zone '%s'%s%s%s",
- option, typestr, znamestr,
+ option->name, typestr, znamestr,
topt ? " (referencing template '" : "",
topt ? tmplname : "", topt ? "')" : "");
result = ISC_R_FAILURE;
*/
typedef struct cfg_listelt cfg_listelt_t;
+/*%
+ * A configuration clause definition.
+ */
+typedef struct cfg_clausedef cfg_clausedef_t;
+
/*%
* A callback function to be called when parsing an option
* that needs to be interpreted at parsing time, like
* Return the line in file where this object was defined.
*/
-const char *
+const cfg_clausedef_t *
cfg_map_firstclause(const cfg_type_t *map, const void **clauses,
unsigned int *idx);
-const char *
+
+const cfg_clausedef_t *
cfg_map_nextclause(const cfg_type_t *map, const void **clauses,
unsigned int *idx);
return isc_symtab_count(map->symtab);
}
-const char *
+const cfg_clausedef_t *
cfg_map_firstclause(const cfg_type_t *map, const void **clauses,
unsigned int *idx) {
cfg_clausedef_t *const *clauseset;
return NULL;
}
}
- return (*clauseset)[*idx].name;
+ return &(*clauseset)[*idx];
}
-const char *
+const cfg_clausedef_t *
cfg_map_nextclause(const cfg_type_t *map, const void **clauses,
unsigned int *idx) {
cfg_clausedef_t *const *clauseset;
return NULL;
}
}
- return (*clauseset)[*idx].name;
+ return &(*clauseset)[*idx];
}
/* Parse an arbitrary token, storing its raw text representation. */
symval.as_pointer = obj;
}
- result = isc_symtab_define(map->symtab, clausename,
+ result = isc_symtab_define(map->symtab, clause->name,
SYMTAB_DUMMY_TYPE, symval,
isc_symexists_reject);
INSIST(result == ISC_R_SUCCESS);
static const cfg_clausedef_t *
find_clause(const cfg_type_t *map, const char *name) {
- const char *found_name = NULL;
+ const cfg_clausedef_t *found = NULL;
const void *clauses = NULL;
unsigned int idx;
- found_name = cfg_map_firstclause(map, &clauses, &idx);
- while (name != NULL && strcasecmp(name, found_name)) {
- found_name = cfg_map_nextclause(map, &clauses, &idx);
+ found = cfg_map_firstclause(map, &clauses, &idx);
+ while (name != NULL && strcasecmp(name, found->name)) {
+ found = cfg_map_nextclause(map, &clauses, &idx);
}
return ((cfg_clausedef_t *)clauses) + idx;
/* test cfg_map_firstclause() */
ISC_RUN_TEST_IMPL(cfg_map_firstclause) {
- const char *name = NULL;
const void *clauses = NULL;
unsigned int idx;
+ const cfg_clausedef_t *clause = NULL;
- name = cfg_map_firstclause(&cfg_type_zoneopts, &clauses, &idx);
- assert_non_null(name);
+ clause = cfg_map_firstclause(&cfg_type_zoneopts, &clauses, &idx);
+ assert_non_null(clause);
+ assert_non_null(clause->name);
assert_non_null(clauses);
assert_int_equal(idx, 0);
}
/* test cfg_map_nextclause() */
ISC_RUN_TEST_IMPL(cfg_map_nextclause) {
- const char *name = NULL;
const void *clauses = NULL;
unsigned int idx;
+ const cfg_clausedef_t *clause = NULL;
- name = cfg_map_firstclause(&cfg_type_zoneopts, &clauses, &idx);
- assert_non_null(name);
+ clause = cfg_map_firstclause(&cfg_type_zoneopts, &clauses, &idx);
+ assert_non_null(clause);
+ assert_non_null(clause->name);
assert_non_null(clauses);
assert_int_equal(idx, ISC_R_SUCCESS);
do {
- name = cfg_map_nextclause(&cfg_type_zoneopts, &clauses, &idx);
- if (name != NULL) {
+ clause = cfg_map_nextclause(&cfg_type_zoneopts, &clauses, &idx);
+ if (clause != NULL) {
assert_non_null(clauses);
} else {
assert_null(clauses);
assert_int_equal(idx, 0);
}
- } while (name != NULL);
+ } while (clause != NULL);
}
static void