-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Micah Anderson wrote:
> If I remove all the useless stuff (.svn stuff that crept in, upstream
> Changelog which for some reason had a number of changes, autotools
> noise, debian patches that have been incorporated into upstream, NOOP
> RCS header date changes, fedora yum repo gpg key change (unrelated to
> debian) gentoo initscript changes (unrelated to debian), redhat initpost
> changes (unrelated to debian), documentation changes
> (doc/configuration.html, configuration-xhtml.xsl, configuration.xml),
> redhat spec file changes (unrelated to debian) and the THANKS change,
> leaves:
> 
> 58 files changed, 189 insertions(+), 446 deletions(-)
> 
> Removing the 20+ trivial fixes of:
> 
> -       WRITE_MSG(2, " --help\" for more information.\n");
> +       WRITE_MSG(2, " --help' for more information.\n");
> 
> Leaves 40 changes, 169 insertions(+), 426 deletions, not that much when
> you consider a new kernel API is supported.

Attached cleaned up patch for review.

Micah
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFF6yja9n4qXRzy1ioRAlujAKC3QtqSi/DRuJFO6GMohmfq3JVFBwCgtCkI
L+cG5Vhu2AytJvADG2LPALc=
=/4wu
-----END PGP SIGNATURE-----
diff -ur ./config.h.in ../0.30.212-1/config.h.in
--- ./config.h.in       2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/config.h.in   2006-12-09 11:56:07.000000000 -0700
@@ -232,6 +232,9 @@
 /* Enable support for some obsoleted API of vserver 1.3.x */
 #undef VC_ENABLE_API_V13OBS
 
+/* Enable support for API of vserver 2.1.x */
+#undef VC_ENABLE_API_V21
+
 /* Version number of package */
 #undef VERSION
 
diff -ur ./ensc_wrappers/wrappers-vserver.hc 
../0.30.212-1/ensc_wrappers/wrappers-vserver.hc
--- ./ensc_wrappers/wrappers-vserver.hc 2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/ensc_wrappers/wrappers-vserver.hc     2006-12-09 
11:56:07.000000000 -0700
@@ -132,15 +132,15 @@
 }
 
 inline static WRAPPER_DECL void
-Evc_set_namespace()
+Evc_set_namespace(xid_t xid, uint_least64_t mask)
 {
-  FatalErrnoError(vc_set_namespace()==-1, "vc_set_namespace()");
+  FatalErrnoError(vc_set_namespace(xid, mask)==-1, "vc_set_namespace()");
 }
 
 inline static WRAPPER_DECL void
-Evc_enter_namespace(xid_t xid)
+Evc_enter_namespace(xid_t xid, uint_least64_t mask)
 {
-  FatalErrnoError(vc_enter_namespace(xid)==-1, "vc_enter_namespace()");
+  FatalErrnoError(vc_enter_namespace(xid, mask)==-1, "vc_enter_namespace()");
 }
 
 inline static WRAPPER_DECL xid_t
diff -ur ./kernel/cacct_cmd.h ../0.30.212-1/kernel/cacct_cmd.h
--- ./kernel/cacct_cmd.h        2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/cacct_cmd.h    2006-12-09 11:56:07.000000000 -0700
@@ -13,11 +13,4 @@
 };
 
 
-#ifdef __KERNEL__
-
-#include <linux/compiler.h>
-
-extern int vc_sock_stat(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 #endif /* _VX_CACCT_CMD_H */
diff -ur ./kernel/context_cmd.h ../0.30.212-1/kernel/context_cmd.h
--- ./kernel/context_cmd.h      2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/context_cmd.h  2006-12-09 11:56:07.000000000 -0700
@@ -6,10 +6,6 @@
 
 #define VCMD_task_xid          VC_CMD(VINFO, 1, 0)
 
-#ifdef __KERNEL__
-extern int vc_task_xid(uint32_t, void __user *);
-
-#endif /* __KERNEL__ */
 
 #define VCMD_vx_info           VC_CMD(VINFO, 5, 0)
 
@@ -19,10 +15,6 @@
        /* more to come */
 };
 
-#ifdef __KERNEL__
-extern int vc_vx_info(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 #define VCMD_ctx_stat          VC_CMD(VSTAT, 0, 0)
 
@@ -32,10 +24,6 @@
        /* more to come */
 };
 
-#ifdef __KERNEL__
-extern int vc_ctx_stat(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 /* context commands */
 
@@ -53,11 +41,6 @@
        uint64_t flagword;
 };
 
-#ifdef __KERNEL__
-extern int vc_ctx_create(uint32_t, void __user *);
-extern int vc_ctx_migrate(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 
 /* flag commands */
@@ -70,11 +53,6 @@
        uint64_t mask;
 };
 
-#ifdef __KERNEL__
-extern int vc_get_cflags(struct vx_info *, void __user *);
-extern int vc_set_cflags(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 
 /* context caps commands */
@@ -96,13 +74,6 @@
        uint64_t cmask;
 };
 
-#ifdef __KERNEL__
-extern int vc_get_ccaps_v0(struct vx_info *, void __user *);
-extern int vc_set_ccaps_v0(struct vx_info *, void __user *);
-extern int vc_get_ccaps(struct vx_info *, void __user *);
-extern int vc_set_ccaps(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 
 /* bcaps commands */
@@ -115,9 +86,4 @@
        uint64_t bmask;
 };
 
-#ifdef __KERNEL__
-extern int vc_get_bcaps(struct vx_info *, void __user *);
-extern int vc_set_bcaps(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 #endif /* _VX_CONTEXT_CMD_H */
diff -ur ./kernel/cvirt_cmd.h ../0.30.212-1/kernel/cvirt_cmd.h
--- ./kernel/cvirt_cmd.h        2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/cvirt_cmd.h    2006-12-09 11:56:07.000000000 -0700
@@ -24,14 +24,6 @@
 };
 
 
-#ifdef __KERNEL__
-
-#include <linux/compiler.h>
-
-extern int vc_set_vhi_name(struct vx_info *, void __user *);
-extern int vc_get_vhi_name(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 #define VCMD_virt_stat         VC_CMD(VSTAT, 3, 0)
 
@@ -46,8 +38,4 @@
        uint32_t load[3];
 };
 
-#ifdef __KERNEL__
-extern int vc_virt_stat(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 #endif /* _VX_CVIRT_CMD_H */
diff -ur ./kernel/debug_cmd.h ../0.30.212-1/kernel/debug_cmd.h
--- ./kernel/debug_cmd.h        2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/debug_cmd.h    2006-12-09 11:56:07.000000000 -0700
@@ -12,47 +12,14 @@
 struct  vcmd_read_history_v0 {
        uint32_t index;
        uint32_t count;
-       char __user *data;
+       char *data;
 };
 
 struct  vcmd_read_monitor_v0 {
        uint32_t index;
        uint32_t count;
-       char __user *data;
+       char *data;
 };
 
 
-#ifdef __KERNEL__
-
-#ifdef CONFIG_COMPAT
-
-#include <asm/compat.h>
-
-struct  vcmd_read_history_v0_x32 {
-       uint32_t index;
-       uint32_t count;
-       compat_uptr_t data_ptr;
-};
-
-struct  vcmd_read_monitor_v0_x32 {
-       uint32_t index;
-       uint32_t count;
-       compat_uptr_t data_ptr;
-};
-
-#endif  /* CONFIG_COMPAT */
-
-extern int vc_dump_history(uint32_t);
-
-extern int vc_read_history(uint32_t, void __user *);
-extern int vc_read_monitor(uint32_t, void __user *);
-
-#ifdef CONFIG_COMPAT
-
-extern int vc_read_history_x32(uint32_t, void __user *);
-extern int vc_read_monitor_x32(uint32_t, void __user *);
-
-#endif  /* CONFIG_COMPAT */
-
-#endif /* __KERNEL__ */
 #endif /* _VX_DEBUG_CMD_H */
diff -ur ./kernel/dlimit_cmd.h ../0.30.212-1/kernel/dlimit_cmd.h
--- ./kernel/dlimit_cmd.h       2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/dlimit_cmd.h   2006-12-09 11:56:07.000000000 -0700
@@ -11,12 +11,12 @@
 #define VCMD_get_dlimit                VC_CMD(DLIMIT, 6, 0)
 
 struct vcmd_ctx_dlimit_base_v0 {
-       const char __user *name;
+       const char *name;
        uint32_t flags;
 };
 
 struct vcmd_ctx_dlimit_v0 {
-       const char __user *name;
+       const char *name;
        uint32_t space_used;                    /* used space in kbytes */
        uint32_t space_total;                   /* maximum space in kbytes */
        uint32_t inodes_used;                   /* used inodes */
@@ -29,46 +29,4 @@
 #define CDLIM_INFINITY         ((uint32_t)~0UL)
 #define CDLIM_KEEP             ((uint32_t)~1UL)
 
-#ifdef __KERNEL__
-
-#ifdef CONFIG_COMPAT
-
-#include <asm/compat.h>
-
-struct vcmd_ctx_dlimit_base_v0_x32 {
-       compat_uptr_t name_ptr;
-       uint32_t flags;
-};
-
-struct vcmd_ctx_dlimit_v0_x32 {
-       compat_uptr_t name_ptr;
-       uint32_t space_used;                    /* used space in kbytes */
-       uint32_t space_total;                   /* maximum space in kbytes */
-       uint32_t inodes_used;                   /* used inodes */
-       uint32_t inodes_total;                  /* maximum inodes */
-       uint32_t reserved;                      /* reserved for root in % */
-       uint32_t flags;
-};
-
-#endif /* CONFIG_COMPAT */
-
-#include <linux/compiler.h>
-
-extern int vc_add_dlimit(uint32_t, void __user *);
-extern int vc_rem_dlimit(uint32_t, void __user *);
-
-extern int vc_set_dlimit(uint32_t, void __user *);
-extern int vc_get_dlimit(uint32_t, void __user *);
-
-#ifdef CONFIG_COMPAT
-
-extern int vc_add_dlimit_x32(uint32_t, void __user *);
-extern int vc_rem_dlimit_x32(uint32_t, void __user *);
-
-extern int vc_set_dlimit_x32(uint32_t, void __user *);
-extern int vc_get_dlimit_x32(uint32_t, void __user *);
-
-#endif /* CONFIG_COMPAT */
-
-#endif /* __KERNEL__ */
 #endif /* _VX_DLIMIT_CMD_H */
diff -ur ./kernel/inode_cmd.h ../0.30.212-1/kernel/inode_cmd.h
--- ./kernel/inode_cmd.h        2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/inode_cmd.h    2006-12-09 11:56:07.000000000 -0700
@@ -19,43 +19,11 @@
 };
 
 struct vcmd_ctx_iattr_v1 {
-       const char __user *name;
+       const char *name;
        uint32_t xid;
        uint32_t flags;
        uint32_t mask;
 };
 
 
-#ifdef __KERNEL__
-
-
-#ifdef CONFIG_COMPAT
-
-#include <asm/compat.h>
-
-struct vcmd_ctx_iattr_v1_x32 {
-       compat_uptr_t name_ptr;
-       uint32_t xid;
-       uint32_t flags;
-       uint32_t mask;
-};
-
-#endif /* CONFIG_COMPAT */
-
-#include <linux/compiler.h>
-
-extern int vc_get_iattr_v0(uint32_t, void __user *);
-extern int vc_set_iattr_v0(uint32_t, void __user *);
-
-extern int vc_get_iattr(uint32_t, void __user *);
-extern int vc_set_iattr(uint32_t, void __user *);
-
-#ifdef CONFIG_COMPAT
-
-extern int vc_get_iattr_x32(uint32_t, void __user *);
-extern int vc_set_iattr_x32(uint32_t, void __user *);
-
-#endif /* CONFIG_COMPAT */
-
-#endif /* __KERNEL__ */
 #endif /* _VX_INODE_CMD_H */
diff -ur ./kernel/legacy.h ../0.30.212-1/kernel/legacy.h
--- ./kernel/legacy.h   2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/kernel/legacy.h       2006-12-09 11:56:07.000000000 -0700
@@ -41,9 +41,4 @@
 #define VX_INFO_NAMESPACE      128     /* save private namespace */
 
 
-#ifdef __KERNEL__
-extern int vc_new_s_context(uint32_t, void __user *);
-extern int vc_set_ipv4root(uint32_t, void __user *);
-
-#endif /* __KERNEL__ */
 #endif /* _VX_LEGACY_H */
diff -ur ./kernel/limit_cmd.h ../0.30.212-1/kernel/limit_cmd.h
--- ./kernel/limit_cmd.h        2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/limit_cmd.h    2006-12-09 11:56:07.000000000 -0700
@@ -36,34 +36,4 @@
 #define CRLIM_INFINITY         (~0ULL)
 #define CRLIM_KEEP             (~1ULL)
 
-#ifdef __KERNEL__
-
-#ifdef CONFIG_IA32_EMULATION
-
-struct vcmd_ctx_rlimit_v0_x32 {
-       uint32_t id;
-       uint64_t minimum;
-       uint64_t softlimit;
-       uint64_t maximum;
-} __attribute__ ((aligned (4)));
-
-#endif /* CONFIG_IA32_EMULATION */
-
-#include <linux/compiler.h>
-
-extern int vc_get_rlimit_mask(uint32_t, void __user *);
-extern int vc_get_rlimit(struct vx_info *, void __user *);
-extern int vc_set_rlimit(struct vx_info *, void __user *);
-extern int vc_reset_minmax(struct vx_info *, void __user *);
-
-extern int vc_rlimit_stat(struct vx_info *, void __user *);
-
-#ifdef CONFIG_IA32_EMULATION
-
-extern int vc_get_rlimit_x32(struct vx_info *, void __user *);
-extern int vc_set_rlimit_x32(struct vx_info *, void __user *);
-
-#endif /* CONFIG_IA32_EMULATION */
-
-#endif /* __KERNEL__ */
 #endif /* _VX_LIMIT_CMD_H */
diff -ur ./kernel/network_cmd.h ../0.30.212-1/kernel/network_cmd.h
--- ./kernel/network_cmd.h      2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/network_cmd.h  2006-12-09 11:56:07.000000000 -0700
@@ -6,10 +6,6 @@
 
 #define VCMD_task_nid          VC_CMD(VINFO, 2, 0)
 
-#ifdef __KERNEL__
-extern int vc_task_nid(uint32_t, void __user *);
-
-#endif /* __KERNEL__ */
 
 #define VCMD_nx_info           VC_CMD(VINFO, 6, 0)
 
@@ -18,10 +14,6 @@
        /* more to come */
 };
 
-#ifdef __KERNEL__
-extern int vc_nx_info(struct nx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 #define VCMD_net_create_v0     VC_CMD(VNET, 1, 0)
 #define VCMD_net_create                VC_CMD(VNET, 1, 1)
@@ -44,14 +36,6 @@
 };
 
 
-#ifdef __KERNEL__
-extern int vc_net_create(uint32_t, void __user *);
-extern int vc_net_migrate(struct nx_info *, void __user *);
-
-extern int vc_net_add(struct nx_info *, void __user *);
-extern int vc_net_remove(struct nx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 
 /* flag commands */
@@ -64,11 +48,6 @@
        uint64_t mask;
 };
 
-#ifdef __KERNEL__
-extern int vc_get_nflags(struct nx_info *, void __user *);
-extern int vc_set_nflags(struct nx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 
 /* network caps commands */
@@ -81,9 +60,4 @@
        uint64_t cmask;
 };
 
-#ifdef __KERNEL__
-extern int vc_get_ncaps(struct nx_info *, void __user *);
-extern int vc_set_ncaps(struct nx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 #endif /* _VX_CONTEXT_CMD_H */
diff -ur ./kernel/network.h ../0.30.212-1/kernel/network.h
--- ./kernel/network.h  2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/network.h      2006-12-09 11:56:07.000000000 -0700
@@ -36,107 +36,6 @@
 #define NXA_TYPE_ANY           ((uint16_t)-1)
 
 
-#ifdef __KERNEL__
-
-#include <linux/list.h>
-#include <linux/spinlock.h>
-#include <linux/rcupdate.h>
-#include <asm/atomic.h>
-
-
-struct nx_info {
-       struct hlist_node nx_hlist;     /* linked list of nxinfos */
-       nid_t nx_id;                    /* vnet id */
-       atomic_t nx_usecnt;             /* usage count */
-       atomic_t nx_tasks;              /* tasks count */
-       int nx_state;                   /* context state */
-
-       uint64_t nx_flags;              /* network flag word */
-       uint64_t nx_ncaps;              /* network capabilities */
-
-       int nbipv4;
-       __u32 ipv4[NB_IPV4ROOT];        /* Process can only bind to these IPs */
-                                       /* The first one is used to connect */
-                                       /* and for bind any service */
-                                       /* The other must be used explicity */
-       __u32 mask[NB_IPV4ROOT];        /* Netmask for each ipv4 */
-                                       /* Used to select the proper source */
-                                       /* address for sockets */
-       __u32 v4_bcast;                 /* Broadcast address to receive UDP  */
-
-       char nx_name[65];               /* network context name */
-};
-
-
-/* status flags */
-
-#define NXS_HASHED      0x0001
-#define NXS_SHUTDOWN    0x0100
-#define NXS_RELEASED    0x8000
-
-/* check conditions */
-
-#define NX_ADMIN       0x0001
-#define NX_WATCH       0x0002
-#define NX_BLEND       0x0004
-#define NX_HOSTID      0x0008
-
-#define NX_IDENT       0x0010
-#define NX_EQUIV       0x0020
-#define NX_PARENT      0x0040
-#define NX_CHILD       0x0080
-
-#define NX_ARG_MASK    0x00F0
-
-#define NX_DYNAMIC     0x0100
-#define NX_STATIC      0x0200
-
-#define NX_ATR_MASK    0x0F00
-
-
-extern struct nx_info *lookup_nx_info(int);
-
-extern int get_nid_list(int, unsigned int *, int);
-extern int nid_is_hashed(nid_t);
-
-extern int nx_migrate_task(struct task_struct *, struct nx_info *);
-
-extern long vs_net_change(struct nx_info *, unsigned int);
-
-struct in_ifaddr;
-struct net_device;
-
-#ifdef CONFIG_INET
-int ifa_in_nx_info(struct in_ifaddr *, struct nx_info *);
-int dev_in_nx_info(struct net_device *, struct nx_info *);
-
-#else /* CONFIG_INET */
-static inline
-int ifa_in_nx_info(struct in_ifaddr *a, struct nx_info *n)
-{
-       return 1;
-}
-
-static inline
-int dev_in_nx_info(struct net_device *d, struct nx_info *n)
-{
-       return 1;
-}
-#endif /* CONFIG_INET */
-
-struct sock;
-
-#ifdef CONFIG_INET
-int nx_addr_conflict(struct nx_info *, uint32_t, struct sock *);
-#else /* CONFIG_INET */
-static inline
-int nx_addr_conflict(struct nx_info *n, uint32_t a, struct sock *s)
-{
-       return 1;
-}
-#endif /* CONFIG_INET */
-
-#endif /* __KERNEL__ */
 #else  /* _VX_NETWORK_H */
 #warning duplicate inclusion
 #endif /* _VX_NETWORK_H */
diff -ur ./kernel/sched_cmd.h ../0.30.212-1/kernel/sched_cmd.h
--- ./kernel/sched_cmd.h        2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/sched_cmd.h    2006-12-09 11:56:07.000000000 -0700
@@ -60,13 +60,4 @@
 
 #define SCHED_KEEP             (-2)    /* only for v2 */
 
-#ifdef __KERNEL__
-
-#include <linux/compiler.h>
-
-extern int vc_set_sched_v2(struct vx_info *, void __user *);
-extern int vc_set_sched_v3(struct vx_info *, void __user *);
-extern int vc_set_sched(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 #endif /* _VX_SCHED_CMD_H */
diff -ur ./kernel/signal_cmd.h ../0.30.212-1/kernel/signal_cmd.h
--- ./kernel/signal_cmd.h       2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/signal_cmd.h   2006-12-09 11:56:07.000000000 -0700
@@ -17,27 +17,15 @@
        int32_t exit_code;
 };
 
-#ifdef __KERNEL__
-
-extern int vc_ctx_kill(struct vx_info *, void __user *);
-extern int vc_wait_exit(struct vx_info *, void __user *);
-
-#endif /* __KERNEL__ */
 
 /*  process alteration commands */
 
-#define VCMD_get_pflags                VC_CMD(PROCALT, 1, 0)
-#define VCMD_set_pflags                VC_CMD(PROCALT, 2, 0)
+#define VCMD_get_pflags                VC_CMD(PROCALT, 5, 0)
+#define VCMD_set_pflags                VC_CMD(PROCALT, 6, 0)
 
 struct vcmd_pflags_v0 {
        uint32_t flagword;
        uint32_t mask;
 };
 
-#ifdef __KERNEL__
-
-extern int vc_get_pflags(uint32_t pid, void __user *);
-extern int vc_set_pflags(uint32_t pid, void __user *);
-
-#endif /* __KERNEL__ */
 #endif /* _VX_SIGNAL_CMD_H */
diff -ur ./kernel/switch.h ../0.30.212-1/kernel/switch.h
--- ./kernel/switch.h   2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/kernel/switch.h       2006-12-09 11:56:07.000000000 -0700
@@ -88,13 +88,6 @@
 #define VCMD_get_vci           VC_CMD(VERSION, 1, 0)
 
 
-#ifdef __KERNEL__
-
-#include <linux/errno.h>
-
-
-#else  /* __KERNEL__ */
 #define __user
-#endif /* __KERNEL__ */
 
 #endif /* _VX_SWITCH_H */
diff -ur ./lib/getxidtype.c ../0.30.212-1/lib/getxidtype.c
--- ./lib/getxidtype.c  2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/getxidtype.c      2006-12-09 11:56:07.000000000 -0700
@@ -21,14 +21,21 @@
 #endif
 
 #include "vserver.h"
-#include "virtual.h"
+#include "internal.h"
 
 vcXidType
 vc_getXIDType(xid_t xid)
 {
-  if (xid==0)                                  return vcTYPE_MAIN;
-  if (xid==1)                                  return vcTYPE_WATCH;
-  if (xid>1              && xid<MIN_D_CONTEXT) return vcTYPE_STATIC;
-  if (xid>=MIN_D_CONTEXT && xid<MAX_S_CONTEXT) return vcTYPE_DYNAMIC;
+  static xid_t MIN_D_CONTEXT = 0;
+  const xid_t  MAX_S_CONTEXT = 65535;
+  if (MIN_D_CONTEXT == 0 && (utilvserver_checkCompatConfig() & 
VC_VCI_NO_DYNAMIC) == 0)
+    MIN_D_CONTEXT = 49152;
+  else
+    MIN_D_CONTEXT = MAX_S_CONTEXT;
+
+  if (xid==0)                                  return vcTYPE_MAIN;
+  if (xid==1)                                  return vcTYPE_WATCH;
+  if (xid>1              && xid<MIN_D_CONTEXT) return vcTYPE_STATIC;
+  if (xid>=MIN_D_CONTEXT && xid<MAX_S_CONTEXT) return vcTYPE_DYNAMIC;
   return vcTYPE_INVALID;
 }
diff -ur ./lib/internal.h ../0.30.212-1/lib/internal.h
--- ./lib/internal.h    2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/internal.h        2006-12-09 11:56:07.000000000 -0700
@@ -38,6 +38,7 @@
 
   
 int    utilvserver_checkCompatVersion();
+uint_least32_t utilvserver_checkCompatConfig();
 bool   utilvserver_isDirectory(char const *path, bool follow_link);
 bool   utilvserver_isFile(char const *path, bool follow_link);
 bool   utilvserver_isLink(char const *path);
diff -ur ./lib/isdynamicxid.c ../0.30.212-1/lib/isdynamicxid.c
--- ./lib/isdynamicxid.c        2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/isdynamicxid.c    2006-12-09 11:56:07.000000000 -0700
@@ -26,5 +26,5 @@
 bool
 vc_is_dynamic_xid(xid_t xid)
 {
-  return xid>=MIN_D_CONTEXT;
+  return vc_getXIDType(xid) == vcTYPE_DYNAMIC;
 }
diff -ur ./lib/Makefile-files ../0.30.212-1/lib/Makefile-files
--- ./lib/Makefile-files        2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/lib/Makefile-files    2006-12-09 11:56:07.000000000 -0700
@@ -121,7 +121,12 @@
                                lib/syscall_virtstat.c \
                                lib/syscall_virtstat-v21.hc \
                                lib/syscall_ctxstat.c \
-                               lib/syscall_ctxstat-v21.hc
+                               lib/syscall_ctxstat-v21.hc \
+                               lib/syscall_getspacemask.c \
+                               lib/syscall_getspacemask-v21.hc \
+                               lib/syscall_enternamespace-v21.hc \
+                               lib/syscall_setnamespace-v21.hc \
+                               lib/syscall_ctxmigrate-v21.hc
 
 if ENSC_HAVE_C99_COMPILER
 lib_v13_SRCS +=                        lib/syscall_adddlimit-v13.hc \
@@ -138,6 +143,7 @@
 
 lib_SRCS =                     lib/syscall.c \
                                lib/checkversion.c \
+                               lib/checkconfig.c \
                                lib/isdirectory.c \
                                lib/isfile.c \
                                lib/islink.c \
diff -ur ./lib/nflags-net.c ../0.30.212-1/lib/nflags-net.c
--- ./lib/nflags-net.c  2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/lib/nflags-net.c      2006-12-09 11:56:07.000000000 -0700
@@ -34,6 +34,8 @@
   DECL("lock",         VC_NXF_INFO_LOCK),
   DECL("private",      VC_NXF_INFO_PRIVATE),
 
+  DECL("single_ip",    VC_NXF_SINGLE_IP),
+
   DECL("hide_netif",   VC_NXF_HIDE_NETIF),
 
   DECL("state_setup",  VC_NXF_STATE_SETUP),
diff -ur ./lib/syscall_ctxmigrate.c ../0.30.212-1/lib/syscall_ctxmigrate.c
--- ./lib/syscall_ctxmigrate.c  2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/syscall_ctxmigrate.c      2006-12-09 11:56:07.000000000 
-0700
@@ -21,17 +21,26 @@
 #endif
 
 #include "vserver.h"
-#include "vserver-internal.h"
 #include "virtual.h"
 
+#if defined(VC_ENABLE_API_V13) && defined(VC_ENABLE_API_V21)
+#  define VC_MULTIVERSION_SYSCALL 1
+#endif
+#include "vserver-internal.h"
+
 #if defined(VC_ENABLE_API_V13)
 #  include "syscall_ctxmigrate-v13.hc"
 #endif
 
-#if defined(VC_ENABLE_API_V13)
+#if defined(VC_ENABLE_API_V21)
+#  include "syscall_ctxmigrate-v21.hc"
+#endif
+
+#if defined(VC_ENABLE_API_V13) || defined(VC_ENABLE_API_V21)
 int
 vc_ctx_migrate(xid_t xid)
 {
-  CALL_VC(CALL_VC_V13A(vc_ctx_migrate, xid));
+  CALL_VC(CALL_VC_SPACES(vc_ctx_migrate, xid),
+         CALL_VC_V13A  (vc_ctx_migrate, xid));
 }
 #endif
diff -ur ./lib/syscall_enternamespace.c 
../0.30.212-1/lib/syscall_enternamespace.c
--- ./lib/syscall_enternamespace.c      2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/syscall_enternamespace.c  2006-12-09 11:56:07.000000000 
-0700
@@ -23,14 +23,24 @@
 #include "vserver.h"
 #include "virtual.h"
 
+#if defined(VC_ENABLE_API_V13) && defined(VC_ENABLE_API_V21)
+#  define VC_MULTIVERSION_SYSCALL 1
+#endif
 #include "vserver-internal.h"
 
 #ifdef VC_ENABLE_API_V13
 #  include "syscall_enternamespace-v13.hc"
 #endif
 
+#ifdef VC_ENABLE_API_V21
+#  include "syscall_enternamespace-v21.hc"
+#endif
+
+#if defined(VC_ENABLE_API_V13) || defined(VC_ENABLE_API_V21)
 int
-vc_enter_namespace(xid_t xid)
+vc_enter_namespace(xid_t xid, uint_least64_t mask)
 {
-  CALL_VC(CALL_VC_V13(vc_enter_namespace, xid));
+  CALL_VC(CALL_VC_SPACES(vc_enter_namespace, xid, mask),
+         CALL_VC_V13   (vc_enter_namespace, xid, mask));
 }
+#endif
diff -ur ./lib/syscall_enternamespace-v13.hc 
../0.30.212-1/lib/syscall_enternamespace-v13.hc
--- ./lib/syscall_enternamespace-v13.hc 2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/syscall_enternamespace-v13.hc     2006-12-09 
11:56:07.000000000 -0700
@@ -23,7 +23,9 @@
 #include "vserver.h"
 
 static inline ALWAYSINLINE int
-vc_enter_namespace_v13(xid_t xid)
+vc_enter_namespace_v13(xid_t xid, uint_least64_t mask)
 {
-  return vserver(VCMD_enter_namespace, CTX_USER2KERNEL(xid), 0);
+  if ((mask & (CLONE_NEWNS|CLONE_FS)) == 0)
+    return 0;
+  return vserver(VCMD_enter_space_v0, CTX_USER2KERNEL(xid), 0);
 }
diff -ur ./lib/syscall_getvci.c ../0.30.212-1/lib/syscall_getvci.c
--- ./lib/syscall_getvci.c      2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/lib/syscall_getvci.c  2006-12-09 11:56:07.000000000 -0700
@@ -33,7 +33,7 @@
 int
 vc_get_vci()
 {
-  CALL_VC(CALL_VC_V21(vc_get_vci));
+  CALL_VC(CALL_VC_V21(vc_get_vci, 0));
 }
 
 #endif
diff -ur ./lib/syscall_getvci-v21.hc ../0.30.212-1/lib/syscall_getvci-v21.hc
--- ./lib/syscall_getvci-v21.hc 2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/lib/syscall_getvci-v21.hc     2006-12-09 11:56:07.000000000 
-0700
@@ -21,7 +21,7 @@
 #endif
 
 static inline ALWAYSINLINE int
-vc_get_vci_v21()
+vc_get_vci_v21(int UNUSED tmp)
 {
   return vserver(VCMD_get_vci, 0, 0);
 }
diff -ur ./lib/syscall_setnamespace.c ../0.30.212-1/lib/syscall_setnamespace.c
--- ./lib/syscall_setnamespace.c        2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/syscall_setnamespace.c    2006-12-09 11:56:07.000000000 
-0700
@@ -23,14 +23,24 @@
 #include "vserver.h"
 #include "virtual.h"
 
+#if defined(VC_ENABLE_API_V13) && defined(VC_ENABLE_API_V21)
+#  define VC_MULTIVERSION_SYSCALL 1
+#endif
 #include "vserver-internal.h"
 
 #ifdef VC_ENABLE_API_V13
 #  include "syscall_setnamespace-v13.hc"
 #endif
 
+#ifdef VC_ENABLE_API_V21
+#  include "syscall_setnamespace-v21.hc"
+#endif
+
+#if defined(VC_ENABLE_API_V13) || defined(VC_ENABLE_API_V21)
 int
-vc_set_namespace()
+vc_set_namespace(xid_t xid, uint_least64_t mask)
 {
-  CALL_VC(CALL_VC_V13(vc_set_namespace,0));
+  CALL_VC(CALL_VC_SPACES(vc_set_namespace, xid, mask),
+         CALL_VC_V13   (vc_set_namespace, xid, mask));
 }
+#endif
diff -ur ./lib/syscall_setnamespace-v13.hc 
../0.30.212-1/lib/syscall_setnamespace-v13.hc
--- ./lib/syscall_setnamespace-v13.hc   2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/syscall_setnamespace-v13.hc       2006-12-09 
11:56:07.000000000 -0700
@@ -23,7 +23,9 @@
 #include "vserver.h"
 
 static inline ALWAYSINLINE int
-vc_set_namespace_v13(int UNUSED tmp)
+vc_set_namespace_v13(xid_t xid, uint_least64_t mask)
 {
-  return vserver(VCMD_set_namespace_v0, -1, 0);
+  if ((mask & (CLONE_NEWNS|CLONE_FS)) == 0)
+    return 0;
+  return vserver(VCMD_set_space_v0, CTX_USER2KERNEL(xid), 0);
 }
diff -ur ./lib/virtual.h ../0.30.212-1/lib/virtual.h
--- ./lib/virtual.h     2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib/virtual.h 2006-12-09 11:56:07.000000000 -0700
@@ -19,20 +19,18 @@
 #ifndef H_UTIL_VSERVER_LIB_VIRTUAL_H
 #define H_UTIL_VSERVER_LIB_VIRTUAL_H
 
-#include <kernel/context.h>
 #include <kernel/context_cmd.h>
 #include <kernel/cvirt_cmd.h>
 #include <kernel/cvirt_cmd.h>
-#include <kernel/dlimit.h>
 #include <kernel/dlimit_cmd.h>
 #include <kernel/inode_cmd.h>
 #include <kernel/limit_cmd.h>
-#include <kernel/namespace_cmd.h>
+#include <kernel/space_cmd.h>
+#include <kernel/network.h>
 #include <kernel/network_cmd.h>
 #include <kernel/sched_cmd.h>
 #include <kernel/signal_cmd.h>
 
-#include <kernel/network.h>
 #include <kernel/legacy.h>
 
 #endif //  H_UTIL_VSERVER_LIB_VIRTUAL_H
diff -ur ./lib/vserver.h ../0.30.212-1/lib/vserver.h
--- ./lib/vserver.h     2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/lib/vserver.h 2006-12-09 11:56:07.000000000 -0700
@@ -28,6 +28,7 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include <sys/types.h>
+#include <sched.h>
 
 #ifndef IS_DOXYGEN
 #if defined(__GNUC__)
@@ -232,6 +233,8 @@
 #define VC_NXF_INFO_LOCK               0x00000001ull
 #define VC_NXF_INFO_PRIVATE            0x00000008ull
 
+#define VC_NXF_SINGLE_IP               0x00000100ull
+
 #define VC_NXF_HIDE_NETIF              0x02000000ull
 
 #define VC_NXF_STATE_SETUP             (1ULL<<32)
@@ -249,6 +252,23 @@
 #define VC_VLIMIT_SEMARY               20
 #define VC_VLIMIT_NSEMS                        21
 #define VC_VLIMIT_DENTRY               22
+#define VC_VLIMIT_MAPPED               23
+
+
+// the VCI bit values
+#define VC_VCI_NO_DYNAMIC              (1 << 0)
+#define VC_VCI_SPACES                  (1 << 10)
+
+
+#ifndef CLONE_NEWNS
+#  define CLONE_NEWNS                  0x00020000
+#endif
+#ifndef CLONE_NEWUTS
+#  define CLONE_NEWUTS                 0x04000000
+#endif
+#ifndef CLONE_NEWIPC
+#  define CLONE_NEWIPC                 0x08000000
+#endif
 
 
 
@@ -605,9 +625,10 @@
     /** Returns true iff \a xid is a dynamic xid */
   bool         vc_is_dynamic_xid(xid_t xid);
 
-  int          vc_enter_namespace(xid_t xid);
-  int          vc_set_namespace();
+  int          vc_enter_namespace(xid_t xid, uint_least64_t mask);
+  int          vc_set_namespace(xid_t xid, uint_least64_t mask);
   int          vc_cleanup_namespace();
+  uint_least64_t vc_get_space_mask();
 
   
   /** \brief    Flags of process-contexts
diff -ur ./lib/vserver-internal.h ../0.30.212-1/lib/vserver-internal.h
--- ./lib/vserver-internal.h    2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/lib/vserver-internal.h        2006-12-09 11:56:07.000000000 
-0700
@@ -41,12 +41,16 @@
 #define CALL_VC_NOOP   vc_noop0()
 #define CALL_VC_GENERAL(ID, SUFFIX, FUNC, ...)                         \
   VC_PREFIX; VC_SELECT(ID) return FUNC ## _ ## SUFFIX(__VA_ARGS__); VC_SUFFIX
+#define CALL_VC_GENERAL_CONFIG(BIT, SUFFIX, FUNC, ...)                 \
+  VC_PREFIX; VC_CBIT(BIT)  return FUNC ## _ ## SUFFIX(__VA_ARGS__); VC_SUFFIX
 
 #ifdef VC_MULTIVERSION_SYSCALL
 #  define VC_SELECT(ID)        if (ver>=(ID))
+#  define VC_CBIT(BIT)  if ((conf&BIT) == BIT)
 #  define CALL_VC(...)                                 \
   do {                                                 \
     int        ver = utilvserver_checkCompatVersion();         \
+    int UNUSED conf = utilvserver_checkCompatConfig();         \
     if (ver==-1) return -1;                            \
     VC_SUFFIX, __VA_ARGS__, VC_PREFIX;                 \
     errno = ENOSYS;                                    \
@@ -54,6 +58,7 @@
   } while (0)
 #else
 #  define VC_SELECT(ID) if (1)
+#  define VC_CBIT(BIT)  if (1)
 #  define CALL_VC(...)                                 \
   do {                                                 \
     if (1) {} VC_SUFFIX, __VA_ARGS__, VC_PREFIX;       \
@@ -103,13 +108,17 @@
 #  define CALL_VC_V13OBS(F,...)        CALL_VC_NOOP
 #endif
 
-
 #ifdef VC_ENABLE_API_V21
 #  define CALL_VC_V21(F,...)   CALL_VC_GENERAL(0x00020100, v21, F, __VA_ARGS__)
 #else
 #  define CALL_VC_V21(F,...)   CALL_VC_NOOP
 #endif
 
+#ifdef VC_ENABLE_API_V21
+#  define CALL_VC_SPACES(F,...)        CALL_VC_GENERAL_CONFIG(VC_VCI_SPACES, 
spaces, F, __VA_ARGS__)
+#else
+#  define CALL_VC_SPACES(F,...)        CALL_VC_NOOP
+#endif
 
 #ifdef VC_ENABLE_API_NET
 #  define CALL_VC_NET(F,...)   CALL_VC_GENERAL(0x00010016, net, F, __VA_ARGS__)
diff -ur ./lib_internal/sys_clone.h ../0.30.212-1/lib_internal/sys_clone.h
--- ./lib_internal/sys_clone.h  2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/lib_internal/sys_clone.h      2006-12-09 11:56:07.000000000 
-0700
@@ -23,10 +23,6 @@
 #include "lib/syscall-wrap.h"
 #define __NR__sys_clone                __NR_clone
 
-#ifndef CLONE_NEWNS
-#  define CLONE_NEWNS 0x00020000
-#endif
-
 #ifndef ENSC_SYSCALL_TRADITIONAL
 #  include <errno.h>
diff -ur ./scripts/functions ../0.30.212-1/scripts/functions
--- ./scripts/functions 2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/scripts/functions     2006-12-09 11:56:07.000000000 -0700
@@ -268,13 +268,27 @@
     _VS_LOCKS="$@"
 }
 
+function get_init_cwd
+{
+    if test -n "$INIT_CWD"; then
+       echo "$INIT_CWD"
+    else
+       pwd
+    fi
+}
+function set_init_cwd
+{
+    INIT_CWD="`pwd`"
+    export INIT_CWD
+}
+
 function _getVserverDir
 {
     local vserver="$1"
     case "$vserver" in
-       ./*) VSERVER_DIR=`pwd`/$vserver     ;;
-       /*)  VSERVER_DIR=$vserver           ;;
-       *)   VSERVER_DIR=$__CONFDIR/$vserver;;
+       ./*) VSERVER_DIR="`get_init_cwd`/$vserver";;
+       /*)  VSERVER_DIR="$vserver"               ;;
+       *)   VSERVER_DIR="$__CONFDIR/$vserver"    ;;
     esac
 }
 
@@ -622,13 +636,17 @@
     eval read "$_gfv_var" <"$_gfv_file"
 }
 
-## Called as 'getFileArray <varname> <filename>'
+## Called as 'getFileArray <varname> <filename>+'
 function getFileArray
 {
-    test -r "$2" || return 1
-    
+    local _gfa_var=$1
+    local _gfa_file
+    shift
+
+    findFile _gfa_file "$@" ''
+    test -n "$_gfa_file" -a -r "$_gfa_file" || return 0
     local IFS=$_VS_NEWLINE
-    eval "$1"='( $(< "$2") )'
+    eval "$_gfa_var"='( $(< "$_gfa_file") )'
 }
 
 function checkComponents
@@ -711,10 +729,10 @@
     #$_VKILL -s CONT   --xid "$1" 1 &>/dev/null || :
 }
 
-function useVlogin 
-{ 
-    test ! -e "$__CONFDIR/.defaults/apps/vlogin/disable" 
-} 
+function useVlogin
+{
+    test ! -e "$__CONFDIR/.defaults/apps/vlogin/disable"
+}
 
 ## Usage: pkgmgmt.guessStyle <vserver> <resultvar>
 function pkgmgmt.guessStyle()
diff -ur ./scripts/vserver ../0.30.212-1/scripts/vserver
--- ./scripts/vserver   2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/scripts/vserver       2006-12-09 11:56:07.000000000 -0700
@@ -206,6 +206,9 @@
     ! isVserverRunning "$VSERVER_DIR" || \
     exec $_VNAMESPACE --enter "$VSERVER_DIR" -- $_VSERVER ----nonamespace 
"[EMAIL PROTECTED]"
 
+set_init_cwd
+cd /
+
 . $__PKGLIBDIR/vserver.functions
 case "$2" in
     (start|stop|delete)
diff -ur ./scripts/vserver.functions ../0.30.212-1/scripts/vserver.functions
--- ./scripts/vserver.functions 2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/scripts/vserver.functions     2006-12-09 11:56:07.000000000 
-0700
@@ -1199,7 +1199,7 @@
 
     # these are things that have to be accessible post-cleanup
     for tmp in "$root" "$__SBINDIR" "$__PKGLIBDIR" "$vdir" \
-       "$__PKGSTATEDIR" "`pwd`" "[EMAIL PROTECTED]"; do
+       "$__PKGSTATEDIR" "[EMAIL PROTECTED]"; do
        while test -n "$tmp"; do
            list=( "[EMAIL PROTECTED]" "$tmp" )
            tmp="${tmp%/*}"
diff -ur ./src/chroot-sh.c ../0.30.212-1/src/chroot-sh.c
--- ./src/chroot-sh.c   2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/src/chroot-sh.c       2006-12-09 11:56:07.000000000 -0700
@@ -178,6 +178,7 @@
   if (!isNumberUnsigned(argv[1], &mode, 1)) {
     WRITE_MSG(2, "Invalid mode: '");
     WRITE_STR(2, argv[1]);
+    WRITE_MSG(2, "'\n");
     return EXIT_FAILURE;
   }
 
diff -ur ./src/ncontext.c ../0.30.212-1/src/ncontext.c
--- ./src/ncontext.c    2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/src/ncontext.c        2006-12-09 11:56:07.000000000 -0700
@@ -183,7 +183,7 @@
 }
 
 static inline ALWAYSINLINE int
-doit(struct Arguments const *args, int argc, char *argv[])
+doit(struct Arguments const *args, char *argv[])
 {
   int                  p[2][2];
   pid_t                        pid = initSync(p, args->do_disconnect);
@@ -279,7 +279,7 @@
     args.nid = Evc_get_task_nid(0);
   
   if (!args.do_create && !args.do_migrate)
-    WRITE_MSG(2, "Neither '--create' nor '--migrate specified; try '--help' 
for more information\n");
+    WRITE_MSG(2, "Neither '--create' nor '--migrate' specified; try '--help' 
for more information\n");
   else if (args.do_create && args.do_migrate)
     WRITE_MSG(2, "Can not specify '--create' and '--migrate' at the same time; 
try '--help' for more information\n");
   else if (!args.do_create && args.nid==VC_DYNAMIC_XID)
@@ -287,7 +287,7 @@
   else if (optind>=argc)
     WRITE_MSG(2, "No command given; use '--help' for more information.\n");
   else
-    return doit(&args, argc, argv);
+    return doit(&args, argv);
 
   return wrapper_exit_code;
 }
diff -ur ./src/vcontext.c ../0.30.212-1/src/vcontext.c
--- ./src/vcontext.c    2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/src/vcontext.c        2006-12-09 11:56:07.000000000 -0700
@@ -274,8 +274,8 @@
     if (args->do_chroot) {
       Echroot(".");
       if (args->set_namespace) {
-       if (args->do_migrateself)  Evc_set_namespace();
-       else if (args->do_migrate) Evc_enter_namespace(xid);
+       if (args->do_migrateself)  Evc_set_namespace(xid, 0);
+       else if (args->do_migrate) Evc_enter_namespace(xid, 0);
       }
     }
 
@@ -438,7 +438,7 @@
     args.xid = Evc_get_task_xid(0);
   
   if (!args.do_create && !args.do_migrate)
-    WRITE_MSG(2, "Neither '--create' nor '--migrate specified; try '--help' 
for more information\n");
+    WRITE_MSG(2, "Neither '--create' nor '--migrate' specified; try '--help' 
for more information\n");
   else if (args.do_create  &&  args.do_migrate)
     WRITE_MSG(2, "Can not specify '--create' and '--migrate' at the same time; 
try '--help' for more information\n");
   else if (!args.do_migrate && args.is_initpid)
diff -ur ./src/vdlimit.c ../0.30.212-1/src/vdlimit.c
--- ./src/vdlimit.c     2006-10-07 13:32:22.000000000 -0600
+++ ../0.30.212-1/src/vdlimit.c 2006-12-09 11:56:07.000000000 -0700
@@ -21,7 +21,6 @@
 #endif
 
 #include "util.h"
-#include <lib_internal/sys_clone.h>
 #include <lib/internal.h>
 
 #include <vserver.h>
diff -ur ./src/vnamespace.c ../0.30.212-1/src/vnamespace.c
--- ./src/vnamespace.c  2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/src/vnamespace.c      2006-12-09 11:56:07.000000000 -0700
@@ -36,13 +36,6 @@
 #define ENSC_WRAPPERS_VSERVER  1
 #include <wrappers.h>
 
-#ifndef CLONE_NEWUTS 
-#  define CLONE_NEWUTS          0x04000000 
-#endif 
-#ifndef CLONE_NEWIPC 
-#  define CLONE_NEWIPC          0x08000000 
-#endif
-
 #define CMD_HELP               0x1000
 #define CMD_VERSION            0x1001
 
@@ -102,9 +95,9 @@
   signal(SIGCHLD, SIG_DFL);
   
 #ifdef NDEBUG    
-  pid = sys_clone(CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|CLONE_VFORK|SIGCHLD, 
0); 
+  pid = sys_clone(CLONE_NEWNS|CLONE_VFORK|SIGCHLD, 0);
 #else
-  pid = sys_clone(CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|SIGCHLD, 0); 
+  pid = sys_clone(CLONE_NEWNS|SIGCHLD, 0);
 #endif
 
   switch (pid) {
@@ -119,18 +112,18 @@
 }
 
 static void
-enterNamespace(xid_t xid)
+enterNamespace(xid_t xid, uint_least64_t mask)
 {
-  if (vc_enter_namespace(xid)==-1) {
+  if (vc_enter_namespace(xid, mask)==-1) {
     perror("vnamespace: vc_enter_namespace()");
     exit(255);
   }
 }
 
 static void
-setNamespace()
+setNamespace(xid_t xid, uint_least64_t mask)
 {
-  if (vc_set_namespace()==-1) {
+  if (vc_set_namespace(xid, mask)==-1) {
     perror("vnamespace: vc_set_namespace()");
     exit(255);
   }
@@ -189,9 +182,9 @@
     WRITE_MSG(2, "No command specified; try '--help' for more information\n");
   else {
     if      (do_new)     newNamespace(argv[optind]);
-    else if (do_set)     setNamespace();
+    else if (do_set)     setNamespace(VC_SAMECTX, CLONE_NEWNS|CLONE_FS);
     else if (do_cleanup) cleanupNamespace();
-    else if (do_enter)   enterNamespace(xid);
+    else if (do_enter)   enterNamespace(xid, CLONE_NEWNS|CLONE_FS);
 
     if (optind<argc)
       EexecvpD(argv[optind], argv+optind);
diff -ur ./src/vsched.c ../0.30.212-1/src/vsched.c
--- ./src/vsched.c      2007-03-04 12:25:45.000000000 -0700
+++ ../0.30.212-1/src/vsched.c  2006-12-09 11:56:07.000000000 -0700
@@ -31,6 +31,7 @@
 #include <dirent.h>
 #include <fcntl.h>
 #include <sys/stat.h>
+#include <stddef.h>
 
 #define ENSC_WRAPPERS_PREFIX   "vsched: "
 #define ENSC_WRAPPERS_VSERVER  1
@@ -168,6 +169,8 @@
     if (strcmp(name, opt->name) == 0)
       break;
   }
+  if (opt->name == 0)
+    return;
 
   fd = Eopen(name, O_RDONLY, 0);
   len = Eread(fd, buf, sizeof(buf)-1);

Reply via email to