[PATCH 2/2] Support for adjusting socket access rights to allow group of users to connect to the socket.
Imran Zaman
imran.zaman at gmail.com
Thu Oct 16 09:23:40 PDT 2014
This is used for nested compositor architectures.
Signed-off-by: Imran Zaman <imran.zaman at gmail.com>
---
src/wayland-server.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/src/wayland-server.c b/src/wayland-server.c
index 09e8903..721fabe 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -39,6 +39,8 @@
#include <fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
+#include <sys/types.h>
+#include <grp.h>
#include <ffi.h>
#include "wayland-private.h"
@@ -1117,6 +1119,10 @@ static int
_wl_display_add_socket(struct wl_display *display, struct wl_socket *s)
{
socklen_t size;
+ const char *socket_mode_str;
+ const char *socket_group_str;
+ const struct group *socket_group;
+ unsigned socket_mode;
s->fd = wl_os_socket_cloexec(PF_LOCAL, SOCK_STREAM, 0);
if (s->fd < 0) {
@@ -1134,6 +1140,27 @@ _wl_display_add_socket(struct wl_display *display, struct wl_socket *s)
return -1;
}
+ socket_group_str = getenv("WAYLAND_SERVER_GROUP");
+ if (socket_group_str != NULL) {
+ socket_group = getgrnam(socket_group_str);
+ if (socket_group != NULL) {
+ if (chown(s->addr.sun_path,
+ -1, socket_group->gr_gid) != 0)
+ wl_log("chown(\"%s\") failed: %s",
+ s->addr.sun_path,
+ strerror(errno));
+ }
+ }
+ socket_mode_str = getenv("WAYLAND_SERVER_MODE");
+ if (socket_mode_str != NULL) {
+ if (sscanf(socket_mode_str, "%o", &socket_mode) > 0)
+ if (chmod(s->addr.sun_path, socket_mode) != 0) {
+ wl_log("chmod(\"%s\") failed: %s",
+ s->addr.sun_path,
+ strerror(errno));
+ }
+ }
+
s->source = wl_event_loop_add_fd(display->loop, s->fd,
WL_EVENT_READABLE,
socket_data, display);
--
1.9.1
More information about the wayland-devel
mailing list