1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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
|