P11KitIterBehavior behavior)
{
P11KitIter *iter;
- CK_ATTRIBUTE *attrs;
- CK_TOKEN_INFO *tinfo;
- CK_INFO *minfo;
- CK_ULONG count;
iter = calloc (1, sizeof (P11KitIter));
return_val_if_fail (iter != NULL, NULL);
return_val_if_fail (iter->modules != NULL, NULL);
iter->want_writable = !!(behavior & P11_KIT_ITER_WANT_WRITABLE);
+ iter->preload_results = !(behavior & P11_KIT_ITER_BUSY_SESSIONS);
+
+ p11_kit_iter_set_uri (iter, uri);
+ return iter;
+}
+
+/**
+ * p11_kit_iter_set_uri:
+ * @iter: the iterator
+ * @uri: (allow-none): a PKCS\#11 URI to filter on, or %NULL
+ *
+ * Set the PKCS\#11 uri for iterator. Only
+ * objects that match the @uri will be returned by the iterator.
+ * Relevant information in @uri is copied, and you need not keep
+ * @uri around.
+ *
+ * If no @uri is specified then the iterator will iterate over all
+ * objects, unless otherwise filtered.
+ *
+ * This function should be called at most once, and should be
+ * called before iterating begins.
+ *
+ */
+void
+p11_kit_iter_set_uri (P11KitIter *iter,
+ P11KitUri *uri)
+{
+ CK_ATTRIBUTE *attrs;
+ CK_TOKEN_INFO *tinfo;
+ CK_INFO *minfo;
+ CK_ULONG count;
+
+ return_if_fail (iter != NULL);
if (uri != NULL) {
}
} else {
/* Match any module version number*/
+ memset (&iter->match_module, 0, sizeof (iter->match_module));
iter->match_module.libraryVersion.major = (CK_BYTE)-1;
iter->match_module.libraryVersion.minor = (CK_BYTE)-1;
}
- iter->preload_results = !(behavior & P11_KIT_ITER_BUSY_SESSIONS);
-
- return iter;
}
/**
finalize_and_free_modules (modules);
}
+static void
+test_set_uri (void)
+{
+ CK_FUNCTION_LIST_PTR *modules;
+ P11KitIter *iter;
+ P11KitUri *uri;
+ CK_RV rv;
+
+ modules = initialize_and_get_modules ();
+
+ uri = p11_kit_uri_new ();
+ p11_kit_uri_set_unrecognized (uri, 1);
+ iter = p11_kit_iter_new (NULL, 0);
+ p11_kit_iter_set_uri (iter, uri);
+ p11_kit_uri_free (uri);
+
+ p11_kit_iter_begin (iter, modules);
+
+ /* Nothing should have matched */
+ rv = p11_kit_iter_next (iter);
+ assert_num_eq (rv, CKR_CANCEL);
+
+ p11_kit_iter_free (iter);
+
+ finalize_and_free_modules (modules);
+}
+
static void
test_filter (void)
{
p11_test (test_all, "/iter/test_all");
p11_test (test_unrecognized, "/iter/test_unrecognized");
p11_test (test_uri_with_type, "/iter/test_uri_with_type");
+ p11_test (test_set_uri, "/iter/set-uri");
p11_test (test_session_flags, "/iter/test_session_flags");
p11_test (test_callback, "/iter/test_callback");
p11_test (test_callback_fails, "/iter/test_callback_fails");