Skip to content

Commit

Permalink
Merge branch '2.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
bitprophet committed Feb 21, 2017
2 parents 281e1f1 + dd66e4d commit f1ce6e2
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
12 changes: 11 additions & 1 deletion paramiko/rsakey.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

from paramiko.message import Message
from paramiko.pkey import PKey
from paramiko.py3compat import PY2
from paramiko.ssh_exception import SSHException


Expand Down Expand Up @@ -76,7 +77,16 @@ def asbytes(self):
return m.asbytes()

def __str__(self):
return self.asbytes()
# NOTE: as per inane commentary in #853, this appears to be the least
# crummy way to get a representation that prints identical to Python
# 2's previous behavior, on both interpreters.
# TODO: replace with a nice clean fingerprint display or something
if PY2:
# Can't just return the .decode below for Py2 because stuff still
# tries stuffing it into ASCII for whatever godforsaken reason
return self.asbytes()
else:
return self.asbytes().decode('utf8', errors='ignore')

def __hash__(self):
h = hash(self.get_name())
Expand Down
3 changes: 3 additions & 0 deletions sites/www/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
Changelog
=========

* :bug:`853 (1.17+)` Tweak how `RSAKey.__str__ <paramiko.rsakey.RSAKey>`
behaves so it doesn't cause ``TypeError`` under Python 3. Thanks to Francisco
Couzo for the report.
* :bug:`862 (1.17+)` (via :issue:`863`) Avoid test suite exceptions on
platforms lacking ``errno.ETIME`` (which seems to be some FreeBSD and some
Windows environments.) Thanks to Sofian Brabez.
Expand Down
11 changes: 10 additions & 1 deletion tests/test_pkey.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2003-2009 Robey Pointer <[email protected]>
#
# This file is part of paramiko.
Expand Down Expand Up @@ -27,7 +28,7 @@
import base64

from paramiko import RSAKey, DSSKey, ECDSAKey, Message, util
from paramiko.py3compat import StringIO, byte_chr, b, bytes
from paramiko.py3compat import StringIO, byte_chr, b, bytes, PY2

from tests.util import test_path

Expand Down Expand Up @@ -107,6 +108,9 @@

x1234 = b'\x01\x02\x03\x04'

TEST_KEY_BYTESTR_2 = '\x00\x00\x00\x07ssh-rsa\x00\x00\x00\x01#\x00\x00\x00\x81\x00\xd3\x8fV\xea\x07\x85\xa6k%\x8d<\x1f\xbc\x8dT\x98\xa5\x96$\xf3E#\xbe>\xbc\xd2\x93\x93\x87f\xceD\x18\xdb \x0c\xb3\xa1a\x96\xf8e#\xcc\xacS\x8a#\xefVlE\x83\x1epv\xc1o\x17M\xef\xdf\x89DUXL\xa6\x8b\xaa<\x06\x10\xd7\x93w\xec\xaf\xe2\xaf\x95\xd8\xfb\xd9\xbfw\xcb\x9f0)#y{\x10\x90\xaa\x85l\tPru\x8c\t\x19\xce\xa0\xf1\xd2\xdc\x8e/\x8b\xa8f\x9c0\xdey\x84\xd2F\xf7\xcbmm\x1f\x87'
TEST_KEY_BYTESTR_3 = '\x00\x00\x00\x07ssh-rsa\x00\x00\x00\x01#\x00\x00\x00\x00ӏV\x07k%<\x1fT$E#>ғfD\x18 \x0cae#̬S#VlE\x1epvo\x17M߉DUXL<\x06\x10דw\u2bd5ٿw˟0)#y{\x10l\tPru\t\x19Π\u070e/f0yFmm\x1f'


class KeyTest (unittest.TestCase):

Expand Down Expand Up @@ -427,3 +431,8 @@ def test_salt_size(self):
self.assertEqual(key, key2)
finally:
os.remove(newfile)

def test_stringification(self):
key = RSAKey.from_private_key_file(test_path('test_rsa.key'))
comparable = TEST_KEY_BYTESTR_2 if PY2 else TEST_KEY_BYTESTR_3
self.assertEqual(str(key), comparable)

0 comments on commit f1ce6e2

Please sign in to comment.