aboutsummaryrefslogtreecommitdiffstats
path: root/tools/gpg-connect-agent.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2020-08-14 10:19:11 +0000
committerWerner Koch <[email protected]>2020-08-14 10:19:11 +0000
commit6bcb609e1b2a507caa2e1a078178709d808b590b (patch)
tree28de80abf6d947281188a2f89612311168747fdc /tools/gpg-connect-agent.c
parentgpg: Ignore personal_digest_prefs for ECDSA keys. (diff)
downloadgnupg-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.c12
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);