From 8c324896acdd5e38207cce993afb8657aae52a8e Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 4 Dec 2019 13:57:09 +0000 Subject: [PATCH] privcache: Reorganise private key loading Now that we only call one sigscheme's entry point, we should restructure this so it doesn't look like we call scheme->loadpriv in a loop. No functional change. Signed-off-by: Ian Jackson --- privcache.c | 49 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/privcache.c b/privcache.c index b8dc2ad..790281d 100644 --- a/privcache.c +++ b/privcache.c @@ -73,37 +73,36 @@ static struct sigprivkey_if *uncached_get(struct privcache *st, fclose(f); f=0; struct sigprivkey_if *sigpriv=0; - for (const struct sigscheme_info *scheme=sigschemes; + const struct sigscheme_info *scheme; + for (scheme=sigschemes; scheme->name; - scheme++) { - if (scheme->algid != id->b[GRPIDSZ]) - continue; - - st->databuf.start=st->databuf.base; - st->databuf.size=got; - struct cloc loc = { .file=st->path.buffer, .line=0 }; - ok=scheme->loadpriv(scheme, &st->databuf, &sigpriv, log, loc); - if (ok) { - if (sigpriv->sethash) { - if (!st->defhash) { - slilog(log,M_ERR, + scheme++) + if (scheme->algid == id->b[GRPIDSZ]) + goto found; + + slilog(log,M_ERR,"private key file %s not loaded (unknown algid)", + st->path.buffer); + goto out; + + found: + st->databuf.start=st->databuf.base; + st->databuf.size=got; + struct cloc loc = { .file=st->path.buffer, .line=0 }; + ok=scheme->loadpriv(scheme, &st->databuf, &sigpriv, log, loc); + if (!ok) goto out; /* loadpriv will have logged */ + + if (sigpriv->sethash) { + if (!st->defhash) { + slilog(log,M_ERR, "private key %s requires `hash' config key for privcache to load", - st->path.buffer); - sigpriv->dispose(sigpriv->st); - sigpriv=0; - goto out; - } - sigpriv->sethash(sigpriv->st,st->defhash); - } + st->path.buffer); + sigpriv->dispose(sigpriv->st); + sigpriv=0; goto out; } - /* loadpriv will have logged */ - goto out; + sigpriv->sethash(sigpriv->st,st->defhash); } - slilog(log,M_ERR,"private key file %s not loaded (unknown algid)", - st->path.buffer); - out: if (f) fclose(f); return ok ? sigpriv : 0; -- 2.30.2