diff options
Diffstat (limited to 'packages/arpwatch/files/init.d')
-rw-r--r-- | packages/arpwatch/files/init.d | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/packages/arpwatch/files/init.d b/packages/arpwatch/files/init.d new file mode 100644 index 0000000000..09e3a8bf4e --- /dev/null +++ b/packages/arpwatch/files/init.d @@ -0,0 +1,159 @@ +#!/bin/sh +# /etc/init.d/arpwatch: v9 2004/08/14 KELEMEN Peter <fuji@debian.org> +# Based on /etc/init.d/skeleton (1.8 03-Mar-1998 miquels@cistron.nl) +# 2001/10/26 fuji@debian.org Support multiple instances. +# 2001/11/24 fuji@debian.org Use POSIX-style functions. +# 2001/12/17 fuji@debian.org Use --pidfile on startup, fix restart. +# 2004/08/10 fuji@debian.org Source /etc/default/arwpatch . +# Create datafile if it doesn't exist. +# Run daemon only if executable. + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +NAME=arpwatch +DAEMON=/usr/sbin/$NAME +DESC="Ethernet/FDDI station monitor daemon" +DATADIR=/var/lib/$NAME + +test -x $DAEMON || exit 0 + +### You shouldn't touch anything below unless you know what you are doing. + +[ -f /etc/default/arpwatch ] && . /etc/default/arpwatch + +# Decide whether we have to deal with multiple interfaces. +CONF=/etc/arpwatch.conf +MULTIPLE=0 +if [ -r $CONF ]; then + grep -c '^[a-z]' $CONF 2>&1 >/dev/null && MULTIPLE=1 +fi + +# Check whether we have to drop privileges. +if [ -n "$RUNAS" ]; then + if getent passwd "$RUNAS" >/dev/null; then + ARGS="-u ${RUNAS} $ARGS" + else + RUNAS="" + fi +fi + +start_instance () { + IFACE=$1 + INSTANCE=${NAME}-${IFACE} + IFACE_OPTS="-i ${IFACE} -f ${IFACE}.dat $2" + DATAFILE=$DATADIR/${IFACE}.dat + + echo -n "Starting $DESC: " + if [ ! -f $DATAFILE ]; then + echo -n "(creating $DATAFILE) " + :> $DATAFILE + fi + if [ -n "$RUNAS" ]; then + echo -n "(chown $RUNAS $DATAFILE) " + chown $RUNAS $DATAFILE + fi + start-stop-daemon --start --quiet \ + --pidfile /var/run/${INSTANCE}.pid \ + --exec $DAEMON -- $IFACE_OPTS $ARGS + echo "${INSTANCE}." + ps h -C $NAME -o pid,args | \ + awk "/$IFACE/ { print \$1 }" > /var/run/${INSTANCE}.pid +} + +stop_instance () { + IFACE=$1 + INSTANCE=${NAME}-${IFACE} + [ -f /var/run/${INSTANCE}.pid ] || return 0 + echo -n "Stopping $DESC: " + start-stop-daemon --stop --quiet --oknodo \ + --pidfile /var/run/${INSTANCE}.pid + echo "${INSTANCE}." + rm -f /var/run/${INSTANCE}.pid +} + +process_loop_break_line () { + __IFACE=$1 + shift + __IOPTS="$@" +} + +process_loop () { + OPERATION=$1 + grep '^[a-z]' $CONF 2>/dev/null | \ + while read LINE + do + process_loop_break_line $LINE + I=$__IFACE + I_OPTS="$__IOPTS" + $OPERATION $I "$I_OPTS" + done +} + +start_default () { + echo -n "Starting $DESC: " + if [ ! -f $DATADIR/arp.dat ]; then + echo -n "(creating $DATADIR/arp.dat) " + :> $DATADIR/arp.dat + fi + if [ -n "$RUNAS" ]; then + echo -n "(chown $RUNAS $DATADIR/arp.dat) " + chown $RUNAS $DATADIR/arp.dat + fi + start-stop-daemon --start --quiet \ + --exec $DAEMON -- $ARGS + echo "$NAME." +} + +stop_default () { + echo -n "Stopping $DESC: " + start-stop-daemon --stop --quiet --oknodo \ + --exec $DAEMON + echo "$NAME." + rm -f /var/run/$NAME.pid +} + +startup () { + if [ "$MULTIPLE" -gt 0 ]; then + process_loop start_instance + else + start_default + fi +} + +shutdown () { + if [ "$MULTIPLE" -gt 0 ]; then + process_loop stop_instance + else + stop_default + fi +} + +case "$1" in + start) + startup + ;; + stop) + shutdown + ;; + reload) + echo "Reload operation not supported -- use restart." + exit 1 + ;; + restart|force-reload) + # + # If the "reload" option is implemented, move the "force-reload" + # option to the "reload" entry above. If not, "force-reload" is + # just the same as "restart". + # + shutdown + sleep 1 + startup + ;; + *) + N=/etc/init.d/$NAME + # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $N {start|stop|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 |