diff options
Diffstat (limited to '')
-rw-r--r-- | sm/gpgsm.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/sm/gpgsm.c b/sm/gpgsm.c index 364dd43ff..fc6d1c75a 100644 --- a/sm/gpgsm.c +++ b/sm/gpgsm.c @@ -32,6 +32,8 @@ #include <gcrypt.h> #include <assuan.h> /* malloc hooks */ +#include "passphrase.h" +#include "../common/shareddefs.h" #include "../kbx/keybox.h" /* malloc hooks */ #include "i18n.h" #include "keydb.h" @@ -120,6 +122,8 @@ enum cmd_and_opt_values { oProtectToolProgram, oFakedSystemTime, + oPassphraseFD, + oPinentryMode, oAssumeArmor, oAssumeBase64, @@ -243,6 +247,9 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_s_s (oP12Charset, "p12-charset", "@"), + ARGPARSE_s_i (oPassphraseFD, "passphrase-fd", "@"), + ARGPARSE_s_s (oPinentryMode, "pinentry-mode", "@"), + ARGPARSE_s_n (oAssumeArmor, "assume-armor", N_("assume input is in PEM format")), ARGPARSE_s_n (oAssumeBase64, "assume-base64", @@ -910,7 +917,7 @@ main ( int argc, char **argv) estream_t auditfp = NULL; estream_t htmlauditfp = NULL; struct assuan_malloc_hooks malloc_hooks; - + int pwfd = -1; /*mtrace();*/ early_system_init (); @@ -1150,6 +1157,16 @@ main ( int argc, char **argv) opt.p12_charset = pargs.r.ret_str; break; + case oPassphraseFD: + pwfd = translate_sys2libc_fd_int (pargs.r.ret_int, 0); + break; + + case oPinentryMode: + opt.pinentry_mode = parse_pinentry_mode (pargs.r.ret_str); + if (opt.pinentry_mode == -1) + log_error (_("invalid pinentry mode '%s'\n"), pargs.r.ret_str); + break; + /* Input encoding selection. */ case oAssumeArmor: ctrl.autodetect_encoding = 0; @@ -1458,6 +1475,9 @@ main ( int argc, char **argv) if (log_get_errorcount(0)) gpgsm_exit(2); + if (pwfd != -1) /* Read the passphrase now. */ + read_passphrase_from_fd (pwfd); + /* Now that we have the options parsed we need to update the default control structure. */ gpgsm_init_default_ctrl (&ctrl); |