.
52c      s,    d  Z   d   k Z  k Z  k Z  k Z  k Z  d f  d     YZ # d e f d     YZ / d Z 4 d e f d     YZ	 > d e i
 f d	     YZ \ d
 e i f d     YZ e d e i f d     YZ n d e i f d     YZ %d   Z ;e d j o <e   n d S(   s  Restricted execution facilities.

The class RExec exports methods rexec(), reval(), rexecfile(), and
import_module(), which correspond roughly to the built-in operations
exec, eval(), execfile() and import, but executing the code in an
environment that only exposes those built-in operations that are
deemed safe.  To this end, a modest collection of 'fake' modules is
created which mimics the standard modules by the same names.  It is a
policy decision which built-in modules and operations are made
available; this module provides a reasonable default, but derived
classes can change the policies e.g. by overriding or extending class
variables like ok_builtin_modules or methods like make_sys().

XXX To do:
- r_open should allow writing tmp dir
- r_exec etc. with explicit globals/locals? (Use rexec("exec ... in ...")?)
- r_reload should reload from same location (that's one for ihooks?)

s   FileBasec     s,     d d d d d d d d d	 d
 f
 Z  RS(   Ns   filenos   flushs   isattys   reads   readlines	   readliness   seeks   tells   writes
   writelines(   s   ok_file_methods(    s   /usr/lib/python/rexec.pys   FileBases   FileWrapperc     s   # % d   Z  + d   Z RS(   Nc   sc   % & | |  _  ' xJ |  i d ' r: } ( t |  |  o  ) t |  | t | |   n q Wd  S(   Ni    (   s   fs   selfs   ok_file_methodss   ms   hasattrs   setattrs   getattr(   s   selfs   fs   ms   /usr/lib/python/rexec.pys   __init__c   s   + , t  i   d  S(   N(   s   selfs   flush(   s   fs   /usr/lib/python/rexec.pys   close(   s   __init__s   close(    s   /usr/lib/python/rexec.pys   FileWrappersK   
def %s(self, *args):
	return apply(getattr(self.mod, self.name).%s, args)
s   FileDelegatec     sI   4 6 d   Z  : x2 e i d f d : r Z ; e e e f d  Uq% WRS(   Nc   s   6 7 | |  _  8 | |  _ d  S(   N(   s   mods   selfs   name(   s   selfs   mods   names   /usr/lib/python/rexec.pys   __init__s   closei    (   s   __init__s   FileBases   ok_file_methodss   ms   TEMPLATE(    s   /usr/lib/python/rexec.pys   FileDelegates   RHooksc     s   > @ d d  Z  D d   Z G d   Z K d   Z L d   Z M d   Z O d   Z R d	   Z U d
   Z X d   Z	 RS(   Nc   s)   @ A t  i i |  |  B | |  _ d  S(   N(   s   ihookss   Hookss   __init__s   selfs   verboses   rexec(   s   selfs   rexecs   verboses   /usr/lib/python/rexec.pys   __init__i    c   s   D E |  i i |  Sd  S(   N(   s   selfs   rexecs
   is_builtins   name(   s   selfs   names   /usr/lib/python/rexec.pys
   is_builtinc   s,   G H t  |  } I |  i i | f   Sd  S(   N(   s
   __import__s   names   ms   selfs   rexecs   copy_except(   s   selfs   names   ms   /usr/lib/python/rexec.pys   init_builtinc   s   K K t  d  d  S(   Ns   don't use this(   s   SystemError(   s   selfs   names   /usr/lib/python/rexec.pys   init_frozenc   s   L L t  d  d  S(   Ns   don't use this(   s   SystemError(   s   selfs   argss   /usr/lib/python/rexec.pys   load_sourcec   s   M M t  d  d  S(   Ns   don't use this(   s   SystemError(   s   selfs   argss   /usr/lib/python/rexec.pys   load_compiledc   s   O P t  d  d  S(   Ns0   import of dynamically loaded modules not allowed(   s   ImportError(   s   selfs   argss   /usr/lib/python/rexec.pys   load_dynamicc   s   R S |  i i |  Sd  S(   N(   s   selfs   rexecs
   add_modules   name(   s   selfs   names   /usr/lib/python/rexec.pys
   add_modulec   s   U V |  i i Sd  S(   N(   s   selfs   rexecs   modules(   s   selfs   /usr/lib/python/rexec.pys   modules_dictc   s   X Y |  i i d i Sd  S(   Ns   sys(   s   selfs   rexecs   moduless   path(   s   selfs   /usr/lib/python/rexec.pys   default_path(
   s   __init__s
   is_builtins   init_builtins   init_frozens   load_sources   load_compileds   load_dynamics
   add_modules   modules_dicts   default_path(    s   /usr/lib/python/rexec.pys   RHookss   RModuleLoaderc     s   \ ^ d   Z  RS(   Nc   sG   ^ _ | \ } } } ` t i i |  | |  } a | | _
 b | Sd  S(   N(   s   stuffs   files   filenames   infos   ihookss   FancyModuleLoaders   load_modules   selfs   names   ms   __filename__(   s   selfs   names   stuffs   files   filenames   infos   ms   /usr/lib/python/rexec.pys   load_module(   s   load_module(    s   /usr/lib/python/rexec.pys   RModuleLoaders   RModuleImporterc     s   e g e  d  Z RS(   Nc   s}   g h | t j o t | d  o= i t i  i | i  \ } } j t i  i	 | d  g } n k t
 i i |  | |  Sd  S(   Ns   __filename__s    (   s   paths   Nones   hasattrs   modules   oss   splits   __filename__s   heads   tails   joins   ihookss   ModuleImporters   reloads   self(   s   selfs   modules   paths   heads   tails   /usr/lib/python/rexec.pys   reload(   s   Nones   reload(    s   /usr/lib/python/rexec.pys   RModuleImporters   RExecc     s#  n d  Z  p d  r e e i  Z t d d d d d d d d d	 d
 d d d d f Z y d d d d d d d d d d d d d d d f Z } d d d  d! d" d# d$ f Z  d% d& d' f Z  e	 d) d(  Z
  d*   Z  d+   Z  d,   Z £ d-   Z ¦ d.   Z ® d/   Z ŗ d0   Z Į d1   Z Ė d2   Z Š d3   Z Ł d4   Z Ż d5   Z į d6   Z å h  h  g  d7  Z č d8   Z ė d9   Z š d:   Z ł d;   Z ž d<   Z d=   Z d>   Z d?   Z  d@   Z! dA   Z" dB   Z# dC   Z$ dE dF dD  Z% RS(G   s!   Restricted Execution environment.s   arrays   binasciis   audioops   imageops   marshals   maths   md5s   parsers   regexs   rotors   selects   strops   structs   times   errors   fstats   listdirs   lstats   readlinks   stats   timess   unames   getpids   getppids   getcwds   getuids   getgids   geteuids   getegids   ps1s   ps2s	   copyrights   versions   platforms   exits   maxints   opens   reloads
   __import__c   sĄ     t  i i |  |   | p t |  |  |  _  h  |  _  t t	 t
 d   |  i   |  _  |  i    |  i    |  i    t |  i |  |  _  t |  i |  |  _ d  S(   Nc   s    |  t i j S(   N(   s   mnames   syss   builtin_module_names(   s   mnames   /usr/lib/python/rexec.pys   <lambda>(   s   ihookss   _Verboses   __init__s   selfs   verboses   hookss   RHookss   moduless   maps   Nones   filters   ok_builtin_moduless   make_builtins   make_initial_moduless   make_syss   RModuleLoaders   loaders   RModuleImporters   importer(   s   selfs   hookss   verboses   /usr/lib/python/rexec.pys   __init__i    c   s!     |  i    |  i   d  S(   N(   s   selfs	   make_mains   make_osname(   s   selfs   /usr/lib/python/rexec.pys   make_initial_modulesc   s     | |  i j Sd  S(   N(   s   mnames   selfs   ok_builtin_modules(   s   selfs   mnames   /usr/lib/python/rexec.pys
   is_builtinc   sL     |  i t |  i  }  |  i | _   |  i | _ ” |  i	 | _
 d  S(   N(   s   selfs   copy_excepts   __builtin__s   nok_builtin_namess   ms   r_imports
   __import__s   r_reloads   reloads   r_opens   open(   s   selfs   ms   /usr/lib/python/rexec.pys   make_builtinc   s   £ ¤ |  i d  } d  S(   Ns   __main__(   s   selfs
   add_modules   m(   s   selfs   ms   /usr/lib/python/rexec.pys	   make_mainc   s   ¦ § t  i } Ø t |  } © |  i | |  i  } Ŗ h  | _	 } « x/ t  i	 i   d « r \ } } ¬ | | | <q[ Wd  S(   Ni    (   s   oss   names   osnames
   __import__s   srcs   selfs	   copy_onlys   ok_posix_namess   dsts   environs   es   itemss   keys   value(   s   selfs   osnames   srcs   dsts   es   keys   values   /usr/lib/python/rexec.pys   make_osnamec   s   ® Æ |  i t |  i  } ° |  i | _ ± d g | _ ² t t |  i	  | _
 ³ |  i d } “ |  i i   |  i | _ ¶ | i i   d  S(   Ns
   RESTRICTEDs   sys(   s   selfs	   copy_onlys   syss   ok_sys_namess   ms   moduless   argvs   maps   Nones   ok_paths   paths   keyss   ok_builtin_moduless   builtin_module_namess   sort(   s   selfs   ms   /usr/lib/python/rexec.pys   make_sysc   so   ŗ » |  i |  } ¼ xI t |  d ¼ r6 } ½ | | j o  ¾ t | | t | |   n q' Wæ | Sd  S(   Ni    (	   s   selfs	   copy_nones   srcs   dsts   dirs   names
   exceptionss   setattrs   getattr(   s   selfs   srcs
   exceptionss   dsts   names   /usr/lib/python/rexec.pys   copy_exceptc   s   Į Ā |  i |  } Ć x^ | d Ć rQ } Ä y Å t | |  } Wn Ę t j
 o Ē q! n XČ t	 | | |  q! WÉ | Sd  S(   Ni    (
   s   selfs	   copy_nones   srcs   dsts   namess   names   getattrs   values   AttributeErrors   setattr(   s   selfs   srcs   namess   dsts   names   values   /usr/lib/python/rexec.pys	   copy_onlyc   s   Ė Ģ |  i | i  Sd  S(   N(   s   selfs
   add_modules   srcs   __name__(   s   selfs   srcs   /usr/lib/python/rexec.pys	   copy_nonec   si   Š Ń |  i i |  o Ņ |  i | Sn Ó |  i i |  |  i | <} Ō |  i d | _ Õ | Sd  S(   Ns   __builtin__(   s   selfs   moduless   has_keys   mnames   hookss
   new_modules   ms   __builtins__(   s   selfs   mnames   ms   /usr/lib/python/rexec.pys
   add_modulec   s'   Ł Ś |  i d  } Ū | | i Ud  S(   Ns   __main__(   s   selfs
   add_modules   ms   codes   __dict__(   s   selfs   codes   ms   /usr/lib/python/rexec.pys   r_execc   s,   Ż Ž |  i d  } ß t | | i  Sd  S(   Ns   __main__(   s   selfs
   add_modules   ms   evals   codes   __dict__(   s   selfs   codes   ms   /usr/lib/python/rexec.pys   r_evalc   s,   į ā |  i d  } ć t | | i  Sd  S(   Ns   __main__(   s   selfs
   add_modules   ms   execfiles   files   __dict__(   s   selfs   files   ms   /usr/lib/python/rexec.pys
   r_execfilec   s#   å ę |  i i | | | |  Sd  S(   N(   s   selfs   importers   import_modules   mnames   globalss   localss   fromlist(   s   selfs   mnames   globalss   localss   fromlists   /usr/lib/python/rexec.pys   r_importc   s   č é |  i i |  Sd  S(   N(   s   selfs   importers   reloads   m(   s   selfs   ms   /usr/lib/python/rexec.pys   r_reloadc   s   ė ģ |  i i |  Sd  S(   N(   s   selfs   importers   unloads   m(   s   selfs   ms   /usr/lib/python/rexec.pys   r_unloadc   s   š ń |  i d } ņ t t i  | _ ó t t i  | _ ō t t i  | _ õ t | d  t _ ö t | d  t _ ÷ t | d  t _ d  S(   Ns   syss   stdins   stdouts   stderr(	   s   selfs   moduless   ss   FileWrappers   syss   stdins   stdouts   stderrs   FileDelegate(   s   selfs   ss   /usr/lib/python/rexec.pys	   set_filesc   s4   ł ś t  i |  _ ū t  i |  _ ü t  i |  _ d  S(   N(   s   syss   stdins   selfs
   save_stdins   stdouts   save_stdouts   stderrs   save_stderr(   s   selfs   /usr/lib/python/rexec.pys
   save_filesc   s4   ž ’ t  i t _  t  i t _ t  i t _ d  S(   N(   s   selfs
   save_sydins   syss   stdins   save_stdouts   stdouts   save_stderrs   stderr(   s   filess   /usr/lib/python/rexec.pys   restore_filesc   sQ   |  i   z& |  i   t | | |  } Wd  	|  i   Xd  S(   N(	   s   selfs
   save_filess	   set_filess   applys   funcs   argss   kws   rs   restore_files(   s   selfs   funcs   argss   kws   rs   /usr/lib/python/rexec.pys   s_applyc   s   |  i |  i |  d  S(   N(   s   selfs   s_applys   r_execs   args(   s   selfs   argss   /usr/lib/python/rexec.pys   s_execc   s   |  i |  i |  d  S(   N(   s   selfs   s_applys   r_evals   args(   s   selfs   argss   /usr/lib/python/rexec.pys   s_evalc   s   |  i |  i |  d  S(   N(   s   selfs   s_applys
   r_execfiles   args(   s   selfs   argss   /usr/lib/python/rexec.pys
   s_execfilec   s   |  i |  i |  d  S(   N(   s   selfs   s_applys   r_imports   args(   s   selfs   argss   /usr/lib/python/rexec.pys   s_importc   s   |  i |  i |  d  S(   N(   s   selfs   s_applys   r_reloads   args(   s   selfs   argss   /usr/lib/python/rexec.pys   s_reloadc   s   |  i |  i |  d  S(   N(   s   selfs   s_applys   r_unloads   args(   s   selfs   argss   /usr/lib/python/rexec.pys   s_unloadc   s@    | d d f j o !t d  n "t | | |  Sd  S(   Ns   rs   rbs/   can't open files for writing in restricted mode(   s   modes   IOErrors   opens   files   buf(   s   selfs   files   modes   bufs   /usr/lib/python/rexec.pys   r_opens   ri   (&   s   __doc__s   tuples   syss   paths   ok_paths   ok_builtin_moduless   ok_posix_namess   ok_sys_namess   nok_builtin_namess   Nones   __init__s   make_initial_moduless
   is_builtins   make_builtins	   make_mains   make_osnames   make_syss   copy_excepts	   copy_onlys	   copy_nones
   add_modules   r_execs   r_evals
   r_execfiles   r_imports   r_reloads   r_unloads	   set_filess
   save_filess   restore_filess   s_applys   s_execs   s_evals
   s_execfiles   s_imports   s_reloads   s_unloads   r_open(    s   /usr/lib/python/rexec.pys   RExecc    s.  %&k  }  't t d t i d j  } (d Gt i GH)t i GH*xß *d oŌ +y ,y -t d  } Wn .t
 j
 o /H0Pn X1| o | d d j o6 2| d } 3t | d d	  } 4| i |  n Wn> 5t j
 o } 6t i |  n 78|  i   n XqK Wd  S(
   Ns   -vi   s   *** RESTRICTED *** Pythons   >>> i    s   #s   
s   <stdin>s   single(   s	   tracebacks   RExecs   Nones   syss   argvs   rs   versions	   copyrights	   raw_inputs   ss   EOFErrors   compiles   cs   r_execs
   SystemExits   ns   exits	   print_exc(   s	   tracebacks   rs   ss   cs   ns   /usr/lib/python/rexec.pys   tests   __main__N(   s   __doc__s   syss   __builtin__s   oss   marshals   ihookss   FileBases   FileWrappers   TEMPLATEs   FileDelegates   Hookss   RHookss   FancyModuleLoaders   RModuleLoaders   ModuleImporters   RModuleImporters   _Verboses   RExecs   tests   __name__(    s   /usr/lib/python/rexec.pys   ?