From 27271fa455228f14b1e16b576f0c8c40f532c227 Mon Sep 17 00:00:00 2001 From: Jeff Forcier Date: Mon, 5 Nov 2012 17:26:47 -0800 Subject: [PATCH] Post-import edits --- paramiko/proxy.py | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/paramiko/proxy.py b/paramiko/proxy.py index 537e17b..e91a11a 100644 --- a/paramiko/proxy.py +++ b/paramiko/proxy.py @@ -1,46 +1,48 @@ # Copyright (C) 2012 Yipit, Inc # -# This file is part of ssh. +# This file is part of paramiko. # # Paramiko is free software; you can redistribute it and/or modify it under the # terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # -# 'ssh' is distrubuted in the hope that it will be useful, but WITHOUT ANY +# Paramiko is distrubuted 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License -# along with 'ssh'; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA. +# along with Paramiko; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + +""" +L{ProxyCommand}. +""" import os from shlex import split as shlsplit from subprocess import Popen, PIPE -from ssh.ssh_exception import BadProxyCommand +from ssh.ssh_exception import ProxyCommandFailure class ProxyCommand(object): """ - A proxy based on the program informed in the ProxyCommand config. + Wraps a subprocess running ProxyCommand-driven programs. - This class implements a the interface needed by both L{Transport} - and L{Packetizer} classes. Using this class instead of a regular - socket makes it possible to talk with a popened command that will - proxy all the conversation between the client and a server hosted in - another machine. + This class implements a the socket-like interface needed by the + L{Transport} and L{Packetizer} classes. Using this class instead of a + regular socket makes it possible to talk with a Popen'd command that will + proxy traffic between the client and a server hosted in another machine. """ - def __init__(self, command_line): """ Create a new CommandProxy instance. The instance created by this - class should be passed as argument to the L{Transport} class. + class can be passed as an argument to the L{Transport} class. @param command_line: the command that should be executed and - used as the proxy. + used as the proxy. @type command_line: str """ self.cmd = shlsplit(command_line) @@ -56,31 +58,33 @@ class ProxyCommand(object): """ try: self.process.stdin.write(content) - except IOError, exc: + except IOError, e: # There was a problem with the child process. It probably # died and we can't proceed. The best option here is to # raise an exception informing the user that the informed # ProxyCommand is not working. - raise BadProxyCommand(' '.join(self.cmd), exc.strerror) + raise BadProxyCommand(' '.join(self.cmd), e.strerror) return len(content) def recv(self, size): """ - Read from the standard output of the forked program + Read from the standard output of the forked program. @param size: how many chars should be read @type size: int - @return: the length of the readed content + @return: the length of the read content @rtype: int """ try: return os.read(self.process.stdout.fileno(), size) - except IOError, exc: - raise BadProxyCommand(' '.join(self.cmd), exc.strerror) + except IOError, e: + raise BadProxyCommand(' '.join(self.cmd), e.strerror) def close(self): self.process.terminate() def settimeout(self, timeout): + # Timeouts are meaningless for this implementation, but are part of the + # spec, so must be present. pass