[project @ Arch-1:robey@lag.net--2003-public%secsh--dev--1.0--patch-122]
symlink, readlink add support for symlink command, and finish support for readlink. (i guess i started readlink a while ago but forgot to add the right method to the SFTPServerInterface class.)
This commit is contained in:
parent
fa8c4e20bd
commit
73a0df1df3
|
@ -324,6 +324,10 @@ class SFTPServer (BaseSFTP, SubsystemHandler):
|
|||
self._response(request_number, CMD_NAME, 1, resp, '', SFTPAttributes())
|
||||
else:
|
||||
self._send_status(request_number, resp)
|
||||
elif t == CMD_SYMLINK:
|
||||
path = msg.get_string()
|
||||
target_path = msg.get_string()
|
||||
self._send_status(request_number, self.server.symlink(path, target_path))
|
||||
elif t == CMD_REALPATH:
|
||||
path = msg.get_string()
|
||||
rpath = self.server.canonicalize(path)
|
||||
|
|
|
@ -261,3 +261,33 @@ class SFTPServerInterface (object):
|
|||
else:
|
||||
return os.path.normpath('/' + path)
|
||||
|
||||
def readlink(self, path):
|
||||
"""
|
||||
Return the target of a symbolic link (or shortcut) on the server.
|
||||
If the specified path doesn't refer to a symbolic link, an error
|
||||
should be returned.
|
||||
|
||||
@param path: path (relative or absolute) of the symbolic link.
|
||||
@type path: str
|
||||
@return: the target path of the symbolic link, or an error code like
|
||||
L{SFTP_NO_SUCH_FILE}.
|
||||
@rtype: str I{or error code}
|
||||
"""
|
||||
return SFTP_OP_UNSUPPORTED
|
||||
|
||||
def symlink(self, path, target_path):
|
||||
"""
|
||||
Create a symbolic link on the server, as new pathname C{path},
|
||||
with C{target_path} as the target of the link.
|
||||
|
||||
@param path: path (relative or absolute) of the symbolic link to
|
||||
create.
|
||||
@type path: str
|
||||
@param target_path: path (relative or absolute) of the target for
|
||||
this new symbolic link.
|
||||
@type target_path: str
|
||||
@return: an error code like C{SFTP_OK}.
|
||||
@rtype: int
|
||||
"""
|
||||
return SFTP_OP_UNSUPPORTED
|
||||
|
||||
|
|
|
@ -295,6 +295,7 @@ class SFTPTest (unittest.TestCase):
|
|||
self.assertEqual(f.readlines(), [ 'original\n' ])
|
||||
f.close()
|
||||
self.assertEqual(sftp.lstat(FOLDER + '/link.txt').st_size, 12)
|
||||
self.assertEqual(sftp.stat(FOLDER + '/link.txt').st_size, 9)
|
||||
self.assertEqual(sftp.stat(FOLDER + '/original.txt').st_size, 9)
|
||||
finally:
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue