GIF89a; EcchiShell v1.0
//usr/lib64/lib64/lib64/python2.7/Demo/ maxnamelen: return 0 if name[-1] == '~': return 0 if name in skipnames: return 0 if self._hidden(name): return 0 head, tail = os.path.split(name) if head or not tail: return 0 if os.path.islink(name): return 0 if '\0' in open(name, 'rb').read(512): return 0 for ign in self._ignore: if fnmatch.fnmatch(name, ign): return 0 return 1 def check(self, name): if not self.visible(name): raise os.error, "protected name %s" % repr(name) def checkfile(self, name): self.check(name) if not os.path.isfile(name): raise os.error, "not a plain file %s" % repr(name) def pwd(self): return os.getcwd() def cd(self, name): self.check(name) save = os.getcwd(), self._ignore os.chdir(name) self._dirstack.append(save) self._ignore = self._ignore + self._readignore() def back(self): if not self._dirstack: raise os.error, "empty directory stack" dir, ignore = self._dirstack[-1] os.chdir(dir) del self._dirstack[-1] self._ignore = ignore def _filter(self, files, pat = None): if pat: def keep(name, pat = pat): return fnmatch.fnmatch(name, pat) files = filter(keep, files) files = filter(self.visible, files) files.sort() return files def list(self, pat = None): files = os.listdir(os.curdir) return self._filter(files, pat) def listfiles(self, pat = None): files = os.listdir(os.curdir) files = filter(os.path.isfile, files) return self._filter(files, pat) def listsubdirs(self, pat = None): files = os.listdir(os.curdir) files = filter(os.path.isdir, files) return self._filter(files, pat) def exists(self, name): return self.visible(name) and os.path.exists(name) def isdir(self, name): return self.visible(name) and os.path.isdir(name) def islink(self, name): return self.visible(name) and os.path.islink(name) def isfile(self, name): return self.visible(name) and os.path.isfile(name) def sum(self, name): self.checkfile(name) BUFFERSIZE = 1024*8 f = open(name) sum = md5.new() while 1: buffer = f.read(BUFFERSIZE) if not buffer: break sum.update(buffer) return sum.digest() def size(self, name): self.checkfile(name) return os.stat(name)[ST_SIZE] def mtime(self, name): self.checkfile(name) return time.localtime(os.stat(name)[ST_MTIME]) def stat(self, name): self.checkfile(name) size = os.stat(name)[ST_SIZE] mtime = time.localtime(os.stat(name)[ST_MTIME]) return size, mtime def info(self, name): sum = self.sum(name) size = os.stat(name)[ST_SIZE] mtime = time.localtime(os.stat(name)[ST_MTIME]) return sum, size, mtime def _list(self, function, list): if list is None: list = self.listfiles() res = [] for name in list: try: res.append((name, function(name))) except (os.error, IOError): res.append((name, None)) return res def sumlist(self, list = None): return self._list(self.sum, list) def statlist(self, list = None): return self._list(self.stat, list) def mtimelist(self, list = None): return self._list(self.mtime, list) def sizelist(self, list = None): return self._list(self.size, list) def infolist(self, list = None): return self._list(self.info, list) def _dict(self, function, list): if list is None: list = self.listfiles() dict = {} for name in list: try: dict[name] = function(name) except (os.error, IOError): pass return dict def sumdict(self, list = None): return self.dict(self.sum, list) def sizedict(self, list = None): return self.dict(self.size, list) def mtimedict(self, list = None): return self.dict(self.mtime, list) def statdict(self, list = None): return self.dict(self.stat, list) def infodict(self, list = None): return self._dict(self.info, list) def read(self, name, offset = 0, length = -1): self.checkfile(name) f = open(name) f.seek(offset) if length == 0: data = '' elif length < 0: data = f.read() else: data = f.read(length) f.close() return data def create(self, name): self.check(name) if os.path.exists(name): self.checkfile(name) bname = name + '~' try: os.unlink(bname) except os.error: pass os.rename(name, bname) f = open(name, 'w') f.close() def write(self, name, data, offset = 0): self.checkfile(name) f = open(name, 'r+') f.seek(offset) f.write(data) f.close() def mkdir(self, name): self.check(name) os.mkdir(name, 0777) def rmdir(self, name): self.check(name) os.rmdir(name) class FSProxyServer(FSProxyLocal, server.Server): def __init__(self, address, verbose = server.VERBOSE): FSProxyLocal.__init__(self) server.Server.__init__(self, address, verbose) def _close(self): server.Server._close(self) FSProxyLocal._close(self) def _serve(self): server.Server._serve(self) # Retreat into start directory while self._dirstack: self.back() class FSProxyClient(client.Client): def __init__(self, address, verbose = client.VERBOSE): client.Client.__init__(self, address, verbose) def test(): import string import sys if sys.argv[1:]: port = string.atoi(sys.argv[1]) else: port = 4127 proxy = FSProxyServer(('', port)) proxy._serverloop() if __name__ == '__main__': test()