diff options
author | Werner Koch <[email protected]> | 2006-02-14 10:17:57 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2006-02-14 10:17:57 +0000 |
commit | 966cd80d886e0ff93889ea7074a61596f4356cd1 (patch) | |
tree | 7671827d9e2ebf36d5bd377d4a2e967c3c984916 /g10/mainproc.c | |
parent | Lock random seed file (diff) | |
download | gnupg-966cd80d886e0ff93889ea7074a61596f4356cd1.tar.gz gnupg-966cd80d886e0ff93889ea7074a61596f4356cd1.zip |
Fixed a wrong return code with gpg --verify
Diffstat (limited to '')
-rw-r--r-- | g10/mainproc.c | 62 |
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; } |