mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
protocol-native: get pid/gid/uid on FreeBSD using LOCAL_PEERCRED
This commit is contained in:
parent
6ffb997c5a
commit
c1cda26ce8
1 changed files with 18 additions and 1 deletions
|
|
@ -36,6 +36,9 @@
|
||||||
#if HAVE_PWD_H
|
#if HAVE_PWD_H
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
#include <sys/ucred.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <spa/pod/iter.h>
|
#include <spa/pod/iter.h>
|
||||||
#include <spa/utils/result.h>
|
#include <spa/utils/result.h>
|
||||||
|
|
@ -370,6 +373,9 @@ static struct client_data *client_new(struct server *s, int fd)
|
||||||
struct pw_protocol *protocol = s->this.protocol;
|
struct pw_protocol *protocol = s->this.protocol;
|
||||||
socklen_t len;
|
socklen_t len;
|
||||||
struct ucred ucred;
|
struct ucred ucred;
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
struct xucred xucred;
|
||||||
|
#endif
|
||||||
struct pw_context *context = protocol->context;
|
struct pw_context *context = protocol->context;
|
||||||
struct pw_properties *props;
|
struct pw_properties *props;
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
|
|
@ -380,7 +386,7 @@ static struct client_data *client_new(struct server *s, int fd)
|
||||||
if (props == NULL)
|
if (props == NULL)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
#ifndef __FreeBSD__
|
#if defined(__linux__)
|
||||||
len = sizeof(ucred);
|
len = sizeof(ucred);
|
||||||
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len) < 0) {
|
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len) < 0) {
|
||||||
pw_log_warn("server %p: no peercred: %m", s);
|
pw_log_warn("server %p: no peercred: %m", s);
|
||||||
|
|
@ -398,6 +404,17 @@ static struct client_data *client_new(struct server *s, int fd)
|
||||||
pw_properties_setf(props, PW_KEY_SEC_LABEL, "%.*s",
|
pw_properties_setf(props, PW_KEY_SEC_LABEL, "%.*s",
|
||||||
(int)len, buffer);
|
(int)len, buffer);
|
||||||
}
|
}
|
||||||
|
#elif defined(__FreeBSD__)
|
||||||
|
len = sizeof(xucred);
|
||||||
|
if (getsockopt(fd, 0, LOCAL_PEERCRED, &xucred, &len) < 0) {
|
||||||
|
pw_log_warn("server %p: no peercred: %m", s);
|
||||||
|
} else {
|
||||||
|
#if __FreeBSD__ >= 13
|
||||||
|
pw_properties_setf(props, PW_KEY_SEC_PID, "%d", xucred.cr_pid);
|
||||||
|
#endif
|
||||||
|
pw_properties_setf(props, PW_KEY_SEC_UID, "%d", xucred.cr_uid);
|
||||||
|
pw_properties_setf(props, PW_KEY_SEC_GID, "%d", xucred.cr_gid);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pw_properties_setf(props, PW_KEY_MODULE_ID, "%d", d->module->global->id);
|
pw_properties_setf(props, PW_KEY_MODULE_ID, "%d", d->module->global->id);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue