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); +} | 
