summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStef Walter <stefw@collabora.co.uk>2011-02-21 20:44:42 +0100
committerStef Walter <stefw@collabora.co.uk>2011-02-21 20:44:42 +0100
commit25cbc9b3293f2c6df38bd0528b89101e5e547321 (patch)
tree18c661c0bcbe9a8781a9aa1ca5904a39865ec279
parentff7db14f0acae463165377f2d4b999e566298b40 (diff)
Add uri function for listing which attribute types are present.
-rw-r--r--module/p11-kit-uri.c24
-rw-r--r--module/p11-kit-uri.h3
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);