int p11_kit_uri_set_attributes (P11KitUri *uri, CK_ATTRIBUTE_PTR attrs, CK_ULONG n_attrs) { CK_ULONG i; int ret; assert (uri); p11_kit_uri_clear_attributes (uri); for (i = 0; i < n_attrs; i++) { ret = p11_kit_uri_set_attribute (uri, &attrs[i]); if (ret != P11_KIT_URI_OK && ret != P11_KIT_URI_NOT_FOUND) return ret; } return P11_KIT_URI_OK; }
static void test_uri_get_set_attributes (void) { CK_ATTRIBUTE_PTR attrs; CK_OBJECT_CLASS klass; CK_ATTRIBUTE attr; CK_ULONG n_attrs; P11KitUri *uri; int ret; uri = p11_kit_uri_new (); assert_ptr_not_null (uri); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (0, n_attrs); attr.type = CKA_LABEL; attr.pValue = "Test"; attr.ulValueLen = 4; ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 4); assert (memcmp (attrs[0].pValue, "Test", 4) == 0); attr.type = CKA_LABEL; attr.pValue = "Kablooey"; attr.ulValueLen = 8; ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 8); assert (memcmp (attrs[0].pValue, "Kablooey", 8) == 0); klass = CKO_DATA; attr.type = CKA_CLASS; attr.pValue = &klass; attr.ulValueLen = sizeof (klass); ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (2, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 8); assert (memcmp (attrs[0].pValue, "Kablooey", 8) == 0); assert (attrs[1].type == CKA_CLASS); assert (attrs[1].ulValueLen == sizeof (klass)); assert (memcmp (attrs[1].pValue, &klass, sizeof (klass)) == 0); ret = p11_kit_uri_clear_attribute (uri, CKA_LABEL); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_CLASS); assert (attrs[0].ulValueLen == sizeof (klass)); assert (memcmp (attrs[0].pValue, &klass, sizeof (klass)) == 0); attr.type = CKA_LABEL; attr.pValue = "Three"; attr.ulValueLen = 5; ret = p11_kit_uri_set_attributes (uri, &attr, 1); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 5); assert (memcmp (attrs[0].pValue, "Three", 5) == 0); p11_kit_uri_clear_attributes (uri); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (0, n_attrs); p11_kit_uri_free (uri); }