Example #1
0
 def chattr(self, path, attr):
     path = self._realpath(path)
     try:
         SFTPServer.set_file_attr(path, attr)
     except OSError as e:
         return SFTPServer.convert_errno(e.errno)
     return SFTP_OK
Example #2
0
 def chattr(self, attr):
     # python doesn't have equivalents to fchown or fchmod, so we have to
     # use the stored filename
     try:
         SFTPServer.set_file_attr(self.filename, attr)
         return SFTP_OK
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #3
0
 def mkdir(self, path, attr):
     path = self._realpath(path)
     try:
         os.mkdir(path)
         if attr is not None:
             SFTPServer.set_file_attr(path, attr)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #4
0
 def rename(self, oldpath, newpath):
     oldpath = self._realpath(oldpath)
     newpath = self._realpath(newpath)
     try:
         os.rename(oldpath, newpath)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #5
0
 def rmdir(self, path):
     path = self._realpath(path)
     try:
         os.rmdir(path)
     except OSError as e:
         return SFTPServer.convert_errno(e.errno)
     return SFTP_OK
Example #6
0
 def list_folder(self, path):
     path = self._realpath(path)
     try:
         out = [ ]
         flist = os.listdir(path)
         for fname in flist:
             attr = SFTPAttributes.from_stat(os.stat(os.path.join(path, fname)))
             attr.filename = fname
             out.append(attr)
         return out
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #7
0
 def open(self, path, flags, attr):
     path = self._realpath(path)
     try:
         binary_flag = getattr(os, 'O_BINARY',  0)
         flags |= binary_flag
         mode = getattr(attr, 'st_mode', None)
         if mode is not None:
             fd = os.open(path, flags, mode)
         else:
             # os.open() defaults to 0777 which is
             # an odd default mode for files
             fd = os.open(path, flags, 0o666)
     except OSError as e:
         return SFTPServer.convert_errno(e.errno)
     if (flags & os.O_CREAT) and (attr is not None):
         attr._flags &= ~attr.FLAG_PERMISSIONS
         SFTPServer.set_file_attr(path, attr)
     if flags & os.O_WRONLY:
         if flags & os.O_APPEND:
             fstr = 'ab'
         else:
             fstr = 'wb'
     elif flags & os.O_RDWR:
         if flags & os.O_APPEND:
             fstr = 'a+b'
         else:
             fstr = 'r+b'
     else:
         # O_RDONLY (== 0)
         fstr = 'rb'
     try:
         f = os.fdopen(fd, fstr)
     except OSError as e:
         return SFTPServer.convert_errno(e.errno)
     fobj = StubSFTPHandle(flags)
     fobj.filename = path
     fobj.readfile = f
     fobj.writefile = f
     return fobj
Example #8
0
 def open(self, path, flags, attr):
     path = self._realpath(path)
     try:
         binary_flag = getattr(os, 'O_BINARY',  0)
         flags |= binary_flag
         mode = getattr(attr, 'st_mode', None)
         if mode is not None:
             fd = os.open(path, flags, mode)
         else:
             # os.open() defaults to 0777 which is
             # an odd default mode for files
             fd = os.open(path, flags, 0666)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #9
0
 def readlink(self, path):
     path = self._realpath(path)
     try:
         symlink = os.readlink(path)
     except OSError as e:
         return SFTPServer.convert_errno(e.errno)
     # if it's absolute, remove the root
     if os.path.isabs(symlink):
         if symlink[:len(self.ROOT)] == self.ROOT:
             symlink = symlink[len(self.ROOT):]
             if (len(symlink) == 0) or (symlink[0] != '/'):
                 symlink = '/' + symlink
         else:
             symlink = '<error>'
     return symlink
Example #10
0
 def symlink(self, target_path, path):
     path = self._realpath(path)
     if (len(target_path) > 0) and (target_path[0] == '/'):
         # absolute symlink
         target_path = os.path.join(self.ROOT, target_path[1:])
         if target_path[:2] == '//':
             # bug in os.path.join
             target_path = target_path[1:]
     else:
         # compute relative to path
         abspath = os.path.join(os.path.dirname(path), target_path)
         if abspath[:len(self.ROOT)] != self.ROOT:
             # this symlink isn't going to work anyway -- just break it immediately
             target_path = '<error>'
     try:
         os.symlink(target_path, path)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #11
0
 def rmdir(self, path):
     path = self._realpath(path)
     try:
         os.rmdir(path)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #12
0
 def lstat(self, path):
     path = self._realpath(path)
     try:
         return SFTPAttributes.from_stat(os.lstat(path))
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #13
0
 path = self._realpath(path)
 try:
     binary_flag = getattr(os, 'O_BINARY',  0)
     flags |= binary_flag
     mode = getattr(attr, 'st_mode', None)
     if mode is not None:
         fd = os.open(path, flags, mode)
     else:
         # os.open() defaults to 0777 which is
         # an odd default mode for files
         fd = os.open(path, flags, 0666)
 except OSError, e:
     return SFTPServer.convert_errno(e.errno)
 if (flags & os.O_CREAT) and (attr is not None):
     attr._flags &= ~attr.FLAG_PERMISSIONS
     SFTPServer.set_file_attr(path, attr)
 if flags & os.O_WRONLY:
     if flags & os.O_APPEND:
         fstr = 'ab'
     else:
         fstr = 'wb'
 elif flags & os.O_RDWR:
     if flags & os.O_APPEND:
         fstr = 'a+b'
     else:
         fstr = 'r+b'
 else:
     # O_RDONLY (== 0)
     fstr = 'rb'
 try:
     f = os.fdopen(fd, fstr)
Example #14
0
 def stat(self):
     try:
         return SFTPAttributes.from_stat(os.fstat(self.readfile.fileno()))
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #15
0
 def readlink(self, path):
     path = self._realpath(path)
     try:
         symlink = os.readlink(path)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #16
0
 def chattr(self, path, attr):
     path = self._realpath(path)
     try:
         SFTPServer.set_file_attr(path, attr)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)
Example #17
0
 def remove(self, path):
     path = self._realpath(path)
     try:
         os.remove(path)
     except OSError, e:
         return SFTPServer.convert_errno(e.errno)