summaryrefslogtreecommitdiffstats
path: root/g10/plaintext.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2014-11-13 17:39:31 +0100
committerWerner Koch <wk@gnupg.org>2014-11-13 17:39:31 +0100
commit69384568f66a48eff3968bb1714aa13925580e9f (patch)
treefbb539760619692e2bc4069a15869889335edc3d /g10/plaintext.c
parentgpg: Fix a missing LF in debug output. (diff)
downloadgnupg2-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.c31
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);