aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/engine-gpg.c11
-rw-r--r--src/engine.h3
-rw-r--r--src/genkey.c51
-rw-r--r--src/gpgme.def2
-rw-r--r--src/gpgme.h.in12
-rw-r--r--src/libgpgme.vers2
6 files changed, 68 insertions, 13 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index db6637a2..534d5d10 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -2115,14 +2115,19 @@ gpg_addkey (engine_gpg_t gpg,
static gpgme_error_t
gpg_adduid (engine_gpg_t gpg,
gpgme_key_t key,
- const char *userid)
+ const char *userid,
+ unsigned int extraflags)
{
gpgme_error_t err;
if (!key || !key->fpr || !userid)
return gpg_error (GPG_ERR_INV_ARG);
- err = add_arg (gpg, "--quick-adduid");
+ if ((extraflags & GENKEY_EXTRAFLAG_REVOKE))
+ err = add_arg (gpg, "--quick-revuid");
+ else
+ err = add_arg (gpg, "--quick-adduid");
+
if (!err)
err = add_arg (gpg, "--");
if (!err)
@@ -2184,7 +2189,7 @@ gpg_genkey (void *engine,
else if (!userid && key)
err = gpg_addkey (gpg, algo, expires, key, flags, extraflags);
else if (userid && key && !algo)
- err = gpg_adduid (gpg, key, userid);
+ err = gpg_adduid (gpg, key, userid, extraflags);
else
err = gpg_error (GPG_ERR_INV_VALUE);
diff --git a/src/engine.h b/src/engine.h
index 391caf28..eb37da8f 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -25,7 +25,8 @@
#include "gpgme.h"
/* Flags used by the EXTRAFLAGS arg of _gpgme_engine_op_genkey. */
-#define GENKEY_EXTRAFLAG_ARMOR 1
+#define GENKEY_EXTRAFLAG_ARMOR 1
+#define GENKEY_EXTRAFLAG_REVOKE 2
struct engine;
diff --git a/src/genkey.c b/src/genkey.c
index 100e655e..9dcf0be8 100644
--- a/src/genkey.c
+++ b/src/genkey.c
@@ -181,7 +181,7 @@ genkey_status_handler (void *priv, gpgme_status_code_t code, char *args)
return gpg_error (GPG_ERR_GENERAL);
else if (opd->failure_code)
return opd->failure_code;
- else if (opd->uidmode)
+ else if (opd->uidmode == 1)
opd->result.uid = 1; /* We have no status line, thus this hack. */
break;
@@ -489,8 +489,8 @@ gpgme_op_createsubkey (gpgme_ctx_t ctx, gpgme_key_t key, const char *algo,
static gpgme_error_t
-adduid_start (gpgme_ctx_t ctx, int synchronous,
- gpgme_key_t key, const char *userid, unsigned int flags)
+addrevuid_start (gpgme_ctx_t ctx, int synchronous, int revoke,
+ gpgme_key_t key, const char *userid, unsigned int flags)
{
gpgme_error_t err;
void *hook;
@@ -512,7 +512,7 @@ adduid_start (gpgme_ctx_t ctx, int synchronous,
if (err)
return err;
- opd->uidmode = 1;
+ opd->uidmode = revoke? 2 : 1;
_gpgme_engine_set_status_handler (ctx->engine, genkey_status_handler, ctx);
@@ -528,7 +528,7 @@ adduid_start (gpgme_ctx_t ctx, int synchronous,
userid, NULL, 0, 0,
key, flags,
NULL,
- ctx->use_armor? GENKEY_EXTRAFLAG_ARMOR:0,
+ revoke? GENKEY_EXTRAFLAG_REVOKE : 0,
NULL, NULL);
}
@@ -547,7 +547,7 @@ gpgme_op_adduid_start (gpgme_ctx_t ctx,
if (!ctx)
return TRACE_ERR (gpg_error (GPG_ERR_INV_ARG));
- err = adduid_start (ctx, 0, key, userid, flags);
+ err = addrevuid_start (ctx, 0, 0, key, userid, flags);
return TRACE_ERR (err);
}
@@ -564,7 +564,44 @@ gpgme_op_adduid (gpgme_ctx_t ctx,
if (!ctx)
return TRACE_ERR (gpg_error (GPG_ERR_INV_ARG));
- err = adduid_start (ctx, 1, key, userid, flags);
+ err = addrevuid_start (ctx, 1, 0, key, userid, flags);
+ if (!err)
+ err = _gpgme_wait_one (ctx);
+ return TRACE_ERR (err);
+}
+
+
+/* Revoke USERID from KEY. */
+gpgme_error_t
+gpgme_op_revuid_start (gpgme_ctx_t ctx,
+ gpgme_key_t key, const char *userid, unsigned int flags)
+{
+ gpgme_error_t err;
+
+ TRACE_BEG2 (DEBUG_CTX, "gpgme_op_revuid_start", ctx,
+ "uid='%s' flags=0x%x", userid, flags);
+
+ if (!ctx)
+ return TRACE_ERR (gpg_error (GPG_ERR_INV_ARG));
+
+ err = addrevuid_start (ctx, 0, 1, key, userid, flags);
+ return TRACE_ERR (err);
+}
+
+
+gpgme_error_t
+gpgme_op_revuid (gpgme_ctx_t ctx,
+ gpgme_key_t key, const char *userid, unsigned int flags)
+{
+ gpgme_error_t err;
+
+ TRACE_BEG2 (DEBUG_CTX, "gpgme_op_revuid", ctx,
+ "uid='%s' flags=0x%x", userid, flags);
+
+ if (!ctx)
+ return TRACE_ERR (gpg_error (GPG_ERR_INV_ARG));
+
+ err = addrevuid_start (ctx, 1, 1, key, userid, flags);
if (!err)
err = _gpgme_wait_one (ctx);
return TRACE_ERR (err);
diff --git a/src/gpgme.def b/src/gpgme.def
index 54b04e04..4c7ff414 100644
--- a/src/gpgme.def
+++ b/src/gpgme.def
@@ -235,6 +235,8 @@ EXPORTS
gpgme_op_createsubkey @175
gpgme_op_adduid_start @176
gpgme_op_adduid @177
+ gpgme_op_revuid_start @178
+ gpgme_op_revuid @179
; END
diff --git a/src/gpgme.h.in b/src/gpgme.h.in
index ec436c80..a26b4324 100644
--- a/src/gpgme.h.in
+++ b/src/gpgme.h.in
@@ -1894,10 +1894,18 @@ gpgme_error_t gpgme_op_createsubkey (gpgme_ctx_t ctx,
/* Add USERID to an existing KEY. */
gpgme_error_t gpgme_op_adduid_start (gpgme_ctx_t ctx,
gpgme_key_t key, const char *userid,
- unsigned int flags);
+ unsigned int reserved);
gpgme_error_t gpgme_op_adduid (gpgme_ctx_t ctx,
gpgme_key_t key, const char *userid,
- unsigned int flags);
+ unsigned int reserved);
+
+/* Revoke a USERID from a KEY. */
+gpgme_error_t gpgme_op_revuid_start (gpgme_ctx_t ctx,
+ gpgme_key_t key, const char *userid,
+ unsigned int reserved);
+gpgme_error_t gpgme_op_revuid (gpgme_ctx_t ctx,
+ gpgme_key_t key, const char *userid,
+ unsigned int reserved);
diff --git a/src/libgpgme.vers b/src/libgpgme.vers
index 0cef9e0b..8193ee4d 100644
--- a/src/libgpgme.vers
+++ b/src/libgpgme.vers
@@ -109,6 +109,8 @@ GPGME_1.1 {
gpgme_op_createsubkey;
gpgme_op_adduid_start;
gpgme_op_adduid;
+ gpgme_op_revuid_start;
+ gpgme_op_revuid;
};