diff options
author | NIIBE Yutaka <[email protected]> | 2020-09-30 01:48:49 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2020-09-30 01:48:49 +0000 |
commit | 862d9c6face9b4ad61f6e59bf1ba9b5f5d05c58c (patch) | |
tree | 22cc87e99eb343d0ce5e9132c1d94822c5b34994 | |
parent | scd: Internal CCID driver fix. (diff) | |
download | gnupg-862d9c6face9b4ad61f6e59bf1ba9b5f5d05c58c.tar.gz gnupg-862d9c6face9b4ad61f6e59bf1ba9b5f5d05c58c.zip |
scd: Report any error for LEARN command.
* scd/app-openpgp.c (do_learn_status): Report any error.
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | scd/app-openpgp.c | 97 |
1 files changed, 67 insertions, 30 deletions
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index c631383c0..a6c39ed68 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -2101,40 +2101,77 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key) static gpg_error_t do_learn_status (app_t app, ctrl_t ctrl, unsigned int flags) { + gpg_error_t err = 0; + (void)flags; - do_getattr (app, ctrl, "EXTCAP"); - do_getattr (app, ctrl, "MANUFACTURER"); - do_getattr (app, ctrl, "DISP-NAME"); - do_getattr (app, ctrl, "DISP-LANG"); - do_getattr (app, ctrl, "DISP-SEX"); - do_getattr (app, ctrl, "PUBKEY-URL"); - do_getattr (app, ctrl, "LOGIN-DATA"); - do_getattr (app, ctrl, "KEY-FPR"); - if (app->appversion > 0x0100) - do_getattr (app, ctrl, "KEY-TIME"); - do_getattr (app, ctrl, "CA-FPR"); - do_getattr (app, ctrl, "CHV-STATUS"); - do_getattr (app, ctrl, "SIG-COUNTER"); - if (app->app_local->extcap.kdf_do) - do_getattr (app, ctrl, "KDF"); - if (app->app_local->extcap.has_button) - do_getattr (app, ctrl, "UIF"); - if (app->app_local->extcap.private_dos) - { - do_getattr (app, ctrl, "PRIVATE-DO-1"); - do_getattr (app, ctrl, "PRIVATE-DO-2"); - if (app->did_chv2) - do_getattr (app, ctrl, "PRIVATE-DO-3"); - if (app->did_chv3) - do_getattr (app, ctrl, "PRIVATE-DO-4"); - } - send_keypair_info (app, ctrl, 1); - send_keypair_info (app, ctrl, 2); - send_keypair_info (app, ctrl, 3); + err = do_getattr (app, ctrl, "EXTCAP"); + if (!err) + err = do_getattr (app, ctrl, "MANUFACTURER"); + if (!err) + err = do_getattr (app, ctrl, "DISP-NAME"); + if (!err) + err = do_getattr (app, ctrl, "DISP-LANG"); + if (!err) + err = do_getattr (app, ctrl, "DISP-SEX"); + if (!err) + err = do_getattr (app, ctrl, "PUBKEY-URL"); + if (!err) + err = do_getattr (app, ctrl, "LOGIN-DATA"); + if (!err) + err = do_getattr (app, ctrl, "KEY-FPR"); + if (!err && app->appversion > 0x0100) + err = do_getattr (app, ctrl, "KEY-TIME"); + if (!err) + err = do_getattr (app, ctrl, "CA-FPR"); + if (!err) + err = do_getattr (app, ctrl, "CHV-STATUS"); + if (!err) + err = do_getattr (app, ctrl, "SIG-COUNTER"); + if (!err && app->app_local->extcap.kdf_do) + { + err = do_getattr (app, ctrl, "KDF"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + } + if (!err && app->app_local->extcap.has_button) + err = do_getattr (app, ctrl, "UIF"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err && app->app_local->extcap.private_dos) + { + if (!err) + err = do_getattr (app, ctrl, "PRIVATE-DO-1"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err) + err = do_getattr (app, ctrl, "PRIVATE-DO-2"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err && app->did_chv2) + err = do_getattr (app, ctrl, "PRIVATE-DO-3"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err && app->did_chv3) + err = do_getattr (app, ctrl, "PRIVATE-DO-4"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + } + if (!err) + err = send_keypair_info (app, ctrl, 1); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err) + err = send_keypair_info (app, ctrl, 2); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err) + err = send_keypair_info (app, ctrl, 3); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; /* Note: We do not send the Cardholder Certificate, because that is relatively long and for OpenPGP applications not really needed. */ - return 0; + return err; } |