gpg: Remove unused arg from a function.
[gnupg.git] / g10 / gpgcompose.c
index cd5346f..b3f7ecd 100644 (file)
@@ -14,7 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -42,6 +42,11 @@ struct filter
   struct filter *next;
 };
 
+
+/* Hack to ass CTRL to some functions.  */
+static ctrl_t global_ctrl;
+
+
 static struct filter *filters;
 
 static void
@@ -76,7 +81,7 @@ filter_pop (iobuf_t out, int expected_type)
                "but current container is a %s container.\n",
                pkttype_str (f->pkttype), pkttype_str (expected_type));
 
-  if (f->pkttype == PKT_ENCRYPTED || f->pkttype == PKT_ENCRYPTED_MDC)
+  if (f->pkttype == PKT_ENCRYPTED)
     {
       err = iobuf_pop_filter (out, f->func, f->context);
       if (err)
@@ -276,18 +281,18 @@ show_help (struct option options[])
         {
           const char *o = option[0] ? option : "ARG";
           l = strlen (o);
-          fprintf (stderr, "%s", o);
+          fprintf (stdout, "%s", o);
         }
 
       if (! help)
         {
-          fputc ('\n', stderr);
+          fputc ('\n', stdout);
           continue;
         }
 
       if (option)
         for (j = l; j < max_length + 2; j ++)
-          fputc (' ', stderr);
+          fputc (' ', stdout);
 
 #define BOLD_START "\033[1m"
 #define NORMAL_RESTORE "\033[0m"
@@ -300,14 +305,16 @@ show_help (struct option options[])
 
       if (! option)
         space = 72;
-      formatted = format_text (tmp, 0, space, space + 4);
+      formatted = format_text (tmp, space, space + 4);
+      if (!formatted)
+        abort ();
 
       if (tmp != help)
         xfree (tmp);
 
       if (! option)
         {
-          fprintf (stderr, "\n%s\n", formatted);
+          printf ("\n%s\n", formatted);
           break;
         }
 
@@ -323,10 +330,10 @@ show_help (struct option options[])
 
           if (p != formatted)
             for (j = 0; j < max_length + 2; j ++)
-              fputc (' ', stderr);
+              fputc (' ', stdout);
 
-          fwrite (p, l, 1, stderr);
-          fputc ('\n', stderr);
+          fwrite (p, l, 1, stdout);
+          fputc ('\n', stdout);
         }
 
       xfree (formatted);
@@ -505,7 +512,8 @@ static struct option major_options[] = {
   { "--encrypted-mdc", encrypted,
     "Create a symmetrically encrypted and integrity protected data packet." },
   { "--encrypted-pop", encrypted_pop,
-    "Pop an encryption container." },
+    "Pop the most recent encryption container started by either"
+    " --encrypted or --encrypted-mdc." },
   { "--compressed", NULL, "Create a compressed data packet." },
   { "--literal", literal, "Create a literal (plaintext) data packet." },
   { "--signature", signature, "Create a signature packet." },
@@ -710,7 +718,7 @@ public_key (const char *option, int argc, char *argv[], void *cookie)
   return processed;
 }
 \f
-struct siginfo
+struct signinfo
 {
   /* Key with which to sign.  */
   kbnode_t issuer_kb;
@@ -789,7 +797,7 @@ sig_issuer (const char *option, int argc, char *argv[], void *cookie)
   gpg_error_t err;
   KEYDB_HANDLE hd;
   KEYDB_SEARCH_DESC desc;
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
 
   if (argc == 0)
     log_fatal ("Usage: %s KEYID\n", option);
@@ -824,7 +832,7 @@ sig_issuer_keyid (const char *option, int argc, char *argv[], void *cookie)
 {
   gpg_error_t err;
   KEYDB_SEARCH_DESC desc;
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
 
   if (argc == 0)
     log_fatal ("Usage: %s KEYID|self\n", option);
@@ -853,7 +861,7 @@ sig_issuer_keyid (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_pk (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int i;
   char *tail = NULL;
 
@@ -893,7 +901,7 @@ sig_pk (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_user_id (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int i;
   char *tail = NULL;
 
@@ -922,7 +930,7 @@ sig_user_id (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_class (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int i;
   char *tail = NULL;
 
@@ -942,7 +950,7 @@ sig_class (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_digest (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int i;
   char *tail = NULL;
 
@@ -962,7 +970,7 @@ sig_digest (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_timestamp (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   char *tail = NULL;
 
   if (argc == 0)
@@ -979,7 +987,7 @@ sig_timestamp (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_expiration (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int is_expiration = strcmp (option, "--expiration") == 0;
   u32 *i = is_expiration ? &si->expiration : &si->key_expiration;
 
@@ -999,7 +1007,7 @@ sig_expiration (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_int_list (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int nvalues = 1;
   char *values = xmalloc (nvalues * sizeof (values[0]));
   char *tail = argv[0];
@@ -1069,7 +1077,7 @@ sig_int_list (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_flag (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int range[2] = {0, 255};
   char *tail;
   int v;
@@ -1115,7 +1123,7 @@ sig_flag (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_trust_level (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int i;
   char *tail;
 
@@ -1143,7 +1151,7 @@ sig_trust_level (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_string_arg (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   char *p = argv[0];
   char **s;
 
@@ -1173,7 +1181,7 @@ static int
 sig_revocation_key (const char *option, int argc, char *argv[], void *cookie)
 {
   gpg_error_t err;
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int v;
   char *tail;
   PKT_public_key pk;
@@ -1213,7 +1221,7 @@ sig_revocation_key (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_notation (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int is_blob = strcmp (option, "--notation") != 0;
   struct notation *notation;
   char *p = argv[0];
@@ -1317,7 +1325,7 @@ sig_notation (const char *option, int argc, char *argv[], void *cookie)
   else
     notation = string_to_notation (p, 1);
   if (! notation)
-    log_fatal ("creating notation: an unknown error occured.\n");
+    log_fatal ("creating notation: an unknown error occurred.\n");
   notation->next = si->notations;
   si->notations = notation;
 
@@ -1330,7 +1338,7 @@ sig_notation (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_big_endian_arg (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   char *p = argv[0];
   int i;
   int l;
@@ -1385,7 +1393,7 @@ sig_big_endian_arg (const char *option, int argc, char *argv[], void *cookie)
 static int
 sig_reason_for_revocation (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int v;
   char *tail;
 
@@ -1410,7 +1418,7 @@ sig_reason_for_revocation (const char *option, int argc, char *argv[], void *coo
 static int
 sig_corrupt (const char *option, int argc, char *argv[], void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
 
   (void) option;
   (void) argc;
@@ -1560,7 +1568,7 @@ static struct option sig_options[] = {
 static int
 mksubpkt_callback (PKT_signature *sig, void *cookie)
 {
-  struct siginfo *si = cookie;
+  struct signinfo *si = cookie;
   int i;
 
   if (si->key_expiration)
@@ -1609,7 +1617,7 @@ mksubpkt_callback (PKT_signature *sig, void *cookie)
       if (err)
         {
           u32 keyid[2];
-          keyid_from_fingerprint (revkey->fpr, 20, keyid);
+          keyid_from_fingerprint (global_ctrl, revkey->fpr, 20, keyid);
           log_fatal ("adding revocation key %s: %s\n",
                      keystr (keyid), gpg_strerror (err));
         }
@@ -1654,13 +1662,17 @@ mksubpkt_callback (PKT_signature *sig, void *cookie)
 
   if (si->reason_for_revocation)
     {
-      int l = 1 + strlen (si->reason_for_revocation);
-      char buf[l];
+      int len = 1 + strlen (si->reason_for_revocation);
+      char *buf;
+
+      buf = xmalloc (len);
 
       buf[0] = si->reason_for_revocation_code;
-      memcpy (&buf[1], si->reason_for_revocation, l - 1);
+      memcpy (&buf[1], si->reason_for_revocation, len - 1);
 
-      build_sig_subpkt (sig, SIGSUBPKT_REVOC_REASON, buf, l);
+      build_sig_subpkt (sig, SIGSUBPKT_REVOC_REASON, buf, len);
+
+      xfree (buf);
     }
 
   if (si->features)
@@ -1675,7 +1687,7 @@ signature (const char *option, int argc, char *argv[], void *cookie)
 {
   gpg_error_t err;
   iobuf_t out = cookie;
-  struct siginfo si;
+  struct signinfo si;
   int processed;
   PKT_public_key *pk;
   PKT_signature *sig;
@@ -1789,7 +1801,8 @@ signature (const char *option, int argc, char *argv[], void *cookie)
   /* Changing the issuer's key id is fragile.  Check to make sure
      make_keysig_packet didn't recompute the keyid.  */
   keyid_copy (keyid, si.issuer_pk->keyid);
-  err = make_keysig_packet (&sig, si.pk, si.uid, si.sk, si.issuer_pk,
+  err = make_keysig_packet (global_ctrl,
+                            &sig, si.pk, si.uid, si.sk, si.issuer_pk,
                             si.class, si.digest_algo,
                             si.timestamp, si.expiration,
                             mksubpkt_callback, &si, NULL);
@@ -1822,7 +1835,7 @@ signature (const char *option, int argc, char *argv[], void *cookie)
   debug ("Wrote signature packet:\n");
   dump_component (&pkt);
 
-  xfree (sig);
+  free_seckey_enc (sig);
   release_kbnode (si.issuer_kb);
   xfree (si.revocation_key);
 
@@ -2270,9 +2283,11 @@ sk_esk (const char *option, int argc, char *argv[], void *cookie)
       DEK *sesdekp = &sesdek;
 
       /* Now encrypt the session key (or rather, the algorithm used to
-         encrypt the SED plus the session key) using ENCKEY.  */
-      ske->seskeylen = 1 + sesdek.keylen;
-      encrypt_seskey (&s2kdek, &sesdekp, ske->seskey);
+         encrypt the SKESK plus the session key) using ENCKEY.  */
+      err = encrypt_seskey (&s2kdek, 0, &sesdekp,
+                            (void**)&ske->seskey, (size_t *)&ske->seskeylen);
+      if (err)
+        log_fatal ("encrypt_seskey failed: %s\n", gpg_strerror (err));
 
       /* Save the session key for later.  */
       session_key = sesdek;
@@ -2442,7 +2457,7 @@ pk_esk (const char *option, int argc, char *argv[], void *cookie)
       make_session_key (&session_key);
     }
 
-  err = write_pubkey_enc (&pk, pi.throw_keyid, &session_key, out);
+  err = write_pubkey_enc (global_ctrl, &pk, pi.throw_keyid, &session_key, out);
   if (err)
     log_fatal ("%s: writing pk_esk packet for %s: %s\n",
                option, pi.keyid, gpg_strerror (err));
@@ -2522,7 +2537,9 @@ encrypted (const char *option, int argc, char *argv[], void *cookie)
                                argc, argv);
 
   if (! session_key.algo)
-    log_fatal ("%s: no session key configured.\n", option);
+    log_fatal ("%s: no session key configured\n"
+               "  (use e.g. --sk-esk PASSWORD or --pk-esk KEYID).\n",
+               option);
 
   memset (&e, 0, sizeof (e));
   /* We only need to set E->LEN, E->EXTRALEN (if E->LEN is not
@@ -2540,10 +2557,13 @@ encrypted (const char *option, int argc, char *argv[], void *cookie)
 
   if (do_debug)
     {
-      char buf[2 * session_key.keylen + 1];
+      char *buf;
+
+      buf = xmalloc (2 * session_key.keylen + 1);
       debug ("session key: algo: %d; keylen: %d; key: %s\n",
              session_key.algo, session_key.keylen,
              bin2hex (session_key.key, session_key.keylen, buf));
+      xfree (buf);
     }
 
   if (strcmp (option, "--encrypted-mdc") == 0)
@@ -2555,7 +2575,7 @@ encrypted (const char *option, int argc, char *argv[], void *cookie)
 
   cfx->datalen = 0;
 
-  filter_push (out, cipher_filter, cfx, PKT_ENCRYPTED, cfx->datalen == 0);
+  filter_push (out, cipher_filter_cfb, cfx, PKT_ENCRYPTED, cfx->datalen == 0);
 
   debug ("Wrote encrypted packet:\n");
 
@@ -2565,24 +2585,36 @@ encrypted (const char *option, int argc, char *argv[], void *cookie)
   return processed;
 }
 \f
+static struct option encrypted_pop_options[] = {
+  { NULL, NULL,
+    "Example:\n\n"
+    "  $ gpgcompose --sk-esk PASSWORD \\\n"
+    "    --encrypted-mdc \\\n"
+    "      --literal --value foo \\\n"
+    "    --encrypted-pop | " GPG_NAME " --list-packets" }
+};
+
 static int
 encrypted_pop (const char *option, int argc, char *argv[], void *cookie)
 {
   iobuf_t out = cookie;
+  int processed;
 
-  (void) argc;
-  (void) argv;
+  processed = process_options (option,
+                               major_options,
+                               encrypted_pop_options,
+                               NULL,
+                               global_options, NULL,
+                               argc, argv);
+  /* We only support a single option, --help, which causes the program
+   * to exit.  */
+  log_assert (processed == 0);
 
-  if (strcmp (option, "--encrypted-pop") == 0)
-    filter_pop (out, PKT_ENCRYPTED);
-  else if (strcmp (option, "--encrypted-mdc-pop") == 0)
-    filter_pop (out, PKT_ENCRYPTED_MDC);
-  else
-    log_fatal ("%s: option not handled by this function!\n", option);
+  filter_pop (out, PKT_ENCRYPTED);
 
   debug ("Popped encryption container.\n");
 
-  return 0;
+  return processed;
 }
 \f
 struct data
@@ -2716,7 +2748,7 @@ literal_name (const char *option, int argc, char *argv[], void *cookie)
 {
   struct litinfo *li = cookie;
 
-  if (argc <= 1)
+  if (argc <= 0)
     log_fatal ("Usage: %s NAME\n", option);
 
   if (strlen (argv[0]) > 255)
@@ -2960,7 +2992,7 @@ main (int argc, char *argv[])
   /* Allow notations in the IETF space, for instance.  */
   opt.expert = 1;
 
-  ctrl = xcalloc (1, sizeof *ctrl);
+  global_ctrl = ctrl = xcalloc (1, sizeof *ctrl);
 
   keydb_add_resource ("pubring" EXTSEP_S GPGEXT_GPG,
                       KEYDB_RESOURCE_FLAG_DEFAULT);
@@ -3028,7 +3060,28 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
 }
 
 void
-show_basic_key_info (KBNODE keyblock)
+show_basic_key_info (ctrl_t ctrl, KBNODE keyblock)
 {
+  (void)ctrl;
   (void) keyblock;
 }
+
+int
+keyedit_print_one_sig (ctrl_t ctrl, estream_t fp,
+                       int rc, kbnode_t keyblock, kbnode_t node,
+                      int *inv_sigs, int *no_key, int *oth_err,
+                      int is_selfsig, int print_without_key, int extended)
+{
+  (void) ctrl;
+  (void) fp;
+  (void) rc;
+  (void) keyblock;
+  (void) node;
+  (void) inv_sigs;
+  (void) no_key;
+  (void) oth_err;
+  (void) is_selfsig;
+  (void) print_without_key;
+  (void) extended;
+  return 0;
+}