g10: List compression algorithms using human-readable names.
[gnupg.git] / g10 / misc.c
index 93ddaa0..4b9ad99 100644 (file)
@@ -16,7 +16,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>
@@ -67,8 +67,7 @@
 #include "options.h"
 #include "call-agent.h"
 #include "i18n.h"
-
-#include <assert.h>
+#include "zb32.h"
 
 
 #ifdef ENABLE_SELINUX_HACKS
@@ -97,7 +96,7 @@ register_secured_file (const char *fname)
   struct stat buf;
   struct secured_file_item *sf;
 
-  /* Note that we stop immediatley if something goes wrong here. */
+  /* Note that we stop immediately if something goes wrong here. */
   if (stat (fname, &buf))
     log_fatal (_("fstat of '%s' failed in %s: %s\n"), fname,
                "register_secured_file", strerror (errno));
@@ -307,7 +306,6 @@ print_cipher_algo_note (cipher_algo_t algo)
 void
 print_digest_algo_note (digest_algo_t algo)
 {
-  int deprecated = 0;
   const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo);
   const struct weakhash *weak;
 
@@ -322,38 +320,88 @@ print_digest_algo_note (digest_algo_t algo)
                     gcry_md_algo_name (galgo));
        }
     }
-  else if(algo == DIGEST_ALGO_MD5)
-    deprecated = 1;
   else
-      for (weak = opt.additional_weak_digests; weak != NULL; weak = weak->next)
+      for (weak = opt.weak_digests; weak != NULL; weak = weak->next)
         if (weak->algo == galgo)
-          deprecated = 1;
-
-  if (deprecated)
-    {
-      es_fflush (es_stdout);
-      log_info (_("WARNING: digest algorithm %s is deprecated\n"),
-                gcry_md_algo_name (galgo));
-    }
+          {
+            es_fflush (es_stdout);
+            log_info (_("WARNING: digest algorithm %s is deprecated\n"),
+                      gcry_md_algo_name (galgo));
+          }
 }
 
 
 void
 print_digest_rejected_note (enum gcry_md_algos algo)
 {
-  static int shown;
-
-  if (!shown)
+  struct weakhash* weak;
+  int show = 1;
+  for (weak = opt.weak_digests; weak; weak = weak->next)
+    if (weak->algo == algo)
+      {
+        if (weak->rejection_shown)
+          show = 0;
+        else
+          weak->rejection_shown = 1;
+        break;
+      }
+
+  if (show)
     {
       es_fflush (es_stdout);
       log_info
         (_("Note: signatures using the %s algorithm are rejected\n"),
          gcry_md_algo_name(algo));
-      shown = 1;
     }
 }
 
 
+/* Print a message
+ *  "(reported error: %s)\n
+ * in verbose mode to further explain an error.  If the error code has
+ * the value IGNORE_EC no message is printed.  A message is also not
+ * printed if ERR is 0.  */
+void
+print_reported_error (gpg_error_t err, gpg_err_code_t ignore_ec)
+{
+  if (!opt.verbose)
+    return;
+
+  if (!gpg_err_code (err))
+    ;
+  else if (gpg_err_code (err) == ignore_ec)
+    ;
+  else if (gpg_err_source (err) == GPG_ERR_SOURCE_DEFAULT)
+    log_info (_("(reported error: %s)\n"),
+              gpg_strerror (err));
+  else
+    log_info (_("(reported error: %s <%s>)\n"),
+              gpg_strerror (err), gpg_strsource (err));
+
+}
+
+
+/* Print a message
+ *   "(further info: %s)\n
+ * in verbose mode to further explain an error.  That message is
+ * intended to help debug a problem and should not be translated.
+ */
+void
+print_further_info (const char *format, ...)
+{
+  va_list arg_ptr;
+
+  if (!opt.verbose)
+    return;
+
+  log_info (_("(further info: "));
+  va_start (arg_ptr, format);
+  log_logv (GPGRT_LOG_CONT, format, arg_ptr);
+  va_end (arg_ptr);
+  log_printf (")\n");
+}
+
+
 /* Map OpenPGP algo numbers to those used by Libgcrypt.  We need to do
    this for algorithms we implemented in Libgcrypt after they become
    part of OpenPGP.  */
@@ -494,7 +542,7 @@ openpgp_cipher_blocklen (cipher_algo_t algo)
 }
 
 /****************
- * Wrapper around the libgcrypt function with additonal checks on
+ * Wrapper around the libgcrypt function with additional checks on
  * the OpenPGP contraints for the algo ID.
  */
 int
@@ -858,7 +906,7 @@ pct_expando(const char *string,struct expando_args *args)
 
            case 'f': /* Fingerprint of key being signed */
            case 'p': /* Fingerprint of the primary key making the signature. */
-           case 'g': /* Fingerprint of thge key making the signature.  */
+           case 'g': /* Fingerprint of the key making the signature.  */
              {
                byte array[MAX_FINGERPRINT_LEN];
                size_t len;
@@ -1070,7 +1118,7 @@ string_to_digest_algo (const char *string)
 {
   int val;
 
-  /* FIXME: We should make use of our wrapper fucntion and not assume
+  /* FIXME: We should make use of our wrapper function and not assume
      that there is a 1 to 1 mapping between OpenPGP and Libgcrypt.  */
   val = gcry_md_map_name (string);
   if (!val && string && (string[0]=='H' || string[0]=='h'))
@@ -1204,6 +1252,7 @@ compliance_option_string(void)
     case CO_PGP6:    return "--pgp6";
     case CO_PGP7:    return "--pgp7";
     case CO_PGP8:    return "--pgp8";
+    case CO_DE_VS:   return "--compliance=de-vs";
     }
 
   return ver;
@@ -1239,6 +1288,10 @@ compliance_failure(void)
     case CO_PGP8:
       ver="PGP 8.x";
       break;
+
+    case CO_DE_VS:
+      ver="DE-VS applications";
+      break;
     }
 
   log_info(_("this message may not be usable by %s\n"),ver);
@@ -1699,25 +1752,21 @@ additional_weak_digest (const char* digestname)
   struct weakhash *weak = NULL;
   const enum gcry_md_algos algo = string_to_digest_algo(digestname);
 
-  if (algo == GCRY_MD_MD5)
-    return; /* MD5 is always considered weak, no need to add it.  */
-
   if (algo == GCRY_MD_NONE)
     {
-      log_error(_("Unknown weak digest '%s'\n"), digestname);
+      log_error (_("unknown weak digest '%s'\n"), digestname);
       return;
     }
 
   /* Check to ensure it's not already present.  */
-  for (weak = opt.additional_weak_digests; weak != NULL; weak = weak->next)
-    {
-      if (algo == weak->algo)
-        return;
-    }
+  for (weak = opt.weak_digests; weak; weak = weak->next)
+    if (algo == weak->algo)
+      return;
 
   /* Add it to the head of the list.  */
   weak = xmalloc(sizeof(*weak));
   weak->algo = algo;
-  weak->next = opt.additional_weak_digests;
-  opt.additional_weak_digests = weak;
+  weak->rejection_shown = 0;
+  weak->next = opt.weak_digests;
+  opt.weak_digests = weak;
 }