aboutsummaryrefslogtreecommitdiff
path: root/server-client.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2020-05-10 16:52:46 +0100
committerNicholas Marriott <nicholas.marriott@gmail.com>2020-05-10 16:52:46 +0100
commitd01e7aac89fefff31e668ac2d668c84c345b9e67 (patch)
tree5d773b1d95cb96f9c3b70e1d34c355f283a0a136 /server-client.c
parent5fa377d9273ee609784acc538a5defa09feb3095 (diff)
downloadrtmux-d01e7aac89fefff31e668ac2d668c84c345b9e67.tar.gz
rtmux-d01e7aac89fefff31e668ac2d668c84c345b9e67.tar.bz2
rtmux-d01e7aac89fefff31e668ac2d668c84c345b9e67.zip
Add a -D flag to ask tmux not to daemonize, useful both for running a debugger
(lldb does not have follow-fork-mode) and for running with a managed supervisor init system. GitHub issue 2190.
Diffstat (limited to 'server-client.c')
-rw-r--r--server-client.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/server-client.c b/server-client.c
index 794cb41e..c9250491 100644
--- a/server-client.c
+++ b/server-client.c
@@ -236,11 +236,22 @@ server_client_create(int fd)
int
server_client_open(struct client *c, char **cause)
{
+ const char *ttynam = _PATH_TTY;
+
if (c->flags & CLIENT_CONTROL)
return (0);
- if (strcmp(c->ttyname, "/dev/tty") == 0) {
- *cause = xstrdup("can't use /dev/tty");
+ if (strcmp(c->ttyname, ttynam) ||
+ ((isatty(STDIN_FILENO) &&
+ (ttynam = ttyname(STDIN_FILENO)) != NULL &&
+ strcmp(c->ttyname, ttynam) == 0) ||
+ (isatty(STDOUT_FILENO) &&
+ (ttynam = ttyname(STDOUT_FILENO)) != NULL &&
+ strcmp(c->ttyname, ttynam) == 0) ||
+ (isatty(STDERR_FILENO) &&
+ (ttynam = ttyname(STDERR_FILENO)) != NULL &&
+ strcmp(c->ttyname, ttynam) == 0))) {
+ xasprintf(cause, "can't use %s", c->ttyname);
return (-1);
}