diff options
author | Thomas <thomas@xteddy.org> | 2013-09-26 12:00:48 +0100 |
---|---|---|
committer | Thomas <thomas@xteddy.org> | 2013-09-30 15:26:32 +0100 |
commit | bda970b3b14d145fcaa25cf8f3f9a3cb70a864c3 (patch) | |
tree | 14968a00572db6c4d25ec11838844600dbac8f83 /tmux.c | |
parent | 75ec17f0b5204a12d15282a5167918416cd05276 (diff) | |
download | rtmux-bda970b3b14d145fcaa25cf8f3f9a3cb70a864c3.tar.gz rtmux-bda970b3b14d145fcaa25cf8f3f9a3cb70a864c3.tar.bz2 rtmux-bda970b3b14d145fcaa25cf8f3f9a3cb70a864c3.zip |
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.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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); } } |