[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