From 5b7a80b1ab91d2f199065e5dd14e85f42918975d Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 7 Aug 2015 15:53:56 +0200 Subject: [PATCH] gpg: Allow gpgv to work with a trustedkeys.kbx file. * g10/keydb.h (KEYDB_RESOURCE_FLAG_GPGVDEF): New. * g10/keydb.c (keydb_add_resource): Take care of new flag. * g10/gpgv.c (main): Use new flag. -- GnuPG-bug-id: 2025 Signed-off-by: Werner Koch --- doc/gpgv.texi | 3 ++- g10/gpgv.c | 5 +++-- g10/keydb.c | 18 ++++++++++++++++++ g10/keydb.h | 1 + 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/doc/gpgv.texi b/doc/gpgv.texi index 8d7164ae0..6bcbc0add 100644 --- a/doc/gpgv.texi +++ b/doc/gpgv.texi @@ -67,7 +67,8 @@ no configuration files and only a few options are implemented. That does also mean that it does not check for expired or revoked keys. -By default a keyring named @file{trustedkeys.gpg} is used. This +By default a keyring named @file{trustedkeys.kbx} is used; if that +does not exist a keyring named @file{trustedkeys.gpg} is used. The default keyring is assumed to be in the home directory of GnuPG, either the default home directory or the one set by an option or an environment variable. The option @code{--keyring} may be used to diff --git a/g10/gpgv.c b/g10/gpgv.c index 479bb9599..412f4bee3 100644 --- a/g10/gpgv.c +++ b/g10/gpgv.c @@ -205,8 +205,9 @@ main( int argc, char **argv ) /* Note: We open all keyrings in read-only mode. */ if (!nrings) /* No keyring given: use default one. */ - keydb_add_resource ("trustedkeys" EXTSEP_S GPGEXT_GPG, - KEYDB_RESOURCE_FLAG_READONLY); + keydb_add_resource ("trustedkeys" EXTSEP_S "kbx", + (KEYDB_RESOURCE_FLAG_READONLY + |KEYDB_RESOURCE_FLAG_GPGVDEF)); for (sl = nrings; sl; sl = sl->next) keydb_add_resource (sl->d, KEYDB_RESOURCE_FLAG_READONLY); diff --git a/g10/keydb.c b/g10/keydb.c index 3dc9ec72e..b31c6a62c 100644 --- a/g10/keydb.c +++ b/g10/keydb.c @@ -434,6 +434,7 @@ keydb_add_resource (const char *url, unsigned int flags) int create; int read_only = !!(flags&KEYDB_RESOURCE_FLAG_READONLY); int is_default = !!(flags&KEYDB_RESOURCE_FLAG_DEFAULT); + int is_gpgvdef = !!(flags&KEYDB_RESOURCE_FLAG_GPGVDEF); int rc = 0; KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE; void *token; @@ -516,6 +517,23 @@ keydb_add_resource (const char *url, unsigned int flags) strcpy (filename+filenamelen-4, ".gpg"); } } + else if (!pass && is_gpgvdef + && filenamelen > 4 && !strcmp (filename+filenamelen-4, ".kbx")) + { + /* Not found but gpgv's default "trustedkeys.kbx" file has + been requested. We did not found it so now check whether + a "trustedkeys.gpg" file exists and use that instead. */ + KeydbResourceType rttmp; + + strcpy (filename+filenamelen-4, ".gpg"); + rttmp = rt_from_file (filename, &found, &openpgp_flag); + if (found + && ((rttmp == KEYDB_RESOURCE_TYPE_KEYBOX && openpgp_flag) + || (rttmp == KEYDB_RESOURCE_TYPE_KEYRING))) + rt = rttmp; + else /* Restore filename */ + strcpy (filename+filenamelen-4, ".kbx"); + } else if (!pass && is_default && create && filenamelen > 4 && !strcmp (filename+filenamelen-4, ".gpg")) diff --git a/g10/keydb.h b/g10/keydb.h index 1aa4e0e2f..b64438c5d 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -130,6 +130,7 @@ union pref_hint #define KEYDB_RESOURCE_FLAG_PRIMARY 2 /* The primary resource. */ #define KEYDB_RESOURCE_FLAG_DEFAULT 4 /* The default one. */ #define KEYDB_RESOURCE_FLAG_READONLY 8 /* Open in read only mode. */ +#define KEYDB_RESOURCE_FLAG_GPGVDEF 16 /* Default file for gpgv. */ gpg_error_t keydb_add_resource (const char *url, unsigned int flags); void keydb_dump_stats (void);