diff options
author | Marcus Brinkmann <mb@g10code.com> | 2009-11-05 12:00:35 +0000 |
---|---|---|
committer | Marcus Brinkmann <mb@g10code.com> | 2009-11-05 12:00:35 +0000 |
commit | 420da928a39d1e296fb74c0ba3a023a889a082bf (patch) | |
tree | e5f3eaba544dbef4a4d3a9e4b628156975f97ea5 /src | |
parent | 66f0ccbe80999c6112a98e2239e3f1f72f3f0532 (diff) | |
download | libassuan-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/ChangeLog | 26 | ||||
-rw-r--r-- | src/assuan-connect.c | 26 | ||||
-rw-r--r-- | src/assuan-defs.h | 12 | ||||
-rw-r--r-- | src/assuan-pipe-connect.c | 25 | ||||
-rw-r--r-- | src/assuan-socket-connect.c | 16 | ||||
-rw-r--r-- | src/assuan-socket-server.c | 16 | ||||
-rw-r--r-- | src/assuan.h | 45 | ||||
-rw-r--r-- | src/context.c | 16 | ||||
-rw-r--r-- | src/libassuan.def | 102 | ||||
-rw-r--r-- | src/libassuan.vers | 3 |
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; |