diff options
author | Werner Koch <[email protected]> | 2016-10-25 15:27:49 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-10-25 15:28:01 +0000 |
commit | b8159eadb5636cd9d93ee60c41e75d5978927870 (patch) | |
tree | 5b9c857eba89d45fca40f136abb85d95d15f70ee /src/gpgme.c | |
parent | qt: Improve WKSPublishJob apidoc (diff) | |
download | gpgme-b8159eadb5636cd9d93ee60c41e75d5978927870.tar.gz gpgme-b8159eadb5636cd9d93ee60c41e75d5978927870.zip |
core: New API functions gpgme_set_sender, gpgme_get_sender.
* src/context.h (struct gpgme_context): Add field 'sender'.
* src/gpgme.c: Include mbox-util.h.
(gpgme_release): Free SENDER.
(gpgme_set_sender): New.
(gpgme_get_sender): New.
* src/gpgme.def, src/libgpgme.vers: Add new functions.
* src/engine-gpg.c (append_args_from_sender): New.
(gpg_encrypt_sign, gpg_sign): Call append_args_from_sender.
(gpg_verify): Add arg CTX. Call append_args_from_sender/
* src/engine-gpgsm.c (gpgsm_verify): Add dummy arg CTX.
* src/engine-uiserver.c (uiserver_verify): Ditto.
* src/engine.c (_gpgme_engine_op_verify): Add arg CTX.
* src/verify.c (verify_start): Pass CTX to engine function.
* tests/gpg/t-verify.c (main): Add some checks for new functions.
* tests/run-sign.c (main): Add option --sender.
* tests/run-verify.c (main): Ditto.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/gpgme.c')
-rw-r--r-- | src/gpgme.c | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/src/gpgme.c b/src/gpgme.c index d59f8080..6d0dbffa 100644 --- a/src/gpgme.c +++ b/src/gpgme.c @@ -38,6 +38,7 @@ #include "debug.h" #include "priv-io.h" #include "sys-util.h" +#include "mbox-util.h" /* The default locale. */ @@ -275,12 +276,10 @@ gpgme_release (gpgme_ctx_t ctx) _gpgme_release_result (ctx); _gpgme_signers_clear (ctx); _gpgme_sig_notation_clear (ctx); - if (ctx->signers) - free (ctx->signers); - if (ctx->lc_ctype) - free (ctx->lc_ctype); - if (ctx->lc_messages) - free (ctx->lc_messages); + free (ctx->sender); + free (ctx->signers); + free (ctx->lc_ctype); + free (ctx->lc_messages); _gpgme_engine_info_release (ctx->engine_info); ctx->engine_info = NULL; DESTROY_LOCK (ctx->lock); @@ -459,6 +458,42 @@ gpgme_get_protocol_name (gpgme_protocol_t protocol) } } + +/* Store the sender's address in the context. ADDRESS is addr-spec of + * mailbox but my also be a complete mailbox, in which case this + * function extracts the addr-spec from it. Returns 0 on success or + * an error code if no valid addr-spec could be extracted from + * ADDRESS. */ +gpgme_error_t +gpgme_set_sender (gpgme_ctx_t ctx, const char *address) +{ + char *p = NULL; + + TRACE_BEG1 (DEBUG_CTX, "gpgme_set_sender", ctx, "sender='%s'", + address?address:"(null)"); + + if (!ctx || (address && !(p = _gpgme_mailbox_from_userid (address)))) + return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE)); + + free (ctx->sender); + ctx->sender = p; + return TRACE_ERR (0); +} + + +/* Return the sender's address (addr-spec part) from the context or + * NULL if none was set. The returned value is valid as long as the + * CTX is valid and gpgme_set_sender has not been used. */ +const char * +gpgme_get_sender (gpgme_ctx_t ctx) +{ + TRACE1 (DEBUG_CTX, "gpgme_get_sender", ctx, "sender='%s'", + ctx?ctx->sender:""); + + return ctx->sender; +} + + /* Enable or disable the use of an ascii armor for all output. */ void gpgme_set_armor (gpgme_ctx_t ctx, int use_armor) |