[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