aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scd/app-openpgp.c97
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;
}