Fork more cleanly in PlanetLabConf.
authorDavid E. Eisenstat <deisenst@cs.princeton.edu>
Tue, 17 Apr 2007 19:03:46 +0000 (19:03 +0000)
committerDavid E. Eisenstat <deisenst@cs.princeton.edu>
Tue, 17 Apr 2007 19:03:46 +0000 (19:03 +0000)
conf_files.py
tools.py

index 5d1cb56..4903b3f 100644 (file)
@@ -29,7 +29,7 @@ class conf_files:
     def system(self, cmd):
         if not self.noscripts and cmd:
             logger.log('conf_files: running command %s' % cmd)
-            return os.system(cmd)
+            return tools.fork_as(None, os.system, cmd)
         else: return 0
 
     def update_conf_file(self, cf_rec):
index 994089e..6b3a84b 100644 (file)
--- a/tools.py
+++ b/tools.py
@@ -43,9 +43,10 @@ def fork_as(su, function, *args):
         try:
             os.chdir('/')
             close_nonstandard_fds()
-            pw_ent = pwd.getpwnam(su)
-            os.setegid(pw_ent[3])
-            os.seteuid(pw_ent[2])
+            if su:
+                pw_ent = pwd.getpwnam(su)
+                os.setegid(pw_ent[3])
+                os.seteuid(pw_ent[2])
             child_pid = os.fork()
             if child_pid == 0: function(*args)
         except: