From 6bcb609e1b2a507caa2e1a078178709d808b590b Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 14 Aug 2020 12:19:11 +0200 Subject: 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 --- tools/gpg-connect-agent.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'tools/gpg-connect-agent.c') 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); -- cgit v1.2.3