~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to platform/scripts/safe-python

  • Committer: wagrant
  • Date: 2008-07-14 01:31:14 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:851
Give CGIRequest an exception handler which turns any exception into
HTTP headers. interpret reads these, and raises an IVLEJailError, which
dispatch should eventually look at.

This is now enabled in serveservice.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/local/bin/python
 
2
 
 
3
import os
 
4
import sys
 
5
import re
 
6
import resource
 
7
 
 
8
jailBase = '/home/informatics/jails/'
 
9
siteBase = '/home/informatics/www/'
 
10
 
 
11
def findUser(login):
 
12
    entries = {}
 
13
    passwdfile = open('/etc/passwd')
 
14
    for line in passwdfile.readlines():
 
15
        rec = re.split(':',line)
 
16
        if rec[0] == login:
 
17
            return rec
 
18
    raise Exception, (login + " not found!")
 
19
 
 
20
def throttle():
 
21
    Kb = 1024
 
22
    Mb = 1024 * 1024
 
23
 
 
24
    limits = [(resource.RLIMIT_CORE,     (0,0)), \
 
25
              (resource.RLIMIT_CPU,      (1,2)), \
 
26
              (resource.RLIMIT_FSIZE,    (5 * Mb, 5 * Mb)), \
 
27
              (resource.RLIMIT_DATA,     (20 * Mb, 24 * Mb)), \
 
28
              (resource.RLIMIT_STACK,    (8 * Mb, 9 * Mb)), \
 
29
              (resource.RLIMIT_NPROC,    (10, 10)), \
 
30
              (resource.RLIMIT_NOFILE,   (50, 60))]
 
31
 
 
32
    for (r,l) in limits:
 
33
        resource.setrlimit(r,l)
 
34
 
 
35
def runit(login):
 
36
    os.environ['DOCUMENT_ROOT'] = '/'
 
37
    os.environ['SCRIPT_FILENAME'] = re.sub(siteBase + login + '/',
 
38
                        '/home/' + login + '/svn/' + login + '/trunk/',
 
39
                        os.environ['SCRIPT_FILENAME'])
 
40
    os.environ['HOME'] = '/home/' + login
 
41
    script = os.environ['SCRIPT_FILENAME']
 
42
    user = findUser(login)
 
43
    uid = int(user[2])
 
44
    os.chdir(jailBase + login)
 
45
    os.chroot(jailBase + login)
 
46
    os.setuid(uid)
 
47
    throttle()
 
48
    os.execlp("/usr/bin/python", "python", script)
 
49
 
 
50
m = re.match('^/([^/]*)/', os.environ['SCRIPT_NAME'])
 
51
if m is None:
 
52
    exit(1)
 
53
login = m.group(1)
 
54
 
 
55
runit(login)