From 60b1bd932d29e2f6530b4945c9994de45cb55382 Mon Sep 17 00:00:00 2001 From: Steve Muir Date: Wed, 8 Jun 2005 18:05:06 +0000 Subject: [PATCH] Simpler use of chroot and chcontext --- python/vserver.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/python/vserver.py b/python/vserver.py index 1de666a..9d194b5 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -135,15 +135,21 @@ class VServer: return os.fdopen(fd, mode, bufsize) - def enter(self): + def __do_chcontext(self, state_file = None): - state_file = open("/var/run/vservers/%s.ctx" % self.name, "w") - self.__do_chroot() vserverimpl.chcontext(self.ctx, self.remove_caps) + if not state_file: + return print >>state_file, "S_CONTEXT=%d" % self.ctx print >>state_file, "S_PROFILE=%s" % self.config.get("S_PROFILE", "") state_file.close() + def enter(self): + + state_file = open("/var/run/vservers/%s.ctx" % self.name, "w") + self.__do_chroot() + self.__do_chcontext(state_file) + def start(self): child_pid = os.fork() @@ -153,11 +159,15 @@ class VServer: # get a new session os.setsid() + # open state file to record vserver info + state_file = open("/var/run/vservers/%s.ctx" % self.name, "w") + # use /dev/null for stdin, /var/log/boot.log for stdout/err os.close(0) os.close(1) os.open("/dev/null", os.O_RDONLY) - log = self.open("/var/log/boot.log", "w", 0) + self.__do_chroot() + log = open("/var/log/boot.log", "w", 0) os.dup2(1, 2) # write same output that vserver script does @@ -185,12 +195,15 @@ class VServer: if cmd_pid == 0: try: # enter vserver context - self.enter() + self.__do_chcontext(state_file) print >>log, "executing '%s'" % " ".join(cmd) os.execl(cmd[0], *cmd) finally: traceback.print_exc() os._exit(1) + else: + # don't want to write state_file multiple times + state_file = None # we get here due to an exception in the top-level child process except Exception, ex: -- 2.43.0