[PATCH wayland 2/2] support specifying custom directories for the client and server

Imran Zaman imran.zaman at gmail.com
Wed Oct 15 07:36:27 PDT 2014


Hi

support for adjusting socket access rights to allow group of users to
connect to the socket.

This is used for nested compositor architectures.
-----

diff --git a/src/wayland-server.c b/src/wayland-server.c
index ce1eca8..b1ca5e6 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"
@@ -1079,6 +1081,10 @@ wl_socket_init_for_display_name(struct
wl_socket *s, const char *name)
 {
  int name_size;
  const char *runtime_dir;
+ const char *socket_mode_str;
+ const char *socket_group_str;
+ const struct group *socket_group;
+ unsigned socket_mode;

  runtime_dir = getenv("WAYLAND_SERVER_DIR");
  if (runtime_dir == NULL)
@@ -1133,6 +1139,18 @@ _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)
+ chown(s->addr.sun_path, -1, socket_group->gr_gid);
+ }
+ socket_mode_str = getenv("WAYLAND_SERVER_MODE");
+ if (socket_mode_str != NULL) {
+ if (sscanf(socket_mode_str, "%o", &socket_mode) > 0)
+ chmod(s->addr.sun_path, socket_mode);
+ }
+
  s->source = wl_event_loop_add_fd(display->loop, s->fd,
  WL_EVENT_READABLE,
  socket_data, display);


More information about the wayland-devel mailing list