diff options
author | Werner Koch <[email protected]> | 2017-03-21 18:02:20 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-03-21 18:03:58 +0000 |
commit | 421ddd1e6706046c5062417fd69a87e10c9fc0a9 (patch) | |
tree | a48e37f5fd1c22c2f295c5f63537a8726ab5c9fd /src/genkey.c | |
parent | python: Wrap 'gpgme_op_keylist_from_data_start'. (diff) | |
download | gpgme-421ddd1e6706046c5062417fd69a87e10c9fc0a9.tar.gz gpgme-421ddd1e6706046c5062417fd69a87e10c9fc0a9.zip |
core: New API gpgme_op_set_uid_flag.
* src/gpgme.h.in (gpgme_op_set_uid_flag_start): New.
(gpgme_op_set_uid_flag_start): New.
* src/gpgme.def, src/libgpgme.vers: Add them.
* src/genkey.c (addrevuid_start): Change arg revoke to a flag.
(gpgme_op_revuid_start): Pass GENKEY_EXTRAFLAG_REVOKE for the fomer
revoke parameter.
(gpgme_op_revuid): Ditto.
(set_uid_flag): New.
(gpgme_op_set_uid_flag_start): New.
(gpgme_op_set_uid_flag): New.
* src/engine.h (GENKEY_EXTRAFLAG_SETPRIMARY): new.
* src/engine-gpg.c (gpg_adduid): Implement that flag.
* tests/run-genkey.c (main): New command --set-primary.
--
GnuPG-bug-id: 2931
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/genkey.c')
-rw-r--r-- | src/genkey.c | 62 |
1 files changed, 57 insertions, 5 deletions
diff --git a/src/genkey.c b/src/genkey.c index ea3f1ea4..710b58ff 100644 --- a/src/genkey.c +++ b/src/genkey.c @@ -489,7 +489,7 @@ gpgme_op_createsubkey (gpgme_ctx_t ctx, gpgme_key_t key, const char *algo, static gpgme_error_t -addrevuid_start (gpgme_ctx_t ctx, int synchronous, int revoke, +addrevuid_start (gpgme_ctx_t ctx, int synchronous, int extraflags, gpgme_key_t key, const char *userid, unsigned int flags) { gpgme_error_t err; @@ -512,7 +512,7 @@ addrevuid_start (gpgme_ctx_t ctx, int synchronous, int revoke, if (err) return err; - opd->uidmode = revoke? 2 : 1; + opd->uidmode = extraflags? 2 : 1; _gpgme_engine_set_status_handler (ctx->engine, genkey_status_handler, ctx); @@ -528,7 +528,7 @@ addrevuid_start (gpgme_ctx_t ctx, int synchronous, int revoke, userid, NULL, 0, 0, key, flags, NULL, - revoke? GENKEY_EXTRAFLAG_REVOKE : 0, + extraflags, NULL, NULL); } @@ -584,7 +584,7 @@ gpgme_op_revuid_start (gpgme_ctx_t ctx, if (!ctx) return TRACE_ERR (gpg_error (GPG_ERR_INV_ARG)); - err = addrevuid_start (ctx, 0, 1, key, userid, flags); + err = addrevuid_start (ctx, 0, GENKEY_EXTRAFLAG_REVOKE, key, userid, flags); return TRACE_ERR (err); } @@ -601,8 +601,60 @@ gpgme_op_revuid (gpgme_ctx_t ctx, if (!ctx) return TRACE_ERR (gpg_error (GPG_ERR_INV_ARG)); - err = addrevuid_start (ctx, 1, 1, key, userid, flags); + err = addrevuid_start (ctx, 1, GENKEY_EXTRAFLAG_REVOKE, key, userid, flags); if (!err) err = _gpgme_wait_one (ctx); return TRACE_ERR (err); } + + +/* Set a flag on the USERID of KEY. The only supported flag right now + * is "primary" to mark the primary key. */ +static gpg_error_t +set_uid_flag (gpgme_ctx_t ctx, int synchronous, + gpgme_key_t key, const char *userid, + const char *name, const char *value) +{ + gpgme_error_t err; + + TRACE_BEG4 (DEBUG_CTX, "gpgme_op_set_uid_flag", ctx, + "%d uid='%s' '%s'='%s'", synchronous, userid, name, value); + + if (!ctx || !name || !key || !userid) + return TRACE_ERR (gpg_error (GPG_ERR_INV_ARG)); + + if (!strcmp (name, "primary")) + { + if (value) + err = gpg_error (GPG_ERR_INV_ARG); + else + err = addrevuid_start (ctx, synchronous, + GENKEY_EXTRAFLAG_SETPRIMARY, key, userid, 0); + } + else + return err = gpg_error (GPG_ERR_UNKNOWN_NAME); + + if (synchronous && !err) + err = _gpgme_wait_one (ctx); + return TRACE_ERR (err); +} + + +/* See set_uid_flag. */ +gpgme_error_t +gpgme_op_set_uid_flag_start (gpgme_ctx_t ctx, + gpgme_key_t key, const char *userid, + const char *name, const char *value) +{ + return set_uid_flag (ctx, 0, key, userid, name, value); +} + + +/* See set_uid_flag. Thsi is the synchronous variant. */ +gpgme_error_t +gpgme_op_set_uid_flag (gpgme_ctx_t ctx, + gpgme_key_t key, const char *userid, + const char *name, const char *value) +{ + return set_uid_flag (ctx, 1, key, userid, name, value); +} |