summaryrefslogtreecommitdiffstats
path: root/sm
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2020-08-06 16:02:59 +0200
committerWerner Koch <wk@gnupg.org>2020-08-06 16:03:57 +0200
commit646a30fd394a739ef653556b1a7b2eeebda95951 (patch)
treebefdb6d743cb20053b19a57dc3be46d4dde54c93 /sm
parentgpgconf: New option --chuid. (diff)
downloadgnupg2-646a30fd394a739ef653556b1a7b2eeebda95951.tar.xz
gnupg2-646a30fd394a739ef653556b1a7b2eeebda95951.zip
gpgsm: New option --chuid.
* sm/gpgsm.c (oChUid, opts): New option --chuid. (main): Implement option. -- This option will at least be useful for Scute. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'sm')
-rw-r--r--sm/gpgsm.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index 377cb1191..3b41fe3b2 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -200,6 +200,7 @@ enum cmd_and_opt_values {
oIgnoreCertExtension,
oAuthenticode,
oAttribute,
+ oChUid,
oNoAutostart
};
@@ -426,6 +427,7 @@ static gpgrt_opt_t opts[] = {
ARGPARSE_s_s (oLCctype, "lc-ctype", "@"),
ARGPARSE_s_s (oLCmessages, "lc-messages", "@"),
ARGPARSE_s_s (oXauthority, "xauthority", "@"),
+ ARGPARSE_s_s (oChUid, "chuid", "@"),
ARGPARSE_header (NULL, ""), /* Stop the header group. */
@@ -990,6 +992,7 @@ main ( int argc, char **argv)
estream_t htmlauditfp = NULL;
struct assuan_malloc_hooks malloc_hooks;
int pwfd = -1;
+ const char *changeuser = NULL;
/*mtrace();*/
early_system_init ();
@@ -1062,6 +1065,10 @@ main ( int argc, char **argv)
gnupg_set_homedir (pargs.r.ret_str);
break;
+ case oChUid:
+ changeuser = pargs.r.ret_str;
+ break;
+
case aCallProtectTool:
/* Make sure that --version and --help are passed to the
* protect-tool. */
@@ -1078,7 +1085,7 @@ main ( int argc, char **argv)
/*
Now we are now working under our real uid
- */
+ */
ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free );
@@ -1096,6 +1103,9 @@ main ( int argc, char **argv)
ctrl.status_fd = -1; /* No status output. */
ctrl.autodetect_encoding = 1;
+ if (changeuser && gnupg_chuid (changeuser, 0))
+ log_inc_errorcount (); /* Force later termination. */
+
/* Set the default policy file */
opt.policy_file = make_filename (gnupg_homedir (), "policies.txt", NULL);
@@ -1383,6 +1393,7 @@ main ( int argc, char **argv)
break;
case oHomedir: gnupg_set_homedir (pargs.r.ret_str); break;
+ case oChUid: break; /* Command line only (see above). */
case oAgentProgram: opt.agent_program = pargs.r.ret_str; break;
case oDisplay: