wks: Let the client only export the requested UID.
authorWerner Koch <wk@gnupg.org>
Sun, 3 Jul 2016 08:27:39 +0000 (10:27 +0200)
committerWerner Koch <wk@gnupg.org>
Sun, 3 Jul 2016 08:27:39 +0000 (10:27 +0200)
* tools/gpg-wks-client.c (get_key): Export only the requested uid.

Signed-off-by: Werner Koch <wk@gnupg.org>
doc/HACKING
tools/gpg-wks-client.c

index d2168d6..94e65d8 100644 (file)
@@ -46,6 +46,8 @@ are
  - scd     :: The scdaemon component
  - ccid    :: The CCID driver in scdaemon
  - dirmngr :: The dirmngr component
+ - wks     :: The web key service tools
+ - tools   :: Other code in tools
  - w32     :: Windows related code
  - po      :: Translations
  - build   :: Changes to the build system
index 25ee43f..312f58b 100644 (file)
@@ -291,11 +291,10 @@ get_key (estream_t *r_key, const char *fingerprint, const char *addrspec)
 {
   gpg_error_t err;
   ccparray_t ccp;
-  const char **argv;
-  estream_t key;
+  const char **argv = NULL;
+  estream_t key = NULL;
   struct get_key_status_parm_s parm;
-
-  (void)addrspec;  /* FIXME - need to use it.  */
+  char *filterexp = NULL;
 
   memset (&parm, 0, sizeof parm);
 
@@ -306,7 +305,15 @@ get_key (estream_t *r_key, const char *fingerprint, const char *addrspec)
     {
       err = gpg_error_from_syserror ();
       log_error ("error allocating memory buffer: %s\n", gpg_strerror (err));
-      return err;
+      goto leave;
+    }
+
+  filterexp = es_bsprintf ("keep-uid=mbox = %s", addrspec);
+  if (!filterexp)
+    {
+      err = gpg_error_from_syserror ();
+      log_error ("error allocating memory buffer: %s\n", gpg_strerror (err));
+      goto leave;
     }
 
   ccparray_init (&ccp, 0);
@@ -321,6 +328,8 @@ get_key (estream_t *r_key, const char *fingerprint, const char *addrspec)
   ccparray_put (&ccp, "--always-trust");
   ccparray_put (&ccp, "--armor");
   ccparray_put (&ccp, "--export-options=export-minimal");
+  ccparray_put (&ccp, "--export-filter");
+  ccparray_put (&ccp, filterexp);
   ccparray_put (&ccp, "--export");
   ccparray_put (&ccp, "--");
   ccparray_put (&ccp, fingerprint);
@@ -353,6 +362,7 @@ get_key (estream_t *r_key, const char *fingerprint, const char *addrspec)
  leave:
   es_fclose (key);
   xfree (argv);
+  xfree (filterexp);
   return err;
 }
 
@@ -388,7 +398,6 @@ command_send (const char *fingerprint, char *userid)
   err = get_key (&key, fingerprint, addrspec);
   if (err)
     goto leave;
-  log_debug ("fixme: Check that the key has the requested user-id.\n");
 
   /* Get the submission address.  */
   err = wkd_get_submission_address (addrspec, &submission_to);