diff options
Diffstat (limited to '')
| -rw-r--r-- | src/delete.c | 54 | ||||
| -rw-r--r-- | src/engine-backend.h | 2 | ||||
| -rw-r--r-- | src/engine-gpg.c | 13 | ||||
| -rw-r--r-- | src/engine-gpgsm.c | 4 | ||||
| -rw-r--r-- | src/engine.c | 4 | ||||
| -rw-r--r-- | src/engine.h | 2 | ||||
| -rw-r--r-- | src/gpgme.def | 3 | ||||
| -rw-r--r-- | src/gpgme.h.in | 9 | ||||
| -rw-r--r-- | src/libgpgme.vers | 2 | 
9 files changed, 78 insertions, 15 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; diff --git a/src/engine-backend.h b/src/engine-backend.h index 53af6622..90328ecb 100644 --- a/src/engine-backend.h +++ b/src/engine-backend.h @@ -66,7 +66,7 @@ struct engine_ops                              gpgme_data_t ciph,  			    gpgme_data_t plain, int export_session_key,                              const char *override_session_key); -  gpgme_error_t (*delete) (void *engine, gpgme_key_t key, int allow_secret); +  gpgme_error_t (*delete) (void *engine, gpgme_key_t key, unsigned int flags);    gpgme_error_t (*edit) (void *engine, int type, gpgme_key_t key,  			 gpgme_data_t out, gpgme_ctx_t ctx /* FIXME */);    gpgme_error_t (*encrypt) (void *engine, gpgme_key_t recp[], diff --git a/src/engine-gpg.c b/src/engine-gpg.c index 0c3a63ee..c749c972 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -1628,13 +1628,18 @@ gpg_decrypt (void *engine,  }  static gpgme_error_t -gpg_delete (void *engine, gpgme_key_t key, int allow_secret) +gpg_delete (void *engine, gpgme_key_t key, unsigned int flags)  {    engine_gpg_t gpg = engine; -  gpgme_error_t err; +  gpgme_error_t err = 0; +  int allow_secret = flags & GPGME_DELETE_ALLOW_SECRET; +  int force = flags & GPGME_DELETE_FORCE; -  err = add_arg (gpg, allow_secret ? "--delete-secret-and-public-key" -		 : "--delete-key"); +  if (force) +    err = add_arg (gpg, "--yes"); +  if (!err) +    err = add_arg (gpg, allow_secret ? "--delete-secret-and-public-key" +		   : "--delete-key");    if (!err)      err = add_arg (gpg, "--");    if (!err) diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index c3d5427f..a0fcb1f4 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -1162,7 +1162,7 @@ gpgsm_decrypt (void *engine,  static gpgme_error_t -gpgsm_delete (void *engine, gpgme_key_t key, int allow_secret) +gpgsm_delete (void *engine, gpgme_key_t key, unsigned int flags)  {    engine_gpgsm_t gpgsm = engine;    gpgme_error_t err; @@ -1171,7 +1171,7 @@ gpgsm_delete (void *engine, gpgme_key_t key, int allow_secret)    char *line;    int length = 8;	/* "DELKEYS " */ -  (void)allow_secret; +  (void)flags;    if (!fpr)      return gpg_error (GPG_ERR_INV_VALUE); diff --git a/src/engine.c b/src/engine.c index 278916d4..89a8552c 100644 --- a/src/engine.c +++ b/src/engine.c @@ -671,7 +671,7 @@ _gpgme_engine_op_decrypt (engine_t engine,  gpgme_error_t  _gpgme_engine_op_delete (engine_t engine, gpgme_key_t key, -			 int allow_secret) +			 unsigned int flags)  {    if (!engine)      return gpg_error (GPG_ERR_INV_VALUE); @@ -679,7 +679,7 @@ _gpgme_engine_op_delete (engine_t engine, gpgme_key_t key,    if (!engine->ops->delete)      return gpg_error (GPG_ERR_NOT_IMPLEMENTED); -  return (*engine->ops->delete) (engine->engine, key, allow_secret); +  return (*engine->ops->delete) (engine->engine, key, flags);  } diff --git a/src/engine.h b/src/engine.h index dd0ef9c2..d25c1fa6 100644 --- a/src/engine.h +++ b/src/engine.h @@ -90,7 +90,7 @@ gpgme_error_t _gpgme_engine_op_decrypt (engine_t engine,                                          int export_session_key,                                          const char *override_session_key);  gpgme_error_t _gpgme_engine_op_delete (engine_t engine, gpgme_key_t key, -				       int allow_secret); +				       unsigned int flags);  gpgme_error_t _gpgme_engine_op_edit (engine_t engine, int type,  				     gpgme_key_t key, gpgme_data_t out,  				     gpgme_ctx_t ctx /* FIXME */); diff --git a/src/gpgme.def b/src/gpgme.def index 51053cd9..a8918122 100644 --- a/src/gpgme.def +++ b/src/gpgme.def @@ -262,5 +262,8 @@ EXPORTS      gpgme_op_decrypt_ext                  @195      gpgme_op_decrypt_ext_start            @196 +    gpgme_op_delete_ext                   @197 +    gpgme_op_delete_ext_start             @198 +  ; END diff --git a/src/gpgme.h.in b/src/gpgme.h.in index 867219a4..29cda2c6 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -1788,6 +1788,15 @@ gpgme_error_t gpgme_op_delete_start (gpgme_ctx_t ctx, const gpgme_key_t key,  gpgme_error_t gpgme_op_delete (gpgme_ctx_t ctx, const gpgme_key_t key,  			       int allow_secret); +/* Flags for the key delete functions.  */ +#define GPGME_DELETE_ALLOW_SECRET (1 << 0)  /* Also delete secret key.     */ +#define GPGME_DELETE_FORCE        (1 << 1)  /* Do not ask user to confirm.  */ + +gpgme_error_t gpgme_op_delete_ext_start (gpgme_ctx_t ctx, const gpgme_key_t key, +					 unsigned int flags); +gpgme_error_t gpgme_op_delete_ext (gpgme_ctx_t ctx, const gpgme_key_t key, +				   unsigned int flags); +  /*   * Key signing interface diff --git a/src/libgpgme.vers b/src/libgpgme.vers index adc8d7d4..9a74b76f 100644 --- a/src/libgpgme.vers +++ b/src/libgpgme.vers @@ -209,6 +209,8 @@ GPGME_1.0 {      gpgme_op_decrypt_verify_start;      gpgme_op_delete;      gpgme_op_delete_start; +    gpgme_op_delete_ext; +    gpgme_op_delete_ext_start;      gpgme_op_edit;      gpgme_op_edit_start;      gpgme_op_encrypt; | 
