diff options
-rw-r--r-- | module/p11-kit-uri.c | 24 | ||||
-rw-r--r-- | module/p11-kit-uri.h | 3 |
2 files changed, 26 insertions, 1 deletions
diff --git a/module/p11-kit-uri.c b/module/p11-kit-uri.c index 8c65301..7fdb33d 100644 --- a/module/p11-kit-uri.c +++ b/module/p11-kit-uri.c @@ -127,7 +127,7 @@ url_encode (const unsigned char *value, const unsigned char *end, size_t *length while (value != end) { /* These characters we let through verbatim */ - if (isalnum (*value) || strchr ("_-.", *value) != NULL) { + if (*value && (isalnum (*value) || strchr ("_-.", *value) != NULL)) { *(p++) = *(value++); /* All others get encoded */ @@ -256,6 +256,28 @@ p11_kit_uri_match_token_info (P11KitUri *uri, CK_TOKEN_INFO_PTR token_info) sizeof (token_info->serialNumber))); } +CK_ATTRIBUTE_TYPE* +p11_kit_uri_get_attribute_types (P11KitUri *uri, int *n_types) +{ + CK_ATTRIBUTE_TYPE *result; + int i, j; + + assert (uri); + assert (n_types); + + result = calloc (NUM_ATTRS, sizeof (CK_ATTRIBUTE_TYPE)); + if (result == NULL) + return NULL; + + for (i = 0, j = 0; i < NUM_ATTRS; ++i) { + if (uri->attrs[i].ulValueLen != (CK_ULONG)-1) + result[j++] = uri->attrs[i].type; + } + + *n_types = j; + return result; +} + CK_ATTRIBUTE_PTR p11_kit_uri_get_attribute (P11KitUri *uri, CK_ATTRIBUTE_TYPE type) { diff --git a/module/p11-kit-uri.h b/module/p11-kit-uri.h index c5e86bb..209f3d6 100644 --- a/module/p11-kit-uri.h +++ b/module/p11-kit-uri.h @@ -69,6 +69,9 @@ CK_TOKEN_INFO_PTR p11_kit_uri_get_token_info (P11KitUri *uri); int p11_kit_uri_match_token_info (P11KitUri *uri, CK_TOKEN_INFO_PTR token_info); +CK_ATTRIBUTE_TYPE* p11_kit_uri_get_attribute_types (P11KitUri *uri, + int *n_types); + CK_ATTRIBUTE_PTR p11_kit_uri_get_attribute (P11KitUri *uri, CK_ATTRIBUTE_TYPE type); |