summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--NEWS14
-rw-r--r--paramiko/client.py4
-rw-r--r--tests/test_client.py31
3 files changed, 46 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 1a64bebf..724d05fd 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,20 @@ Issues noted as "Fabric #NN" can be found at https://github.com/fabric/fabric/.
Releases
========
+v1.11.3 (8th Jan 2014)
+----------------------
+
+* #176: Fix AttributeError bugs in known_hosts file (re)loading. Thanks to
+ Nathan Scowcroft for the patch & Martin Blumenstingl for the initial test
+ case.
+
+v1.10.5 (8th Jan 2014)
+----------------------
+
+* #176: Fix AttributeError bugs in known_hosts file (re)loading. Thanks to
+ Nathan Scowcroft for the patch & Martin Blumenstingl for the initial test
+ case.
+
v1.11.2 (27th Sep 2013)
-----------------------
diff --git a/paramiko/client.py b/paramiko/client.py
index c5a2d1ac..be896091 100644
--- a/paramiko/client.py
+++ b/paramiko/client.py
@@ -189,8 +189,8 @@ class SSHClient (object):
# update local host keys from file (in case other SSH clients
# have written to the known_hosts file meanwhile.
- if self.known_hosts is not None:
- self.load_host_keys(self.known_hosts)
+ if self._host_keys_filename is not None:
+ self.load_host_keys(self._host_keys_filename)
f = open(filename, 'w')
for hostname, keys in self._host_keys.iteritems():
diff --git a/tests/test_client.py b/tests/test_client.py
index e5352278..fae1d329 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -20,11 +20,14 @@
Some unit tests for SSHClient.
"""
+from __future__ import with_statement # Python 2.5 support
import socket
import threading
import time
import unittest
import weakref
+import warnings
+import os
from binascii import hexlify
import paramiko
@@ -184,7 +187,33 @@ class SSHClientTest (unittest.TestCase):
self.assertEquals(1, len(self.tc.get_host_keys()))
self.assertEquals(public_host_key, self.tc.get_host_keys()['[%s]:%d' % (self.addr, self.port)]['ssh-rsa'])
- def test_5_cleanup(self):
+ def test_5_save_host_keys(self):
+ """
+ verify that SSHClient correctly saves a known_hosts file.
+ """
+ warnings.filterwarnings('ignore', 'tempnam.*')
+
+ host_key = paramiko.RSAKey.from_private_key_file('tests/test_rsa.key')
+ public_host_key = paramiko.RSAKey(data=str(host_key))
+ localname = os.tempnam()
+
+ client = paramiko.SSHClient()
+ self.assertEquals(0, len(client.get_host_keys()))
+
+ host_id = '[%s]:%d' % (self.addr, self.port)
+
+ client.get_host_keys().add(host_id, 'ssh-rsa', public_host_key)
+ self.assertEquals(1, len(client.get_host_keys()))
+ self.assertEquals(public_host_key, client.get_host_keys()[host_id]['ssh-rsa'])
+
+ client.save_host_keys(localname)
+
+ with open(localname) as fd:
+ assert host_id in fd.read()
+
+ os.unlink(localname)
+
+ def test_6_cleanup(self):
"""
verify that when an SSHClient is collected, its transport (and the
transport's packetizer) is closed.