From b16461ce452a53f99b445fae0f935d16cdc104cb Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 22 Jan 2002 23:29:22 +1100 Subject: - markus@cvs.openbsd.org 2002/01/16 13:17:51 [channels.c channels.h serverloop.c ssh.c] wrapper for channel_setup_fwd_listener --- ChangeLog | 5 ++++- channels.c | 71 ++++++++++++++++++++++++++++-------------------------------- channels.h | 8 +++---- serverloop.c | 9 +++----- ssh.c | 4 ++-- 5 files changed, 45 insertions(+), 52 deletions(-) diff --git a/ChangeLog b/ChangeLog index e38f073ff..ff90e5b86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -182,6 +182,9 @@ - markus@cvs.openbsd.org 2002/01/14 13:57:03 [channels.h nchan.c] (c) 2002 + - markus@cvs.openbsd.org 2002/01/16 13:17:51 + [channels.c channels.h serverloop.c ssh.c] + wrapper for channel_setup_fwd_listener 20020121 - (djm) Rework ssh-rand-helper: @@ -7329,4 +7332,4 @@ - Wrote replacements for strlcpy and mkdtemp - Released 1.0pre1 -$Id: ChangeLog,v 1.1774 2002/01/22 12:29:03 djm Exp $ +$Id: ChangeLog,v 1.1775 2002/01/22 12:29:22 djm Exp $ diff --git a/channels.c b/channels.c index 473c5efe4..03f12d396 100644 --- a/channels.c +++ b/channels.c @@ -39,7 +39,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: channels.c,v 1.159 2002/01/14 13:55:55 markus Exp $"); +RCSID("$OpenBSD: channels.c,v 1.160 2002/01/16 13:17:51 markus Exp $"); #include "ssh.h" #include "ssh1.h" @@ -2037,53 +2037,30 @@ channel_set_af(int af) IPv4or6 = af; } -/* - * Initiate forwarding of connections to local port "port" through the secure - * channel to host:port from remote side. - */ -int -channel_request_local_forwarding(u_short listen_port, const char *host_to_connect, - u_short port_to_connect, int gateway_ports) -{ - return channel_request_forwarding( - NULL, listen_port, - host_to_connect, port_to_connect, - gateway_ports, /*remote_fwd*/ 0); -} - -/* - * If 'remote_fwd' is true we have a '-R style' listener for protocol 2 - * (SSH_CHANNEL_RPORT_LISTENER). - */ -int -channel_request_forwarding( - const char *listen_address, u_short listen_port, - const char *host_to_connect, u_short port_to_connect, - int gateway_ports, int remote_fwd) +static int +channel_setup_fwd_listener(int type, const char *listen_addr, u_short listen_port, + const char *host_to_connect, u_short port_to_connect, int gateway_ports) { Channel *c; - int success, sock, on = 1, type; + int success, sock, on = 1; struct addrinfo hints, *ai, *aitop; - char ntop[NI_MAXHOST], strport[NI_MAXSERV]; const char *host; + char ntop[NI_MAXHOST], strport[NI_MAXSERV]; struct linger linger; success = 0; + host = (type == SSH_CHANNEL_RPORT_LISTENER) ? + listen_addr : host_to_connect; - if (remote_fwd) { - host = listen_address; - type = SSH_CHANNEL_RPORT_LISTENER; - } else { - host = host_to_connect; - type = SSH_CHANNEL_PORT_LISTENER; + if (host == NULL) { + error("No forward host name."); + return success; } - if (strlen(host) > SSH_CHANNEL_PATH_LEN - 1) { error("Forward host name too long."); return success; } - /* XXX listen_address is currently ignored */ /* * getaddrinfo returns a loopback address if the hostname is * set to NULL and hints.ai_flags is not AI_PASSIVE @@ -2101,7 +2078,7 @@ channel_request_forwarding( continue; if (getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, sizeof(ntop), strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV) != 0) { - error("channel_request_forwarding: getnameinfo failed"); + error("channel_setup_fwd_listener: getnameinfo failed"); continue; } /* Create a port to listen for the host. */ @@ -2143,7 +2120,7 @@ channel_request_forwarding( CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, xstrdup("port listener"), 1); if (c == NULL) { - error("channel_request_forwarding: channel_new failed"); + error("channel_setup_fwd_listener: channel_new failed"); close(sock); continue; } @@ -2153,12 +2130,30 @@ channel_request_forwarding( success = 1; } if (success == 0) - error("channel_request_forwarding: cannot listen to port: %d", + error("channel_setup_fwd_listener: cannot listen to port: %d", listen_port); freeaddrinfo(aitop); return success; } +/* protocol local port fwd, used by ssh (and sshd in v1) */ +int +channel_setup_local_fwd_listener(u_short listen_port, + const char *host_to_connect, u_short port_to_connect, int gateway_ports) +{ + return channel_setup_fwd_listener(SSH_CHANNEL_PORT_LISTENER, + NULL, listen_port, host_to_connect, port_to_connect, gateway_ports); +} + +/* protocol v2 remote port fwd, used by sshd */ +int +channel_setup_remote_fwd_listener(const char *listen_address, + u_short listen_port, int gateway_ports) +{ + return channel_setup_fwd_listener(SSH_CHANNEL_RPORT_LISTENER, + listen_address, listen_port, NULL, 0, gateway_ports); +} + /* * Initiate forwarding of connections to port "port" on remote host through * the secure channel to host:port from local side. @@ -2244,7 +2239,7 @@ channel_input_port_forward_request(int is_root, int gateway_ports) port); #endif /* Initiate forwarding */ - channel_request_local_forwarding(port, hostname, host_port, gateway_ports); + channel_setup_local_fwd_listener(port, hostname, host_port, gateway_ports); /* Free the argument string. */ xfree(hostname); diff --git a/channels.h b/channels.h index 3422d9644..6c6008f91 100644 --- a/channels.h +++ b/channels.h @@ -32,7 +32,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* RCSID("$OpenBSD: channels.h,v 1.59 2002/01/14 13:57:03 markus Exp $"); */ +/* RCSID("$OpenBSD: channels.h,v 1.60 2002/01/16 13:17:51 markus Exp $"); */ #ifndef CHANNEL_H #define CHANNEL_H @@ -190,10 +190,8 @@ void channel_input_port_forward_request(int, int); int channel_connect_to(const char *, u_short); int channel_connect_by_listen_address(u_short); void channel_request_remote_forwarding(u_short, const char *, u_short); -int channel_request_local_forwarding(u_short, const char *, u_short, int); -int -channel_request_forwarding(const char *, u_short, const char *, u_short, int, - int); +int channel_setup_local_fwd_listener(u_short, const char *, u_short, int); +int channel_setup_remote_fwd_listener(const char *, u_short, int); /* x11 forwarding */ diff --git a/serverloop.c b/serverloop.c index 39d992057..6c8719a3f 100644 --- a/serverloop.c +++ b/serverloop.c @@ -35,7 +35,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: serverloop.c,v 1.94 2002/01/10 11:13:29 markus Exp $"); +RCSID("$OpenBSD: serverloop.c,v 1.95 2002/01/16 13:17:51 markus Exp $"); #include "xmalloc.h" #include "packet.h" @@ -991,11 +991,8 @@ server_input_global_request(int type, u_int32_t seq, void *ctxt) packet_send_debug("Server has disabled port forwarding."); } else { /* Start listening on the port */ - success = channel_request_forwarding( - listen_address, listen_port, - /*unspec host_to_connect*/ "", - /*unspec port_to_connect*/ 0, - options.gateway_ports, /*remote*/ 1); + success = channel_setup_remote_fwd_listener( + listen_address, listen_port, options.gateway_ports); } xfree(listen_address); } diff --git a/ssh.c b/ssh.c index e4db59bcc..8e1604e21 100644 --- a/ssh.c +++ b/ssh.c @@ -39,7 +39,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh.c,v 1.157 2001/12/28 15:06:00 markus Exp $"); +RCSID("$OpenBSD: ssh.c,v 1.158 2002/01/16 13:17:51 markus Exp $"); #include #include @@ -841,7 +841,7 @@ ssh_init_forwarding(void) options.local_forwards[i].port, options.local_forwards[i].host, options.local_forwards[i].host_port); - success += channel_request_local_forwarding( + success += channel_setup_local_fwd_listener( options.local_forwards[i].port, options.local_forwards[i].host, options.local_forwards[i].host_port, -- cgit v1.2.3