g10: Write first keybox record in binary mode
[gnupg.git] / g10 / skclist.c
index 4ec5df0..4cd7f33 100644 (file)
@@ -23,7 +23,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 
 #include "gpg.h"
 #include "options.h"
@@ -32,7 +31,6 @@
 #include "keydb.h"
 #include "util.h"
 #include "i18n.h"
-#include "cipher.h"
 
 
 /* Return true if Libgcrypt's RNG is in faked mode.  */
@@ -51,8 +49,7 @@ release_sk_list (SK_LIST sk_list)
   for (; sk_list; sk_list = sk_rover)
     {
       sk_rover = sk_list->next;
-      if (sk_list->pk)
-        free_public_key (sk_list->pk);
+      free_public_key (sk_list->pk);
       xfree (sk_list);
     }
 }
@@ -116,18 +113,26 @@ is_duplicated_entry (strlist_t list, strlist_t item)
 
 
 gpg_error_t
-build_sk_list (strlist_t locusr, SK_LIST *ret_sk_list, unsigned int use)
+build_sk_list (ctrl_t ctrl,
+               strlist_t locusr, SK_LIST *ret_sk_list, unsigned int use)
 {
   gpg_error_t err;
   SK_LIST sk_list = NULL;
 
+  /* XXX: Change this function to use get_pubkeys instead of
+     getkey_byname to detect ambiguous key specifications and warn
+     about duplicate keyblocks.  For ambiguous key specifications on
+     the command line or provided interactively, prompt the user to
+     select the best key.  If a key specification is ambiguous and we
+     are in batch mode, die.  */
+
   if (!locusr) /* No user ids given - use the default key.  */
     {
       PKT_public_key *pk;
 
       pk = xmalloc_clear (sizeof *pk);
       pk->req_usage = use;
-      if ((err = getkey_byname (NULL, pk, NULL, 1, NULL)))
+      if ((err = getkey_byname (ctrl, NULL, pk, NULL, 1, NULL)))
        {
          free_public_key (pk);
          pk = NULL;
@@ -144,7 +149,7 @@ build_sk_list (strlist_t locusr, SK_LIST *ret_sk_list, unsigned int use)
       else
        {
          SK_LIST r;
-          
+
          if (random_is_faked () && !is_insecure (pk))
            {
              log_info (_("key is not flagged as insecure - "
@@ -184,7 +189,7 @@ build_sk_list (strlist_t locusr, SK_LIST *ret_sk_list, unsigned int use)
            }
          pk = xmalloc_clear (sizeof *pk);
          pk->req_usage = use;
-          if ((err = getkey_byname (NULL, pk, locusr->d, 1, NULL)))
+          if ((err = getkey_byname (ctrl, NULL, pk, locusr->d, 1, NULL)))
            {
              free_public_key (pk);
              pk = NULL;
@@ -212,7 +217,7 @@ build_sk_list (strlist_t locusr, SK_LIST *ret_sk_list, unsigned int use)
          else
            {
              SK_LIST r;
-              
+
              if (pk->version == 4 && (use & PUBKEY_USAGE_SIG)
                  && pk->pubkey_algo == PUBKEY_ALGO_ELGAMAL_E)
                {
@@ -256,7 +261,7 @@ build_sk_list (strlist_t locusr, SK_LIST *ret_sk_list, unsigned int use)
       write_status_text (STATUS_NO_SGNR, "0");
       err = gpg_error (GPG_ERR_NO_USER_ID);
     }
-  
+
   if (err)
     release_sk_list (sk_list);
   else