#!/sbin/runscript # Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/net-dns/bind/files/named.init-r7,v 1.2 2010/02/25 19:03:31 robbat2 Exp $ opts="start stop reload restart" depend() { need net use logger after pg_autovacuum postgresql mysql ldap provide dns } _mount() { local from local to local opts if [[ $# -lt 3 ]]; then eerror "_mount(): to few arguments" return 1 fi from=$1 to=$2 shift 2 opts="${*}" shift $# if [[ -z $(grep "${to}" /proc/mounts) ]]; then einfo "mounting ${from} to ${to}" mount ${from} ${to} ${opts} || return 1 fi } _umount() { local dir=$1 if [[ -n $(grep "${dir}" /proc/mounts) ]]; then einfo "umount ${dir}" umount ${dir} fi } checkconfig() { if [ ! -f ${CHROOT}/etc/bind/named.conf ] ; then eerror "No ${CHROOT}/etc/bind/named.conf file exists!" fi # In case someone have $CPU set in /etc/conf.d/named if [ ${CPU} ] ; then CPU="-n ${CPU}" fi # as suggested in bug #107724 [ -n "${PIDFILE}" ] || PIDFILE=${CHROOT}$(\ egrep -v \ "^([[:cntrl:] ]+(#|//|/\*)|(#|//|/\*))" \ ${CHROOT}/etc/bind/named.conf \ | egrep -o -m1 "pid\-file +\".+\" *;" \ | cut -d\" -f2 ) KEY="${CHROOT}/etc/bind/rndc.key" } start() { ebegin "Starting ${CHROOT:+chrooted }named" if [[ -n ${CHROOT} ]]; then einfo "Mounting chroot dirs" _mount /etc/bind ${CHROOT}/etc/bind -o bind _mount /var/bind ${CHROOT}/var/bind -o bind _mount /var/log/named ${CHROOT}/var/log/named -o bind fi checkconfig || return 1 start-stop-daemon --start --quiet --pidfile ${PIDFILE} \ --nicelevel ${NAMED_NICELEVEL:-0} \ --exec /usr/sbin/named \ -- -u named ${CPU} ${OPTIONS} ${CHROOT:+-t} ${CHROOT} eend $? } stop() { local reported=0 ebegin "Stopping ${CHROOT:+chrooted }named" checkconfig || return 2 if [ -f $KEY ] ; then rndc $SERVER -k $KEY stop &>/dev/null else start-stop-daemon --stop --quiet --pidfile $PIDFILE \ --exec /usr/sbin/named -- stop fi if [[ -n ${CHROOT} ]]; then einfo "Umounting chroot dirs" # just to be sure everything gets clean while [[ -n $(fuser ${CHROOT} 2>&1) ]] do if [[ ${reported} -eq 0 ]]; then einfo "Waiting until all named processes are stopped" reported=1 fi sleep 1 done _umount ${CHROOT}/etc/bind _umount ${CHROOT}/var/log/named _umount ${CHROOT}/var/bind fi eend $? } reload() { checkconfig || return 3 if [ ! -f $PIDFILE ] ; then /etc/init.d/named start &>/dev/null exit fi if [ -f $KEY ] ; then ebegin "Reloading named.conf and zone files" rndc $SERVER -k $KEY reload &>/dev/null eend $? else /etc/init.d/named restart &>/dev/null fi }