Index: libexec/rc/rc.conf =================================================================== --- libexec/rc/rc.conf +++ libexec/rc/rc.conf @@ -758,31 +758,32 @@ if [ -z "${source_rc_confs_defined}" ]; then source_rc_confs_defined=yes source_rc_confs() { - local i sourced_files - for i in ${rc_conf_files}; do - case ${sourced_files} in - *:$i:*) - ;; - *) - sourced_files="${sourced_files}:$i:" - if [ -r $i ]; then - . $i - fi - ;; - esac - done - # Re-do process to pick up [possibly] redefined $rc_conf_files - for i in ${rc_conf_files}; do - case ${sourced_files} in - *:$i:*) - ;; - *) - sourced_files="${sourced_files}:$i:" - if [ -r $i ]; then - . $i - fi - ;; - esac + local i sourced_files loop_num found_new + loop_num=0 + while [ $loop_num -lt 25 ]; do + loop_num=$((loop_num+1)) + found_new= + for i in ${rc_conf_files}; do + case ${sourced_files} in + *:$i:*) + ;; + *) + sourced_files="${sourced_files}:$i:" + found_new=1 + if [ -r $i ]; then + . $i + fi + ;; + esac + done + if [ $loop_num -ge 25 ]; then + warn 'loop in source_rc_confs() ran' \ + 'maximum (25) times' \ + '- check if $rc_conf_files is valid' + fi + if [ ! $found_new ]; then + break + fi done } fi