Date: Tue, 04 Apr 2017 20:05:31 -0700 From: Cy Schubert <Cy.Schubert@komquats.com> To: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r316487 - head/etc Message-ID: <201704050305.v3535VE2006000@slippy.cwsent.com> In-Reply-To: Message from =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org> of "Tue, 04 Apr 2017 11:43:31 -0000." <201704041143.v34BhVNA046204@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multipart MIME message. --==_Exmh_1491361230_35920 Content-Type: text/plain; charset=us-ascii In message <201704041143.v34BhVNA046204@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. --==_Exmh_1491361230_35920 Content-Type: text/plain ; name="r316487-fix.diff"; charset=us-ascii Content-Description: r316487-fix.diff Content-Disposition: attachment; filename="r316487-fix.diff" Index: rc.d/bgfsck =================================================================== --- rc.d/bgfsck (revision 316487) +++ rc.d/bgfsck (working copy) @@ -26,7 +26,7 @@ bgfsck_start() { : ${background_fsck_delay=0} - if [ -n "${rc_force}" ]; then + if checkyesno rc_force; then background_fsck_delay=0 fi if [ ${background_fsck_delay} -lt 0 ]; then @@ -38,7 +38,7 @@ if [ "${background_fsck_delay}" -gt 0 ]; then bgfsck_msg="${bgfsck_msg} in ${background_fsck_delay} seconds" fi - if [ -z "${rc_force}" ]; then + if ! checkyeno rc_force; then check_startmsgs && echo "${bgfsck_msg}." fi Index: rc.d/dhclient =================================================================== --- rc.d/dhclient (revision 316487) +++ rc.d/dhclient (working copy) @@ -22,7 +22,7 @@ # time, so we're testing it in the pre* hooks. dhclient_pre_check() { - if [ -z "${rc_force}" ] && ! dhcpif $ifn; then + if ! checkyesno rc_force && ! dhcpif $ifn; then local msg msg="'$ifn' is not a DHCP-enabled interface" if [ -z "${rc_quiet}" ]; then Index: rc.subr =================================================================== --- rc.subr (revision 316487) +++ rc.subr (working copy) @@ -1156,7 +1156,7 @@ ( run_rc_command ${_rc_prefix}stop $rc_extra_args ) ( run_rc_command ${_rc_prefix}start $rc_extra_args ) _return=$? - [ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1 + [ $_return -ne 0 ] && ! checkyesno rc_force && return 1 _run_rc_postcmd ;; @@ -1268,7 +1268,7 @@ _return=$? # If precmd failed and force isn't set, request exit. - if [ $_return -ne 0 ] && [ -z "$rc_force" ]; then + if [ $_return -ne 0 ] && ! checkyesno rc_force; then return 1 fi fi @@ -1295,7 +1295,7 @@ _return=$? # If command failed and force isn't set, request exit. - if [ $_return -ne 0 ] && [ -z "$rc_force" ]; then + if [ $_return -ne 0 ] && ! checkyesno rc_force; then return 1 fi @@ -2011,7 +2011,7 @@ for _f in $required_vars; do if ! checkyesno $_f; then warn "\$${_f} is not enabled." - if [ -z "$rc_force" ]; then + if ! checkyesno $rc_force; then return 1 fi fi @@ -2020,7 +2020,7 @@ for _f in $required_dirs; do if [ ! -d "${_f}/." ]; then warn "${_f} is not a directory." - if [ -z "$rc_force" ]; then + if ! checkyesno $rc_force; then return 1 fi fi @@ -2029,7 +2029,7 @@ for _f in $required_files; do if [ ! -r "${_f}" ]; then warn "${_f} is not readable." - if [ -z "$rc_force" ]; then + if ! checkyesno $rc_force; then return 1 fi fi @@ -2053,7 +2053,7 @@ *) _args="${_f}" ;; esac if ! load_kld ${_args}; then - if [ -z "$rc_force" ]; then + if ! checkyesno rc_force; then return 1 fi fi --==_Exmh_1491361230_35920 Content-Type: text/plain; charset=us-ascii Cheers, Cy Schubert <Cy.Schubert@cschubert.com> FreeBSD UNIX: <cy@FreeBSD.org> Web: http://www.FreeBSD.org The need of the many outweighs the greed of the few. --==_Exmh_1491361230_35920--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704050305.v3535VE2006000>