aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Kibbey <[email protected]>2012-01-24 01:27:14 +0000
committerBen Kibbey <[email protected]>2012-01-24 01:40:56 +0000
commitb5aa197a5f8d3ad6c484f8cc19e0b4513573a9a3 (patch)
tree1b92e1e193bac4a51d31b330d900bfa5e8b11bb8
parentAdd user defined pinentry prompts for SCD. (diff)
downloadgnupg-b5aa197a5f8d3ad6c484f8cc19e0b4513573a9a3.tar.gz
gnupg-b5aa197a5f8d3ad6c484f8cc19e0b4513573a9a3.zip
Set both the app and default SCD pin prompt at the same time.
Fixes the case when scdaemon prompts for card insertion. * scd/app-openpgp.c (do_set_pin_prompt): Fix indentation. No longer unset the prompt with '-' since the OPTION command without a value does this anyway. * scd/app.c (expand_pin_prompt): Fix indentation. * scd/command.c (set_pinentry_prompt): Set both the default and application prompt when available.
-rw-r--r--scd/app-openpgp.c16
-rw-r--r--scd/app.c28
-rw-r--r--scd/command.c18
3 files changed, 30 insertions, 32 deletions
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index ea3e52e6b..a5e98075c 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -3765,14 +3765,14 @@ do_set_pin_prompt(app_t app, int which, const char *prompt)
switch (which)
{
- case PIN_SIGN_PROMPT:
- p = &app->app_local->pin_prompt;
- break;
- case PIN_ADMIN_PROMPT:
- p = &app->app_local->pin_admin_prompt;
+ case PIN_SIGN_PROMPT:
+ p = &app->app_local->pin_prompt;
+ break;
+ case PIN_ADMIN_PROMPT:
+ p = &app->app_local->pin_admin_prompt;
+ break;
+ default:
break;
- default:
- break;
}
if (p)
@@ -3780,7 +3780,7 @@ do_set_pin_prompt(app_t app, int which, const char *prompt)
xfree (*p);
*p = NULL;
- if (prompt && *prompt != '-' && *(prompt+1) != 0)
+ if (prompt && *prompt)
{
*p = xtrystrdup (prompt);
if (!*p)
diff --git a/scd/app.c b/scd/app.c
index e0b2fe6e7..51bd207ff 100644
--- a/scd/app.c
+++ b/scd/app.c
@@ -969,20 +969,20 @@ expand_pin_prompt(const char *prompt, const char *prepend, int which, ...)
switch (which)
{
- /* Signature count. */
- case PIN_SIGN_PROMPT:
- luval = va_arg (ap, unsigned long);
- snprintf (valuebuf, sizeof (valuebuf), "%lu", luval);
- token = "|S|";
- break;
- /* Pin tries remaining. */
- case PIN_ADMIN_PROMPT:
- intval = va_arg (ap, int);
- snprintf (valuebuf, sizeof (valuebuf), "%i", intval);
- token = "|A|";
- break;
- default:
- break;
+ /* Signature count. */
+ case PIN_SIGN_PROMPT:
+ luval = va_arg (ap, unsigned long);
+ snprintf (valuebuf, sizeof (valuebuf), "%lu", luval);
+ token = "|S|";
+ break;
+ /* Pin tries remaining. */
+ case PIN_ADMIN_PROMPT:
+ intval = va_arg (ap, int);
+ snprintf (valuebuf, sizeof (valuebuf), "%i", intval);
+ token = "|A|";
+ break;
+ default:
+ break;
}
va_end (ap);
diff --git a/scd/command.c b/scd/command.c
index 2704e57b7..7b7536bba 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -395,9 +395,10 @@ reset_notify (assuan_context_t ctx, char *line)
}
static gpg_error_t
-set_pinentry_prompt(struct server_local_s *srv, int which, const char *prompt)
+set_pinentry_prompt(ctrl_t ctrl, int which, const char *prompt)
{
gpg_error_t rc = 0;
+ struct server_local_s *srv = ctrl->server_local;
char **p = NULL;
switch (which)
@@ -417,7 +418,7 @@ set_pinentry_prompt(struct server_local_s *srv, int which, const char *prompt)
xfree (*p);
*p = NULL;
- if (prompt && *prompt != '-' && *(prompt+1) != 0)
+ if (prompt && *prompt)
{
*p = xtrystrdup (prompt);
if (!*p)
@@ -425,6 +426,9 @@ set_pinentry_prompt(struct server_local_s *srv, int which, const char *prompt)
}
}
+ if (!rc && ctrl->app_ctx)
+ rc = app_set_pin_prompt (ctrl->app_ctx, PIN_SIGN_PROMPT, prompt);
+
return rc;
}
@@ -451,17 +455,11 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
* app.c:expand_pin_prompt() for details. */
else if (!strcmp (key, "pin-prompt"))
{
- if (ctrl->app_ctx)
- return app_set_pin_prompt (ctrl->app_ctx, PIN_SIGN_PROMPT, value);
- else
- return set_pinentry_prompt (ctrl->server_local, PIN_SIGN_PROMPT, value);
+ return set_pinentry_prompt (ctrl, PIN_SIGN_PROMPT, value);
}
else if (!strcmp (key, "pin-admin-prompt"))
{
- if (ctrl->app_ctx)
- return app_set_pin_prompt (ctrl->app_ctx, PIN_ADMIN_PROMPT, value);
- else
- return set_pinentry_prompt (ctrl->server_local, PIN_ADMIN_PROMPT, value);
+ return set_pinentry_prompt (ctrl, PIN_ADMIN_PROMPT, value);
}
return 0;