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

« back to all changes in this revision

Viewing changes to scripts/interpretservice

  • Committer: mattgiuca
  • Date: 2008-07-28 06:02:43 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:963
interpretservice: Now checks the MIME type of the file being served, and if it
    is NOT in the "interpretable types" list, serves it directly, rather than
    trying to interpret it as Python.
    Fixes [ 2028476 ] Failed to serve XML and TXT files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import mimetypes
27
27
import os
28
28
import sys
29
 
import conf
30
29
import StringIO
31
30
import urlparse
32
31
import subprocess
33
32
 
34
33
from common import (cgirequest, studpath)
 
34
import conf
 
35
import conf.mimetypes, conf.app, conf.app.server
 
36
 
 
37
serveservice_path = "/opt/ivle/scripts/serveservice"
35
38
 
36
39
req = cgirequest.CGIRequest()
37
40
req.install_error_handler()
47
50
# Everything should be done from the home directory
48
51
os.chdir(os.path.join('/home', username))
49
52
 
 
53
(type, _) = mimetypes.guess_type(filename)
 
54
if type is None:
 
55
    type = conf.mimetypes.default_mimetype
 
56
 
50
57
if filename is None:
51
58
    req.throw_error(req.HTTP_NOT_FOUND, "The path specified is invalid.")
52
59
elif not os.access(filename, os.R_OK):
53
60
    req.throw_error(req.HTTP_NOT_FOUND,
54
61
        "The specified file (%s) does not exist." % urlpath)
 
62
elif os.path.isdir(filename):
 
63
    # 403 Forbidden error for visiting a directory
 
64
    # (Not giving a directory listing, since this can be seen by
 
65
    # the world at large. Directory contents are private).
 
66
    req.throw_error(req.HTTP_FORBIDDEN,
 
67
        "The path specified is a directory.")
 
68
elif type in conf.app.server.interpreters:
 
69
    # We'll save on a fork and execute in this python process
 
70
    # Let exceptions blow up normally again
 
71
    sys.excepthook = sys.__excepthook__
 
72
    execfile(filename, {})
 
73
    # Non-Python process should probably use something like
 
74
    # subprocess.call([python, filename])
55
75
else:
56
 
    if os.path.isdir(filename):
57
 
        # 403 Forbidden error for visiting a directory
58
 
        # (Not giving a directory listing, since this can be seen by
59
 
        # the world at large. Directory contents are private).
 
76
    # Otherwise, use the blacklist/whitelist to see if this file should be
 
77
    # served or disallowed
 
78
    if (conf.app.server.blacklist_served_filetypes and \
 
79
            type in conf.app.server.served_filetypes_blacklist) or \
 
80
        (conf.app.server.served_filetypes_whitelist and \
 
81
            type not in conf.app.server.served_filetypes_whitelist):
60
82
        req.throw_error(req.HTTP_FORBIDDEN,
61
 
            "The path specified is a directory.")
62
 
    else:
63
 
        # We'll save on a fork and execute in this python process
64
 
        # Let exceptions blow up normally again
65
 
        sys.excepthook = sys.__excepthook__
66
 
        execfile(filename, {})
67
 
        
68
 
        # Non-Python process should probably use something like
69
 
        # subprocess.call([python, filename])
 
83
            "Files of this type are not allowed to be served.")
 
84
 
 
85
    execfile(serveservice_path)