1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
#!/bin/sh
#
# pdnsd
set +e # Don't exit on error status
NAME="pdnsd"
DESC="proxy DNS server"
DAEMON="/usr/sbin/pdnsd"
PIDFILE="/var/run/pdnsd.pid"
CACHE="/var/cache/pdnsd/pdnsd.cache"
[ -x "$DAEMON" ] || exit 0
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
[ -r "/etc/default/$NAME" ] || exit 0
. "/etc/default/$NAME"
gen_cache () {
set -e
if [ -f "$CACHE" ]; then
CACHE_SIZE=$(LANG=C ls -l "$CACHE" | awk '{ print $5; }')
if expr $CACHE_SIZE '<' 4 > /dev/null; then
echo -n " (regenerating cache..."
dd if=/dev/zero of="$CACHE" bs=1 count=4 2> /dev/null
chown pdnsd.proxy "$CACHE"
echo -n "done)"
fi
else
echo -n " (generating cache..."
mkdir -p /var/cache/pdnsd
dd if=/dev/zero of="$CACHE" bs=1 count=4 2> /dev/null
chown -R pdnsd.proxy /var/cache/pdnsd
echo -n "done)"
fi
set +e
return 0
}
start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile "$PIDFILE" --exec "$DAEMON" --test > /dev/null || return 1
start-stop-daemon --start --quiet --pidfile "$PIDFILE" --exec "$DAEMON" -- \
--daemon -p "$PIDFILE" $START_OPTIONS \
|| return 2
}
start_resolvconf()
{
if [ -x /sbin/resolvconf ] ; then
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a "lo.$NAME"
fi
return 0
}
stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$PIDFILE" --name "$NAME"
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$DAEMON" > /dev/null
[ "$?" = 2 ] && return 2
rm -f "$PIDFILE"
return "$RETVAL"
}
stop_resolvconf()
{
if [ -x /sbin/resolvconf ] ; then
/sbin/resolvconf -d "lo.$NAME"
fi
return 0
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
gen_cache
start
case "$?" in
0)
echo "."
start_resolvconf
exit 0
;;
1)
echo " (already running)."
exit 0
;;
*)
echo " (failed)."
exit 1
;;
esac
;;
stop)
stop_resolvconf
echo -n "Stopping $DESC: $NAME"
stop
case "$?" in
0) echo "." ; exit 0 ;;
1) echo " (not running)." ; exit 0 ;;
*) echo " (failed)." ; exit 1 ;;
esac
;;
restart|force-reload)
stop_resolvconf
echo -n "Restarting $DESC: $NAME"
stop
case "$?" in
0|1)
start
case "$?" in
0)
echo "."
start_resolvconf
exit 0
;;
1)
echo " (failed -- old process is still running)."
exit 1
;;
*)
echo " (failed to start)."
exit 1
;;
esac
;;
*)
echo " (failed to stop)."
exit 1
;;
esac
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
|