aboutsummaryrefslogtreecommitdiff
path: root/server-client.c
diff options
context:
space:
mode:
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);
}