diff options
author | Werner Koch <[email protected]> | 2019-01-21 13:06:51 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-01-22 09:14:55 +0000 |
commit | d4082ff430afe670510d2c1c7ea66ee9ddcbe505 (patch) | |
tree | 24c59a9d37505e94b772f3eba252adf16bc4eb7a /scd/command.c | |
parent | scd: One new and one improved 7816 function. (diff) | |
download | gnupg-d4082ff430afe670510d2c1c7ea66ee9ddcbe505.tar.gz gnupg-d4082ff430afe670510d2c1c7ea66ee9ddcbe505.zip |
scd: Add option --clear to PASSWD.
* scd/command.c (cmd_passwd): Add option --clear.
(send_status_printf): New.
* scd/app-common.h (APP_CHANGE_FLAG_CLEAR): New.
* scd/app-nks.c (do_change_pin): Return an error if that option is
used.
* scd/app-openpgp.c (do_change_pin): Ditto.
--
Card application may support this option to clear the PIN verification
status of a specific PIN.
Signed-off-by: Werner Koch <[email protected]>
(cherry picked from commit 29929e65521279eabc98a67c766fe485057405a9)
Diffstat (limited to '')
-rw-r--r-- | scd/command.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/scd/command.c b/scd/command.c index 8fa4b381c..ec6793a5f 100644 --- a/scd/command.c +++ b/scd/command.c @@ -1192,12 +1192,13 @@ cmd_random (assuan_context_t ctx, char *line) static const char hlp_passwd[] = - "PASSWD [--reset] [--nullpin] <chvno>\n" + "PASSWD [--reset] [--nullpin] [--clear] <chvno>\n" "\n" "Change the PIN or, if --reset is given, reset the retry counter of\n" "the card holder verification vector CHVNO. The option --nullpin is\n" - "used for TCOS cards to set the initial PIN. The format of CHVNO\n" - "depends on the card application."; + "used for TCOS cards to set the initial PIN. The option --clear clears\n" + "the security status associated with the PIN so that the PIN needs to\n" + "be presented again. The format of CHVNO depends on the card application."; static gpg_error_t cmd_passwd (assuan_context_t ctx, char *line) { @@ -1210,6 +1211,8 @@ cmd_passwd (assuan_context_t ctx, char *line) flags |= APP_CHANGE_FLAG_RESET; if (has_option (line, "--nullpin")) flags |= APP_CHANGE_FLAG_NULLPIN; + if (has_option (line, "--clear")) + flags |= APP_CHANGE_FLAG_CLEAR; line = skip_options (line); @@ -1220,6 +1223,11 @@ cmd_passwd (assuan_context_t ctx, char *line) line++; *line = 0; + /* Do not allow other flags aside of --clear. */ + if ((flags & APP_CHANGE_FLAG_CLEAR) && (flags & ~APP_CHANGE_FLAG_CLEAR)) + return set_error (GPG_ERR_UNSUPPORTED_OPERATION, + "--clear used with other options"); + if ((rc = open_card (ctrl))) return rc; @@ -1899,6 +1907,26 @@ send_status_direct (ctrl_t ctrl, const char *keyword, const char *args) } +/* This status functions expects a printf style format string. No + * filtering of the data is done instead the orintf formatted data is + * send using assuan_send_status. */ +gpg_error_t +send_status_printf (ctrl_t ctrl, const char *keyword, const char *format, ...) +{ + gpg_error_t err; + va_list arg_ptr; + assuan_context_t ctx; + + if (!ctrl || !ctrl->server_local || !(ctx = ctrl->server_local->assuan_ctx)) + return 0; + + va_start (arg_ptr, format); + err = vprint_assuan_status (ctx, keyword, format, arg_ptr); + va_end (arg_ptr); + return err; +} + + void popup_prompt (void *opaque, int on) { |