1#!/bin/sh
2#
3# Author: Simon Horman <horms@verge.net.au>
4#
5# 2011-05-25 updated with current /etc/init.d/skeleon by Steven Kurylo <steven.kurylo@aviawest.com>
6#
7### BEGIN INIT INFO
8# Provides:          perdition
9# Required-Start:    $remote_fs
10# Should-Start:      $syslog $named
11# Required-Stop:     $remote_fs
12# Should-Stop:       $syslog $named
13# Default-Start:     2 3 4 5
14# Default-Stop:      0 1 6
15# Short-Description: POP, IMAP and managesieve proxy
16# Description:       Starts perdition to allow proxied POP, IMAP and managesieve access
17### END INIT INFO
18
19PATH=/usr/sbin:/bin:/usr/bin:/sbin:/usr/sbin
20NAME=perdition
21DAEMON=/usr/local/sbin/perdition
22
23# Exit if the package is not installed
24[ -x "$DAEMON" ] || exit 0
25
26# Read configuration variable file if it is present
27[ -r /etc/default/$NAME ] && . /etc/default/$NAME
28
29# Load the VERBOSE setting and other rcS variables
30. /lib/init/vars.sh
31
32# Define LSB log_* functions.
33# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
34# and status_of_proc is working.
35. /lib/lsb/init-functions
36
37# Please do not edit the values below.
38# Rather, please edit /etc/default/perdition
39RUN_PERDITION="${RUN_PERDITION:=no}"
40FLAGS="${FLAGS:=}"
41POP3="${POP3:=yes}"
42POP3_FLAGS="${POP3_FLAGS:=}"
43POP3S="${POP3S:=yes}"
44POP3S_FLAGS="${POP3S_FLAGS:=}"
45IMAP4="${IMAP4:=yes}"
46IMAP4_FLAGS="${IMAP4_FLAGS:=}"
47IMAP4S="${IMAP4S:=yes}"
48IMAP4S_FLAGS="${IMAP4S_FLAGS:=}"
49MANAGESIEVE="${MANAGESIEVE:=yes}"
50MANAGESIEVE_FLAGS="${MANAGESIEVE_FLAGS:=}"
51
52if [ "$RUN_PERDITION" != "yes" ]; then
53        exit 0
54fi
55
56do_start()
57{
58    # Return
59    #   0 if daemon has been started
60    #   1 if daemon was already running
61    #   2 if daemon could not be started
62    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
63        || return 1
64    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
65        $DAEMON_ARGS \
66        || return 2
67}
68
69do_stop() {
70    # Return
71    #   0 if daemon has been stopped
72    #   1 if daemon was already stopped
73    #   2 if daemon could not be stopped
74    #   other if a failure occurred
75    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON
76    #RETVAL="$?"
77    #[ "$RETVAL" = 2 ] && return 2
78    #rm -f $PIDFILE
79    #return "$RETVAL"
80    return $?
81
82}
83
84do_reload() {
85    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --exec $DAEMON
86    return 0
87}
88
89case "$1" in
90  start)
91    if [ "$POP3" = "yes" ]; then
92        PIDFILE=/var/run/perdition.pop3/perdition.pop3.pid
93        DAEMON=/usr/local/sbin/perdition.pop3
94        DAEMON_ARGS="$FLAGS $POP3_FLAGS"
95        [ "$VERBOSE" != no ] && log_daemon_msg "Starting Perdition POP3 server"
96        do_start
97        case "$?" in
98                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
99                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
100        esac
101    fi
102    if [ "$POP3S" = "yes" ]; then
103        PIDFILE=/var/run/perdition.pop3s/perdition.pop3s.pid
104        DAEMON=/usr/local/sbin/perdition.pop3s
105        DAEMON_ARGS="$FLAGS $POP3S_FLAGS"
106        [ "$VERBOSE" != no ] && log_daemon_msg "Starting Perdition POP3S server"
107        do_start
108        case "$?" in
109                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
110                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
111        esac
112    fi
113    if [ "$IMAP4" = "yes" ]; then
114        PIDFILE=/var/run/perdition.imap4/perdition.imap4.pid
115        DAEMON=/usr/local/sbin/perdition.imap4
116        DAEMON_ARGS="$FLAGS $IMAP4_FLAGS"
117        [ "$VERBOSE" != no ] && log_daemon_msg "Starting Perdition IMAP4 server"
118        do_start
119        case "$?" in
120                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
121                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
122        esac
123    fi
124    if [ "$IMAP4S" = "yes" ]; then
125        PIDFILE=/var/run/perdition.imaps/perdition.imaps.pid
126        DAEMON=/usr/local/sbin/perdition.imaps
127        DAEMON_ARGS="$FLAGS $IMAP4S_FLAGS"
128        [ "$VERBOSE" != no ] && log_daemon_msg "Starting Perdition IMAP4S server"
129        do_start
130        case "$?" in
131                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
132                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
133        esac
134    fi
135    if [ "$MANAGESIEVE" = "yes" ]; then
136        PIDFILE=/var/run/perdition.managesieve/perdition.managesieve.pid
137        DAEMON=/usr/local/sbin/perdition.managesieve
138        DAEMON_ARGS="$FLAGS $MANAGESIEVE_FLAGS"
139        [ "$VERBOSE" != no ] && log_daemon_msg "Starting Perdition manage sieve server"
140        do_start
141        case "$?" in
142                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
143                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
144        esac
145    fi
146    ;;
147  stop)
148    if [ "$POP3" = "yes" ]; then
149        PIDFILE=/var/run/perdition.pop3/perdition.pop3.pid
150        DAEMON=/usr/local/sbin/perdition.pop3
151        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping Perdition POP3 server"
152	do_stop
153        case "$?" in
154                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
155                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
156        esac
157    fi
158    if [ "$POP3S" = "yes" ]; then
159        PIDFILE=/var/run/perdition.pop3s/perdition.pop3s.pid
160        DAEMON=/usr/local/sbin/perdition.pop3s
161        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping Perdition POP3S server"
162	do_stop
163        case "$?" in
164                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
165                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
166        esac
167    fi
168    if [ "$IMAP4" = "yes" ]; then
169        PIDFILE=/var/run/perdition.imap4/perdition.imap4.pid
170        DAEMON=/usr/local/sbin/perdition.imap4
171        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping Perdition IMAP4 server"
172	do_stop
173        case "$?" in
174                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
175                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
176        esac
177    fi
178    if [ "$IMAP4S" = "yes" ]; then
179        PIDFILE=/var/run/perdition.imaps/perdition.imaps.pid
180        DAEMON=/usr/local/sbin/perdition.imaps
181        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping Perdition IMAP4S server"
182	do_stop
183        case "$?" in
184                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
185                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
186        esac
187    fi
188    if [ "$MANAGESIEVE" = "yes" ]; then
189        PIDFILE=/var/run/perdition.managesieve/perdition.managesieve.pid
190        DAEMON=/usr/local/sbin/perdition.managesieve
191        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping Perdition manage sieve server"
192	do_stop
193        case "$?" in
194                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
195                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
196        esac
197    fi
198    ;;
199  restart)
200    $0 stop
201    $0 start
202    ;;
203  force-reload|reload)
204    if [ "$POP3" = "yes" ]; then
205        PIDFILE=/var/run/perdition.pop3/perdition.pop3.pid
206        DAEMON=/usr/local/sbin/perdition.pop3
207        [ "$VERBOSE" != no ] && log_daemon_msg "Reloading Perdition POP3 server"
208        do_reload
209        [ "$VERBOSE" != no ] && log_end_msg $?
210    fi
211    if [ "$POP3S" = "yes" ]; then
212        PIDFILE=/var/run/perdition.pop3s/perdition.pop3s.pid
213        DAEMON=/usr/local/sbin/perdition.pop3s
214        [ "$VERBOSE" != no ] && log_daemon_msg "Reloading Perdition POP3S server"
215        do_reload
216        [ "$VERBOSE" != no ] && log_end_msg $?
217    fi
218    if [ "$IMAP4" = "yes" ]; then
219        PIDFILE=/var/run/perdition.imap4/perdition.imap4.pid
220        DAEMON=/usr/local/sbin/perdition.imap4
221        [ "$VERBOSE" != no ] && log_daemon_msg "Reloading Perdition IMAP4 server"
222        do_reload
223        [ "$VERBOSE" != no ] && log_end_msg $?
224    fi
225    if [ "$IMAP4S" = "yes" ]; then
226        PIDFILE=/var/run/perdition.imaps/perdition.imaps.pid
227        DAEMON=/usr/local/sbin/perdition.imaps
228        [ "$VERBOSE" != no ] && log_daemon_msg "Reloading Perdition IMAP4S server"
229        do_reload
230        [ "$VERBOSE" != no ] && log_end_msg $?
231    fi
232    if [ "$MANAGESIEVE" = "yes" ]; then
233        PIDFILE=/var/run/perdition.managesieve/perdition.managesieve.pid
234        DAEMON=/usr/local/sbin/perdition.managesieve
235        [ "$VERBOSE" != no ] && log_daemon_msg "Reloading Perdition manage sieve server"
236        do_reload
237        [ "$VERBOSE" != no ] && log_end_msg $?
238    fi
239    ;;
240  *)
241    echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}"
242    exit 1
243    ;;
244esac
245
246exit 0
247