[git] GnuPG - branch, STABLE-BRANCH-2-2, updated. gnupg-2.2.5-49-g0336e5d
by Werner Koch
cvs at cvs.gnupg.org
Fri Apr 6 17:41:50 CEST 2018
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, STABLE-BRANCH-2-2 has been updated
via 0336e5d1a7b9d46e06c838e6a98aecfcc9542882 (commit)
from cfd07798087f671c134eef056229bb30e08cc77c (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 0336e5d1a7b9d46e06c838e6a98aecfcc9542882
Author: Werner Koch <wk at gnupg.org>
Date: Fri Apr 6 17:32:08 2018 +0200
gpg: Emit FAILURE stati now in almost all cases.
* g10/cpr.c (write_status_failure): Make it print only once.
* g10/gpg.c (wrong_args): Bump error counter.
(g10_exit): Print a FAILURE status if we ever did a log_error etc.
(main): Use log_error instead of log_fatal at one place. Print a
FAILURE status for a bad option. Ditto for certain exit points so
that we can see different error locations.
--
This makes it easier to detect errors by tools which have no way to
get the exit code (e.g. due to double forking).
GnuPG-bug-id: 3872
Signed-off-by: Werner Koch <wk at gnupg.org>
diff --git a/g10/cpr.c b/g10/cpr.c
index a7fd1aa..4354426 100644
--- a/g10/cpr.c
+++ b/g10/cpr.c
@@ -245,9 +245,13 @@ write_status_errcode (const char *where, int errcode)
void
write_status_failure (const char *where, gpg_error_t err)
{
+ static int any_failure_printed;
+
if (!statusfp || !status_currently_allowed (STATUS_FAILURE))
return; /* Not enabled or allowed. */
-
+ if (any_failure_printed)
+ return;
+ any_failure_printed = 1;
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)
diff --git a/g10/gpg.c b/g10/gpg.c
index bfff7a5..2c93a83 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -1166,6 +1166,7 @@ static void
wrong_args( const char *text)
{
es_fprintf (es_stderr, _("usage: %s [options] %s\n"), GPG_NAME, text);
+ log_inc_errorcount ();
g10_exit(2);
}
@@ -3107,7 +3108,7 @@ main (int argc, char **argv)
case oCommandFD:
opt.command_fd = translate_sys2libc_fd_int (pargs.r.ret_int, 0);
if (! gnupg_fd_valid (opt.command_fd))
- log_fatal ("command-fd is invalid: %s\n", strerror (errno));
+ log_error ("command-fd is invalid: %s\n", strerror (errno));
break;
case oCommandFile:
opt.command_fd = open_info_file (pargs.r.ret_str, 0, 1);
@@ -3563,7 +3564,16 @@ main (int argc, char **argv)
case oNoop: break;
default:
- pargs.err = configfp? ARGPARSE_PRINT_WARNING:ARGPARSE_PRINT_ERROR;
+ if (configfp)
+ pargs.err = ARGPARSE_PRINT_WARNING;
+ else
+ {
+ pargs.err = ARGPARSE_PRINT_ERROR;
+ /* The argparse fucntion calls a plain exit and thus
+ * we need to print a status here. */
+ write_status_failure ("option-parser",
+ gpg_error(GPG_ERR_GENERAL));
+ }
break;
}
}
@@ -3582,7 +3592,10 @@ main (int argc, char **argv)
}
xfree(configname); configname = NULL;
if (log_get_errorcount (0))
- g10_exit(2);
+ {
+ write_status_failure ("option-parser", gpg_error(GPG_ERR_GENERAL));
+ g10_exit(2);
+ }
/* The command --gpgconf-list is pretty simple and may be called
directly after the option parsing. */
@@ -3603,7 +3616,10 @@ main (int argc, char **argv)
"--print-pks-records",
"--export-options export-pka");
if (log_get_errorcount (0))
- g10_exit(2);
+ {
+ write_status_failure ("option-checking", gpg_error(GPG_ERR_GENERAL));
+ g10_exit(2);
+ }
if( nogreeting )
@@ -3704,6 +3720,7 @@ main (int argc, char **argv)
{
log_info(_("will not run with insecure memory due to %s\n"),
"--require-secmem");
+ write_status_failure ("option-checking", gpg_error(GPG_ERR_GENERAL));
g10_exit(2);
}
@@ -3844,7 +3861,11 @@ main (int argc, char **argv)
}
if( log_get_errorcount(0) )
- g10_exit(2);
+ {
+ write_status_failure ("option-postprocessing",
+ gpg_error(GPG_ERR_GENERAL));
+ g10_exit (2);
+ }
if(opt.compress_level==0)
opt.compress_algo=COMPRESS_ALGO_NONE;
@@ -3945,7 +3966,10 @@ main (int argc, char **argv)
/* Fail hard. */
if (log_get_errorcount (0))
+ {
+ write_status_failure ("option-checking", gpg_error(GPG_ERR_GENERAL));
g10_exit (2);
+ }
/* Set the random seed file. */
if( use_random_seed ) {
@@ -4929,7 +4953,10 @@ main (int argc, char **argv)
hd = keydb_new ();
if (! hd)
- g10_exit (1);
+ {
+ write_status_failure ("tofu-driver", gpg_error(GPG_ERR_GENERAL));
+ g10_exit (1);
+ }
tofu_begin_batch_update (ctrl);
@@ -4943,6 +4970,7 @@ main (int argc, char **argv)
{
log_error (_("error parsing key specification '%s': %s\n"),
argv[i], gpg_strerror (rc));
+ write_status_failure ("tofu-driver", rc);
g10_exit (1);
}
@@ -4956,6 +4984,8 @@ main (int argc, char **argv)
log_error (_("'%s' does not appear to be a valid"
" key ID, fingerprint or keygrip\n"),
argv[i]);
+ write_status_failure ("tofu-driver",
+ gpg_error(GPG_ERR_GENERAL));
g10_exit (1);
}
@@ -4966,6 +4996,7 @@ main (int argc, char **argv)
the string. */
log_error ("keydb_search_reset failed: %s\n",
gpg_strerror (rc));
+ write_status_failure ("tofu-driver", rc);
g10_exit (1);
}
@@ -4974,6 +5005,7 @@ main (int argc, char **argv)
{
log_error (_("key \"%s\" not found: %s\n"), argv[i],
gpg_strerror (rc));
+ write_status_failure ("tofu-driver", rc);
g10_exit (1);
}
@@ -4982,12 +5014,16 @@ main (int argc, char **argv)
{
log_error (_("error reading keyblock: %s\n"),
gpg_strerror (rc));
+ write_status_failure ("tofu-driver", rc);
g10_exit (1);
}
merge_keys_and_selfsig (ctrl, kb);
if (tofu_set_policy (ctrl, kb, policy))
- g10_exit (1);
+ {
+ write_status_failure ("tofu-driver", rc);
+ g10_exit (1);
+ }
release_kbnode (kb);
}
@@ -5069,6 +5105,12 @@ emergency_cleanup (void)
void
g10_exit( int rc )
{
+ /* If we had an error but not printed an error message, do it now.
+ * Note that write_status_failure will never print a second failure
+ * status line. */
+ if (log_get_errorcount (0))
+ write_status_failure ("gpg-exit", gpg_error (GPG_ERR_GENERAL));
+
gcry_control (GCRYCTL_UPDATE_RANDOM_SEED_FILE);
if (DBG_CLOCK)
log_clock ("stop");
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index b81e3b6..da1783d 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -1464,7 +1464,7 @@ main ( int argc, char **argv)
DIM (compliance_options),
opt.quiet);
if (compliance < 0)
- gpgsm_exit (1);
+ log_inc_errorcount (); /* Force later termination. */
opt.compliance = compliance;
}
break;
@@ -1493,7 +1493,11 @@ main ( int argc, char **argv)
NULL);
if (log_get_errorcount(0))
- gpgsm_exit(2);
+ {
+ gpgsm_status_with_error (&ctrl, STATUS_FAILURE,
+ "option-parser", gpg_error (GPG_ERR_GENERAL));
+ gpgsm_exit(2);
+ }
if (pwfd != -1) /* Read the passphrase now. */
read_passphrase_from_fd (pwfd);
@@ -1660,7 +1664,11 @@ main ( int argc, char **argv)
gnupg_compliance_option_string (opt.compliance));
if (log_get_errorcount(0))
- gpgsm_exit(2);
+ {
+ gpgsm_status_with_error (&ctrl, STATUS_FAILURE, "option-postprocessing",
+ gpg_error (GPG_ERR_GENERAL));
+ gpgsm_exit (2);
+ }
/* Set the random seed file. */
if (use_random_seed)
-----------------------------------------------------------------------
Summary of changes:
g10/cpr.c | 6 +++++-
g10/gpg.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++-------
sm/gpgsm.c | 14 +++++++++++---
3 files changed, 65 insertions(+), 11 deletions(-)
hooks/post-receive
--
The GNU Privacy Guard
http://git.gnupg.org
More information about the Gnupg-commits
mailing list