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

« back to all changes in this revision

Viewing changes to ivle/interpret.py

  • Committer: David Coles
  • Date: 2010-03-01 09:15:34 UTC
  • Revision ID: coles.david@gmail.com-20100301091534-vnisqvl35j5jmmco
interpret: Don't mutate os.environ for execute_cgi, Set an environ on subprocess.Popen instead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
130
130
        f.seek(0)       # Rewind, for reading
131
131
 
132
132
    # Set up the environment
133
 
    # This automatically asks mod_python to load up the CGI variables into the
134
 
    # environment (which is a good first approximation)
135
 
    old_env = os.environ.copy()
136
 
    for k in os.environ.keys():
137
 
        del os.environ[k]
138
 
    for (k,v) in req.get_cgi_environ().items():
139
 
        os.environ[k] = v
140
 
    fixup_environ(req, script_path, owner)
 
133
    environ = cgi_environ(req, script_path, owner)
141
134
 
142
135
    # usage: tramp uid jail_dir working_dir script_path
143
136
    cmd_line = [trampoline, str(owner.unixid),
150
143
                for s in cmd_line]
151
144
    pid = subprocess.Popen(cmd_line,
152
145
        stdin=f, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
153
 
        cwd=tramp_dir)
154
 
 
155
 
    # Restore the environment
156
 
    for k in os.environ.keys():
157
 
        del os.environ[k]
158
 
    for (k,v) in old_env.items():
159
 
        os.environ[k] = v
 
146
        cwd=tramp_dir, env=environ)
160
147
 
161
148
    # We don't want any output! Bail out after the process terminates.
162
149
    if noop:
363
350
    # python-server-page
364
351
}
365
352
 
366
 
def fixup_environ(req, script_path, user):
367
 
    """Assuming os.environ has been written with the CGI variables from
368
 
    apache, make a few changes for security and correctness.
 
353
def cgi_environ(req, script_path, user):
 
354
    """Gets CGI variables from apache and makes a few changes for security and 
 
355
    correctness.
369
356
 
370
357
    Does not modify req, only reads it.
371
358
    """
372
 
    env = os.environ
 
359
    env = {}
373
360
    # Comments here are on the heavy side, explained carefully for security
374
361
    # reasons. Please read carefully before making changes.
 
362
    
 
363
    # This automatically asks mod_python to load up the CGI variables into the
 
364
    # environment (which is a good first approximation)
 
365
    for (k,v) in req.get_cgi_environ().items():
 
366
        env[k] = v
375
367
 
376
368
    # Remove DOCUMENT_ROOT and SCRIPT_FILENAME. Not part of CGI spec and
377
369
    # exposes unnecessary details about server.
423
415
    username = user.login
424
416
    env['HOME'] = os.path.join('/home', username)
425
417
 
 
418
    return env
 
419
 
426
420
class ExecutionError(Exception):
427
421
    pass
428
422