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

« back to all changes in this revision

Viewing changes to lib/common/interpret.py

  • Committer: mattgiuca
  • Date: 2008-02-05 07:13:40 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:420
common.interpret: Changed interface (refactor).
Used to accept absolute filename, and then basically ignored this and looked
in req.path (extremely bad encapsulation). Now does not look in req.path.
Instead accepts jail dir and filename RELATIVE to jail as args. This means it
does not have to figure out the jail itself.

This is necessary to make it possible to interpret scripts which aren't
student scripts.

server: Changed call to common.interpret.interpret_file to match. Now server
calculates the jail directory as an argument.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
 
43
43
CGI_BLOCK_SIZE = 65535
44
44
 
45
 
def interpret_file(req, owner, filename, interpreter):
 
45
def interpret_file(req, owner, jail_dir, filename, interpreter):
46
46
    """Serves a file by interpreting it using one of IVLE's builtin
47
47
    interpreters. All interpreters are intended to run in the user's jail. The
48
48
    jail location is provided as an argument to the interpreter but it is up
50
50
 
51
51
    req: An IVLE request object.
52
52
    owner: Username of the user who owns the file being served.
53
 
    filename: Filename in the local file system.
 
53
    jail_dir: Absolute path to the user's jail.
 
54
    filename: Filename relative to the user's jail.
54
55
    interpreter: A function object to call.
55
56
    """
56
57
    # Make sure the file exists (otherwise some interpreters may not actually
57
58
    # complain).
58
59
    # Don't test for execute permission, that will only be required for
59
60
    # certain interpreters.
60
 
    if not os.access(filename, os.R_OK):
 
61
    if not os.access(os.path.join(jail_dir, filename), os.R_OK):
61
62
        req.throw_error(req.HTTP_NOT_FOUND)
62
63
 
63
64
    # Get the UID of the owner of the file
72
73
        req.throw_error(req.HTTP_INTERNAL_SERVER_ERROR)
73
74
 
74
75
    # Split up req.path again, this time with respect to the jail
75
 
    (_, jail_dir, path) = studpath.url_to_jailpaths(req.path)
76
 
    path = os.path.join('/', path)
77
 
    (working_dir, _) = os.path.split(path)
 
76
    filename = os.path.join('/', filename)
 
77
    (working_dir, _) = os.path.split(filename)
78
78
    # jail_dir is the absolute jail directory.
79
79
    # path is the filename relative to the user's jail.
80
80
    # working_dir is the directory containing the file relative to the user's
82
82
    # (Note that paths "relative" to the jail actually begin with a '/' as
83
83
    # they are absolute in the jailspace)
84
84
 
85
 
    return interpreter(uid, jail_dir, working_dir, path, req)
 
85
    return interpreter(uid, jail_dir, working_dir, filename, req)
86
86
 
87
87
class CGIFlags:
88
88
    """Stores flags regarding the state of reading CGI output."""