1
0
mirror of https://github.com/tmux/tmux.git synced 2025-04-22 04:18:47 +00:00

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.
This commit is contained in:
nicm 2013-10-10 12:03:22 +00:00
parent 1bd0851ee8
commit e4dc1568ce

6
tmux.c
View File

@ -189,7 +189,8 @@ makesocketpath(const char *label)
errno = ENOTDIR; errno = ENOTDIR;
return (NULL); 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; errno = EACCES;
return (NULL); return (NULL);
} }
@ -389,7 +390,8 @@ main(int argc, char **argv)
/* -L or default set. */ /* -L or default set. */
if (label != NULL) { if (label != NULL) {
if ((path = makesocketpath(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); exit(1);
} }
} }