]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: don't reuse c->isatty for signalling that the remote channel
authordjm@openbsd.org <djm@openbsd.org>
Tue, 7 Oct 2025 08:02:32 +0000 (08:02 +0000)
committerDamien Miller <djm@mindrot.org>
Tue, 7 Oct 2025 08:20:20 +0000 (19:20 +1100)
has a tty attached as this causes side effects, e.g. in channel_handle_rfd().
bz3872

ok markus@

OpenBSD-Commit-ID: 4cd8a9f641498ca6089442e59bad0fd3dcbe85f8

channels.c
channels.h

index f1d7bcf345b1995e3b9e38ea3cd2b7f6e2633686..80014ff341fad3fdbbef24f8581453c20c67e3fb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.451 2025/09/25 06:33:19 djm Exp $ */
+/* $OpenBSD: channels.c,v 1.452 2025/10/07 08:02:32 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -362,7 +362,7 @@ channel_classify(struct ssh *ssh, Channel *c)
 {
        struct ssh_channels *sc = ssh->chanctxt;
        const char *type = c->xctype == NULL ? c->ctype : c->xctype;
-       const char *classifier = c->isatty ?
+       const char *classifier = (c->isatty || c->remote_has_tty) ?
            sc->bulk_classifier_tty : sc->bulk_classifier_notty;
 
        c->bulk = type != NULL && match_pattern_list(type, classifier, 0) == 1;
@@ -566,7 +566,7 @@ channel_new(struct ssh *ssh, char *ctype, int type, int rfd, int wfd, int efd,
 void
 channel_set_tty(struct ssh *ssh, Channel *c)
 {
-       c->isatty = 1;
+       c->remote_has_tty = 1;
        channel_classify(ssh, c);
 }
 
@@ -1078,7 +1078,8 @@ channel_format_status(const Channel *c)
            c->rfd, c->wfd, c->efd, c->sock, c->ctl_chan,
            c->have_ctl_child_id ? "c" : "nc", c->ctl_child_id,
            c->io_want, c->io_ready,
-           c->isatty ? "T" : "", c->bulk ? "B" : "I");
+           c->isatty ? "T" : (c->remote_has_tty ? "RT" : ""),
+           c->bulk ? "B" : "I");
        return ret;
 }
 
index df7c7f364d225bbf62ddc68f57ce0ad6403a1112..7456541f8ce3af75dd1c0117879379c799cfd9c7 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.h,v 1.161 2025/09/25 06:33:19 djm Exp $ */
+/* $OpenBSD: channels.h,v 1.162 2025/10/07 08:02:32 djm Exp $ */
 
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -145,6 +145,7 @@ struct Channel {
        int     ctl_chan;       /* control channel (multiplexed connections) */
        uint32_t ctl_child_id;  /* child session for mux controllers */
        int     have_ctl_child_id;/* non-zero if ctl_child_id is valid */
+       int     remote_has_tty; /* remote side has a tty */
        int     isatty;         /* rfd is a tty */
 #ifdef _AIX
        int     wfd_isatty;     /* wfd is a tty */