diff options
Diffstat (limited to '')
-rw-r--r-- | g10/gpg.c | 5 | ||||
-rw-r--r-- | g10/keydb.h | 1 | ||||
-rw-r--r-- | g10/passphrase.c | 13 |
3 files changed, 19 insertions, 0 deletions
@@ -257,6 +257,7 @@ enum cmd_and_opt_values oBZ2CompressLevel, oBZ2DecompressLowmem, oPassphrase, + oPassphraseEnv, oPassphraseFD, oPassphraseFile, oPassphraseRepeat, @@ -709,6 +710,7 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_c (aRebuildKeydbCaches, "rebuild-keydb-caches", "@"), ARGPARSE_s_s (oPassphrase, "passphrase", "@"), + ARGPARSE_s_s (oPassphraseEnv, "passphrase-env", "@"), ARGPARSE_s_i (oPassphraseFD, "passphrase-fd", "@"), ARGPARSE_s_s (oPassphraseFile, "passphrase-file", "@"), ARGPARSE_s_i (oPassphraseRepeat,"passphrase-repeat", "@"), @@ -3151,6 +3153,9 @@ main (int argc, char **argv) case oPassphrase: set_passphrase_from_string(pargs.r.ret_str); break; + case oPassphraseEnv: + set_passphrase_from_environment_variable(pargs.r.ret_str); + break; case oPassphraseFD: pwfd = translate_sys2libc_fd_int (pargs.r.ret_int, 0); break; diff --git a/g10/keydb.h b/g10/keydb.h index 1def2bb81..db88df9f8 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -279,6 +279,7 @@ gpg_error_t build_sk_list (ctrl_t ctrl, strlist_t locusr, unsigned char encode_s2k_iterations (int iterations); int have_static_passphrase(void); const char *get_static_passphrase (void); +void set_passphrase_from_environment_variable(const char *envvar); void set_passphrase_from_string(const char *pass); void read_passphrase_from_fd( int fd ); void passphrase_clear_cache (const char *cacheid); diff --git a/g10/passphrase.c b/g10/passphrase.c index 10574ec6a..17e259695 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -159,6 +159,19 @@ set_passphrase_from_string(const char *pass) strcpy (fd_passwd, pass); } +void +set_passphrase_from_environment_variable(const char *envvar) +{ + const char *val = getenv(envvar); + if (val == NULL) + val = ""; + xfree (fd_passwd); + fd_passwd = xmalloc_secure(strlen(val)+1); + strcpy (fd_passwd, val); + /* clean up sensitive environment variable to avoid accidental + propagation: */ + unsetenv(envvar); +} void read_passphrase_from_fd( int fd ) |