diff options
author | Werner Koch <[email protected]> | 2006-09-14 11:17:33 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2006-09-14 11:17:33 +0000 |
commit | f4f90811735b1f599e207e49d449abfa9d47897d (patch) | |
tree | b509639246290da27975771f95b8d46cf57ec60c /src/assuan-socket-server.c | |
parent | More tweaks for descriptor passing. (diff) | |
download | libassuan-f4f90811735b1f599e207e49d449abfa9d47897d.tar.gz libassuan-f4f90811735b1f599e207e49d449abfa9d47897d.zip |
Preparing a new releaselibassuan-0.9.0
Diffstat (limited to 'src/assuan-socket-server.c')
-rw-r--r-- | src/assuan-socket-server.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/assuan-socket-server.c b/src/assuan-socket-server.c index 468826e..3cc9bae 100644 --- a/src/assuan-socket-server.c +++ b/src/assuan-socket-server.c @@ -43,16 +43,24 @@ accept_connection_bottom (assuan_context_t ctx) { int fd = ctx->connected_fd; + ctx->peercred.valid = 0; #ifdef HAVE_SO_PEERCRED { - /* This overrides any already set PID if the function returns a - valid one. */ struct ucred cr; - int cl = sizeof cr; - - if ( !getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cl) - && cr.pid != (pid_t)-1 && cr.pid ) - ctx->pid = cr.pid; + socklen_t cl = sizeof cr; + + if ( !getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cl)) + { + ctx->peercred.pid = cr.pid; + ctx->peercred.uid = cr.uid; + ctx->peercred.gid = cr.gid; + ctx->peercred.valid = 1; + + /* This overrides any already set PID if the function returns + a valid one. */ + if (cr.pid != (pid_t)-1 && cr.pid) + ctx->pid = cr.pid; + } } #endif @@ -117,7 +125,8 @@ assuan_init_socket_server (assuan_context_t *r_ctx, int listen_fd) return assuan_init_socket_server_ext (r_ctx, listen_fd, 0); } -/* Initialize a server using the already accepted socket FD. */ +/* Initialize a server using the already accepted socket FD. This + fucntion is deprecated. */ int assuan_init_connected_socket_server (assuan_context_t *r_ctx, int fd) { |