chiark / gitweb /
rsa: rsa_loadpub_core: Make it take a load_ctx and use load_err
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Dec 2019 11:33:45 +0000 (11:33 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Feb 2020 21:56:50 +0000 (21:56 +0000)
Error handling goes via verror.

Now rsa_loadpub_core is ready to provide the non-fatal rsa1_loadpub
interface.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
rsa.c

diff --git a/rsa.c b/rsa.c
index c2e8e1b8932a9c6ff8651940104dd4391459e4ac..7d5024922c4829e9dd94361fd4d6b0ec81a53ad5 100644 (file)
--- a/rsa.c
+++ b/rsa.c
@@ -328,11 +328,10 @@ static void rsapub_dispose(void *sst) {
 #define RSAPUB_LOADCORE_DEFBN(ix,en,what) \
     const char *en##s, struct cloc en##_loc,
 
-#define LDPUBFATAL(enloc,...) \
-    cfgfatal(enloc, "rsa-public", __VA_ARGS__)
+#define LDPUBFATAL(lc,...) ({load_err(l,&lc,0,0,__VA_ARGS__); goto error_out;})
 
 static struct rsapub *rsa_loadpub_core(RSAPUB_BNS(RSAPUB_LOADCORE_DEFBN)
-                                      struct cloc overall_loc)
+                                      struct load_ctx *l)
 {
     struct rsapub *st;
 
@@ -348,7 +347,7 @@ static struct rsapub *rsa_loadpub_core(RSAPUB_BNS(RSAPUB_LOADCORE_DEFBN)
     st->ops.check=rsa_sig_check;
     st->ops.hash=0;
     st->ops.dispose=rsapub_dispose;
-    st->loc=overall_loc;
+    st->loc=l->loc;
     RSAPUB_BNS(RSAPUB_INIT_ST_BN)
 
 #define RSAPUB_LOADCORE_GETBN(ix,en,what)                              \
@@ -372,6 +371,11 @@ static struct rsapub *rsa_loadpub_core(RSAPUB_BNS(RSAPUB_LOADCORE_DEFBN)
 static list_t *rsapub_apply(closure_t *self, struct cloc loc, dict_t *context,
                            list_t *args)
 {
+    struct load_ctx l[1];
+    l->verror=verror_cfgfatal;
+    l->postreadcheck=0;
+    l->what="rsa-public";
+    l->loc=loc;
 
 #define RSAPUB_APPLY_GETBN(ix,en,what)                         \
     item_t *en##i;                                             \
@@ -389,7 +393,7 @@ static list_t *rsapub_apply(closure_t *self, struct cloc loc, dict_t *context,
     RSAPUB_BNS(RSAPUB_APPLY_GETBN)
 
     struct rsapub *st=rsa_loadpub_core(RSAPUB_BNS(RSAPUB_LOADCORE_PASSBN)
-                                      loc);
+                                      l);
 
     return new_closure(&st->cl);
 }