rc: Honor ${name}_env when a custom *_cmd is defined (e.g., start_cmd)

A user may set ${name}_env variable in rc.conf(5) in order to set additional
environment variables for a service command.  Unfortunately, at the moment
this variable is only honored when the command is specified via the command
variable. Those additional environment variables coming from ${name}_env
are never set if the service is started via the ${rc_arg}_cmd variable (for
example start_cmd).

PR:		239692
Reviewed by:	bcr, jilles
Approved by:	src (jilles)
Differential Revision:	https://reviews.freebsd.org/D21228
This commit is contained in:
Mateusz Piotrowski 2019-09-05 14:52:22 +00:00
parent 92fd0827c1
commit d15e810db9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=351863
2 changed files with 16 additions and 3 deletions

View File

@ -1036,6 +1036,9 @@ run_rc_command()
_postcmd=\$${rc_arg}_postcmd _postcmd=\$${rc_arg}_postcmd
if [ -n "$_cmd" ]; then if [ -n "$_cmd" ]; then
if [ -n "$_env" ]; then
eval "export -- $_env"
fi
_run_rc_precmd || return 1 _run_rc_precmd || return 1
_run_rc_doit "$_cmd $rc_extra_args" || return 1 _run_rc_doit "$_cmd $rc_extra_args" || return 1
_run_rc_postcmd _run_rc_postcmd

View File

@ -29,7 +29,7 @@
.\" .\"
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd January 5, 2019 .Dd September 5, 2019
.Dt RC.SUBR 8 .Dt RC.SUBR 8
.Os .Os
.Sh NAME .Sh NAME
@ -559,9 +559,19 @@ is mounted.
A list of environment variables to run A list of environment variables to run
.Va command .Va command
with. with.
This will be passed as arguments to the Those variables will be passed as arguments to the
.Xr env 1 .Xr env 1
utility. utility unless
.Ar argument Ns Va _cmd
is defined.
In that case the contents of
.Va ${name}_env
will be exported via the
.Xr export 1
builtin of
.Xr sh 1 ,
which puts some limitations on the names of variables
(e.g., a variable name may not start with a digit).
.It Va ${name}_env_file .It Va ${name}_env_file
A file to source for environmental variables to run A file to source for environmental variables to run
.Va command .Va command