/* delete.c - delete a key * Copyright (C) 2001 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 General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include #include "util.h" #include "context.h" #include "ops.h" #include "key.h" static void delete_status_handler ( GpgmeCtx ctx, GpgStatusCode code, char *args ) { if ( ctx->out_of_core ) return; switch (code) { case STATUS_EOF: break; default: /* ignore all other codes */ break; } } GpgmeError gpgme_op_delete_start (GpgmeCtx ctx, const GpgmeKey key, int allow_secret) { GpgmeError err = 0; fail_on_pending_request (ctx); ctx->pending = 1; if (!key) { err = mk_error (Invalid_Value); goto leave; } if (ctx->engine) { _gpgme_engine_release (ctx->engine); ctx->engine = NULL; } err = _gpgme_engine_new (ctx->use_cms ? GPGME_PROTOCOL_CMS : GPGME_PROTOCOL_OpenPGP, &ctx->engine); if (err) goto leave; _gpgme_engine_set_status_handler (ctx->engine, delete_status_handler, ctx); _gpgme_engine_set_verbosity (ctx->engine, ctx->verbosity); err = _gpgme_engine_op_delete (ctx->engine, key, allow_secret); if (!err) err = _gpgme_engine_start (ctx->engine, ctx); leave: if (err) { ctx->pending = 0; _gpgme_engine_release (ctx->engine); ctx->engine = NULL; } return err; } /** * gpgme_op_delete: * @c: Context * @key: A Key Object * @allow_secret: Allow secret key delete * * Delete the give @key from the key database. To delete a secret * along with the public key, @allow_secret must be true. * * Return value: 0 on success or an error code. **/ GpgmeError gpgme_op_delete ( GpgmeCtx c, const GpgmeKey key, int allow_secret ) { int rc = gpgme_op_delete_start ( c, key, allow_secret ); if ( !rc ) { gpgme_wait (c, 1); c->pending = 0; /* FIXME: check for success */ } return rc; }