From 9073b0ab787facd1602ed5a4369c9afa0247b70e Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Mon, 10 May 2010 20:23:45 +0000 Subject: [PATCH] This patch puts users in their home directories when they log into a slice. --- src/vsh.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/vsh.c b/src/vsh.c index 0bbdadf..a16d217 100644 --- a/src/vsh.c +++ b/src/vsh.c @@ -45,17 +45,15 @@ char **extend_argv(int argc, char **argv, int num_extra_args) { return argv2; } -#define NUM_VSERVER_SUEXEC_ARGS 5 +#define NUM_VSERVER_EXEC_ARGS 5 -int main(int argc, char **argv) +int main(int argc, char **argv, char **envp) { char *slice_name; char **argv2; int argc2; char slice_id_str[256]; unsigned int slice_xid; - char *envp[] = { NULL, NULL }; - char home_env_str[256]; slice_xid = getuid(); slice_name = get_current_username(slice_xid); @@ -64,7 +62,7 @@ int main(int argc, char **argv) goto out_exception; } - argv2 = extend_argv(argc, argv, NUM_VSERVER_SUEXEC_ARGS); + argv2 = extend_argv(argc, argv, NUM_VSERVER_EXEC_ARGS); if (!argv2) goto out_exception; @@ -72,16 +70,23 @@ int main(int argc, char **argv) snprintf(slice_id_str, 255, "%u", slice_xid); argv2[0] = strdup(VSERVER_PATH); argv2[1] = strdup(slice_name); - argv2[2] = strdup("suexec"); - argv2[3] = strdup(slice_id_str); - argv2[4] = strdup("/bin/bash"); - argv2[5] = strdup("-login"); - - snprintf(home_env_str, 255, "HOME=/home/%s", slice_name); - envp[0] = home_env_str; + argv2[2] = strdup("exec"); + argv2[3] = strdup("/bin/su"); + argv2[4] = strdup("-"); + argv2[5] = strdup(slice_name); if (setuid(geteuid())) goto out_exception; + /* + char **env_n; + FILE *log_file; + log_file = fopen("/tmp/arglogs","w"); + for (env_n = envp;*env_n;env_n++) { + fprintf(log_file,"Env: %s\n",*env_n); + } + fclose(log_file); + */ + execve(VSERVER_PATH, argv2, envp); out_exception: -- 2.43.0