release security checking for 'unrestricted_objects'
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1877 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
2206d795a1
commit
c9987844b3
1 changed files with 38 additions and 2 deletions
|
@ -24,16 +24,52 @@ from cStringIO import StringIO
|
||||||
from persistent import Persistent
|
from persistent import Persistent
|
||||||
from zope.proxy import removeAllProxies
|
from zope.proxy import removeAllProxies
|
||||||
from zope.security.untrustedpython.builtins import SafeBuiltins
|
from zope.security.untrustedpython.builtins import SafeBuiltins
|
||||||
from zope.security.untrustedpython.rcompile import compile
|
#from zope.security.untrustedpython.rcompile import compile
|
||||||
from zope.traversing.api import getParent, getPath
|
from zope.traversing.api import getParent, getPath
|
||||||
from zope.app.container.contained import Contained
|
from zope.app.container.contained import Contained
|
||||||
#from zope.app.interpreter.interfaces import IInterpreter
|
|
||||||
from zope.interface import implements
|
from zope.interface import implements
|
||||||
from zope.app.i18n import ZopeMessageFactory as _
|
from zope.app.i18n import ZopeMessageFactory as _
|
||||||
|
|
||||||
from cybertools.pyscript.interfaces import IPythonScript, IScriptContainer
|
from cybertools.pyscript.interfaces import IPythonScript, IScriptContainer
|
||||||
|
|
||||||
|
|
||||||
|
import compiler.pycodegen
|
||||||
|
import RestrictedPython.RCompile
|
||||||
|
from RestrictedPython.SelectCompiler import ast
|
||||||
|
from zope.security.untrustedpython.rcompile import RestrictionMutator as BaseRM
|
||||||
|
|
||||||
|
unrestricted_objects = ('rpy', 'r')
|
||||||
|
|
||||||
|
def compile(text, filename, mode):
|
||||||
|
if not isinstance(text, basestring):
|
||||||
|
raise TypeError("Compiled source must be string")
|
||||||
|
gen = RExpression(text, str(filename), mode)
|
||||||
|
gen.compile()
|
||||||
|
return gen.getCode()
|
||||||
|
|
||||||
|
class RExpression(RestrictedPython.RCompile.RestrictedCompileMode):
|
||||||
|
|
||||||
|
CodeGeneratorClass = compiler.pycodegen.ExpressionCodeGenerator
|
||||||
|
|
||||||
|
def __init__(self, source, filename, mode = "eval"):
|
||||||
|
self.mode = mode
|
||||||
|
RestrictedPython.RCompile.RestrictedCompileMode.__init__(
|
||||||
|
self, source, filename)
|
||||||
|
self.rm = RestrictionMutator()
|
||||||
|
|
||||||
|
class RestrictionMutator(BaseRM):
|
||||||
|
|
||||||
|
unrestricted_objects = unrestricted_objects
|
||||||
|
|
||||||
|
def visitGetattr(self, node, walker):
|
||||||
|
_getattr_name = ast.Name("getattr")
|
||||||
|
node = walker.defaultVisitNode(node)
|
||||||
|
if node.expr.name in self.unrestricted_objects:
|
||||||
|
return node # no protection
|
||||||
|
return ast.CallFunc(_getattr_name,
|
||||||
|
[node.expr, ast.Const(node.attrname)])
|
||||||
|
|
||||||
|
|
||||||
class PythonScript(Contained, Persistent):
|
class PythonScript(Contained, Persistent):
|
||||||
"""Persistent Python Page - Content Type
|
"""Persistent Python Page - Content Type
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue