On Sat, Mar 06, 2021 at 09:52:58PM +0300, Vadim Zhukov wrote:
> сб, 6 мар. 2021 г. в 21:30, Theo de Raadt <dera...@openbsd.org>:
> >
> > Matthieu Herrb <matth...@openbsd.org> wrote:
> >
> > > Linux, systemd and XDG have inventend this /run/user/$uid tmpfs that
> > > is created automagically and they use that in place of /tmp for
> > > volatile things that don't beloing to $HOME, but this is not a can of
> > > worms I want to open now.
> >
> > Awesome, another directory to drop stuff and run a filesystem out of space
> > with unclear consequences...
> >
> > This does not fit with our direction either.
> 
> So this code appeared in X11R4. There was no VCS repo, I suppose, so no 
> history.
> 
> There are basically four cases why xdm may fail to create ~/.Xauthority:
> 
> a) home directory doesn't exist
> b) home directory is non-writeable due to permissions
> c) /home is full
> d) /home is on NFS and there are locking/network issues.
> 
> I'm not sure if (a) is a valid case. (b) is a variant of my case, as I
> said, I can live without this feature. In the case of (c) users
> (non-admins) won't be able to do something anyway. Can't speak for NFS
> (I've quit the job where /home on NFS has been set up a few years ago)
> so no opinion on (d).
> 

I think 4 his not an issue anymore.the locking mecanism used by xauth
is working with all current NFS implementations (including
OpenBSD's).

Here is a patch to remve the backup authorization file. Unfortunatly
there is no simple way to display an explicit error message. One will
need to check the xenodm.log file.

Xsession can be patched too to remove the fallback to /tmp/xes- log
file if ~/.xsession-errors cannot be writen. This will be a separate
diff.

Index: include/dm.h
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xenodm/include/dm.h,v
retrieving revision 1.15
diff -u -p -u -r1.15 dm.h
--- include/dm.h        10 Jan 2021 09:18:30 -0000      1.15
+++ include/dm.h        6 Mar 2021 17:53:44 -0000
@@ -122,7 +122,6 @@ struct display {
        char            **authNames;    /* authorization protocol names */
        unsigned short  *authNameLens;  /* authorization protocol name lens */
        char            *clientAuthFile;/* client specified auth file */
-       char            *userAuthDir;   /* backup directory for tickets */
        int             authComplain;   /* complain when no auth for XDMCP */
 
        /* information potentially derived from resources */
Index: man/xenodm.man
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xenodm/man/xenodm.man,v
retrieving revision 1.11
diff -u -p -u -r1.11 xenodm.man
--- man/xenodm.man      15 Aug 2019 16:23:33 -0000      1.11
+++ man/xenodm.man      6 Mar 2021 17:53:44 -0000
@@ -582,18 +582,6 @@ 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 .userAuthDir
-When
-.Nm
-is unable to write to the usual user authorization file
-.Pq Pa $HOME/.Xauthority ,
-it creates a unique file name in this directory and points the environment
-variable
-.Ev XAUTHORITY
-at the created file.
-It uses
-.Pa /tmp
-by default.
 .El
 .Sh CONFIGURATION FILE
 First, the
Index: xenodm/auth.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xenodm/xenodm/auth.c,v
retrieving revision 1.15
diff -u -p -u -r1.15 auth.c
--- xenodm/auth.c       1 Jan 2021 18:09:07 -0000       1.15
+++ xenodm/auth.c       6 Mar 2021 17:53:44 -0000
@@ -752,7 +752,7 @@ void
 SetUserAuthorization (struct display *d, struct verify_info *verify)
 {
     FILE       *old = NULL, *new;
-    char       home_name[1024], backup_name[1024], new_name[1024];
+    char       home_name[1024], new_name[1024];
     char       *name = NULL;
     char       *home;
     char       *envname = NULL;
@@ -762,7 +762,6 @@ SetUserAuthorization (struct display *d,
     struct stat        statb;
     int                i;
     int                magicCookie;
-    int                fd;
 
     Debug ("SetUserAuthorization\n");
     auths = d->authorizations;
@@ -793,45 +792,10 @@ SetUserAuthorization (struct display *d,
            }
        }
        if (lockStatus != LOCK_SUCCESS) {
-           snprintf (backup_name, sizeof(backup_name),
-                     "%s/.XauthXXXXXX", d->userAuthDir);
-           fd = mkstemp (backup_name);
-           if (fd >= 0) {
-               old = fdopen (fd, "r");
-               if (old == NULL)
-                   (void) close(fd);
-           }
-
-           if (old != NULL)
-           {
-               lockStatus = XauLockAuth (backup_name, 1, 2, 10);
-               Debug ("backup lock is %d\n", lockStatus);
-               if (lockStatus == LOCK_SUCCESS) {
-                   if (openFiles (backup_name, new_name, sizeof(new_name),
-                                   &old, &new)
-                       && (old != NULL) && (new != NULL)) {
-                       name = backup_name;
-                       setenv = 1;
-                   } else {
-                       XauUnlockAuth (backup_name);
-                       lockStatus = LOCK_ERROR;
-                       if (old != NULL) {
-                           (void) fclose (old);
-                           old = NULL;
-                       }
-                       if (new != NULL)
-                           (void) fclose (new);
-                   }
-               } else {
-                   (void) fclose (old);
-               }
-           }
-       }
-       if (lockStatus != LOCK_SUCCESS) {
-           Debug ("can't lock auth file %s or backup %s\n",
-                           home_name, backup_name);
-           LogError ("can't lock authorization file %s or backup %s\n",
-                           home_name, backup_name);
+           Debug ("can't lock auth file %s\n",
+                           home_name);
+           LogError ("can't lock authorization file %s\n",
+                           home_name);
            return;
        }
        initAddrs ();
Index: xenodm/dpylist.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xenodm/xenodm/dpylist.c,v
retrieving revision 1.3
diff -u -p -u -r1.3 dpylist.c
--- xenodm/dpylist.c    10 Jan 2021 09:18:30 -0000      1.3
+++ xenodm/dpylist.c    6 Mar 2021 17:53:44 -0000
@@ -128,7 +128,6 @@ RemoveDisplay (struct display *old)
            if (d->authFile)
                (void) unlink (d->authFile);
            free (d->authFile);
-           free (d->userAuthDir);
            for (x = d->authNames; x && *x; x++)
                free (*x);
            free (d->authNames);
@@ -195,7 +194,6 @@ NewDisplay (char *name, char *class)
     d->authNameNum = 0;
     d->clientAuthFile = NULL;
     d->authFile = NULL;
-    d->userAuthDir = NULL;
     d->authNames = NULL;
     d->authNameLens = NULL;
     d->authComplain = 1;
Index: xenodm/resource.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/app/xenodm/xenodm/resource.c,v
retrieving revision 1.5
diff -u -p -u -r1.5 resource.c
--- xenodm/resource.c   3 Nov 2018 18:04:45 -0000       1.5
+++ xenodm/resource.c   6 Mar 2021 17:53:44 -0000
@@ -200,8 +200,6 @@ struct displayResource sessionResources[
                                DEF_SYSTEM_SHELL },
 { "failsafeClient","FailsafeClient",   DM_STRING,      boffset(failsafeClient),
                                DEF_FAILSAFE_CLIENT },
-{ "userAuthDir","UserAuthDir", DM_STRING,      boffset(userAuthDir),
-                               DEF_USER_AUTH_DIR },
 };
 
 #define NUM_SESSION_RESOURCES  (sizeof sessionResources/\

-- 
Matthieu Herrb

Reply via email to