core: Prepare for new key listing data send by gpg.
[gpgme.git] / tests / run-genkey.c
index 3b64502..91edb22 100644 (file)
@@ -14,7 +14,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * License along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 /* We need to include config.h so that we know whether we are building
@@ -199,9 +199,17 @@ parse_usage_string (const char *string)
 static int
 show_usage (int ex)
 {
-  fputs ("usage: " PGM " [options] USERID [ALGO [USAGE [EXPIRESECONDS]]]\n\n"
+  fputs ("usage: " PGM " [options] ARGS\n"
+         "         args: USERID [ALGO [USAGE [EXPIRESECONDS]]]\n"
+         "   for addkey: FPR    [ALGO [USAGE [EXPIRESECONDS]]]\n"
+         "   for adduid: FPR    USERID\n"
+         "   for revuid: FPR    USERID\n"
+         "   for set-primary: FPR    USERID\n"
          "Options:\n"
-         "  --addkey         add a subkey to the key with USERID\n"
+         "  --addkey         add a subkey to the key with FPR\n"
+         "  --adduid         add a user id to the key with FPR\n"
+         "  --revuid         revoke a user id from the key with FPR\n"
+         "  --set-primary    set the primary key flag on USERID\n"
          "  --verbose        run in verbose mode\n"
          "  --status         print status lines from the backend\n"
          "  --progress       print progress info\n"
@@ -226,8 +234,12 @@ main (int argc, char **argv)
   int print_progress = 0;
   int use_loopback = 0;
   int addkey = 0;
+  int adduid = 0;
+  int revuid = 0;
+  int setpri = 0;
   const char *userid;
   const char *algo = NULL;
+  const char *newuserid = NULL;
   unsigned int flags = 0;
   unsigned long expire = 0;
   gpgme_genkey_result_t result;
@@ -248,6 +260,33 @@ main (int argc, char **argv)
       else if (!strcmp (*argv, "--addkey"))
         {
           addkey = 1;
+          adduid = 0;
+          revuid = 0;
+          setpri = 0;
+          argc--; argv++;
+        }
+      else if (!strcmp (*argv, "--adduid"))
+        {
+          addkey = 0;
+          adduid = 1;
+          revuid = 0;
+          setpri = 0;
+          argc--; argv++;
+        }
+      else if (!strcmp (*argv, "--revuid"))
+        {
+          addkey = 0;
+          adduid = 0;
+          revuid = 1;
+          setpri = 0;
+          argc--; argv++;
+        }
+      else if (!strcmp (*argv, "--set-primary"))
+        {
+          addkey = 0;
+          adduid = 0;
+          revuid = 0;
+          setpri = 1;
           argc--; argv++;
         }
       else if (!strcmp (*argv, "--verbose"))
@@ -294,15 +333,25 @@ main (int argc, char **argv)
         show_usage (1);
     }
 
-  if (!argc || argc > 4)
-    show_usage (1);
-  userid = argv[0];
-  if (argc > 1)
-    algo = argv[1];
-  if (argc > 2)
-    flags |= parse_usage_string (argv[2]);
-  if (argc > 3)
-    expire = parse_expire_string (argv[3]);
+  if (adduid || revuid || setpri)
+    {
+      if (argc != 2)
+        show_usage (1);
+      userid = argv[0];
+      newuserid = argv[1];
+    }
+  else
+    {
+      if (!argc || argc > 4)
+        show_usage (1);
+      userid = argv[0];
+      if (argc > 1)
+        algo = argv[1];
+      if (argc > 2)
+        flags |= parse_usage_string (argv[2]);
+      if (argc > 3)
+        expire = parse_expire_string (argv[3]);
+    }
 
   init_gpgme (protocol);
 
@@ -323,7 +372,7 @@ main (int argc, char **argv)
       gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
     }
 
-  if (addkey)
+  if (addkey || adduid || revuid || setpri)
     {
       gpgme_key_t akey;
 
@@ -335,12 +384,45 @@ main (int argc, char **argv)
           exit (1);
         }
 
-      err = gpgme_op_createsubkey (ctx, akey, algo, 0, expire, flags);
-      if (err)
+      if (addkey)
         {
-          fprintf (stderr, PGM ": gpgme_op_createsubkey failed: %s\n",
-                   gpg_strerror (err));
-          exit (1);
+          err = gpgme_op_createsubkey (ctx, akey, algo, 0, expire, flags);
+          if (err)
+            {
+              fprintf (stderr, PGM ": gpgme_op_createsubkey failed: %s\n",
+                       gpg_strerror (err));
+              exit (1);
+            }
+        }
+      else if (adduid)
+        {
+          err = gpgme_op_adduid (ctx, akey, newuserid, flags);
+          if (err)
+            {
+              fprintf (stderr, PGM ": gpgme_op_adduid failed: %s\n",
+                       gpg_strerror (err));
+              exit (1);
+            }
+        }
+      else if (revuid)
+        {
+          err = gpgme_op_revuid (ctx, akey, newuserid, flags);
+          if (err)
+            {
+              fprintf (stderr, PGM ": gpgme_op_revuid failed: %s\n",
+                       gpg_strerror (err));
+              exit (1);
+            }
+        }
+      else if (setpri)
+        {
+          err = gpgme_op_set_uid_flag (ctx, akey, newuserid, "primary", NULL);
+          if (err)
+            {
+              fprintf (stderr, PGM ": gpgme_op_set_uid_flag failed: %s\n",
+                       gpg_strerror (err));
+              exit (1);
+            }
         }
       gpgme_key_unref (akey);
     }
@@ -355,24 +437,29 @@ main (int argc, char **argv)
         }
     }
 
-  result = gpgme_op_genkey_result (ctx);
-  if (!result)
+  if (!setpri)
     {
-      fprintf (stderr, PGM": gpgme_op_genkey_result returned NULL\n");
-      exit (1);
-    }
+      result = gpgme_op_genkey_result (ctx);
+      if (!result)
+        {
+          fprintf (stderr, PGM": gpgme_op_genkey_result returned NULL\n");
+          exit (1);
+        }
 
-  printf ("Generated key: %s (%s)\n",
-          result->fpr ? result->fpr : "none",
-         result->primary ? (result->sub ? "primary, sub" : "primary")
-          /**/           : (result->sub ? "sub" : "none"));
-
-  if (result->fpr && strlen (result->fpr) < 40)
-    fprintf (stderr, PGM": generated key has unexpected fingerprint\n");
-  if (!result->primary)
-    fprintf (stderr, PGM": primary key was not generated\n");
-  if (!result->sub)
-    fprintf (stderr, PGM": sub key was not generated\n");
+      printf ("Generated key: %s (%s)\n",
+              result->fpr ? result->fpr : "none",
+              result->primary ? (result->sub ? "primary, sub" : "primary")
+              /**/            : (result->sub ? "sub" : "none"));
+
+      if (result->fpr && strlen (result->fpr) < 40)
+        fprintf (stderr, PGM": generated key has unexpected fingerprint\n");
+      if (!result->primary)
+        fprintf (stderr, PGM": primary key was not generated\n");
+      if (!result->sub)
+        fprintf (stderr, PGM": sub key was not generated\n");
+      if (!result->uid)
+        fprintf (stderr, PGM": uid was not generated\n");
+    }
 
   gpgme_release (ctx);
   return 0;