Merge branch '1.10' into 1.11

Conflicts:
	NEWS
This commit is contained in:
Jeff Forcier 2014-01-08 13:43:03 -08:00
commit b352357efb
3 changed files with 46 additions and 3 deletions

14
NEWS
View File

@ -12,6 +12,20 @@ Issues noted as "Fabric #NN" can be found at https://github.com/fabric/fabric/.
Releases 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) v1.11.2 (27th Sep 2013)
----------------------- -----------------------

View File

@ -189,8 +189,8 @@ class SSHClient (object):
# update local host keys from file (in case other SSH clients # update local host keys from file (in case other SSH clients
# have written to the known_hosts file meanwhile. # have written to the known_hosts file meanwhile.
if self.known_hosts is not None: if self._host_keys_filename is not None:
self.load_host_keys(self.known_hosts) self.load_host_keys(self._host_keys_filename)
f = open(filename, 'w') f = open(filename, 'w')
for hostname, keys in self._host_keys.iteritems(): for hostname, keys in self._host_keys.iteritems():

View File

@ -20,11 +20,14 @@
Some unit tests for SSHClient. Some unit tests for SSHClient.
""" """
from __future__ import with_statement # Python 2.5 support
import socket import socket
import threading import threading
import time import time
import unittest import unittest
import weakref import weakref
import warnings
import os
from binascii import hexlify from binascii import hexlify
import paramiko import paramiko
@ -184,7 +187,33 @@ class SSHClientTest (unittest.TestCase):
self.assertEquals(1, len(self.tc.get_host_keys())) 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']) 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 verify that when an SSHClient is collected, its transport (and the
transport's packetizer) is closed. transport's packetizer) is closed.