summaryrefslogtreecommitdiff
path: root/src/key.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <mb@g10code.com>2009-11-10 09:07:19 +0000
committerMarcus Brinkmann <mb@g10code.com>2009-11-10 09:07:19 +0000
commit96cf17b15995c9b925f80a64dbd42c1305ca9895 (patch)
tree364f15711af329ff9b3b207245516e1320fb3ba0 /src/key.c
parent8435f18d9684398869fddd71b36f1fe7b24d8370 (diff)
downloadgpgme-96cf17b15995c9b925f80a64dbd42c1305ca9895.tar.gz
2009-11-10 Marcus Brinkmann <marcus@g10code.de>
* configure.ac: Activate UIServer if FD passing is enabled and Assuan is available. m4/ 2009-11-10 Marcus Brinkmann <marcus@g10code.de> * libassuan.m4: Fix LIBASSUAN_VERSION. src/ 2009-11-10 Marcus Brinkmann <marcus@g10code.de> * Makefile.am (uiserver_components): New variable. (main_sources): Add it. * ops.h, key.c (_gpgme_key_append_name): Take CONVERT argument, implement it. Adjust callers. (gpgme_key_from_uid): New function. * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_DEFAULT. (gpgme_encrypt_flags_t): Add GPGME_ENCRYPT_PREPARE, GPGME_ENCRYPT_EXPECT_SIGN. (gpgme_set_sub_protocol, gpgme_key_from_uid): New functions. * libgpgme.vers, gpgme.def: Add new functions. * gpgme.c (gpgme_set_protocol): Add UIServer protocol. (gpgme_set_sub_protocol): New function. (gpgme_get_protocol_name): Add UIServer and default protocol. * assuan-support.c: Return correct error values, implement socketpair for POSIX. * priv-io.h, posix-io.c, w32-io.c, w32-glib-io.c, w32-qt-io.cpp (_gpgme_io_spawn): Add ATFORK and ATFORKVALUE arguments. Implement it for POSIX. Adjust all callers. * engine.h, engine-backend.h (_gpgme_engine_set_protocol) (_gpgme_engine_op_decrypt_verify): New prototypes. Adjust all users. * engine.c (engine_ops, gpgme_get_engine_info): Add UIServer engine. (_gpgme_engine_set_protocol, _gpgme_engine_op_decrypt_verify): New function. * decrypt-verify.c (decrypt_verify_start): Call _gpgme_engine_op_decrypt_verify. * util.h, posix-util.c, w32-util.c (_gpgme_get_uiserver_socket_path): New function. * engine-gpgsm.c (gpgsm_set_fd): Fix _gpgme_io_pipe invocation. * gpgme-tool.c: Some support for UIServer protocol. * engine-uiserver.c: New file.
Diffstat (limited to 'src/key.c')
-rw-r--r--src/key.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/key.c b/src/key.c
index 468946fe..7dd38c5b 100644
--- a/src/key.c
+++ b/src/key.c
@@ -202,7 +202,7 @@ parse_x509_user_id (char *src, char **name, char **email,
/* Take a name from the --with-colon listing, remove certain escape
sequences sequences and put it into the list of UIDs. */
gpgme_error_t
-_gpgme_key_append_name (gpgme_key_t key, char *src)
+_gpgme_key_append_name (gpgme_key_t key, char *src, int convert)
{
gpgme_user_id_t uid;
char *dst;
@@ -219,7 +219,10 @@ _gpgme_key_append_name (gpgme_key_t key, char *src)
uid->uid = ((char *) uid) + sizeof (*uid);
dst = uid->uid;
- _gpgme_decode_c_string (src, &dst, src_len + 1);
+ if (convert)
+ _gpgme_decode_c_string (src, &dst, src_len + 1);
+ else
+ memcpy (dst, src, src_len + 1);
dst += strlen (dst) + 1;
if (key->protocol == GPGME_PROTOCOL_CMS)
@@ -371,6 +374,32 @@ gpgme_key_unref (gpgme_key_t key)
}
+/* Support functions. */
+
+/* Create a dummy key to specify an email address. */
+gpgme_error_t
+gpgme_key_from_uid (gpgme_key_t *r_key, const char *name)
+{
+ gpgme_error_t err;
+ gpgme_key_t key;
+
+ *r_key = NULL;
+ err = _gpgme_key_new (&key);
+ if (err)
+ return err;
+
+ /* Note: protocol doesn't matter if only email is provided. */
+ err = _gpgme_key_append_name (key, name, 0);
+ if (err)
+ gpgme_key_unref (key);
+ else
+ *r_key = key;
+
+ return err;
+}
+
+
+
/* Compatibility interfaces. */
void