aboutsummaryrefslogtreecommitdiffstats
path: root/g10/mainproc.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2006-02-14 10:17:57 +0000
committerWerner Koch <[email protected]>2006-02-14 10:17:57 +0000
commit966cd80d886e0ff93889ea7074a61596f4356cd1 (patch)
tree7671827d9e2ebf36d5bd377d4a2e967c3c984916 /g10/mainproc.c
parentLock random seed file (diff)
downloadgnupg-966cd80d886e0ff93889ea7074a61596f4356cd1.tar.gz
gnupg-966cd80d886e0ff93889ea7074a61596f4356cd1.zip
Fixed a wrong return code with gpg --verify
Diffstat (limited to '')
-rw-r--r--g10/mainproc.c62
1 files changed, 39 insertions, 23 deletions
diff --git a/g10/mainproc.c b/g10/mainproc.c
index 7b92d8426..afe4ee1ed 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -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;
}