summaryrefslogtreecommitdiffstats
path: root/crypto/openssh/channels.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/openssh/channels.c')
-rw-r--r--crypto/openssh/channels.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/crypto/openssh/channels.c b/crypto/openssh/channels.c
index 6c30b0f..ffff261 100644
--- a/crypto/openssh/channels.c
+++ b/crypto/openssh/channels.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.327 2013/11/08 00:39:15 djm Exp $ */
+/* $OpenBSD: channels.c,v 1.328 2013/12/19 01:04:36 djm Exp $ */
/* $FreeBSD$ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -1427,6 +1427,8 @@ port_open_helper(Channel *c, char *rtype)
{
int direct;
char buf[1024];
+ char *local_ipaddr = get_local_ipaddr(c->sock);
+ int local_port = get_sock_port(c->sock, 1);
char *remote_ipaddr = get_peer_ipaddr(c->sock);
int remote_port = get_peer_port(c->sock);
@@ -1441,9 +1443,9 @@ port_open_helper(Channel *c, char *rtype)
snprintf(buf, sizeof buf,
"%s: listening port %d for %.100s port %d, "
- "connect from %.200s port %d",
+ "connect from %.200s port %d to %.100s port %d",
rtype, c->listening_port, c->path, c->host_port,
- remote_ipaddr, remote_port);
+ remote_ipaddr, remote_port, local_ipaddr, local_port);
free(c->remote_name);
c->remote_name = xstrdup(buf);
@@ -1461,7 +1463,7 @@ port_open_helper(Channel *c, char *rtype)
} else {
/* listen address, port */
packet_put_cstring(c->path);
- packet_put_int(c->listening_port);
+ packet_put_int(local_port);
}
/* originator host and port */
packet_put_cstring(remote_ipaddr);
@@ -1478,6 +1480,7 @@ port_open_helper(Channel *c, char *rtype)
packet_send();
}
free(remote_ipaddr);
+ free(local_ipaddr);
}
static void
@@ -2771,8 +2774,20 @@ channel_fwd_bind_addr(const char *listen_addr, int *wildcardp,
if (((datafellows & SSH_OLD_FORWARD_ADDR) &&
strcmp(listen_addr, "0.0.0.0") == 0 && is_client == 0) ||
*listen_addr == '\0' || strcmp(listen_addr, "*") == 0 ||
- (!is_client && gateway_ports == 1))
+ (!is_client && gateway_ports == 1)) {
wildcard = 1;
+ /*
+ * Notify client if they requested a specific listen
+ * address and it was overridden.
+ */
+ if (*listen_addr != '\0' &&
+ strcmp(listen_addr, "0.0.0.0") != 0 &&
+ strcmp(listen_addr, "*") != 0) {
+ packet_send_debug("Forwarding listen address "
+ "\"%s\" overridden by server "
+ "GatewayPorts", listen_addr);
+ }
+ }
else if (strcmp(listen_addr, "localhost") != 0)
addr = listen_addr;
}
OpenPOWER on IntegriCloud