aboutsummaryrefslogtreecommitdiffstats
path: root/sm/gpgsm.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sm/gpgsm.c22
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);