forked from alibaba/iOSSecAudit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathminisftp.py
More file actions
133 lines (112 loc) · 4.11 KB
/
minisftp.py
File metadata and controls
133 lines (112 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#author:june
import paramiko
import os
import sys
import stat
import errno
from stat import S_ISDIR
import globals as G
########################################################################
class Minisftp:
""""""
#----------------------------------------------------------------------
def __init__(self, ssh):
"""Constructor"""
self.sftp = ssh.open_sftp()
'''
#----------------------------------------------------------------------
def __init__(self, host, port, username, password):
"""Constructor"""
self.host = host
self.port = port
self.username = username
self.password = password
'''
#----------------------------------------------------------------------
def sftp_conn(self):
""""""
try:
self.transport = paramiko.Transport((self.host, self.port))
self.transport.connect(username = self.username, password = self.password)
self.sftp = paramiko.SFTPClient.from_transport(self.transport)
return True
except paramiko.AuthenticationException:
G.log(G.ERROR, "SFTP Authentication failed when connecting to %s" % self.host)
return False
except:
G.log(G.ERROR, "SFTP Could not SSH to %s, waiting for it to start" % self.host)
return False
#----------------------------------------------------------------------
def getfile(self, remotefile, localfile, callback):
""""""
try:
return self.sftp.get(remotefile, localfile, callback)
except:
G.log(G.ERROR, 'Access to \'{}\' Permission denied.'.format(remotefile))
return False
#----------------------------------------------------------------------
def putfile(self, remotefile, localfile, callback):
""""""
try :
return self.sftp.put(localfile, remotefile, callback)
except:
G.log(G.ERROR, 'Access to \'{}\' Permission denied.'.format(remotefile))
return None
#----------------------------------------------------------------------
def file_exists(self, path):
""""""
try:
stat = self.sftp.stat(path)
except IOError, e:
if e.errno == errno.ENOENT:
return False
else:
return True
#----------------------------------------------------------------------
def list_dir(self, path):
""""""
#self.sftp.
if self.file_exists(path):
return self.sftp.listdir(path)
else:
return None
#----------------------------------------------------------------------
def sftp_close(self):
""""""
G.log(G.INFO, 'close sftp connection')
self.sftp.close()
#self.transport.close()
#----------------------------------------------------------------------
def glob(self, path, pattern=".*"):
""""""
l = self.sftp.listdir(path)
return l
#----------------------------------------------------------------------
def chmod(self, remote_path, permisson):
""""""
try:
self.sftp.chmod(remote_path, permisson)
return True
except:
G.log(G.INFO, 'Access to \'{}\' Permission denied.'.format(remote_path))
return False
'''
#this is just a wrong way to check a remote path is a dir or a file
#----------------------------------------------------------------------
def isdir(self, path):
""""""
try:
for fileattr in self.sftp.listdir_attr(path):
if stat.S_ISDIR(fileattr.st_mode):
return True
except:
pass
return False
'''
#----------------------------------------------------------------------
def isdir(self, path):
try:
return S_ISDIR(self.sftp.stat(path).st_mode)
except IOError:
#Path does not exist, so by definition not a directory
return False