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

Mark Kettenis mark.kettenis at xs4all.nl
Tue Jan 12 11:40:14 PST 2016


> From: =?UTF-8?Q?Michel_D=c3=a4nzer?= <michel at daenzer.net>
> 
> 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?

Must admit I'm not really thrilled by the diff.  SoI'll abstain.

> > ---
> >  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
> > 
> 
> 
> -- 
> Earthling Michel Dänzer               |               http://www.amd.com
> Libre software enthusiast             |             Mesa and X developer
> 


More information about the xorg-devel mailing list