diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2012-03-24 16:00:36 +0100 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2012-03-24 16:00:36 +0100 |
commit | 71d41a015add73e0fb355dd9713e99febd71d46f (patch) | |
tree | 866bc9255d36231a0749a59a05c0eb2d05491836 /lib/replace/replace.c | |
parent | 76bb68fd2b9e09eb4c033417f0f1174f18c04797 (diff) | |
download | samba-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.c | 28 |
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 |