be less strict regarding the capabilities
[util-vserver.git] / python / vserver.py
index be76a50..24704d5 100644 (file)
@@ -1,5 +1,7 @@
 # Copyright 2005 Princeton University
 
+#$Id: vserver.py,v 1.59 2007/07/17 17:56:04 faiyaza Exp $
+
 import errno
 import fcntl
 import os
@@ -74,9 +76,6 @@ class VServerConfig:
             buf = f.readline().rstrip()
             f.close()
             return buf
-        except KeyError, e:
-            # No mapping exists for this option
-            raise e
         except IOError, e:
             if default is not None:
                 return default
@@ -177,6 +176,19 @@ class VServer:
     def set_WHITELISTED_config(self,whitelisted):
         self.config.update('whitelisted', whitelisted)
 
+    def set_capabilities(self, capabilities):
+        return vserverimpl.setbcaps(self.ctx, vserverimpl.text2bcaps(capabilities))
+
+    def set_capabilities_config(self, capabilities):
+        self.config.update('bcapabilities', capabilities)
+       self.set_capabilities(capabilities)
+
+    def get_capabilities(self):
+        return vserverimpl.bcaps2text(vserverimpl.getbcaps(self.ctx))
+    def get_capabilities_config(self):
+        return self.config.get('bcapabilities', '')
+
     def __do_chroot(self):
 
         os.chroot(self.dir)
@@ -299,7 +311,7 @@ class VServer:
             print >>state_file, "%u" % self.ctx
             state_file.close()
 
-        if vserverimpl.chcontext(self.ctx):
+        if vserverimpl.chcontext(self.ctx, vserverimpl.text2bcaps(self.get_capabilities_config())):
             self.set_resources()
             vserverimpl.setup_done(self.ctx)
 
@@ -412,6 +424,8 @@ class VServer:
         line = child_stdout.readline()
         if not line:
             sys.stderr.write(child_stderr.readline())
+        child_stdout.close()
+        child_stderr.close()
         (space, inodes) = line.split()
         self.disk_inodes = int(inodes)
         self.disk_blocks = int(space)