git://git.onelab.eu
/
util-vserver-pl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
c691247
)
Added code from NodeManager.tools to close non standard file descriptors. Avoids...
author
Faiyaz Ahmed
<faiyaza@cs.princeton.edu>
Wed, 16 Apr 2008 18:48:46 +0000
(18:48 +0000)
committer
Faiyaz Ahmed
<faiyaza@cs.princeton.edu>
Wed, 16 Apr 2008 18:48:46 +0000
(18:48 +0000)
python/vserver.py
patch
|
blob
|
history
diff --git
a/python/vserver.py
b/python/vserver.py
index
e3748f4
..
33c1952
100644
(file)
--- a/
python/vserver.py
+++ b/
python/vserver.py
@@
-267,7
+267,6
@@
class VServer:
block_usage = self.disk_blocks
inode_usage = self.disk_inodes
block_usage = self.disk_blocks
inode_usage = self.disk_inodes
-
try:
vserverimpl.setdlimit(self.dir,
self.ctx,
try:
vserverimpl.setdlimit(self.dir,
self.ctx,
@@
-396,13
+395,18
@@
class VServer:
self.__do_chroot()
self.__do_chcontext(None)
self.__do_chroot()
self.__do_chcontext(None)
- def start(self, wait, runlevel = 3):
- self.vm_running = True
+ def start(self, runlevel = 3):
- child_pid = os.fork()
- if child_pid == 0:
+ if (os.fork() != 0):
+ # Parent should just return.
+ self.vm_running = True
+ return
+ else:
# child process
try:
# child process
try:
+ # so we don't chcontext with priv'ed fds
+ close_nonstandard_fds()
+
# get a new session
os.setsid()
# get a new session
os.setsid()
@@
-447,9
+451,6
@@
class VServer:
self.log(traceback.format_exc())
os._exit(0)
self.log(traceback.format_exc())
os._exit(0)
- # parent process
- return child_pid
-
def set_resources(self):
""" Called when vserver context is entered for first time,
def set_resources(self):
""" Called when vserver context is entered for first time,
@@
-506,3
+507,12
@@
def create(vm_name, static = False, ctor = VServer):
vm_id = pwd.getpwnam(vm_name)[2]
return ctor(vm_name, vm_id)
vm_id = pwd.getpwnam(vm_name)[2]
return ctor(vm_name, vm_id)
+
+
+def close_nonstandard_fds():
+ """Close all open file descriptors other than 0, 1, and 2."""
+ _SC_OPEN_MAX = 4
+ for fd in range(3, os.sysconf(_SC_OPEN_MAX)):
+ try: os.close(fd)
+ except OSError: pass # most likely an fd that isn't open
+