summaryrefslogtreecommitdiff
path: root/lib/replace/replace.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2012-03-24 16:00:36 +0100
committerJelmer Vernooij <jelmer@samba.org>2012-03-24 16:00:36 +0100
commit71d41a015add73e0fb355dd9713e99febd71d46f (patch)
tree866bc9255d36231a0749a59a05c0eb2d05491836 /lib/replace/replace.c
parent76bb68fd2b9e09eb4c033417f0f1174f18c04797 (diff)
downloadsamba-71d41a015add73e0fb355dd9713e99febd71d46f.tar.gz
samba-71d41a015add73e0fb355dd9713e99febd71d46f.tar.bz2
samba-71d41a015add73e0fb355dd9713e99febd71d46f.zip
libreplace: Add getpeereid implementation.
Diffstat (limited to 'lib/replace/replace.c')
-rw-r--r--lib/replace/replace.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/replace/replace.c b/lib/replace/replace.c
index f1454cbcd6..d7f9cc1758 100644
--- a/lib/replace/replace.c
+++ b/lib/replace/replace.c
@@ -860,3 +860,31 @@ void *rep_memalign( size_t align, size_t size )
#endif
}
#endif
+
+#ifndef HAVE_GETPEEREID
+int rep_getpeereid(int s, uid_t *uid, gid_t *gid)
+{
+#if defined(HAVE_PEERCRED)
+ struct ucred cred;
+ socklen_t cred_len = sizeof(struct ucred);
+ int ret;
+
+ ret = getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void *)&cred, &cred_len);
+ if (ret != 0) {
+ return -1;
+ }
+
+ if (cred_len != sizeof(struct ucred)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ *uid = cred.uid;
+ *gid = cred.gid;
+ return 0;
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
+}
+#endif