aboutsummaryrefslogtreecommitdiffstats
path: root/src/assuan-socket-server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/assuan-socket-server.c')
-rw-r--r--src/assuan-socket-server.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/assuan-socket-server.c b/src/assuan-socket-server.c
index 27994a2..1e8e541 100644
--- a/src/assuan-socket-server.c
+++ b/src/assuan-socket-server.c
@@ -74,6 +74,27 @@ accept_connection_bottom (assuan_context_t ctx)
ctx->pid = cr.pid;
}
}
+#elif defined(HAVE_LOCAL_PEEREID)
+ {
+ struct unpcbid unp;
+ socklen_t unpl = sizeof unp;
+
+ if (getsockopt(fd, 0, LOCAL_PEEREID, &unp, &unpl) != -1)
+ {
+ ctx->peercred.pid = unp.unp_pid;
+ ctx->peercred.uid = unp.unp_euid;
+ ctx->peercred.gid = unp.unp_egid;
+ ctx->peercred_valid = 1;
+ }
+ }
+#elif defined(HAVE_GETPEEREID)
+ {
+ if (getpeereid(fd, &ctx->peercred.uid, &ctx->peercred.gid) != -1)
+ {
+ ctx->peercred.pid = ASSUAN_INVALID_PID;
+ ctx->peercred_valid = 1;
+ }
+ }
#endif
ctx->inbound.fd = fd;