X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fchcontext;h=9fa67cda3ac447c412ae9cf0e86ffe4a57a0e621;hb=faa778968d1a7dfeaebc9fe4b847e691dc62fd15;hp=96f5db24a1f969289f492d4feb86004eaee0226a;hpb=5a31ebecd090377e8d8760d5c70d74724aac5463;p=util-vserver.git diff --git a/util-vserver/scripts/chcontext b/util-vserver/scripts/chcontext index 96f5db2..9fa67cd 100755 --- a/util-vserver/scripts/chcontext +++ b/util-vserver/scripts/chcontext @@ -27,7 +27,7 @@ test -e "$UTIL_VSERVER_VARS" || { function showHelp() { echo \ -$"Usage: /usr/sbin/chcontext [--cap [!]] [--secure] [--ctx ] [--disconnect] +$"Usage: /usr/sbin/chcontext [--cap [!]] [--secure] [--xid ] [--disconnect] [--domainname ] [--hostname ] [--flag +] [--silent] [--] command arguments ... @@ -48,12 +48,12 @@ By default, a new/unused context is allocated repeated several time. See /usr/include/linux/capability.h ---ctx num +--xid num Select the context. On root in context 0 is allowed to select a specific context. Context number 1 is special. It can see all processes in any contexts, but can't kill them though. - Option --ctx may be repeated several times to specify up to 16 contexts. + Option --xid may be repeated several times to specify up to 16 contexts. --disconnect Start the command in background and make the process a child of process 1. @@ -101,7 +101,7 @@ the GNU General Public License. This program has absolutely no warranty." $_VSERVER_INFO - FEATURE migrate || exec $_CHCONTEXT_COMPAT "$@" -tmp=$(getopt -o + --long cap:,ctx:,disconnect,domainname:,flag:,hostname:,secure,silent,help,version -n "$0" -- "$@") || exit 1 +tmp=$(getopt -o + --long cap:,ctx:,xid:,disconnect,domainname:,flag:,hostname:,secure,silent,help,version -n "$0" -- "$@") || exit 1 eval set -- "$tmp" OPT_CAPS=() @@ -117,7 +117,7 @@ while true; do --help) showHelp $0 ;; --version) showVersion ;; --cap) OPT_CAPS=( "${OPT_CAPS[@]}" "$2" ); shift;; - --ctx) OPT_CTX=$2; shift;; + --ctx|--xid) OPT_CTX=$2; shift;; --disconnect) OPT_DISCONNECT=1;; --domainname) OPT_DOMAINNAME=$2; shift;; --hostname) OPT_HOSTNAME=$2; shift;; @@ -134,12 +134,15 @@ while true; do shift done -create_cmd=( $_VCONTEXT --create +create_cmd=( $_VCONTEXT --create --silentexist ${OPT_SILENT:+--silent} ${OPT_CTX:+--xid "$OPT_CTX"} ) chain_cmd=() +old_IFS=$IFS +IFS=,$IFS + test -z "$OPT_DOMAINNAME$OPT_HOSTNAME" || \ chain_cmd=( "${chain_cmd[@]}" -- @@ -150,8 +153,8 @@ test -z "$OPT_DOMAINNAME$OPT_HOSTNAME" || \ chain_cmd=( "${chain_cmd[@]}" -- $_VATTRIBUTE --set - ${OPT_CAPS:+--bcap "${OPT_CAPS[@]}"} - ${OPT_FLAGS:+--flag "${OPT_FLAGS[@]}"} + ${OPT_CAPS:+--bcap "${OPT_CAPS[*]}"} + ${OPT_FLAGS:+--flag "${OPT_FLAGS[*]}"} ${OPT_SECURE:+--secure} ) migrate_cmd=( $_VCONTEXT @@ -159,9 +162,15 @@ migrate_cmd=( $_VCONTEXT ${OPT_DISCONNECT:+--disconnect} $OPT_INITPID ) -"${create_cmd[@]}" "${chain_cmd[@]}" -- \ - "${migrate_cmd[@]}" --endsetup --migrate-self -- "$@" -rc=$? +IFS=$old_IFS + +if test -z "$OPT_CTX" || $_VSERVER_INFO -q "$OPT_CTX" XIDTYPE static; then + "${create_cmd[@]}" "${chain_cmd[@]}" -- \ + "${migrate_cmd[@]}" --endsetup --migrate-self -- "$@" + rc=$? +else + rc=254 +fi test "$rc" -ne 254 || exec "${migrate_cmd[@]}" --xid "$OPT_CTX" --migrate -- "$@" exit $rc