[Spice-devel] [PATCH libcacard] options: add use_hw=removable
Marc-André Lureau
marcandre.lureau at gmail.com
Mon Aug 6 11:08:10 UTC 2018
Hi
On Mon, Aug 6, 2018 at 12:53 PM, Jakub Jelen <jjelen at redhat.com> wrote:
> On Fri, 2018-08-03 at 12:40 +0200, marcandre.lureau at redhat.com wrote:
>> 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);
>
> Is this strip really needed? After the else, we are skipping any non-
> blank characters so this is practically noop.
You are right it is not strictly required, I can remove it. The
vcard_emul_options() is pretty awful, there is a comment above saying
that we should use some existing argument parsing library...
diff --git a/src/vcard_emul_nss.c b/src/vcard_emul_nss.c
index 99da091..7dd0918 100644
--- a/src/vcard_emul_nss.c
+++ b/src/vcard_emul_nss.c
@@ -1288,12 +1288,12 @@ vcard_emul_options(const char *args)
}
} else if (strncmp(args, "nssemul", 7) == 0) {
opts->hw_card_type = VCARD_EMUL_CAC;
- opts->use_hw = PR_TRUE;
+ opts->use_hw = USE_HW_YES;
args = find_blank(args + 7);
#if defined(ENABLE_PCSC)
} else if (strncmp(args, "passthru", 8) == 0) {
opts->hw_card_type = VCARD_EMUL_PASSTHRU;
- opts->use_hw = PR_TRUE;
+ opts->use_hw = USE_HW_YES;
args = find_blank(args + 8);
#endif
} else {
>
>> } else {
>> - opts->use_hw = PR_TRUE;
>> + opts->use_hw = USE_HW_YES;
>> }
>> args = find_blank(args);
>> /* hw_type= */
>
> Otherwise it looks fine.
ack with the above changes?
--
Marc-André Lureau
More information about the Spice-devel
mailing list