1113568Smtm#!/bin/sh 2113568Smtm# 3113568Smtm# $FreeBSD$ 4113568Smtm# 5113568Smtm 6113568Smtm# PROVIDE: jail 7240336Sobrien# REQUIRE: LOGIN FILESYSTEMS 8114735Smtm# BEFORE: securelevel 9136224Smtm# KEYWORD: nojail shutdown 10113568Smtm 11113568Smtm. /etc/rc.subr 12113568Smtm 13113568Smtmname="jail" 14230099Sdougbrcvar="jail_enable" 15204818Sdougb 16113568Smtmstart_cmd="jail_start" 17256256Shrsstart_postcmd="jail_warn" 18113568Smtmstop_cmd="jail_stop" 19256256Shrsconfig_cmd="jail_config" 20256256Shrsconsole_cmd="jail_console" 21256256Shrsstatus_cmd="jail_status" 22256256Shrsextra_commands="config console status" 23256256Shrs: ${jail_conf:=/etc/jail.conf} 24256256Shrs: ${jail_program:=/usr/sbin/jail} 25256668Shrs: ${jail_consolecmd:=/usr/bin/login -f root} 26256256Shrs: ${jail_jexec:=/usr/sbin/jexec} 27256256Shrs: ${jail_jls:=/usr/sbin/jls} 28113568Smtm 29256256Shrsneed_dad_wait= 30256256Shrs 31256256Shrs# extact_var jail name param num defval 32256256Shrs# Extract value from ${jail_$jail_$name} or ${jail_$name} and 33256256Shrs# set it to $param. If not defined, $defval is used. 34256256Shrs# When $num is [0-9]*, ${jail_$jail_$name$num} are looked up and 35256256Shrs# $param is set by using +=. 36256256Shrs# When $num is YN or NY, the value is interpret as boolean. 37256256Shrsextract_var() 38256256Shrs{ 39256256Shrs local i _j _name _param _num _def _name1 _name2 40256256Shrs _j=$1 41256256Shrs _name=$2 42256256Shrs _param=$3 43256256Shrs _num=$4 44256256Shrs _def=$5 45256256Shrs 46256256Shrs case $_num in 47256256Shrs YN) 48256256Shrs _name1=jail_${_j}_${_name} 49256256Shrs _name2=jail_${_name} 50256256Shrs eval $_name1=\"\${$_name1:-\${$_name2:-$_def}}\" 51256256Shrs if checkyesno $_name1; then 52256256Shrs echo " $_param = 1;" 53256256Shrs else 54256256Shrs echo " $_param = 0;" 55256256Shrs fi 56256256Shrs ;; 57256256Shrs NY) 58256256Shrs _name1=jail_${_j}_${_name} 59256256Shrs _name2=jail_${_name} 60256256Shrs eval $_name1=\"\${$_name1:-\${$_name2:-$_def}}\" 61256256Shrs if checkyesno $_name1; then 62256256Shrs echo " $_param = 0;" 63256256Shrs else 64256256Shrs echo " $_param = 1;" 65256256Shrs fi 66256256Shrs ;; 67256256Shrs [0-9]*) 68256256Shrs i=$_num 69256256Shrs while : ; do 70256256Shrs _name1=jail_${_j}_${_name}${i} 71256256Shrs _name2=jail_${_name}${i} 72256256Shrs eval _tmpargs=\"\${$_name1:-\${$_name2:-$_def}}\" 73256256Shrs if [ -n "$_tmpargs" ]; then 74256256Shrs echo " $_param += \"$_tmpargs\";" 75256256Shrs else 76256256Shrs break; 77256256Shrs fi 78256256Shrs i=$(($i + 1)) 79256256Shrs done 80256256Shrs ;; 81256256Shrs *) 82256256Shrs _name1=jail_${_j}_${_name} 83256256Shrs _name2=jail_${_name} 84256256Shrs eval _tmpargs=\"\${$_name1:-\${$_name2:-$_def}}\" 85256256Shrs if [ -n "$_tmpargs" ]; then 86256256Shrs echo " $_param = \"$_tmpargs\";" 87256256Shrs fi 88256256Shrs ;; 89256256Shrs esac 90256256Shrs} 91256256Shrs 92256256Shrs# parse_options _j 93256256Shrs# Parse options and create a temporary configuration file if necessary. 94119397Smtm# 95256256Shrsparse_options() 96119397Smtm{ 97256668Shrs local _j _p 98256256Shrs _j=$1 99119397Smtm 100256256Shrs _confwarn=0 101119397Smtm if [ -z "$_j" ]; then 102256256Shrs warn "parse_options: you must specify a jail" 103119397Smtm return 104119397Smtm fi 105256256Shrs eval _jconf=\"\${jail_${_j}_conf:-/etc/jail.${_j}.conf}\" 106158431Sflz eval _rootdir=\"\$jail_${_j}_rootdir\" 107158431Sflz eval _hostname=\"\$jail_${_j}_hostname\" 108256256Shrs if [ -z "$_rootdir" -o \ 109256256Shrs -z "$_hostname" ]; then 110256256Shrs if [ -r "$_jconf" ]; then 111256256Shrs _conf="$_jconf" 112256256Shrs return 0 113256256Shrs elif [ -r "$jail_conf" ]; then 114256256Shrs _conf="$jail_conf" 115256256Shrs return 0 116256256Shrs else 117256256Shrs warn "Invalid configuration for $_j " \ 118256256Shrs "(no jail.conf, no hostname, or no path). " \ 119256256Shrs "Jail $_j was ignored." 120256256Shrs fi 121256256Shrs return 1 122256256Shrs fi 123158431Sflz eval _ip=\"\$jail_${_j}_ip\" 124256256Shrs if [ -z "$_ip" ] && ! check_kern_features vimage; then 125256256Shrs warn "no ipaddress specified and no vimage support. " \ 126256256Shrs "Jail $_j was ignored." 127256256Shrs return 1 128256256Shrs fi 129256256Shrs _conf=/var/run/jail.${_j}.conf 130256256Shrs # 131256256Shrs # To relieve confusion, show a warning message. 132256256Shrs # 133256256Shrs _confwarn=1 134256256Shrs if [ -r "$jail_conf" -o -r "$_jconf" ]; then 135256874Shrs if ! checkyesno jail_parallel_start; then 136256874Shrs warn "$_conf is created and used for jail $_j." 137256874Shrs fi 138256256Shrs fi 139256256Shrs /usr/bin/install -m 0644 -o root -g wheel /dev/null $_conf || return 1 140256256Shrs 141256256Shrs eval : \${jail_${_j}_flags:=${jail_flags}} 142158431Sflz eval _exec=\"\$jail_${_j}_exec\" 143256256Shrs eval _exec_start=\"\$jail_${_j}_exec_start\" 144256256Shrs eval _exec_stop=\"\$jail_${_j}_exec_stop\" 145158431Sflz if [ -n "${_exec}" ]; then 146138847Srse # simple/backward-compatible execution 147158431Sflz _exec_start="${_exec}" 148158431Sflz _exec_stop="" 149138847Srse else 150138847Srse # flexible execution 151158431Sflz if [ -z "${_exec_start}" ]; then 152158431Sflz _exec_start="/bin/sh /etc/rc" 153158431Sflz if [ -z "${_exec_stop}" ]; then 154158431Sflz _exec_stop="/bin/sh /etc/rc.shutdown" 155138847Srse fi 156138847Srse fi 157138847Srse fi 158256256Shrs eval _interface=\"\${jail_${_j}_interface:-${jail_interface}}\" 159239382Skuriyama eval _parameters=\"\${jail_${_j}_parameters:-${jail_parameters}}\" 160256256Shrs eval _fstab=\"\${jail_${_j}_fstab:-${jail_fstab:-/etc/fstab.$_j}}\" 161256256Shrs ( 162256256Shrs date +"# Generated by rc.d/jail at %Y-%m-%d %H:%M:%S" 163256256Shrs echo "$_j {" 164256256Shrs extract_var $_j hostname host.hostname - "" 165256256Shrs extract_var $_j rootdir path - "" 166256256Shrs if [ -n "$_ip" ]; then 167256256Shrs extract_var $_j interface interface - "" 168256256Shrs jail_handle_ips_option $_ip $_interface 169256256Shrs alias=0 170256256Shrs while : ; do 171256668Shrs eval _x=\"\$jail_${_j}_ip_multi${alias}\" 172256256Shrs [ -z "$_x" ] && break 173138027Smux 174256256Shrs jail_handle_ips_option $_x $_interface 175256256Shrs alias=$(($alias + 1)) 176256256Shrs done 177256256Shrs case $need_dad_wait in 178256256Shrs 1) 179256256Shrs # Sleep to let DAD complete before 180256256Shrs # starting services. 181256256Shrs echo " exec.start += \"sleep " \ 182256256Shrs $(($(${SYSCTL_N} net.inet6.ip6.dad_count) + 1)) \ 183256256Shrs "\";" 184256256Shrs ;; 185256256Shrs esac 186256256Shrs # These are applicable only to non-vimage jails. 187256256Shrs extract_var $_j fib exec.fib - "" 188256256Shrs extract_var $_j socket_unixiproute_only \ 189256256Shrs allow.raw_sockets NY YES 190256256Shrs else 191256256Shrs echo " vnet;" 192256256Shrs extract_var $_j vnet_interface vnet.interface - "" 193191620Sru fi 194191620Sru 195256256Shrs echo " exec.clean;" 196256256Shrs echo " exec.system_user = \"root\";" 197256256Shrs echo " exec.jail_user = \"root\";" 198256256Shrs extract_var $_j exec_prestart exec.prestart 0 "" 199256256Shrs extract_var $_j exec_poststart exec.poststart 0 "" 200256256Shrs extract_var $_j exec_prestop exec.prestop 0 "" 201256256Shrs extract_var $_j exec_poststop exec.poststop 0 "" 202191620Sru 203256256Shrs echo " exec.start += \"$_exec_start\";" 204256256Shrs extract_var $_j exec_afterstart exec.start 1 "" 205256256Shrs echo " exec.stop = \"$_exec_stop\";" 206159072Smatteo 207256256Shrs extract_var $_j consolelog exec.consolelog - \ 208256256Shrs /var/log/jail_${_j}_console.log 209159072Smatteo 210273188Shrs if [ -r $_fstab ]; then 211273188Shrs echo " mount.fstab = \"$_fstab\";" 212273188Shrs fi 213273188Shrs 214256256Shrs eval : \${jail_${_j}_devfs_enable:=${jail_devfs_enable:-NO}} 215256256Shrs if checkyesno jail_${_j}_devfs_enable; then 216256256Shrs echo " mount.devfs;" 217256668Shrs eval _ruleset=\${jail_${_j}_devfs_ruleset:-${jail_devfs_ruleset}} 218256256Shrs case $_ruleset in 219256256Shrs "") ;; 220256256Shrs [0-9]*) echo " devfs_ruleset = \"$_ruleset\";" ;; 221256256Shrs devfsrules_jail) 222256256Shrs # XXX: This is the default value, 223256256Shrs # Let jail(8) to use the default because 224256256Shrs # mount(8) only accepts an integer. 225256256Shrs # This should accept a ruleset name. 226256256Shrs ;; 227256668Shrs *) warn "devfs_ruleset must be an integer." ;; 228256256Shrs esac 229191620Sru fi 230256256Shrs eval : \${jail_${_j}_fdescfs_enable:=${jail_fdescfs_enable:-NO}} 231256256Shrs if checkyesno jail_${_j}_fdescfs_enable; then 232256387Shrs echo " mount.fdescfs;" 233191620Sru fi 234256256Shrs eval : \${jail_${_j}_procfs_enable:=${jail_procfs_enable:-NO}} 235256256Shrs if checkyesno jail_${_j}_procfs_enable; then 236256256Shrs echo " mount += " \ 237256256Shrs "\"procfs ${_rootdir%/}/proc procfs rw 0 0\";" 238191620Sru fi 239191620Sru 240256256Shrs eval : \${jail_${_j}_mount_enable:=${jail_mount_enable:-NO}} 241256256Shrs if checkyesno jail_${_j}_mount_enable; then 242256256Shrs echo " allow.mount;" >> $_conf 243125376Smtm fi 244113568Smtm 245256256Shrs extract_var $_j set_hostname_allow allow.set_hostname YN NO 246256256Shrs extract_var $_j sysvipc_allow allow.sysvipc YN NO 247256668Shrs for _p in $_parameters; do 248256668Shrs echo " ${_p%\;};" 249256668Shrs done 250256256Shrs echo "}" 251256256Shrs ) >> $_conf 252165942Ssimon 253256256Shrs return 0 254165942Ssimon} 255165942Ssimon 256256256Shrs# jail_extract_address argument iface 257187708Sbz# The second argument is the string from one of the _ip 258187708Sbz# or the _multi variables. In case of a comma separated list 259187708Sbz# only one argument must be passed in at a time. 260187708Sbz# The function alters the _type, _iface, _addr and _mask variables. 261187708Sbz# 262187708Sbzjail_extract_address() 263187708Sbz{ 264256256Shrs local _i _interface 265187708Sbz _i=$1 266256256Shrs _interface=$2 267187708Sbz 268187708Sbz if [ -z "${_i}" ]; then 269187708Sbz warn "jail_extract_address: called without input" 270187708Sbz return 271187708Sbz fi 272187708Sbz 273187708Sbz # Check if we have an interface prefix given and split into 274187708Sbz # iFace and rest. 275187708Sbz case "${_i}" in 276187708Sbz *\|*) # ifN|.. prefix there 277187708Sbz _iface=${_i%%|*} 278187708Sbz _r=${_i##*|} 279187708Sbz ;; 280187708Sbz *) _iface="" 281187708Sbz _r=${_i} 282187708Sbz ;; 283187708Sbz esac 284187708Sbz 285187708Sbz # In case the IP has no interface given, check if we have a global one. 286187708Sbz _iface=${_iface:-${_interface}} 287187708Sbz 288187708Sbz # Set address, cut off any prefix/netmask/prefixlen. 289187708Sbz _addr=${_r} 290187708Sbz _addr=${_addr%%[/ ]*} 291187708Sbz 292187708Sbz # Theoretically we can return here if interface is not set, 293187708Sbz # as we only care about the _mask if we call ifconfig. 294187708Sbz # This is not done because we may want to santize IP addresses 295187708Sbz # based on _type later, and optionally change the type as well. 296187708Sbz 297187708Sbz # Extract the prefix/netmask/prefixlen part by cutting off the address. 298187708Sbz _mask=${_r} 299187708Sbz _mask=`expr "${_mask}" : "${_addr}\(.*\)"` 300187708Sbz 301187708Sbz # Identify type {inet,inet6}. 302187708Sbz case "${_addr}" in 303187708Sbz *\.*\.*\.*) _type="inet" ;; 304187708Sbz *:*) _type="inet6" ;; 305187708Sbz *) warn "jail_extract_address: type not identified" 306187708Sbz ;; 307187708Sbz esac 308187708Sbz 309187708Sbz # Handle the special /netmask instead of /prefix or 310187708Sbz # "netmask xxx" case for legacy IP. 311187708Sbz # We do NOT support shortend class-full netmasks. 312187708Sbz if [ "${_type}" = "inet" ]; then 313187708Sbz case "${_mask}" in 314187708Sbz /*\.*\.*\.*) _mask=" netmask ${_mask#/}" ;; 315187708Sbz *) ;; 316187708Sbz esac 317187708Sbz 318187708Sbz # In case _mask is still not set use /32. 319187708Sbz _mask=${_mask:-/32} 320187708Sbz 321187708Sbz elif [ "${_type}" = "inet6" ]; then 322271214Sgjb # In case _mask is not set for IPv6, use /128. 323259141Speter _mask=${_mask:-/128} 324187708Sbz fi 325187708Sbz} 326187708Sbz 327256256Shrs# jail_handle_ips_option input iface 328187708Sbz# Handle a single argument imput which can be a comma separated 329187708Sbz# list of addresses (theoretically with an option interface and 330187708Sbz# prefix/netmask/prefixlen). 331187708Sbz# 332187708Sbzjail_handle_ips_option() 333187708Sbz{ 334256668Shrs local _x _type _i _defif 335256256Shrs _x=$1 336256668Shrs _defif=$2 337187708Sbz 338187708Sbz if [ -z "${_x}" ]; then 339187708Sbz # No IP given. This can happen for the primary address 340187708Sbz # of each address family. 341187708Sbz return 342187708Sbz fi 343187708Sbz 344187708Sbz # Loop, in case we find a comma separated list, we need to handle 345187708Sbz # each argument on its own. 346187708Sbz while [ ${#_x} -gt 0 ]; do 347187708Sbz case "${_x}" in 348187708Sbz *,*) # Extract the first argument and strip it off the list. 349187708Sbz _i=`expr "${_x}" : '^\([^,]*\)'` 350187708Sbz _x=`expr "${_x}" : "^[^,]*,\(.*\)"` 351256256Shrs ;; 352187708Sbz *) _i=${_x} 353187708Sbz _x="" 354256256Shrs ;; 355187708Sbz esac 356187708Sbz 357187708Sbz _type="" 358187708Sbz _addr="" 359187708Sbz _mask="" 360256668Shrs _iface="" 361256668Shrs jail_extract_address $_i $_defif 362187708Sbz 363187708Sbz # make sure we got an address. 364256256Shrs case $_addr in 365187708Sbz "") continue ;; 366187708Sbz *) ;; 367187708Sbz esac 368187708Sbz 369187708Sbz # Append address to list of addresses for the jail command. 370256256Shrs case $_type in 371239382Skuriyama inet) 372256874Shrs echo " ip4.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";" 373256256Shrs ;; 374239382Skuriyama inet6) 375256874Shrs echo " ip6.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";" 376256256Shrs need_dad_wait=1 377256256Shrs ;; 378187708Sbz esac 379187708Sbz done 380187708Sbz} 381187708Sbz 382256256Shrsjail_config() 383187708Sbz{ 384256668Shrs local _j 385256668Shrs 386256256Shrs case $1 in 387256256Shrs _ALL) return ;; 388187708Sbz esac 389256668Shrs for _j in $@; do 390256668Shrs _j=$(echo $_j | tr /. _) 391256668Shrs if parse_options $_j; then 392256668Shrs echo "$_j: parameters are in $_conf." 393256256Shrs fi 394256256Shrs done 395256256Shrs} 396187708Sbz 397256256Shrsjail_console() 398256256Shrs{ 399256668Shrs local _j _cmd 400256668Shrs 401256256Shrs # One argument that is not _ALL. 402256256Shrs case $#:$1 in 403256668Shrs 0:*|1:_ALL) err 3 "Specify a jail name." ;; 404256668Shrs 1:*) ;; 405245525Sbz esac 406256668Shrs _j=$(echo $1 | tr /. _) 407256668Shrs shift 408256668Shrs case $# in 409256668Shrs 0) eval _cmd=\${jail_${_j}_consolecmd:-$jail_consolecmd} ;; 410256668Shrs *) _cmd=$@ ;; 411256668Shrs esac 412256668Shrs $jail_jexec $_j $_cmd 413187708Sbz} 414187708Sbz 415256256Shrsjail_status() 416204818Sdougb{ 417256256Shrs 418256256Shrs $jail_jls -N 419204818Sdougb} 420204818Sdougb 421125376Smtmjail_start() 422125376Smtm{ 423273188Shrs local _j _jid _jl 424256668Shrs 425256256Shrs if [ $# = 0 ]; then 426256256Shrs return 427256256Shrs fi 428256256Shrs echo -n 'Starting jails:' 429256256Shrs case $1 in 430256256Shrs _ALL) 431256256Shrs command=$jail_program 432256256Shrs rc_flags=$jail_flags 433256256Shrs command_args="-f $jail_conf -c" 434256874Shrs _tmp=`mktemp -t jail` || exit 3 435256874Shrs if $command $rc_flags $command_args >> $_tmp 2>&1; then 436273188Shrs $jail_jls jid name | while read IN; do 437273188Shrs set -- $IN 438273188Shrs echo -n " $2" 439273188Shrs echo $1 > /var/run/jail_$2.id 440256874Shrs done 441256874Shrs else 442256874Shrs tail -1 $_tmp 443256874Shrs fi 444256874Shrs rm -f $_tmp 445256256Shrs echo '.' 446256256Shrs return 447256256Shrs ;; 448256256Shrs esac 449256874Shrs if checkyesno jail_parallel_start; then 450256874Shrs # 451256874Shrs # Start jails in parallel and then check jail id when 452256874Shrs # jail_parallel_start is YES. 453256874Shrs # 454256874Shrs _jl= 455256874Shrs for _j in $@; do 456256874Shrs _j=$(echo $_j | tr /. _) 457256874Shrs parse_options $_j || continue 458113568Smtm 459256874Shrs _jl="$_jl $_j" 460256874Shrs eval rc_flags=\${jail_${_j}_flags:-$jail_flags} 461256874Shrs eval command=\${jail_${_j}_program:-$jail_program} 462256668Shrs command_args="-i -f $_conf -c $_j" 463256874Shrs $command $rc_flags $command_args \ 464256874Shrs >/dev/null 2>&1 </dev/null & 465256874Shrs done 466256874Shrs sleep 1 467256874Shrs for _j in $_jl; do 468256668Shrs echo -n " ${_hostname:-${_j}}" 469273188Shrs if _jid=$($jail_jls -j $_j jid); then 470273188Shrs echo "$_jid" > /var/run/jail_${_j}.id 471256874Shrs else 472256874Shrs rm -f /var/run/jail_${_j}.id 473256874Shrs echo " cannot start jail " \ 474256874Shrs "\"${_hostname:-${_j}}\": " 475256874Shrs fi 476256874Shrs done 477256874Shrs else 478256874Shrs # 479256874Shrs # Start jails one-by-one when jail_parallel_start is NO. 480256874Shrs # 481256874Shrs for _j in $@; do 482256874Shrs _j=$(echo $_j | tr /. _) 483256874Shrs parse_options $_j || continue 484256874Shrs 485256874Shrs eval rc_flags=\${jail_${_j}_flags:-$jail_flags} 486256874Shrs eval command=\${jail_${_j}_program:-$jail_program} 487256874Shrs command_args="-i -f $_conf -c $_j" 488256874Shrs _tmp=`mktemp -t jail` || exit 3 489256874Shrs if $command $rc_flags $command_args \ 490256874Shrs >> $_tmp 2>&1 </dev/null; then 491256874Shrs echo -n " ${_hostname:-${_j}}" 492273188Shrs _jid=$($jail_jls -j $_j jid) 493273188Shrs echo $_jid > /var/run/jail_${_j}.id 494256874Shrs else 495256874Shrs rm -f /var/run/jail_${_j}.id 496256874Shrs echo " cannot start jail " \ 497256874Shrs "\"${_hostname:-${_j}}\": " 498256874Shrs cat $_tmp 499256874Shrs fi 500256874Shrs rm -f $_tmp 501256874Shrs done 502256874Shrs fi 503119397Smtm echo '.' 504113568Smtm} 505113568Smtm 506113568Smtmjail_stop() 507113568Smtm{ 508273188Shrs local _j 509256668Shrs 510256256Shrs if [ $# = 0 ]; then 511256256Shrs return 512256256Shrs fi 513125391Smtm echo -n 'Stopping jails:' 514256256Shrs case $1 in 515256256Shrs _ALL) 516256256Shrs command=$jail_program 517256256Shrs rc_flags=$jail_flags 518256256Shrs command_args="-f $jail_conf -r" 519273188Shrs $jail_jls name | while read _j; do 520273188Shrs echo -n " $_j" 521256874Shrs _tmp=`mktemp -t jail` || exit 3 522273188Shrs $command $rc_flags $command_args $_j >> $_tmp 2>&1 523273188Shrs if $jail_jls -j $_j > /dev/null 2>&1; then 524256874Shrs tail -1 $_tmp 525256874Shrs else 526273188Shrs rm -f /var/run/jail_${_j}.id 527256668Shrs fi 528256874Shrs rm -f $_tmp 529256668Shrs done 530256256Shrs echo '.' 531256256Shrs return 532256256Shrs ;; 533256256Shrs esac 534256668Shrs for _j in $@; do 535256668Shrs _j=$(echo $_j | tr /. _) 536256668Shrs parse_options $_j || continue 537256668Shrs if ! $jail_jls -j $_j > /dev/null 2>&1; then 538256668Shrs continue 539256668Shrs fi 540256256Shrs eval command=\${jail_${_j}_program:-$jail_program} 541256668Shrs echo -n " ${_hostname:-${_j}}" 542256874Shrs _tmp=`mktemp -t jail` || exit 3 543256874Shrs $command -q -f $_conf -r $_j >> $_tmp 2>&1 544256874Shrs if $jail_jls -j $_j > /dev/null 2>&1; then 545256874Shrs tail -1 $_tmp 546256874Shrs else 547256668Shrs rm -f /var/run/jail_${_j}.id 548125323Smtm fi 549256874Shrs rm -f $_tmp 550125323Smtm done 551125391Smtm echo '.' 552113568Smtm} 553113568Smtm 554256256Shrsjail_warn() 555256256Shrs{ 556256256Shrs 557256256Shrs # To relieve confusion, show a warning message. 558256256Shrs case $_confwarn in 559256256Shrs 1) warn "Per-jail configuration via jail_* variables " \ 560256256Shrs "is obsolete. Please consider to migrate to $jail_conf." 561256256Shrs ;; 562256256Shrs esac 563256256Shrs} 564256256Shrs 565125391Smtmload_rc_config $name 566256256Shrscase $# in 567256256Shrs1) run_rc_command $@ ${jail_list:-_ALL} ;; 568256256Shrs*) run_rc_command $@ ;; 569256256Shrsesac 570