chiark / gitweb /
config: Reject rather than silently ignoring wrong closure values
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 13 Feb 2020 17:02:57 +0000 (17:02 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Feb 2020 21:56:55 +0000 (21:56 +0000)
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@chiark.greenend.org.uk>
conffile.c
secnet.h

index e6cf48fa558604068f11558d4c5c5bfc2687ef96..e3a74aab90fd481b73b0b8455db5eb17603054be 100644 (file)
@@ -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;
index ffe8360053d20fa9774e11eb03575b4f570ec24a..3f5a197591c5cdfac37ba7ad710103586b5e04a9 100644 (file)
--- 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);