diff --git a/src/etc/rc b/src/etc/rc index b3d35b3f..1bfa0992 100644 --- a/src/etc/rc +++ b/src/etc/rc @@ -1,4 +1,4 @@ -# $OpenBSD: rc,v 1.389 2011/07/19 13:50:49 deraadt Exp $ +# $OpenBSD: rc,v 1.390 2011/07/20 09:56:00 halex Exp $ # System startup script run by init on autoboot # or after single-user. @@ -115,31 +115,22 @@ random_seed() fill_baddynamic() { - local _service="$1" + local _service=$1 local _sysctl="net.inet.${_service}.baddynamic" - local _name _port _srv _junk _ban - local _i=0 - local _ifs="${IFS}" - IFS=" /" - while read _name _port _srv _junk; do - [ "x${_srv}" = "x${_service}" ] && \ - [ "x${_name}" = "x${_name#\#}" ] || continue; - if [ "x${_ban}" = "x" ]; then - _ban="+${_port}" - else - _ban="${_ban},+${_port}" - fi - # Flush before argv gets too long - if [ $((++_i)) -gt 128 ]; then - sysctl ${_sysctl}=${_ban} >/dev/null - _ban="" - _i=0 - fi - done < /etc/services; - if [ "x${_ban}" != "x" ]; then - sysctl ${_sysctl}=${_ban} >/dev/null - fi - IFS="${_ifs}" + stripcom /etc/services | + { + # Variables are local + while IFS=" /" read _name _port _srv _junk; do + [ "x${_srv}" = "x${_service}" ] || continue; + _ban="${_ban:+${_ban},}+${_port}" + # Flush before argv gets too long + if [ ${#_ban} -gt 1024 ]; then + sysctl -q ${_sysctl}=${_ban} + _ban="" + fi + done + [ "${_ban}" ] && sysctl -q ${_sysctl}=${_ban} + } } start_daemon()