summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--channels.c11
2 files changed, 16 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index a3689a4af..c22c8b4de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,15 @@
14 - djm@cvs.openbsd.org 2013/12/19 00:27:57 14 - djm@cvs.openbsd.org 2013/12/19 00:27:57
15 [auth-options.c] 15 [auth-options.c]
16 simplify freeing of source-address certificate restriction 16 simplify freeing of source-address certificate restriction
17 - djm@cvs.openbsd.org 2013/12/19 01:04:36
18 [channels.c]
19 bz#2147: fix multiple remote forwardings with dynamically assigned
20 listen ports. In the s->c message to open the channel we were sending
21 zero (the magic number to request a dynamic port) instead of the actual
22 listen port. The client therefore had no way of discriminating between
23 them.
24
25 Diagnosis and fix by ronf AT timeheart.net
17 26
1820131221 2720131221
19 - (dtucker) [regress/keytype.sh] Actually test ecdsa key types. 28 - (dtucker) [regress/keytype.sh] Actually test ecdsa key types.
diff --git a/channels.c b/channels.c
index c9df9bac5..e741f29b9 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: channels.c,v 1.327 2013/11/08 00:39:15 djm Exp $ */ 1/* $OpenBSD: channels.c,v 1.328 2013/12/19 01:04:36 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1385,6 +1385,8 @@ port_open_helper(Channel *c, char *rtype)
1385{ 1385{
1386 int direct; 1386 int direct;
1387 char buf[1024]; 1387 char buf[1024];
1388 char *local_ipaddr = get_local_ipaddr(c->sock);
1389 int local_port = get_sock_port(c->sock, 1);
1388 char *remote_ipaddr = get_peer_ipaddr(c->sock); 1390 char *remote_ipaddr = get_peer_ipaddr(c->sock);
1389 int remote_port = get_peer_port(c->sock); 1391 int remote_port = get_peer_port(c->sock);
1390 1392
@@ -1399,9 +1401,9 @@ port_open_helper(Channel *c, char *rtype)
1399 1401
1400 snprintf(buf, sizeof buf, 1402 snprintf(buf, sizeof buf,
1401 "%s: listening port %d for %.100s port %d, " 1403 "%s: listening port %d for %.100s port %d, "
1402 "connect from %.200s port %d", 1404 "connect from %.200s port %d to %.100s port %d",
1403 rtype, c->listening_port, c->path, c->host_port, 1405 rtype, c->listening_port, c->path, c->host_port,
1404 remote_ipaddr, remote_port); 1406 remote_ipaddr, remote_port, local_ipaddr, local_port);
1405 1407
1406 free(c->remote_name); 1408 free(c->remote_name);
1407 c->remote_name = xstrdup(buf); 1409 c->remote_name = xstrdup(buf);
@@ -1419,7 +1421,7 @@ port_open_helper(Channel *c, char *rtype)
1419 } else { 1421 } else {
1420 /* listen address, port */ 1422 /* listen address, port */
1421 packet_put_cstring(c->path); 1423 packet_put_cstring(c->path);
1422 packet_put_int(c->listening_port); 1424 packet_put_int(local_port);
1423 } 1425 }
1424 /* originator host and port */ 1426 /* originator host and port */
1425 packet_put_cstring(remote_ipaddr); 1427 packet_put_cstring(remote_ipaddr);
@@ -1436,6 +1438,7 @@ port_open_helper(Channel *c, char *rtype)
1436 packet_send(); 1438 packet_send();
1437 } 1439 }
1438 free(remote_ipaddr); 1440 free(remote_ipaddr);
1441 free(local_ipaddr);
1439} 1442}
1440 1443
1441static void 1444static void