File compat_flags_base.patch of Package gpg2.42184

commit 03f04dfb9a03f0b10dfd7e01ee06df7495b95667
Author: Werner Koch <wk@gnupg.org>
Date:   Mon Oct 31 15:01:24 2022 +0100

    gpg: New option --compatibility-flags
    
    * g10/gpg.c (oCompatibilityFlags): New.
    (opts): Add option.
    (compatibility_flags): New list.
    (main): Set flags and print help.
    * g10/options.h (opt): Add field compatibility_flags.
    --
    
    No flags are yet defined but it is good to have the framework.

Index: gnupg-2.2.27/doc/gpg.texi
===================================================================
--- gnupg-2.2.27.orig/doc/gpg.texi
+++ gnupg-2.2.27/doc/gpg.texi
@@ -2904,6 +2904,14 @@ therefore enables a fast listing of the
 @opindex interactive
 Prompt before overwriting any files.
 
+@item --compatibility-flags @var{flags}
+@opindex compatibility-flags
+Set compatibility flags to work around problems due to non-compliant
+keys or data.  The @var{flags} are given as a comma separated
+list of flag names and are OR-ed together.  The special flag "none"
+clears the list and allows to start over with an empty list.  To get a
+list of available flags the sole word "help" can be used.
+
 @item --debug-level @var{level}
 @opindex debug-level
 Select the debug level for investigating problems. @var{level} may be
Index: gnupg-2.2.27/g10/gpg.c
===================================================================
--- gnupg-2.2.27.orig/g10/gpg.c
+++ gnupg-2.2.27/g10/gpg.c
@@ -432,7 +432,7 @@ enum cmd_and_opt_values
     oIncludeKeyBlock,
     oNoIncludeKeyBlock,
     oSetLegacyFips,
-
+    oCompatibilityFlags,
     oNoop
   };
 
@@ -880,7 +880,7 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_n (oNoAllowMultipleMessages, "no-allow-multiple-messages", "@"),
   ARGPARSE_s_n (oAllowWeakDigestAlgos, "allow-weak-digest-algos", "@"),
   ARGPARSE_s_n (oSetLegacyFips, "set-legacy-fips", "@"),
-
+  ARGPARSE_s_s (oCompatibilityFlags, "compatibility-flags", "@"),
   ARGPARSE_s_s (oDefaultNewKeyAlgo, "default-new-key-algo", "@"),
 
   /* These two are aliases to help users of the PGP command line
@@ -964,6 +964,13 @@ static struct debug_flags_s debug_flags
   };
 
 
+/* The list of compatibility flags.  */
+static struct compatibility_flags_s compatibility_flags [] =
+  {
+    { 0, NULL }
+  };
+
+
 #ifdef ENABLE_SELINUX_HACKS
 #define ALWAYS_ADD_KEYRINGS 1
 #else
@@ -2703,6 +2710,15 @@ main (int argc, char **argv)
 
           case oDebugIOLBF: break; /* Already set in pre-parse step.  */
 
+          case oCompatibilityFlags:
+            if (parse_compatibility_flags (pargs.r.ret_str, &opt.compat_flags,
+                                           compatibility_flags))
+              {
+                pargs.r_opt = ARGPARSE_INVALID_ARG;
+                pargs.err = ARGPARSE_PRINT_ERROR;
+              }
+            break;
+
 	  case oStatusFD:
             set_status_fd ( translate_sys2libc_fd_int (pargs.r.ret_int, 1) );
             break;
@@ -3729,6 +3745,8 @@ main (int argc, char **argv)
       }
 
     set_debug (debug_level);
+    if (opt.verbose) /* Print the compatibility flags.  */
+      parse_compatibility_flags (NULL, &opt.compat_flags, compatibility_flags);
     if (DBG_CLOCK)
       log_clock ("start");
 
Index: gnupg-2.2.27/g10/options.h
===================================================================
--- gnupg-2.2.27.orig/g10/options.h
+++ gnupg-2.2.27/g10/options.h
@@ -276,6 +276,8 @@ struct
   int only_sign_text_ids;
 
   int no_symkey_cache;   /* Disable the cache used for --symmetric.  */
+  /* Compatibility flags (COMPAT_FLAG_xxxx).  */
+  unsigned int compat_flags;
 } opt;
 
 /* CTRL is used to keep some global variables we currently can't
@@ -332,8 +334,11 @@ struct {
 EXTERN_UNLESS_MAIN_MODULE int memory_debug_mode;
 EXTERN_UNLESS_MAIN_MODULE int memory_stat_debug_mode;
 
+/* Compatibility flags */
+/* #define COMPAT_FOO   1 */
 
-/* Compatibility flags.  */
+
+/* Compliance test macors.  */
 #define GNUPG   (opt.compliance==CO_GNUPG || opt.compliance==CO_DE_VS)
 #define RFC2440 (opt.compliance==CO_RFC2440)
 #define RFC4880 (opt.compliance==CO_RFC4880)
openSUSE Build Service is sponsored by