summaryrefslogtreecommitdiffstats
path: root/named.init
diff options
context:
space:
mode:
authorAdam Tkac <atkac@fedoraproject.org>2007-06-14 15:13:02 +0000
committerAdam Tkac <atkac@fedoraproject.org>2007-06-14 15:13:02 +0000
commite9042b6355f6502f30f5d4b8dbf61cf01a2fd3ee (patch)
treec9b0ba6f2f5ca556902b5b99fed0cd427d0dfd95 /named.init
parent1d6a8ca7c859fb28e5aac4ad1d2be784c8f66f2d (diff)
- major changes in initscript. Could be LSB compatible
- removed caching-nameserver subpackage and move configfiles from there into main bind package as default configuration - major changes in default configuration
Diffstat (limited to 'named.init')
-rwxr-xr-xnamed.init377
1 files changed, 174 insertions, 203 deletions
diff --git a/named.init b/named.init
index 06c0561..8c3176e 100755
--- a/named.init
+++ b/named.init
@@ -8,17 +8,22 @@
# that is used to resolve host names to IP addresses.
# probe: true
+# Return codes
+# - script (all except status command)
+# - 2 invalid or excess argument(s)
+# - 3 unimplemented feature (for example, "reload")
+# - 4 user had insufficient privilege
+# - 5 program is not installed
+# - 6 program is not configured
+# - 7 program is not running
+
# Source function library.
. /etc/rc.d/init.d/functions
-# Source networking configuration.
-[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
-
-# Check that networking is up.
-[ "${NETWORKING}" = "no" ] && exit 1
-
[ -r /etc/sysconfig/named ] && . /etc/sysconfig/named
+RETVAL=0
+
# Don't kill named during clean-up
NAMED_SHUTDOWN_TIMEOUT=${NAMED_SHUTDOWN_TIMEOUT:-100}
@@ -30,191 +35,180 @@ if [ -n "$ROOTDIR" ]; then
fi;
fi
-RETVAL=0
+# Run SDB backend?
named='named'
-if [[ "$ENABLE_SDB" = [yY1]* ]] && [ -x /usr/sbin/named_sdb ]; then
- named='named_sdb';
+if `echo "$ENABLE_SDB" | grep -q ^[yY1].*`; then
+ named='named_sdb';
fi;
-prog=$named
-[ -x /usr/sbin/$named ] || exit 1
+# Manage forwarders through D-BUS?
+for a in $OPTIONS; do
+ if [ $a = "-D" ]; then
+ dbusEnabled=1;
+ fi;
+done
+if [ -z $dbusEnabled ] && [ -z "$DISABLE_NAMED_DBUS" ] ; then
+ for l in 0 1 2 3 4 5 6; do
+ if /sbin/chkconfig --level=$l NetworkManager >/dev/null 2>&1; then
+ dbusEnabled=1;
+ fi;
+ done
+ [ -z $NetworkManagerEnabled ] || OPTIONS="$OPTIONS -D";
+fi;
-nmdcOption()
-{ let i=0;
- for a in $*;
- do ((++i));
- if [ $a = -c ]; then
- ((++i));
- eval 'echo $'$i;
- elif [[ $a = -c* ]]; then
- echo ${a#-c};
- fi;
- done;
-}
+# Check if all what named needs running
+start()
+{
+ # Source networking configuration.
+ [ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
-named_c_option=`nmdcOption $OPTIONS`;
-named_conf=${named_c_option:-/etc/named.conf};
+ # Check that networking is up
+ [ "${NETWORKING}" = "no" ] && exit 1
-if [ ! -r ${ROOTDIR}${named_conf} ] ; then
- if [ -z "$named_c_option" ] && [ -r ${ROOTDIR}/etc/named.caching-nameserver.conf ]; then
- named_conf='/etc/named.caching-nameserver.conf';
- OPTIONS="$OPTIONS -c ${named_conf}";
- else
- echo Locating $ROOTDIR/${named_conf} failed.
- echo $"I can't find any configuration file. You can create it by system-config-bind"
- echo $"or install caching-nameserver."
- failure
- echo;
- exit 1;
- fi;
-fi;
-dbusEnabled=0;
-for a in $OPTIONS; do
- if [ $a = "-D" ]; then
- dbusEnabled=1;
+ [ -x /usr/sbin/$named ] || exit 5
+
+ # Handle -c option
+ previous_option='unspecified';
+ for a in $OPTIONS; do
+ if [ $previous_option = '-c' ]; then
+ named_conf=$a;
fi;
-done
+ previous_option=$a;
+ done;
-if [ $dbusEnabled -eq 0 ] && [ -z "$DISABLE_NAMED_DBUS" ] ; then
- NetworkManagerEnabled=0
- for l in 0 1 2 3 4 5 6; do
- if /sbin/chkconfig --level=$l NetworkManager >/dev/null 2>&1; then
- NetworkManagerEnabled=1;
- fi;
- done
- if [ $NetworkManagerEnabled -eq 1 ]; then
- OPTIONS="$OPTIONS -D";
+ named_conf=${named_conf:-/etc/named.conf};
+
+ if [ ! -r $named_conf ]; then
+ echo 'Cannot find configuration file. You could create it by system-config-bind'
+ exit 6;
+ fi;
+
+ # all pre-start is done, lets start named
+ echo -n $"Starting $named: "
+ if [ -n "`/sbin/pidof -o %PPID $named`" ]; then
+ echo -n $"$named: already running"
+ failure
+ echo
+ exit 1;
+ fi;
+
+ ckcf_options='-z'; # enable named-checkzone for each zone (9.3.1+) !
+ if [ -n "${ROOTDIR}" -a "x${ROOTDIR}" != "x/" ]; then
+ OPTIONS="${OPTIONS} -t ${ROOTDIR}"
+ ckcf_options="$ckcf_options -t ${ROOTDIR}";
+ [ -s /etc/localtime ] && cp -fp /etc/localtime ${ROOTDIR}/etc/localtime;
+ [ -d ${ROOTDIR}/proc ] || mkdir -p ${ROOTDIR}/proc;
+ if ! egrep -q '^/proc[[:space:]]+'${ROOTDIR}'/proc' /proc/mounts; then
+ mount --bind -n /proc ${ROOTDIR}/proc >/dev/null 2>&1;
+ fi
+ if [ ! -z $dbusEnabled ]; then
+ if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${ROOTDIR}'/var/run/dbus' /proc/mounts; then
+ mkdir -p ${ROOTDIR}/var/run/dbus
+ [ -d /var/run/dbus ] || mkdir -p /var/run/dbus;
+ mount --bind -n /var/run/dbus ${ROOTDIR}/var/run/dbus > /dev/null 2>&1;
+ fi;
fi;
- dbusEnabled=1;
-fi
+ fi
-start() {
- # Start daemons.
- echo -n $"Starting $named: "
- if [ -n "`/sbin/pidof -o %PPID $named`" ]; then
- echo -n $"$named: already running"
- failure
- echo
- return 1
- fi
- ckcf_options='-z'; # enable named-checkzone for each zone (9.3.1+) !
- if [ -n "${ROOTDIR}" -a "x${ROOTDIR}" != "x/" ]; then
- OPTIONS="${OPTIONS} -t ${ROOTDIR}"
- ckcf_options="$ckcf_options -t ${ROOTDIR}";
- if [ -s /etc/localtime ]; then
- cp -fp /etc/localtime ${ROOTDIR}/etc/localtime
- fi;
- if [ ! -d ${ROOTDIR}/proc ]; then
- mkdir -p ${ROOTDIR}/proc
- fi
- if ! egrep -q '^/proc[[:space:]]+'${ROOTDIR}'/proc' /proc/mounts; then
- mount --bind -n /proc ${ROOTDIR}/proc >/dev/null 2>&1
- fi
- if [ $dbusEnabled -eq 1 ]; then
- if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${ROOTDIR}'/var/run/dbus' /proc/mounts; then
- mkdir -p ${ROOTDIR}/var/run/dbus
- if [ ! -d /var/run/dbus ] ; then
- mkdir -p /var/run/dbus ;
- fi;
- mount --bind -n /var/run/dbus ${ROOTDIR}/var/run/dbus > /dev/null 2>&1;
- fi;
- fi;
- fi
+ RETVAL=0
+ # check if configuration is correct
+ if [ -x /usr/sbin/named-checkconf ] && [ -x /usr/sbin/named-checkzone ] && /usr/sbin/named-checkconf $ckcf_options ${named_conf} >/dev/null 2>&1; then
- conf_ok=0;
- if [ -x /usr/sbin/named-checkconf ] && [ -x /usr/sbin/named-checkzone ] && /usr/sbin/named-checkconf $ckcf_options ${named_conf} >/dev/null 2>&1; then
- conf_ok=1;
- else
- RETVAL=$?;
- fi
- if [ $conf_ok -eq 1 ]; then
- daemon /usr/sbin/$named -u named ${OPTIONS};
- RETVAL=$?;
- if [ $RETVAL -eq 0 ]; then
- rm -f /var/run/named.pid
- rm -f /var/run/named_sdb.pid 2>/dev/null
- ln -s $ROOTDIR/var/run/named/named.pid /var/run/named.pid;
- if [ "$named" = "named_sdb" ]; then
- ln -s $ROOTDIR/var/run/named/named.pid /var/run/named_sdb.pid;
- fi;
- fi;
- if [ -n "`/sbin/pidof -o %PPID $named`" ]; then
- # Verify that named actually started (JM 2006-10-04)
- if [ ! -e $ROOTDIR/var/run/named/named.pid ]; then
- # If there is not a file containing the PID of the now running named daemon then create it (JM 2006-10-04)
- echo `/sbin/pidof -o %PPID $named` > $ROOTDIR/var/run/named/named.pid;
- if [ "$named" = "named_sdb" ]; then
- echo `/sbin/pidof -o %PPID $named` > $ROOTDIR/var/run/named/named_sdb.pid;
- fi;
- fi;
- fi;
- else
- named_err="`/usr/sbin/named-checkconf $ckcf_options $named_conf 2>&1`";
- echo
- echo $"Error in named configuration"':';
- echo "$named_err";
- failure
- echo
- if [ -x /usr/bin/logger ]; then
- echo "$named_err" | /usr/bin/logger -pdaemon.error -tnamed
- fi;
- return $RETVAL;
- fi;
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/named
- echo
- return $RETVAL
+ daemon /usr/sbin/$named -u named ${OPTIONS};
+ RETVAL=$?
+ if [ $RETVAL -eq 0 ]; then
+ rm -f /var/run/named.pid;
+ rm -f /var/run/named_sdb.pid;
+ ln -s $ROOTDIR/var/run/named/named.pid /var/run/named.pid;
+ [ "$named" = "named_sdb" ] && ln -s $ROOTDIR/var/run/named/named.pid /var/run/named_sdb.pid;
+ fi;
+
+ if [ -n "`/sbin/pidof -o %PPID $named`" ]; then
+ # Verify that named actually started (JM 2006-10-04)
+ if [ ! -e $ROOTDIR/var/run/named/named.pid ]; then
+ # If there is not a file containing the PID of the now running named daemon then create it (JM 2006-10-04)
+ echo `/sbin/pidof -o %PPID $named` > $ROOTDIR/var/run/named/named.pid;
+ [ "$named" = "named_sdb" ] && echo `/sbin/pidof -o %PPID $named` > $ROOTDIR/var/run/named/named_sdb.pid;
+ fi;
+ fi;
+ else
+ named_err="`/usr/sbin/named-checkconf $ckcf_options $named_conf 2>&1`";
+ echo
+ echo "Error in named configuration:";
+ echo "$named_err";
+ failure
+ echo
+ [ -x /usr/bin/logger ] && echo "$named_err" | /usr/bin/logger -pdaemon.error -tnamed;
+ exit 2;
+ fi;
+ if [ $RETVAL -eq 0 ]; then
+ touch /var/lock/subsys/named;
+ else
+ exit 7;
+ fi
+ echo
+ return 0;
}
+
stop() {
- # Stop daemons.
- echo -n $"Stopping $named: "
- /usr/sbin/rndc stop >/dev/null 2>&1
- RETVAL=$?
- # is it still here?
- if /sbin/pidof -o %PPID $named >/dev/null; then
- timeout=0
- while : ; do
- if /sbin/pidof -o %PPID $named >/dev/null; then
- if [ $timeout -ge $NAMED_SHUTDOWN_TIMEOUT ]; then
- killproc $named -TERM >/dev/null 2>&1
- RETVAL=$?
- echo $"no response, killing with -TERM "
- break
- else
- sleep 2 && echo -n "."
- timeout=$((timeout+2))
- fi;
- else
- break
- fi;
- done
- fi;
- if [ $RETVAL -eq 0 ]; then
- rm -f /var/lock/subsys/named
- rm -f /var/run/named.pid
- rm -f /var/run/named_sdb.pid 2>/dev/null
- fi;
- if [ -n "${ROOTDIR}" -a "x${ROOTDIR}" != "x/" ]; then
- if egrep -q '^/proc[[:space:]]+'${ROOTDIR}'/proc' /proc/mounts; then
- umount ${ROOTDIR}/proc >/dev/null 2>&1
- fi
- if [ $dbusEnabled -eq 1 ]; then
- if egrep -q '^/[^[:space:]]+[[:space:]]+'${ROOTDIR}'/var/run/dbus' /proc/mounts; then
- umount ${ROOTDIR}/var/run/dbus > /dev/null 2>&1
- fi;
- fi;
- fi;
- if [ $RETVAL -eq 0 ]; then
- success
- else
- failure
+ # Stop daemons.
+ echo -n $"Stopping $named: "
+ [ -x /usr/sbin/rndc ] && /usr/sbin/rndc stop >/dev/null 2>&1;
+ RETVAL=$?
+ # is it still here?
+ if /sbin/pidof -o %PPID $named >/dev/null; then
+ timeout=0
+ while : ; do
+ if /sbin/pidof -o %PPID $named >/dev/null; then
+ if [ $timeout -ge $NAMED_SHUTDOWN_TIMEOUT ]; then
+ killproc $named -TERM >/dev/null 2>&1
+ RETVAL=$?
+ echo $"no response, killing with -TERM "
+ break
+ else
+ sleep 2 && echo -n "."
+ timeout=$((timeout+2))
fi;
- echo
- return $RETVAL
+ else
+ break
+ fi;
+ done
+ fi;
+
+ # remove pid files
+ if [ $RETVAL -eq 0 ]; then
+ rm -f /var/lock/subsys/named
+ rm -f /var/run/named.pid
+ rm -f /var/run/named_sdb.pid
+ fi;
+
+ # unmount mounted filesystems/directories
+ if [ -n "${ROOTDIR}" -a "x${ROOTDIR}" != "x/" ]; then
+ if egrep -q '^/proc[[:space:]]+'${ROOTDIR}'/proc' /proc/mounts; then
+ umount ${ROOTDIR}/proc >/dev/null 2>&1
+ fi
+ if [ ! -z $dbusEnabled ]; then
+ if egrep -q '^/[^[:space:]]+[[:space:]]+'${ROOTDIR}'/var/run/dbus' /proc/mounts; then
+ umount ${ROOTDIR}/var/run/dbus > /dev/null 2>&1
+ fi;
+ fi;
+ fi;
+ if [ $RETVAL -eq 0 ]; then
+ success
+ else
+ failure
+ RETVAL=1
+ fi;
+ echo
+ return $RETVAL
}
+
+
rhstatus() {
- /usr/sbin/rndc status
- return $?
+ [ -x /usr/sbin/rndc ] && /usr/sbin/rndc status;
+ status /usr/bin/$named;
+ return $?
}
restart() {
stop
@@ -231,25 +225,7 @@ reload() {
fi
[ "$RETVAL" -eq 0 ] && success $"$named reload" || failure $"$named reload"
echo
- return $?
-}
-probe() {
- # named knows how to reload intelligently; we don't want linuxconf
- # to offer to restart every time
- /usr/sbin/rndc reload >/dev/null 2>&1 || echo start
- return $?
-}
-checkconfig() {
- ckcf_options='-z'; # enable named-checkzone for each zone (9.3.1+) !
- if [ -n "${ROOTDIR}" -a "x${ROOTDIR}" != "x/" ]; then
- OPTIONS="${OPTIONS} -t ${ROOTDIR}"
- ckcf_options="$ckcf_options -t ${ROOTDIR}";
- fi;
- if [ -x /usr/sbin/named-checkconf ] && [ -x /usr/sbin/named-checkzone ] && /usr/sbin/named-checkconf $ckcf_options ${named_conf} | cat ; then
- return 0;
- else
- return 1;
- fi
+ return $RETVAL
}
# See how we were called.
@@ -261,7 +237,8 @@ case "$1" in
stop
;;
status)
- rhstatus
+ rhstatus;
+ RETVAL=$?
;;
restart)
restart
@@ -272,16 +249,10 @@ case "$1" in
reload)
reload
;;
- probe)
- probe
- ;;
- checkconfig|configtest|check|test)
- checkconfig
- ;;
*)
- echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|probe}"
- exit 1
+ echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
+ exit 3
esac
-exit $?
+exit $RETVAL