X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fvserver%2Fswitch.c;h=88f164c81d77b5e2504a81ba9f10ccaaa0f0eeea;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=f72cb7eadcbe6bf93a66ef30660e5a6393a7e7e1;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/kernel/vserver/switch.c b/kernel/vserver/switch.c index f72cb7ead..88f164c81 100644 --- a/kernel/vserver/switch.c +++ b/kernel/vserver/switch.c @@ -3,22 +3,24 @@ * * Virtual Server: Syscall Switch * - * Copyright (C) 2003-2004 Herbert Pötzl + * Copyright (C) 2003-2005 Herbert Pötzl * * V0.01 syscall switch * V0.02 added signal to context * V0.03 added rlimit functions * V0.04 added iattr, task/xid functions + * V0.05 added debug/history stuff * */ #include #include +#include #include -#include -#include +#include #include +#include static inline int @@ -27,13 +29,16 @@ vc_get_version(uint32_t id) return VCI_VERSION; } +#include +#include +#include +#include +#include +#include +#include #include -#include -#include #include -#include -#include #include #include #include @@ -42,21 +47,37 @@ vc_get_version(uint32_t id) extern asmlinkage long sys_vserver(uint32_t cmd, uint32_t id, void __user *data) { - if (!capable(CAP_CONTEXT)) - return -EPERM; - vxdprintk(VXD_CBIT(switch, 0), "vc: VCMD_%02d_%d[%d], %d", VC_CATEGORY(cmd), VC_COMMAND(cmd), VC_VERSION(cmd), id); +#ifdef CONFIG_VSERVER_LEGACY + if (!capable(CAP_CONTEXT) && + /* dirty hack for capremove */ + !(cmd==VCMD_new_s_context && id==-2)) + return -EPERM; +#else + if (!capable(CAP_CONTEXT)) + return -EPERM; +#endif + switch (cmd) { case VCMD_get_version: return vc_get_version(id); + case VCMD_dump_history: +#ifdef CONFIG_VSERVER_HISTORY + return vc_dump_history(id); +#else + return -ENOSYS; +#endif + #ifdef CONFIG_VSERVER_LEGACY case VCMD_new_s_context: return vc_new_s_context(id, data); +#endif +#ifdef CONFIG_VSERVER_LEGACYNET case VCMD_set_ipv4root: return vc_set_ipv4root(id, data); #endif @@ -151,9 +172,11 @@ sys_vserver(uint32_t cmd, uint32_t id, void __user *data) case VCMD_wait_exit: return vc_wait_exit(id, data); -#ifdef CONFIG_VSERVER_LEGACY case VCMD_create_context: +#ifdef CONFIG_VSERVER_LEGACY return vc_ctx_create(id, data); +#else + return -ENOSYS; #endif case VCMD_get_iattr: