[git] GnuPG - branch, master, updated. gnupg-2.1.7-50-g51b9b8f

by Werner Koch cvs at cvs.gnupg.org
Tue Aug 25 15:31:05 CEST 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU Privacy Guard".

The branch, master has been updated
       via  51b9b8fba4ee326013c2cc911c70cde4c5f81fc7 (commit)
       via  9cdff09743c473a12359bfdb914578ede0e4e3e2 (commit)
      from  348a6ebb63523305ce9f47d0f3e8a9086c338fed (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 51b9b8fba4ee326013c2cc911c70cde4c5f81fc7
Author: Werner Koch <wk at gnupg.org>
Date:   Tue Aug 25 15:06:40 2015 +0200

    gpg: Emit ERROR status for key signing failures.
    
    * g10/keyedit.c (sign_uids): Write an ERROR status for a signing
    failure.
    (menu_adduid, menu_addrevoker, menu_revsig): Ditto.
    (menu_revuid, menu_revkey, menu_revsubkey): Ditto.
    --
    
    This change helps GPA to show better error messages.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/g10/keyedit.c b/g10/keyedit.c
index d8dba2d..0fc8c36 100644
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -1041,6 +1041,7 @@ sign_uids (ctrl_t ctrl, estream_t fp,
                                          NULL);
 	      if (rc)
 		{
+                  write_status_error ("keysig", rc);
 		  log_error (_("signing failed: %s\n"), gpg_strerror (rc));
 		  goto leave;
 		}
@@ -3497,6 +3498,7 @@ menu_adduid (kbnode_t pub_keyblock, int photo, const char *photo_name,
                             keygen_add_std_prefs, pk, NULL);
   if (err)
     {
+      write_status_error ("keysig", err);
       log_error ("signing failed: %s\n", gpg_strerror (err));
       free_user_id (uid);
       return 0;
@@ -3881,6 +3883,7 @@ menu_addrevoker (ctrl_t ctrl, kbnode_t pub_keyblock, int sensitive)
 			   keygen_add_revkey, &revkey, NULL);
   if (rc)
     {
+      write_status_error ("keysig", rc);
       log_error ("signing failed: %s\n", gpg_strerror (rc));
       goto fail;
     }
@@ -5172,6 +5175,7 @@ reloop:			/* (must use this, because we are modifing the list) */
       free_public_key (signerkey);
       if (rc)
 	{
+          write_status_error ("keysig", rc);
 	  log_error (_("signing failed: %s\n"), gpg_strerror (rc));
 	  release_revocation_reason_info (reason);
 	  return changed;
@@ -5263,6 +5267,7 @@ menu_revuid (KBNODE pub_keyblock)
 				     sign_mk_attrib, &attrib, NULL);
 	    if (rc)
 	      {
+                write_status_error ("keysig", rc);
 		log_error (_("signing failed: %s\n"), gpg_strerror (rc));
 		goto leave;
 	      }
@@ -5327,6 +5332,7 @@ menu_revkey (KBNODE pub_keyblock)
 			   revocation_reason_build_cb, reason, NULL);
   if (rc)
     {
+      write_status_error ("keysig", rc);
       log_error (_("signing failed: %s\n"), gpg_strerror (rc));
       goto scram;
     }
@@ -5388,6 +5394,7 @@ menu_revsubkey (KBNODE pub_keyblock)
                                    NULL);
 	  if (rc)
 	    {
+              write_status_error ("keysig", rc);
 	      log_error (_("signing failed: %s\n"), gpg_strerror (rc));
 	      release_revocation_reason_info (reason);
 	      return changed;

commit 9cdff09743c473a12359bfdb914578ede0e4e3e2
Author: Werner Koch <wk at gnupg.org>
Date:   Tue Aug 25 09:03:31 2015 +0200

    gpg: Print a new FAILURE status after most commands.
    
    * common/status.h (STATUS_FAILURE): New.
    * g10/cpr.c (write_status_failure): New.
    * g10/gpg.c (main): Call write_status_failure for all commands which
    print an error message here.
    * g10/call-agent.c (start_agent): Print an STATUS_ERROR if we can't
    set the pinentry mode.
    --
    
    This status line can be used similar to the error code returned by
    commands send over the Assuan interface in gpgsm.  We don't emit them
    in gpgsm because there we already have that Assuan interface to return
    proper error code.  This change helps GPGME to return better error
    codes.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/common/status.h b/common/status.h
index 3c78eda..f1af587 100644
--- a/common/status.h
+++ b/common/status.h
@@ -126,9 +126,10 @@ enum
 
     STATUS_ERROR,
     STATUS_SUCCESS,
+    STATUS_FAILURE,
 
-    STATUS_INQUIRE_MAXLEN,
-};
+    STATUS_INQUIRE_MAXLEN
+  };
 
 
 const char *get_status_string (int code);
diff --git a/doc/DETAILS b/doc/DETAILS
index eb889c9..811b105 100644
--- a/doc/DETAILS
+++ b/doc/DETAILS
@@ -823,9 +823,17 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB:
     numerical error code and an underscore; e.g.: "151011327_EOF".
 
 *** SUCCESS [<location>]
-    Postive confirimation that an operation succeeded.  <location> is
-    optional but if given should not contain spaces.  Used only with a
-    few commands.
+    Postive confirmation that an operation succeeded.  It is used
+    similar to ISO-C's EXIT_SUCCESS.  <location> is optional but if
+    given should not contain spaces.  Used only with a few commands.
+
+*** FAILURE <location> <error_code>
+    This is the counterpart to SUCCESS and used to indicate a program
+    failure.  It is used similar to ISO-C's EXIT_FAILURE but allows to
+    convey more information, in particular an gpg-error error code.
+    That numerical error code may optionally have a suffix made of an
+    underscore and a string with an error symbol like "151011327_EOF".
+    A dash may be used instead of <location>.
 
 *** BADARMOR
     The ASCII armor is corrupted.  No arguments yet.
diff --git a/g10/call-agent.c b/g10/call-agent.c
index 326eb82..6345784 100644
--- a/g10/call-agent.c
+++ b/g10/call-agent.c
@@ -318,9 +318,12 @@ start_agent (ctrl_t ctrl, int for_card)
                                NULL, NULL, NULL, NULL, NULL, NULL);
               xfree (tmp);
               if (rc)
-                log_error ("setting pinentry mode '%s' failed: %s\n",
-                           str_pinentry_mode (opt.pinentry_mode),
-                           gpg_strerror (rc));
+                {
+                  log_error ("setting pinentry mode '%s' failed: %s\n",
+                             str_pinentry_mode (opt.pinentry_mode),
+                             gpg_strerror (rc));
+                  write_status_error ("set_pinentry_mode", rc);
+                }
             }
 
           check_hijacking (agent_ctx);
diff --git a/g10/cpr.c b/g10/cpr.c
index 9fc9e09..9d8fec9 100644
--- a/g10/cpr.c
+++ b/g10/cpr.c
@@ -183,7 +183,7 @@ write_status_text (int no, const char *text)
   write_status_strings (no, text, NULL);
 }
 
-/* Wrte an ERROR status line using a full gpg-error error value.  */
+/* Write an ERROR status line using a full gpg-error error value.  */
 void
 write_status_error (const char *where, gpg_error_t err)
 {
@@ -211,6 +211,20 @@ write_status_errcode (const char *where, int errcode)
 }
 
 
+/* Write a FAILURE status line.  */
+void
+write_status_failure (const char *where, gpg_error_t err)
+{
+  if (!statusfp || !status_currently_allowed (STATUS_FAILURE))
+    return;  /* Not enabled or allowed. */
+
+  es_fprintf (statusfp, "[GNUPG:] %s %s %u\n",
+              get_status_string (STATUS_FAILURE), where, err);
+  if (es_fflush (statusfp) && opt.exit_on_status_write_error)
+    g10_exit (0);
+}
+
+
 /*
  * Write a status line with a buffer using %XX escapes.  If WRAP is >
  * 0 wrap the line after this length.  If STRING is not NULL it will
diff --git a/g10/gpg.c b/g10/gpg.c
index 0b3e924..e6fb42e 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -3661,15 +3661,21 @@ main (int argc, char **argv)
 	if( argc > 1 )
 	    wrong_args(_("--store [filename]"));
 	if( (rc = encrypt_store(fname)) )
+          {
+            write_status_failure ("store", rc);
 	    log_error ("storing '%s' failed: %s\n",
                        print_fname_stdin(fname),gpg_strerror (rc) );
+          }
 	break;
       case aSym: /* encrypt the given file only with the symmetric cipher */
 	if( argc > 1 )
 	    wrong_args(_("--symmetric [filename]"));
 	if( (rc = encrypt_symmetric(fname)) )
+          {
+            write_status_failure ("symencrypt", rc);
             log_error (_("symmetric encryption of '%s' failed: %s\n"),
                         print_fname_stdin(fname),gpg_strerror (rc) );
+          }
 	break;
 
       case aEncr: /* encrypt the given file */
@@ -3680,8 +3686,11 @@ main (int argc, char **argv)
 	    if( argc > 1 )
 	      wrong_args(_("--encrypt [filename]"));
 	    if( (rc = encrypt_crypt (ctrl, -1, fname, remusr, 0, NULL, -1)) )
-	      log_error("%s: encryption failed: %s\n",
-			print_fname_stdin(fname), gpg_strerror (rc) );
+              {
+                write_status_failure ("encrypt", rc);
+                log_error("%s: encryption failed: %s\n",
+                          print_fname_stdin(fname), gpg_strerror (rc) );
+              }
 	  }
 	break;
 
@@ -3701,8 +3710,11 @@ main (int argc, char **argv)
 	else
 	  {
 	    if( (rc = encrypt_crypt (ctrl, -1, fname, remusr, 1, NULL, -1)) )
-	      log_error("%s: encryption failed: %s\n",
-			print_fname_stdin(fname), gpg_strerror (rc) );
+              {
+                write_status_failure ("encrypt", rc);
+                log_error ("%s: encryption failed: %s\n",
+                           print_fname_stdin(fname), gpg_strerror (rc) );
+              }
 	  }
 	break;
 
@@ -3720,8 +3732,11 @@ main (int argc, char **argv)
 		strcpy(sl->d, fname);
 	    }
 	}
-	if( (rc = sign_file (ctrl, sl, detached_sig, locusr, 0, NULL, NULL)) )
-	    log_error("signing failed: %s\n", gpg_strerror (rc) );
+	if ((rc = sign_file (ctrl, sl, detached_sig, locusr, 0, NULL, NULL)))
+          {
+            write_status_failure ("sign", rc);
+	    log_error ("signing failed: %s\n", gpg_strerror (rc) );
+          }
 	free_strlist(sl);
 	break;
 
@@ -3735,8 +3750,11 @@ main (int argc, char **argv)
 	else
 	    sl = NULL;
 	if ((rc = sign_file (ctrl, sl, detached_sig, locusr, 1, remusr, NULL)))
+          {
+            write_status_failure ("sign-encrypt", rc);
 	    log_error("%s: sign+encrypt failed: %s\n",
 		      print_fname_stdin(fname), gpg_strerror (rc) );
+          }
 	free_strlist(sl);
 	break;
 
@@ -3760,8 +3778,11 @@ main (int argc, char **argv)
 	      sl = NULL;
 	    if ((rc = sign_file (ctrl, sl, detached_sig, locusr,
                                  2, remusr, NULL)))
-	      log_error("%s: symmetric+sign+encrypt failed: %s\n",
-			print_fname_stdin(fname), gpg_strerror (rc) );
+              {
+                write_status_failure ("sign-encrypt", rc);
+                log_error("%s: symmetric+sign+encrypt failed: %s\n",
+                          print_fname_stdin(fname), gpg_strerror (rc) );
+              }
 	    free_strlist(sl);
 	  }
 	break;
@@ -3771,19 +3792,26 @@ main (int argc, char **argv)
 	    wrong_args(_("--sign --symmetric [filename]"));
 	rc = sign_symencrypt_file (fname, locusr);
         if (rc)
+          {
+            write_status_failure ("sign-symencrypt", rc);
 	    log_error("%s: sign+symmetric failed: %s\n",
                       print_fname_stdin(fname), gpg_strerror (rc) );
+          }
 	break;
 
       case aClearsign: /* make a clearsig */
 	if( argc > 1 )
 	    wrong_args(_("--clearsign [filename]"));
 	if( (rc = clearsign_file(fname, locusr, NULL)) )
+          {
+            write_status_failure ("sign", rc);
 	    log_error("%s: clearsign failed: %s\n",
                       print_fname_stdin(fname), gpg_strerror (rc) );
+          }
 	break;
 
       case aVerify:
+        rc = 0;
 	if (multifile)
 	  {
 	    if ((rc = verify_files (ctrl, argc, argv)))
@@ -3794,6 +3822,8 @@ main (int argc, char **argv)
 	    if ((rc = verify_signatures (ctrl, argc, argv)))
 	      log_error("verify signatures failed: %s\n", gpg_strerror (rc) );
 	  }
+        if (rc)
+          write_status_failure ("verify", rc);
 	break;
 
       case aDecrypt:
@@ -3804,7 +3834,10 @@ main (int argc, char **argv)
 	    if( argc > 1 )
 	      wrong_args(_("--decrypt [filename]"));
 	    if( (rc = decrypt_message (ctrl, fname) ))
-	      log_error("decrypt_message failed: %s\n", gpg_strerror (rc) );
+              {
+                write_status_failure ("decrypt", rc);
+                log_error("decrypt_message failed: %s\n", gpg_strerror (rc) );
+              }
 	  }
 	break;
 
@@ -3998,11 +4031,21 @@ main (int argc, char **argv)
 	if(rc)
 	  {
 	    if(cmd==aSendKeys)
-	      log_error(_("keyserver send failed: %s\n"),gpg_strerror (rc));
+              {
+                write_status_failure ("send-keys", rc);
+                log_error(_("keyserver send failed: %s\n"),gpg_strerror (rc));
+              }
 	    else if(cmd==aRecvKeys)
-	      log_error(_("keyserver receive failed: %s\n"),gpg_strerror (rc));
+              {
+                write_status_failure ("recv-keys", rc);
+                log_error (_("keyserver receive failed: %s\n"),
+                           gpg_strerror (rc));
+              }
 	    else
-	      log_error(_("key export failed: %s\n"),gpg_strerror (rc));
+              {
+                write_status_failure ("export", rc);
+                log_error (_("key export failed: %s\n"), gpg_strerror (rc));
+              }
 	  }
 	free_strlist(sl);
 	break;
@@ -4013,7 +4056,10 @@ main (int argc, char **argv)
 	  append_to_strlist2 (&sl, *argv, utf8_strings);
 	rc = keyserver_search (ctrl, sl);
 	if (rc)
-	  log_error (_("keyserver search failed: %s\n"), gpg_strerror (rc));
+          {
+            write_status_failure ("search-keys", rc);
+            log_error (_("keyserver search failed: %s\n"), gpg_strerror (rc));
+          }
 	free_strlist (sl);
 	break;
 
@@ -4023,7 +4069,10 @@ main (int argc, char **argv)
 	    append_to_strlist2( &sl, *argv, utf8_strings );
 	rc = keyserver_refresh (ctrl, sl);
 	if(rc)
-	  log_error(_("keyserver refresh failed: %s\n"),gpg_strerror (rc));
+          {
+            write_status_failure ("refresh-keys", rc);
+            log_error (_("keyserver refresh failed: %s\n"),gpg_strerror (rc));
+          }
 	free_strlist(sl);
 	break;
 
@@ -4033,7 +4082,10 @@ main (int argc, char **argv)
 	    append_to_strlist2( &sl, *argv, utf8_strings );
 	rc = keyserver_fetch (ctrl, sl);
 	if(rc)
-	  log_error("key fetch failed: %s\n",gpg_strerror (rc));
+          {
+            write_status_failure ("fetch-keys", rc);
+            log_error ("key fetch failed: %s\n",gpg_strerror (rc));
+          }
 	free_strlist(sl);
 	break;
 
@@ -4074,7 +4126,10 @@ main (int argc, char **argv)
 	    wrong_args("--dearmor [file]");
 	rc = dearmor_file( argc? *argv: NULL );
 	if( rc )
-	    log_error(_("dearmoring failed: %s\n"), gpg_strerror (rc));
+          {
+            write_status_failure ("dearmor", rc);
+            log_error (_("dearmoring failed: %s\n"), gpg_strerror (rc));
+          }
 	break;
 
       case aEnArmor:
@@ -4082,7 +4137,10 @@ main (int argc, char **argv)
 	    wrong_args("--enarmor [file]");
 	rc = enarmor_file( argc? *argv: NULL );
 	if( rc )
-	    log_error(_("enarmoring failed: %s\n"), gpg_strerror (rc));
+          {
+            write_status_failure ("enarmor", rc);
+	    log_error (_("enarmoring failed: %s\n"), gpg_strerror (rc));
+          }
 	break;
 
 
@@ -4274,7 +4332,7 @@ main (int argc, char **argv)
         else if (argc == 1)
             change_pin (atoi (*argv),1);
         else
-        wrong_args ("--change-pin [no]");
+            wrong_args ("--change-pin [no]");
         break;
 #endif /* ENABLE_CARD_SUPPORT*/
 
@@ -4328,7 +4386,11 @@ main (int argc, char **argv)
 	    }
 	    rc = proc_packets (ctrl, NULL, a );
 	    if( rc )
-		log_error("processing message failed: %s\n", gpg_strerror (rc));
+              {
+                write_status_failure ("-", rc);
+                log_error ("processing message failed: %s\n",
+                           gpg_strerror (rc));
+              }
 	    iobuf_close(a);
 	}
 	break;
diff --git a/g10/main.h b/g10/main.h
index 06c497d..42d5ce1 100644
--- a/g10/main.h
+++ b/g10/main.h
@@ -180,6 +180,7 @@ int  is_status_enabled ( void );
 void write_status ( int no );
 void write_status_error (const char *where, gpg_error_t err);
 void write_status_errcode (const char *where, int errcode);
+void write_status_failure (const char *where, gpg_error_t err);
 void write_status_text ( int no, const char *text );
 void write_status_strings (int no, const char *text,
                            ...) GPGRT_ATTR_SENTINEL(0);

-----------------------------------------------------------------------

Summary of changes:
 common/status.h  |   5 +--
 doc/DETAILS      |  14 ++++++--
 g10/call-agent.c |   9 +++--
 g10/cpr.c        |  16 ++++++++-
 g10/gpg.c        | 100 ++++++++++++++++++++++++++++++++++++++++++++-----------
 g10/keyedit.c    |   7 ++++
 g10/main.h       |   1 +
 7 files changed, 124 insertions(+), 28 deletions(-)


hooks/post-receive
-- 
The GNU Privacy Guard
http://git.gnupg.org




More information about the Gnupg-commits mailing list