From e8f6a3e407c289448c6e9823d3e353c352a5f293 Mon Sep 17 00:00:00 2001 From: vtarasov Date: Mon, 11 Apr 2011 13:00:57 +0000 Subject: [PATCH] pkcs11-tool: now it's possible to show only the objects of a given type ... when 'type' option is used with the 'list-objects' actions git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5325 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/tools/pkcs11-tool.c | 47 +++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/tools/pkcs11-tool.c b/src/tools/pkcs11-tool.c index d6f8ac28..91dc6200 100644 --- a/src/tools/pkcs11-tool.c +++ b/src/tools/pkcs11-tool.c @@ -234,7 +234,7 @@ static void show_cryptoki_info(void); static void list_slots(int, int, int); static void show_token(CK_SLOT_ID); static void list_mechs(CK_SLOT_ID); -static void list_objects(CK_SESSION_HANDLE); +static void list_objects(CK_SESSION_HANDLE, CK_OBJECT_CLASS); static int login(CK_SESSION_HANDLE, int); static void init_token(CK_SLOT_ID); static void init_pin(CK_SLOT_ID, CK_SESSION_HANDLE); @@ -662,7 +662,7 @@ int main(int argc, char * argv[]) } if (do_list_objects) - list_objects(session); + list_objects(session, opt_object_class); if (do_sign) sign_data(opt_slot, session, object); @@ -917,27 +917,6 @@ static void list_mechs(CK_SLOT_ID slot) } } -static void list_objects(CK_SESSION_HANDLE sess) -{ - CK_OBJECT_HANDLE object; - CK_ULONG count; - CK_RV rv; - - rv = p11->C_FindObjectsInit(sess, NULL, 0); - if (rv != CKR_OK) - p11_fatal("C_FindObjectsInit", rv); - - while (1) { - rv = p11->C_FindObjects(sess, &object, 1, &count); - if (rv != CKR_OK) - p11_fatal("C_FindObjects", rv); - if (count == 0) - break; - show_object(sess, object); - } - p11->C_FindObjectsFinal(sess); -} - static int login(CK_SESSION_HANDLE session, int login_type) { char *pin = NULL; @@ -2002,6 +1981,28 @@ VARATTR_METHOD(GOSTR3410_PARAMS, unsigned char); VARATTR_METHOD(EC_POINT, unsigned char); VARATTR_METHOD(EC_PARAMS, unsigned char); +static void list_objects(CK_SESSION_HANDLE sess, CK_OBJECT_CLASS object_class) +{ + CK_OBJECT_HANDLE object; + CK_ULONG count; + CK_RV rv; + + rv = p11->C_FindObjectsInit(sess, NULL, 0); + if (rv != CKR_OK) + p11_fatal("C_FindObjectsInit", rv); + + while (1) { + rv = p11->C_FindObjects(sess, &object, 1, &count); + if (rv != CKR_OK) + p11_fatal("C_FindObjects", rv); + if (count == 0) + break; + if (object_class == -1 || object_class == getCLASS(sess, object)) + show_object(sess, object); + } + p11->C_FindObjectsFinal(sess); +} + static void show_object(CK_SESSION_HANDLE sess, CK_OBJECT_HANDLE obj) { CK_OBJECT_CLASS cls = getCLASS(sess, obj);