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