def __init__(self): self.cells = {} # {(x, y): cell, ...} self.rexec = rexec.RExec() m = self.rexec.add_module('__main__') m.cell = self.cellvalue m.cells = self.multicellvalue m.sum = sum
def continue_request(self, request, stdin): temp_files = stdin, StringIO.StringIO(), StringIO.StringIO() old_files = sys.stdin, sys.stdout, sys.stderr if self.restricted: r = rexec.RExec() try: sys.request = request sys.stdin, sys.stdout, sys.stderr = temp_files try: if self.restricted: r.s_execfile(request.script_filename) else: execfile(request.script_filename) request.reply_code = 200 except: request.reply_code = 500 self.exceptions.increment() finally: sys.stdin, sys.stdout, sys.stderr = old_files del sys.request i, o, e = temp_files if request.reply_code != 200: s = e.getvalue() else: s = o.getvalue() request['Content-Length'] = len(s) request.push(s) request.done()
def _test(): """Test the Bastion() function.""" class Original: def __init__(self): self.sum = 0 def add(self, n): self._add(n) def _add(self, n): self.sum = self.sum + n def total(self): return self.sum o = Original() b = Bastion(o) testcode = 'if 1:\n b.add(81)\n b.add(18)\n print "b.total() =", b.total()\n try:\n print "b.sum =", b.sum,\n except:\n print "inaccessible"\n else:\n print "accessible"\n try:\n print "b._add =", b._add,\n except:\n print "inaccessible"\n else:\n print "accessible"\n try:\n print "b._get_.func_defaults =", map(type, b._get_.func_defaults),\n except:\n print "inaccessible"\n else:\n print "accessible"\n \n' exec testcode print '====================', 'Using rexec:', '====================' import rexec r = rexec.RExec() m = r.add_module('__main__') m.b = b r.r_exec(testcode)
class TrickList: def __init__(self): self._tricklist = [] # [(instance, callmask, signalmask)][id] self._trick_names = {} # { name : id } self._tricklist_pending = [] # [(trickname, trickarg, command)] self._loading_trick = 0 # == 1 while load_trick() running (no recursion) # this hides the trick to pid, so it will be skipped when processing calls/signals def disable_trick(self, trickname, pid): try: id = self._trick_names[trickname] except KeyError: sys.exit("Can't disable %s: no such a trick" % trickname) self._tricklist[id][0].disable(pid) def enable_trick(self, trickname, pid): try: id = self._trick_names[trickname] except KeyError: sys.exit("Can't enable %s: no such a trick" % trickname) self._tricklist[id][0].enable(pid) def get_tricklist(self): return self._tricklist def load_trick(self, trickname, trickarg, command): if self._loading_trick: self._tricklist_pending.append((trickname, trickarg, command)) return None self._loading_trick = 1 # disalow loading other tricks s = string.split(trickarg, ':', 1) trick = s[0] if len(s) > 1 and s[1] != "": trickarg = s[1] else: trickarg = None if not re.match(r'^\w+$', trick): sys.exit("bad trick name '%s'" % trick) trickmodule = trick + "Trick" try: exec 'import ' + trickmodule except ImportError, e: sys.exit("error while importing %s [%s]" % (trickmodule, e.args)) if trickarg: r = rexec.RExec() try: r.r_exec(trickarg) except SyntaxError, e: sys.exit("syntax error in '%s' args [%s]" % (trick, e.args)) r.r_exec('args = locals().copy()\n' 'for k in args.keys():\n' ' if k[0] == "_":\n' ' del args[k]\n') trickarg = r.r_eval('args')
def _test(): """Test the Bastion() function.""" class Original: def __init__(self): self.sum = 0 def add(self, n): self._add(n) def _add(self, n): self.sum = self.sum + n def total(self): return self.sum o = Original() b = Bastion(o) testcode = """if 1: b.add(81) b.add(18) print "b.total() =", b.total() try: print "b.sum =", b.sum, except: print "inaccessible" else: print "accessible" try: print "b._add =", b._add, except: print "inaccessible" else: print "accessible" try: print "b._get_.func_defaults =", map(type, b._get_.func_defaults), except: print "inaccessible" else: print "accessible" \n""" exec testcode print '=' * 20, "Using rexec:", '=' * 20 import rexec r = rexec.RExec() m = r.add_module('__main__') m.b = b r.r_exec(testcode)
def __init__(self): """Create the Web browser GUI""" Frame.__init__(self) Pmw.initialise() self.pack(expand=YES, fill=BOTH) self.master.title("Simple Web Browser") self.master.geometry("400x300") self.address = Entry(self) self.address.pack(fill=X, padx=5, pady=5) self.address.bind("<Return>", self.getPage) self.contents = Pmw.ScrolledText(self, text_state=DISABLED) self.contents.pack(expand=YES, fill=BOTH, padx=5, pady=5) self.rexec = rexec.RExec() self.module = self.rexec.add_module("__main__") self.environment = self.module.__dict__ self.environment["browser"] = Bastion.Bastion(self)
import rexec r = rexec.RExec() print(r.r_eval("1+2+3")) print(r.r_eval("__import__('os').remove('file')")) ## 6 ## Traceback (innermost last): ## File "rexec-example-1.py", line 5, in ? ## print r.r_eval("__import__('os').remove('file')") ## File "/usr/local/lib/python1.5/rexec.py", line 257, in r_eval ## return eval(code, m.__dict__) ## File "<string>", line 0, in ? ## AttributeError: remove
"""Bastionification utility.