From ded63104b0c0e3977874142c37c6768381f468d8 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sun, 13 Dec 2015 17:40:25 -0800 Subject: Initial import --- shim.py | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 shim.py diff --git a/shim.py b/shim.py new file mode 100644 index 0000000..aa74f92 --- /dev/null +++ b/shim.py @@ -0,0 +1,105 @@ +import re +import os +import atexit +import shutil +import subprocess +import __builtin__ +from cStringIO import StringIO + +FILES = [] + +_fdopen = os.fdopen +_oopen = os.open +_open = __builtin__.open +def write_files(): + os.open = _oopen + os.fdopen = _fdopen + __builtin__.open = _open + + for file in FILES: + if not file._safe_name(): + continue + _open(file._safe_name(), 'w').write(file.buffer.getvalue()) + + +atexit.register(write_files) + + +class FakeOpenFile: + + def __init__(self, name=None): + self.name = name + self.buffer = StringIO() + FILES.append(self) + + def _safe_name(self): + name = self.name + if hasattr(self.name, 'name'): + name = self.name.name + if isinstance(name, int): + return None + return str(name).replace("/", "__") + + def readline(self): + return "Ubuntu" + + def writelines(self, lines): + self.buffer.write(lines) + + def write(self, lines): + self.buffer.write(lines) + + def read(self): + return "" + + def close(self): + pass + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + pass + + +shutil.copyfile = lambda x, y: False + +def patched_call(*args, **kwargs): + print "CALL: {!r} {!r}".format(args, kwargs) + return 0 + +subprocess.call = patched_call + +os.geteuid = lambda: 0 + +def patched_system(*args, **kwargs): + print "SYSTEM: {!r} {!r}".format(args, kwargs) + +os.system = patched_system + +_old_open = __builtin__.open +def patched_open(name): + def opener(*args, **kwargs): + if args[0] == os.devnull: + return _old_open(os.devnull) + + print "{}: {!r} {!r}".format(name, args, kwargs) + + return FakeOpenFile(args[0]) + return opener + +os.open = patched_open("OS.OPEN") +os.fdopen = patched_open("OS.FDOPEN") +__builtin__.open = patched_open("OPEN") + +def patched_mkdir(*args, **kwargs): + print "MKDIR: {!r} {!r}".format(args, kwargs) + +os.mkdir = patched_mkdir + +def patched_raw_input(prompt): + print prompt + value = re.findall('\[([^\]]+)\]', prompt)[0] + return value if value != 'Y' else 'n' + +__builtin__.raw_input = patched_raw_input -- cgit v1.2.3