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

« back to all changes in this revision

Viewing changes to ivle/interpret.py

  • Committer: William Grant
  • Date: 2009-01-20 00:04:15 UTC
  • mto: This revision was merged to the branch mainline in revision 1090.
  • Revision ID: grantw@unimelb.edu.au-20090120000415-sgqna1xmedtp1hdp
ivle.interpret.interpret_file: Take a User object as the owner, not a login.
    This lets us remove ivle.interpret.get_uid. Also update all callers to
    pass a user, not a login.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
 
40
40
CGI_BLOCK_SIZE = 65535
41
41
 
42
 
uids = {}
43
 
 
44
 
def get_uid(login):
45
 
    """Get the unix uid corresponding to the given login name.
46
 
       If it is not in the dictionary of uids, then consult the
47
 
       database and retrieve an update of the user table."""
48
 
    global uids
49
 
    if login in uids:
50
 
        return uids[login]
51
 
 
52
 
    conn = db.DB()
53
 
    res = conn.get_all('login', ['login', 'unixid'])
54
 
    def repack(flds):
55
 
        return (flds['login'], flds['unixid'])
56
 
    uids = dict(map(repack,res))
57
 
 
58
 
    return uids[login]
59
 
 
60
42
def interpret_file(req, owner, jail_dir, filename, interpreter, gentle=True):
61
43
    """Serves a file by interpreting it using one of IVLE's builtin
62
44
    interpreters. All interpreters are intended to run in the user's jail. The
64
46
    to the individual interpreters to create the jail.
65
47
 
66
48
    req: An IVLE request object.
67
 
    owner: Username of the user who owns the file being served.
 
49
    owner: The user who owns the file being served.
68
50
    jail_dir: Absolute path to the user's jail.
69
51
    filename: Absolute filename within the user's jail.
70
52
    interpreter: A function object to call.
79
61
        filename_abs = os.path.join(os.sep, filename)
80
62
        filename_rel = filename
81
63
 
82
 
    # Get the UID of the owner of the file
83
64
    # (Note: files are executed by their owners, not the logged in user.
84
65
    # This ensures users are responsible for their own programs and also
85
66
    # allows them to be executed by the public).
86
 
    uid = get_uid(owner)
87
67
 
88
68
    # Split up req.path again, this time with respect to the jail
89
69
    (working_dir, _) = os.path.split(filename_abs)
94
74
    # (Note that paths "relative" to the jail actually begin with a '/' as
95
75
    # they are absolute in the jailspace)
96
76
 
97
 
    return interpreter(uid, jail_dir, working_dir, filename_abs, req,
 
77
    return interpreter(owner.unixid, jail_dir, working_dir, filename_abs, req,
98
78
                       gentle)
99
79
 
100
80
class CGIFlags: