gpg: Re-indent a function.
[gnupg.git] / g10 / keyedit.c
index c5f02f7..308576d 100644 (file)
@@ -59,6 +59,7 @@ static void show_key_with_all_names (estream_t fp,
                                     int with_subkeys, int with_prefs,
                                      int nowarn);
 static void show_key_and_fingerprint (KBNODE keyblock);
+static void subkey_expire_warning (kbnode_t keyblock);
 static int menu_adduid (KBNODE keyblock, int photo, const char *photo_name);
 static void menu_deluid (KBNODE pub_keyblock);
 static int menu_delsig (KBNODE pub_keyblock);
@@ -518,19 +519,6 @@ sign_uids (estream_t fp,
   KBNODE node, uidnode;
   PKT_public_key *primary_pk = NULL;
   int select_all = !count_selected_uids (keyblock) || interactive;
-  int all_v3 = 1;
-
-  /* Are there any non-v3 sigs on this key already? */
-  if (PGP2)
-    {
-      for (node = keyblock; node; node = node->next)
-        if (node->pkt->pkttype == PKT_SIGNATURE &&
-            node->pkt->pkt.signature->version > 3)
-          {
-            all_v3 = 0;
-            break;
-          }
-    }
 
   /* Build a list of all signators.
    *
@@ -894,29 +882,6 @@ sign_uids (estream_t fp,
       if (duration)
        force_v4 = 1;
 
-      /* Is --pgp2 on, it's a v3 key, all the sigs on the key are
-         currently v3 and we're about to sign it with a v4 sig?  If
-         so, danger! */
-      if (PGP2 && all_v3 &&
-         (pk->version > 3 || force_v4) && primary_pk->version <= 3)
-       {
-         tty_fprintf (fp, _("You may not make an OpenPGP signature on a "
-                             "PGP 2.x key while in --pgp2 mode.\n"));
-         tty_fprintf (fp, _("This would make the key unusable in PGP 2.x.\n"));
-
-         if (opt.expert && !quick)
-           {
-             if (!cpr_get_answer_is_yes ("sign_uid.v4_on_v3_okay",
-                                         _("Are you sure you still "
-                                           "want to sign it? (y/N) ")))
-               continue;
-
-             all_v3 = 0;
-           }
-         else
-           continue;
-       }
-
       if (selfsig)
        ;
       else
@@ -1499,6 +1464,7 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
   char *answer = NULL;
   int redisplay = 1;
   int modified = 0;
+  int run_subkey_warnings = 0;
   int toggle;
   int have_commands = !!commands;
 
@@ -1566,6 +1532,14 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
          tty_printf ("\n");
          redisplay = 0;
        }
+
+      if (run_subkey_warnings)
+        {
+          run_subkey_warnings = 0;
+          if (!count_selected_keys (keyblock))
+            subkey_expire_warning (keyblock);
+        }
+
       do
        {
          xfree (answer);
@@ -1773,7 +1747,7 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
          break;
 
        case cmdADDPHOTO:
-         if (RFC2440 || RFC1991 || PGP2)
+         if (RFC2440)
            {
              tty_printf (_("This command is not allowed while in %s mode.\n"),
                          compliance_option_string ());
@@ -2066,6 +2040,7 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
          if (menu_expire (keyblock))
            {
              merge_keys_and_selfsig (keyblock);
+              run_subkey_warnings = 1;
              modified = 1;
              redisplay = 1;
            }
@@ -2991,7 +2966,7 @@ show_key_with_all_names (estream_t fp,
          else
            tty_fprintf (fp, _("expires: %s"), expirestr_from_pk (pk));
          tty_fprintf (fp, "  ");
-         tty_fprintf (fp, _("usage: %s"), usagestr_from_pk (pk));
+         tty_fprintf (fp, _("usage: %s"), usagestr_from_pk (pk, 1));
          tty_fprintf (fp, "\n");
 
          if (pk->seckey_info
@@ -3192,6 +3167,58 @@ no_primary_warning (KBNODE keyblock)
 }
 
 
+/* Print a warning if the latest encryption subkey expires soon.  This
+   function is called after the expire data of the primary key has
+   been changed.  */
+static void
+subkey_expire_warning (kbnode_t keyblock)
+{
+  u32 curtime = make_timestamp ();
+  kbnode_t node;
+  PKT_public_key *pk;
+  /* u32 mainexpire = 0; */
+  u32 subexpire = 0;
+  u32 latest_date = 0;
+
+  for (node = keyblock; node; node = node->next)
+    {
+      /* if (node->pkt->pkttype == PKT_PUBLIC_KEY) */
+      /*   { */
+      /*     pk = node->pkt->pkt.public_key; */
+      /*     mainexpire = pk->expiredate; */
+      /*   } */
+
+      if (node->pkt->pkttype != PKT_PUBLIC_SUBKEY)
+        continue;
+      pk = node->pkt->pkt.public_key;
+
+      if (!pk->flags.valid)
+        continue;
+      if (pk->flags.revoked)
+        continue;
+      if (pk->timestamp > curtime)
+        continue; /* Ignore future keys.  */
+      if (!(pk->pubkey_usage & PUBKEY_USAGE_ENC))
+        continue; /* Not an encryption key.  */
+
+      if (pk->timestamp > latest_date || (!pk->timestamp && !latest_date))
+        {
+          latest_date = pk->timestamp;
+          subexpire = pk->expiredate;
+        }
+    }
+
+  if (!subexpire)
+    return;  /* No valid subkey with an expiration time.  */
+
+  if (curtime + (10*86400) > subexpire)
+    {
+      log_info (_("WARNING: Your encryption subkey expires soon.\n"));
+      log_info (_("You may want to change its expiration date too.\n"));
+    }
+}
+
+
 /*
  * Ask for a new user id, add the self-signature and update the keyblock.
  * Return true if there is a new user id