rc.subr, 1.34.2.22,
breaks amd_map_program="ypcat -k amd.master" in RELENG_6
John E Hein
jhein at timing.com
Thu Oct 18 12:26:44 PDT 2007
John E Hein wrote at 10:11 -0600 on Oct 18, 2007:
> I have not yet attempted to narrow down what in .22 (+198 -146)
> actually changes the behavior, but the following works around the
> problem by converting the newlines to spaces:
@@ -699,106 +657,52 @@ $command $rc_flags $command_args"
fi
fi
- # run the full command;
- # if the cmd failed and force
- # isn't set, exit
+ # run the full command
#
- debug "run_rc_command: _doit: $_doit"
- eval $_doit
- _return=$?
- [ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1
+ _run_rc_doit "$_doit" || return 1
The last diff blob above is the trouble maker.
The new run_rc_doit() function does this:
+ eval "$@"
If you remove the quotes, it starts working again.
Unfortunately, you can have different problems if you don't quote $@
(for instance, args with spaces become two args). I don't know if
yar@ added that to address a specific issue or just to be more
future-proof in terms of quoting. But it breaks if the command
or args have a newline.
Maybe it's best to just do the echo in /etc/rc.d/amd that I showed in
the previous email and document that $rc_flags and $command, etc., should
not have newlines. Here's that patch again:
> Index: amd
> ===================================================================
> RCS file: /base/FreeBSD-CVS/src/etc/rc.d/amd,v
> retrieving revision 1.15.2.3
> diff -u -p -r1.15.2.3 amd
> --- amd 22 Oct 2006 20:33:10 -0000 1.15.2.3
> +++ amd 18 Oct 2007 15:57:34 -0000
> @@ -34,7 +34,7 @@ amd_precmd()
> [Nn][Oo] | '')
> ;;
> *)
> - rc_flags="${rc_flags} `eval ${amd_map_program}`"
> + rc_flags="${rc_flags} `echo $(eval ${amd_map_program})`"
> ;;
> esac
More information about the freebsd-rc
mailing list