1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-03 22:56:33 +02:00

Fixed a wrong return code with gpg --verify

This commit is contained in:
Werner Koch 2006-02-14 10:17:57 +00:00
parent 2410941461
commit 966cd80d88
13 changed files with 121 additions and 41 deletions

View file

@ -1,3 +1,11 @@
2006-02-14 Werner Koch <wk@gnupg.org>
* verify.c (verify_signatures): Print warning also for NO_DATA.
* mainproc.c (struct mainproc_context): New field any_sig_seen.
(add_signature): Set it.
(proc_signature_packets): Test and return NO_DATA.
2006-02-09 Werner Koch <wk@g10code.com>
* gpg.c (main) <oLockNever>: Disable random locking.

View file

@ -1,6 +1,6 @@
/* mainproc.c - handle packets
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
* 2005 Free Software Foundation, Inc.
* 2005, 2006 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@ -55,28 +55,31 @@ struct kidlist_item {
* Structure to hold the context
*/
typedef struct mainproc_context *CTX;
struct mainproc_context {
struct mainproc_context *anchor; /* may be useful in the future */
PKT_public_key *last_pubkey;
PKT_secret_key *last_seckey;
PKT_user_id *last_user_id;
md_filter_context_t mfx;
int sigs_only; /* process only signatures and reject all other stuff */
int encrypt_only; /* process only encryption messages */
STRLIST signed_data;
const char *sigfilename;
DEK *dek;
int last_was_session_key;
KBNODE list; /* the current list of packets */
int have_data;
IOBUF iobuf; /* used to get the filename etc. */
int trustletter; /* temp usage in list_node */
ulong symkeys;
struct kidlist_item *pkenc_list; /* list of encryption packets */
struct {
int op;
int stop_now;
} pipemode;
struct mainproc_context
{
struct mainproc_context *anchor; /* May be useful in the future. */
PKT_public_key *last_pubkey;
PKT_secret_key *last_seckey;
PKT_user_id *last_user_id;
md_filter_context_t mfx;
int sigs_only; /* Process only signatures and reject all other stuff. */
int encrypt_only; /* Process only encryption messages. */
STRLIST signed_data;
const char *sigfilename;
DEK *dek;
int last_was_session_key;
KBNODE list; /* The current list of packets. */
int have_data;
IOBUF iobuf; /* Used to get the filename etc. */
int trustletter; /* Temporary usage in list_node. */
ulong symkeys;
struct kidlist_item *pkenc_list; /* List of encryption packets. */
struct
{
int op;
int stop_now;
} pipemode;
int any_sig_seen; /* Set to true if a signature packet has been seen. */
};
@ -217,6 +220,7 @@ add_signature( CTX c, PACKET *pkt )
{
KBNODE node;
c->any_sig_seen = 1;
if( pkt->pkttype == PKT_SIGNATURE && !c->list ) {
/* This is the first signature for the following datafile.
* GPG does not write such packets; instead it always uses
@ -1152,6 +1156,18 @@ proc_signature_packets( void *anchor, IOBUF a,
c->signed_data = signedfiles;
c->sigfilename = sigfilename;
rc = do_proc_packets( c, a );
/* If we have not encountered any signature we print an error
messages, send a NODATA status back and return an error code.
Using log_error is required becuase verify_files does not check
error codes for each file but we want to terminate the process
with an error. */
if (!rc && !c->any_sig_seen)
{
write_status_text (STATUS_NODATA, "4");
log_error (_("no signature found\n"));
rc = G10ERR_NO_DATA;
}
xfree( c );
return rc;
}

View file

@ -113,7 +113,7 @@ verify_signatures( int nfiles, char **files )
rc = proc_signature_packets( NULL, fp, sl, sigfile );
free_strlist(sl);
iobuf_close(fp);
if( afx.no_openpgp_data && rc == -1 ) {
if( (afx.no_openpgp_data && rc == -1) || rc == G10ERR_NO_DATA ) {
log_error(_("the signature could not be verified.\n"
"Please remember that the signature file (.sig or .asc)\n"
"should be the first file given on the command line.\n") );