Skip to content

Commit db481c5

Browse files
check if sftp client exists
1 parent c304e80 commit db481c5

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

ssh_proxy_server/clients/sftp.py

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class SFTPClient(SSHClient):
1313

1414
def __init__(self, host, port, method, password, user, key, session):
1515
super().__init__(host, port, method, password, user, key, session)
16-
self._sftp = None
16+
self._sftp: Optional[paramiko.SFTPClient] = None
1717
self.subsystem_count = 0
1818

1919
@classmethod
@@ -53,70 +53,100 @@ def connect(self):
5353
ret = super().connect()
5454
if not ret:
5555
return False
56+
if self._sftp is None:
57+
return paramiko.sftp.SFTP_FAILURE
5658
try:
5759
self._sftp = paramiko.SFTPClient.from_transport(self.transport)
5860
return True
5961
except Exception:
6062
logging.exception('error creating sftp client')
61-
return False
63+
return False
6264

6365
def chmod(self, path, mode):
66+
if self._sftp is None:
67+
return paramiko.sftp.SFTP_FAILURE
6468
self._sftp.chmod(path, mode)
65-
return paramiko.SFTP_OK
69+
return paramiko.sftp.SFTP_OK
6670

6771
def chown(self, path, uid, gid):
72+
if self._sftp is None:
73+
return paramiko.sftp.SFTP_FAILURE
6874
self._sftp.chown(path, uid, gid)
69-
return paramiko.SFTP_OK
75+
return paramiko.sftp.SFTP_OK
7076

7177
def get(self, remotePath, localPath, callback=None):
78+
if self._sftp is None:
79+
return paramiko.sftp.SFTP_FAILURE
7280
try:
7381
self._sftp.get(remotePath, localPath, callback)
74-
return paramiko.SFTP_OK
82+
return paramiko.sftp.SFTP_OK
7583
except (IOError, OSError) as ex:
7684
logging.error(ex)
7785
os.remove(localPath)
78-
return paramiko.SFTP_FAILURE
86+
return paramiko.sftp.SFTP_FAILURE
7987

8088
def listdir_attr(self, path='.'):
89+
if self._sftp is None:
90+
return paramiko.sftp.SFTP_FAILURE
8191
return self._sftp.listdir_attr(path)
8292

8393
def lstat(self, path):
94+
if self._sftp is None:
95+
return paramiko.sftp.SFTP_FAILURE
8496
return self._sftp.lstat(path)
8597

8698
def mkdir(self, path, mode=511):
99+
if self._sftp is None:
100+
return paramiko.sftp.SFTP_FAILURE
87101
self._sftp.mkdir(path, mode)
88-
return paramiko.SFTP_OK
102+
return paramiko.sftp.SFTP_OK
89103

90104
def put(self, localPath, remotePath, callback=None, confirm=True):
91105
raise NotImplementedError('put not implemented')
92106

93107
def readlink(self, path):
108+
if self._sftp is None:
109+
return paramiko.sftp.SFTP_FAILURE
94110
return self._sftp.readlink(path)
95111

96112
def remove(self, path):
113+
if self._sftp is None:
114+
return paramiko.sftp.SFTP_FAILURE
97115
self._sftp.remove(path)
98-
return paramiko.SFTP_OK
116+
return paramiko.sftp.SFTP_OK
99117

100118
def rename(self, oldpath, newpath):
119+
if self._sftp is None:
120+
return paramiko.sftp.SFTP_FAILURE
101121
self._sftp.rename(oldpath, newpath)
102-
return paramiko.SFTP_OK
122+
return paramiko.sftp.SFTP_OK
103123

104124
def rmdir(self, path):
125+
if self._sftp is None:
126+
return paramiko.sftp.SFTP_FAILURE
105127
self._sftp.rmdir(path)
106-
return paramiko.SFTP_OK
128+
return paramiko.sftp.SFTP_OK
107129

108130
def stat(self, path):
131+
if self._sftp is None:
132+
return paramiko.sftp.SFTP_FAILURE
109133
return self._sftp.stat(path)
110134

111135
def utime(self, path, times):
136+
if self._sftp is None:
137+
return paramiko.sftp.SFTP_FAILURE
112138
return self._sftp.utime(path, times)
113139

114140
def symlink(self, source, dest):
141+
if self._sftp is None:
142+
return paramiko.sftp.SFTP_FAILURE
115143
self._sftp.symlink(source, dest)
116-
return paramiko.SFTP_OK
144+
return paramiko.sftp.SFTP_OK
117145

118146
def close(self):
147+
if self._sftp is None:
148+
return paramiko.sftp.SFTP_FAILURE
119149
if not self.running:
120150
self._sftp.close()
121151
self.session.sftp_channel.close()
122-
return paramiko.SFTP_OK
152+
return paramiko.sftp.SFTP_OK

0 commit comments

Comments
 (0)