From 731ba056be6f4fe0787e11c7733ef7d3ac9f43a6 Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Mon, 6 Oct 2008 22:56:07 +0000 Subject: [PATCH] use util-vserver's style of config, not sapan's funky style. --- src/namespaces.c | 102 ----------------------------------------------- src/netns.c | 38 ++++++++++++++++++ 2 files changed, 38 insertions(+), 102 deletions(-) delete mode 100644 src/namespaces.c create mode 100644 src/netns.c diff --git a/src/namespaces.c b/src/namespaces.c deleted file mode 100644 index 9f89bcd..0000000 --- a/src/namespaces.c +++ /dev/null @@ -1,102 +0,0 @@ -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "vserver.h" -#include -#include -#include -#include -#include -#include - -#ifdef CLONE_NEWNET -# define DECLARE_NS(X,Y) { #X, CLONE_NEW##X } -#else -# warning CLONE_NEWNET not defined, using memorized value -# define DECLARE_NS(X,Y) { #X, Y } -#endif - -#define SPACE_DIR "pl_spaces" - -static struct { - const char * const id; - unsigned char bit; -} const NS2BIT[] = { - DECLARE_NS(NET, 32) - - /* All entries between FIRST_NS and the last defined namespace - * must be filled in */ - #define FIRST_NS 32 -}; - -int -text2ns(const char *str) -{ - size_t i; - for (i=0; i=sizeof(NS2BIT)/sizeof(NS2BIT[0])) return 0; - return NS2BIT[bit - FIRST_NS].id; -} - -#define VSERVERCONF "/etc/vservers/" - -uint32_t -get_space_flag(xid_t xid) { - char *ctx_space_dir, *space_name; - struct passwd *slice_user; - FILE *fp_in; - unsigned int bit; - - slice_user = get_pwuid(xid); - - if (!slice_user) - goto out_err1; - - ctx_space_dir=(char *) malloc(sizeof(VSERVERCONF "/" SPACE_DIR "Z")+strlen(slice_user->pw_name)); - if (!ctx_space_dir) - goto out_err1; - - sprintf(ctx_space_dir,VSERVERCONF "%s/" SPACE_DIR, slice_user->pw_name); - - fp_in = fopen(ctx_space_dir,"r"); - - if (!fp_in) - goto out_dontcare; - - space_name=(char *) malloc(sizeof("GOBBLEDYGOOKZ")); - - if (!space_name) { - goto out_err2; - } - - fgets(space_name,sizeof("GOBBLEDYGOOKZ"),fp_in); - - bit = text2ns(space_name); - - free(space_name); - free(ctx_space_dir); - close(fp_in); - - return ((1<>1); - -out_err2: - free(ctx_space_dir); - close(fp_in); - -out_err1: - return 0; - -out_dontcare: - free(ctx_space_dir); - return 0; - -} diff --git a/src/netns.c b/src/netns.c new file mode 100644 index 0000000..eea16f9 --- /dev/null +++ b/src/netns.c @@ -0,0 +1,38 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "vserver.h" +#include +#include +#include +#include +#include +#include + +#define SPACE_FILE "/spaces/net" +#define VSERVERCONF "/etc/vservers/" + +uint32_t +get_space_flag(xid_t xid) { + char *ctx_space_file, *space_name; + struct passwd *slice_user; + uint32_t space_flag = 0; + + slice_user = get_pwuid(xid); + + if (!slice_user) + return 0; + + ctx_space_file=(char *) malloc(sizeof(VSERVERCONF SPACE_FILE "Z")+strlen(slice_user->pw_name)); + if (!ctx_space_file) + return 0; + + sprintf(ctx_space_file,VSERVERCONF SPACE_FILE "%s", slice_user->pw_name); + + if (access(ctx_space_file, F_OK)==0) + space_flag |= CLONE_NEWNET; + + free(ctx_space_dir); + return space_flag; +} -- 2.43.0