<div dir="ltr"><div><div>Hi,<br><br></div>maybe I just don't understand how this should work...<br><br></div>You have system compositor which spawns some other wayland compositors? Then you can specify these (or any other) environment vars in the compositor, the child compositors will inherit these...<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On 19 November 2014 12:52, Imran Zaman <span dir="ltr"><<a href="mailto:imran.zaman@gmail.com" target="_blank">imran.zaman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">... corrected jussi email address..<br>
<br>
BR<br>
irman<br>
<div class="HOEnZb"><div class="h5"><br>
On Wed, Nov 19, 2014 at 12:56 PM, Pekka Paalanen <<a href="mailto:ppaalanen@gmail.com">ppaalanen@gmail.com</a>> wrote:<br>
> On Wed, 15 Oct 2014 17:36:27 +0300<br>
> Imran Zaman <<a href="mailto:imran.zaman@gmail.com">imran.zaman@gmail.com</a>> wrote:<br>
><br>
>> Hi<br>
>><br>
>> support for adjusting socket access rights to allow group of users to<br>
>> connect to the socket.<br>
>><br>
>> This is used for nested compositor architectures.<br>
>> -----<br>
>><br>
>> diff --git a/src/wayland-server.c b/src/wayland-server.c<br>
>> index ce1eca8..b1ca5e6 100644<br>
>> --- a/src/wayland-server.c<br>
>> +++ b/src/wayland-server.c<br>
>> @@ -39,6 +39,8 @@<br>
>>  #include <fcntl.h><br>
>>  #include <sys/file.h><br>
>>  #include <sys/stat.h><br>
>> +#include <sys/types.h><br>
>> +#include <grp.h><br>
>>  #include <ffi.h><br>
>><br>
>>  #include "wayland-private.h"<br>
>> @@ -1079,6 +1081,10 @@ wl_socket_init_for_display_name(struct<br>
>> wl_socket *s, const char *name)<br>
>>  {<br>
>>   int name_size;<br>
>>   const char *runtime_dir;<br>
>> + const char *socket_mode_str;<br>
>> + const char *socket_group_str;<br>
>> + const struct group *socket_group;<br>
>> + unsigned socket_mode;<br>
>><br>
>>   runtime_dir = getenv("WAYLAND_SERVER_DIR");<br>
>>   if (runtime_dir == NULL)<br>
>> @@ -1133,6 +1139,18 @@ _wl_display_add_socket(struct wl_display<br>
>> *display, struct wl_socket *s)<br>
>>   return -1;<br>
>>   }<br>
>><br>
>> + socket_group_str = getenv("WAYLAND_SERVER_GROUP");<br>
>> + if (socket_group_str != NULL) {<br>
>> + socket_group = getgrnam(socket_group_str);<br>
>> + if (socket_group != NULL)<br>
>> + chown(s->addr.sun_path, -1, socket_group->gr_gid);<br>
>> + }<br>
>> + socket_mode_str = getenv("WAYLAND_SERVER_MODE");<br>
>> + if (socket_mode_str != NULL) {<br>
>> + if (sscanf(socket_mode_str, "%o", &socket_mode) > 0)<br>
>> + chmod(s->addr.sun_path, socket_mode);<br>
>> + }<br>
>> +<br>
>>   s->source = wl_event_loop_add_fd(display->loop, s->fd,<br>
>>   WL_EVENT_READABLE,<br>
>>   socket_data, display);<br>
><br>
> Hi,<br>
><br>
> I'm not sure what to think of these two patches. Are environment<br>
> variables WAYLAND_CLIENT_DIR, WAYLAND_SERVER_DIR, and the above really<br>
> the right API for this?<br>
><br>
> Your system compositor has to be specially written to be a system<br>
> compositor and open multiple listening sockets anyway, so I think this<br>
> is the wrong way for the server side stuff. For the server side, I<br>
> don't think we should have anything of this controlled via environment<br>
> variables but new API functions. What those API functions should be is<br>
> a good question.<br>
><br>
> I believe you don't need any additions in libwayland-server, in fact.<br>
> You have very special requirements in how and where to create the<br>
> sockets, so you can do that all yourself, up to the point where you have<br>
> a socket fd listening for new connections. Then you can use<br>
> wl_event_loop_add_fd() (if you even use the libwayland-server event<br>
> loops stuff) to monitor the fd. When a client connects, you get a<br>
> callback, call accept(), and pass the new fd to wl_client_create().<br>
><br>
> Hmm, wait, why am I assuming multiple listening sockets... What is your<br>
> architecture here, exactly?<br>
><br>
> I have very hard time deciding if we should allow the environment to<br>
> overwrite the server and client assumptions on where the socket is. It<br>
> would be easier for me to accept new API functions that operate with<br>
> absolute paths or existing fds explicitly, but those of course require<br>
> both servers and clients to be written to use them.<br>
><br>
> Comments, anyone?<br>
><br>
><br>
> Thanks,<br>
> pq<br>
_______________________________________________<br>
wayland-devel mailing list<br>
<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</div></div></blockquote></div><br></div>