From 8e3dee05854727221cef7c06d2ab612a64bc4b6b Mon Sep 17 00:00:00 2001 From: sth Date: Tue, 23 Aug 2005 09:01:57 +0000 Subject: [PATCH] Added set_userpin_ref() to link a PIN value to a PIN ref for an existing user PIN git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2512 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/tools/pkcs15-init.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/tools/pkcs15-init.c b/src/tools/pkcs15-init.c index c3d024ba..c10e348d 100644 --- a/src/tools/pkcs15-init.c +++ b/src/tools/pkcs15-init.c @@ -101,6 +101,7 @@ static int do_read_certificate(const char *, const char *, X509 **); static void parse_commandline(int argc, char **argv); static void read_options_file(const char *); static void ossl_print_errors(void); +static void set_userpin_ref(); enum { @@ -1074,6 +1075,8 @@ do_delete_objects(struct sc_profile *profile, unsigned int opt_delete_flags) { int r, count = 0; + set_userpin_ref(); + if (opt_delete_flags & SC_PKCS15INIT_DEL_DATA) { struct sc_object_id app_oid; sc_pkcs15_object_t *obj; @@ -2013,6 +2016,26 @@ parse_delete_flags(const char *list) return res; } +/* If the user PIN and it's ID is given, put the pin ref in the keycache */ +static void set_userpin_ref() +{ + int r; + + if ((opt_pins[0] != NULL) && (opt_authid != 0)) { + sc_path_t path; + sc_pkcs15_id_t auth_id; + sc_pkcs15_object_t *pinobj; + sc_pkcs15_pin_info_t *pin_info; + sc_format_path("3F00", &path); + sc_pkcs15_format_id(opt_authid, &auth_id); + r = sc_pkcs15_find_pin_by_auth_id(p15card, &auth_id, &pinobj); + if (r < 0) + fatal("Searching for user PIN %d failed: %s\n", opt_authid, sc_strerror(r)); + pin_info = (sc_pkcs15_pin_info_t *) pinobj->data; + sc_keycache_set_pin_name(&path, pin_info->reference, SC_PKCS15INIT_USER_PIN); + } +} + /* * Parse X.509 key usage list */