From owner-svn-src-head@FreeBSD.ORG Tue Oct 15 04:54:50 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 18233195; Tue, 15 Oct 2013 04:54:50 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 04325205C; Tue, 15 Oct 2013 04:54:50 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9F4snbS001276; Tue, 15 Oct 2013 04:54:49 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9F4snOM001275; Tue, 15 Oct 2013 04:54:49 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201310150454.r9F4snOM001275@svn.freebsd.org> From: Hiroki Sato Date: Tue, 15 Oct 2013 04:54:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r256498 - head/etc/rc.d X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Oct 2013 04:54:50 -0000 Author: hrs Date: Tue Oct 15 04:54:49 2013 New Revision: 256498 URL: http://svnweb.freebsd.org/changeset/base/256498 Log: - Fix "ifname|addr" syntax support in jail_{jname}_ip. - Create /var/run/jail_{jname}.id because ezjail-admin depends on it. Modified: head/etc/rc.d/jail Modified: head/etc/rc.d/jail ============================================================================== --- head/etc/rc.d/jail Tue Oct 15 04:45:09 2013 (r256497) +++ head/etc/rc.d/jail Tue Oct 15 04:54:49 2013 (r256498) @@ -22,7 +22,7 @@ status_cmd="jail_status" extra_commands="config console status" : ${jail_conf:=/etc/jail.conf} : ${jail_program:=/usr/sbin/jail} -: ${jail_consolecmd:=/bin/sh} +: ${jail_consolecmd:=/usr/bin/login -f root} : ${jail_jexec:=/usr/sbin/jexec} : ${jail_jls:=/usr/sbin/jls} @@ -329,9 +329,9 @@ jail_extract_address() # jail_handle_ips_option() { - local _x _type _i _iface + local _x _type _i _defif _x=$1 - _iface=$2 + _defif=$2 if [ -z "${_x}" ]; then # No IP given. This can happen for the primary address @@ -355,7 +355,8 @@ jail_handle_ips_option() _type="" _addr="" _mask="" - jail_extract_address $_i $_iface + _iface="" + jail_extract_address $_i $_defif # make sure we got an address. case $_addr in @@ -366,10 +367,10 @@ jail_handle_ips_option() # Append address to list of addresses for the jail command. case $_type in inet) - echo " ip4.addr += \"${_addr}${_mask}\";" + echo " ip4.addr += \"${_iface}|${_addr}${_mask}\";" ;; inet6) - echo " ip6.addr += \"${_addr}${_mask}\";" + echo " ip6.addr += \"${_iface}|${_addr}${_mask}\";" need_dad_wait=1 ;; esac @@ -393,16 +394,19 @@ jail_config() jail_console() { - local _j + local _j _cmd # One argument that is not _ALL. case $#:$1 in - 1:_ALL) err 3 "Specify a jail name." ;; - 1:*) ;; - *) err 3 "Specify a jail name." ;; + 0:*|1:_ALL) err 3 "Specify a jail name." ;; + 1:*) ;; esac _j=$(echo $1 | tr /. _) - eval _cmd=\${jail_${_j}_consolecmd:-$jail_consolecmd} + shift + case $# in + 0) eval _cmd=\${jail_${_j}_consolecmd:-$jail_consolecmd} ;; + *) _cmd=$@ ;; + esac $jail_jexec $_j $_cmd } @@ -414,7 +418,7 @@ jail_status() jail_start() { - local _j + local _j _jid _jn if [ $# = 0 ]; then return @@ -426,7 +430,15 @@ jail_start() command=$jail_program rc_flags=$jail_flags command_args="-f $jail_conf -c" - $command $rc_flags $command_args "*" + $jail_jls -nq | while read IN; do + _jn=$(echo $IN | tr " " "\n" | grep name=) + _jid=$(echo $IN | tr " " "\n" | grep jid=) + if $command $rc_flags $command_args ${_jn#name=}; then + echo -n " ${_jn#name=}" + echo "${_jid#jid=}" \ + > /var/run/jail_${_jn#name=}.id + fi + done echo '.' return ;; @@ -446,7 +458,10 @@ jail_start() if $command $rc_flags $command_args \ >> $_tmp 2>&1 /var/run/jail_${_j}.id else + rm -f /var/run/jail_${_j}.id echo " cannot start jail \"${_hostname:-${_j}}\": " cat $_tmp fi @@ -457,7 +472,7 @@ jail_start() jail_stop() { - local _j + local _j _jn if [ $# = 0 ]; then return @@ -469,7 +484,14 @@ jail_stop() command=$jail_program rc_flags=$jail_flags command_args="-f $jail_conf -r" - $command $rc_flags $command_args "*" + $jail_jls -nq | while read IN; do + _jn=$(echo $IN | tr " " "\n" | grep name=) + echo -n " ${_jn#name=}" + $command $rc_flags $command_args ${_jn#name=} + if ! $jail_jls -j ${_jn#name=} > /dev/null 2>&1; then + rm -f /var/run/jail_${_jn#name=}.id + fi + done echo '.' return ;; @@ -477,9 +499,14 @@ jail_stop() for _j in $@; do _j=$(echo $_j | tr /. _) parse_options $_j || continue + if ! $jail_jls -j $_j > /dev/null 2>&1; then + continue + fi eval command=\${jail_${_j}_program:-$jail_program} - if $command -q -f $_conf -r $_j; then - echo -n " ${_hostname:-${_j}}" + echo -n " ${_hostname:-${_j}}" + $command -q -f $_conf -r $_j + if ! $jail_jls -j $_j > /dev/null 2>&1; then + rm -f /var/run/jail_${_j}.id fi done echo '.'