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

« back to all changes in this revision

Viewing changes to lib/common/interpret.py

  • Committer: mattgiuca
  • Date: 2008-07-21 03:12:22 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:916
userdb: Added constraints UNIQUE and NOT NULL to subjects.subj_short_name.
    Rationale: Needs to be unique (since it will be used as a directory name),
    and rather important (so not null).

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
# Date: 18/1/2008
21
21
 
22
22
# Runs a student script in a safe execution environment.
 
23
#
 
24
# NOTE: This script currently disables cookies. This means students will be
 
25
# unable to write session-based or stateful web applications. This is done for
 
26
# security reasons (we do not want the students to see the IVLE cookie of
 
27
# whoever is visiting their pages).
 
28
# This can be resolved but needs careful sanitisation. See fixup_environ.
23
29
 
24
30
from common import studpath
25
31
from common import db
125
131
    its environment.
126
132
    """
127
133
 
128
 
    # Support no-op trampoline runs.
129
 
    if interpreter is None:
130
 
        interpreter = '/bin/true'
131
 
        script_path = ''
132
 
        noop = True
133
 
    else:
134
 
        noop = False
135
 
 
136
134
    # Get the student program's directory and execute it from that context.
137
135
    (tramp_dir, _) = os.path.split(trampoline)
138
136
 
169
167
    for (k,v) in old_env.items():
170
168
        os.environ[k] = v
171
169
 
172
 
    # We don't want any output! Bail out after the process terminates.
173
 
    if noop:
174
 
        pid.communicate()
175
 
        return
176
 
 
177
170
    # process_cgi_line: Reads a single line of CGI output and processes it.
178
171
    # Prints to req, and also does fancy HTML warnings if Content-Type
179
172
    # omitted.
288
281
    try:
289
282
        name, value = line.split(':', 1)
290
283
    except ValueError:
291
 
        # No colon. The user did not write valid headers.
292
284
        # If we are being gentle, we want to help the user understand what
293
 
        # went wrong. Otherwise, just admit we screwed up.
294
 
        warning = "Warning"
 
285
        # went wrong. Otherwise, we bail out.
295
286
        if not cgiflags.gentle:
296
 
            message = """An unexpected server error has occured."""
297
 
            warning = "Error"
298
 
        elif len(cgiflags.headers) == 0:
 
287
            raise
 
288
        # No colon. The user did not write valid headers.
 
289
        if len(cgiflags.headers) == 0:
299
290
            # First line was not a header line. We can assume this is not
300
291
            # a CGI app.
301
292
            message = """You did not print a CGI header.
306
297
            # header.
307
298
            message = """You printed an invalid CGI header. You need to leave
308
299
a blank line after the headers, before writing the page contents."""
309
 
        write_html_warning(req, message, warning=warning)
 
300
        write_html_warning(req, message)
310
301
        cgiflags.wrote_html_warning = True
311
302
        # Handle the rest of this line as normal data
312
303
        process_cgi_output(req, line + '\n', cgiflags)
341
332
        req.headers_out[name] = value
342
333
    cgiflags.headers[name] = value
343
334
 
344
 
def write_html_warning(req, text, warning="Warning"):
 
335
def write_html_warning(req, text):
345
336
    """Prints an HTML warning about invalid CGI interaction on the part of the
346
337
    user. text may contain HTML markup."""
347
338
    req.content_type = "text/html"
355
346
<body style="margin: 0; padding: 0; font-family: sans-serif;">
356
347
  <div style="background-color: #faa; border-bottom: 1px solid black;
357
348
    padding: 8px;">
358
 
    <p><strong>%s</strong>: %s
 
349
    <p><strong>Warning</strong>: %s
359
350
  </div>
360
351
  <div style="margin: 8px;">
361
352
    <pre>
362
 
""" % (warning, text))
 
353
""" % text)
363
354
 
364
355
location_cgi_python = os.path.join(conf.ivle_install_dir,
365
356
    "bin/trampoline")
371
362
    'cgi-python'
372
363
        : functools.partial(execute_cgi, "/usr/bin/python",
373
364
            location_cgi_python),
374
 
    'noop'
375
 
        : functools.partial(execute_cgi, None,
376
 
            location_cgi_python),
377
365
    # Should also have:
378
366
    # cgi-generic
379
367
    # python-server-page
389
377
    # Comments here are on the heavy side, explained carefully for security
390
378
    # reasons. Please read carefully before making changes.
391
379
 
 
380
    # Remove HTTP_COOKIE. It is a security risk to have students see the IVLE
 
381
    # cookie of their visitors.
 
382
    try:
 
383
        del env['HTTP_COOKIE']
 
384
    except: pass
 
385
 
392
386
    # Remove DOCUMENT_ROOT and SCRIPT_FILENAME. Not part of CGI spec and
393
387
    # exposes unnecessary details about server.
394
388
    try: