core: Disable "save passphrase" checkbox without secret service.
authorMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Wed, 12 Jul 2017 16:46:36 +0000 (18:46 +0200)
committerMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Wed, 12 Jul 2017 16:46:36 +0000 (18:46 +0200)
* pinentry/password-cache.c (password_cache_lookup): New argument
FATAL_ERROR.  Set it on fatal error.
* pinentry/password-cache.h (password_cache_lookup): New argument
FATAL_ERROR in declaration.
* pinentry/pinentry.c (cmd_getpin): On fatal error, disallow
external password store.
* NEWS: Update.

Signed-off-by: Marcus Brinkmann <mb@g10code.com>
GnuPG-bug-id: 2023

NEWS
pinentry/password-cache.c
pinentry/password-cache.h
pinentry/pinentry.c

diff --git a/NEWS b/NEWS
index 107a65d..5534d4d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,12 @@ Noteworthy changes in version 1.0.1 (unreleased)
 
  * A FLTK1.3-based pinentry has been contributed.
 
+ * New option --ttyalert for pinentry-curses to alert the user.
+
+ * Don't show "save passphrase" checkbox if secret service is
+   unavailable.
+
+
 Noteworthy changes in version 1.0.0 (2016-11-22)
 ------------------------------------------------
 
index 903c013..6778386 100644 (file)
@@ -96,7 +96,7 @@ password_cache_save (const char *keygrip, const char *password)
 }
 
 char *
-password_cache_lookup (const char *keygrip)
+password_cache_lookup (const char *keygrip, int *fatal_error)
 {
 #ifdef HAVE_LIBSECRET
   GError *error = NULL;
@@ -112,6 +112,9 @@ password_cache_lookup (const char *keygrip)
 
   if (error != NULL)
     {
+      if (fatal_error)
+       *fatal_error = 1;
+
       fprintf (stderr, "Failed to lookup password for key %s with secret service: %s\n",
             keygrip, error->message);
       g_error_free (error);
index 77e82e1..34fd00b 100644 (file)
@@ -22,7 +22,7 @@
 
 void password_cache_save (const char *key_grip, const char *password);
 
-char *password_cache_lookup (const char *key_grip);
+char *password_cache_lookup (const char *key_grip, int *fatal_error);
 
 int password_cache_clear (const char *keygrip);
 
index ed8fa6d..5f7912a 100644 (file)
@@ -1438,10 +1438,14 @@ cmd_getpin (assuan_context_t ctx, char *line)
       && ! pinentry.error)
     {
       char *password;
+      int give_up_on_password_store = 0;
 
       pinentry.tried_password_cache = 1;
 
-      password = password_cache_lookup (pinentry.keyinfo);
+      password = password_cache_lookup (pinentry.keyinfo, &give_up_on_password_store);
+      if (give_up_on_password_store)
+       pinentry.allow_external_password_cache = 0;
+
       if (password)
        /* There is a cached password.  Try it.  */
        {