[SECNET PATCH 4/6] config: Reject rather than silently ignoring wrong closure values
Ian Jackson
ijackson at chiark.greenend.org.uk
Thu Feb 13 17:52:10 GMT 2020
find_cl_if(...,fail_if_invalid=False,,..) is only called in places
where a particular closure, or nothing, is expected.
It is really not a good idea for this function to silently ignore
config keys of the wrongn type. It should behave more like
dict_read_number and dict_read_bool.
There are possible compatibility implications, but they can be solved
by deleting the wrong (currently-ignored) information from the config
file(s).
Signed-off-by: Ian Jackson <ijackson at chiark.greenend.org.uk>
---
conffile.c | 6 ++----
secnet.h | 2 +-
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/conffile.c b/conffile.c
index e6cf48fa5..e3a74aab9 100644
--- a/conffile.c
+++ b/conffile.c
@@ -655,20 +655,18 @@ void add_closure(dict_t *dict, cstring_t name, apply_fn apply)
}
void *find_cl_if(dict_t *dict, cstring_t name, uint32_t type,
- bool_t fail_if_invalid, cstring_t desc, struct cloc loc)
+ bool_t required, cstring_t desc, struct cloc loc)
{
item_t *i;
closure_t *cl;
- i = dict_find_item(dict,name,fail_if_invalid,desc,loc);
+ i = dict_find_item(dict,name,required,desc,loc);
if (!i) return NULL;
if (i->type!=t_closure) {
- if (!fail_if_invalid) return NULL;
cfgfatal(loc,desc,"\"%s\" must be a closure\n",name);
}
cl=i->data.closure;
if (cl->type!=type) {
- if (!fail_if_invalid) return NULL;
cfgfatal(loc,desc,"\"%s\" is the wrong type of closure\n",name);
}
return cl->interface;
diff --git a/secnet.h b/secnet.h
index ffe836005..3f5a19759 100644
--- a/secnet.h
+++ b/secnet.h
@@ -198,7 +198,7 @@ extern item_t *list_elem(list_t *l, int32_t index);
extern list_t *new_closure(closure_t *cl);
extern void add_closure(dict_t *dict, cstring_t name, apply_fn apply);
extern void *find_cl_if(dict_t *dict, cstring_t name, uint32_t type,
- bool_t fail_if_invalid, cstring_t desc,
+ bool_t required, cstring_t desc,
struct cloc loc);
extern item_t *dict_find_item(dict_t *dict, cstring_t key, bool_t required,
cstring_t desc, struct cloc loc);
--
2.11.0
More information about the sgo-software-discuss
mailing list