[PATCH xserver] os: Treat ssh as a non-local client (v3)

Martin Peres martin.peres at free.fr
Tue Jan 12 02:55:09 PST 2016


On 12/01/16 08:57, Michel Dänzer wrote:
> On 17.12.2015 16:41, 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.
>> v3: (Michel Dänzer)
>>      * Use GetClientCmdName (Mark Kettenis)
>>      * Perform check on Windows as well, but only ignore path on Cygwin
>>        (Martin Peres, Emil Velikov, Jon Turney)
>>
>> Signed-off-by: Adam Jackson <ajax at redhat.com>
>> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> Martin, Mark, Jon, any other objections? If not, can we get a Reviewed-by?

Oh, sorry, I already gave you my R-b and did not think you needed it 
again. In any case, thanks for the additional fixes!

Reviewed-by: Martin Peres <martin.peres at linux.intel.com>

>
>
>> ---
>>   os/access.c | 38 +++++++++++++++++++++++++++++++++++---
>>   1 file changed, 35 insertions(+), 3 deletions(-)
>>
>> diff --git a/os/access.c b/os/access.c
>> index 10a48c3..3ea2e21 100644
>> --- a/os/access.c
>> +++ b/os/access.c
>> @@ -173,6 +173,10 @@ SOFTWARE.
>>   
>>   #endif                          /* WIN32 */
>>   
>> +#if !defined(WIN32) || defined(__CYGWIN__)
>> +#include <libgen.h>
>> +#endif
>> +
>>   #define X_INCLUDE_NETDB_H
>>   #include <X11/Xos_r.h>
>>   
>> @@ -1081,9 +1085,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 +1119,35 @@ ComputeLocalClient(ClientPtr client)
>>       return FALSE;
>>   }
>>   
>> +/* Is client on the local host */
>> +Bool
>> +ComputeLocalClient(ClientPtr client)
>> +{
>> +    const char *cmdname = GetClientCmdName(client);
>> +
>> +    if (!xtransLocalClient(client))
>> +        return FALSE;
>> +
>> +    /* If the executable name is "ssh", assume that this client connection
>> +     * is forwarded from another host via SSH
>> +     */
>> +    if (cmdname) {
>> +        Bool ret;
>> +
>> +#if !defined(WIN32) || defined(__CYGWIN__)
>> +        char *cmd = strdup(cmdname);
>> +        ret = strcmp(basename(cmd), "ssh") != 0;
>> +        free(cmd);
>> +#else
>> +        ret = strcmp(cmdname, "ssh") != 0;
>> +#endif
>> +
>> +        return ret;
>> +    }
>> +
>> +    return TRUE;
>> +}
>> +
>>   /*
>>    * Return the uid and all gids of a connected local client
>>    * Allocates a LocalClientCredRec - caller must call FreeLocalClientCreds
>>
>



More information about the xorg-devel mailing list