security/py-ssh: Remove obsoleted port
Use security/py-paramiko instead. This library originated as a fork of the Paramiko library, and has now been merged back into it. Approved by: lwhsu (maintainer)
This commit is contained in:
parent
cf6077d62f
commit
6f7516452e
7 changed files with 1 additions and 980 deletions
1
MOVED
1
MOVED
|
@ -17139,3 +17139,4 @@ math/py-gmpy2-devel|math/py-gmpy2|2022-04-22|No more need for the -devel port, p
|
|||
net/google-cloud-sdk-app-engine-go||2022-04-27|Obsolete, not supported by the current GCP SDK
|
||||
www/py-dj32-django-modelcluster|www/py-django-modelcluster|2022-04-30|Remove obsoleted port. Use www/py-django-modelcluster instead
|
||||
www/rubygem-rack-proxy06|www/rubygem-rack-proxy|2022-04-30|Remove obsoleted port. Use www/rubygem-rack-proxy instead
|
||||
security/py-ssh|security/py-paramiko|2022-04-30|Remove obsoleted port. Use security/py-paramiko instead
|
||||
|
|
|
@ -973,7 +973,6 @@
|
|||
SUBDIR += py-signedjson
|
||||
SUBDIR += py-social-auth-core
|
||||
SUBDIR += py-spake2
|
||||
SUBDIR += py-ssh
|
||||
SUBDIR += py-ssh-audit
|
||||
SUBDIR += py-sshpubkeys
|
||||
SUBDIR += py-stem
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
# Created by: Li-Wen Hsu <lwhsu@FreeBSD.org>
|
||||
|
||||
PORTNAME= ssh
|
||||
PORTVERSION= 1.8.0
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= security python
|
||||
MASTER_SITES= CHEESESHOP
|
||||
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
|
||||
|
||||
MAINTAINER= lwhsu@FreeBSD.org
|
||||
COMMENT= Python SSH2 protocol library
|
||||
|
||||
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pycrypto>=2.1:security/py-pycrypto@${PY_FLAVOR}
|
||||
|
||||
USES= python:3.6+
|
||||
USE_PYTHON= distutils autoplist
|
||||
|
||||
NO_ARCH= yes
|
||||
|
||||
.include <bsd.port.mk>
|
|
@ -1,2 +0,0 @@
|
|||
SHA256 (ssh-1.8.0.tar.gz) = b0aca1faf8a12e6aae24ab9cfae90d061a8741b680c8afad21da6ff8b8ae28d7
|
||||
SIZE (ssh-1.8.0.tar.gz) = 795832
|
|
@ -1,941 +0,0 @@
|
|||
--- ssh/auth_handler.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/auth_handler.py
|
||||
@@ -198,7 +198,7 @@ class AuthHandler (object):
|
||||
if self.auth_method == 'password':
|
||||
m.add_boolean(False)
|
||||
password = self.password
|
||||
- if isinstance(password, unicode):
|
||||
+ if isinstance(password, str):
|
||||
password = password.encode('UTF-8')
|
||||
m.add_string(password)
|
||||
elif self.auth_method == 'publickey':
|
||||
@@ -308,7 +308,7 @@ class AuthHandler (object):
|
||||
keyblob = m.get_string()
|
||||
try:
|
||||
key = self.transport._key_info[keytype](Message(keyblob))
|
||||
- except SSHException, e:
|
||||
+ except SSHException as e:
|
||||
self.transport._log(INFO, 'Auth rejected: public key: %s' % str(e))
|
||||
key = None
|
||||
except:
|
||||
--- ssh/channel.py.orig 2012-05-05 04:45:50 UTC
|
||||
+++ ssh/channel.py
|
||||
@@ -607,7 +607,7 @@ class Channel (object):
|
||||
"""
|
||||
try:
|
||||
out = self.in_buffer.read(nbytes, self.timeout)
|
||||
- except PipeTimeout, e:
|
||||
+ except PipeTimeout as e:
|
||||
raise socket.timeout()
|
||||
|
||||
ack = self._check_add_window(len(out))
|
||||
@@ -657,7 +657,7 @@ class Channel (object):
|
||||
"""
|
||||
try:
|
||||
out = self.in_stderr_buffer.read(nbytes, self.timeout)
|
||||
- except PipeTimeout, e:
|
||||
+ except PipeTimeout as e:
|
||||
raise socket.timeout()
|
||||
|
||||
ack = self._check_add_window(len(out))
|
||||
--- ssh/client.py.orig 2012-09-10 18:40:40 UTC
|
||||
+++ ssh/client.py
|
||||
@@ -189,8 +189,8 @@ class SSHClient (object):
|
||||
"""
|
||||
f = open(filename, 'w')
|
||||
f.write('# SSH host keys collected by ssh\n')
|
||||
- for hostname, keys in self._host_keys.iteritems():
|
||||
- for keytype, key in keys.iteritems():
|
||||
+ for hostname, keys in self._host_keys.items():
|
||||
+ for keytype, key in keys.items():
|
||||
f.write('%s %s %s\n' % (hostname, keytype, key.get_base64()))
|
||||
f.close()
|
||||
|
||||
@@ -326,7 +326,7 @@ class SSHClient (object):
|
||||
|
||||
if key_filename is None:
|
||||
key_filenames = []
|
||||
- elif isinstance(key_filename, (str, unicode)):
|
||||
+ elif isinstance(key_filename, str):
|
||||
key_filenames = [ key_filename ]
|
||||
else:
|
||||
key_filenames = key_filename
|
||||
@@ -434,7 +434,7 @@ class SSHClient (object):
|
||||
two_factor = (allowed_types == ['password'])
|
||||
if not two_factor:
|
||||
return
|
||||
- except SSHException, e:
|
||||
+ except SSHException as e:
|
||||
saved_exception = e
|
||||
|
||||
if not two_factor:
|
||||
@@ -448,7 +448,7 @@ class SSHClient (object):
|
||||
if not two_factor:
|
||||
return
|
||||
break
|
||||
- except SSHException, e:
|
||||
+ except SSHException as e:
|
||||
saved_exception = e
|
||||
|
||||
if not two_factor and allow_agent:
|
||||
@@ -464,7 +464,7 @@ class SSHClient (object):
|
||||
if not two_factor:
|
||||
return
|
||||
break
|
||||
- except SSHException, e:
|
||||
+ except SSHException as e:
|
||||
saved_exception = e
|
||||
|
||||
if not two_factor:
|
||||
@@ -496,16 +496,16 @@ class SSHClient (object):
|
||||
if not two_factor:
|
||||
return
|
||||
break
|
||||
- except SSHException, e:
|
||||
+ except SSHException as e:
|
||||
saved_exception = e
|
||||
- except IOError, e:
|
||||
+ except IOError as e:
|
||||
saved_exception = e
|
||||
|
||||
if password is not None:
|
||||
try:
|
||||
self._transport.auth_password(username, password)
|
||||
return
|
||||
- except SSHException, e:
|
||||
+ except SSHException as e:
|
||||
saved_exception = e
|
||||
elif two_factor:
|
||||
raise SSHException('Two-factor authentication requires a password')
|
||||
--- ssh/dsskey.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/dsskey.py
|
||||
@@ -93,7 +93,7 @@ class DSSKey (PKey):
|
||||
|
||||
def sign_ssh_data(self, rng, data):
|
||||
digest = SHA.new(data).digest()
|
||||
- dss = DSA.construct((long(self.y), long(self.g), long(self.p), long(self.q), long(self.x)))
|
||||
+ dss = DSA.construct((int(self.y), int(self.g), int(self.p), int(self.q), int(self.x)))
|
||||
# generate a suitable k
|
||||
qsize = len(util.deflate_long(self.q, 0))
|
||||
while True:
|
||||
@@ -128,7 +128,7 @@ class DSSKey (PKey):
|
||||
sigS = util.inflate_long(sig[20:], 1)
|
||||
sigM = util.inflate_long(SHA.new(data).digest(), 1)
|
||||
|
||||
- dss = DSA.construct((long(self.y), long(self.g), long(self.p), long(self.q)))
|
||||
+ dss = DSA.construct((int(self.y), int(self.g), int(self.p), int(self.q)))
|
||||
return dss.verify(sigM, (sigR, sigS))
|
||||
|
||||
def _encode_key(self):
|
||||
@@ -184,7 +184,7 @@ class DSSKey (PKey):
|
||||
# DSAPrivateKey = { version = 0, p, q, g, y, x }
|
||||
try:
|
||||
keylist = BER(data).decode()
|
||||
- except BERException, x:
|
||||
+ except BERException as x:
|
||||
raise SSHException('Unable to parse key file: ' + str(x))
|
||||
if (type(keylist) is not list) or (len(keylist) < 6) or (keylist[0] != 0):
|
||||
raise SSHException('not a valid DSA private key file (bad ber encoding)')
|
||||
--- ssh/hostkeys.py.orig 2012-07-15 23:45:13 UTC
|
||||
+++ ssh/hostkeys.py
|
||||
@@ -79,7 +79,7 @@ class HostKeyEntry:
|
||||
key = DSSKey(data=base64.decodestring(key))
|
||||
else:
|
||||
return None
|
||||
- except binascii.Error, e:
|
||||
+ except binascii.Error as e:
|
||||
raise InvalidHostKey(line, e)
|
||||
|
||||
return cls(names, key)
|
||||
@@ -277,7 +277,7 @@ class HostKeys (UserDict.DictMixin):
|
||||
if len(entry) == 0:
|
||||
self._entries.append(HostKeyEntry([hostname], None))
|
||||
return
|
||||
- for key_type in entry.keys():
|
||||
+ for key_type in list(entry.keys()):
|
||||
found = False
|
||||
for e in self._entries:
|
||||
if (hostname in e.hostnames) and (e.key.get_name() == key_type):
|
||||
@@ -298,7 +298,7 @@ class HostKeys (UserDict.DictMixin):
|
||||
|
||||
def values(self):
|
||||
ret = []
|
||||
- for k in self.keys():
|
||||
+ for k in list(self.keys()):
|
||||
ret.append(self.lookup(k))
|
||||
return ret
|
||||
|
||||
--- ssh/kex_group1.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/kex_group1.py
|
||||
@@ -29,10 +29,10 @@ from ssh.message import Message
|
||||
from ssh.ssh_exception import SSHException
|
||||
|
||||
|
||||
-_MSG_KEXDH_INIT, _MSG_KEXDH_REPLY = range(30, 32)
|
||||
+_MSG_KEXDH_INIT, _MSG_KEXDH_REPLY = list(range(30, 32))
|
||||
|
||||
# draft-ietf-secsh-transport-09.txt, page 17
|
||||
-P = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFFL
|
||||
+P = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF
|
||||
G = 2
|
||||
|
||||
|
||||
@@ -42,9 +42,9 @@ class KexGroup1(object):
|
||||
|
||||
def __init__(self, transport):
|
||||
self.transport = transport
|
||||
- self.x = 0L
|
||||
- self.e = 0L
|
||||
- self.f = 0L
|
||||
+ self.x = 0
|
||||
+ self.e = 0
|
||||
+ self.f = 0
|
||||
|
||||
def start_kex(self):
|
||||
self._generate_x()
|
||||
--- ssh/message.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/message.py
|
||||
@@ -21,7 +21,7 @@ Implementation of an SSH2 "message".
|
||||
"""
|
||||
|
||||
import struct
|
||||
-import cStringIO
|
||||
+import io
|
||||
|
||||
from ssh import util
|
||||
|
||||
@@ -46,9 +46,9 @@ class Message (object):
|
||||
@type content: string
|
||||
"""
|
||||
if content != None:
|
||||
- self.packet = cStringIO.StringIO(content)
|
||||
+ self.packet = io.StringIO(content)
|
||||
else:
|
||||
- self.packet = cStringIO.StringIO()
|
||||
+ self.packet = io.StringIO()
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
@@ -275,8 +275,8 @@ class Message (object):
|
||||
return self.add_string(i)
|
||||
elif type(i) is int:
|
||||
return self.add_int(i)
|
||||
- elif type(i) is long:
|
||||
- if i > 0xffffffffL:
|
||||
+ elif type(i) is int:
|
||||
+ if i > 0xffffffff:
|
||||
return self.add_mpint(i)
|
||||
else:
|
||||
return self.add_int(i)
|
||||
--- ssh/packet.py.orig 2012-09-10 18:40:40 UTC
|
||||
+++ ssh/packet.py
|
||||
@@ -93,8 +93,8 @@ class Packetizer (object):
|
||||
self.__mac_key_in = ''
|
||||
self.__compress_engine_out = None
|
||||
self.__compress_engine_in = None
|
||||
- self.__sequence_number_out = 0L
|
||||
- self.__sequence_number_in = 0L
|
||||
+ self.__sequence_number_out = 0
|
||||
+ self.__sequence_number_in = 0
|
||||
|
||||
# lock around outbound writes (packet computation)
|
||||
self.__write_lock = threading.RLock()
|
||||
@@ -217,7 +217,7 @@ class Packetizer (object):
|
||||
n -= len(x)
|
||||
except socket.timeout:
|
||||
got_timeout = True
|
||||
- except socket.error, e:
|
||||
+ except socket.error as e:
|
||||
# on Linux, sometimes instead of socket.timeout, we get
|
||||
# EAGAIN. this is a bug in recent (> 2.6.9) kernels but
|
||||
# we need to work around it.
|
||||
@@ -246,7 +246,7 @@ class Packetizer (object):
|
||||
n = self.__socket.send(out)
|
||||
except socket.timeout:
|
||||
retry_write = True
|
||||
- except socket.error, e:
|
||||
+ except socket.error as e:
|
||||
if (type(e.args) is tuple) and (len(e.args) > 0) and (e.args[0] == errno.EAGAIN):
|
||||
retry_write = True
|
||||
elif (type(e.args) is tuple) and (len(e.args) > 0) and (e.args[0] == errno.EINTR):
|
||||
@@ -311,7 +311,7 @@ class Packetizer (object):
|
||||
if self.__block_engine_out != None:
|
||||
payload = struct.pack('>I', self.__sequence_number_out) + packet
|
||||
out += compute_hmac(self.__mac_key_out, payload, self.__mac_engine_out)[:self.__mac_size_out]
|
||||
- self.__sequence_number_out = (self.__sequence_number_out + 1) & 0xffffffffL
|
||||
+ self.__sequence_number_out = (self.__sequence_number_out + 1) & 0xffffffff
|
||||
self.write_all(out)
|
||||
|
||||
self.__sent_bytes += len(out)
|
||||
@@ -371,7 +371,7 @@ class Packetizer (object):
|
||||
|
||||
msg = Message(payload[1:])
|
||||
msg.seqno = self.__sequence_number_in
|
||||
- self.__sequence_number_in = (self.__sequence_number_in + 1) & 0xffffffffL
|
||||
+ self.__sequence_number_in = (self.__sequence_number_in + 1) & 0xffffffff
|
||||
|
||||
# check for rekey
|
||||
raw_packet_size = packet_size + self.__mac_size_in + 4
|
||||
@@ -469,7 +469,7 @@ class Packetizer (object):
|
||||
break
|
||||
except socket.timeout:
|
||||
pass
|
||||
- except EnvironmentError, e:
|
||||
+ except EnvironmentError as e:
|
||||
if ((type(e.args) is tuple) and (len(e.args) > 0) and
|
||||
(e.args[0] == errno.EINTR)):
|
||||
pass
|
||||
--- ssh/pkey.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/pkey.py
|
||||
@@ -304,7 +304,7 @@ class PKey (object):
|
||||
# if we trudged to the end of the file, just try to cope.
|
||||
try:
|
||||
data = base64.decodestring(''.join(lines[start:end]))
|
||||
- except base64.binascii.Error, e:
|
||||
+ except base64.binascii.Error as e:
|
||||
raise SSHException('base64 decoding error: ' + str(e))
|
||||
if 'proc-type' not in headers:
|
||||
# unencryped: done
|
||||
@@ -346,9 +346,9 @@ class PKey (object):
|
||||
|
||||
@raise IOError: if there was an error writing the file.
|
||||
"""
|
||||
- f = open(filename, 'w', 0600)
|
||||
+ f = open(filename, 'w', 0o600)
|
||||
# grrr... the mode doesn't always take hold
|
||||
- os.chmod(filename, 0600)
|
||||
+ os.chmod(filename, 0o600)
|
||||
self._write_private_key(tag, f, data, password)
|
||||
f.close()
|
||||
|
||||
@@ -356,7 +356,7 @@ class PKey (object):
|
||||
f.write('-----BEGIN %s PRIVATE KEY-----\n' % tag)
|
||||
if password is not None:
|
||||
# since we only support one cipher here, use it
|
||||
- cipher_name = self._CIPHER_TABLE.keys()[0]
|
||||
+ cipher_name = list(self._CIPHER_TABLE.keys())[0]
|
||||
cipher = self._CIPHER_TABLE[cipher_name]['cipher']
|
||||
keysize = self._CIPHER_TABLE[cipher_name]['keysize']
|
||||
blocksize = self._CIPHER_TABLE[cipher_name]['blocksize']
|
||||
--- ssh/server.py.orig 2012-05-06 22:10:09 UTC
|
||||
+++ ssh/server.py
|
||||
@@ -48,7 +48,7 @@ class InteractiveQuery (object):
|
||||
self.instructions = instructions
|
||||
self.prompts = []
|
||||
for x in prompts:
|
||||
- if (type(x) is str) or (type(x) is unicode):
|
||||
+ if (type(x) is str) or (type(x) is str):
|
||||
self.add_prompt(x)
|
||||
else:
|
||||
self.add_prompt(x[0], x[1])
|
||||
@@ -602,7 +602,7 @@ class SubsystemHandler (threading.Thread):
|
||||
try:
|
||||
self.__transport._log(DEBUG, 'Starting handler for subsystem %s' % self.__name)
|
||||
self.start_subsystem(self.__name, self.__transport, self.__channel)
|
||||
- except Exception, e:
|
||||
+ except Exception as e:
|
||||
self.__transport._log(ERROR, 'Exception in subsystem handler for "%s": %s' %
|
||||
(self.__name, str(e)))
|
||||
self.__transport._log(ERROR, util.tb_strings())
|
||||
--- ssh/sftp_attr.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/sftp_attr.py
|
||||
@@ -44,7 +44,7 @@ class SFTPAttributes (object):
|
||||
FLAG_UIDGID = 2
|
||||
FLAG_PERMISSIONS = 4
|
||||
FLAG_AMTIME = 8
|
||||
- FLAG_EXTENDED = 0x80000000L
|
||||
+ FLAG_EXTENDED = 0x80000000
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
@@ -139,11 +139,11 @@ class SFTPAttributes (object):
|
||||
msg.add_int(self.st_mode)
|
||||
if self._flags & self.FLAG_AMTIME:
|
||||
# throw away any fractional seconds
|
||||
- msg.add_int(long(self.st_atime))
|
||||
- msg.add_int(long(self.st_mtime))
|
||||
+ msg.add_int(int(self.st_atime))
|
||||
+ msg.add_int(int(self.st_mtime))
|
||||
if self._flags & self.FLAG_EXTENDED:
|
||||
msg.add_int(len(self.attr))
|
||||
- for key, val in self.attr.iteritems():
|
||||
+ for key, val in self.attr.items():
|
||||
msg.add_string(key)
|
||||
msg.add_string(val)
|
||||
return
|
||||
@@ -158,7 +158,7 @@ class SFTPAttributes (object):
|
||||
out += 'mode=' + oct(self.st_mode) + ' '
|
||||
if (self.st_atime is not None) and (self.st_mtime is not None):
|
||||
out += 'atime=%d mtime=%d ' % (self.st_atime, self.st_mtime)
|
||||
- for k, v in self.attr.iteritems():
|
||||
+ for k, v in self.attr.items():
|
||||
out += '"%s"=%r ' % (str(k), v)
|
||||
out += ']'
|
||||
return out
|
||||
@@ -194,13 +194,13 @@ class SFTPAttributes (object):
|
||||
ks = 's'
|
||||
else:
|
||||
ks = '?'
|
||||
- ks += self._rwx((self.st_mode & 0700) >> 6, self.st_mode & stat.S_ISUID)
|
||||
- ks += self._rwx((self.st_mode & 070) >> 3, self.st_mode & stat.S_ISGID)
|
||||
+ ks += self._rwx((self.st_mode & 0o700) >> 6, self.st_mode & stat.S_ISUID)
|
||||
+ ks += self._rwx((self.st_mode & 0o70) >> 3, self.st_mode & stat.S_ISGID)
|
||||
ks += self._rwx(self.st_mode & 7, self.st_mode & stat.S_ISVTX, True)
|
||||
else:
|
||||
ks = '?---------'
|
||||
# compute display date
|
||||
- if (self.st_mtime is None) or (self.st_mtime == 0xffffffffL):
|
||||
+ if (self.st_mtime is None) or (self.st_mtime == 0xffffffff):
|
||||
# shouldn't really happen
|
||||
datestr = '(unknown date)'
|
||||
else:
|
||||
--- ssh/sftp_client.py.orig 2012-08-29 17:56:54 UTC
|
||||
+++ ssh/sftp_client.py
|
||||
@@ -85,7 +85,7 @@ class SFTPClient (BaseSFTP):
|
||||
self.ultra_debug = transport.get_hexdump()
|
||||
try:
|
||||
server_version = self._send_version()
|
||||
- except EOFError, x:
|
||||
+ except EOFError as x:
|
||||
raise SSHException('EOF during negotiation')
|
||||
self._log(INFO, 'Opened sftp connection (server version %d)' % server_version)
|
||||
|
||||
@@ -178,7 +178,7 @@ class SFTPClient (BaseSFTP):
|
||||
while True:
|
||||
try:
|
||||
t, msg = self._request(CMD_READDIR, handle)
|
||||
- except EOFError, e:
|
||||
+ except EOFError as e:
|
||||
# done with handle
|
||||
break
|
||||
if t != CMD_NAME:
|
||||
@@ -285,7 +285,7 @@ class SFTPClient (BaseSFTP):
|
||||
self._log(DEBUG, 'rename(%r, %r)' % (oldpath, newpath))
|
||||
self._request(CMD_RENAME, oldpath, newpath)
|
||||
|
||||
- def mkdir(self, path, mode=0777):
|
||||
+ def mkdir(self, path, mode=0o777):
|
||||
"""
|
||||
Create a folder (directory) named C{path} with numeric mode C{mode}.
|
||||
The default mode is 0777 (octal). On some systems, mode is ignored.
|
||||
@@ -369,7 +369,7 @@ class SFTPClient (BaseSFTP):
|
||||
"""
|
||||
dest = self._adjust_cwd(dest)
|
||||
self._log(DEBUG, 'symlink(%r, %r)' % (source, dest))
|
||||
- if type(source) is unicode:
|
||||
+ if type(source) is str:
|
||||
source = source.encode('utf-8')
|
||||
self._request(CMD_SYMLINK, source, dest)
|
||||
|
||||
@@ -643,7 +643,7 @@ class SFTPClient (BaseSFTP):
|
||||
for item in arg:
|
||||
if isinstance(item, int):
|
||||
msg.add_int(item)
|
||||
- elif isinstance(item, long):
|
||||
+ elif isinstance(item, int):
|
||||
msg.add_int64(item)
|
||||
elif isinstance(item, str):
|
||||
msg.add_string(item)
|
||||
@@ -663,7 +663,7 @@ class SFTPClient (BaseSFTP):
|
||||
while True:
|
||||
try:
|
||||
t, data = self._read_packet()
|
||||
- except EOFError, e:
|
||||
+ except EOFError as e:
|
||||
raise SSHException('Server connection dropped: %s' % (str(e),))
|
||||
msg = Message(data)
|
||||
num = msg.get_int()
|
||||
@@ -689,7 +689,7 @@ class SFTPClient (BaseSFTP):
|
||||
return (None, None)
|
||||
|
||||
def _finish_responses(self, fileobj):
|
||||
- while fileobj in self._expecting.values():
|
||||
+ while fileobj in list(self._expecting.values()):
|
||||
self._read_response()
|
||||
fileobj._check_exception()
|
||||
|
||||
@@ -716,7 +716,7 @@ class SFTPClient (BaseSFTP):
|
||||
Return an adjusted path if we're emulating a "current working
|
||||
directory" for the server.
|
||||
"""
|
||||
- if type(path) is unicode:
|
||||
+ if type(path) is str:
|
||||
path = path.encode('utf-8')
|
||||
if self._cwd is None:
|
||||
return path
|
||||
--- ssh/sftp_file.py.orig 2012-08-29 17:56:54 UTC
|
||||
+++ ssh/sftp_file.py
|
||||
@@ -53,12 +53,12 @@ class SFTPFile (BufferedFile):
|
||||
self._saved_exception = None
|
||||
|
||||
def __del__(self):
|
||||
- self._close(async=True)
|
||||
+ self._close(asynchronous=True)
|
||||
|
||||
def close(self):
|
||||
- self._close(async=False)
|
||||
+ self._close(asynchronous=False)
|
||||
|
||||
- def _close(self, async=False):
|
||||
+ def _close(self, asynchronous=False):
|
||||
# We allow double-close without signaling an error, because real
|
||||
# Python file objects do. However, we must protect against actually
|
||||
# sending multiple CMD_CLOSE packets, because after we close our
|
||||
@@ -73,7 +73,7 @@ class SFTPFile (BufferedFile):
|
||||
self.sftp._finish_responses(self)
|
||||
BufferedFile.close(self)
|
||||
try:
|
||||
- if async:
|
||||
+ if asynchronous:
|
||||
# GC'd file handle could be called from an arbitrary thread -- don't wait for a response
|
||||
self.sftp._async_request(type(None), CMD_CLOSE, self.handle)
|
||||
else:
|
||||
@@ -107,7 +107,7 @@ class SFTPFile (BufferedFile):
|
||||
return None. this guarantees nothing about the number of bytes
|
||||
collected in the prefetch buffer so far.
|
||||
"""
|
||||
- k = [i for i in self._prefetch_data.keys() if i <= offset]
|
||||
+ k = [i for i in list(self._prefetch_data.keys()) if i <= offset]
|
||||
if len(k) == 0:
|
||||
return None
|
||||
index = max(k)
|
||||
@@ -152,7 +152,7 @@ class SFTPFile (BufferedFile):
|
||||
data = self._read_prefetch(size)
|
||||
if data is not None:
|
||||
return data
|
||||
- t, msg = self.sftp._request(CMD_READ, self.handle, long(self._realpos), int(size))
|
||||
+ t, msg = self.sftp._request(CMD_READ, self.handle, int(self._realpos), int(size))
|
||||
if t != CMD_DATA:
|
||||
raise SFTPError('Expected data')
|
||||
return msg.get_string()
|
||||
@@ -160,7 +160,7 @@ class SFTPFile (BufferedFile):
|
||||
def _write(self, data):
|
||||
# may write less than requested if it would exceed max packet size
|
||||
chunk = min(len(data), self.MAX_REQUEST_SIZE)
|
||||
- req = self.sftp._async_request(type(None), CMD_WRITE, self.handle, long(self._realpos), str(data[:chunk]))
|
||||
+ req = self.sftp._async_request(type(None), CMD_WRITE, self.handle, int(self._realpos), str(data[:chunk]))
|
||||
if not self.pipelined or self.sftp.sock.recv_ready():
|
||||
t, msg = self.sftp._read_response(req)
|
||||
if t != CMD_STATUS:
|
||||
@@ -340,7 +340,7 @@ class SFTPFile (BufferedFile):
|
||||
@since: 1.4
|
||||
"""
|
||||
t, msg = self.sftp._request(CMD_EXTENDED, 'check-file', self.handle,
|
||||
- hash_algorithm, long(offset), long(length), block_size)
|
||||
+ hash_algorithm, int(offset), int(length), block_size)
|
||||
ext = msg.get_string()
|
||||
alg = msg.get_string()
|
||||
data = msg.get_remainder()
|
||||
@@ -450,14 +450,14 @@ class SFTPFile (BufferedFile):
|
||||
# do these read requests in a temporary thread because there may be
|
||||
# a lot of them, so it may block.
|
||||
for offset, length in chunks:
|
||||
- self.sftp._async_request(self, CMD_READ, self.handle, long(offset), int(length))
|
||||
+ self.sftp._async_request(self, CMD_READ, self.handle, int(offset), int(length))
|
||||
|
||||
def _async_response(self, t, msg):
|
||||
if t == CMD_STATUS:
|
||||
# save exception and re-raise it on next file operation
|
||||
try:
|
||||
self.sftp._convert_status(msg)
|
||||
- except Exception, x:
|
||||
+ except Exception as x:
|
||||
self._saved_exception = x
|
||||
return
|
||||
if t != CMD_DATA:
|
||||
--- ssh/sftp_handle.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/sftp_handle.py
|
||||
@@ -100,7 +100,7 @@ class SFTPHandle (object):
|
||||
readfile.seek(offset)
|
||||
self.__tell = offset
|
||||
data = readfile.read(length)
|
||||
- except IOError, e:
|
||||
+ except IOError as e:
|
||||
self.__tell = None
|
||||
return SFTPServer.convert_errno(e.errno)
|
||||
self.__tell += len(data)
|
||||
@@ -139,7 +139,7 @@ class SFTPHandle (object):
|
||||
self.__tell = offset
|
||||
writefile.write(data)
|
||||
writefile.flush()
|
||||
- except IOError, e:
|
||||
+ except IOError as e:
|
||||
self.__tell = None
|
||||
return SFTPServer.convert_errno(e.errno)
|
||||
if self.__tell is not None:
|
||||
--- ssh/sftp_server.py.orig 2012-04-19 22:17:28 UTC
|
||||
+++ ssh/sftp_server.py
|
||||
@@ -92,7 +92,7 @@ class SFTPServer (BaseSFTP, SubsystemHandler):
|
||||
except EOFError:
|
||||
self._log(DEBUG, 'EOF -- end of session')
|
||||
return
|
||||
- except Exception, e:
|
||||
+ except Exception as e:
|
||||
self._log(DEBUG, 'Exception on channel: ' + str(e))
|
||||
self._log(DEBUG, util.tb_strings())
|
||||
return
|
||||
@@ -100,7 +100,7 @@ class SFTPServer (BaseSFTP, SubsystemHandler):
|
||||
request_number = msg.get_int()
|
||||
try:
|
||||
self._process(t, request_number, msg)
|
||||
- except Exception, e:
|
||||
+ except Exception as e:
|
||||
self._log(DEBUG, 'Exception in server processing: ' + str(e))
|
||||
self._log(DEBUG, util.tb_strings())
|
||||
# send some kind of failure message, at least
|
||||
@@ -113,9 +113,9 @@ class SFTPServer (BaseSFTP, SubsystemHandler):
|
||||
self.server.session_ended()
|
||||
super(SFTPServer, self).finish_subsystem()
|
||||
# close any file handles that were left open (so we can return them to the OS quickly)
|
||||
- for f in self.file_table.itervalues():
|
||||
+ for f in self.file_table.values():
|
||||
f.close()
|
||||
- for f in self.folder_table.itervalues():
|
||||
+ for f in self.folder_table.values():
|
||||
f.close()
|
||||
self.file_table = {}
|
||||
self.folder_table = {}
|
||||
@@ -179,7 +179,7 @@ class SFTPServer (BaseSFTP, SubsystemHandler):
|
||||
for item in arg:
|
||||
if type(item) is int:
|
||||
msg.add_int(item)
|
||||
- elif type(item) is long:
|
||||
+ elif type(item) is int:
|
||||
msg.add_int64(item)
|
||||
elif type(item) is str:
|
||||
msg.add_string(item)
|
||||
--- ssh/transport.py.orig 2012-09-13 23:42:52 UTC
|
||||
+++ ssh/transport.py
|
||||
@@ -110,8 +110,8 @@ class SecurityOptions (object):
|
||||
x = tuple(x)
|
||||
if type(x) is not tuple:
|
||||
raise TypeError('expected tuple or list')
|
||||
- possible = getattr(self._transport, orig).keys()
|
||||
- forbidden = filter(lambda n: n not in possible, x)
|
||||
+ possible = list(getattr(self._transport, orig).keys())
|
||||
+ forbidden = [n for n in x if n not in possible]
|
||||
if len(forbidden) > 0:
|
||||
raise ValueError('unknown cipher')
|
||||
setattr(self._transport, name, x)
|
||||
@@ -175,7 +175,7 @@ class ChannelMap (object):
|
||||
def values(self):
|
||||
self._lock.acquire()
|
||||
try:
|
||||
- return self._map.values()
|
||||
+ return list(self._map.values())
|
||||
finally:
|
||||
self._lock.release()
|
||||
|
||||
@@ -273,7 +273,7 @@ class Transport (threading.Thread):
|
||||
@param sock: a socket or socket-like object to create the session over.
|
||||
@type sock: socket
|
||||
"""
|
||||
- if isinstance(sock, (str, unicode)):
|
||||
+ if isinstance(sock, str):
|
||||
# convert "host:port" into (host, port)
|
||||
hl = sock.split(':', 1)
|
||||
if len(hl) == 1:
|
||||
@@ -291,7 +291,7 @@ class Transport (threading.Thread):
|
||||
sock = socket.socket(af, socket.SOCK_STREAM)
|
||||
try:
|
||||
retry_on_signal(lambda: sock.connect((hostname, port)))
|
||||
- except socket.error, e:
|
||||
+ except socket.error as e:
|
||||
reason = str(e)
|
||||
else:
|
||||
break
|
||||
@@ -373,7 +373,7 @@ class Transport (threading.Thread):
|
||||
|
||||
@rtype: str
|
||||
"""
|
||||
- out = '<ssh.Transport at %s' % hex(long(id(self)) & 0xffffffffL)
|
||||
+ out = '<ssh.Transport at %s' % hex(int(id(self)) & 0xffffffff)
|
||||
if not self.active:
|
||||
out += ' (unconnected)'
|
||||
else:
|
||||
@@ -616,7 +616,7 @@ class Transport (threading.Thread):
|
||||
self.active = False
|
||||
self.packetizer.close()
|
||||
self.join()
|
||||
- for chan in self._channels.values():
|
||||
+ for chan in list(self._channels.values()):
|
||||
chan._unlink()
|
||||
|
||||
def get_remote_server_key(self):
|
||||
@@ -690,7 +690,7 @@ class Transport (threading.Thread):
|
||||
"""
|
||||
return self.open_channel('auth-agent@openssh.com')
|
||||
|
||||
- def open_forwarded_tcpip_channel(self, (src_addr, src_port), (dest_addr, dest_port)):
|
||||
+ def open_forwarded_tcpip_channel(self, xxx_todo_changeme3, xxx_todo_changeme4):
|
||||
"""
|
||||
Request a new channel back to the client, of type C{"forwarded-tcpip"}.
|
||||
This is used after a client has requested port forwarding, for sending
|
||||
@@ -701,6 +701,8 @@ class Transport (threading.Thread):
|
||||
@param dest_addr: local (server) connected address
|
||||
@param dest_port: local (server) connected port
|
||||
"""
|
||||
+ (src_addr, src_port) = xxx_todo_changeme3
|
||||
+ (dest_addr, dest_port) = xxx_todo_changeme4
|
||||
return self.open_channel('forwarded-tcpip', (dest_addr, dest_port), (src_addr, src_port))
|
||||
|
||||
def open_channel(self, kind, dest_addr=None, src_addr=None):
|
||||
@@ -810,7 +812,9 @@ class Transport (threading.Thread):
|
||||
if port == 0:
|
||||
port = response.get_int()
|
||||
if handler is None:
|
||||
- def default_handler(channel, (src_addr, src_port), (dest_addr, dest_port)):
|
||||
+ def default_handler(channel, xxx_todo_changeme, xxx_todo_changeme1):
|
||||
+ (src_addr, src_port) = xxx_todo_changeme
|
||||
+ (dest_addr, dest_port) = xxx_todo_changeme1
|
||||
self._queue_incoming_channel(channel)
|
||||
handler = default_handler
|
||||
self._tcp_handler = handler
|
||||
@@ -1180,7 +1184,7 @@ class Transport (threading.Thread):
|
||||
return []
|
||||
try:
|
||||
return self.auth_handler.wait_for_response(my_event)
|
||||
- except BadAuthenticationType, x:
|
||||
+ except BadAuthenticationType as x:
|
||||
# if password auth isn't allowed, but keyboard-interactive *is*, try to fudge it
|
||||
if not fallback or ('keyboard-interactive' not in x.allowed_types):
|
||||
raise
|
||||
@@ -1196,7 +1200,7 @@ class Transport (threading.Thread):
|
||||
return []
|
||||
return [ password ]
|
||||
return self.auth_interactive(username, handler)
|
||||
- except SSHException, ignored:
|
||||
+ except SSHException as ignored:
|
||||
# attempt failed; just raise the original exception
|
||||
raise x
|
||||
return None
|
||||
@@ -1510,7 +1514,8 @@ class Transport (threading.Thread):
|
||||
# only called if a channel has turned on x11 forwarding
|
||||
if handler is None:
|
||||
# by default, use the same mechanism as accept()
|
||||
- def default_handler(channel, (src_addr, src_port)):
|
||||
+ def default_handler(channel, xxx_todo_changeme2):
|
||||
+ (src_addr, src_port) = xxx_todo_changeme2
|
||||
self._queue_incoming_channel(channel)
|
||||
self._x11_handler = default_handler
|
||||
else:
|
||||
@@ -1541,9 +1546,9 @@ class Transport (threading.Thread):
|
||||
# active=True occurs before the thread is launched, to avoid a race
|
||||
_active_threads.append(self)
|
||||
if self.server_mode:
|
||||
- self._log(DEBUG, 'starting thread (server mode): %s' % hex(long(id(self)) & 0xffffffffL))
|
||||
+ self._log(DEBUG, 'starting thread (server mode): %s' % hex(int(id(self)) & 0xffffffff))
|
||||
else:
|
||||
- self._log(DEBUG, 'starting thread (client mode): %s' % hex(long(id(self)) & 0xffffffffL))
|
||||
+ self._log(DEBUG, 'starting thread (client mode): %s' % hex(int(id(self)) & 0xffffffff))
|
||||
try:
|
||||
try:
|
||||
self.packetizer.write_all(self.local_version + '\r\n')
|
||||
@@ -1597,27 +1602,27 @@ class Transport (threading.Thread):
|
||||
msg.add_byte(chr(MSG_UNIMPLEMENTED))
|
||||
msg.add_int(m.seqno)
|
||||
self._send_message(msg)
|
||||
- except SSHException, e:
|
||||
+ except SSHException as e:
|
||||
self._log(ERROR, 'Exception: ' + str(e))
|
||||
self._log(ERROR, util.tb_strings())
|
||||
self.saved_exception = e
|
||||
- except EOFError, e:
|
||||
+ except EOFError as e:
|
||||
self._log(DEBUG, 'EOF in transport thread')
|
||||
#self._log(DEBUG, util.tb_strings())
|
||||
self.saved_exception = e
|
||||
- except socket.error, e:
|
||||
+ except socket.error as e:
|
||||
if type(e.args) is tuple:
|
||||
emsg = '%s (%d)' % (e.args[1], e.args[0])
|
||||
else:
|
||||
emsg = e.args
|
||||
self._log(ERROR, 'Socket exception: ' + emsg)
|
||||
self.saved_exception = e
|
||||
- except Exception, e:
|
||||
+ except Exception as e:
|
||||
self._log(ERROR, 'Unknown exception: ' + str(e))
|
||||
self._log(ERROR, util.tb_strings())
|
||||
self.saved_exception = e
|
||||
_active_threads.remove(self)
|
||||
- for chan in self._channels.values():
|
||||
+ for chan in list(self._channels.values()):
|
||||
chan._unlink()
|
||||
if self.active:
|
||||
self.active = False
|
||||
@@ -1626,7 +1631,7 @@ class Transport (threading.Thread):
|
||||
self.completion_event.set()
|
||||
if self.auth_handler is not None:
|
||||
self.auth_handler.abort()
|
||||
- for event in self.channel_events.values():
|
||||
+ for event in list(self.channel_events.values()):
|
||||
event.set()
|
||||
try:
|
||||
self.lock.acquire()
|
||||
@@ -1670,7 +1675,7 @@ class Transport (threading.Thread):
|
||||
timeout = 2
|
||||
try:
|
||||
buf = self.packetizer.readline(timeout)
|
||||
- except Exception, x:
|
||||
+ except Exception as x:
|
||||
raise SSHException('Error reading SSH protocol banner' + str(x))
|
||||
if buf[:4] == 'SSH-':
|
||||
break
|
||||
@@ -1712,8 +1717,8 @@ class Transport (threading.Thread):
|
||||
pkex = list(self.get_security_options().kex)
|
||||
pkex.remove('diffie-hellman-group-exchange-sha1')
|
||||
self.get_security_options().kex = pkex
|
||||
- available_server_keys = filter(self.server_key_dict.keys().__contains__,
|
||||
- self._preferred_keys)
|
||||
+ available_server_keys = list(filter(list(self.server_key_dict.keys()).__contains__,
|
||||
+ self._preferred_keys))
|
||||
else:
|
||||
available_server_keys = self._preferred_keys
|
||||
|
||||
@@ -1765,19 +1770,19 @@ class Transport (threading.Thread):
|
||||
# as a server, we pick the first item in the client's list that we support.
|
||||
# as a client, we pick the first item in our list that the server supports.
|
||||
if self.server_mode:
|
||||
- agreed_kex = filter(self._preferred_kex.__contains__, kex_algo_list)
|
||||
+ agreed_kex = list(filter(self._preferred_kex.__contains__, kex_algo_list))
|
||||
else:
|
||||
- agreed_kex = filter(kex_algo_list.__contains__, self._preferred_kex)
|
||||
+ agreed_kex = list(filter(kex_algo_list.__contains__, self._preferred_kex))
|
||||
if len(agreed_kex) == 0:
|
||||
raise SSHException('Incompatible ssh peer (no acceptable kex algorithm)')
|
||||
self.kex_engine = self._kex_info[agreed_kex[0]](self)
|
||||
|
||||
if self.server_mode:
|
||||
- available_server_keys = filter(self.server_key_dict.keys().__contains__,
|
||||
- self._preferred_keys)
|
||||
- agreed_keys = filter(available_server_keys.__contains__, server_key_algo_list)
|
||||
+ available_server_keys = list(filter(list(self.server_key_dict.keys()).__contains__,
|
||||
+ self._preferred_keys))
|
||||
+ agreed_keys = list(filter(available_server_keys.__contains__, server_key_algo_list))
|
||||
else:
|
||||
- agreed_keys = filter(server_key_algo_list.__contains__, self._preferred_keys)
|
||||
+ agreed_keys = list(filter(server_key_algo_list.__contains__, self._preferred_keys))
|
||||
if len(agreed_keys) == 0:
|
||||
raise SSHException('Incompatible ssh peer (no acceptable host key)')
|
||||
self.host_key_type = agreed_keys[0]
|
||||
@@ -1785,15 +1790,15 @@ class Transport (threading.Thread):
|
||||
raise SSHException('Incompatible ssh peer (can\'t match requested host key type)')
|
||||
|
||||
if self.server_mode:
|
||||
- agreed_local_ciphers = filter(self._preferred_ciphers.__contains__,
|
||||
- server_encrypt_algo_list)
|
||||
- agreed_remote_ciphers = filter(self._preferred_ciphers.__contains__,
|
||||
- client_encrypt_algo_list)
|
||||
+ agreed_local_ciphers = list(filter(self._preferred_ciphers.__contains__,
|
||||
+ server_encrypt_algo_list))
|
||||
+ agreed_remote_ciphers = list(filter(self._preferred_ciphers.__contains__,
|
||||
+ client_encrypt_algo_list))
|
||||
else:
|
||||
- agreed_local_ciphers = filter(client_encrypt_algo_list.__contains__,
|
||||
- self._preferred_ciphers)
|
||||
- agreed_remote_ciphers = filter(server_encrypt_algo_list.__contains__,
|
||||
- self._preferred_ciphers)
|
||||
+ agreed_local_ciphers = list(filter(client_encrypt_algo_list.__contains__,
|
||||
+ self._preferred_ciphers))
|
||||
+ agreed_remote_ciphers = list(filter(server_encrypt_algo_list.__contains__,
|
||||
+ self._preferred_ciphers))
|
||||
if (len(agreed_local_ciphers) == 0) or (len(agreed_remote_ciphers) == 0):
|
||||
raise SSHException('Incompatible ssh server (no acceptable ciphers)')
|
||||
self.local_cipher = agreed_local_ciphers[0]
|
||||
@@ -1801,22 +1806,22 @@ class Transport (threading.Thread):
|
||||
self._log(DEBUG, 'Ciphers agreed: local=%s, remote=%s' % (self.local_cipher, self.remote_cipher))
|
||||
|
||||
if self.server_mode:
|
||||
- agreed_remote_macs = filter(self._preferred_macs.__contains__, client_mac_algo_list)
|
||||
- agreed_local_macs = filter(self._preferred_macs.__contains__, server_mac_algo_list)
|
||||
+ agreed_remote_macs = list(filter(self._preferred_macs.__contains__, client_mac_algo_list))
|
||||
+ agreed_local_macs = list(filter(self._preferred_macs.__contains__, server_mac_algo_list))
|
||||
else:
|
||||
- agreed_local_macs = filter(client_mac_algo_list.__contains__, self._preferred_macs)
|
||||
- agreed_remote_macs = filter(server_mac_algo_list.__contains__, self._preferred_macs)
|
||||
+ agreed_local_macs = list(filter(client_mac_algo_list.__contains__, self._preferred_macs))
|
||||
+ agreed_remote_macs = list(filter(server_mac_algo_list.__contains__, self._preferred_macs))
|
||||
if (len(agreed_local_macs) == 0) or (len(agreed_remote_macs) == 0):
|
||||
raise SSHException('Incompatible ssh server (no acceptable macs)')
|
||||
self.local_mac = agreed_local_macs[0]
|
||||
self.remote_mac = agreed_remote_macs[0]
|
||||
|
||||
if self.server_mode:
|
||||
- agreed_remote_compression = filter(self._preferred_compression.__contains__, client_compress_algo_list)
|
||||
- agreed_local_compression = filter(self._preferred_compression.__contains__, server_compress_algo_list)
|
||||
+ agreed_remote_compression = list(filter(self._preferred_compression.__contains__, client_compress_algo_list))
|
||||
+ agreed_local_compression = list(filter(self._preferred_compression.__contains__, server_compress_algo_list))
|
||||
else:
|
||||
- agreed_local_compression = filter(client_compress_algo_list.__contains__, self._preferred_compression)
|
||||
- agreed_remote_compression = filter(server_compress_algo_list.__contains__, self._preferred_compression)
|
||||
+ agreed_local_compression = list(filter(client_compress_algo_list.__contains__, self._preferred_compression))
|
||||
+ agreed_remote_compression = list(filter(server_compress_algo_list.__contains__, self._preferred_compression))
|
||||
if (len(agreed_local_compression) == 0) or (len(agreed_remote_compression) == 0):
|
||||
raise SSHException('Incompatible ssh server (no acceptable compression) %r %r %r' % (agreed_local_compression, agreed_remote_compression, self._preferred_compression))
|
||||
self.local_compression = agreed_local_compression[0]
|
||||
--- ssh/util.py.orig 2012-09-10 18:40:40 UTC
|
||||
+++ ssh/util.py
|
||||
@@ -20,8 +20,8 @@
|
||||
Useful functions used by the rest of ssh.
|
||||
"""
|
||||
|
||||
-from __future__ import generators
|
||||
|
||||
+
|
||||
import array
|
||||
from binascii import hexlify, unhexlify
|
||||
import errno
|
||||
@@ -48,7 +48,7 @@ if sys.version_info < (2,3):
|
||||
|
||||
def inflate_long(s, always_positive=False):
|
||||
"turns a normalized byte string into a long-int (adapted from Crypto.Util.number)"
|
||||
- out = 0L
|
||||
+ out = 0
|
||||
negative = 0
|
||||
if not always_positive and (len(s) > 0) and (ord(s[0]) >= 0x80):
|
||||
negative = 1
|
||||
@@ -60,16 +60,16 @@ def inflate_long(s, always_positive=False):
|
||||
for i in range(0, len(s), 4):
|
||||
out = (out << 32) + struct.unpack('>I', s[i:i+4])[0]
|
||||
if negative:
|
||||
- out -= (1L << (8 * len(s)))
|
||||
+ out -= (1 << (8 * len(s)))
|
||||
return out
|
||||
|
||||
def deflate_long(n, add_sign_padding=True):
|
||||
"turns a long-int into a normalized byte string (adapted from Crypto.Util.number)"
|
||||
# after much testing, this algorithm was deemed to be the fastest
|
||||
s = ''
|
||||
- n = long(n)
|
||||
+ n = int(n)
|
||||
while (n != 0) and (n != -1):
|
||||
- s = struct.pack('>I', n & 0xffffffffL) + s
|
||||
+ s = struct.pack('>I', n & 0xffffffff) + s
|
||||
n = n >> 32
|
||||
# strip off leading zeros, FFs
|
||||
for i in enumerate(s):
|
||||
@@ -276,13 +276,13 @@ def retry_on_signal(function):
|
||||
while True:
|
||||
try:
|
||||
return function()
|
||||
- except EnvironmentError, e:
|
||||
+ except EnvironmentError as e:
|
||||
if e.errno != errno.EINTR:
|
||||
raise
|
||||
|
||||
class Counter (object):
|
||||
"""Stateful counter for CTR mode crypto"""
|
||||
- def __init__(self, nbits, initial_value=1L, overflow=0L):
|
||||
+ def __init__(self, nbits, initial_value=1, overflow=0):
|
||||
self.blocksize = nbits / 8
|
||||
self.overflow = overflow
|
||||
# start with value - 1 so we don't have to store intermediate values when counting
|
||||
@@ -306,6 +306,6 @@ class Counter (object):
|
||||
self.value = array.array('c', '\x00' * (self.blocksize - len(x)) + x)
|
||||
return self.value.tostring()
|
||||
|
||||
- def new(cls, nbits, initial_value=1L, overflow=0L):
|
||||
+ def new(cls, nbits, initial_value=1, overflow=0):
|
||||
return cls(nbits, initial_value=initial_value, overflow=overflow)
|
||||
new = classmethod(new)
|
|
@ -1,10 +0,0 @@
|
|||
--- setup.py.orig 2012-09-14 19:01:37 UTC
|
||||
+++ setup.py
|
||||
@@ -38,7 +38,6 @@ import sys
|
||||
try:
|
||||
from setuptools import setup
|
||||
kw = {
|
||||
- 'install_requires': 'pycrypto >= 2.1, != 2.4',
|
||||
}
|
||||
except ImportError:
|
||||
from distutils.core import setup
|
|
@ -1,6 +0,0 @@
|
|||
This is a library for making SSH2 connections (client or server). Emphasis is
|
||||
on using SSH2 as an alternative to SSL for making secure connections between
|
||||
python scripts. All major ciphers and hash methods are supported. SFTP client
|
||||
and server mode are both supported too.
|
||||
|
||||
WWW: https://pypi.org/project/ssh/
|
Loading…
Reference in a new issue