f = fopen(st->path.buffer,"rb");
if (!f) {
if (errno == ENOENT) {
- slilog(log,M_DEBUG,"private key %s not found\n",
- st->path.write_here);
+ slilog(log,M_DEBUG,"private key %s not found",
+ st->path.buffer);
} else {
- slilog(log,M_ERR,"failed to open private key file %s\n",
+ slilog(log,M_ERR,"failed to open private key file %s",
st->path.buffer);
}
goto out;
buffer_init(&st->databuf,0);
ssize_t got=fread(st->databuf.base,1,st->databuf.alloclen,f);
if (ferror(f)) {
- slilog(log,M_ERR,"failed to read private-key file %s\n",
+ slilog(log,M_ERR,"failed to read private-key file %s",
st->path.buffer);
goto out;
}
if (!feof(f)) {
- slilog(log,M_ERR,"private key file %s longer than max %d\n",
+ slilog(log,M_ERR,"private key file %s longer than max %d",
st->path.buffer, (int)st->databuf.alloclen);
goto out;
}
for (const struct sigscheme_info *scheme=sigschemes;
scheme->name;
scheme++) {
+ if (scheme->algid != id->b[GRPIDSZ])
+ continue;
+
st->databuf.start=st->databuf.base;
st->databuf.size=got;
- ok=scheme->loadpriv(scheme, &st->databuf, &sigpriv, log);
+ 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) {
}
goto out;
}
+ /* loadpriv will have logged */
+ goto out;
}
- slilog(log,M_ERR,"private key file %s not loaded (not recognised?)\n",
+ slilog(log,M_ERR,"private key file %s not loaded (unknown algid)",
st->path.buffer);
out:
buffer_new(&st->databuf,buflen+1);
const char *path=dict_read_string(dict,"privkeys",True,"privcache",loc);
- int l=strlen(path);
- NEW_ARY(st->path.buffer,l+KEYIDSZ*2+1);
- strcpy(st->path.buffer,path);
- st->path.write_here=st->path.buffer+l;
+ pathprefix_template_init(&st->path,path,KEYIDSZ*2);
st->defhash=find_cl_if(dict,"hash",CL_HASH,False,"site",loc);