Guest User

/etc/rc.d/jail Patch for FreeBSD9-stable

a guest
Jan 19th, 2012
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.31 KB | None | 0 0
  1. --- /usr/src/etc/rc.d/jail  2011-09-23 02:51:37.000000000 +0200
  2. +++ /etc/rc.d/jail  2012-01-19 14:36:35.659521180 +0100
  3. @@ -40,6 +40,7 @@
  4.     _fdescdir="${_devdir}/fd"
  5.     _procdir="${_rootdir}/proc"
  6.     eval _hostname=\"\$jail_${_j}_hostname\"
  7. +   eval _name=\"\$jail_${_j}_name\"
  8.     eval _ip=\"\$jail_${_j}_ip\"
  9.     eval _interface=\"\${jail_${_j}_interface:-${jail_interface}}\"
  10.     eval _exec=\"\$jail_${_j}_exec\"
  11. @@ -53,7 +54,7 @@
  12.  
  13.     eval _exec_start=\"\${jail_${_j}_exec_start:-${jail_exec_start}}\"
  14.  
  15. -   i=1
  16. +   i=0
  17.     while : ; do
  18.         eval _exec_afterstart${i}=\"\${jail_${_j}_exec_afterstart${i}:-\${jail_exec_afterstart${i}}}\"
  19.         [ -z "$(eval echo \"\$_exec_afterstart${i}\")" ] &&  break
  20. @@ -62,6 +63,14 @@
  21.  
  22.     i=0
  23.     while : ; do
  24. +
  25. +   eval _exec_earlypoststart${i}=\"\${jail_${_j}_exec_earlypoststart${i}:-\${jail_exec_earlypoststart${i}}}\"
  26. +       [ -z "$(eval echo \"\$_exec_earlypoststart${i}\")" ] && break
  27. +       i=$((i + 1))
  28. +   done
  29. +
  30. +   i=0
  31. +   while : ; do
  32.         eval _exec_poststart${i}=\"\${jail_${_j}_exec_poststart${i}:-\${jail_exec_poststart${i}}}\"
  33.         [ -z "$(eval echo \"\$_exec_poststart${i}\")" ] && break
  34.         i=$((i + 1))
  35. @@ -97,6 +106,9 @@
  36.         fi
  37.     fi
  38.  
  39. +   # JAIL new style
  40. +   eval _v2=\"\${jail_v2_enable:-"NO"}\"
  41. +
  42.     # The default jail ruleset will be used by rc.subr if none is specified.
  43.     eval _ruleset=\"\${jail_${_j}_devfs_ruleset:-${jail_devfs_ruleset}}\"
  44.     eval _devfs=\"\${jail_${_j}_devfs_enable:-${jail_devfs_enable}}\"
  45. @@ -112,18 +124,26 @@
  46.     eval _fstab=\"\${jail_${_j}_fstab:-${jail_fstab}}\"
  47.     [ -z "${_fstab}" ] && _fstab="/etc/fstab.${_j}"
  48.     eval _flags=\"\${jail_${_j}_flags:-${jail_flags}}\"
  49. -   [ -z "${_flags}" ] && _flags="-l -U root"
  50. +   if checkyesno _v2; then
  51. +       [ -z "${_flags}" ] && _flags="-l -U root -c"
  52. +   else
  53. +       [ -z "${_flags}" ] && _flags="-l -U root"
  54. +   fi
  55.     eval _consolelog=\"\${jail_${_j}_consolelog:-${jail_consolelog}}\"
  56.     [ -z "${_consolelog}" ] && _consolelog="/var/log/jail_${_j}_console.log"
  57.     eval _fib=\"\${jail_${_j}_fib:-${jail_fib}}\"
  58. +   eval _vnet=\"\${jail_${_j}_vnet_enable:-"NO"}\"
  59.  
  60.     # Debugging aid
  61.     #
  62. +   debug "$_j v2 enable: $_v2"
  63.     debug "$_j devfs enable: $_devfs"
  64.     debug "$_j fdescfs enable: $_fdescfs"
  65.     debug "$_j procfs enable: $_procfs"
  66.     debug "$_j mount enable: $_mount"
  67. +   debug "$_j vnet enable: $_vnet"
  68.     debug "$_j hostname: $_hostname"
  69. +   debug "$_j name: $_name"
  70.     debug "$_j ip: $_ip"
  71.     jail_show_addresses ${_j}
  72.     debug "$_j interface: $_interface"
  73. @@ -147,7 +167,7 @@
  74.  
  75.     debug "$_j exec start: $_exec_start"
  76.  
  77. -   i=1
  78. +   i=0
  79.     while : ; do
  80.         eval out=\"\${_exec_afterstart${i}:-''}\"
  81.  
  82. @@ -484,6 +504,18 @@
  83.         esac
  84.  
  85.         # Append address to list of addresses for the jail command.
  86. +       case "${_type}" in
  87. +           "inet") case "${_addrlv4}" in
  88. +               "")     _addrlv4="${_addr}" ;;
  89. +               *)      _addrlv4="${_addrlv4},${_addr}" ;;
  90. +               esac;;
  91. +           "inet6") case "${_addrlv6}" in
  92. +               "")     _addrlv6="${_addr}" ;;
  93. +               *)      _addrlv6="${_addrlv6},${_addr}" ;;
  94. +               esac;;
  95. +       esac
  96. +
  97. +       # Append address to list of addresses for the jail command.
  98.         case "${_addrl}" in
  99.         "") _addrl="${_addr}" ;;
  100.         *)  _addrl="${_addrl},${_addr}" ;;
  101. @@ -644,13 +676,38 @@
  102.             i=$((i + 1))
  103.         done
  104.  
  105. -       eval ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
  106. -           \"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1 \
  107. +       if checkyesno _v2; then
  108. +           _start_cmd="${_setfib} jail -J ${_tmp_jail} ${_flags} path=${_rootdir} host.hostname=${_hostname} \
  109. +               name=\"${_name}\""
  110. +               if checkyesno _vnet; then
  111. +                   _start_cmd="${_start_cmd} vnet"
  112. +                   else
  113. +                   _start_cmd="${_start_cmd} ip4.addr=\"${_addrlv4}\" ip6.addr=\"${_addrlv6}\""
  114. +                   fi
  115. +                   _start_cmd="${_start_cmd} command=${_exec_start}"
  116. +               eval ${_start_cmd} > /dev/null 2>&1
  117. +       else
  118. +               eval ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
  119. +                   \"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1
  120. +       fi
  121.             </dev/null
  122.  
  123.         if [ "$?" -eq 0 ] ; then
  124. -           _jail_id=$(head -1 ${_tmp_jail})
  125. -           i=1
  126. +           if checkyesno _v2; then
  127. +               _jail_id=$(awk -F '=| ' '{print $2}' ${_tmp_jail})
  128. +           else
  129. +               _jail_id=$(head -1 ${_tmp_jail})
  130. +           fi
  131. +
  132. +           i=0
  133. +           while : ; do
  134. +               eval out=\"\${_exec_earlypoststart${i}:-''}\"
  135. +               [ -z "$out" ] && break
  136. +               ${out}
  137. +               i=$((i + 1))
  138. +           done
  139. +           i=0
  140. +
  141.             while : ; do
  142.                 eval out=\"\${_exec_afterstart${i}:-''}\"
Add Comment
Please, Sign In to add comment