# Authors: # Jan Cholasta # # Copyright (C) 2011 Red Hat # see file 'COPYING' for use and warranty information # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ Test the `ipapython/ssh.py` module. """ import base64 import six import pytest from ipapython import ssh if six.PY3: unicode = str pytestmark = pytest.mark.tier0 b64 = 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDGAX3xAeLeaJggwTqMjxNwa6XHBUAikXPGMzEpVrlLDCZtv00djsFTBi38PkgxBJVkgRWMrcBsr/35lq7P6w8KGIwA8GI48Z0qBS2NBMJ2u9WQ2hjLN6GdMlo77O0uJY3251p12pCVIS/bHRSq8kHO2No8g7KA9fGGcagPfQH+ee3t7HUkpbQkFTmbPPN++r3V8oVUk5LxbryB3UIIVzNmcSIn3JrXynlvui4MixvrtX6zx+O/bBo68o8/eZD26QrahVbA09fivrn/4h3TM019Eu/c2jOdckfU3cHUV/3Tno5d6JicibyaoDDK7S/yjdn5jhaz8MSEayQvFkZkiF0L' raw = base64.b64decode(b64) openssh = 'ssh-rsa %s' % b64 @pytest.mark.parametrize("pk,out", [ (b'\xff', UnicodeDecodeError), (u'\xff', ValueError), (raw, openssh), (b'\0\0\0\x04none', u'none AAAABG5vbmU='), (b'\0\0\0', ValueError), (b'\0\0\0\0', ValueError), (b'\0\0\0\x01', ValueError), (b'\0\0\0\x01\xff', ValueError), (u'\0\0\0\x04none', ValueError), (u'\0\0\0', ValueError), (u'\0\0\0\0', ValueError), (u'\0\0\0\x01', ValueError), (u'\0\0\0\x01\xff', ValueError), (b64, openssh), (unicode(b64), openssh), (b64.encode('ascii'), openssh), (u'\n%s\n\n' % b64, openssh), (u'AAAABG5vbmU=', u'none AAAABG5vbmU='), (u'AAAAB', ValueError), (openssh, openssh), (unicode(openssh), openssh), (openssh.encode('ascii'), openssh), (u'none AAAABG5vbmU=', u'none AAAABG5vbmU='), (u'\t \t ssh-rsa \t \t%s\t \tthis is a comment\t \t ' % b64, u'%s this is a comment' % openssh), (u'opt3,opt2="\tx ",opt1,opt2="\\"x " %s comment ' % openssh, u'opt1,opt2="\\"x ",opt3 %s comment' % openssh), (u'permitopen=\"1.1.1.1:111\",permitopen=\"2.2.2.2:222\" %s' % openssh, u'permitopen=\"1.1.1.1:111\",permitopen=\"2.2.2.2:222\" %s' % openssh), (u'permitlisten=\"1.1.1.1:111\",permitlisten=\"2.2.2.2:222\" %s' % openssh, u'permitlisten=\"1.1.1.1:111\",permitlisten=\"2.2.2.2:222\" %s' % openssh), (u'ssh-rsa\n%s' % b64, ValueError), (u'ssh-rsa\t%s' % b64, ValueError), (u'vanitas %s' % b64, ValueError), (u'@opt %s' % openssh, ValueError), (u'opt=val %s' % openssh, ValueError), (u'opt, %s' % openssh, ValueError)], # ids=repr is workaround for pytest issue with NULL bytes, # see https://github.com/pytest-dev/pytest/issues/2644 ids=repr ) def test_public_key_parsing(pk, out): if isinstance(out, type) and issubclass(out, Exception): pytest.raises(out, ssh.SSHPublicKey, pk) else: parsed = ssh.SSHPublicKey(pk) assert parsed.openssh() == out