summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Brinkmann <mb@g10code.com>2009-11-05 12:00:35 +0000
committerMarcus Brinkmann <mb@g10code.com>2009-11-05 12:00:35 +0000
commit420da928a39d1e296fb74c0ba3a023a889a082bf (patch)
treee5f3eaba544dbef4a4d3a9e4b628156975f97ea5 /src
parent66f0ccbe80999c6112a98e2239e3f1f72f3f0532 (diff)
downloadlibassuan-420da928a39d1e296fb74c0ba3a023a889a082bf.tar.gz
2009-11-05 Marcus Brinkmann <marcus@g10code.de>
* tests/fdpassing.c (main): Call assuan_pipe_connect instead of assuan_pipe_connect_ext. doc/ 2009-11-05 Marcus Brinkmann <marcus@g10code.de> * assuan.texi (Client code): Document ASSUAN_PIPE_CONNECT_FDPASSING and ASSUAN_PIPE_CONNECT_DETACHED. (Server code): Document ASSUAN_SOCKET_SERVER_FDPASSING and ASSUAN_SOCKET_SERVER_ACCEPTED. (Utilities): Update documentation of assuan_get_peercred. src/ 2009-11-05 Marcus Brinkmann <marcus@g10code.de> * assuan.h (struct _assuan_peercred, assuan_peercred_t): New. (assuan_get_peercred): Define on all systems, return assuan_peercred_t. * assuan-defs.h (struct assuan_context_s): Move valid flag out of peercred struct, use struct _assuan_peercred. * libassuan.def: Add assuan_get_peercred. * assuan-connect.c (assuan_get_peercred): Moved to ... * context.c (assuan_get_peercred): ... here. Reimplement. * assuan-socket-server.c (accept_connection_bottom): Adjust access to peercred in context. * assuan.h (ASSUAN_PIPE_CONNECT_FDPASSING) (ASSUAN_PIPE_CONNECT_DETACHED, ASSUAN_SOCKET_SERVER_FDPASSING) (ASSUAN_SOCKET_SERVER_ACCEPTED, ASSUAN_SOCKET_CONNECT_FDPASSING): New. (assuan_pipe_connect_ext): Renamed to ... (assuan_pipe_connect): ... this, overwriting old prototype. (assuan_socket_connect_ext): Renamed to ... (assuan_socket_connect): ... this, overwriting old prototype. (assuan_init_socket_server_ext): Renamed to ... (assuan_init_socket_server): ... this, overwriting old prototype. * assuan-pipe-connect.c: Likewise for functions. * assuan-socket-connect.c: Likewise. * assuan-socket-server.c: Likewise. * libassuan.def (assuan_init_socket_server_ext) (assuan_pipe_connect_ext, assuan_socket_connect_ext): Removed. * libassuan.vers: Likewise.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog26
-rw-r--r--src/assuan-connect.c26
-rw-r--r--src/assuan-defs.h12
-rw-r--r--src/assuan-pipe-connect.c25
-rw-r--r--src/assuan-socket-connect.c16
-rw-r--r--src/assuan-socket-server.c16
-rw-r--r--src/assuan.h45
-rw-r--r--src/context.c16
-rw-r--r--src/libassuan.def102
-rw-r--r--src/libassuan.vers3
10 files changed, 129 insertions, 158 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index c5d668e..c88d4c1 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,31 @@
2009-11-05 Marcus Brinkmann <marcus@g10code.de>
+ * assuan.h (struct _assuan_peercred, assuan_peercred_t): New.
+ (assuan_get_peercred): Define on all systems, return
+ assuan_peercred_t.
+ * assuan-defs.h (struct assuan_context_s): Move valid flag out of
+ peercred struct, use struct _assuan_peercred.
+ * libassuan.def: Add assuan_get_peercred.
+ * assuan-connect.c (assuan_get_peercred): Moved to ...
+ * context.c (assuan_get_peercred): ... here. Reimplement.
+ * assuan-socket-server.c (accept_connection_bottom): Adjust access
+ to peercred in context.
+ * assuan.h (ASSUAN_PIPE_CONNECT_FDPASSING)
+ (ASSUAN_PIPE_CONNECT_DETACHED, ASSUAN_SOCKET_SERVER_FDPASSING)
+ (ASSUAN_SOCKET_SERVER_ACCEPTED, ASSUAN_SOCKET_CONNECT_FDPASSING): New.
+ (assuan_pipe_connect_ext): Renamed to ...
+ (assuan_pipe_connect): ... this, overwriting old prototype.
+ (assuan_socket_connect_ext): Renamed to ...
+ (assuan_socket_connect): ... this, overwriting old prototype.
+ (assuan_init_socket_server_ext): Renamed to ...
+ (assuan_init_socket_server): ... this, overwriting old prototype.
+ * assuan-pipe-connect.c: Likewise for functions.
+ * assuan-socket-connect.c: Likewise.
+ * assuan-socket-server.c: Likewise.
+ * libassuan.def (assuan_init_socket_server_ext)
+ (assuan_pipe_connect_ext, assuan_socket_connect_ext): Removed.
+ * libassuan.vers: Likewise.
+
* assuan-defs.h (assuan_context_t): Add member PROCESS_DONE.
* assuan.h (assuan_process_next): Add argument DONE to prototype.
* assuan-handler.c (assuan_process_next): Likewise, handle it.
diff --git a/src/assuan-connect.c b/src/assuan-connect.c
index f5540a1..44c92d3 100644
--- a/src/assuan-connect.c
+++ b/src/assuan-connect.c
@@ -61,29 +61,3 @@ assuan_get_pid (assuan_context_t ctx)
{
return (ctx && ctx->pid) ? ctx->pid : -1;
}
-
-
-#ifndef HAVE_W32_SYSTEM
-/* Return user credentials. PID, UID and GID may be given as NULL if
- you are not interested in a value. For getting the pid of the
- peer the assuan_get_pid is usually better suited. */
-gpg_error_t
-assuan_get_peercred (assuan_context_t ctx, pid_t *pid, uid_t *uid, gid_t *gid)
-{
- if (!ctx)
- return _assuan_error (ctx, GPG_ERR_ASS_INV_VALUE);
- if (!ctx->peercred.valid)
- return _assuan_error (ctx, GPG_ERR_ASS_GENERAL);
-
-#ifdef HAVE_SO_PEERCRED
- if (pid)
- *pid = ctx->peercred.pid;
- if (uid)
- *uid = ctx->peercred.uid;
- if (gid)
- *gid = ctx->peercred.gid;
-#endif
-
- return 0;
-}
-#endif /* HAVE_W32_SYSTEM */
diff --git a/src/assuan-defs.h b/src/assuan-defs.h
index bd0cbc8..8ce5f99 100644
--- a/src/assuan-defs.h
+++ b/src/assuan-defs.h
@@ -95,6 +95,9 @@ struct assuan_context_s
/* Callback handlers replacing system I/O functions. */
struct assuan_system_hooks system;
+ int peercred_valid; /* Whether this structure has valid information. */
+ struct _assuan_peercred peercred;
+
/* Now come the members specific to subsystems or engines. FIXME:
This is not developed yet. See below for the legacy members. */
struct
@@ -169,15 +172,6 @@ struct assuan_context_s
assuan_sock_nonce_t listen_nonce; /* Used with LISTEN_FD. */
assuan_fd_t connected_fd; /* helper */
- struct {
- int valid; /* Whether this structure has valid information. */
-#ifdef HAVE_SO_PEERCRED
- pid_t pid; /* The pid of the peer. */
- uid_t uid; /* The uid of the peer. */
- gid_t gid; /* The gid of the peer. */
-#endif /* HAVE_SO_PEERCRED */
- } peercred;
-
/* Used for Unix domain sockets. */
struct sockaddr_un myaddr;
struct sockaddr_un serveraddr;
diff --git a/src/assuan-pipe-connect.c b/src/assuan-pipe-connect.c
index bdc59a4..6c7762e 100644
--- a/src/assuan-pipe-connect.c
+++ b/src/assuan-pipe-connect.c
@@ -380,21 +380,6 @@ socketpair_connect (assuan_context_t ctx,
#endif /*!HAVE_W32_SYSTEM*/
-/* Connect to a server over a pipe, creating the assuan context and
- returning it in CTX. The server filename is NAME, the argument
- vector in ARGV. FD_CHILD_LIST is a -1 terminated list of file
- descriptors not to close in the child. */
-gpg_error_t
-assuan_pipe_connect (assuan_context_t ctx, const char *name,
- const char *argv[], int *fd_child_list)
-{
- TRACE1 (ctx, ASSUAN_LOG_CTX, "assuan_pipe_connect", ctx,
- "name=%s", name ? name : "(null)");
-
- return pipe_connect (ctx, name, argv, fd_child_list, NULL, NULL, 0);
-}
-
-
/* Connect to a server over a full-duplex socket (i.e. created by
socketpair), creating the assuan context and returning it in CTX.
The server filename is NAME, the argument vector in ARGV.
@@ -425,11 +410,11 @@ assuan_pipe_connect (assuan_context_t ctx, const char *name,
"server" in *ARGV (but it is sufficient to check only the first
character). */
gpg_error_t
-assuan_pipe_connect_ext (assuan_context_t ctx,
- const char *name, const char *argv[],
- int *fd_child_list,
- void (*atfork) (void *opaque, int reserved),
- void *atforkvalue, unsigned int flags)
+assuan_pipe_connect (assuan_context_t ctx,
+ const char *name, const char *argv[],
+ int *fd_child_list,
+ void (*atfork) (void *opaque, int reserved),
+ void *atforkvalue, unsigned int flags)
{
TRACE2 (ctx, ASSUAN_LOG_CTX, "assuan_pipe_connect_ext", ctx,
"name=%s,flags=0x%x", name ? name : "(null)", flags);
diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c
index 21997f0..6515631 100644
--- a/src/assuan-socket-connect.c
+++ b/src/assuan-socket-connect.c
@@ -78,23 +78,11 @@ do_deinit (assuan_context_t ctx)
/* Make a connection to the Unix domain socket NAME and return a new
Assuan context in CTX. SERVER_PID is currently not used but may
- become handy in the future. */
-gpg_error_t
-assuan_socket_connect (assuan_context_t ctx,
- const char *name, pid_t server_pid)
-{
- return assuan_socket_connect_ext (ctx, name, server_pid, 0);
-}
-
-
-/* Make a connection to the Unix domain socket NAME and return a new
- Assuan context in CTX. SERVER_PID is currently not used but may
become handy in the future. With flags set to 1 sendmsg and
recvmsg are used. */
gpg_error_t
-assuan_socket_connect_ext (assuan_context_t ctx,
- const char *name, pid_t server_pid,
- unsigned int flags)
+assuan_socket_connect (assuan_context_t ctx, const char *name,
+ pid_t server_pid, unsigned int flags)
{
gpg_error_t err;
assuan_fd_t fd;
diff --git a/src/assuan-socket-server.c b/src/assuan-socket-server.c
index 3487b19..2dbfa9f 100644
--- a/src/assuan-socket-server.c
+++ b/src/assuan-socket-server.c
@@ -46,7 +46,7 @@ accept_connection_bottom (assuan_context_t ctx)
{
assuan_fd_t fd = ctx->connected_fd;
- ctx->peercred.valid = 0;
+ ctx->peercred_valid = 0;
#ifdef HAVE_SO_PEERCRED
{
struct ucred cr;
@@ -57,7 +57,7 @@ accept_connection_bottom (assuan_context_t ctx)
ctx->peercred.pid = cr.pid;
ctx->peercred.uid = cr.uid;
ctx->peercred.gid = cr.gid;
- ctx->peercred.valid = 1;
+ ctx->peercred_valid = 1;
/* This overrides any already set PID if the function returns
a valid one. */
@@ -137,22 +137,14 @@ deinit_socket_server (assuan_context_t ctx)
ctx->cmdtbl = NULL;
}
-/* Initialize a server for the socket LISTEN_FD which has already be
- put into listen mode */
-gpg_error_t
-assuan_init_socket_server (assuan_context_t ctx, assuan_fd_t listen_fd)
-{
- return assuan_init_socket_server_ext (ctx, listen_fd, 0);
-}
-
/*
Flag bits: 0 - use sendmsg/recvmsg to allow descriptor passing
1 - FD has already been accepted.
*/
gpg_error_t
-assuan_init_socket_server_ext (assuan_context_t ctx, assuan_fd_t fd,
- unsigned int flags)
+assuan_init_socket_server (assuan_context_t ctx, assuan_fd_t fd,
+ unsigned int flags)
{
gpg_error_t rc;
diff --git a/src/assuan.h b/src/assuan.h
index c201294..7552257 100644
--- a/src/assuan.h
+++ b/src/assuan.h
@@ -361,42 +361,43 @@ gpg_error_t assuan_close_output_fd (assuan_context_t ctx);
gpg_error_t assuan_init_pipe_server (assuan_context_t ctx, int filedes[2]);
/*-- assuan-socket-server.c --*/
+#define ASSUAN_SOCKET_SERVER_FDPASSING 1
+#define ASSUAN_SOCKET_SERVER_ACCEPTED 2
gpg_error_t assuan_init_socket_server (assuan_context_t ctx,
- assuan_fd_t listen_fd);
-gpg_error_t assuan_init_socket_server_ext (assuan_context_t ctx,
- assuan_fd_t fd,
- unsigned int flags);
+ assuan_fd_t listen_fd,
+ unsigned int flags);
void assuan_set_sock_nonce (assuan_context_t ctx, assuan_sock_nonce_t *nonce);
/*-- assuan-pipe-connect.c --*/
+#define ASSUAN_PIPE_CONNECT_FDPASSING 1
+#define ASSUAN_PIPE_CONNECT_DETACHED 128
gpg_error_t assuan_pipe_connect (assuan_context_t ctx,
const char *name,
const char *argv[],
- assuan_fd_t *fd_child_list);
-gpg_error_t assuan_pipe_connect_ext (assuan_context_t ctx,
- const char *name,
- const char *argv[],
- assuan_fd_t *fd_child_list,
- void (*atfork) (void *, int),
- void *atforkvalue,
- unsigned int flags);
+ assuan_fd_t *fd_child_list,
+ void (*atfork) (void *, int),
+ void *atforkvalue,
+ unsigned int flags);
/*-- assuan-socket-connect.c --*/
-gpg_error_t assuan_socket_connect (assuan_context_t ctx,
- const char *name,
- pid_t server_pid);
-
-gpg_error_t assuan_socket_connect_ext (assuan_context_t ctx,
- const char *name,
- pid_t server_pid,
- unsigned int flags);
+#define ASSUAN_SOCKET_CONNECT_FDPASSING 1
+gpg_error_t assuan_socket_connect (assuan_context_t ctx, const char *name,
+ pid_t server_pid, unsigned int flags);
/*-- assuan-connect.c --*/
pid_t assuan_get_pid (assuan_context_t ctx);
+struct _assuan_peercred
+{
#ifndef _WIN32
-gpg_error_t assuan_get_peercred (assuan_context_t ctx,
- pid_t *pid, uid_t *uid, gid_t *gid);
+ pid_t pid;
+ uid_t uid;
+ gid_t gid;
#endif
+};
+typedef struct _assuan_peercred *assuan_peercred_t;
+
+gpg_error_t assuan_get_peercred (assuan_context_t ctx,
+ assuan_peercred_t *peercred);
/*-- assuan-client.c --*/
gpg_error_t
diff --git a/src/context.c b/src/context.c
index 3e707ca..9e010aa 100644
--- a/src/context.c
+++ b/src/context.c
@@ -169,3 +169,19 @@ assuan_set_error (assuan_context_t ctx, gpg_error_t err, const char *text)
ctx->err_str = text;
return err;
}
+
+
+/* Return user credentials. For getting the pid of the peer the
+ assuan_get_pid is usually better suited. */
+gpg_error_t
+assuan_get_peercred (assuan_context_t ctx, assuan_peercred_t *peercred)
+{
+ if (!ctx)
+ return _assuan_error (ctx, GPG_ERR_ASS_INV_VALUE);
+ if (!ctx->peercred_valid)
+ return _assuan_error (ctx, GPG_ERR_ASS_GENERAL);
+
+ *peercred = &ctx->peercred;
+
+ return 0;
+}
diff --git a/src/libassuan.def b/src/libassuan.def
index 96fa6e5..ccb774b 100644
--- a/src/libassuan.def
+++ b/src/libassuan.def
@@ -36,64 +36,62 @@ EXPORTS
assuan_get_log_cb @15
assuan_get_malloc_hooks @16
assuan_get_output_fd @17
- assuan_get_pid @18
- assuan_get_pointer @19
- assuan_init_pipe_server @20
- assuan_init_socket_server @21
- assuan_init_socket_server_ext @22
+ assuan_get_peercred @18
+ assuan_get_pid @19
+ assuan_get_pointer @20
+ assuan_init_pipe_server @21
+ assuan_init_socket_server @22
assuan_inquire @23
assuan_inquire_ext @24
assuan_new @25
assuan_new_ext @26
assuan_pending_line @27
assuan_pipe_connect @28
- assuan_pipe_connect_ext @29
- assuan_process @30
- assuan_process_done @31
- assuan_process_next @32
- assuan_read_line @33
- assuan_receivefd @34
- assuan_register_bye_notify @35
- assuan_register_cancel_notify @36
- assuan_register_command @37
- assuan_register_input_notify @38
- assuan_register_option_handler @39
- assuan_register_output_notify @40
- assuan_register_post_cmd_notify @41
- assuan_register_reset_notify @42
- assuan_release @43
- assuan_send_data @44
- assuan_sendfd @45
- assuan_set_assuan_log_prefix @46
- assuan_set_error @47
- assuan_set_flag @48
- assuan_set_gpg_err_source @49
- assuan_set_hello_line @50
- assuan_set_io_monitor @51
- assuan_set_log_cb @52
- assuan_set_log_stream @53
- assuan_set_malloc_hooks @54
- assuan_set_okay_line @55
- assuan_set_pointer @56
- assuan_set_system_hooks @57
- assuan_sock_bind @58
- assuan_sock_check_nonce @59
- assuan_sock_close @60
- assuan_sock_connect @61
- assuan_sock_deinit @62
- assuan_sock_get_nonce @63
- assuan_sock_init @64
- assuan_sock_new @65
- assuan_socket_connect @66
- assuan_socket_connect_ext @67
- assuan_transact @68
- assuan_write_line @69
- assuan_write_status @70
- __assuan_close @71
- __assuan_pipe @72
- __assuan_socketpair @73
- __assuan_spawn @74
- __assuan_usleep @75
+ assuan_process @29
+ assuan_process_done @30
+ assuan_process_next @31
+ assuan_read_line @32
+ assuan_receivefd @33
+ assuan_register_bye_notify @34
+ assuan_register_cancel_notify @35
+ assuan_register_command @36
+ assuan_register_input_notify @37
+ assuan_register_option_handler @38
+ assuan_register_output_notify @39
+ assuan_register_post_cmd_notify @40
+ assuan_register_reset_notify @41
+ assuan_release @42
+ assuan_send_data @43
+ assuan_sendfd @44
+ assuan_set_assuan_log_prefix @45
+ assuan_set_error @46
+ assuan_set_flag @47
+ assuan_set_gpg_err_source @48
+ assuan_set_hello_line @49
+ assuan_set_io_monitor @50
+ assuan_set_log_cb @51
+ assuan_set_log_stream @52
+ assuan_set_malloc_hooks @53
+ assuan_set_okay_line @54
+ assuan_set_pointer @55
+ assuan_set_system_hooks @56
+ assuan_sock_bind @57
+ assuan_sock_check_nonce @58
+ assuan_sock_close @59
+ assuan_sock_connect @60
+ assuan_sock_deinit @61
+ assuan_sock_get_nonce @62
+ assuan_sock_init @63
+ assuan_sock_new @64
+ assuan_socket_connect @65
+ assuan_transact @66
+ assuan_write_line @67
+ assuan_write_status @68
+ __assuan_close @69
+ __assuan_pipe @70
+ __assuan_socketpair @71
+ __assuan_spawn @72
+ __assuan_usleep @73
; END
diff --git a/src/libassuan.vers b/src/libassuan.vers
index 7b2d267..722caa3 100644
--- a/src/libassuan.vers
+++ b/src/libassuan.vers
@@ -44,7 +44,6 @@ LIBASSUAN_1.0 {
assuan_get_pointer;
assuan_init_pipe_server;
assuan_init_socket_server;
- assuan_init_socket_server_ext;
assuan_inquire;
assuan_inquire_ext;
assuan_new;
@@ -52,7 +51,6 @@ LIBASSUAN_1.0 {
assuan_new_ext;
assuan_pending_line;
assuan_pipe_connect;
- assuan_pipe_connect_ext;
assuan_process;
assuan_process_done;
assuan_process_next;
@@ -91,7 +89,6 @@ LIBASSUAN_1.0 {
assuan_sock_init;
assuan_sock_new;
assuan_socket_connect;
- assuan_socket_connect_ext;
assuan_transact;
assuan_write_line;
assuan_write_status;