Improve t-getslotinfo, t-getslotlist and t-opensession
authorWerner Koch <wk@gnupg.org>
Wed, 13 Feb 2019 16:20:46 +0000 (17:20 +0100)
committerWerner Koch <wk@gnupg.org>
Wed, 13 Feb 2019 16:34:32 +0000 (17:34 +0100)
* tests/t-getslotinfo.c: Replace bool by int and include string.h.
(PGM): New.
(main): Add argument parsing and provide a loop options.  Don't use a
delay if --loop is not used.  Do not pass 0 to malloc.
* tests/t-getslotlist.c: Likewise but no --loop option.
* tests/t-opensession.c: Likewise but no options.

Signed-off-by: Werner Koch <wk@gnupg.org>
src/p11-getslotlist.c
tests/t-getslotinfo.c
tests/t-getslotlist.c
tests/t-opensession.c

index 79bab9e..d494ed9 100644 (file)
 #include "locking.h"
 #include "slots.h"
 
-\f
+
+/* Return the list of available slots.  With TOKENPRESENT set only
+ * slots with a present tokens are returned.  If PSLOTLIST is NULL the
+ * function only counts the number of slots and stores that number at
+ * PULCOUNT.  Further this also updates the inetrnal state and thus
+ * this needs to be called to check for new devices.  If PSLOTLIST is
+ * not NULL it must point to an array which receives the slot
+ * information.  PULCOUNT must point to a variable which initially
+ * holds the number of allocated slot items and will be updated on
+ * return to the stored number of slot items.
+ */
 CK_RV CK_SPEC
 C_GetSlotList (CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList,
                CK_ULONG_PTR pulCount)
index 576d313..f63ad9a 100644 (file)
@@ -2,7 +2,7 @@
    Copyright (C) 2006, 2008 g10 Code GmbH
 
    This file is part of Scute.
+
    Scute is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    exception statement from your version.  */
 
 #include <stdio.h>
-#include <stdbool.h>
+#include <string.h>
 
+#define PGM "t-getslotinfo"
 #include "t-support.h"
 
+
+
 int
 main (int argc, char *argv[])
 {
+  int last_argc = -1;
   CK_RV err;
-  bool token = false;
+  int loop = 0;
+  int token = 0;
   CK_SLOT_ID_PTR slots;
   CK_ULONG slots_count;
   unsigned int i;
 
-  (void) argv;
-
-  if (argc > 1)
-    token = true;
+  if (argc)
+    { argc--; argv++; }
+  while (argc && last_argc != argc )
+    {
+      last_argc = argc;
+      if (!strcmp (*argv, "--"))
+        {
+          argc--; argv++;
+          break;
+        }
+      else if (!strcmp (*argv, "--help"))
+        {
+          fputs ("usage: " PGM " [options]\n"
+                 "Options:\n"
+                 "  --loop N        Run N times with a 2 second delay.\n"
+                 "  --token         Only present tokens\n",
+                 stdout);
+          exit (0);
+        }
+      else if (!strcmp (*argv, "--loop"))
+        {
+          argc--; argv++;
+          if (argc)
+            {
+              loop = atoi (*argv);
+              argc--; argv++;
+            }
+        }
+      else if (!strcmp (*argv, "--token"))
+        {
+          argc--; argv++;
+          token = 1;
+        }
+      else if (!strncmp (*argv, "--", 2))
+        {
+          fprintf (stderr, "unknown option '%s'\n", *argv);
+          exit (1);
+        }
+    }
 
   init_cryptoki ();
 
@@ -53,6 +93,9 @@ main (int argc, char *argv[])
 
   printf ("Number of slots%s: %lu\n", token ? " (with tokens)" : "",
          slots_count);
+  if (!slots_count)
+    return 0;  /* Nothing to do.  */
+
   slots = malloc (sizeof (CK_SLOT_ID) * slots_count);
   if (!slots)
     fail_if_err (CKR_HOST_MEMORY);
@@ -60,8 +103,7 @@ main (int argc, char *argv[])
   err = C_GetSlotList (token, slots, &slots_count);
   fail_if_err (err);
 
-  //  while (1)
-    {
+ again:
   for (i = 0; i < slots_count; i++)
     {
       CK_SLOT_INFO info;
@@ -76,7 +118,7 @@ main (int argc, char *argv[])
       printf ("    Flags: %#lx", info.flags);
       if (info.flags)
        {
-         bool any = false;
+         int any = 0;
          CK_FLAGS xflags;
 
          xflags = info.flags & ~(CKF_TOKEN_PRESENT | CKF_REMOVABLE_DEVICE
@@ -85,17 +127,17 @@ main (int argc, char *argv[])
          if (info.flags & CKF_TOKEN_PRESENT)
            {
              printf ("TOKEN_PRESENT");
-             any = true;
+             any = 1;
            }
          if (info.flags & CKF_REMOVABLE_DEVICE)
            {
              printf ("%sREMOVABLE_DEVICE", any ? " | " : "");
-             any = true;
+             any = 1;
            }
          if (info.flags & CKF_HW_SLOT)
            {
              printf ("%sHW_SLOT", any ? " | " : "");
-             any = true;
+              any = 1;
            }
          if (xflags)
            printf ("%s%#lx", any ? " | " : "", xflags);
@@ -107,11 +149,17 @@ main (int argc, char *argv[])
       printf ("    Firmware version: %i.%i\n", info.firmwareVersion.major,
              info.firmwareVersion.minor);
     }
+
+  if (loop > 0)
+    loop--;
+  if (loop)
+    {
 #ifdef WIN32
-  _sleep (2);
+      _sleep (2);
 #else
-  sleep (2);
+      sleep (2);  /* Why? */
 #endif
+      goto again;
     }
 
   return 0;
index 17ad3e3..1256b4c 100644 (file)
@@ -2,7 +2,7 @@
    Copyright (C) 2006 g10 Code GmbH
 
    This file is part of Scute.
+
    Scute is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    exception statement from your version.  */
 
 #include <stdio.h>
-#include <stdbool.h>
+#include <string.h>
 
+#define PGM "t-getslotlist"
 #include "t-support.h"
 
 int
 main (int argc, char *argv[])
 {
+  int last_argc = -1;
   CK_RV err;
-  bool token = false;
+  int token = 0;
   CK_SLOT_ID_PTR slots;
   CK_ULONG slots_count;
   unsigned int i;
 
-  (void) argc;
-  (void) argv;
+  if (argc)
+    { argc--; argv++; }
+  while (argc && last_argc != argc )
+    {
+      last_argc = argc;
+      if (!strcmp (*argv, "--"))
+        {
+          argc--; argv++;
+          break;
+        }
+      else if (!strcmp (*argv, "--help"))
+        {
+          fputs ("usage: " PGM " [options]\n"
+                 "Options:\n"
+                 "  --token         Only present tokens\n",
+                 stdout);
+          exit (0);
+        }
+      else if (!strcmp (*argv, "--token"))
+        {
+          argc--; argv++;
+          token = 1;
+        }
+      else if (!strncmp (*argv, "--", 2))
+        {
+          fprintf (stderr, "unknown option '%s'\n", *argv);
+          exit (1);
+        }
+    }
 
-  if (argc > 1)
-    token = true;
 
   init_cryptoki ();
 
@@ -54,6 +81,9 @@ main (int argc, char *argv[])
 
   printf ("Number of slots%s: %lu\n", token ? " (with tokens)" : "",
          slots_count);
+  if (!slots_count)
+    return 0;
+
   slots = malloc (sizeof (CK_SLOT_ID) * slots_count);
   if (!slots)
     fail_if_err (CKR_HOST_MEMORY);
index 77d86fe..9258c8b 100644 (file)
@@ -2,7 +2,7 @@
    Copyright (C) 2006 g10 Code GmbH
 
    This file is part of Scute.
+
    Scute is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    exception statement from your version.  */
 
 #include <stdio.h>
-#include <stdbool.h>
+#include <string.h>
 
+#define PGM "t-opensession"
 #include "t-support.h"
 
 
 int
 main (int argc, char *argv[])
 {
+  int last_argc = -1;
   CK_RV err;
   CK_SLOT_ID_PTR slots;
   CK_SESSION_HANDLE_PTR sessions;
   CK_ULONG slots_count;
   unsigned int i;
 
-  (void) argc;
-  (void) argv;
+  if (argc)
+    { argc--; argv++; }
+  while (argc && last_argc != argc )
+    {
+      last_argc = argc;
+      if (!strcmp (*argv, "--"))
+        {
+          argc--; argv++;
+          break;
+        }
+      else if (!strcmp (*argv, "--help"))
+        {
+          fputs ("usage: " PGM " [options]\n"
+                 "No Options\n",
+                 stdout);
+          exit (0);
+        }
+      else if (!strncmp (*argv, "--", 2))
+        {
+          fprintf (stderr, "unknown option '%s'\n", *argv);
+          exit (1);
+        }
+    }
 
   init_cryptoki ();
 
-  err = C_GetSlotList (true, NULL, &slots_count);
+  err = C_GetSlotList (1, NULL, &slots_count);
   fail_if_err (err);
 
   if (slots_count == 0)
@@ -57,6 +80,7 @@ main (int argc, char *argv[])
     }
 
   printf ("Number of slots with tokens: %lu\n", slots_count);
+
   slots = malloc (sizeof (CK_SLOT_ID) * slots_count);
   if (!slots)
     fail_if_err (CKR_HOST_MEMORY);
@@ -65,7 +89,7 @@ main (int argc, char *argv[])
   if (!sessions)
     fail_if_err (CKR_HOST_MEMORY);
 
-  err = C_GetSlotList (true, slots, &slots_count);
+  err = C_GetSlotList (1, slots, &slots_count);
   fail_if_err (err);
 
   for (i = 0; i < slots_count; i++)