From 20b9df53cf07c0693257f5f01fa1ff945b4cae4a Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Wed, 7 Jun 2017 14:36:22 +0200 Subject: p11_get_upeer_id: implement case using ucred.h Solaris can retrieve this information via getpeerucred(). --- common/unix-peer.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'common') diff --git a/common/unix-peer.c b/common/unix-peer.c index f8f20e6..7fe2eea 100644 --- a/common/unix-peer.c +++ b/common/unix-peer.c @@ -43,6 +43,10 @@ #include #include +#ifdef HAVE_UCRED_H +# include +#endif + /* Returns the unix domain socket peer information. * Returns zero on success. */ @@ -87,6 +91,21 @@ p11_get_upeer_id (int cfd, uid_t *uid, uid_t *gid, pid_t *pid) if (pid) *pid = -1; +#elif defined(HAVE_GETPEERUCRED) + /* *Solaris/OpenIndiana */ + ucred_t *ucred = NULL; + + if (getpeerucred(cfd, &ucred) == -1) + return -1; + + ret = ( (uid && (*uid = ucred_geteuid(ucred)) == -1) || + (gid && (*gid = ucred_getrgid(ucred)) == -1) || + (pid && (*pid = ucred_getpid(ucred)) == -1) ); + + ucred_free(ucred); + + if (ret) + return -1; #else #error "Unsupported UNIX variant" #endif -- cgit v1.1