added lots of new files
[util-vserver.git] / util-vserver / src / vcontext.c
index ca447ac..99a7a12 100644 (file)
@@ -33,6 +33,7 @@
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <assert.h>
+#include <signal.h>
 
 #define ENSC_WRAPPERS_PREFIX   "vcontext: "
 #define ENSC_WRAPPERS_UNISTD   1
@@ -47,7 +48,7 @@
 #define CMD_XID                        0x4000
 #define CMD_CREATE             0x4001
 #define CMD_MIGRATE            0x4003
-#define CMD_FAKEINIT           0x4002
+#define CMD_INITPID            0x4002
 #define CMD_DISCONNECT         0x4004
 #define CMD_UID                        0x4005
 #define CMD_CHROOT             0x4006
@@ -68,7 +69,7 @@ CMDLINE_OPTIONS[] = {
   { "create",     no_argument,       0, CMD_CREATE },
   { "migrate",    no_argument,       0, CMD_MIGRATE },
   { "migrate-self", no_argument,               0, CMD_MIGRATESELF },
-  { "fakeinit",     no_argument,               0, CMD_FAKEINIT },
+  { "initpid",      no_argument,               0, CMD_INITPID },
   { "endsetup",     no_argument,        0, CMD_ENDSETUP },
   { "disconnect",   no_argument,       0, CMD_DISCONNECT },
   { "silent",       no_argument,               0, CMD_SILENT },
@@ -77,6 +78,9 @@ CMDLINE_OPTIONS[] = {
   { "chroot",       no_argument,               0, CMD_CHROOT },
   { "syncsock",     required_argument,         0, CMD_SYNCSOCK },
   { "syncmsg",      required_argument,         0, CMD_SYNCMSG },
+#if 1  
+  { "fakeinit",     no_argument,               0, CMD_INITPID },       // compatibility
+#endif  
   { 0,0,0,0 },
 };
 
@@ -86,7 +90,7 @@ struct Arguments {
     bool               do_migrateself;
     bool               do_disconnect;
     bool               do_endsetup;
-    bool               is_fakeinit;
+    bool               is_initpid;
     bool               is_silentexist;
     int                        verbosity;
     bool               do_chroot;
@@ -112,7 +116,7 @@ showHelp(int fd, char const *cmd, int res)
            "<opts> can be:\n"
            "    --chroot        ...  chroot into current directory\n"
            "    --uid <uid>     ...  change uid\n"
-           "    --fakeinit      ...  set current process as general process reaper\n"
+           "    --initpid       ...  set current process as general process reaper\n"
            "                         for ctx (possible for --migrate only)\n"
            "    --endsetup      ...  clear the setup flag; usefully for migrate only\n"
            "    --disconnect    ...  start program in background\n"
@@ -181,21 +185,13 @@ connectExternalSync(char const *filename)
 static void
 setFlags(struct Arguments const *args, xid_t xid)
 {
-  struct vc_ctx_flags  flags = {
-    .mask     = 0,
-    .flagword = VC_VXF_STATE_INIT|VC_VXF_STATE_SETUP,
-  };
+  struct vc_ctx_flags  flags = { 0,0 };
 
-  if (args->is_fakeinit) {
-    flags.flagword &= ~VC_VXF_STATE_INIT;
-    flags.flagword |=  VC_VXF_INFO_INIT;
-    flags.mask     |=  VC_VXF_INFO_INIT|VC_VXF_STATE_INIT;
-  }
+  if (args->is_initpid)
+    flags.mask |=  VC_VXF_STATE_INIT;
 
-  if (args->do_endsetup) {
-    flags.flagword &= ~VC_VXF_STATE_SETUP;
-    flags.mask     |=  VC_VXF_STATE_SETUP;
-  }
+  if (args->do_endsetup)
+    flags.mask |=  VC_VXF_STATE_SETUP;
 
   if (flags.mask!=0) {
     DPRINTF("set_flags: mask=%08llx, flag=%08llx\n", flags.mask, flags.flagword);
@@ -291,7 +287,7 @@ int main (int argc, char *argv[])
     .do_migrateself = false,
     .do_disconnect  = false,
     .do_endsetup    = false,
-    .is_fakeinit    = false,
+    .is_initpid     = false,
     .is_silentexist = false,
     .verbosity      = 1,
     .uid            = -1,
@@ -310,7 +306,7 @@ int main (int argc, char *argv[])
       case CMD_MIGRATE         :  args.do_migrate     = true;   break;
       case CMD_DISCONNECT      :  args.do_disconnect  = true;   break;
       case CMD_ENDSETUP                :  args.do_endsetup    = true;   break;
-      case CMD_FAKEINIT                :  args.is_fakeinit    = true;   break;
+      case CMD_INITPID         :  args.is_initpid     = true;   break;
       case CMD_CHROOT          :  args.do_chroot      = true;   break;
       case CMD_SILENTEXIST     :  args.is_silentexist = true;   break;
       case CMD_SYNCSOCK                :  args.sync_sock      = optarg; break;
@@ -332,6 +328,8 @@ int main (int argc, char *argv[])
     }
   }
 
+  signal(SIGCHLD, SIG_DFL);
+  
   if (args.do_migrateself)
     args.xid = Evc_get_task_xid(0);
   
@@ -339,8 +337,8 @@ int main (int argc, char *argv[])
     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_fakeinit)
-    WRITE_MSG(2, "'--fakeinit' is possible in combination with '--migrate' only\n");
+  else if (!args.do_migrate && args.is_initpid)
+    WRITE_MSG(2, "'--initpid' is possible in combination with '--migrate' only\n");
   else if (!args.do_create && args.xid==VC_DYNAMIC_XID)
     WRITE_MSG(2, ENSC_WRAPPERS_PREFIX "Can not migrate to an unknown context\n");
   else if (optind>=argc)