gpg: Allow gpgv to work with a trustedkeys.kbx file.
authorWerner Koch <wk@gnupg.org>
Fri, 7 Aug 2015 13:53:56 +0000 (15:53 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 7 Aug 2015 13:53:56 +0000 (15:53 +0200)
* 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 <wk@gnupg.org>
doc/gpgv.texi
g10/gpgv.c
g10/keydb.c
g10/keydb.h

index 8d7164a..6bcbc0a 100644 (file)
@@ -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
index 479bb95..412f4be 100644 (file)
@@ -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);
 
index 3dc9ec7..b31c6a6 100644 (file)
@@ -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"))
index 1aa4e0e..b64438c 100644 (file)
@@ -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);