#!/usr/bin/python # A FUSE filesystem implementation to provide a file interface for # vsys_publickeys VSYS script. To be used by OMF Resource Controller. import os import stat import errno import fuse import sys from fuse import Fuse fuse.fuse_python_api = (0, 2) keys_dir = "/keys" keys_file = os.path.join(keys_dir, "all") # TODO: for Giovanni def read_keys(): return "reading PLC users' public keys\n" class MyStat(fuse.Stat): def __init__(self): self.st_mode = 0 self.st_ino = 0 self.st_dev = 0 self.st_nlink = 0 self.st_uid = 0 self.st_gid = 0 self.st_size = 0 self.st_atime = 0 self.st_mtime = 0 self.st_ctime = 0 class KeyFS(Fuse): def __init__(self, *args, **kw): Fuse.__init__(self, *args, **kw) def getattr(self, path): st = MyStat() if path == '/': st.st_mode = stat.S_IFDIR | 0755 st.st_nlink = 2 else: st.st_mode = stat.S_IFREG | 0444 st.st_nlink = 1 st.st_size = len(read_keys()) return st def readdir(self, path, offset): for r in '.', '..', os.path.basename(keys_file): yield fuse.Direntry(r) def open(self, path, flags): accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR if (flags & accmode) != os.O_RDONLY: return -errno.EACCES def read (self, path, size, offset): keys = read_keys() slen = len(keys) if offset < slen: if offset + size > slen: size = slen - offset buf = keys[offset:offset+size] else: buf = '' return buf if __name__ == '__main__': fs = KeyFS() fs.multithreaded = 0 fs.parse(values=fs, errex=1) try: if fs.fuse_args.mount_expected(): os.chdir("/") except OSError: sys.stderr.write("can't enter root of underlying filesystem\n") sys.exit(1) fs.main()