39240339a7
- New libwayland-egl home for consumers as Mesa 18.2 dropped it Changes: https://lists.freedesktop.org/archives/wayland-devel/2018-April/037767.html Changes: https://lists.freedesktop.org/archives/wayland-devel/2018-August/039358.html PR: 227423 Submitted by: Greg V <greg@unrelenting.technology> Approved by: maintainer timeout (5 months)
96 lines
2.2 KiB
C
96 lines
2.2 KiB
C
--- src/wayland-server.c.orig 2018-04-09 17:19:26 UTC
|
|
+++ src/wayland-server.c
|
|
@@ -25,6 +25,8 @@
|
|
|
|
#define _GNU_SOURCE
|
|
|
|
+#include "../config.h"
|
|
+
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
@@ -43,6 +45,11 @@
|
|
#include <sys/file.h>
|
|
#include <sys/stat.h>
|
|
|
|
+#ifdef HAVE_SYS_UCRED_H
|
|
+#include <sys/types.h>
|
|
+#include <sys/ucred.h>
|
|
+#endif
|
|
+
|
|
#include "wayland-util.h"
|
|
#include "wayland-private.h"
|
|
#include "wayland-server.h"
|
|
@@ -77,7 +84,13 @@ struct wl_client {
|
|
struct wl_list link;
|
|
struct wl_map objects;
|
|
struct wl_priv_signal destroy_signal;
|
|
+#ifdef HAVE_SYS_UCRED_H
|
|
+ /* FreeBSD */
|
|
+ struct xucred xucred;
|
|
+#else
|
|
+ /* Linux */
|
|
struct ucred ucred;
|
|
+#endif
|
|
int error;
|
|
struct wl_priv_signal resource_created_signal;
|
|
};
|
|
@@ -303,7 +316,13 @@ wl_resource_post_error(struct wl_resource *resource,
|
|
static void
|
|
destroy_client_with_error(struct wl_client *client, const char *reason)
|
|
{
|
|
+#ifdef HAVE_SYS_UCRED_H
|
|
+ /* FreeBSD */
|
|
+ wl_log("%s\n", reason);
|
|
+#else
|
|
+ /* Linux */
|
|
wl_log("%s (pid %u)\n", reason, client->ucred.pid);
|
|
+#endif
|
|
wl_client_destroy(client);
|
|
}
|
|
|
|
@@ -517,10 +536,20 @@ wl_client_create(struct wl_display *display, int fd)
|
|
if (!client->source)
|
|
goto err_client;
|
|
|
|
+#if defined(SO_PEERCRED)
|
|
+ /* Linux */
|
|
len = sizeof client->ucred;
|
|
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED,
|
|
&client->ucred, &len) < 0)
|
|
goto err_source;
|
|
+#elif defined(LOCAL_PEERCRED)
|
|
+ /* FreeBSD */
|
|
+ len = sizeof client->xucred;
|
|
+ if (getsockopt(fd, SOL_SOCKET, LOCAL_PEERCRED,
|
|
+ &client->xucred, &len) < 0 ||
|
|
+ client->xucred.cr_version != XUCRED_VERSION)
|
|
+ goto err_source;
|
|
+#endif
|
|
|
|
client->connection = wl_connection_create(fd);
|
|
if (client->connection == NULL)
|
|
@@ -574,12 +603,23 @@ WL_EXPORT void
|
|
wl_client_get_credentials(struct wl_client *client,
|
|
pid_t *pid, uid_t *uid, gid_t *gid)
|
|
{
|
|
+#ifdef HAVE_SYS_UCRED_H
|
|
+ /* FreeBSD */
|
|
if (pid)
|
|
+ *pid = 0; /* FIXME: not defined on FreeBSD */
|
|
+ if (uid)
|
|
+ *uid = client->xucred.cr_uid;
|
|
+ if (gid)
|
|
+ *gid = client->xucred.cr_gid;
|
|
+#else
|
|
+ /* Linux */
|
|
+ if (pid)
|
|
*pid = client->ucred.pid;
|
|
if (uid)
|
|
*uid = client->ucred.uid;
|
|
if (gid)
|
|
*gid = client->ucred.gid;
|
|
+#endif
|
|
}
|
|
|
|
/** Get the file descriptor for the client
|