#!/sbin/openrc-run

extra_commands="checkconfig checkzones"
extra_started_commands="reload"
: ${NAMED_CONF:=/etc/bind/named.conf}

depend() {
	need net
	after firewall
	use logger
	provide dns
}

_get_pidfile() {
	[ -n "${PIDFILE}" ] || PIDFILE=$(\
		/usr/sbin/named-checkconf -p ${NAMED_CONF} | grep 'pid-file' | cut -d\" -f2)
	[ -z "${PIDFILE}" ] && PIDFILE=/var/run/named/named.pid
}

checkconfig() {
	ebegin "Checking named configuration"

	if [ ! -f "${NAMED_CONF}" ] ; then
		eerror "No ${NAMED_CONF} file exists! See the examples in /etc/bind."
		return 1
	fi

	/usr/sbin/named-checkconf ${NAMED_CONF} || {
		eerror "named-checkconf failed! Please fix your config first."
		return 1
	}
	eend 0
	return 0
}

checkzones() {
	ebegin "Checking named configuration and zones"
	/usr/sbin/named-checkconf -z -j ${NAMED_CONF}
	eend $?
}

start() {
	local piddir
	ebegin "Starting named"
	_get_pidfile
	piddir="${PIDFILE%/*}"
	if [ ! -d "${piddir}" ]; then
		checkpath -q -d -o root:named -m 0770 "${piddir}" || {
			eend 1
			return 1
		}
	fi

	checkconfig || { eend 1; return 1; }

	# create piddir (usually /var/run/named) if necessary, bug 334535
	_get_pidfile
	piddir="${PIDFILE%/*}"
	if [ ! -d "${piddir}" ]; then
		checkpath -q -d -o root:named -m 0770 "${piddir}" || {
			eend 1
			return 1
		}
	fi

	# In case someone have $CPU set in /etc/conf.d/named
	if [ -n "${CPU}" ] && [ "${CPU}" -gt 0 ]; then
		CPU="-n ${CPU}"
	fi

	start-stop-daemon --start --pidfile ${PIDFILE} \
		--nicelevel ${NICELEVEL:-0} \
		--exec /usr/sbin/named \
		-- -u named ${CPU} ${OPTS}
	eend $?
}

stop() {
	ebegin "Stopping named"
	_get_pidfile
	start-stop-daemon --stop --quiet --pidfile $PIDFILE
	eend $?
}