diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/gpgtar-create.c | 20 | ||||
-rw-r--r-- | tools/gpgtar.c | 8 | ||||
-rw-r--r-- | tools/gpgtar.h | 2 |
3 files changed, 21 insertions, 9 deletions
diff --git a/tools/gpgtar-create.c b/tools/gpgtar-create.c index 8975fc6ba..d5e3becf5 100644 --- a/tools/gpgtar-create.c +++ b/tools/gpgtar-create.c @@ -741,7 +741,7 @@ write_eof_mark (estream_t stream) INPATTERN is NULL take the pattern as null terminated strings from stdin. */ gpg_error_t -gpgtar_create (char **inpattern, int encrypt) +gpgtar_create (char **inpattern, int encrypt, int sign) { gpg_error_t err = 0; struct scanctrl_s scanctrl_buffer; @@ -865,7 +865,7 @@ gpgtar_create (char **inpattern, int encrypt) if (outstream == es_stdout) es_set_binary (es_stdout); - if (encrypt) + if (encrypt || sign) { cipher_stream = outstream; outstream = es_fopenmem (0, "rwb"); @@ -886,7 +886,7 @@ gpgtar_create (char **inpattern, int encrypt) if (err) goto leave; - if (encrypt) + if (encrypt || sign) { int i; strlist_t arg; @@ -898,7 +898,7 @@ gpgtar_create (char **inpattern, int encrypt) argv = xtrycalloc (strlist_length (opt.gpg_arguments) + 2 * strlist_length (opt.recipients) - + 2, + + 1 + !!encrypt + !!sign + 2 * !!opt.user, sizeof *argv); if (argv == NULL) { @@ -906,7 +906,15 @@ gpgtar_create (char **inpattern, int encrypt) goto leave; } i = 0; - argv[i++] = "--encrypt"; + if (encrypt) + argv[i++] = "--encrypt"; + if (sign) + argv[i++] = "--sign"; + if (opt.user) + { + argv[i++] = "--local-user"; + argv[i++] = opt.user; + } for (arg = opt.recipients; arg; arg = arg->next) { argv[i++] = "--recipient"; @@ -917,7 +925,7 @@ gpgtar_create (char **inpattern, int encrypt) argv[i++] = NULL; assert (i == strlist_length (opt.gpg_arguments) + 2 * strlist_length (opt.recipients) - + 2); + + 1 + !!encrypt + !!sign + 2 * !!opt.user); err = sh_exec_tool_stream (opt.gpg_program, argv, outstream, cipher_stream); diff --git a/tools/gpgtar.c b/tools/gpgtar.c index 100fb160e..800165462 100644 --- a/tools/gpgtar.c +++ b/tools/gpgtar.c @@ -318,7 +318,6 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts) break; case oUser: - log_info ("note: ignoring option --user\n"); opt.user = pargs->r.ret_str; break; @@ -452,12 +451,17 @@ main (int argc, char **argv) break; case aEncrypt: + case aSign: + case aSignEncrypt: if ((!argc && !null_names) || (argc && null_names)) usage (1); if (opt.filename) log_info ("note: ignoring option --set-filename\n"); - err = gpgtar_create (null_names? NULL :argv, !skip_crypto); + err = gpgtar_create (null_names? NULL :argv, + !skip_crypto + && (cmd == aEncrypt || cmd == aSignEncrypt), + cmd == aSign || cmd == aSignEncrypt); if (err && log_get_errorcount (0) == 0) log_error ("creating archive failed: %s\n", gpg_strerror (err)); break; diff --git a/tools/gpgtar.h b/tools/gpgtar.h index eadbcac2a..3f21ea1e8 100644 --- a/tools/gpgtar.h +++ b/tools/gpgtar.h @@ -119,7 +119,7 @@ gpg_error_t read_record (estream_t stream, void *record); gpg_error_t write_record (estream_t stream, const void *record); /*-- gpgtar-create.c --*/ -gpg_error_t gpgtar_create (char **inpattern, int encrypt); +gpg_error_t gpgtar_create (char **inpattern, int encrypt, int sign); /*-- gpgtar-extract.c --*/ gpg_error_t gpgtar_extract (const char *filename, int decrypt); |