
Ya¸2c      s,    d  Z   d   k Z  k Z  k Z  k Z  k Z  d f  d „  ƒ  YZ " d e f d „  ƒ  YZ 0 d Z 5 d e f d „  ƒ  YZ	 ? d e i
 f d	 „  ƒ  YZ n d
 e i f d „  ƒ  YZ w d e i f d „  ƒ  YZ € d e i f d „  ƒ  YZ id „  Z e d j o €e ƒ  n d S(   s9  Restricted execution facilities.

The class RExec exports methods r_exec(), r_eval(), r_execfile(), and
r_import(), 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 ...")?)

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/python1.4/rexec.pys   FileBases   FileWrapperc     s   " & d „  Z  , d „  Z RS(   Nc   ss   & ' | |  _  ( xZ |  i d ( rJ } ) t |  | ƒ o 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/python1.4/rexec.pys   __init__c   s   , - |  i ƒ  d  S(   N(   s   selfs   flush(   s   selfs   /usr/lib/python1.4/rexec.pys   close(   s   __init__s   close(    s   /usr/lib/python1.4/rexec.pys   FileWrappersK   
def %s(self, *args):
	return apply(getattr(self.mod, self.name).%s, args)
s   FileDelegatec     sI   5 7 d „  Z  ; x2 e i d f d ; r Z < e e e f d  Uq% WRS(   Nc   s   7 8 | |  _  9 | |  _ d  S(   N(   s   mods   selfs   name(   s   selfs   mods   names   /usr/lib/python1.4/rexec.pys   __init__s   closei    (   s   __init__s   FileBases   ok_file_methodss   ms   TEMPLATE(    s   /usr/lib/python1.4/rexec.pys   FileDelegates   RHooksc     s‰   ? A d „  Z  R d „  Z V d „  Z Y d „  Z ] d „  Z ^ d „  Z _ d „  Z a d „  Z d d	 „  Z g d
 „  Z	 j d „  Z
 RS(   Nc   sÙ   A E d } F t } G | o t | d ƒ t d ƒ j o  H | d } I | d  } n J | o t | d d ƒ o K | d } L | d } n M | o N t d ‚ n O t i i	 |  | ƒ P | |  _ d  S(   Ni    i   s	   __class__s   too many arguments(   s   verboses   Nones   rexecs   argss   types   hasattrs	   TypeErrors   ihookss   Hookss   __init__s   self(   s   selfs   argss   verboses   rexecs   /usr/lib/python1.4/rexec.pys   __init__c   s   R T | |  _  d  S(   N(   s   rexecs   self(   s   selfs   rexecs   /usr/lib/python1.4/rexec.pys	   set_rexecc   s   V W |  i i | ƒ Sd  S(   N(   s   selfs   rexecs
   is_builtins   name(   s   selfs   names   /usr/lib/python1.4/rexec.pys
   is_builtinc   s,   Y Z t  | ƒ } [ |  i i | f  ƒ Sd  S(   N(   s
   __import__s   names   ms   selfs   rexecs   copy_except(   s   selfs   names   ms   /usr/lib/python1.4/rexec.pys   init_builtinc   s   ] ] t  d ‚ d  S(   Ns   don't use this(   s   SystemError(   s   selfs   names   /usr/lib/python1.4/rexec.pys   init_frozenc   s   ^ ^ t  d ‚ d  S(   Ns   don't use this(   s   SystemError(   s   selfs   argss   /usr/lib/python1.4/rexec.pys   load_sourcec   s   _ _ t  d ‚ d  S(   Ns   don't use this(   s   SystemError(   s   selfs   argss   /usr/lib/python1.4/rexec.pys   load_compiledc   s    a b |  i i | | | ƒ Sd  S(   N(   s   selfs   rexecs   load_dynamics   names   filenames   file(   s   selfs   names   filenames   files   /usr/lib/python1.4/rexec.pys   load_dynamicc   s   d e |  i i | ƒ Sd  S(   N(   s   selfs   rexecs
   add_modules   name(   s   selfs   names   /usr/lib/python1.4/rexec.pys
   add_modulec   s   g h |  i i Sd  S(   N(   s   selfs   rexecs   modules(   s   selfs   /usr/lib/python1.4/rexec.pys   modules_dictc   s   j k |  i i d i Sd  S(   Ns   sys(   s   selfs   rexecs   moduless   path(   s   selfs   /usr/lib/python1.4/rexec.pys   default_path(   s   __init__s	   set_rexecs
   is_builtins   init_builtins   init_frozens   load_sources   load_compileds   load_dynamics
   add_modules   modules_dicts   default_path(    s   /usr/lib/python1.4/rexec.pys   RHookss   RModuleLoaderc     s   n p d „  Z  RS(   Nc   sG   p q | \ } } } r t i i |  | | ƒ } s | | _
 t | 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/python1.4/rexec.pys   load_module(   s   load_module(    s   /usr/lib/python1.4/rexec.pys   RModuleLoaders   RModuleImporterc     s   w y e  d „ Z RS(   Nc   s}   y z | t j o t | d ƒ o= { t i  i | i ƒ \ } } | t i  i	 | d ƒ g } n } 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/python1.4/rexec.pys   reload(   s   Nones   reload(    s   /usr/lib/python1.4/rexec.pys   RModuleImporters   RExecc     sb  € d  Z  ‚ d  „ e e i ƒ Z † d d d d d d d d d	 d
 d d d d d d d f Z Œ 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 À d0 „  Z Å d1 „  Z Ë d2 „  Z Î d3 „  Z Ö d4 „  Z â d5 „  Z í d6 „  Z ÷ d7 „  Z ü d8 „  Z d9 „  Z 	d: „  Z d; „  Z h  h  g  d< „ Z d= „  Z d> „  Z d? „  Z %d@ „  Z 2dA „  Z :dB „  Z  ?dC „  Z! Df  e	 dD „ Z" OdE „  Z# RdF „  Z$ UdG „  Z% XdH „  Z& [dI „  Z' ^dJ „  Z( cdL dM dK „ Z) RS(N   s!   Restricted Execution environment.s   audioops   arrays   binasciis   cmaths   errnos   imageops   marshals   maths   md5s   operators   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 | ƒ |  _ ™ |  i i |  ƒ š h  |  _ › |  i	 |  _
 œ g  }  x= |  i	 d  r- } ž | t i j o Ÿ | i | ƒ n qx W  | |  _	 ¡ |  i ƒ  ¢ |  i ƒ  £ |  i ƒ  ¦ |  i ƒ  § t |  i | ƒ |  _ ¨ t |  i | ƒ |  _ d  S(   Ni    (   s   ihookss   _Verboses   __init__s   selfs   verboses   hookss   RHookss	   set_rexecs   moduless   ok_builtin_moduless   ok_dynamic_moduless   lists   mnames   syss   builtin_module_namess   appends   set_trusted_paths   make_builtins   make_initial_moduless   make_syss   RModuleLoaders   loaders   RModuleImporters   importer(   s   selfs   hookss   verboses   lists   mnames   /usr/lib/python1.4/rexec.pys   __init__i    c   s%   ª ­ t  t i i t i ƒ |  _ d  S(   N(   s   filters   oss   paths   isabss   syss   selfs   trusted_path(   s   selfs   /usr/lib/python1.4/rexec.pys   set_trusted_pathc   s•   ¯ ° | |  i j o ± t d | ‚ n ² t i i | ƒ o ³ t i | } n" µ k } ¶ | i	 | | | ƒ } · |  i | g  ƒ } ¸ | Sd  S(   Ns   untrusted dynamic module: %s(   s   names   selfs   ok_dynamic_moduless   ImportErrors   syss   moduless   has_keys   srcs   imps   load_dynamics   filenames   files   copy_excepts   dst(   s   selfs   names   filenames   files   srcs   imps   dsts   /usr/lib/python1.4/rexec.pys   load_dynamicc   s!   º » |  i ƒ  ¼ |  i ƒ  d  S(   N(   s   selfs	   make_mains   make_osname(   s   selfs   /usr/lib/python1.4/rexec.pys   make_initial_modulesc   s   À Á | |  i j Sd  S(   N(   s   mnames   selfs   ok_builtin_modules(   s   selfs   mnames   /usr/lib/python1.4/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/python1.4/rexec.pys   make_builtinc   s   Ë Ì |  i d ƒ } d  S(   Ns   __main__(   s   selfs
   add_modules   m(   s   selfs   ms   /usr/lib/python1.4/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/python1.4/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/python1.4/rexec.pys   make_sysc   s§   â ã |  i | ƒ } ä x5 t | ƒ d ä r" } å t | | t | | ƒ ƒ q' Wæ xF | d æ r9 } ç y è t	 | | ƒ Wn é t
 j
 o
 ê n Xq\ Wë | Sd  S(   Ni    (   s   selfs	   copy_nones   srcs   dsts   dirs   names   setattrs   getattrs
   exceptionss   delattrs   AttributeError(   s   selfs   srcs
   exceptionss   dsts   names   /usr/lib/python1.4/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/python1.4/rexec.pys	   copy_onlyc   s   ÷ ø |  i | i ƒ Sd  S(   N(   s   selfs
   add_modules   srcs   __name__(   s   selfs   srcs   /usr/lib/python1.4/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/python1.4/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/python1.4/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/python1.4/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/python1.4/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/python1.4/rexec.pys   r_importc   s   |  i i | ƒ Sd  S(   N(   s   selfs   importers   reloads   m(   s   selfs   ms   /usr/lib/python1.4/rexec.pys   r_reloadc   s   |  i i | ƒ Sd  S(   N(   s   selfs   importers   unloads   m(   s   selfs   ms   /usr/lib/python1.4/rexec.pys   r_unloadc   s•   |  i d } t | d ƒ |  _ t | d ƒ |  _  t | d ƒ |  _ !t t i	 ƒ |  _
 "t t i ƒ |  _ #t t i ƒ |  _ d  S(   Ns   syss   stdins   stdouts   stderr(   s   selfs   moduless   ss   FileDelegates   delegate_stdins   delegate_stdouts   delegate_stderrs   FileWrappers   syss   stdins   restricted_stdins   stdouts   restricted_stdouts   stderrs   restricted_stderr(   s   selfs   ss   /usr/lib/python1.4/rexec.pys   make_delegate_filesc   s»   %&t  |  d ƒ o '|  i ƒ  n (t  |  d ƒ o )|  i ƒ  n *|  i d } +|  i | _ ,|  i | _	 -|  i
 | _ .|  i t _ /|  i t _	 0|  i t _ d  S(   Ns
   save_stdins   delegate_stdins   sys(   s   hasattrs   selfs
   save_filess   make_delegate_filess   moduless   ss   restricted_stdins   stdins   restricted_stdouts   stdouts   restricted_stderrs   stderrs   delegate_stdins   syss   delegate_stdouts   delegate_stderr(   s   selfs   ss   /usr/lib/python1.4/rexec.pys	   set_filesc   sQ   23|  i ƒ  4|  i d } 5| i |  _ 6| i |  _ 7| i |  _	 d  S(   Ns   sys(
   s   selfs   restore_filess   moduless   ss   stdins   restricted_stdins   stdouts   restricted_stdouts   stderrs   restricted_stderr(   s   selfs   ss   /usr/lib/python1.4/rexec.pys   reset_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/python1.4/rexec.pys
   save_filesc   s4   ?@|  i t _ A|  i t _ B|  i t _ d  S(   N(   s   selfs
   save_stdins   syss   stdins   save_stdouts   stdouts   save_stderrs   stderr(   s   selfs   /usr/lib/python1.4/rexec.pys   restore_filesc   sq   DE|  i ƒ  FzF G|  i ƒ  H| o It | | | ƒ } n Kt | | ƒ } Wd  LM|  i ƒ  Xd  S(   N(	   s   selfs
   save_filess	   set_filess   kws   applys   funcs   argss   rs   restore_files(   s   selfs   funcs   argss   kws   rs   /usr/lib/python1.4/rexec.pys   s_applyc   s   OP|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_execs   args(   s   selfs   argss   /usr/lib/python1.4/rexec.pys   s_execc   s   RS|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_evals   args(   s   selfs   argss   /usr/lib/python1.4/rexec.pys   s_evalc   s   UV|  i |  i | ƒ d  S(   N(   s   selfs   s_applys
   r_execfiles   args(   s   selfs   argss   /usr/lib/python1.4/rexec.pys
   s_execfilec   s   XY|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_imports   args(   s   selfs   argss   /usr/lib/python1.4/rexec.pys   s_importc   s   [\|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_reloads   args(   s   selfs   argss   /usr/lib/python1.4/rexec.pys   s_reloadc   s   ^_|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_unloads   args(   s   selfs   argss   /usr/lib/python1.4/rexec.pys   s_unloadc   s@   cd| d d f j o et d ‚ n f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/python1.4/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   set_trusted_paths   load_dynamics   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   make_delegate_filess	   set_filess   reset_filess
   save_filess   restore_filess   s_applys   s_execs   s_evals
   s_execfiles   s_imports   s_reloads   s_unloads   r_open(    s   /usr/lib/python1.4/rexec.pys   RExecc    s.  ijk  }  kt d d t i d j ƒ } ld Gt i GHmt i GHnxß nd oÔ oyŒ py qt d ƒ } Wn rt	 j
 o sHtPn Xu| o | d d j o6 v| d } wt
 | d	 d
 ƒ } x| i | ƒ n Wn> yt j
 o } zt i | ƒ n {||  i ƒ  n XqK Wd  S(   Ns   verboses   -vi   s   *** RESTRICTED *** Pythons   >>> i    s   #s   
s   <stdin>s   single(   s	   tracebacks   RExecs   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/python1.4/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/python1.4/rexec.pys   ?