Decouple AllowStreamLocalForwarding and AllowTcpForwarding

Baptiste Daroussin bapt at nours.eu
Thu Apr 9 19:51:39 AEST 2026


On Tue 28 Oct 07:47, Baptiste Daroussin wrote:
> On Thu 16 Oct 13:43, Baptiste Daroussin wrote:
> > hello everyone,
> 
> Hello,
> 
> Anything I should do on my side to make this progress?
> 

Is the prefered way to send patches via github? if needed I can add unit tests.

Best regards,
Bapt
> > 
> > I am trying to fix an issue we have at $work with the fact that the
> > AllowStreamLocalFrowarding option is dependant on the AllowTcpForwarding option
> > (this issue have been reported multiple time by others over the past).
> > 
> > When looking at the code, I can see 2 approach:
> > 1/ the complete option would consist in removing FORWARD_LOCAL and
> > FORWARD_REMOTE and replace them with TCP_FORWARD_LOCAL and TCP_FORWARD_REMOTE
> > then introduce STREAMLOCAL_FORWARD_LOCAL and STREAMLOCAL_FORWARD_REMOTE and
> > duplicate all the code to deal with both case.
> > 
> > 2/ the lazy approach which is the one I took so far would be to apply the patch.
> > 
> > I am not very familiar with ssh code, but it seems to work and not break the
> > testsuite. Still I ma pretty sure this is too naive, what do you think?
> > 
> > Best regards,
> > Bapt
> > 
> > ---
> >  session.c | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> > 
> > diff --git a/session.c b/session.c
> > index f265fdc3ed3..e35ff360ec9 100644
> > --- a/session.c
> > +++ b/session.c
> > @@ -323,11 +323,13 @@ do_authenticated(struct ssh *ssh, Authctxt *authctxt)
> >  		channel_disable_admin(ssh, FORWARD_LOCAL);
> >  		channel_disable_admin(ssh, FORWARD_REMOTE);
> >  	} else {
> > -		if ((options.allow_tcp_forwarding & FORWARD_LOCAL) == 0)
> > +		if ((options.allow_tcp_forwarding & FORWARD_LOCAL) == 0 &&
> > +		    (options.allow_streamlocal_forwarding & FORWARD_LOCAL) == 0)
> >  			channel_disable_admin(ssh, FORWARD_LOCAL);
> >  		else
> >  			channel_permit_all(ssh, FORWARD_LOCAL);
> > -		if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0)
> > +		if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 &&
> > +		    (options.allow_streamlocal_forwarding & FORWARD_REMOTE) == 0)
> >  			channel_disable_admin(ssh, FORWARD_REMOTE);
> >  		else
> >  			channel_permit_all(ssh, FORWARD_REMOTE);


More information about the openssh-unix-dev mailing list