summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2010-12-10 23:02:19 +0100
committerVolker Lendecke <vlendec@samba.org>2010-12-19 23:25:06 +0100
commitd39fedaa69b20e8f29fff9cd9a09c1bb1ecec7be (patch)
treec5b8a55f35f1e2edaf3d81662a7856ce84220c22
parentd082701ea5131b02a49321ef29d1aa58a80ee92a (diff)
downloadsamba-d39fedaa69b20e8f29fff9cd9a09c1bb1ecec7be.tar.gz
samba-d39fedaa69b20e8f29fff9cd9a09c1bb1ecec7be.tar.bz2
samba-d39fedaa69b20e8f29fff9cd9a09c1bb1ecec7be.zip
s3: FreeBSD has getpeereid(), use it
-rw-r--r--source3/configure.in12
-rw-r--r--source3/lib/system.c4
2 files changed, 16 insertions, 0 deletions
diff --git a/source3/configure.in b/source3/configure.in
index 5f81a193ca..b43d0b34de 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -6353,6 +6353,18 @@ if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
fi
+AC_CACHE_CHECK([for getpeereid],samba_cv_HAVE_GETPEEREID,[
+AC_TRY_LINK([#include <sys/types.h>
+#include <unistd.h>],
+[uid_t uid; gid_t gid; int ret;
+ ret = getpeereid(0, &uid, &gid);
+],
+samba_cv_HAVE_GETPEEREID=yes,samba_cv_HAVE_GETPEEREID=no)])
+if test x"$samba_cv_HAVE_GETPEEREID" = xyes; then
+ AC_DEFINE(HAVE_GETPEEREID,1,
+ [Whether we have getpeereid to get socket credentials])
+fi
+
#################################################
# Check to see if we should use the included popt
diff --git a/source3/lib/system.c b/source3/lib/system.c
index 1c00ad87e4..02322b72b5 100644
--- a/source3/lib/system.c
+++ b/source3/lib/system.c
@@ -2630,6 +2630,10 @@ int sys_getpeereid( int s, uid_t *uid)
*uid = cred.uid;
return 0;
#else
+#if defined(HAVE_GETPEEREID)
+ gid_t gid;
+ return getpeereid(s, uid, &gid);
+#endif
errno = ENOSYS;
return -1;
#endif