™N
êu¦9c       s    d  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
 o e i Z p e i Z s d
 e i f d „  ƒ  YZ fd „  Z že d j o Ÿe i 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.5/site-packages/rexec.pys   FileBase s   s   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.5/site-packages/rexec.pys   __init__% s
    	$c    s   + , |  i ƒ  d  S(   N(   s   selfs   flush(   s   selfs)   /usr/lib/python1.5/site-packages/rexec.pys   close+ s   (   s   __init__s   close(    s)   /usr/lib/python1.5/site-packages/rexec.pys   FileWrapper! s   sR   
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/python1.5/site-packages/rexec.pys   __init__6 s   s   closei    (   s   __init__s   FileBases   ok_file_methodss   ms   TEMPLATE(    s)   /usr/lib/python1.5/site-packages/rexec.pys   FileDelegate4 s    	s   RHooksc      s•   > @ d „  Z  Q d „  Z U d „  Z X d „  Z \ d „  Z ] d „  Z ^ d „  Z _ d „  Z a d	 „  Z d d
 „  Z	 g d „  Z
 j d „  Z RS(   Nc    sÙ   @ D d } E t } F | o t | d ƒ t d ƒ j o  G | d } H | d  } n I | o t | d d ƒ o J | d } K | d } n L | o M t d ‚ n N t i i	 |  | ƒ O | |  _ 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.5/site-packages/rexec.pys   __init__@ s   		(
c    s   Q S | |  _  d  S(   N(   s   rexecs   self(   s   selfs   rexecs)   /usr/lib/python1.5/site-packages/rexec.pys	   set_rexecQ s   c    s   U V |  i i | ƒ Sd  S(   N(   s   selfs   rexecs
   is_builtins   name(   s   selfs   names)   /usr/lib/python1.5/site-packages/rexec.pys
   is_builtinU s   c    s,   X Y t  | ƒ } Z |  i i | f  ƒ Sd  S(   N(   s
   __import__s   names   ms   selfs   rexecs   copy_except(   s   selfs   names   ms)   /usr/lib/python1.5/site-packages/rexec.pys   init_builtinX s   c    s   \ \ t  d ‚ d  S(   Ns   don't use this(   s   SystemError(   s   selfs   names)   /usr/lib/python1.5/site-packages/rexec.pys   init_frozen\ s    c    s   ] ] t  d ‚ d  S(   Ns   don't use this(   s   SystemError(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   load_source] s    c    s   ^ ^ t  d ‚ d  S(   Ns   don't use this(   s   SystemError(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   load_compiled^ s    c    s   _ _ t  d ‚ d  S(   Ns   don't use this(   s   SystemError(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   load_package_ s    c    s    a b |  i i | | | ƒ Sd  S(   N(   s   selfs   rexecs   load_dynamics   names   filenames   file(   s   selfs   names   filenames   files)   /usr/lib/python1.5/site-packages/rexec.pys   load_dynamica s   c    s   d e |  i i | ƒ Sd  S(   N(   s   selfs   rexecs
   add_modules   name(   s   selfs   names)   /usr/lib/python1.5/site-packages/rexec.pys
   add_moduled s   c    s   g h |  i i Sd  S(   N(   s   selfs   rexecs   modules(   s   selfs)   /usr/lib/python1.5/site-packages/rexec.pys   modules_dictg s   c    s   j k |  i i d i Sd  S(   Ns   sys(   s   selfs   rexecs   moduless   path(   s   selfs)   /usr/lib/python1.5/site-packages/rexec.pys   default_pathj s   (   s   __init__s	   set_rexecs
   is_builtins   init_builtins   init_frozens   load_sources   load_compileds   load_packages   load_dynamics
   add_modules   modules_dicts   default_path(    s)   /usr/lib/python1.5/site-packages/rexec.pys   RHooks> s   s   RExecc      sm  s d  Z  u w e e i ƒ Z y d 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 ­ d0 „  Z ³ d1 „  Z ¸ d2 „  Z ¾ d3 „  Z Á d4 „  Z É d5 „  Z Ö d6 „  Z á d7 „  Z ë d8 „  Z ò d9 „  Z û d: „  Z ÿ d; „  Z d< „  Z h  h  g  d= „ Z 
d> „  Z d? „  Z d@ „  Z dA „  Z (dB „  Z 0dC „  Z  5dD „  Z! :f  e	 dE „ Z" EdF „  Z# HdG „  Z$ KdH „  Z% NdI „  Z& QdJ „  Z' TdK „  Z( YdM dN dL „ Z) `dO „  Z* RS(P   s!   Restricted Execution environment.s   audioops   arrays   binasciis   cmaths   errnos   imageops   marshals   maths   md5s   operators   parsers   regexs   pcres   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“ t | ƒ |  _	 ” |  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   tuples   set_trusted_paths   make_builtins   make_initial_moduless   make_syss   RModuleLoaders   loaders   RModuleImporters   importer(   s   selfs   hookss   verboses   lists   mnames)   /usr/lib/python1.5/site-packages/rexec.pys   __init__ˆ s"   	 	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.5/site-packages/rexec.pys   set_trusted_path s   c    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.5/site-packages/rexec.pys   load_dynamic¢ s   	c    s!   ­ ® |  i ƒ  ¯ |  i ƒ  d  S(   N(   s   selfs	   make_mains   make_osname(   s   selfs)   /usr/lib/python1.5/site-packages/rexec.pys   make_initial_modules­ s   c    s   ³ ´ | |  i j Sd  S(   N(   s   mnames   selfs   ok_builtin_modules(   s   selfs   mnames)   /usr/lib/python1.5/site-packages/rexec.pys
   is_builtin³ s   c    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.5/site-packages/rexec.pys   make_builtin¸ s   c    s   ¾ ¿ |  i d ƒ } d  S(   Ns   __main__(   s   selfs
   add_modules   m(   s   selfs   ms)   /usr/lib/python1.5/site-packages/rexec.pys	   make_main¾ s   c    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.5/site-packages/rexec.pys   make_osnameÁ s    c    s²   É Ê |  i t |  i ƒ } Ë |  i | _ Ì d g | _ Í t t |  i	 ƒ | _
 Î |  i | _ Ï |  i d } Ð |  i i ƒ  t |  i ƒ } Ñ | i ƒ  Ò t | ƒ | _ d  S(   Ns
   RESTRICTEDs   sys(   s   selfs	   copy_onlys   syss   ok_sys_namess   ms   moduless   argvs   maps   Nones   ok_paths   paths
   r_exc_infos   exc_infos   keyss   lists   ok_builtin_moduless   ls   sorts   tuples   builtin_module_names(   s   selfs   ms   ls)   /usr/lib/python1.5/site-packages/rexec.pys   make_sysÉ s   c    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.5/site-packages/rexec.pys   copy_exceptÖ s    	  	c    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.5/site-packages/rexec.pys	   copy_onlyá s    	c    s2   ë ì |  i | i ƒ } í | i | _ î | Sd  S(   N(   s   selfs
   add_modules   srcs   __name__s   ms   __doc__(   s   selfs   srcs   ms)   /usr/lib/python1.5/site-packages/rexec.pys	   copy_noneë s   c    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.5/site-packages/rexec.pys
   add_moduleò s
    c    s'   û ü |  i d ƒ } ý | | i Ud  S(   Ns   __main__(   s   selfs
   add_modules   ms   codes   __dict__(   s   selfs   codes   ms)   /usr/lib/python1.5/site-packages/rexec.pys   r_execû s   c    s,   ÿ  |  i d ƒ } t | | i ƒ Sd  S(   Ns   __main__(   s   selfs
   add_modules   ms   evals   codes   __dict__(   s   selfs   codes   ms)   /usr/lib/python1.5/site-packages/rexec.pys   r_evalÿ s   c    s,   |  i d ƒ } t | | i ƒ Sd  S(   Ns   __main__(   s   selfs
   add_modules   ms   execfiles   files   __dict__(   s   selfs   files   ms)   /usr/lib/python1.5/site-packages/rexec.pys
   r_execfiles   c    s#   |  i i | | | | ƒ Sd  S(   N(   s   selfs   importers   import_modules   mnames   globalss   localss   fromlist(   s   selfs   mnames   globalss   localss   fromlists)   /usr/lib/python1.5/site-packages/rexec.pys   r_imports   c    s   
|  i i | ƒ Sd  S(   N(   s   selfs   importers   reloads   m(   s   selfs   ms)   /usr/lib/python1.5/site-packages/rexec.pys   r_reload
s   c    s   |  i i | ƒ Sd  S(   N(   s   selfs   importers   unloads   m(   s   selfs   ms)   /usr/lib/python1.5/site-packages/rexec.pys   r_unloads   c    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.5/site-packages/rexec.pys   make_delegate_filess   c    s»   t  |  d ƒ o |  i ƒ  n t  |  d ƒ o |  i ƒ  n  |  i d } !|  i | _ "|  i | _	 #|  i
 | _ $|  i t _ %|  i t _	 &|  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.5/site-packages/rexec.pys	   set_filess   c    sQ   ()|  i ƒ  *|  i d } +| i |  _ ,| i |  _ -| 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.5/site-packages/rexec.pys   reset_files(s
   c    s4   01t  i |  _ 2t  i |  _ 3t  i |  _ d  S(   N(   s   syss   stdins   selfs
   save_stdins   stdouts   save_stdouts   stderrs   save_stderr(   s   selfs)   /usr/lib/python1.5/site-packages/rexec.pys
   save_files0s   c    s4   56|  i t _ 7|  i t _ 8|  i t _ d  S(   N(   s   selfs
   save_stdins   syss   stdins   save_stdouts   stdouts   save_stderrs   stderr(   s   selfs)   /usr/lib/python1.5/site-packages/rexec.pys   restore_files5s   c    sq   :;|  i ƒ  <zF =|  i ƒ  >| o ?t | | | ƒ } n At | | ƒ } Wd  BC|  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.5/site-packages/rexec.pys   s_apply:s   
c    s   EF|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_execs   args(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   s_execEs   c    s   HI|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_evals   args(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   s_evalHs   c    s   KL|  i |  i | ƒ d  S(   N(   s   selfs   s_applys
   r_execfiles   args(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys
   s_execfileKs   c    s   NO|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_imports   args(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   s_importNs   c    s   QR|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_reloads   args(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   s_reloadQs   c    s   TU|  i |  i | ƒ d  S(   N(   s   selfs   s_applys   r_unloads   args(   s   selfs   argss)   /usr/lib/python1.5/site-packages/rexec.pys   s_unloadTs   c    s@   YZ| 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/python1.5/site-packages/rexec.pys   r_openYs   s   ri   c    s8   `at  i ƒ  \ } } } bt } c| | | f Sd  S(   N(   s   syss   exc_infos   tys   vas   trs   None(   s   selfs   tys   vas   trs)   /usr/lib/python1.5/site-packages/rexec.pys
   r_exc_info`s   	(+   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_opens
   r_exc_info(    s)   /usr/lib/python1.5/site-packages/rexec.pys   RExecs sN   	?6
		c     sq  fgk  }  k } k } h| i |  i d d ƒ \ } } id } jg  } kx^ | d krQ \ } } l| d j o m| d } n n| d j o o| i
 | ƒ n qX Wpt d | ƒ }	 q| o r|	 i t | ƒ |	 _ n s| oD t| |	 i d _ u|	 i d i i d t i i | d ƒ ƒ n w|	 i d i i d d ƒ x|  i }
 y| o | d d	 j o^ zy {t | d ƒ }
 Wn= |t j
 o. } }d
 |  i d | d f GH~d Sn Xn |
 i ƒ  oú €d G|  i GH|  i GH‚xÖ ‚d oË ƒyŒ „y …t d ƒ } Wn †t j
 o ‡HˆPn X‰| o | d d j o6 Š| d } ‹t | d d ƒ } Œ|	 i! | ƒ n Wn5 t" j
 o } Ž| Sn | i$ ƒ  n Xq	Wn‹ ’|
 i% ƒ  } “|
 i' ƒ  ”t | |
 i( d ƒ } •y –|	 i! | ƒ Wn< —t" j
 o } ˜| Sn ™š| i$ ƒ  ›d Sn Xd  S(   Ni   s   vt:i    s   -vs   -ts   verboses   syss    s   -s   %s: can't open file %ss   *** RESTRICTED *** Pythons   >>> s   #s   
s   <stdin>s   singles   exec()   s   syss   getopts	   tracebacks   argvs   optss   argss   verboses   trusteds   os   as   appends   RExecs   rs   ok_builtin_moduless   tuples   moduless   paths   inserts   oss   dirnames   stdins   fps   opens   IOErrors   msgs   isattys   versions	   copyrights	   raw_inputs   ss   EOFErrors   compiles   cs   s_execs
   SystemExits   ns	   print_excs   reads   texts   closes   name(   s   syss   getopts	   tracebacks   optss   argss   verboses   trusteds   os   as   rs   fps   msgs   ss   cs   ns   texts)   /usr/lib/python1.5/site-packages/rexec.pys   testfsj   "		 

1 
	s   __main__N(   s   __doc__s   syss   __builtin__s   oss   ihookss   FileBases   FileWrappers   TEMPLATEs   FileDelegates   Hookss   RHookss   FancyModuleLoaders   RModuleLoaders   ModuleImporters   RModuleImporters   _Verboses   RExecs   tests   __name__s   exit(    s)   /usr/lib/python1.5/site-packages/rexec.pys   ? s   					
1ó8