From 4f1a974f8f742aa5ed88ed23fc73aff0dea3750c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Wed, 23 Jun 2010 19:14:57 +0200 Subject: [PATCH] create individual files for each key. --- omf_keys/key_fs.py | 48 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/omf_keys/key_fs.py b/omf_keys/key_fs.py index 383b432..e3deadc 100644 --- a/omf_keys/key_fs.py +++ b/omf_keys/key_fs.py @@ -11,6 +11,9 @@ # Sliver has to have following ccapabilities set. # SECURE_MOUNT # BINARY_MOUNT +# +# we also depend on fuse and python-fuse packages. +# import os @@ -25,7 +28,7 @@ from fuse import Fuse fuse.fuse_python_api = (0, 2) keys_dir = "/keys" -keys_file = os.path.join(keys_dir, "all") + def read_keys(): fin = os.open("/vsys/publickeys.in", os.O_NONBLOCK | os.O_WRONLY) @@ -42,6 +45,23 @@ def read_keys(): f = os.fdopen(fout, "r") return f.read() +def all_keys(): + keys = read_keys() + + files = {} + num = 0 + for line in keys.split('\n'): + line = line.strip() + fields = line.split() + try: + name = fields[2] + files[name] = line + except: + num += 1 + files["unnamed_key%d" % num] = line + + return files + class MyStat(fuse.Stat): def __init__(self): self.st_mode = 0 @@ -65,14 +85,26 @@ class KeyFS(Fuse): if path == '/': st.st_mode = stat.S_IFDIR | 0755 st.st_nlink = 2 - else: + elif os.path.basename(path) == "all": st.st_mode = stat.S_IFREG | 0444 st.st_nlink = 1 st.st_size = len(read_keys()) + else: + filename = os.path.basename(path) + keys = all_keys() + st.st_mode = stat.S_IFREG | 0444 + st.st_nlink = 1 + try: + st.st_size = len(keys[filename]) + except: + st.st_size = 0 return st def readdir(self, path, offset): - for r in '.', '..', os.path.basename(keys_file): + files = ['.', '..', "all"] + keys = all_keys() + files.extend(keys.keys()) + for r in files: yield fuse.Direntry(r) def open(self, path, flags): @@ -81,8 +113,14 @@ class KeyFS(Fuse): return -errno.EACCES def read (self, path, size, offset): - keys = read_keys() - slen = len(keys) + if os.path.basename(path) == "all": + content = read_keys() + else: + filename = os.path.basename(path) + keys = all_keys() + content = keys[filename] + + slen = len(content) if offset < slen: if offset + size > slen: -- 2.43.0