diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index cbad3be5f..f1f9bf465 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -1073,6 +1073,7 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) { "UIF-1", 0x00D6, 0 }, { "UIF-2", 0x00D7, 0 }, { "UIF-3", 0x00D8, 0 }, + { "UIF", 0x0000, -9 }, /* Shortcut for all UIF */ { "KDF", 0x00F9, 5 }, { "MANUFACTURER", 0x0000, -8 }, { NULL, 0 } @@ -1171,6 +1172,15 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) app->app_local->manufacturer, get_manufacturer (app->app_local->manufacturer)); } + if (table[idx].special == -9) + { + rc = do_getattr (app, ctrl, "UIF-1"); + if (!rc) + rc = do_getattr (app, ctrl, "UIF-2"); + if (!rc) + rc = do_getattr (app, ctrl, "UIF-3"); + return rc; + } relptr = get_one_do (app, table[idx].tag, &value, &valuelen, &rc); if (relptr) @@ -2072,18 +2082,14 @@ do_learn_status (app_t app, ctrl_t ctrl, unsigned int flags) err = do_getattr (app, ctrl, "CHV-STATUS"); if (!err) err = do_getattr (app, ctrl, "SIG-COUNTER"); - if (!err) - err = do_getattr (app, ctrl, "UIF-1"); - if (!err) - err = do_getattr (app, ctrl, "UIF-2"); - if (!err) - err = do_getattr (app, ctrl, "UIF-3"); - if (app->app_local->extcap.private_dos) + 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 (!err && app->app_local->extcap.private_dos) { if (!err)