aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2021-02-26 05:39:18 +0000
committerCy Schubert <cy@FreeBSD.org>2021-02-26 06:03:38 +0000
commit763db58932874bb47fc6f9322ab81cc947f80991 (patch)
tree49620dc9e5179d76a1cc63cef8dd2dcc97f467e0
parent589e4c1df4a6e4b1368f26fc7fef704a2e5cb42c (diff)
downloadsrc-763db58932874bb47fc6f9322ab81cc947f80991.tar.gz
src-763db58932874bb47fc6f9322ab81cc947f80991.zip
rc: save and restore $IFS
Fix another bug in 77e1ccbee3ed6c837929e4e232fd07f95bfc8294. $IFS should be fully restored for its other users. PR: 249192 Reported by: jkim MFC after: 3 weeks X-MFC with: 77e1ccbee3ed6c837929e4e232fd07f95bfc8294
-rw-r--r--libexec/rc/rc9
1 files changed, 5 insertions, 4 deletions
diff --git a/libexec/rc/rc b/libexec/rc/rc
index 92eb5c48aab7..2cb840e68919 100644
--- a/libexec/rc/rc
+++ b/libexec/rc/rc
@@ -103,9 +103,10 @@ checkyesno rc_parallel_start && _rc_parallel='-p'
files=`rcorder ${skip} ${skip_firstboot} ${_rc_parallel} /etc/rc.d/* 2>/dev/null`
_rc_elem_done=' '
+oldifs="$IFS"
IFS=$'\n'
for _rc_group in ${files}; do
- unset IFS
+ IFS="$oldifs"
for _rc_elem in ${_rc_group}; do
run_rc_script ${_rc_elem} ${_boot} &
_rc_elem_done="${_rc_elem_done}${_rc_elem} "
@@ -119,7 +120,7 @@ for _rc_group in ${files}; do
done
unset files local_rc
-unset IFS
+IFS="$oldifs"
# Now that disks are mounted, for each dir in $local_startup
# search for init scripts that use the new rc.d semantics.
@@ -138,7 +139,7 @@ fi
files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} ${_rc_parallel} 2>/dev/null`
IFS=$'\n'
for _rc_group in ${files}; do
- unset IFS
+ IFS="$oldifs"
for _rc_elem in ${_rc_group}; do
case "$_rc_elem_done" in
*" $_rc_elem "*) continue ;;
@@ -149,7 +150,7 @@ for _rc_group in ${files}; do
wait
IFS=$'\n'
done
-unset IFS
+IFS="$oldifs"
# Remove the firstboot sentinel, and reboot if it was requested.
# Be a bit paranoid about removing it to handle the common failure