File: class/Extras/Code/Internet/restricted.py

File: class/Extras/Code/Internet/restricted.py

#!/usr/bin/python
import rexec, sys
Test = 1
if sys.platform[:3] == 'win':
 SafeDir = r'C:\temp'
else:
 SafeDir = '/tmp/'
def commandLine(prompt='Input (ctrl+z=end) => '):
 input = ''
 while 1:
 try:
 input = input + raw_input(prompt) + '\n'
 except EOFError:
 break
 print # clear for Windows
 return input
if not Test:
 import cgi # run on the web? - code from form
 form = cgi.FieldStorage() # else input interactively to test
 input = form['input'].value
else:
 input = commandLine()
# subclass to customize default rules: default=write modes disallowed
class Guard(rexec.RExec):
 def r_open(self, name, mode='r', bufsz=-1):
 if name[:len(SafeDir)] != SafeDir:
 raise SystemError, 'files outside %s prohibited' % SafeDir
 else:
 return open(name, mode, bufsz)
# limit system resources (not available on Windows)
if sys.platform[:3] != 'win':
 import resource # at most 5 cpu seconds
 resource.setrlimit(resource.RLIMIT_CPU, (5, 5))
# run code string safely
guard = Guard()
guard.r_exec(input) # ask guard to check and do opens



AltStyle によって変換されたページ (->オリジナル) /