svn commit: r316487 - head/etc
Ngie Cooper
yaneurabeya at gmail.com
Wed Apr 5 03:18:42 UTC 2017
> On Apr 4, 2017, at 20:05, Cy Schubert <Cy.Schubert at komquats.com> wrote:
>
> In message <201704041143.v34BhVNA046204 at repo.freebsd.org>,
> =?UTF-8?Q?Dag-Erling
> _Sm=c3=b8rgrav?= writes:
>> Author: des
>> Date: Tue Apr 4 11:43:31 2017
>> New Revision: 316487
>> URL: https://svnweb.freebsd.org/changeset/base/316487
>>
>> Log:
>> Allow command modifiers (fast, quiet etc.) to be stacked in any order.
>> Add a "debug" modifier that sets rc_debug.
>>
>> MFC after: 3 weeks
>>
>> Modified:
>> head/etc/rc.subr
>>
>> Modified: head/etc/rc.subr
>> =============================================================================
>> =
>> --- head/etc/rc.subr Tue Apr 4 08:17:03 2017 (r316486)
>> +++ head/etc/rc.subr Tue Apr 4 11:43:31 2017 (r316487)
>> @@ -703,10 +703,11 @@ check_startmsgs()
>> # If argument has a given prefix, then change the operation as follows:
>> # Prefix Operation
>> # ------ ---------
>> -# fast Skip the pid check, and set rc_fast=yes, rc_quiet=yes
>> -# force Set ${rcvar} to YES, and set rc_force=yes
>> -# one Set ${rcvar} to YES
>> -# quiet Don't output some diagnostics, and set rc_quiet=yes
>> +# debug Enable debugging messages and set rc_debug to yes
>> +# fast Skip the pid check and set rc_fast and rc_quiet to yes
>> +# force Skip sanity checks and set ${rcvar} and rc_force to yes
>> +# one Set ${rcvar} and set rc_one to yes
>> +# quiet Don't output some diagnostics, and set rc_quiet to yes
>> #
>> # The following globals are used:
>> #
>> @@ -856,6 +857,8 @@ check_startmsgs()
>> # rc_arg Argument to command, after fast/force/one processing
>> # performed
>> #
>> +# rc_debug True if "debug" was provided
>> +#
>> # rc_flags Flags to start the default command with.
>> # Defaults to ${name}_flags, unless overridden
>> # by $flags from the environment.
>> @@ -863,9 +866,11 @@ check_startmsgs()
>> #
>> # rc_pid PID of command (if appropriate)
>> #
>> -# rc_fast Not empty if "fast" was provided (q.v.)
>> +# rc_fast Not empty if "fast" was provided
>> +#
>> +# rc_force Not empty if "force" was provided
>> #
>> -# rc_force Not empty if "force" was provided (q.v.)
>> +# rc_one Not empty if "one" was provided
>> #
>> # rc_quiet Not empty if "quiet" was provided
>> #
>> @@ -884,34 +889,47 @@ run_rc_command()
>> shift 1
>> rc_extra_args="$*"
>>
>> - _rc_prefix=
>> - case "$rc_arg" in
>> - fast*) # "fast" prefix; don't check pid
>> - rc_arg=${rc_arg#fast}
>> - rc_fast=yes
>> - rc_quiet=yes
>> - ;;
>> - force*) # "force" prefix; always run
>> - rc_force=yes
>> - _rc_prefix=force
>> - rc_arg=${rc_arg#${_rc_prefix}}
>> - if [ -n "${rcvar}" ]; then
>> - eval ${rcvar}=YES
>> - fi
>> - ;;
>> - one*) # "one" prefix; set ${rcvar}=yes
>> - _rc_prefix=one
>> - rc_arg=${rc_arg#${_rc_prefix}}
>> + : ${rc_debug:=no} ${rc_fast:=no} ${rc_force:=no} ${rc_one:=no} ${rc_qui
>> et:=no}
>> + while :; do
>> + case "$rc_arg" in
>> + debug*) # "debug" prefix; enable debugging
>> + rc_debug=yes
>> + rc_quiet=no
>> + rc_arg=${rc_arg#debug}
>> + _rc_prefix="${_rc_prefix}debug"
>> + ;;
>> + fast*) # "fast" prefix; don't check pid
>> + rc_fast=yes
>> + rc_quiet=yes
>> + rc_arg=${rc_arg#fast}
>> + _rc_prefix="${_rc_prefix}fast"
>> + ;;
>> + force*) # "force" prefix; always run
>> + rc_force=yes
>> + rc_arg=${rc_arg#force}
>> + _rc_prefix="${_rc_prefix}force"
>> + ;;
>> + one*) # "one" prefix; set ${rcvar}=yes
>> + rc_one=yes
>> + rc_arg=${rc_arg#one}
>> + _rc_prefix="${_rc_prefix}one"
>> + ;;
>> + quiet*) # "quiet" prefix; omit some messages
>> + rc_quiet=yes
>> + rc_arg=${rc_arg#quiet}
>> + _rc_prefix="${_rc_prefix}quiet"
>> + ;;
>> + *)
>> + break
>> + ;;
>> + esac
>> + done
>> + if checkyesno rc_force || checkyesno rc_one ; then
>> if [ -n "${rcvar}" ]; then
>> eval ${rcvar}=YES
>> fi
>> - ;;
>> - quiet*) # "quiet" prefix; omit some messages
>> - _rc_prefix=quiet
>> - rc_arg=${rc_arg#${_rc_prefix}}
>> - rc_quiet=yes
>> - ;;
>> - esac
>> + fi
>> + debug "_rc_prefix=${_rc_prefix}"
>>
>> eval _override_command=\$${name}_program
>> command=${_override_command:-$command}
>>
>>
>
>
> Hi des,
>
> This patch caused some boot failures because the contents of rc_force were
> redefined from "yes" (for yes) and NULL (for no) to the words "yes" and
> "no". This in turn caused etc/rc.d/dhclient to assume force when $rc_force
> was not NULL (test -z failed). Interfaces with static IP addresses invoked
> rc.d/dhclient through devd. The attached patch should make all instances
> $rc_force consistent with your change.
This deserves relnotes (for sure), and it might cause issues in downstream consumers (ports, etc) :/...
-Ngie
More information about the svn-src-head
mailing list