From fc60e6779d0ea7fb5c9c9ecffad81de28bb04534 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Mon, 26 Jan 2004 20:50:01 +0000 Subject: [PATCH] * compress.c (init_compress): Remove "-z10" trick to get uncompressed data inside a compressed data packet. This is possibly dangerous without an MDC. (push_compress_filter2): Do the right thing (i.e. nothing) with compress algo 0. * main.h, decrypt.c (decrypt_messages): Accept filenames to decrypt on stdin. This is bug #253. --- g10/ChangeLog | 11 ++++++++++ g10/compress.c | 6 ++---- g10/decrypt.c | 54 ++++++++++++++++++++++++++++++++++++++++---------- g10/main.h | 2 +- 4 files changed, 58 insertions(+), 15 deletions(-) diff --git a/g10/ChangeLog b/g10/ChangeLog index ba1a49479..809031932 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,14 @@ +2004-01-26 David Shaw + + * compress.c (init_compress): Remove "-z10" trick to get + uncompressed data inside a compressed data packet. This is + possibly dangerous without an MDC. + (push_compress_filter2): Do the right thing (i.e. nothing) with + compress algo 0. + + * main.h, decrypt.c (decrypt_messages): Accept filenames to + decrypt on stdin. This is bug #253. + 2004-01-21 David Shaw * getkey.c (merge_selfsigs): If a subkey is already revoked by the diff --git a/g10/compress.c b/g10/compress.c index c6a61ebe5..4dfe1bb8a 100644 --- a/g10/compress.c +++ b/g10/compress.c @@ -50,12 +50,10 @@ init_compress( compress_filter_context_t *zfx, z_stream *zs ) int rc; int level; - if( opt.compress >= 0 && opt.compress <= 9 ) + if( opt.compress >= 1 && opt.compress <= 9 ) level = opt.compress; else if( opt.compress == -1 ) level = Z_DEFAULT_COMPRESSION; - else if( opt.compress == 10 ) /* remove this ! */ - level = 0; else { log_error("invalid compression level; using default level\n"); level = Z_DEFAULT_COMPRESSION; @@ -330,7 +328,7 @@ void push_compress_filter2(IOBUF out,compress_filter_context_t *zfx, int algo,int rel) { - if(algo>0) + if(algo>=0) zfx->algo=algo; else zfx->algo=DEFAULT_COMPRESS_ALGO; diff --git a/g10/decrypt.c b/g10/decrypt.c index 692b72966..d0f63dcf9 100644 --- a/g10/decrypt.c +++ b/g10/decrypt.c @@ -83,13 +83,14 @@ decrypt_message( const char *filename ) } void -decrypt_messages(int nfiles, char **files) +decrypt_messages(int nfiles, char *files[]) { IOBUF fp; armor_filter_context_t afx; progress_filter_context_t pfx; char *p, *output = NULL; - int rc = 0; + int rc=0,use_stdin=0; + unsigned int lno=0; if (opt.outfile) { @@ -98,20 +99,53 @@ decrypt_messages(int nfiles, char **files) } - while (nfiles--) + if(!nfiles) + use_stdin=1; + + for(;;) { - print_file_status(STATUS_FILE_START, *files, 3); - output = make_outfile_name(*files); + char line[2048]; + char *filename=NULL; + + if(use_stdin) + { + if(fgets(line, DIM(line), stdin)) + { + lno++; + if (!*line || line[strlen(line)-1] != '\n') + log_error("input line %u too long or missing LF\n", lno); + else + { + line[strlen(line)-1] = '\0'; + filename=line; + } + } + } + else + { + if(nfiles) + { + filename=*files; + nfiles--; + files++; + } + } + + if(filename==NULL) + break; + + print_file_status(STATUS_FILE_START, filename, 3); + output = make_outfile_name(filename); if (!output) goto next_file; - fp = iobuf_open(*files); + fp = iobuf_open(filename); if (!fp) { - log_error(_("can't open `%s'\n"), print_fname_stdin(*files)); + log_error(_("can't open `%s'\n"), print_fname_stdin(filename)); goto next_file; } - handle_progress (&pfx, fp, *files); + handle_progress (&pfx, fp, filename); if (!opt.no_armor) { @@ -124,7 +158,7 @@ decrypt_messages(int nfiles, char **files) rc = proc_packets(NULL, fp); iobuf_close(fp); if (rc) - log_error("%s: decryption failed: %s\n", print_fname_stdin(*files), + log_error("%s: decryption failed: %s\n", print_fname_stdin(filename), g10_errstr(rc)); p = get_last_passphrase(); set_next_passphrase(p); @@ -134,7 +168,7 @@ decrypt_messages(int nfiles, char **files) /* Note that we emit file_done even after an error. */ write_status( STATUS_FILE_DONE ); m_free(output); - files++; } + set_next_passphrase(NULL); } diff --git a/g10/main.h b/g10/main.h index a51a0d7e8..1fbfda781 100644 --- a/g10/main.h +++ b/g10/main.h @@ -220,7 +220,7 @@ int verify_files( int nfiles, char **files ); /*-- decrypt.c --*/ int decrypt_message( const char *filename ); -void decrypt_messages(int nfiles, char **files); +void decrypt_messages(int nfiles, char *files[]); /*-- plaintext.c --*/ int hash_datafiles( MD_HANDLE md, MD_HANDLE md2,