diff options
author | Werner Koch <wk@gnupg.org> | 2014-11-13 17:39:31 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2014-11-13 17:39:31 +0100 |
commit | 69384568f66a48eff3968bb1714aa13925580e9f (patch) | |
tree | fbb539760619692e2bc4069a15869889335edc3d /g10/plaintext.c | |
parent | gpg: Fix a missing LF in debug output. (diff) | |
download | gnupg2-69384568f66a48eff3968bb1714aa13925580e9f.tar.xz gnupg2-69384568f66a48eff3968bb1714aa13925580e9f.zip |
gpg: Make the use of "--verify FILE" for detached sigs harder.
* g10/openfile.c (open_sigfile): Factor some code out to ...
(get_matching_datafile): new function.
* g10/plaintext.c (hash_datafiles): Do not try to find matching file
in batch mode.
* g10/mainproc.c (check_sig_and_print): Print a warning if a possibly
matching data file is not used by a standard signatures.
--
Allowing to use the abbreviated form for detached signatures is a long
standing bug which has only been noticed by the public with the
release of 2.1.0. :-(
What we do is to remove the ability to check detached signature in
--batch using the one file abbreviated mode. This should exhibit
problems in scripts which use this insecure practice. We also print a
warning if a matching data file exists but was not considered because
the detached signature was actually a standard signature:
gpgv: Good signature from "Werner Koch (dist sig)"
gpgv: WARNING: not a detached signature; \
file 'gnupg-2.1.0.tar.bz2' was NOT verified!
We can only print a warning because it is possible that a standard
signature is indeed to be verified but by coincidence a file with a
matching name is stored alongside the standard signature.
Reported-by: Simon Nicolussi (to gnupg-users on Nov 7)
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'g10/plaintext.c')
-rw-r--r-- | g10/plaintext.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/g10/plaintext.c b/g10/plaintext.c index 54541986a..5d343c6d2 100644 --- a/g10/plaintext.c +++ b/g10/plaintext.c @@ -607,10 +607,8 @@ leave: -/**************** - * Hash the given files and append the hash to hash context md. - * If FILES is NULL, hash stdin. - */ +/* Hash the given files and append the hash to hash contexts MD and + * MD2. If FILES is NULL, stdin is hashed. */ int hash_datafiles (gcry_md_hd_t md, gcry_md_hd_t md2, strlist_t files, const char *sigfilename, int textmode) @@ -623,15 +621,22 @@ hash_datafiles (gcry_md_hd_t md, gcry_md_hd_t md2, strlist_t files, if (!files) { - /* check whether we can open the signed material */ - fp = open_sigfile (sigfilename, pfx); - if (fp) - { - do_hash (md, md2, fp, textmode); - iobuf_close (fp); - release_progress_context (pfx); - return 0; - } + /* Check whether we can open the signed material. We avoid + trying to open a file if run in batch mode. This assumed + data file for a sig file feature is just a convenience thing + for the command line and the user needs to read possible + warning messages. */ + if (!opt.batch) + { + fp = open_sigfile (sigfilename, pfx); + if (fp) + { + do_hash (md, md2, fp, textmode); + iobuf_close (fp); + release_progress_context (pfx); + return 0; + } + } log_error (_("no signed data\n")); release_progress_context (pfx); return gpg_error (GPG_ERR_NO_DATA); |