Changeset 2658

Show
Ignore:
Timestamp:
01/12/08 16:48:04 (11 months ago)
Author:
dhozac
Message:

Pid namespaces require clone.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/vspace.c

    r2618 r2658  
    2323 
    2424#include "util.h" 
    25 #include <lib_internal/sys_unshare.h> 
     25#include <lib_internal/sys_clone.h> 
    2626 
    2727#include <vserver.h> 
     
    103103 
    104104static void 
    105 newSpaces(uint_least64_t mask) 
    106 
    107   if (sys_unshare((int) mask) == -1) { 
    108     perror(ENSC_WRAPPERS_PREFIX "unshare()"); 
    109     exit(wrapper_exit_code); 
     105newSpaces(uint_least64_t mask, const char *cmd) 
     106
     107  pid_t pid; 
     108 
     109  signal(SIGCHLD, SIG_DFL); 
     110 
     111#ifdef NDEBUG 
     112  pid = sys_clone((int) mask | CLONE_VFORK|SIGCHLD, 0); 
     113#else 
     114  pid = sys_clone((int) mask | SIGCHLD, 0); 
     115#endif 
     116 
     117  switch (pid) { 
     118    case -1     : 
     119      perror(ENSC_WRAPPERS_PREFIX "clone()"); 
     120      exit(wrapper_exit_code); 
     121    case 0      : 
     122      break; 
     123    default     : 
     124      exitLikeProcess(pid, cmd, wrapper_exit_code); 
    110125  } 
    111126} 
     
    186201    WRITE_MSG(2, "No command specified; try '--help' for more information\n"); 
    187202  else { 
    188     if      (do_new)     newSpaces(mask); 
     203    if      (do_new)     newSpaces(mask, argv[optind]); 
    189204    else if (do_set)     setSpaces(VC_SAMECTX, mask); 
    190205    else if (do_enter)   enterSpaces(xid, mask);