updated Debian init script (contributed by Franck Joncourt)
[fwknop.git] / extras / fwknop.init.debian
1 #! /bin/sh
2
3 ### BEGIN INIT INFO
4 # Provides:          fwknop-server
5 # Required-Start:    $local_fs $remote_fs $syslog $network
6 # Required-Stop:     $local_fs $remote_fs $syslog $network
7 # Default-Start:     2 3 4 5
8 # Default-Stop:      0 1 6
9 # Short-Description: start and stop fwknopd
10 # Description: Fwknop implements an authorization scheme known as \
11 #              Single Packet Authorization (SPA) for Linux systems \
12 #              running iptables.
13 ### END INIT INFO
14
15 # Author: Franck Joncourt <franck@debian.org>
16
17 PATH=/sbin:/usr/sbin:/bin:/usr/bin
18 DESC="FireWall KNock OPerator"
19 NAME=fwknopd
20 DAEMON=/usr/sbin/$NAME
21 PIDDIR=/var/run/fwknop
22 SCRIPTNAME=/etc/init.d/fwknop-server
23
24 # Exit if the package is not installed
25 [ -x "$DAEMON" ] || exit 0
26
27 # Load user options to pass to fwknopd daemon
28 START_DAEMON="no"
29 DAEMON_ARGS=""
30 [ -r /etc/default/fwknop-server ] && . /etc/default/fwknop-server
31
32 # Exit if the dameon must not be started
33 [ "$START_DAEMON" = "yes" ] || exit 0
34
35 # Load the VERBOSE setting and other rcS variables
36 . /lib/init/vars.sh
37
38 # Define LSB log_* functions.
39 # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
40 . /lib/lsb/init-functions
41
42 ##
43 # Function that checks if all of the configuration files exist
44 #
45 # @return status
46 #          0 : all of the configuration files exist
47 #          6 : at least one file is missing
48 ##
49
50 check_config()
51 {
52         local retval
53         local file_list
54
55         retval=0
56         file_list="/etc/fwknop/access.conf /etc/fwknop/fwknopd.conf"
57
58         for ConfFile in $file_list; do
59                 if [ ! -f "$ConfFile" ]; then
60                         retval=6        
61                         break   
62                 fi
63         done
64
65         return $retval
66 }
67
68 ##
69 # Function that starts the daemon/service
70 #
71 # @return status
72 #          0 : daemon has been started or was already running
73 #          1 : generic or unspecified errors (could not be started)
74 #          6 : program is not configured (missing configuration files)
75 ##
76
77 do_start()
78 {
79         local retval
80
81         mkdir -p $PIDDIR
82         chmod 755 $PIDDIR
83
84         # Check fwknopd configuration
85         check_config
86         retval=$?
87
88         # Try to start fwknopd
89         if [ "$retval"  = "0" ]; then
90                 start-stop-daemon --start --quiet --pidfile $PIDDIR/$NAME --exec $DAEMON -- $DAEMON_ARGS
91                 retval="$?"
92         fi
93
94         # Handle return status codes
95         case "$retval" in
96                 0)       
97                         ;;
98                 6)      
99                         log_action_msg "You are missing the configuration file $ConfFile." || true
100                         ;;
101                 9)      
102                         retval=0
103                         ;;
104                 *)
105                         retval=1
106                         log_action_msg "Unable to start the daemon." || true
107                         ;;
108         esac
109
110        log_daemon_msg "Starting $DESC" "$NAME" || true
111        log_end_msg $retval || true
112
113         return $retval
114 }
115
116 ##
117 # Function that stops the daemon/service
118 #
119 # @return status
120 #            0 : daemon has been stopped or was already stopped
121 #            1 : daemon could not be stopped
122 ##
123
124 do_stop()
125 {
126         local retval="0"
127         local status kill_status
128         local pid pidfile
129         local process_list="fwknopd"
130
131         # For each process
132         for process in $process_list; do
133
134                 pidfile="$PIDDIR/$process.pid"
135                 status="0"
136                 kill_status="1"
137
138                 # Try to kill the process associated to the pid
139                 if [ -r "$pidfile" ]; then
140                         pid=`cat "$pidfile" 2>/dev/null`
141                         kill -0 "${pid:-}" 2>/dev/null
142                         kill_status="$?"
143                 fi
144
145                 # Stop the process
146                 if [ "$kill_status" = "0" ]; then
147                         start-stop-daemon --stop --oknodo --quiet --pidfile "$pidfile"
148                         status="$?"
149                 fi
150
151                 # Remove its pid file
152                 if [ -r "$pidfile" ] && [ "$status" = "0" ]; then
153                          rm -f "$pidfile" 2>/dev/null
154                          status="$?"
155                 fi
156
157                 [ "$status" = "0" ] || retval="1"
158
159         done
160
161
162         if [ "$retval" != "0" ]; then
163                 log_action_msg "The process could not be stopped" || true
164         fi
165
166         log_daemon_msg "Stopping $DESC" "$NAME" || true
167         log_end_msg $retval || true
168
169         return $retval
170 }
171
172 ##
173 # Function that returns the daemon status
174 ##
175
176 do_status()
177 {
178         echo "Status of $DESC:"
179         $DAEMON -S
180 }
181
182 case "$1" in
183         start)
184                 do_start
185                 ;;
186
187         stop)
188                 do_stop
189                 ;;
190
191         restart|force-reload)
192                 do_stop
193                 sleep 1
194                 do_start
195                 ;;
196
197         status)
198                 do_status
199                 exit $?
200                 ;;
201
202         *)
203                 log_success_msg "Usage: $0 {start|stop|restart|status}" >&2
204                 exit 1 
205                 ;;
206 esac
207
208 exit