Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/rainbow
diff options
context:
space:
mode:
authorMichael Stone <michael@laptop.org>2009-03-11 04:36:30 (GMT)
committer Michael Stone <michael@laptop.org>2009-03-11 04:36:30 (GMT)
commit9ca6ebd0894f314e314fa5ba72541d6b55834bab (patch)
tree7477e2257955deaaf9e33e0edea2ce612b4c2460 /rainbow
parentb924bf7fb57a8984cce68d17ef3793b0752e2175 (diff)
Close fds before running assistants.
Diffstat (limited to 'rainbow')
-rw-r--r--rainbow/rainbow/inject.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/rainbow/rainbow/inject.py b/rainbow/rainbow/inject.py
index 991daa9..c94d2ef 100644
--- a/rainbow/rainbow/inject.py
+++ b/rainbow/rainbow/inject.py
@@ -97,7 +97,7 @@ def mount_fsen(log, home):
#mount('tmpfs', '/tmp', 'tmpfs', 0, '')
mount('tmpfs', '/var/tmp', 'tmpfs', 0, '')
-def run_assistant(log, assistant, env, owner_uid, owner_gid, uid, groups):
+def run_assistant(log, assistant, env, owner_uid, owner_gid, uid, groups, safe_fds):
if assistant:
envdir = None
try:
@@ -113,6 +113,11 @@ def run_assistant(log, assistant, env, owner_uid, owner_gid, uid, groups):
setgroups(groups)
setgid(owner_gid)
setuid(owner_uid)
+ log(1, 'Closing fds.')
+ for fd in get_fds():
+ if fd not in safe_fds:
+ try: os.close(fd) # propagate failure from EIO or EBADF.
+ except: pass
log(1, 'Running assistant.')
assistant_argv = [assistant, '-v', '-v', '-v', '-u', str(uid), '-e', envdir]
log(1, '%r %r', assistant_argv, env)