summaryrefslogtreecommitdiffstats
path: root/server-client.c
diff options
context:
space:
mode:
authornicm <nicm>2020-05-16 16:07:55 +0000
committernicm <nicm>2020-05-16 16:07:55 +0000
commitdceb6a15d04a2b2e050ab41816d0df3fe224b416 (patch)
treec2810c4472b71fd21301b6391e1a38a4e0774777 /server-client.c
parent126bacb473f7950a156944caba42fad5f1764287 (diff)
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 0bd00fc4..f42c9843 100644
--- a/server-client.c
+++ b/server-client.c
@@ -238,11 +238,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) == 0||
+ ((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);
}