[Pkg-gnupg-commit] [gnupg2] 35/185: common, gpg, sm: Move the compliance option parser.
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Mon Aug 7 11:55:18 UTC 2017
This is an automated email from the git hooks/post-receive script.
dkg pushed a commit to branch experimental
in repository gnupg2.
commit 842d233d408457cfa9a8473a6748472956f44e84
Author: Justus Winter <justus at g10code.com>
Date: Wed Jun 7 11:50:54 2017 +0200
common,gpg,sm: Move the compliance option parser.
* common/compliance.c (gnupg_parse_compliance_option): New function.
* common/compliance.h (struct gnupg_compliance_option): New type.
(gnupg_parse_compliance_option): New prototype.
* g10/gpg.c (parse_compliance_option): Remove function.
(compliance_options): New variable.
(main): Adapt callsite.
* sm/gpgsm.c (main): Use the new common function.
* sm/gpgsm.h (opt): New field 'compliance'.
GnuPG-bug-id: 3191
Signed-off-by: Justus Winter <justus at g10code.com>
---
common/compliance.c | 33 +++++++++++++++++++++++++++++++++
common/compliance.h | 11 +++++++++++
g10/gpg.c | 37 +++++++++++--------------------------
sm/gpgsm.c | 15 ++++++++++++++-
sm/gpgsm.h | 2 ++
5 files changed, 71 insertions(+), 27 deletions(-)
diff --git a/common/compliance.c b/common/compliance.c
index 14ba097..d81a503 100644
--- a/common/compliance.c
+++ b/common/compliance.c
@@ -33,6 +33,7 @@
#include "openpgpdefs.h"
#include "logging.h"
#include "util.h"
+#include "i18n.h"
#include "compliance.h"
/* Return true if ALGO with a key of KEYLENGTH is compliant to the
@@ -210,3 +211,35 @@ gnupg_status_compliance_flag (enum gnupg_compliance_mode compliance)
}
log_assert (!"invalid compliance mode");
}
+
+
+/* Parse the value of --compliance. Returns the value corresponding
+ * to the given STRING according to OPTIONS of size LENGTH, or -1
+ * indicating that the lookup was unsuccessful, or the list of options
+ * was printed. If quiet is false, an additional hint to use 'help'
+ * is printed on unsuccessful lookups. */
+int
+gnupg_parse_compliance_option (const char *string,
+ struct gnupg_compliance_option options[],
+ size_t length,
+ int quiet)
+{
+ size_t i;
+
+ if (! ascii_strcasecmp (string, "help"))
+ {
+ log_info (_ ("valid values for option '%s':\n"), "--compliance");
+ for (i = 0; i < length; i++)
+ log_info (" %s\n", options[i].keyword);
+ return -1;
+ }
+
+ for (i = 0; i < length; i++)
+ if (! ascii_strcasecmp (string, options[i].keyword))
+ return options[i].value;
+
+ log_error (_ ("invalid value for option '%s'\n"), "--compliance");
+ if (! quiet)
+ log_info (_ ("(use \"help\" to list choices)\n"));
+ return -1;
+}
diff --git a/common/compliance.h b/common/compliance.h
index 4f78ad4..198447c 100644
--- a/common/compliance.h
+++ b/common/compliance.h
@@ -48,4 +48,15 @@ int gnupg_digest_is_compliant (enum gnupg_compliance_mode compliance,
digest_algo_t digest);
const char *gnupg_status_compliance_flag (enum gnupg_compliance_mode compliance);
+struct gnupg_compliance_option
+{
+ const char *keyword;
+ int value;
+};
+
+int gnupg_parse_compliance_option (const char *string,
+ struct gnupg_compliance_option options[],
+ size_t length,
+ int quiet);
+
#endif /*GNUPG_COMMON_COMPLIANCE_H*/
diff --git a/g10/gpg.c b/g10/gpg.c
index cddaf77..686fcd7 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -2073,11 +2073,8 @@ parse_tofu_policy (const char *policystr)
}
-/* Parse the value of --compliance. */
-static int
-parse_compliance_option (const char *string)
-{
- struct { const char *keyword; enum cmd_and_opt_values option; } list[] = {
+static struct gnupg_compliance_option compliance_options[] =
+ {
{ "gnupg", oGnuPG },
{ "openpgp", oOpenPGP },
{ "rfc4880bis", oRFC4880bis },
@@ -2088,26 +2085,6 @@ parse_compliance_option (const char *string)
{ "pgp8", oPGP8 },
{ "de-vs", oDE_VS }
};
- int i;
-
- if (!ascii_strcasecmp (string, "help"))
- {
- log_info (_("valid values for option '%s':\n"), "--compliance");
- for (i=0; i < DIM (list); i++)
- log_info (" %s\n", list[i].keyword);
- g10_exit (1);
- }
-
- for (i=0; i < DIM (list); i++)
- if (!ascii_strcasecmp (string, list[i].keyword))
- return list[i].option;
-
- log_error (_("invalid value for option '%s'\n"), "--compliance");
- if (!opt.quiet)
- log_info (_("(use \"help\" to list choices)\n"));
- g10_exit (1);
-}
-
/* Helper to set compliance related options. This is a separate
@@ -2862,7 +2839,15 @@ main (int argc, char **argv)
break;
case oCompliance:
- set_compliance_option (parse_compliance_option (pargs.r.ret_str));
+ {
+ int compliance = gnupg_parse_compliance_option (pargs.r.ret_str,
+ compliance_options,
+ DIM (compliance_options),
+ opt.quiet);
+ if (compliance < 0)
+ g10_exit (1);
+ set_compliance_option (compliance);
+ }
break;
case oOpenPGP:
case oRFC2440:
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index cb181e8..4b80778 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -41,6 +41,7 @@
#include "../common/gc-opt-flags.h"
#include "../common/asshelp.h"
#include "../common/init.h"
+#include "../common/compliance.h"
#ifndef O_BINARY
@@ -1443,7 +1444,19 @@ main ( int argc, char **argv)
case oNoAutostart: opt.autostart = 0; break;
case oCompliance:
- /* Dummy option for now. */
+ {
+ struct gnupg_compliance_option compliance_options[] =
+ {
+ { "de-vs", CO_DE_VS }
+ };
+ int compliance = gnupg_parse_compliance_option (pargs.r.ret_str,
+ compliance_options,
+ DIM (compliance_options),
+ opt.quiet);
+ if (compliance < 0)
+ gpgsm_exit (1);
+ opt.compliance = compliance;
+ }
break;
default:
diff --git a/sm/gpgsm.h b/sm/gpgsm.h
index df96770..8c1f520 100644
--- a/sm/gpgsm.h
+++ b/sm/gpgsm.h
@@ -34,6 +34,7 @@
#include "../common/audit.h"
#include "../common/session-env.h"
#include "../common/ksba-io-support.h"
+#include "../common/compliance.h"
#define MAX_DIGEST_LEN 64
@@ -144,6 +145,7 @@ struct
OID per string. */
strlist_t ignored_cert_extensions;
+ enum gnupg_compliance_mode compliance;
} opt;
/* Debug values and macros. */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git
More information about the Pkg-gnupg-commit
mailing list