1#!/bin/sh
2
3PATH=/sbin:/bin:/usr/sbin:/usr/bin
4NAME=arpwatch
5DAEMON=/usr/sbin/$NAME
6DESC="Ethernet/FDDI station monitor daemon"
7DATADIR=/var/lib/$NAME
8RETVAL=0
9
10. /etc/init.d/functions
11
12### You shouldn't touch anything below unless you know what you are doing.
13
14[ -f /etc/default/arpwatch ] && . /etc/default/arpwatch
15
16# Decide whether we have to deal with multiple interfaces.
17CONF=/etc/arpwatch.conf
18MULTIPLE=0
19if [ -r $CONF ]; then
20	grep -c '^[a-z]' $CONF 2>&1 >/dev/null && MULTIPLE=1
21fi
22
23# Check whether we have to drop privileges.
24if [ -n "$RUNAS" ]; then
25	if getent passwd "$RUNAS" >/dev/null; then
26		ARGS="-u ${RUNAS} $ARGS"
27	else
28		RUNAS=""
29	fi
30fi
31
32start_instance () {
33	IFACE=$1
34	INSTANCE=${NAME}-${IFACE}
35	DATAFILE=$DATADIR/${IFACE}.dat
36	IFACE_OPTS="-P /var/run/${INSTANCE}.pid -i ${IFACE} -f ${DATAFILE} $2"
37
38	echo -n "Starting $DESC: "
39	if [ ! -f $DATAFILE ]; then
40		echo -n "(creating $DATAFILE) " :> $DATAFILE
41	fi
42	if [ -n "$RUNAS" ]; then
43		echo -n "(chown $RUNAS $DATAFILE) "
44		chown $RUNAS $DATAFILE
45	fi
46	start-stop-daemon --start --quiet \
47		--pidfile /var/run/${INSTANCE}.pid \
48		--exec $DAEMON -- $IFACE_OPTS $ARGS
49	echo "${INSTANCE}."
50	ps h -C $NAME -o pid,args | \
51		awk "/$IFACE/ { print \$1 }" > /var/run/${INSTANCE}.pid
52}
53
54stop_instance () {
55	IFACE=$1
56	INSTANCE=${NAME}-${IFACE}
57	[ -f /var/run/${INSTANCE}.pid ] || return 0
58	echo -n "Stopping $DESC: "
59	start-stop-daemon --stop --quiet --oknodo \
60		--pidfile /var/run/${INSTANCE}.pid
61	echo "${INSTANCE}."
62	rm -f /var/run/${INSTANCE}.pid
63}
64
65process_loop_break_line () {
66	__IFACE=$1
67	shift
68	__IOPTS="$@"
69}
70
71process_loop () {
72	OPERATION=$1
73	grep '^[a-z]' $CONF 2>/dev/null | \
74	while read LINE
75	do
76		process_loop_break_line $LINE
77		I=$__IFACE
78		I_OPTS="$__IOPTS"
79		$OPERATION $I "$I_OPTS"
80	done
81}
82
83startup () {
84  	process_loop start_instance
85}
86
87shutdown () {
88	process_loop stop_instance
89}
90
91case "$1" in
92  start)
93  	startup
94	;;
95  stop)
96  	shutdown
97	;;
98  reload)
99  	echo "Reload operation not supported -- use restart."
100	RETVAL=2
101	;;
102  restart|force-reload)
103	#
104	#	If the "reload" option is implemented, move the "force-reload"
105	#	option to the "reload" entry above. If not, "force-reload" is
106	#	just the same as "restart".
107	#
108	shutdown
109	sleep 1
110	startup
111	;;
112  status)
113      status_of_proc $DAEMON $NAME
114      ;;
115  *)
116	N=/etc/init.d/$NAME
117	# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
118	echo "Usage: $N {start|stop|restart|force-reload}" >&2
119	RETVAL=2
120	;;
121esac
122
123exit $RETVAL
124