#!/sbin/runscript # Copyright 1999-2010 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.6 2010/09/03 17:52:01 idl0r 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 } check_chroot() { if [[ -n ${CHROOT} ]]; then [[ ! -d ${CHROOT} ]] && return 1 [[ ! -d ${CHROOT}/dev || ! -d ${CHROOT}/etc || ! -d ${CHROOT}/var ]] && return 1 [[ ! -d ${CHROOT}/var/run || ! -d ${CHROOT}/var/log ]] && return 1 [[ ! -d ${CHROOT}/etc/bind || ! -d ${CHROOT}/var/bind ]] && return 1 [[ ! -d ${CHROOT}/var/log/named ]] && return 1 [[ ! -e ${CHROOT}/etc/localtime ]] && return 1 [[ ! -c ${CHROOT}/dev/null || ! -c ${CHROOT}/dev/zero ]] && return 1 [[ ! -c ${CHROOT}/dev/random && ! -c ${CHROOT}/dev/urandom ]] && return 1 fi # create piddir (usually /var/run/named) if necessary local piddir="${PIDFILE%/*}" if [ ! -d "${piddir}" ] ; then checkpath -q -d -o root:named -m 0770 "${piddir}" || return 1 fi return 0 } 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 ) } start() { ebegin "Starting ${CHROOT:+chrooted }named" if [[ -n ${CHROOT} ]]; then check_chroot || { eerror "Your chroot dir ${CHROOT} is inconsistent, please run 'emerge --config net-dns/bind' first" return 1 } 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 [[ -n "${RNDC_KEY}" && -f "${RNDC_KEY}" ]] ; then rndc $SERVER -k $RNDC_KEY stop &>/dev/null else start-stop-daemon --stop --quiet --pidfile $PIDFILE \ --exec /usr/sbin/named 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 $RNDC_KEY ] ; then ebegin "Reloading named.conf and zone files" rndc $SERVER -k $RNDC_KEY reload &>/dev/null eend $? else /etc/init.d/named restart &>/dev/null fi }