Index: etc/rc.d/jail =================================================================== RCS file: /home/dcvs/src/etc/rc.d/jail,v retrieving revision 1.4 diff -u -r1.4 jail --- etc/rc.d/jail 19 Nov 2005 21:47:32 -0000 1.4 +++ etc/rc.d/jail 29 Dec 2007 08:33:51 -0000 @@ -15,7 +15,7 @@ start_cmd="jail_start" stop_cmd="jail_stop" -jail_start() +jail_config() { echo -n 'Configuring jails:' echo -n ' set_hostname_allowed=' @@ -45,17 +45,15 @@ ${SYSCTL_W} 1>/dev/null jail.sysvipc_allowed=0 fi echo '.' +} +jail_start() +{ + jail_config echo 'Starting Jails.' for _jail in ${jail_list} do - eval jail_rootdir=\"\$jail_${_jail}_rootdir\" - eval jail_hostname=\"\$jail_${_jail}_hostname\" - eval jail_ip=\"\$jail_${_jail}_ip\" - eval jail_exec=\"\$jail_${_jail}_exec\" - [ -z ${jail_exec} ] && jail_exec="/bin/sh /etc/rc" - - jail ${jail_rootdir} ${jail_hostname} ${jail_ip} ${jail_exec} + jail_start_one "${_jail}" done } @@ -64,6 +62,75 @@ kill -TERM $(ps aux | awk '$8 ~ /.*J/ {print $2};') } +jail_stop_one() +{ + _jail=$1 + eval jail_hostname=\"\$jail_${_jail}_hostname\" + echo "Stopping Jail ${_jail}." + jls | grep "${jail_hostname}" | cut -f1 | xargs -J A jexec A kill -TERM -1 +} + +jail_start_one() +{ + _jail=$1 + echo "Starting Jail ${_jail}." + + eval jail_rootdir=\"\$jail_${_jail}_rootdir\" + eval jail_hostname=\"\$jail_${_jail}_hostname\" + eval jail_ip=\"\$jail_${_jail}_ip\" + eval jail_exec=\"\$jail_${_jail}_exec\" + [ -z ${jail_exec} ] && jail_exec="/bin/sh /etc/rc" + + jail ${jail_rootdir} ${jail_hostname} ${jail_ip} ${jail_exec} +} + +checkjailname() +{ + _check=$1 + for _jail in ${jail_list} + do + if [ "${_jail}" = "${_check}" ]; then + return 0 + fi + done + return 1 +} + +run_jail_command() +{ + _jail=$1 + _cmd=$2 + + if [ "${_cmd}" = "start" ]; then + jail_config + jail_start_one "${_jail}" + return 0 + fi + + if [ "${_cmd}" = "stop" ]; then + jail_stop_one "${_jail}" + return 0 + fi + + if [ "${_cmd}" = "restart" ]; then + jail_stop_one "${_jail}" + jail_config + jail_start_one "${_jail}" + return 0 + fi + + echo "./jail: unknown directive '${_cmd}'." + echo "Usage: ./jail (start|stop|restart) (jailname)" + return 1 +} load_rc_config $name -run_rc_command "$1" +if [ -z "$2"]; then + run_rc_command "$1" +else + if checkjailname "$2"; then + run_jail_command "$2" "$1" + else + echo "Unknown jail: $2" + fi +fi