summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJeff Forcier <jeff@bitprophet.org>2013-09-20 14:47:09 -0700
committerJeff Forcier <jeff@bitprophet.org>2013-09-20 14:47:09 -0700
commite2aa7c17b0d7938dbff1eb35cd09af25a92e5ab3 (patch)
tree7e7d8162cc79b24375c1b0578e4b7842058bce97
parent081b04116be29072695a54e52e74ca9879bf03f9 (diff)
parentdb9dfebca801efbfd3743d85d4f7916f3996f4f5 (diff)
Merge branch '1.10' into 1.11
Conflicts: NEWS
-rw-r--r--NEWS4
-rw-r--r--demos/forward.py4
-rw-r--r--paramiko/config.py9
3 files changed, 12 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index 1c59a935..43d3af5a 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,10 @@ v1.10.3 (20th Sep 2013)
* #162: Clean up HMAC module import to avoid deadlocks in certain uses of
SSHClient. Thanks to Gernot Hillier for the catch & suggested
fix.
+* #36: Fix the port-forwarding demo to avoid file descriptor errors. Thanks to
+ Jonathan Halcrow for catch & patch.
+* #168: Update config handling to properly handle multiple 'localforward' and
+ 'remoteforward' keys. Thanks to Emre Yılmaz for the patch.
v1.11.0 (26th Jul 2013)
-----------------------
diff --git a/demos/forward.py b/demos/forward.py
index 4e107855..2a4c4248 100644
--- a/demos/forward.py
+++ b/demos/forward.py
@@ -78,9 +78,11 @@ class Handler (SocketServer.BaseRequestHandler):
if len(data) == 0:
break
self.request.send(data)
+
+ peername = self.request.getpeername()
chan.close()
self.request.close()
- verbose('Tunnel closed from %r' % (self.request.getpeername(),))
+ verbose('Tunnel closed from %r' % (peername,))
def forward_tunnel(local_port, remote_host, remote_port, transport):
diff --git a/paramiko/config.py b/paramiko/config.py
index 31caf29e..b0be1a8e 100644
--- a/paramiko/config.py
+++ b/paramiko/config.py
@@ -126,14 +126,15 @@ class SSHConfig (object):
self._config.append(host)
value = value.split()
host = {key: value, 'config': {}}
- #identityfile is a special case, since it is allowed to be
+ #identityfile, localforward, remoteforward keys are special cases, since they are allowed to be
# specified multiple times and they should be tried in order
# of specification.
- elif key == 'identityfile':
+
+ elif key in ['identityfile', 'localforward', 'remoteforward']:
if key in host['config']:
- host['config']['identityfile'].append(value)
+ host['config'][key].append(value)
else:
- host['config']['identityfile'] = [value]
+ host['config'][key] = [value]
elif key not in host['config']:
host['config'].update({key: value})
self._config.append(host)