#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.
*/
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
])
# 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])
AC_CHECK_FUNCS([fdwalk])
AC_CHECK_FUNCS([setenv])
AC_CHECK_FUNCS([getpeereid])
+ AC_CHECK_FUNCS([getpeerucred])
# Required functions
AC_CHECK_FUNCS([gmtime_r],