Skip to content

Commit 0abd128

Browse files
committed
opendkim-testkey: Support sign algorithm field in KeyTable
1 parent 2fb3b18 commit 0abd128

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

opendkim/opendkim-testkey.c

+32-2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include "config.h"
5353
#include "opendkim-config.h"
5454
#include "opendkim-crypto.h"
55+
#include "opendkim-const.h"
5556

5657
/* macros */
5758
#define CMDLINEOPTS "d:k:s:vx:"
@@ -236,6 +237,8 @@ main(int argc, char **argv)
236237
char domain[BUFRSZ];
237238
char selector[BUFRSZ];
238239
char keypath[MAXBUFRSZ];
240+
char signalgstr[BUFRSZ];
241+
dkim_alg_t signalg;
239242

240243
progname = (p = strrchr(argv[0], '/')) == NULL ? argv[0] : p + 1;
241244

@@ -464,7 +467,7 @@ main(int argc, char **argv)
464467
size_t keylen;
465468
DKIMF_DB db;
466469
char keyname[BUFRSZ + 1];
467-
struct dkimf_db_data dbd[3];
470+
struct dkimf_db_data dbd[4];
468471

469472
memset(dbd, '\0', sizeof dbd);
470473

@@ -491,18 +494,22 @@ main(int argc, char **argv)
491494
memset(domain, '\0', sizeof domain);
492495
memset(selector, '\0', sizeof selector);
493496
memset(keypath, '\0', sizeof keypath);
497+
memset(signalgstr, '\0', sizeof signalgstr);
494498

495499
dbd[0].dbdata_buffer = domain;
496500
dbd[0].dbdata_buflen = sizeof domain;
497501
dbd[1].dbdata_buffer = selector;
498502
dbd[1].dbdata_buflen = sizeof selector;
499503
dbd[2].dbdata_buffer = keypath;
500504
dbd[2].dbdata_buflen = sizeof keypath;
505+
dbd[3].dbdata_buffer = signalgstr;
506+
dbd[3].dbdata_buflen = sizeof signalgstr;
507+
dbd[3].dbdata_flags = DKIMF_DB_DATA_OPTIONAL;
501508

502509
keylen = sizeof keyname;
503510

504511
status = dkimf_db_walk(db, c == 0, keyname, &keylen,
505-
dbd, 3);
512+
dbd, 4);
506513
if (status == -1)
507514
{
508515
fprintf(stderr,
@@ -524,6 +531,26 @@ main(int argc, char **argv)
524531
progname, c, keyname);
525532
}
526533

534+
if (signalgstr[0] != '\0')
535+
{
536+
signalg = dkimf_lookup_strtoint(signalgstr, dkimf_sign);
537+
if (signalg == -1)
538+
{
539+
fprintf(stderr,
540+
"%s: unknown sign algorithm "
541+
"'%s' for key '%s'\n",
542+
progname, signalgstr, keyname);
543+
return 1;
544+
}
545+
546+
if (verbose > 1)
547+
{
548+
fprintf(stderr,
549+
"%s: key '%s': sign algorithm is '%s'\n",
550+
progname, keyname, signalgstr);
551+
}
552+
}
553+
527554
if (keypath[0] == '/' ||
528555
strncmp(keypath, "./", 2) == 0 ||
529556
strncmp(keypath, "../", 3) == 0)
@@ -572,6 +599,9 @@ main(int argc, char **argv)
572599
progname, keyname);
573600
}
574601

602+
/* To do: check consistency of the key and algorithm.
603+
It is needed to extend dkim_test_key() for it */
604+
575605
dnssec = DKIM_DNSSEC_UNKNOWN;
576606

577607
status = dkim_test_key(lib, selector, domain,

0 commit comments

Comments
 (0)