[git] GPGME - branch, master, updated. gpgme-1.6.0-363-g7c37719
by Werner Koch
cvs at cvs.gnupg.org
Wed Sep 14 20:25:52 CEST 2016
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".
The branch, master has been updated
via 7c37719d79345a665ec2f4570e3f257033b58c62 (commit)
from d79dcb78d867aaf55b85aea117c4ae6035a1531a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 7c37719d79345a665ec2f4570e3f257033b58c62
Author: Werner Koch <wk at gnupg.org>
Date: Wed Sep 14 20:21:19 2016 +0200
core: New function gpgme_op_tofu_policy
* src/gpgme.h.in (gpgme_op_tofu_policy_start): New function.
(gpgme_op_tofu_policy): New function.
* src/libgpgme.vers, src/gpgme.def: Add new functions.
* src/tofupolicy.c: New.
* src/Makefile.am (main_sources): Add that file.
* src/context.h (ctx_op_data_id_t): Add OPDATA_TOFU_POLICY.
* src/engine.c (_gpgme_engine_op_tofu_policy): New.
* src/engine-backend.h (engine_ops): Add funcptr 'tofu_policy'.
Adjust all engine initializations.
* src/engine-gpg.c (gpg_tofu_policy): New.
(_gpgme_engine_ops_gpg): Register this function.
* tests/run-tofu.c: New.
* tests/Makefile.am (noinst_PROGRAMS): Add it.
Signed-off-by: Werner Koch <wk at gnupg.org>
diff --git a/NEWS b/NEWS
index fd9b20c..6499f5e 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,8 @@ Noteworthy changes in version 1.7.0 (unreleased) [C25/A14/R_]
gpgme_op_revuid NEW.
gpgme_op_keysign_start NEW.
gpgme_op_keysign NEW.
+ gpgme_op_tofu_policy_start NEW.
+ gpgme_op_tofu_policy NEW.
gpgme_genkey_result_t EXTENDED: New fields pubkey and seckey.
gpgme_signature_t EXTENDED: New field key.
gpgme_key_t EXTENDED: New field fpr.
diff --git a/src/Makefile.am b/src/Makefile.am
index 39752b3..c57ec8f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -84,7 +84,7 @@ main_sources = \
op-support.c \
encrypt.c encrypt-sign.c decrypt.c decrypt-verify.c verify.c \
sign.c passphrase.c progress.c \
- key.c keylist.c keysign.c trust-item.c trustlist.c \
+ key.c keylist.c keysign.c trust-item.c trustlist.c tofupolicy.c \
import.c export.c genkey.c delete.c edit.c getauditlog.c \
opassuan.c passwd.c spawn.c assuan-support.c \
engine.h engine-backend.h engine.c engine-gpg.c status-table.c \
diff --git a/src/context.h b/src/context.h
index c099d66..4b12c3b 100644
--- a/src/context.h
+++ b/src/context.h
@@ -38,7 +38,7 @@ typedef enum
OPDATA_DECRYPT, OPDATA_SIGN, OPDATA_ENCRYPT, OPDATA_PASSPHRASE,
OPDATA_IMPORT, OPDATA_GENKEY, OPDATA_KEYLIST, OPDATA_EDIT,
OPDATA_VERIFY, OPDATA_TRUSTLIST, OPDATA_ASSUAN, OPDATA_VFS_MOUNT,
- OPDATA_PASSWD, OPDATA_EXPORT, OPDATA_KEYSIGN
+ OPDATA_PASSWD, OPDATA_EXPORT, OPDATA_KEYSIGN, OPDATA_TOFU_POLICY
} ctx_op_data_id_t;
diff --git a/src/engine-assuan.c b/src/engine-assuan.c
index 6f11cc0..f5e202a 100644
--- a/src/engine-assuan.c
+++ b/src/engine-assuan.c
@@ -776,6 +776,7 @@ struct engine_ops _gpgme_engine_ops_assuan =
NULL, /* keylist */
NULL, /* keylist_ext */
NULL, /* keysign */
+ NULL, /* tofu_policy */
NULL, /* sign */
NULL, /* trustlist */
NULL, /* verify */
diff --git a/src/engine-backend.h b/src/engine-backend.h
index ed3e303..ccab0e3 100644
--- a/src/engine-backend.h
+++ b/src/engine-backend.h
@@ -102,6 +102,9 @@ struct engine_ops
gpgme_key_t key, const char *userid,
unsigned long expires, unsigned int flags,
gpgme_ctx_t ctx);
+ gpgme_error_t (*tofu_policy) (void *engine,
+ gpgme_key_t key,
+ gpgme_tofu_policy_t policy);
gpgme_error_t (*sign) (void *engine, gpgme_data_t in, gpgme_data_t out,
gpgme_sig_mode_t mode, int use_armor,
int use_textmode, int include_certs,
diff --git a/src/engine-g13.c b/src/engine-g13.c
index 0da00f7..313e2ad 100644
--- a/src/engine-g13.c
+++ b/src/engine-g13.c
@@ -793,6 +793,7 @@ struct engine_ops _gpgme_engine_ops_g13 =
NULL, /* keylist */
NULL, /* keylist_ext */
NULL, /* keysign */
+ NULL, /* tofu_policy */
NULL, /* sign */
NULL, /* trustlist */
NULL, /* verify */
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index ac85c4d..9a0dab0 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -2733,6 +2733,46 @@ gpg_keysign (void *engine, gpgme_key_t key, const char *userid,
static gpgme_error_t
+gpg_tofu_policy (void *engine, gpgme_key_t key, gpgme_tofu_policy_t policy)
+{
+ engine_gpg_t gpg = engine;
+ gpgme_error_t err;
+ const char *policystr = NULL;
+
+ if (!key || !key->fpr)
+ return gpg_error (GPG_ERR_INV_ARG);
+
+ switch (policy)
+ {
+ case GPGME_TOFU_POLICY_NONE: break;
+ case GPGME_TOFU_POLICY_AUTO: policystr = "auto"; break;
+ case GPGME_TOFU_POLICY_GOOD: policystr = "good"; break;
+ case GPGME_TOFU_POLICY_BAD: policystr = "bad"; break;
+ case GPGME_TOFU_POLICY_ASK: policystr = "ask"; break;
+ case GPGME_TOFU_POLICY_UNKNOWN: policystr = "unknown"; break;
+ }
+ if (!policystr)
+ return gpg_error (GPG_ERR_INV_VALUE);
+
+ if (!have_gpg_version (gpg, "2.1.10"))
+ return gpg_error (GPG_ERR_NOT_SUPPORTED);
+
+ err = add_arg (gpg, "--tofu-policy");
+ if (!err)
+ err = add_arg (gpg, "--");
+ if (!err)
+ err = add_arg (gpg, policystr);
+ if (!err)
+ err = add_arg (gpg, key->fpr);
+
+ if (!err)
+ err = start (gpg);
+
+ return err;
+}
+
+
+static gpgme_error_t
gpg_sign (void *engine, gpgme_data_t in, gpgme_data_t out,
gpgme_sig_mode_t mode, int use_armor, int use_textmode,
int include_certs, gpgme_ctx_t ctx /* FIXME */)
@@ -2906,6 +2946,7 @@ struct engine_ops _gpgme_engine_ops_gpg =
gpg_keylist,
gpg_keylist_ext,
gpg_keysign,
+ gpg_tofu_policy, /* tofu_policy */
gpg_sign,
gpg_trustlist,
gpg_verify,
diff --git a/src/engine-gpgconf.c b/src/engine-gpgconf.c
index 8be76cb..90f32c7 100644
--- a/src/engine-gpgconf.c
+++ b/src/engine-gpgconf.c
@@ -958,6 +958,7 @@ struct engine_ops _gpgme_engine_ops_gpgconf =
NULL, /* keylist */
NULL, /* keylist_ext */
NULL, /* keysign */
+ NULL, /* tofu_policy */
NULL, /* sign */
NULL, /* trustlist */
NULL, /* verify */
diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c
index aae9d28..5fcfbf1 100644
--- a/src/engine-gpgsm.c
+++ b/src/engine-gpgsm.c
@@ -2075,6 +2075,7 @@ struct engine_ops _gpgme_engine_ops_gpgsm =
gpgsm_keylist,
gpgsm_keylist_ext,
NULL, /* keysign */
+ NULL, /* tofu_policy */
gpgsm_sign,
NULL, /* trustlist */
gpgsm_verify,
diff --git a/src/engine-spawn.c b/src/engine-spawn.c
index 82dbc0b..df90cb2 100644
--- a/src/engine-spawn.c
+++ b/src/engine-spawn.c
@@ -461,6 +461,7 @@ struct engine_ops _gpgme_engine_ops_spawn =
NULL, /* keylist */
NULL, /* keylist_ext */
NULL, /* keysign */
+ NULL, /* tofu_policy */
NULL, /* sign */
NULL, /* trustlist */
NULL, /* verify */
diff --git a/src/engine-uiserver.c b/src/engine-uiserver.c
index 827c347..318d32e 100644
--- a/src/engine-uiserver.c
+++ b/src/engine-uiserver.c
@@ -1365,6 +1365,7 @@ struct engine_ops _gpgme_engine_ops_uiserver =
NULL, /* keylist */
NULL, /* keylist_ext */
NULL, /* keysign */
+ NULL, /* tofu_policy */
uiserver_sign,
NULL, /* trustlist */
uiserver_verify,
diff --git a/src/engine.c b/src/engine.c
index 47bb23c..a1173a0 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -811,6 +811,20 @@ _gpgme_engine_op_keysign (engine_t engine, gpgme_key_t key, const char *userid,
gpgme_error_t
+_gpgme_engine_op_tofu_policy (engine_t engine,
+ gpgme_key_t key, gpgme_tofu_policy_t policy)
+{
+ if (!engine)
+ return gpg_error (GPG_ERR_INV_VALUE);
+
+ if (!engine->ops->tofu_policy)
+ return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+
+ return (*engine->ops->tofu_policy) (engine->engine, key, policy);
+}
+
+
+gpgme_error_t
_gpgme_engine_op_import (engine_t engine, gpgme_data_t keydata,
gpgme_key_t *keyarray)
{
diff --git a/src/engine.h b/src/engine.h
index 6f33835..4ce2bed 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -126,6 +126,9 @@ gpgme_error_t _gpgme_engine_op_keysign (engine_t engine,
unsigned long expires,
unsigned int flags,
gpgme_ctx_t ctx);
+gpgme_error_t _gpgme_engine_op_tofu_policy (engine_t engine,
+ gpgme_key_t key,
+ gpgme_tofu_policy_t policy);
gpgme_error_t _gpgme_engine_op_import (engine_t engine,
gpgme_data_t keydata,
gpgme_key_t *keyarray);
diff --git a/src/gpgme.def b/src/gpgme.def
index f987b38..7882af6 100644
--- a/src/gpgme.def
+++ b/src/gpgme.def
@@ -239,6 +239,8 @@ EXPORTS
gpgme_op_revuid @179
gpgme_op_keysign_start @180
gpgme_op_keysign @181
+ gpgme_op_tofu_policy_start @182
+ gpgme_op_tofu_policy @183
; END
diff --git a/src/gpgme.h.in b/src/gpgme.h.in
index 121e2ce..5ed0890 100644
--- a/src/gpgme.h.in
+++ b/src/gpgme.h.in
@@ -1968,6 +1968,16 @@ gpgme_error_t gpgme_op_card_edit (gpgme_ctx_t ctx, gpgme_key_t key,
gpgme_data_t out);
+/* Set the Tofu policy of KEY to POLCIY. */
+gpgme_error_t gpgme_op_tofu_policy_start (gpgme_ctx_t ctx,
+ gpgme_key_t key,
+ gpgme_tofu_policy_t policy);
+gpgme_error_t gpgme_op_tofu_policy (gpgme_ctx_t ctx,
+ gpgme_key_t key,
+ gpgme_tofu_policy_t policy);
+
+
+
/*
* Key listing
diff --git a/src/libgpgme.vers b/src/libgpgme.vers
index d86eee8..d635b6b 100644
--- a/src/libgpgme.vers
+++ b/src/libgpgme.vers
@@ -113,6 +113,8 @@ GPGME_1.1 {
gpgme_op_revuid;
gpgme_op_keysign_start;
gpgme_op_keysign;
+ gpgme_op_tofu_policy_start;
+ gpgme_op_tofu_policy;
};
diff --git a/src/tofupolicy.c b/src/tofupolicy.c
new file mode 100644
index 0000000..799779e
--- /dev/null
+++ b/src/tofupolicy.c
@@ -0,0 +1,184 @@
+/* tofupolicy.c - Tofu policy helpers.
+ * Copyright (C) 2016 g10 Code GmbH
+ *
+ * This file is part of GPGME.
+ *
+ * GPGME is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * GPGME is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdlib.h>
+
+#include "gpgme.h"
+#include "debug.h"
+#include "context.h"
+#include "ops.h"
+
+
+typedef struct
+{
+ /* The error code from a FAILURE status line or 0. */
+ gpg_error_t failure_code;
+
+ /* The error code from an ERROR status line or 0. */
+ gpg_error_t error_code;
+
+} *op_data_t;
+
+
+
+/* Parse an error status line. Return the error location and the
+ error code. The function may modify ARGS. */
+static char *
+parse_error (char *args, gpg_error_t *r_err)
+{
+ char *where = strchr (args, ' ');
+ char *which;
+
+ if (where)
+ {
+ *where = '\0';
+ which = where + 1;
+
+ where = strchr (which, ' ');
+ if (where)
+ *where = '\0';
+
+ where = args;
+ }
+ else
+ {
+ *r_err = trace_gpg_error (GPG_ERR_INV_ENGINE);
+ return NULL;
+ }
+
+ *r_err = atoi (which);
+
+ return where;
+}
+
+
+static gpgme_error_t
+tofu_policy_status_handler (void *priv, gpgme_status_code_t code, char *args)
+{
+ gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
+ gpgme_error_t err;
+ void *hook;
+ op_data_t opd;
+ char *loc;
+
+ err = _gpgme_op_data_lookup (ctx, OPDATA_TOFU_POLICY, &hook, -1, NULL);
+ opd = hook;
+ if (err)
+ return err;
+
+ switch (code)
+ {
+ case GPGME_STATUS_ERROR:
+ loc = parse_error (args, &err);
+ if (!loc)
+ return err;
+ if (!opd->error_code)
+ opd->error_code = err;
+ break;
+
+ case GPGME_STATUS_FAILURE:
+ opd->failure_code = _gpgme_parse_failure (args);
+ break;
+
+ case GPGME_STATUS_EOF:
+ if (opd->error_code)
+ err = opd->error_code;
+ else if (opd->failure_code)
+ err = opd->failure_code;
+ break;
+
+ default:
+ break;
+ }
+
+ return err;
+}
+
+
+/* Set the TOFU policy for KEY to POLICY. */
+static gpgme_error_t
+tofu_policy_start (gpgme_ctx_t ctx, int synchronous,
+ gpgme_key_t key, gpgme_tofu_policy_t policy)
+{
+ gpgme_error_t err;
+ void *hook;
+ op_data_t opd;
+
+ if (ctx->protocol != GPGME_PROTOCOL_OPENPGP)
+ return gpgme_error (GPG_ERR_UNSUPPORTED_PROTOCOL);
+
+ if (!key)
+ return gpg_error (GPG_ERR_INV_VALUE);
+
+ err = _gpgme_op_reset (ctx, synchronous);
+ if (err)
+ return err;
+
+ err = _gpgme_op_data_lookup (ctx, OPDATA_TOFU_POLICY, &hook,
+ sizeof (*opd), NULL);
+ opd = hook;
+ if (err)
+ return err;
+
+ _gpgme_engine_set_status_handler (ctx->engine, tofu_policy_status_handler,
+ ctx);
+
+ return _gpgme_engine_op_tofu_policy (ctx->engine, key, policy);
+}
+
+
+
+/* Set the TOFU policy of KEY to POLCIY. This is the asynchronous
+ * variant. */
+gpgme_error_t
+gpgme_op_tofu_policy_start (gpgme_ctx_t ctx,
+ gpgme_key_t key, gpgme_tofu_policy_t policy)
+{
+ gpg_error_t err;
+ TRACE_BEG2 (DEBUG_CTX, "gpgme_op_tofu_policy_start", ctx,
+ "key=%p, policy=%u", key, (unsigned int)policy);
+
+ if (!ctx)
+ return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
+
+ err = tofu_policy_start (ctx, 0, key, policy);
+ return TRACE_ERR (err);
+}
+
+
+/* This is the synchronous variant of gpgme_op_tofu_policy_start. */
+gpgme_error_t
+gpgme_op_tofu_policy (gpgme_ctx_t ctx,
+ gpgme_key_t key, gpgme_tofu_policy_t policy)
+{
+ gpgme_error_t err;
+ TRACE_BEG2 (DEBUG_CTX, "gpgme_op_tofu_policy", ctx,
+ "key=%p, policy=%u", key, (unsigned int)policy);
+
+ if (!ctx)
+ return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
+
+ err = tofu_policy_start (ctx, 1, key, policy);
+ if (!err)
+ err = _gpgme_wait_one (ctx);
+ return TRACE_ERR (err);
+}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1370efd..c71914f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -33,7 +33,7 @@ noinst_HEADERS = run-support.h
noinst_PROGRAMS = $(TESTS) run-keylist run-export run-import run-sign \
run-verify run-encrypt run-identify run-decrypt run-genkey \
- run-keysign
+ run-keysign run-tofu
if RUN_GPG_TESTS
diff --git a/tests/run-tofu.c b/tests/run-tofu.c
new file mode 100644
index 0000000..ff55789
--- /dev/null
+++ b/tests/run-tofu.c
@@ -0,0 +1,178 @@
+/* run-tofu.c - Test tool for Tofu functions
+ * Copyright (C) 2016 g10 Code GmbH
+ *
+ * This file is part of GPGME.
+ *
+ * GPGME is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * GPGME is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* We need to include config.h so that we know whether we are building
+ with large file system (LFS) support. */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#include <gpgme.h>
+
+#define PGM "run-tofu"
+
+#include "run-support.h"
+
+
+static int verbose;
+
+
+static gpg_error_t
+status_cb (void *opaque, const char *keyword, const char *value)
+{
+ (void)opaque;
+ fprintf (stderr, "status_cb: %s %s\n", nonnull(keyword), nonnull(value));
+ return 0;
+}
+
+
+
+static gpgme_tofu_policy_t
+parse_policy_string (const char *string)
+{
+ gpgme_tofu_policy_t policy;
+
+ if (!strcmp (string, "auto"))
+ policy = GPGME_TOFU_POLICY_AUTO;
+ else if (!strcmp (string, "good"))
+ policy = GPGME_TOFU_POLICY_GOOD;
+ else if (!strcmp (string, "bad"))
+ policy = GPGME_TOFU_POLICY_BAD;
+ else if (!strcmp (string, "ask"))
+ policy = GPGME_TOFU_POLICY_ASK;
+ else if (!strcmp (string, "unknown"))
+ policy = GPGME_TOFU_POLICY_UNKNOWN;
+ else
+ {
+ fprintf (stderr, PGM ": invalid policy value '%s'\n", string);
+ exit (1);
+ }
+
+ return policy;
+}
+
+
+
+static int
+show_usage (int ex)
+{
+ fputs ("usage: " PGM " [options] FPR\n\n"
+ "Options:\n"
+ " --policy NAME Set tofu policy for key to NAME\n"
+ " --verbose run in verbose mode\n"
+ " --status print status lines from the backend\n"
+ , stderr);
+ exit (ex);
+}
+
+
+int
+main (int argc, char **argv)
+{
+ int last_argc = -1;
+ gpgme_error_t err;
+ gpgme_ctx_t ctx;
+ gpgme_protocol_t protocol = GPGME_PROTOCOL_OpenPGP;
+ int print_status = 0;
+ gpgme_key_t thekey;
+ const char *fpr;
+ const char *policystr = NULL;
+ gpgme_tofu_policy_t policy;
+
+ if (argc)
+ { argc--; argv++; }
+
+ while (argc && last_argc != argc )
+ {
+ last_argc = argc;
+ if (!strcmp (*argv, "--"))
+ {
+ argc--; argv++;
+ break;
+ }
+ else if (!strcmp (*argv, "--help"))
+ show_usage (0);
+ else if (!strcmp (*argv, "--verbose"))
+ {
+ verbose = 1;
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "--status"))
+ {
+ print_status = 1;
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "--policy"))
+ {
+ argc--; argv++;
+ if (!argc)
+ show_usage (1);
+ policystr = *argv;
+ argc--; argv++;
+ }
+ else if (!strncmp (*argv, "--", 2))
+ show_usage (1);
+ }
+
+ if (argc != 1)
+ show_usage (1);
+ fpr = argv[0];
+
+ init_gpgme (protocol);
+
+ err = gpgme_new (&ctx);
+ fail_if_err (err);
+ gpgme_set_protocol (ctx, protocol);
+ gpgme_set_armor (ctx, 1);
+ if (print_status)
+ {
+ gpgme_set_status_cb (ctx, status_cb, NULL);
+ gpgme_set_ctx_flag (ctx, "full-status", "1");
+ }
+
+ err = gpgme_get_key (ctx, fpr, &thekey, 0);
+ if (err)
+ {
+ fprintf (stderr, PGM ": error getting key '%s': %s\n",
+ fpr, gpg_strerror (err));
+ exit (1);
+ }
+
+ if (policystr)
+ {
+ policy = parse_policy_string (policystr);
+
+ err = gpgme_op_tofu_policy (ctx, thekey, policy);
+ if (err)
+ {
+ fprintf (stderr, PGM ": gpgme_op_tofu_polciy failed: %s\n",
+ gpg_strerror (err));
+ exit (1);
+ }
+ }
+
+ gpgme_key_unref (thekey);
+ gpgme_release (ctx);
+ return 0;
+}
-----------------------------------------------------------------------
Summary of changes:
NEWS | 2 +
src/Makefile.am | 2 +-
src/context.h | 2 +-
src/engine-assuan.c | 1 +
src/engine-backend.h | 3 +
src/engine-g13.c | 1 +
src/engine-gpg.c | 41 +++++++++
src/engine-gpgconf.c | 1 +
src/engine-gpgsm.c | 1 +
src/engine-spawn.c | 1 +
src/engine-uiserver.c | 1 +
src/engine.c | 14 ++++
src/engine.h | 3 +
src/gpgme.def | 2 +
src/gpgme.h.in | 10 +++
src/libgpgme.vers | 2 +
src/{keysign.c => tofupolicy.c} | 110 +++++++++----------------
tests/Makefile.am | 2 +-
tests/run-tofu.c | 178 ++++++++++++++++++++++++++++++++++++++++
19 files changed, 302 insertions(+), 75 deletions(-)
copy src/{keysign.c => tofupolicy.c} (50%)
create mode 100644 tests/run-tofu.c
hooks/post-receive
--
GnuPG Made Easy
http://git.gnupg.org
More information about the Gnupg-commits
mailing list