aboutsummaryrefslogtreecommitdiffstats
path: root/src/assuan-support.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2009-11-10 09:07:19 +0000
committerMarcus Brinkmann <[email protected]>2009-11-10 09:07:19 +0000
commit96cf17b15995c9b925f80a64dbd42c1305ca9895 (patch)
tree364f15711af329ff9b3b207245516e1320fb3ba0 /src/assuan-support.c
parentFix last change. (diff)
downloadgpgme-96cf17b15995c9b925f80a64dbd42c1305ca9895.tar.gz
gpgme-96cf17b15995c9b925f80a64dbd42c1305ca9895.zip
2009-11-10 Marcus Brinkmann <[email protected]>
* configure.ac: Activate UIServer if FD passing is enabled and Assuan is available. m4/ 2009-11-10 Marcus Brinkmann <[email protected]> * libassuan.m4: Fix LIBASSUAN_VERSION. src/ 2009-11-10 Marcus Brinkmann <[email protected]> * 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/assuan-support.c')
-rw-r--r--src/assuan-support.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/assuan-support.c b/src/assuan-support.c
index 4646416f..d5defa8a 100644
--- a/src/assuan-support.c
+++ b/src/assuan-support.c
@@ -4,6 +4,7 @@
#include <assert.h>
#include <stdlib.h>
+#include <errno.h>
#include "assuan.h"
@@ -76,7 +77,8 @@ my_recvmsg (assuan_context_t ctx, assuan_fd_t fd, assuan_msghdr_t msg,
int flags)
{
#ifdef HAVE_W32_SYSTEM
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ errno = ENOSYS;
+ return -1;
#else
return _gpgme_io_recvmsg (fd, msg, flags);
#endif
@@ -89,7 +91,8 @@ my_sendmsg (assuan_context_t ctx, assuan_fd_t fd, const assuan_msghdr_t msg,
int flags)
{
#ifdef HAVE_W32_SYSTEM
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ errno = ENOSYS;
+ return -1;
#else
return _gpgme_io_sendmsg (fd, msg, flags);
#endif
@@ -107,14 +110,17 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
void (*atfork) (void *opaque, int reserved),
void *atforkvalue, unsigned int flags)
{
- gpg_error_t err;
+ int err;
struct spawn_fd_item_s *fd_items;
int i;
assert (name);
if (! name)
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ {
+ errno = ENOSYS;
+ return -1;
+ }
i = 0;
if (fd_child_list)
@@ -126,7 +132,7 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
i += 3;
fd_items = malloc (sizeof (struct spawn_fd_item_s) * i);
if (! fd_items)
- return gpg_error_from_syserror ();
+ return -1;
i = 0;
if (fd_child_list)
{
@@ -152,7 +158,8 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
fd_items[i].fd = -1;
fd_items[i].dup_to = -1;
- err = _gpgme_io_spawn (name, argv, IOSPAWN_FLAG_NOCLOSE, fd_items, r_pid);
+ err = _gpgme_io_spawn (name, argv, IOSPAWN_FLAG_NOCLOSE, fd_items,
+ atfork, atforkvalue, r_pid);
if (! err)
{
i = 0;
@@ -195,8 +202,13 @@ static int
my_socketpair (assuan_context_t ctx, int namespace, int style,
int protocol, assuan_fd_t filedes[2])
{
- assert ("Should never happen.");
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+#ifdef HAVE_W32_SYSTEM
+ errno = ENOSYS;
+ return -1;
+#else
+ /* FIXME: Debug output missing. */
+ return __assuan_socketpair (ctx, namespace, style, protocol, filedes);
+#endif
}