X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fchcontext;h=ea42ad8d2e5b9f8f7b183133664a5d29d9da0850;hb=f21bcfd6e19b055c89bb4c5d66511dda1cde9449;hp=69f644c281401be31ac3bc4c5248d3caa81550d2;hpb=72d0916cacc395fa33d53a7d5f24b352c375a917;p=util-vserver.git diff --git a/util-vserver/scripts/chcontext b/util-vserver/scripts/chcontext index 69f644c..ea42ad8 100755 --- a/util-vserver/scripts/chcontext +++ b/util-vserver/scripts/chcontext @@ -18,7 +18,7 @@ : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" || { - echo "Can not find util-vserver installation; aborting..." + echo "Can not find util-vserver installation; aborting..." >&2 exit 1 } . "$UTIL_VSERVER_VARS" @@ -93,10 +93,76 @@ function showVersion() $"chcontext $PACKAGE_VERSION -- allocates/enters a security context This program is part of $PACKAGE_STRING -Copyright (C) 2003 Enrico Scholz +Copyright (C) 2004 Enrico Scholz This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty." exit $1 } -isKernelAPI 0x00010012 || exec $_CHCONTEXT_COMPAT "$@" +$_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 +eval set -- "$tmp" + +OPT_CAPS=() +OPT_CTX= +OPT_DISCONNECT= +OPT_FLAGS=() +OPT_SECURE= +OPT_SILENT= +OPT_FAKEINIT= + +while true; do + case "$1" in + --help) showHelp $0 ;; + --version) showVersion ;; + --cap) OPT_CAPS=( "${OPT_CAPS[@]}" "$2" ); shift;; + --ctx) OPT_CTX=$2; shift;; + --disconnect) OPT_DISCONNECT=1;; + --domainname) OPT_DOMAINNAME=$2; shift;; + --hostname) OPT_HOSTNAME=$2; shift;; + --flag) + test "$2" = "fakeinit" && \ + OPT_FAKEINIT=--fakeinit || + OPT_FLAGS=( "${OPT_FLAGS[@]}" "$2" ) + shift + ;; + --secure) OPT_SECURE=1;; + --silent) OPT_SILENT=1;; + --) shift; break;; + *) echo $"chcontext: internal error; arg=='$1'" >&2; exit 1;; + esac + shift +done + +create_cmd=( $_VCONTEXT --create + ${OPT_SILENT:+--silent} + ${OPT_CTX:+--xid "$OPT_CTX"} ) + +chain_cmd=() + +test -z "$OPT_DOMAINNAME$OPT_HOSTNAME" || \ + chain_cmd=( "${chain_cmd[@]}" + -- + $_VUNAME --set --xid self + ${OPT_DOMAINNAME:+-t domainname="$OPT_DOMAINNAME"} + ${OPT_HOSTNAME:+ -t nodename="$OPT_HOSTNAME"} ) + +chain_cmd=( "${chain_cmd[@]}" + -- + $_VATTRIBUTE --set + ${OPT_CAPS:+--bcap "${OPT_CAPS[@]}"} + ${OPT_FLAGS:+--flag "${OPT_FLAGS[@]}"} + ${OPT_SECURE:+--secure} ) + +migrate_cmd=( $_VCONTEXT + ${OPT_SILENT:+--silent} + ${OPT_DISCONNECT:+--disconnect} + $OPT_FAKEINIT ) + +"${create_cmd[@]}" "${chain_cmd[@]}" -- \ + "${migrate_cmd[@]}" --endsetup --migrate-self -- "$@" +rc=$? + +test "$rc" -ne 254 || exec "${migrate_cmd[@]}" --xid "$OPT_CTX" --migrate -- "$@" +exit $rc