mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-05-02 06:46:26 -04:00
os: Add an implementation of wl_os_socket_peercred() for darwin
This adds an alternative implementation of wl_os_socket_peercred() using getpeereid(3) and LOCAL_PEERPID, similar to changes I recently made to xorg-server. Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
This commit is contained in:
parent
25da99a7e5
commit
a77aa44f0e
2 changed files with 15 additions and 0 deletions
|
|
@ -44,6 +44,7 @@ endforeach
|
||||||
|
|
||||||
have_funcs = [
|
have_funcs = [
|
||||||
'accept4',
|
'accept4',
|
||||||
|
'getpeereid',
|
||||||
'mkostemp',
|
'mkostemp',
|
||||||
'posix_fallocate',
|
'posix_fallocate',
|
||||||
'prctl',
|
'prctl',
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,20 @@ wl_os_socket_peercred(int sockfd, uid_t *uid, gid_t *gid, pid_t *pid)
|
||||||
*pid = ucred.pid;
|
*pid = ucred.pid;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#elif defined(HAVE_GETPEEREID) && defined(LOCAL_PEERPID)
|
||||||
|
int
|
||||||
|
wl_os_socket_peercred(int sockfd, uid_t *uid, gid_t *gid, pid_t *pid)
|
||||||
|
{
|
||||||
|
socklen_t len;
|
||||||
|
|
||||||
|
if (getpeereid(sockfd, uid, gid) != 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
len = sizeof(pid_t);
|
||||||
|
if (getsockopt(sockfd, SOL_LOCAL, LOCAL_PEERPID, pid, &len) != 0)
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#error "Don't know how to read ucred on this platform"
|
#error "Don't know how to read ucred on this platform"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue