rc.subr revision 1.34
1#	$OpenBSD: rc.subr,v 1.34 2011/04/06 17:10:38 robert Exp $
2
3# Default functions and variables used by rc.d(8) scripts.
4
5rc_err() {
6	echo $1
7	exit 1
8}
9
10rc_start() {
11	${rcexec} "${daemon} ${daemon_flags} ${_bg}"
12}
13
14rc_check() {
15	pkill -0 -f "^${pexp}"
16}
17
18rc_reload() {
19	pkill -HUP -f "^${pexp}"
20}
21
22rc_stop() {
23	pkill -f "^${pexp}"
24}
25
26rc_do() {
27	if [ X"${RC_DEBUG}" = X"1" ]; then
28		echo "doing $@" && "$@"
29	else
30		"$@" >/dev/null 2>&1
31	fi
32}
33
34rc_print() {
35	_ret=$?
36	[ -z "${INRC}" -o X"$1" != X"ok" ] && _pfix="($1)"
37	echo ${INRC:+'-n'} "${INRC:+ }${_name}${_pfix}"
38	return ${_ret}
39}
40
41rc_wait() {
42	i=0
43	while [ $i -lt 30 ]; do
44		rc_do rc_check || return 0
45		sleep 1
46		i=$((i+1))
47	done
48	return 1
49}
50
51rc_cmd() {
52	[ $(id -u) -eq 0 ] || \
53		rc_err "$0: need root privileges"
54
55	[ X"${daemon_flags}" = X"NO" ] && exit 1
56
57	eval _enotsup=\${rc_${1}}
58	[ X"${_enotsup}" != X"NO" ] || rc_err "$0: $1 is not supported"
59
60	[ X"${rc_bg}" = X"YES" ] && local _bg="&"
61
62	case "$1" in
63	check)
64		rc_do rc_check
65		;;
66	start)
67		rc_do rc_check || \
68			(
69			if type rc_pre >/dev/null; then
70				rc_do rc_pre
71			fi
72			[ $? -eq 0 ] && \
73				rc_do rc_start && \
74				rc_print ok || rc_print failed
75			)
76		;;
77	stop)
78		if rc_do rc_check; then rc_do rc_stop || \
79			( rc_print failed ) && \
80			(
81				rc_do rc_wait &&
82				(
83				if type rc_post >/dev/null; then \
84					rc_do rc_post
85				fi
86				) && rc_print ok || rc_print failed
87			)
88		else
89			return 0
90		fi
91		;;
92	reload)
93		rc_do rc_check && ( rc_do rc_reload || rc_print failed )
94		;;
95	restart)
96		/etc/rc.d/${_name} stop && /etc/rc.d/${_name} start
97		;;
98	*)
99		rc_err "usage: $0 {start|check|reload|restart|stop}"
100	esac
101}
102
103[ -z "${local_rcconf}" ] && . /etc/rc.conf
104
105[ -n "${daemon}" ] || rc_err "$0: daemon is not set"
106
107_name=$(basename $0)
108eval _rcflags=\${${_name}_flags}
109eval _rcuser=\${${_name}_user}
110
111getcap -f /etc/login.conf ${_name} 1>/dev/null 2>&1 && \
112	daemon_class=${_name}
113
114[ -z "${daemon_class}" ] && daemon_class=daemon
115[ -z "${daemon_user}"  ] && daemon_user=root
116
117[ -n "${_rcflags}" ] && daemon_flags=${_rcflags}
118[ -n "${_rcuser}"  ] && daemon_user=${_rcuser}
119
120daemon_flags=$(printf '%s\n' "${daemon_flags}" | tr -s "[:space:]" | sed 's/^[ \t]*//;s/[ \t]*$//')
121pexp="${daemon}${daemon_flags:+ ${daemon_flags}}"
122rcexec="su -l -c ${daemon_class} -s /bin/sh ${daemon_user} -c"
123