aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-scanners/arpwatch/files/arpwatch_init
blob: 9860c65aa20393ba015ef403ed48e69a269c66d1 (plain)
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
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
NAME=arpwatch
DAEMON=/usr/sbin/$NAME
DESC="Ethernet/FDDI station monitor daemon"
DATADIR=/var/lib/$NAME
RETVAL=0

. /etc/init.d/functions

### 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}
	DATAFILE=$DATADIR/${IFACE}.dat
	IFACE_OPTS="-P /var/run/${INSTANCE}.pid -i ${IFACE} -f ${DATAFILE} $2"

	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
}

startup () {
  	process_loop start_instance
}

shutdown () {
	process_loop stop_instance
}

case "$1" in
  start)
  	startup
	;;
  stop)
  	shutdown
	;;
  reload)
  	echo "Reload operation not supported -- use restart."
	RETVAL=2
	;;
  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
	;;
  status)
      status_of_proc $DAEMON $NAME
      ;;
  *)
	N=/etc/init.d/$NAME
	# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
	echo "Usage: $N {start|stop|restart|force-reload}" >&2
	RETVAL=2
	;;
esac

exit $RETVAL