<html><head><title>Samsung Enterprise Portal mySingle</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style id="mysingle_style">P {
        MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt; FONT-FAMILY: ±¼¸²Ã¼, arial; MARGIN-TOP: 5px
}
TD {
        MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt; FONT-FAMILY: ±¼¸²Ã¼, arial; MARGIN-TOP: 5px
}
LI {
        MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt; FONT-FAMILY: ±¼¸²Ã¼, arial; MARGIN-TOP: 5px
}
BODY {
        FONT-SIZE: 9pt; FONT-FAMILY: ±¼¸²Ã¼, arial; MARGIN: 10px; LINE-HEIGHT: 1.4
}
</style>

<meta http-equiv="X-UA-Compatible" content="IE=5">
<meta http-equiv="X-UA-Compatible" content="IE=5">
<meta name="GENERATOR" content="MSHTML 10.00.9200.17556"></head>
<body>
<meta http-equiv="X-UA-Compatible" content="IE=5">
<meta http-equiv="X-UA-Compatible" content="IE=5">
<meta name="GENERATOR" content="ActiveSquare">
<meta http-equiv="X-UA-Compatible" content="IE=5">
<p>Pekka Paalanen, thank you for your review on this. :)</p>
<p> </p>
<p>>The fd may not always be from a socket file, it can also be from a call<br>>to socketpair(2).</p>
<p>Yes, exactly.<br></p>
<p>>Please refer to wl_client_get_credentials() for the<br>>caveat there, and evaluate whether it applies to your use case.<br>>wl_client_get_fd() doc should probably have a "see also<br>>wl_client_get_credentials()" so that someone reading the doc finds out<br>>about socketpair().</p>
<p>I'll append "see also wl_client_get_credentials() to wl_client_get_fd() doc. :)</p>
<p> </p>
<p>Regarding your recommendation, as you meant, if I just need to distinguish between</p>
<p>the client's request and the request from compositor itself, it'll be better to use</p>
<p>wl_client_get_credentials() because comparing between the compositor's uid and</p>
<p>the uid from the function will be enough to make a decision for sth.</p>
<p> </p>
<p>In my use case, I would like to get the client fd and check whether the client</p>
<p>has the needed privilege for doing sth with a request. The security context getting from</p>
<p>the client fd will be used to check the client's privilege.</p>
<p><br>>One should probably also document, that the fd you get from this<br>>function is not duplicated, and it remains owned and used by<br>>libwayland-server. Therefore if the caller does anything to the fd that<br>>changes its state, it will likely cause problems. Getting the fd is for<br>>inspection only, like the use case described in the commit message.<br><br>>It might even make sense to add the example use case to the doc.<br>Agree with you. I'll enhance the doc and update it soon.</p>
<p> </p>
<p>Thanks and regards,</p>
<p>Sung-Jin Park<br><br>------- Original Message -------<br>Sender : Pekka Paalanen<ppaalanen@gmail.com> <br>Date   : 2016-01-13 17:01 (GMT+09:00)<br>Title  : Re: [PATCH] server: Add an API to get the socket fd for a client<br><br><br> On Wed, 13 Jan 2016 10:31:58 +0800<br>Jonas Adahl <jadahl@gmail.com> wrote:<br><br>> On Tue, Jan 12, 2016 at 10:58:16AM -0600, Derek Foreman wrote:<br>> > On 11/01/16 04:30 PM, Sung-Jin Park wrote:  <br>> > > This adds an API to get the socket fd for a client.<br>> > > The client socket fd can be used for a wayland compositor to validate a request<br>> > > from a client.<br>> > > For instance, this will be helpful in some linux distributions, in which SELinux<br>> > > or SMACK is enabled. In those environments, each file (including socket) will have<br>> > > each security context in its inode as xattr member variable. A wayland compositor<br>> > > can validate a client request by getting socket fd of the client and by checking<br>> > > the security context associated with the socket fd.<br>> > > <br>> > > Signed-off-by: Sung-Jin Park <input.hacker@gmail.com><br>> > > ---<br>> > >  src/wayland-server-core.h |  3 +++<br>> > >  src/wayland-server.c      | 15 +++++++++++++++<br>> > >  2 files changed, 18 insertions(+)<br>> > > <br>> > > diff --git a/src/wayland-server-core.h b/src/wayland-server-core.h<br>> > > index 1700cd3..0d5fbc1 100644<br>> > > --- a/src/wayland-server-core.h<br>> > > +++ b/src/wayland-server-core.h<br>> > > @@ -182,6 +182,9 @@ void<br>> > >  wl_client_get_credentials(struct wl_client *client,<br>> > >       pid_t *pid, uid_t *uid, gid_t *gid);<br>> > >  <br>> > > +int<br>> > > +wl_client_get_socket_fd(struct wl_client *client);<br>> > > +<br>> > >  void<br>> > >  wl_client_add_destroy_listener(struct wl_client *client,<br>> > >            struct wl_listener *listener);<br>> > > diff --git a/src/wayland-server.c b/src/wayland-server.c<br>> > > index 55c0cf9..973a71c 100644<br>> > > --- a/src/wayland-server.c<br>> > > +++ b/src/wayland-server.c<br>> > > @@ -491,6 +491,21 @@ wl_client_get_credentials(struct wl_client *client,<br>> > >    *gid = client->ucred.gid;<br>> > >  }<br>> > >  <br>> > > +/** Get the socket fd for the client  <br>> <br>> s/fd/file descriptor/<br>> <br>> > > + *<br>> > > + * param client The display object<br>> > > + * <br>eturn fd The fd to use for the connection  <br>> > <br>> > Should probably just be<br>> >  * <br>eturn The fd to use for the connection  <br>> <br>> Maybe "file descriptor" here as well?<br>> <br>> > <br>> > Otherwise this looks good to me,<br>> > Reviewed-by: Derek Foreman <derekf@osg.samsung.com>  <br>> <br>> I would also prefer the API to be "wl_client_get_fd()" as that is that<br>> is what all the other similar API looks like (be it a socket fd or a<br>> non-socket fd).<br>> <br>> Other than those issues, this looks reasonable to me, so consider it<br>> Reviewed-by: Jonas Adahl <jadahl@gmail.com><br><br>Hi,<br><br>I agree with all of the above.<br><br>The fd may not always be from a socket file, it can also be from a call<br>to socketpair(2). Please refer to wl_client_get_credentials() for the<br>caveat there, and evaluate whether it applies to your use case.<br>wl_client_get_fd() doc should probably have a "see also<br>wl_client_get_credentials()" so that someone reading the doc finds out<br>about socketpair().<br><br>One should probably also document, that the fd you get from this<br>function is not duplicated, and it remains owned and used by<br>libwayland-server. Therefore if the caller does anything to the fd that<br>changes its state, it will likely cause problems. Getting the fd is for<br>inspection only, like the use case described in the commit message.<br><br>It might even make sense to add the example use case to the doc.<br><br>With these documentation additions, you get<br>Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk><br><br><br>Thanks,<br>pq<br><br>> >   <br>> > > + *<br>> > > + * This function returns the client socket fd for the given client.<br>> > > + *<br>> > > + * memberof wl_client<br>> > > + */<br>> > > +WL_EXPORT int<br>> > > +wl_client_get_socket_fd(struct wl_client *client)<br>> > > +{<br>> > > + return client->connection->fd;<br>> > > +}<br>> > > +<br>> > >  /** Look up an object in the client name space<br>> > >   *<br>> > >   * param client The client object<br>> > >   <br>> > <br>> > _______________________________________________<br>> > wayland-devel mailing list<br>> > wayland-devel@lists.freedesktop.org<br>> > http://lists.freedesktop.org/mailman/listinfo/wayland-devel  <br>> _______________________________________________<br>> wayland-devel mailing list<br>> wayland-devel@lists.freedesktop.org<br>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel<br><br><p>&nbsp;</p><p>&nbsp;</p></p></body></html><img src='http://ext.samsung.net/mailcheck/SeenTimeChecker?do=213efb02e5f841dc8171d5b5a164474e8be0f33589ebf59a8c35ae6d7f18bc4503bf6f0e67da9796e458eb91567068af9ab5ff83b216b16af4af773db58e1db41b20909a04efd4d2748cfe1d4e847419cf878f9a26ce15a0' border=0 width=0 height=0 style='display:none'>