Andrew Geissler | 1fe918a | 2020-05-15 14:16:47 -0500 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | PATH=/sbin:/bin:/usr/sbin:/usr/bin |
| 4 | NAME=arpwatch |
| 5 | DAEMON=/usr/sbin/$NAME |
| 6 | DESC="Ethernet/FDDI station monitor daemon" |
| 7 | DATADIR=/var/lib/$NAME |
| 8 | RETVAL=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. |
| 17 | CONF=/etc/arpwatch.conf |
| 18 | MULTIPLE=0 |
| 19 | if [ -r $CONF ]; then |
| 20 | grep -c '^[a-z]' $CONF 2>&1 >/dev/null && MULTIPLE=1 |
| 21 | fi |
| 22 | |
| 23 | # Check whether we have to drop privileges. |
| 24 | if [ -n "$RUNAS" ]; then |
| 25 | if getent passwd "$RUNAS" >/dev/null; then |
| 26 | ARGS="-u ${RUNAS} $ARGS" |
| 27 | else |
| 28 | RUNAS="" |
| 29 | fi |
| 30 | fi |
| 31 | |
| 32 | start_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 | |
| 54 | stop_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 | |
| 65 | process_loop_break_line () { |
| 66 | __IFACE=$1 |
| 67 | shift |
| 68 | __IOPTS="$@" |
| 69 | } |
| 70 | |
| 71 | process_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 | |
| 83 | startup () { |
| 84 | process_loop start_instance |
| 85 | } |
| 86 | |
| 87 | shutdown () { |
| 88 | process_loop stop_instance |
| 89 | } |
| 90 | |
| 91 | case "$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 | ;; |
| 121 | esac |
| 122 | |
| 123 | exit $RETVAL |