]> granicus.if.org Git - p11-kit/commitdiff
p11_get_upeer_id: implement case using ucred.h
authorFabian Groffen <grobian@gentoo.org>
Wed, 7 Jun 2017 12:36:22 +0000 (14:36 +0200)
committerDaiki Ueno <ueno@gnu.org>
Tue, 27 Jun 2017 11:10:32 +0000 (13:10 +0200)
Solaris can retrieve this information via getpeerucred().

common/unix-peer.c
configure.ac

index f8f20e69428fa82173d0632667143d5a8efd551d..7fe2eeacffd3ee1ec116c9e4b569e6587e2a3ffa 100644 (file)
 #include <sys/uio.h>
 #include <sys/errno.h>
 
+#ifdef HAVE_UCRED_H
+#  include <ucred.h>
+#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
index e812efe889eb6bd3c72dc5a311955a25a843897d..89e5f993e3d4307c1bac89bbf3986125dd038093 100644 (file)
@@ -96,7 +96,7 @@ if test "$os_unix" = "yes"; then
        ])
 
        # These are thngs we can work around
-       AC_CHECK_HEADERS([locale.h sys/resource.h])
+       AC_CHECK_HEADERS([locale.h sys/resource.h ucred.h])
        AC_CHECK_MEMBERS([struct dirent.d_type],,,[#include <dirent.h>])
        AC_CHECK_FUNCS([getprogname getexecname basename mkstemp mkdtemp])
        AC_CHECK_FUNCS([getauxval issetugid getresuid secure_getenv])
@@ -104,6 +104,7 @@ if test "$os_unix" = "yes"; then
        AC_CHECK_FUNCS([fdwalk])
        AC_CHECK_FUNCS([setenv])
        AC_CHECK_FUNCS([getpeereid])
+       AC_CHECK_FUNCS([getpeerucred])
 
        # Required functions
        AC_CHECK_FUNCS([gmtime_r],