コード例 #1
0
 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
コード例 #2
0
    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()
コード例 #3
0
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)
コード例 #4
0
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')
コード例 #5
0
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)
コード例 #6
0
    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)
コード例 #7
0
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
コード例 #8
0
"""Bastionification utility.