From b860381cd24e81d47a96c07716d3b376a9b9d522 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 6 Jul 2021 08:26:00 +0000 Subject: [PATCH] Improve error reporting when the tmux /tmp directory cannot be created or used, GitHub issue 2765 from Uwe Kleine-Koenig. --- usr.bin/tmux/tmux.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/usr.bin/tmux/tmux.c b/usr.bin/tmux/tmux.c index 01a992ac715..a76e966b95e 100644 --- a/usr.bin/tmux/tmux.c +++ b/usr.bin/tmux/tmux.c @@ -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 @@ -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); } -- 2.20.1