aboutsummaryrefslogtreecommitdiffstats
path: root/sm/server.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2015-06-29 09:03:58 +0000
committerWerner Koch <[email protected]>2015-06-29 09:06:41 +0000
commit2c9c46e2a2b8f9a1bdc1ef46a135b5fc7d1a8073 (patch)
treee37f62f94baf893e462490dd9c874179c1ded14e /sm/server.c
parentscd: Support button flag and AES key data for OpenPGPcard v3.0. (diff)
downloadgnupg-2c9c46e2a2b8f9a1bdc1ef46a135b5fc7d1a8073.tar.gz
gnupg-2c9c46e2a2b8f9a1bdc1ef46a135b5fc7d1a8073.zip
gpgsm: Add command option "offline".
* sm/server.c (option_handler): Add "offline". (cmd_getinfo): Ditto. * sm/certchain.c (is_cert_still_valid): (do_validate_chain): * sm/gpgsm.c (gpgsm_init_default_ctrl): Default "offline" to the value of --disable-dirmngr. * sm/call-dirmngr.c (start_dirmngr_ext): Better also check for ctrl->offline. -- Adding this option makes it easier to implement the corresponding feature in gpgme. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'sm/server.c')
-rw-r--r--sm/server.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/sm/server.c b/sm/server.c
index 0bee5b205..571b0794b 100644
--- a/sm/server.c
+++ b/sm/server.c
@@ -309,6 +309,16 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
{
ctrl->server_local->no_encrypt_to = 1;
}
+ else if (!strcmp (key, "offline"))
+ {
+ /* We ignore this option if gpgsm has been started with
+ --disable-dirmngr (which also sets offline). */
+ if (!opt.disable_dirmngr)
+ {
+ int i = *value? !!atoi (value) : 1;
+ ctrl->offline = i;
+ }
+ }
else
err = gpg_error (GPG_ERR_UNKNOWN_OPTION);
@@ -1093,10 +1103,12 @@ static const char hlp_getinfo[] =
" pid - Return the process id of the server.\n"
" agent-check - Return success if the agent is running.\n"
" cmd_has_option CMD OPT\n"
- " - Returns OK if the command CMD implements the option OPT.";
+ " - Returns OK if the command CMD implements the option OPT.\n"
+ " offline - Returns OK if the conenction is in offline mode.";
static gpg_error_t
cmd_getinfo (assuan_context_t ctx, char *line)
{
+ ctrl_t ctrl = assuan_get_pointer (ctx);
int rc = 0;
if (!strcmp (line, "version"))
@@ -1113,7 +1125,6 @@ cmd_getinfo (assuan_context_t ctx, char *line)
}
else if (!strcmp (line, "agent-check"))
{
- ctrl_t ctrl = assuan_get_pointer (ctx);
rc = gpgsm_agent_send_nop (ctrl);
}
else if (!strncmp (line, "cmd_has_option", 14)
@@ -1148,6 +1159,10 @@ cmd_getinfo (assuan_context_t ctx, char *line)
}
}
}
+ else if (!strcmp (line, "offline"))
+ {
+ rc = ctrl->offline? 0 : gpg_error (GPG_ERR_GENERAL);
+ }
else
rc = set_error (GPG_ERR_ASS_PARAMETER, "unknown value for WHAT");