This patch puts users in their home directories when they log into a slice.
authorSapan Bhatia <sapanb@cs.princeton.edu>
Mon, 10 May 2010 20:23:45 +0000 (20:23 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Mon, 10 May 2010 20:23:45 +0000 (20:23 +0000)
src/vsh.c

index 0bbdadf..a16d217 100644 (file)
--- 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: