aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Vögele <andreas@kurzegasse.de>2010-06-19 11:14:35 +0200
committerMax Kellermann <max@duempel.org>2010-06-19 13:47:10 +0200
commitdda5415def1ce78febb75199e5986aa051b00e96 (patch)
treedc95507e268fe76c2ebf386bde23ed89e4ee220b
parent4347114455a605f5d1f7da629e56d189a97e5967 (diff)
Make get_remote_uid() work on BSD
I've attached a patch that will make file URIs work on operating systems that provide the getpeereid() function call to check the user ID of the peer connected to a UNIX domain socket.
-rw-r--r--configure.ac1
-rw-r--r--src/listen.c8
2 files changed, 8 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 2a63e269..c1d3bcd5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -445,6 +445,7 @@ esac
if test x$enable_un = xyes; then
AC_DEFINE(HAVE_UN, 1, [Define if unix domain socket support is enabled])
STRUCT_UCRED
+ AC_CHECK_FUNCS(getpeereid)
fi
dnl --------------------------- Post Protocol Tests ---------------------------
diff --git a/src/listen.c b/src/listen.c
index 9fb60edc..3028b947 100644
--- a/src/listen.c
+++ b/src/listen.c
@@ -416,7 +416,13 @@ static int get_remote_uid(int fd)
return cred.uid;
#else
- (void)fd;
+#ifdef HAVE_GETPEEREID
+ uid_t euid;
+ gid_t egid;
+
+ if (getpeereid(fd, &euid, &egid) == 0)
+ return euid;
+#endif
return -1;
#endif
}