Hi, The diff adds "getrun" command for rcctl(8) which shows the daemon variables from the running daemon.
ok? comment? Index: usr.sbin/rcctl/rcctl.8 =================================================================== RCS file: /cvs/src/usr.sbin/rcctl/rcctl.8,v retrieving revision 1.35 diff -u -p -r1.35 rcctl.8 --- usr.sbin/rcctl/rcctl.8 20 Sep 2018 12:24:14 -0000 1.35 +++ usr.sbin/rcctl/rcctl.8 15 Feb 2019 05:41:38 -0000 @@ -22,7 +22,7 @@ .Nd configure and control daemons and services .Sh SYNOPSIS .Nm rcctl -.Cm get Ns | Ns Cm getdef Ns | Ns Cm set +.Cm get Ns | Ns Cm getdef Ns | Ns Cm getrun Ns | Ns Cm set .Ar service | daemon Op Ar variable Op Ar arguments .Nm rcctl .Op Fl df @@ -103,6 +103,10 @@ will display all services and daemons va Like .Cm get but returns the default values. +.It Cm getrun Ar service | daemon Op Ar variable +Like +.Cm get +but returns the values of the running daemon. .It Cm ls Ar lsarg Display a list of services and daemons matching .Ar lsarg , @@ -180,6 +184,9 @@ exits with 0 if the daemon or service is .Nm Cm getdef Ar daemon | service Op Cm status exits with 0 if the daemon or service is enabled by default and 1 if it is not. +.Nm Cm getrun Ar daemon | service +exits with 0 if the values of the running daemon exists +and 1 if it doesn't. .Nm Cm ls failed exits with 1 if an enabled daemon is not running. Otherwise, the Index: usr.sbin/rcctl/rcctl.sh =================================================================== RCS file: /cvs/src/usr.sbin/rcctl/rcctl.sh,v retrieving revision 1.107 diff -u -p -r1.107 rcctl.sh --- usr.sbin/rcctl/rcctl.sh 21 Oct 2018 21:20:40 -0000 1.107 +++ usr.sbin/rcctl/rcctl.sh 15 Feb 2019 05:41:38 -0000 @@ -21,6 +21,7 @@ _special_svcs="accounting check_quotas i spamd_black" readonly _special_svcs +_RC_RUNDIR=/var/run/rc.d # get local functions from rc.subr(8) FUNCS_ONLY=1 . /etc/rc.d/rc.subr @@ -32,7 +33,7 @@ usage() for _i in ${_rc_actions}; do _a="$(echo -n ${_i}${_a:+|${_a}})"; done _rc_err \ - "usage: rcctl get|getdef|set service | daemon [variable [arguments]] + "usage: rcctl get|getdef|getrun|set service | daemon [variable [arguments]] rcctl [-df] ${_a} daemon ... rcctl disable|enable|order [daemon ...] rcctl ls all|failed|off|on|started|stopped" @@ -374,6 +375,34 @@ svc_getdef() fi } +svc_getrun() +{ + local _svc=$1 + + ( svc_is_special ${_svc} || svc_is_meta ${_svc} ) && return 1 + [ ! -f $_RC_RUNDIR/$_svc ] && return 1 + _rc_parse_conf -readonly $_RC_RUNDIR/$_svc + + local _val _var=$2 + local daemon_class daemon_flags daemon_rtable daemon_timeout daemon_user + local daemon_pexp + + [ -z "${daemon_pexp}" ] && eval daemon_pexp=\${pexp} + + if [ -n "${_var}" ]; then + eval _val=\${daemon_${_var}} + [ -z "${_val}" ] || print -r -- "${_val}" + else + echo "${_svc}_class=${daemon_class}" + echo "${_svc}_flags=${daemon_flags}" + echo "${_svc}_rtable=${daemon_rtable}" + echo "${_svc}_timeout=${daemon_timeout}" + echo "${_svc}_user=${daemon_user}" + echo "${_svc}_pexp=${daemon_pexp}" + fi + return 0 +} + svc_rm() { local _svc=$1 @@ -509,7 +538,7 @@ case ${action} in done fi ;; - get|getdef) + get|getdef|getrun) svc=$2 var=$3 [ -z "${svc}" ] && usage @@ -571,7 +600,7 @@ case ${action} in done exit ${ret} ;; - get|getdef) + get|getdef|getrun) if [ "${svc}" = "all" ]; then for svc in $(svc_ls all); do ( svc_${action} ${svc} "${var}" ) Index: etc/rc.d/rc.subr =================================================================== RCS file: /cvs/src/etc/rc.d/rc.subr,v retrieving revision 1.130 diff -u -p -r1.130 rc.subr --- etc/rc.d/rc.subr 20 Jan 2019 04:52:07 -0000 1.130 +++ etc/rc.d/rc.subr 15 Feb 2019 05:41:38 -0000 @@ -138,18 +138,24 @@ _rc_quirks() { _rc_parse_conf() { typeset -l _key - local _l _rcfile _val + local _l _rcfile _val _readonly= set -A _allowed_keys -- \ accounting amd_master check_quotas ipsec library_aslr \ multicast nfs_server pexp pf pkg_scripts shlib_dirs spamd_black + if [ "$1" = "-readonly" ]; then + _readonly=y + shift + fi + [ $# -gt 0 ] || set -- /etc/rc.conf /etc/rc.conf.local for _rcfile; do [[ -f $_rcfile ]] || continue while IFS=' ' read -r _l; do [[ $_l == [!#=]*=* ]] || continue _key=${_l%%*([[:blank:]])=*} - [[ $_key == *_@(flags|rtable|user|timeout) ]] || + [[ $_readonly != "" && $_key == *_class ]] || + [[ $_key == *_@(flags|rtable|user|timeout) ]] || [[ " ${_allowed_keys[*]} " == *" $_key "* ]] || continue [[ $_key == "" ]] && continue