[PATCH xserver v2.1] os: Treat ssh as a non-local client (v2)
Emil Velikov
emil.l.velikov at gmail.com
Fri Dec 11 02:31:52 PST 2015
On 11 December 2015 at 10:20, Martin Peres <martin.peres at free.fr> wrote:
> On 11/12/15 11:30, Michel Dänzer wrote:
>>
>> On 11.12.2015 18:17, Martin Peres wrote:
>>>
>>> On 11/12/15 04:34, Michel Dänzer wrote:
>>>>
>>>> From: Adam Jackson <ajax at redhat.com>
>>>>
>>>> By the time we get to ComputeLocalClient, we've already done
>>>> NextAvailableClient → ReserveClientIds → DetermineClientCmd (assuming
>>>> we're built with #define CLIENTIDS), so we can look up the name of the
>>>> client process and refuse to treat ssh's X forwarding as if it were
>>>> local.
>>>>
>>>> v2: (Michel Dänzer)
>>>> * Only match "ssh" itself, not other executable names starting
>>>> with
>>>> that prefix.
>>>> * Ignore executable path for the match.
>>>>
>>>> Signed-off-by: Adam Jackson <ajax at redhat.com>
>>>> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
>>>> ---
>>>>
>>>> v2.1: Slightly extended code comment
>>>>
>>>> os/access.c | 29 ++++++++++++++++++++++++++---
>>>> 1 file changed, 26 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/os/access.c b/os/access.c
>>>> index 10a48c3..3e32128 100644
>>>> --- a/os/access.c
>>>> +++ b/os/access.c
>>>> @@ -101,6 +101,7 @@ SOFTWARE.
>>>> #include <sys/socket.h>
>>>> #include <sys/ioctl.h>
>>>> #include <ctype.h>
>>>> +#include <libgen.h>
>>>> #ifndef NO_LOCAL_CLIENT_CRED
>>>> #include <pwd.h>
>>>> @@ -1081,9 +1082,8 @@ ResetHosts(const char *display)
>>>> }
>>>> }
>>>> -/* Is client on the local host */
>>>> -Bool
>>>> -ComputeLocalClient(ClientPtr client)
>>>> +static Bool
>>>> +xtransLocalClient(ClientPtr client)
>>>> {
>>>> int alen, family, notused;
>>>> Xtransaddr *from = NULL;
>>>> @@ -1116,6 +1116,29 @@ ComputeLocalClient(ClientPtr client)
>>>> return FALSE;
>>>> }
>>>> +/* Is client on the local host */
>>>> +Bool
>>>> +ComputeLocalClient(ClientPtr client)
>>>> +{
>>>> + if (!xtransLocalClient(client))
>>>> + return FALSE;
>>>> +
>>>> +#ifndef WIN32
>>>
>>> Why add this ifndef?
>>
>> Because libgen.h and basename() aren't available on Windows AFAICT. I
>> figured this use case probably isn't common enough on Windows anyway to
>> bother making it work there as well.
>
>
> You are right, basename is a POSIX function and mingw does expose it, but it
> turns out msvc does not. As you said, it is probably not worth the effort to
> add msvc support that no-one will be able to test anyway.
>
There's no (intentional) MSVC or mingw support in xserver that I know
of - only Cygwin. There is also the GNU version of the function
(#define _GNU_SOURCE + #include <string.h>) although I'm not sure if
Cygwin has either of them. I'd assume Jon can follow up as needed.
-Emil
More information about the xorg-devel
mailing list