CK_TOKEN_INFO token;
CK_ATTRIBUTE *attrs;
char *pin_source;
+ char *pin_value;
};
static char *
return uri->unrecognized;
}
+/**
+ * p11_kit_uri_get_pin_value:
+ * @uri: The URI
+ *
+ * Get the 'pin-value' part of the URI. This is used by some applications to
+ * read the PIN for logging into a PKCS\#11 token.
+ *
+ * Returns: The pin-value or %NULL if not present.
+ */
+const char*
+p11_kit_uri_get_pin_value (P11KitUri *uri)
+{
+ return_val_if_fail (uri != NULL, NULL);
+ return uri->pin_value;
+}
+
+/**
+ * p11_kit_uri_set_pin_value:
+ * @uri: The URI
+ * @pin: The new pin-value
+ *
+ * Set the 'pin-value' part of the URI. This is used by some applications to
+ * specify the PIN for logging into a PKCS\#11 token.
+ */
+void
+p11_kit_uri_set_pin_value (P11KitUri *uri, const char *pin)
+{
+ return_if_fail (uri != NULL);
+ free (uri->pin_value);
+ uri->pin_value = pin ? strdup (pin) : NULL;
+}
+
+
/**
* p11_kit_uri_get_pin_source:
* @uri: The URI
}
}
+ if (uri->pin_value) {
+ if (!format_encode_string (&buffer, &is_first, "pin-value",
+ (const unsigned char*)uri->pin_value,
+ strlen (uri->pin_value), 0)) {
+ return_val_if_reached (P11_KIT_URI_UNEXPECTED);
+ }
+ }
+
return_val_if_fail (p11_buffer_ok (&buffer), P11_KIT_URI_UNEXPECTED);
*string = p11_buffer_steal (&buffer, NULL);
return P11_KIT_URI_OK;
free (uri->pin_source);
uri->pin_source = (char*)pin_source;
return 1;
+ } else if (strcmp (name, "pin-value") == 0) {
+ pin_source = p11_url_decode (start, end, P11_URL_WHITESPACE, NULL);
+ if (pin_source == NULL)
+ return P11_KIT_URI_BAD_ENCODING;
+ free (uri->pin_value);
+ uri->pin_value = (char*)pin_source;
+ return 1;
}
return 0;
uri->unrecognized = 0;
free (uri->pin_source);
uri->pin_source = NULL;
+ free (uri->pin_value);
+ uri->pin_value = NULL;
for (;;) {
spos = strchr (string, ';');
p11_attrs_free (uri->attrs);
free (uri->pin_source);
+ free (uri->pin_value);
free (uri);
}