aboutsummaryrefslogtreecommitdiffstats
path: root/src/delete.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2017-08-11 17:13:44 +0000
committerMarcus Brinkmann <[email protected]>2017-08-11 17:13:44 +0000
commita0cc6e01a8900b34cf231d8b5335ef3f85d01fdf (patch)
tree047fb190d1210a568692163ce2bc3de6e90ee045 /src/delete.c
parentdoc: Clarify import keys operation. (diff)
downloadgpgme-a0cc6e01a8900b34cf231d8b5335ef3f85d01fdf.tar.gz
gpgme-a0cc6e01a8900b34cf231d8b5335ef3f85d01fdf.zip
g10: Add new delete operations that allow more flags.
* NEWS: Document new interfaces. * doc/gpgme.texi: Document new interfaces. * src/gpgme.h.in (GPGME_DELETE_ALLOW_SECRET, GPGME_DELETE_FORCE, gpgme_op_delete_ext_start, gpgme_op_delete_ext): New. * src/delete.c (delete_start): Change allow_secret argument to flags. (gpgme_op_delete_ext, gpgme_op_delete_ext_start): New functions. * src/engine-backend.h (delete): Change allow_secret argument to flags. * src/engine.c (_gpgme_engine_op_delete): Likewise. * src/engine.h (_gpgme_engine_op_delete): Likewise (for prototype). * src/engine-gpgsm.c (gpgsm_delete): Likewise. * src/engine-gpg.c (gpg_delete): Likewise. Implement GPGME_DELETE_FORCE. * src/gpgme.def (gpgme_op_delete_ext, gpgme_op_delete_ext_start): New. * src/libgpgme.vers (gpgme_op_delete_ext, gpgme_op_delete_ext_start): New. Signed-off-by: Marcus Brinkmann <[email protected]> GnuPG-bug-id: 2916
Diffstat (limited to 'src/delete.c')
-rw-r--r--src/delete.c54
1 files changed, 49 insertions, 5 deletions
diff --git a/src/delete.c b/src/delete.c
index fc99aacf..1bf1cb48 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -108,7 +108,7 @@ delete_status_handler (void *priv, gpgme_status_code_t code, char *args)
static gpgme_error_t
delete_start (gpgme_ctx_t ctx, int synchronous, const gpgme_key_t key,
- int allow_secret)
+ unsigned int flags)
{
gpgme_error_t err;
@@ -118,7 +118,7 @@ delete_start (gpgme_ctx_t ctx, int synchronous, const gpgme_key_t key,
_gpgme_engine_set_status_handler (ctx->engine, delete_status_handler, ctx);
- return _gpgme_engine_op_delete (ctx->engine, key, allow_secret);
+ return _gpgme_engine_op_delete (ctx->engine, key, flags);
}
@@ -130,7 +130,7 @@ gpgme_op_delete_start (gpgme_ctx_t ctx, const gpgme_key_t key,
{
gpgme_error_t err;
- TRACE_BEG3 (DEBUG_CTX, "gpgme_op_delete", ctx,
+ TRACE_BEG3 (DEBUG_CTX, "gpgme_op_delete_start", ctx,
"key=%p (%s), allow_secret=%i", key,
(key->subkeys && key->subkeys->fpr) ?
key->subkeys->fpr : "invalid", allow_secret);
@@ -138,7 +138,8 @@ gpgme_op_delete_start (gpgme_ctx_t ctx, const gpgme_key_t key,
if (!ctx)
return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
- err = delete_start (ctx, 0, key, allow_secret);
+ err = delete_start (ctx, 0, key,
+ allow_secret ? GPGME_DELETE_ALLOW_SECRET : 0);
return TRACE_ERR (err);
}
@@ -158,7 +159,50 @@ gpgme_op_delete (gpgme_ctx_t ctx, const gpgme_key_t key, int allow_secret)
if (!ctx)
return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
- err = delete_start (ctx, 1, key, allow_secret);
+ err = delete_start (ctx, 1, key,
+ allow_secret ? GPGME_DELETE_ALLOW_SECRET : 0);
+ if (!err)
+ err = _gpgme_wait_one (ctx);
+ return err;
+}
+
+
+/* Delete KEY from the keyring. */
+gpgme_error_t
+gpgme_op_delete_ext_start (gpgme_ctx_t ctx, const gpgme_key_t key,
+ unsigned int flags)
+{
+ gpgme_error_t err;
+
+ TRACE_BEG3 (DEBUG_CTX, "gpgme_op_delete_ext_start", ctx,
+ "key=%p (%s), flags=0x%x", key,
+ (key->subkeys && key->subkeys->fpr) ?
+ key->subkeys->fpr : "invalid", flags);
+
+ if (!ctx)
+ return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
+
+ err = delete_start (ctx, 0, key, flags);
+ return TRACE_ERR (err);
+}
+
+
+/* Delete KEY from the keyring. */
+gpgme_error_t
+gpgme_op_delete_ext (gpgme_ctx_t ctx, const gpgme_key_t key,
+ unsigned int flags)
+{
+ gpgme_error_t err;
+
+ TRACE_BEG3 (DEBUG_CTX, "gpgme_op_delete_ext", ctx,
+ "key=%p (%s), flags=0x%x", key,
+ (key->subkeys && key->subkeys->fpr) ?
+ key->subkeys->fpr : "invalid", flags);
+
+ if (!ctx)
+ return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
+
+ err = delete_start (ctx, 1, key, flags);
if (!err)
err = _gpgme_wait_one (ctx);
return err;