diff --git a/config-verify.c b/config-verify.c index 862fc33..7e87d42 100644 --- a/config-verify.c +++ b/config-verify.c @@ -50,6 +50,26 @@ conf_verify_int(keychain_t *chain, const struct yml_node *node) return false; } +bool +conf_verify_list(keychain_t *chain, const struct yml_node *node, + bool (*verify)(keychain_t *chain, const struct yml_node *node)) +{ + if (!yml_is_list(node)) { + LOG_ERR("%s: value is not a list", conf_err_prefix(chain, node)); + return false; + } + + for (struct yml_list_iter iter = yml_list_iter(node); + iter.node != NULL; + yml_list_next(&iter)) + { + if (!verify(chain, iter.node)) + return false; + } + + return true; +} + bool conf_verify_enum(keychain_t *chain, const struct yml_node *node, const char *values[], size_t count) diff --git a/config-verify.h b/config-verify.h index 24d0256..44a6a66 100644 --- a/config-verify.h +++ b/config-verify.h @@ -35,6 +35,8 @@ bool conf_verify_int(keychain_t *chain, const struct yml_node *node); bool conf_verify_enum(keychain_t *chain, const struct yml_node *node, const char *values[], size_t count); +bool conf_verify_list(keychain_t *chain, const struct yml_node *node, + bool (*verify)(keychain_t *chain, const struct yml_node *node)); bool conf_verify_dict(keychain_t *chain, const struct yml_node *node, const struct attr_info info[]); /* NULL-terminated list */