diff options
author | Werner Koch <[email protected]> | 2020-08-14 10:19:11 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2020-08-14 10:19:11 +0000 |
commit | 6bcb609e1b2a507caa2e1a078178709d808b590b (patch) | |
tree | 28de80abf6d947281188a2f89612311168747fdc /tools/gpg-connect-agent.c | |
parent | gpg: Ignore personal_digest_prefs for ECDSA keys. (diff) | |
download | gnupg-6bcb609e1b2a507caa2e1a078178709d808b590b.tar.gz gnupg-6bcb609e1b2a507caa2e1a078178709d808b590b.zip |
Add --chuid to gpg, gpg-card, and gpg-connect-agent.
* g10/gpg.c (oChUid): New.
(opts): Add --chuid.
(main): Implement --chuid. Delay setting of homedir until the new
chuid is done.
* sm/gpgsm.c (main): Delay setting of homedir until the new chuid is
done.
* tools/gpg-card.c (oChUid): New.
(opts): Add --chuid.
(changeuser): New helper var.
(main): Implement --chuid.
* tools/gpg-connect-agent.c (oChUid): New.
(opts): Add --chuid.
(main): Implement --chuid.
--
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'tools/gpg-connect-agent.c')
-rw-r--r-- | tools/gpg-connect-agent.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/gpg-connect-agent.c b/tools/gpg-connect-agent.c index cde086770..ac0bc89dc 100644 --- a/tools/gpg-connect-agent.c +++ b/tools/gpg-connect-agent.c @@ -71,8 +71,10 @@ enum cmd_and_opt_values oKeyboxd, oUIServer, oNoHistory, - oNoAutostart + oNoAutostart, + oChUid, + oNoop }; @@ -107,6 +109,7 @@ static gpgrt_opt_t opts[] = { ARGPARSE_s_s (oAgentProgram, "agent-program", "@"), ARGPARSE_s_s (oDirmngrProgram, "dirmngr-program", "@"), ARGPARSE_s_s (oKeyboxdProgram, "keyboxd-program", "@"), + ARGPARSE_s_s (oChUid, "chuid", "@"), ARGPARSE_end () }; @@ -1187,6 +1190,9 @@ main (int argc, char **argv) char **cmdline_commands = NULL; char *historyname = NULL; + static const char *changeuser; + + early_system_init (); gnupg_rl_initialize (); gpgrt_set_strusage (my_strusage); @@ -1233,12 +1239,16 @@ main (int argc, char **argv) opt.enable_varsubst = 1; opt.trim_leading_spaces = 1; break; + case oChUid: changeuser = pargs.r.ret_str; break; default: pargs.err = 2; break; } } gpgrt_argparse (NULL, &pargs, NULL); /* Release internal state. */ + if (changeuser && gnupg_chuid (changeuser, 0)) + log_inc_errorcount (); /* Force later termination. */ + if (log_get_errorcount (0)) exit (2); |