aboutsummaryrefslogtreecommitdiffstats
path: root/scd/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'scd/command.c')
-rw-r--r--scd/command.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/scd/command.c b/scd/command.c
index b9303b546..0f0c6c9df 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -538,13 +538,19 @@ cmd_learn (assuan_context_t ctx, char *line)
int only_keypairinfo = has_option (line, "--keypairinfo");
int opt_multi = has_option (line, "--multi");
int opt_reread = has_option (line, "--reread");
+ int opt_force = has_option (line, "--force");
unsigned int flags;
card_t card;
+ const char *keygrip = NULL;
if ((rc = open_card (ctrl)))
return rc;
- card = card_get (ctrl, NULL);
+ line = skip_options (line);
+ if (strlen (line) == 40)
+ keygrip = line;
+
+ card = card_get (ctrl, keygrip);
if (!card)
return gpg_error (GPG_ERR_CARD_NOT_PRESENT);
@@ -581,7 +587,7 @@ cmd_learn (assuan_context_t ctx, char *line)
return out_of_core ();
}
- if (!has_option (line, "--force"))
+ if (!opt_force)
{
char *command;