> Date: Mon, 8 Mar 2021 21:09:49 +0100
> From: Matthieu Herrb <[email protected]>
> 
> Hi,
> 
> If you look at the output of "xauth list" on you favourite OpenBSD
> machine you might get a bit scared, especially if you have an IPv6
> enabled network or if you used to travel and connect to various
> networks.
> 
> Most of the lines are there to allow TCP connexions to the IP adresss
> of the machine by the time you log into xenodm.
> 
> But tcp connexions are disabled by default in the X server since a few
> years now, so those authorizations are useless.
> 
> Also the recent discussion about dhcpleased and its asynchronous
> nature make it clear that there is no way that the IP addresses known
> at xenodm startup will not change during the lifetime of the session.
> 
> The diff below tells xenodm to not add authorizations for tcp
> connexions, unless it's explicitely configured. Only the authorization
> for the local unix socket connections is created.
> 
> To test, apply to /usr/xenocara/app/xenodm (note that you need the
> very recent commits I did earlier today) and  run :
> 
>   make -f Makefile.bsd-wrapper obj
>   make -f Makefile.bsd-wrapper clean
>   make -f Makefile.bsd-wrapper
>   doas make -f Makefile.bsd-wrapper install
> 
> Then remove the old ~/.Xauthority file, full of useless lines and
> reboot. Once logged in check the contents of xauth list again.
> 
> Comments ? ok ?

There are a couple of cases where the indentation is changed away from
what it was, using tabs instead of 4 spaces.  But I don't know how
(in)consistent this codebase was in the first place.

otherwise this looks ok to me

> Index: include/dm.h
> ===================================================================
> RCS file: /cvs/xenocara/app/xenodm/include/dm.h,v
> retrieving revision 1.16
> diff -u -p -u -r1.16 dm.h
> --- include/dm.h      8 Mar 2021 17:54:28 -0000       1.16
> +++ include/dm.h      8 Mar 2021 20:05:11 -0000
> @@ -123,6 +123,7 @@ struct display {
>       unsigned short  *authNameLens;  /* authorization protocol name lens */
>       char            *clientAuthFile;/* client specified auth file */
>       int             authComplain;   /* complain when no auth for XDMCP */
> +     int             listenTcp;      /* assume server is listening on TCP */
>  
>       /* information potentially derived from resources */
>       int             authNameNum;    /* number of protocol names */
> Index: man/xenodm.man
> ===================================================================
> RCS file: /cvs/xenocara/app/xenodm/man/xenodm.man,v
> retrieving revision 1.12
> diff -u -p -u -r1.12 xenodm.man
> --- man/xenodm.man    8 Mar 2021 17:54:28 -0000       1.12
> +++ man/xenodm.man    8 Mar 2021 20:05:11 -0000
> @@ -582,6 +582,21 @@ to occur, during which time the new auth
>  The default is
>  .Cm false ,
>  which will work for all MIT servers.
> +.It Ic DisplayManager. Ns Ar DISPLAY Ns Ic .listenTcp
> +If set to
> +.Cm true ,
> +enable the
> +.Ic listen Ic tcp
> +option for the given X server.
> +When this setting is set to
> +.Cm false ,
> +.Nm
> +will only generate authorizations for the local (ie Unix socket)
> +transport mechanism.
> +Otherwise full authorization for all possible transport mechanisms
> +will be generated.
> +The default is
> +.Cm false .
>  .El
>  .Sh CONFIGURATION FILE
>  First, the
> Index: xenodm/auth.c
> ===================================================================
> RCS file: /cvs/xenocara/app/xenodm/xenodm/auth.c,v
> retrieving revision 1.16
> diff -u -p -u -r1.16 auth.c
> --- xenodm/auth.c     8 Mar 2021 17:54:28 -0000       1.16
> +++ xenodm/auth.c     8 Mar 2021 20:05:11 -0000
> @@ -736,13 +736,14 @@ setAuthNumber (Xauth *auth, char *name)
>  }
>  
>  static void
> -writeLocalAuth (FILE *file, Xauth *auth, char *name)
> +writeLocalAuth (FILE *file, Xauth *auth, char *name, int listenTcp)
>  {
>  
>      Debug ("writeLocalAuth: %s %.*s\n", name, auth->name_length, auth->name);
>      setAuthNumber (auth, name);
>  #ifdef TCPCONN
> -    DefineSelf (file, auth);
> +    if (listenTcp)
> +         DefineSelf (file, auth);
>  #endif
>      DefineLocal (file, auth);
>  }
> @@ -762,8 +763,21 @@ SetUserAuthorization (struct display *d,
>      struct stat      statb;
>      int              i;
>      int              magicCookie;
> +    char     **arg;
> +    int              foundListen = 0;
>  
>      Debug ("SetUserAuthorization\n");
> +    for (arg = d->argv; *arg!= NULL; arg++) {
> +        if (strcmp(*arg, "tcp") == 0 && foundListen) {
> +                Debug("setUserAuthorization: found listenTcp \n");
> +                d->listenTcp = 1;
> +                break;
> +        }
> +        if (strcmp(*arg, "-listen") == 0)
> +                foundListen = 1;
> +        else
> +                foundListen = 0;
> +    }
>      auths = d->authorizations;
>      if (auths) {
>       home = getEnv (verify->userEnviron, "HOME");
> @@ -813,7 +827,7 @@ SetUserAuthorization (struct display *d,
>               !strncmp (auths[i]->name, "MIT-MAGIC-COOKIE-1", 18))
>           {
>               magicCookie = i;
> -             writeLocalAuth (new, auths[i], d->name);
> +             writeLocalAuth (new, auths[i], d->name, d->listenTcp);
>               break;
>           }
>       }
> @@ -893,7 +907,7 @@ RemoveUserAuthorization (struct display 
>       initAddrs ();
>       doWrite = 0;
>       for (i = 0; i < d->authNum; i++)
> -         writeLocalAuth (new, auths[i], d->name);
> +             writeLocalAuth (new, auths[i], d->name, d->listenTcp);
>       doWrite = 1;
>       if (old) {
>           if (fstat (fileno (old), &statb) != -1)
> Index: xenodm/resource.c
> ===================================================================
> RCS file: /cvs/xenocara/app/xenodm/xenodm/resource.c,v
> retrieving revision 1.6
> diff -u -p -u -r1.6 resource.c
> --- xenodm/resource.c 8 Mar 2021 17:54:28 -0000       1.6
> +++ xenodm/resource.c 8 Mar 2021 20:05:11 -0000
> @@ -169,6 +169,8 @@ struct displayResource serverResources[]
>                               "" },
>  { "autoLogin",       "AutoLogin",    DM_STRING,      boffset(autoLogin),
>                               "" },
> +{ "listenTcp",       "ListenTcp",   DM_BOOL,        boffset(listenTcp),
> +                            "false" }, 
>  };
>  
>  #define NUM_SERVER_RESOURCES (sizeof serverResources/\
> Index: xenodm/server.c
> ===================================================================
> RCS file: /cvs/xenocara/app/xenodm/xenodm/server.c,v
> retrieving revision 1.4
> diff -u -p -u -r1.4 server.c
> --- xenodm/server.c   11 Jul 2018 14:35:46 -0000      1.4
> +++ xenodm/server.c   8 Mar 2021 20:05:11 -0000
> @@ -86,6 +86,8 @@ StartServerOnce (struct display *d)
>           snprintf (arg, sizeof(arg), "-auth %s", d->authFile);
>           argv = parseArgs (argv, arg);
>       }
> +     if (d->listenTcp)
> +         argv = parseArgs(argv, "-listen tcp");
>       if (!argv) {
>           LogError ("StartServer: no arguments\n");
>           sleep ((unsigned) d->openDelay);
> 
> -- 
> Matthieu Herrb
> 
> 

Reply via email to