summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--NEWS35
-rw-r--r--dev-requirements.txt2
-rw-r--r--fabfile.py28
-rw-r--r--paramiko/__init__.py4
-rw-r--r--paramiko/packet.py1
-rw-r--r--paramiko/transport.py8
-rw-r--r--requirements.txt2
-rw-r--r--setup.py2
-rw-r--r--tox.ini2
9 files changed, 73 insertions, 11 deletions
diff --git a/NEWS b/NEWS
index 3a3849ef..e9ca6f1d 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,13 @@ Issues noted as "Fabric #NN" can be found at https://github.com/fabric/fabric/.
Releases
========
+v1.11.2 (27th Sep 2013)
+-----------------------
+
+* #156: Fix potential deadlock condition when using Channel objects as sockets
+ (e.g. when using SSH gatewaying). Thanks to Steven Noonan and Frank Arnold
+ for catch & patch.
+
v1.10.4 (27th Sep 2013)
-----------------------
@@ -21,6 +28,17 @@ v1.10.4 (27th Sep 2013)
* #200: Fix an exception-causing typo in `demo_simple.py`. Thanks to Alex
Buchanan for catch & Dave Foster for patch.
+v1.11.1 (20th Sep 2013)
+-----------------------
+
+* #162: Clean up HMAC module import to avoid deadlocks in certain uses of
+ SSHClient. Thanks to Gernot Hillier for the catch & suggested
+ fix.
+* #36: Fix the port-forwarding demo to avoid file descriptor errors. Thanks to
+ Jonathan Halcrow for catch & patch.
+* #168: Update config handling to properly handle multiple 'localforward' and
+ 'remoteforward' keys. Thanks to Emre Yılmaz for the patch.
+
v1.10.3 (20th Sep 2013)
-----------------------
@@ -32,6 +50,23 @@ v1.10.3 (20th Sep 2013)
* #168: Update config handling to properly handle multiple 'localforward' and
'remoteforward' keys. Thanks to Emre Yılmaz for the patch.
+v1.11.0 (26th Jul 2013)
+-----------------------
+
+* #98: On Windows, when interacting with the PuTTY PAgeant, Paramiko now
+ creates the shared memory map with explicit Security Attributes of the user,
+ which is the same technique employed by the canonical PuTTY library to avoid
+ permissions issues when Paramiko is running under a different UAC context
+ than the PuTTY Ageant process. Thanks to Jason R. Coombs for the patch.
+* #100: Remove use of PyWin32 in `win_pageant` module. Module was already
+ dependent on ctypes for constructing appropriate structures and had ctypes
+ implementations of all functionality. Thanks to Jason R. Coombs for the
+ patch.
+* #87: Ensure updates to `known_hosts` files account for any updates to said
+ files after Paramiko initially read them. (Includes related fix to guard
+ against duplicate entries during subsequent `known_hosts` loads.) Thanks to
+ `@sunweaver` for the contribution.
+
v1.10.2 (26th Jul 2013)
-----------------------
diff --git a/dev-requirements.txt b/dev-requirements.txt
new file mode 100644
index 00000000..f706c46f
--- /dev/null
+++ b/dev-requirements.txt
@@ -0,0 +1,2 @@
+tox>=1.4,<1.5
+epydoc>=3.0,<3.1
diff --git a/fabfile.py b/fabfile.py
index 29394f94..7883daba 100644
--- a/fabfile.py
+++ b/fabfile.py
@@ -1,8 +1,10 @@
-from fabric.api import task, sudo, env
+from fabric.api import task, sudo, env, local, hosts
from fabric.contrib.project import rsync_project
+from fabric.contrib.console import confirm
@task
+@hosts("paramiko.org")
def upload_docs():
target = "/var/www/paramiko.org"
staging = "/tmp/paramiko_docs"
@@ -11,3 +13,27 @@ def upload_docs():
sudo("rm -rf %s/*" % target)
rsync_project(local_dir='docs/', remote_dir=staging, delete=True)
sudo("cp -R %s/* %s/" % (staging, target))
+
+@task
+def build_docs():
+ local("epydoc --no-private -o docs/ paramiko")
+
+@task
+def clean():
+ local("rm -rf build dist docs")
+ local("rm -f MANIFEST *.log demos/*.log")
+ local("rm -f paramiko/*.pyc")
+ local("rm -f test.log")
+ local("rm -rf paramiko.egg-info")
+
+@task
+def test():
+ local("python ./test.py")
+
+@task
+def release():
+ confirm("Only hit Enter if you remembered to update the version!")
+ confirm("Also, did you remember to tag your release?")
+ build_docs()
+ local("python setup.py sdist register upload")
+ upload_docs()
diff --git a/paramiko/__init__.py b/paramiko/__init__.py
index 6094c407..4ba42a26 100644
--- a/paramiko/__init__.py
+++ b/paramiko/__init__.py
@@ -46,6 +46,8 @@ Paramiko is written entirely in python (no C or platform-dependent code) and is
released under the GNU Lesser General Public License (LGPL).
Website: U{https://github.com/paramiko/paramiko/}
+
+Mailing list: U{paramiko@librelist.com<mailto:paramiko@librelist.com>}
"""
import sys
@@ -55,7 +57,7 @@ if sys.version_info < (2, 5):
__author__ = "Jeff Forcier <jeff@bitprophet.org>"
-__version__ = "1.10.2"
+__version__ = "1.11.1"
__license__ = "GNU Lesser General Public License (LGPL)"
diff --git a/paramiko/packet.py b/paramiko/packet.py
index be502e9b..99138edc 100644
--- a/paramiko/packet.py
+++ b/paramiko/packet.py
@@ -152,7 +152,6 @@ class Packetizer (object):
def close(self):
self.__closed = True
- self.__socket.close()
def set_hexdump(self, hexdump):
self.__dump_packets = hexdump
diff --git a/paramiko/transport.py b/paramiko/transport.py
index 201a2531..20eff87e 100644
--- a/paramiko/transport.py
+++ b/paramiko/transport.py
@@ -400,7 +400,6 @@ class Transport (threading.Thread):
@since: 1.5.3
"""
- self.sock.close()
self.close()
def get_security_options(self):
@@ -614,11 +613,10 @@ class Transport (threading.Thread):
"""
if not self.active:
return
- self.active = False
- self.packetizer.close()
- self.join()
+ self.stop_thread()
for chan in self._channels.values():
chan._unlink()
+ self.sock.close()
def get_remote_server_key(self):
"""
@@ -1391,6 +1389,8 @@ class Transport (threading.Thread):
def stop_thread(self):
self.active = False
self.packetizer.close()
+ while self.isAlive():
+ self.join(10)
### internals...
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 75112a23..00000000
--- a/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-pycrypto
-tox
diff --git a/setup.py b/setup.py
index d7adee97..64484b1c 100644
--- a/setup.py
+++ b/setup.py
@@ -52,7 +52,7 @@ if sys.platform == 'darwin':
setup(name = "paramiko",
- version = "1.10.3",
+ version = "1.11.1",
description = "SSH2 protocol library",
author = "Jeff Forcier",
author_email = "jeff@bitprophet.org",
diff --git a/tox.ini b/tox.ini
index 6cb80012..e2a8dcf4 100644
--- a/tox.ini
+++ b/tox.ini
@@ -2,5 +2,5 @@
envlist = py25,py26,py27
[testenv]
-commands = pip install --use-mirrors -q -r requirements.txt
+commands = pip install --use-mirrors -q -r dev-requirements.txt
python test.py