On Fri, Feb 15, 2019 at 02:50:22PM +0900, YASUOKA Masahiko wrote:
> On Fri, 15 Feb 2019 14:45:14 +0900 (JST)
> YASUOKA Masahiko <yasu...@openbsd.org> wrote:
> > The diff adds "getrun" command for rcctl(8) which shows the daemon
> > variables from the running daemon.
> > 
> > ok? comment?
> 
> Sorry, previous diff is broken.  It could not get any value other than
> daemon_pexp.  Let me update the diff.

Hi.

That's a lot of chunk of code for an enhanced 'cat /var/run/rc.d/foo'.
What is your usage for this?


> 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:48:16 -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:48:16 -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,35 @@ svc_getdef()
>       fi
>  }
>  
> +svc_getrun()
> +{
> +     local _svc=$1
> +
> +     ( svc_is_special ${_svc} || svc_is_meta ${_svc} ) && return 1
> +
> +     local _val _var=$2
> +     local daemon_class daemon_flags daemon_rtable daemon_timeout daemon_user
> +     local daemon_pexp
> +
> +     [ ! -f $_RC_RUNDIR/$_svc ] && return 1
> +     _rc_parse_conf -readonly $_RC_RUNDIR/$_svc
> +
> +     [ -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 +539,7 @@ case ${action} in
>                       done
>               fi
>               ;;
> -     get|getdef)
> +     get|getdef|getrun)
>               svc=$2
>               var=$3
>               [ -z "${svc}" ] && usage
> @@ -571,7 +601,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:48:16 -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
> 
> 

-- 
Antoine

Reply via email to