Improve error reporting when the tmux /tmp directory cannot be created
authornicm <nicm@openbsd.org>
Tue, 6 Jul 2021 08:26:00 +0000 (08:26 +0000)
committernicm <nicm@openbsd.org>
Tue, 6 Jul 2021 08:26:00 +0000 (08:26 +0000)
or used, GitHub issue 2765 from Uwe Kleine-Koenig.

usr.bin/tmux/tmux.c

index 01a992a..a76e966 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.c,v 1.207 2021/06/10 07:52:29 nicm Exp $ */
+/* $OpenBSD: tmux.c,v 1.208 2021/07/06 08:26:00 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -211,16 +211,22 @@ make_label(const char *label, char **cause)
        free(paths);
 
        xasprintf(&base, "%s/tmux-%ld", path, (long)uid);
-       if (mkdir(base, S_IRWXU) != 0 && errno != EEXIST)
+       if (mkdir(base, S_IRWXU) != 0 && errno != EEXIST) {
+               xasprintf(cause, "couldn't create directory %s (%s)", base,
+                   strerror(errno));
                goto fail;
-       if (lstat(base, &sb) != 0)
+       }
+       if (lstat(base, &sb) != 0) {
+               xasprintf(cause, "couldn't read directory %s (%s)", base,
+                   strerror(errno));
                goto fail;
+       }
        if (!S_ISDIR(sb.st_mode)) {
-               errno = ENOTDIR;
+               xasprintf(cause, "%s is not a directory", base);
                goto fail;
        }
        if (sb.st_uid != uid || (sb.st_mode & S_IRWXO) != 0) {
-               errno = EACCES;
+               xasprintf(cause, "directory %s has unsafe permissions", base);
                goto fail;
        }
        xasprintf(&path, "%s/%s", base, label);
@@ -228,7 +234,6 @@ make_label(const char *label, char **cause)
        return (path);
 
 fail:
-       xasprintf(cause, "error creating %s (%s)", base, strerror(errno));
        free(base);
        return (NULL);
 }