<p dir="ltr">Dear guys and pq,<br>
I updated the new version of patch with version 4 and modified its title to the following. Sorry for my mistake. :D</p>
<p dir="ltr">"[PATCH v4] server: Add an API to get the file descriptor for a client" (<a href="http://patchwork.freedesktop.org/patch/70475/">http://patchwork.freedesktop.org/patch/70475/</a>)</p>
<p dir="ltr">Would you plz review it again whether it is better than before ? :)</p>
<p dir="ltr">Thanks and regards,<br>
Sung-Jin Park</p>
<p dir="ltr">>sorry, that sounds completely bogus and I never implied anything like that.<br>
Oh, don't mention it. I misunderstood your comment. :)<br>
I'm also sorry for I mentioned UID in my previous email.<br>
I think that sounds stranges. I should have mentioned PID instead of UID.</p>
<p dir="ltr">>socketpair() is used for creating a connection before fork()'ing and<br>
>exec()'ing a client process, so that the process starts with an already<br>
>open connection. In that case, wl_client_get_credentials() provides<br>
>wrong information. Particularly the returned PID will be the<br>
>compositor's, not the client's. I do not know if the security context<br>
>you are interested in suffers from the same problem.<br>
Exactly. I understand what you mean and I won't suffer from the same problem.<br>
After comparing pids from compositor's and the client's, I'll bypass to check of client's privilege<br>
when the client equals to the compositor.</p>
<p dir="ltr">>Upstream Weston never sends requests to itself, FWIW. It does use<br>
>socketpair() when launching special clients, though.</p>
<p dir="ltr">>Yes, this is clear, assuming the security context information you<br>
>receive is actually always correct. I would assume it does not suffer<br>
>from the same caveat as getsockopt(SO_PEERCRED), but I don't know that.<br>
Yes, as I also think, the security context must always be correct when I pass the exact client's fd.<br>
The library to get the security contexts from the file descriptor must guarantee that<br>
the returned contexts are credible.</p>
<p dir="ltr">Thanks and regards,<br>
Sung-Jin Park</p>
<p dir="ltr">------- Original Message -------<br>
Sender : Pekka Paalanen<<a href="mailto:ppaalanen@gmail.com">ppaalanen@gmail.com</a>><br>
Date   : 2016-01-13 19:35 (GMT+09:00)<br>
Title  : Re: [PATCH] server: Add an API to get the socket fd for a client</p>
<p dir="ltr"> On Wed, 13 Jan 2016 10:02:18 +0000 (GMT)<br>
박성진 <<a href="mailto:sj76.park@samsung.com">sj76.park@samsung.com</a>> wrote:</p>
<p dir="ltr">> Samsung Enterprise Portal mySingle<br>
><br>
> Pekka Paalanen, thank you for your review on this. :)<br>
><br>
><br>
><br>
> >The fd may not always be from a socket file, it can also be from a call<br>
> >to socketpair(2).<br>
><br>
> Yes, exactly.<br>
><br>
> >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>
> I'll append "see also wl_client_get_credentials() to wl_client_get_fd() doc. :)<br>
><br>
><br>
><br>
> Regarding your recommendation, as you meant, if I just need to distinguish between<br>
> the client's request and the request from compositor itself, it'll be better to use<br>
> wl_client_get_credentials() because comparing between the compositor's uid and<br>
> the uid from the function will be enough to make a decision for sth.</p>
<p dir="ltr">Hi,</p>
<p dir="ltr">sorry, that sounds completely bogus and I never implied anything like<br>
that.</p>
<p dir="ltr">socketpair() is used for creating a connection before fork()'ing and<br>
exec()'ing a client process, so that the process starts with an already<br>
open connection. In that case, wl_client_get_credentials() provides<br>
wrong information. Particularly the returned PID will be the<br>
compositor's, not the client's. I do not know if the security context<br>
you are interested in suffers from the same problem.</p>
<p dir="ltr">Upstream Weston never sends requests to itself, FWIW. It does use<br>
socketpair() when launching special clients, though.</p>
<p dir="ltr">> In my use case, I would like to get the client fd and check whether the client<br>
> has the needed privilege for doing sth with a request. The security context getting from<br>
> the client fd will be used to check the client's privilege.</p>
<p dir="ltr">Yes, this is clear, assuming the security context information you<br>
receive is actually always correct. I would assume it does not suffer<br>
from the same caveat as getsockopt(SO_PEERCRED), but I don't know that.</p>
<p dir="ltr">Thanks,<br>
pq<br>
<p>&nbsp;</p><p>&nbsp;</p></p>