From e4dc1568ce49120962d4932ff8417c60778a5a33 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 10 Oct 2013 12:03:22 +0000 Subject: [PATCH] Don't treat TMUX_TMPDIR as a potential file The point of setting TMUX_TMPDIR is to then make any labels from -L go to that directory. In the case of makesocketpath() with no TMUX_TMPDIR set, would set both the path and the default socket to a file. The checking of the permissions on the file worked fine in that case, but when TMUX_TMPDIR is set, won't work on a directory. This fixes the problem by ensuring the check on the permissions is performed on directories only. By Thomas Adam. --- tmux.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tmux.c b/tmux.c index 73843a96..901ded80 100644 --- a/tmux.c +++ b/tmux.c @@ -189,7 +189,8 @@ makesocketpath(const char *label) errno = ENOTDIR; return (NULL); } - if (sb.st_uid != uid || (sb.st_mode & (S_IRWXG|S_IRWXO)) != 0) { + if (sb.st_uid != uid || (!S_ISDIR(sb.st_mode) && + sb.st_mode & (S_IRWXG|S_IRWXO)) != 0) { errno = EACCES; return (NULL); } @@ -389,7 +390,8 @@ main(int argc, char **argv) /* -L or default set. */ if (label != NULL) { if ((path = makesocketpath(label)) == NULL) { - fprintf(stderr, "can't create socket\n"); + fprintf(stderr, "can't create socket: %s\n", + strerror(errno)); exit(1); } }