[Spice-devel] [PATCH libcacard] options: add use_hw=removable

marcandre.lureau at redhat.com marcandre.lureau at redhat.com
Fri Aug 3 10:40:48 UTC 2018


From: Marc-André Lureau <marcandre.lureau at redhat.com>

use_hw=yes is used to specify that libcacard will lookup pkcs11 slots
that are both removable & hardware.

Let's specify that use_hw=removable will select removable slots
(without hardware requirement).

(use_hw= should eventually be changed/aliased to pk11_slots= or
something else)

Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
---
 src/vcard_emul_nss.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/vcard_emul_nss.c b/src/vcard_emul_nss.c
index 8a56343..99da091 100644
--- a/src/vcard_emul_nss.c
+++ b/src/vcard_emul_nss.c
@@ -77,13 +77,19 @@ struct VirtualReaderOptionsStruct {
     int cert_count;
 };
 
+enum {
+    USE_HW_NO,
+    USE_HW_YES,
+    USE_HW_REMOVABLE,
+};
+
 struct VCardEmulOptionsStruct {
     void *nss_db;
     VirtualReaderOptions *vreader;
     int vreader_count;
     VCardEmulType hw_card_type;
     const char *hw_type_params;
-    PRBool use_hw;
+    int use_hw;
 };
 
 static int nss_emul_init;
@@ -811,7 +817,7 @@ static const VCardEmulOptions default_options = {
     .vreader_count = 0,
     .hw_card_type = VCARD_EMUL_CAC,
     .hw_type_params = "",
-    .use_hw = PR_TRUE
+    .use_hw = USE_HW_YES,
 };
 
 
@@ -1037,7 +1043,8 @@ vcard_emul_init(const VCardEmulOptions *options)
             PK11SlotInfo *slot = module->slots[i];
 
             /* only map removable HW slots */
-            if (slot == NULL || !PK11_IsRemovable(slot) || !PK11_IsHW(slot)) {
+            if (slot == NULL || !PK11_IsRemovable(slot) ||
+                (options->use_hw == USE_HW_YES && !PK11_IsHW(slot))) {
                 continue;
             }
             if (strcmp("E-Gate 0 0", PK11_GetSlotName(slot)) == 0) {
@@ -1235,9 +1242,12 @@ vcard_emul_options(const char *args)
         } else if (strncmp(args, "use_hw=", 7) == 0) {
             args = strip(args+7);
             if (*args == '0' || *args == 'N' || *args == 'n' || *args == 'F') {
-                opts->use_hw = PR_FALSE;
+                opts->use_hw = USE_HW_NO;
+            } else if (strncmp(args, "removable", 9) == 0) {
+                opts->use_hw = USE_HW_REMOVABLE;
+                args = strip(args+9);
             } else {
-                opts->use_hw = PR_TRUE;
+                opts->use_hw = USE_HW_YES;
             }
             args = find_blank(args);
         /* hw_type= */
@@ -1352,7 +1362,7 @@ vcard_emul_usage(void)
    fprintf(stderr,
 "emul args: comma separated list of the following arguments\n"
 " db={nss_database}               (default sql:/etc/pki/nssdb)\n"
-" use_hw=[yes|no]                 (default yes)\n"
+" use_hw=[yes|no|removable]       (default yes)\n"
 " hw_type={card_type_to_emulate}  (default CAC)\n"
 " hw_param={param_for_card}       (default \"\")\n"
 " nssemul                         (alias for use_hw=yes, hw_type=CAC)\n"
@@ -1373,7 +1383,8 @@ vcard_emul_usage(void)
 "\n"
 "Unless use_hw is set to no, all tokens that look like removable hardware\n"
 "tokens will be presented to the guest using the emulator specified by\n"
-"hw_type, and parameters of hw_param.\n"
+"hw_type, and parameters of hw_param. If use_hw is set to 'removable', "
+"present any removable token.\n"
 "\n"
 "If more one or more soft= parameters are specified, these readers will be\n"
 "presented to the guest\n"
-- 
2.18.0.321.gffc6fa0e39



More information about the Spice-devel mailing list