summaryrefslogtreecommitdiffstats
path: root/tmux.c
diff options
context:
space:
mode:
authorThomas <thomas@xteddy.org>2013-09-26 12:00:48 +0100
committerThomas <thomas@xteddy.org>2013-09-30 15:26:32 +0100
commitbda970b3b14d145fcaa25cf8f3f9a3cb70a864c3 (patch)
tree14968a00572db6c4d25ec11838844600dbac8f83 /tmux.c
parent75ec17f0b5204a12d15282a5167918416cd05276 (diff)
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.
Diffstat (limited to 'tmux.c')
-rw-r--r--tmux.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/tmux.c b/tmux.c
index 606c574f..9c81cff5 100644
--- a/tmux.c
+++ b/tmux.c
@@ -184,7 +184,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);
}
@@ -387,7 +388,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);
}
}