go.crypto/ssh: fix test breakages introduced by 125:40246d2ae2eb

* Remove special handling for dynamically allocated
  ports. This was a bug in OpenSSH 5.x sshd.

* Run the test with a preselected port number.

* Run TestPortForward only on unix platforms.

R=dave, agl
CC=golang-dev
https://golang.org/cl/10049045
This commit is contained in:
Han-Wen Nienhuys
2013-06-18 12:43:42 -04:00
committed by Adam Langley
parent b9b3892677
commit 7cbb17fecb
2 changed files with 35 additions and 20 deletions
+12 -18
View File
@@ -48,15 +48,8 @@ func (c *ClientConn) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) {
return nil, err
}
// Register this forward, using the port number we requested.
// If we requested port 0 (auto allocated port), we have to
// register under 0, since the channelOpenMsg will list 0
// rather than the allocated port number.
ch := c.forwardList.add(*laddr)
// If the original port was 0, then the remote side will
// supply a real port number in the response.
origPort := uint32(laddr.Port)
if laddr.Port == 0 {
port, _, ok := parseUint32(resp.Data)
if !ok {
@@ -65,7 +58,14 @@ func (c *ClientConn) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) {
laddr.Port = int(port)
}
return &tcpListener{laddr, origPort, c, ch}, nil
// Register this forward, using the port number we obtained.
//
// This does not work on OpenSSH < 6.0, which will send a
// channelOpenMsg with port number 0, rather than the actual
// port number.
ch := c.forwardList.add(*laddr)
return &tcpListener{laddr, c, ch}, nil
}
// forwardList stores a mapping between remote
@@ -126,10 +126,8 @@ func (l *forwardList) lookup(addr net.TCPAddr) (chan forward, bool) {
type tcpListener struct {
laddr *net.TCPAddr
// The port with which we made the request, which can be 0.
origPort uint32
conn *ClientConn
in <-chan forward
conn *ClientConn
in <-chan forward
}
// Accept waits for and returns the next connection to the listener.
@@ -155,13 +153,9 @@ func (l *tcpListener) Close() error {
"cancel-tcpip-forward",
true,
l.laddr.IP.String(),
l.origPort,
uint32(l.laddr.Port),
}
origAddr := net.TCPAddr{
IP: l.laddr.IP,
Port: int(l.origPort),
}
l.conn.forwardList.remove(origAddr)
l.conn.forwardList.remove(*l.laddr)
if _, err := l.conn.sendGlobalRequest(m); err != nil {
return err
}