File: spampd.init

package info (click to toggle)
spampd 2.30-22.2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 224 kB
  • ctags: 80
  • sloc: perl: 557; sh: 272; makefile: 88
file content (226 lines) | stat: -rw-r--r-- 5,517 bytes parent folder | download | duplicates (2)
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
#!/bin/bash -e
#
# spampd	SpamPD is a spamdetection proxy daemon for SMTP and LMTP
#
#		This script was written for debian
#		by Sven Mueller <debian@incase.de>
#
# Version:	2.0  22-Aug-2005  debian@incase.de
#
### BEGIN INIT INFO
# Provides:		spampd
# Required-Start: 	$remote_fs $syslog $network $named $time
# Required-Stop:  	$remote_fs $syslog $network $named $time
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	spam detection proxy for SMTP and LMTP
# Description: 		SpamAssassin based perl proxy for SMTP and LMTP
#			which marks mails as spam/nonspam based on SpamAssassin
#			results
### END INIT INFO

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
DESC='spam checking proxy daemon'
NAME='spampd'
PROGRAM=/usr/sbin/spampd
#EXECUTABLE=`head -n 1 $PROGRAM | sed -e 's,^#![ 	]*/,/,;s,[ 	].*$,,'`
EXECUTABLE=/usr/bin/perl
PIDFILE=/var/run/spampd.pid

. /lib/lsb/init-functions

# set some important defaults (overridable via /etc/default/spampd)
USERID=spampd
GRPID=spampd

if [ "`id -u`" !=  "0" ]; then
	log_failure_msg "ERROR: Insufficient privileges. Retry as root"
	# LSB 3.0 says that return value of 4 indicates insufficient privileges
	exit 4
fi

if [ -f /etc/default/$NAME ]; then
	. /etc/default/$NAME
fi
	
istrue () {
    ANS=$(echo $1 | tr A-Z a-z)
    [ "$ANS" = 'yes' -o "$ANS" = 'true' -o "$ANS" = 'enable' -o "$ANS" = '1' ]
}

#
# find out wether to start spampd or not
#
istrue ${STARTSPAMPD} && STARTSPAMPD='true'

#
# Check wether the program is actually there
#
# return 5 as demanded by LSB 2.1 when program isn't installed.
[  -x $PROGRAM ] || exit 5

# 
# Calculate final commandline
#
S_TAGALL=''
S_AWL=''
S_LOCALONLY=''

istrue "$TAGALL" \
&& S_TAGALL='--tagall'

istrue "$AUTOWHITELIST" \
&& S_AWL='--auto-whitelist'

istrue "$LOCALONLY" \
&& S_LOCALONLY='--L'

istrue "$LOGINET" \
&& LOGTARGET="inet" \
|| LOGTARGET="unix"

ARGS="${S_LOCALONLY} ${S_AWL} ${S_TAGALL} "

[ -n "${LISTENPORT}" ] && ARGS="${ARGS} --port=${LISTENPORT}"

[ -n "${LISTENHOST}" ] && ARGS="${ARGS} --host=${LISTENHOST}"

[ -n "${DESTPORT}" ] && ARGS="${ARGS} --relayport=${DESTPORT}"

[ -n "${DESTHOST}" ] && ARGS="${ARGS} --relayhost=${DESTHOST}"

[ -n "${PIDFILE}" ] && ARGS="${ARGS} --pid=${PIDFILE}"

[ -n "${CHILDREN}" ] && ARGS="${ARGS} --children=${CHILDREN}"

[ -n "${USERID}" ] && ARGS="${ARGS} --user=${USERID}"

[ -n "${GRPID}" ] && ARGS="${ARGS} --group=${GRPID}"

[ -n "${LOGTARGET}" ] && ARGS="${ARGS} --logsock=${LOGTARGET}"

[ -n "${ADDOPTS}" ] && ARGS="${ARGS} ${ADDOPTS}"

function check_pid () {
	# $1 : process name
	# $2 : pid file
	# $3 : (optional) verbosity
	VERBOSE=""
	[ "$3" = "verbose" ] && VERBOSE=1
	if [ -f $2 ]; then
		kill -0 `cat $2` > /dev/null 2>&1
		RETVAL=$?
		if [ "$RETVAL" = "0" ]; then
			[ "$VERBOSE" ] && log_success_msg "$1 is running as `cat $2`"
			return 0
		else
			[ "$VERBOSE" ] && log_failure_msg "PIDFILE $2 for $1 exists, but $1 is not running."
			rm $2
			return 1
		fi
	else
		[ "$VERBOSE" ] && log_failure_msg "PIDFILE $2 for $1 doesn't exist."
		return 4
	fi
	return 3
}

case "$1" in
	start)
		if ! istrue "${STARTSPAMPD}"; then
			log_warning_msg "Starting $DESC: $NAME (disabled in /etc/default/$NAME)."
			# LSB 2.1: 6 mean unconfigured. This seems appropriate here.
			exit 6
		fi
		log_daemon_msg "Starting $DESC" "$NAME"
		# if spampd is already running, exit 0 as demanded by LSB 2.1
		# this also removes the PIDFILE if it exists but has no matching
		# process
		if check_pid $PROGRAM $PIDFILE ; then
			log_end_msg 0
			exit 0
		fi
		# if spampd is not installed, return 5 as demanded by LSB 2.1
		if [ ! -x $EXECUTABLE ]; then
			log_error_msg "failed! - executable not found"
			exit 5
		fi
		# start daemon
		start-stop-daemon --start --exec $EXECUTABLE \
			--startas $PROGRAM --pidfile $PIDFILE \
			--user $USERID --group $GRPID -- $ARGS
		if [ "$?" = '0' ]; then
			log_end_msg 0
			exit 0
		else
			log_end_msg 7
			# LSB 2.1 says 7 should be returned when program
			# isn't running.
			exit 7
		fi
		;;
	stop)
		echo -n "Stopping $DESC: $NAME "
		set +e
		# if $PROGRAM is not running under PID given in
		# $PIDFILE, exit with 0 to be LSB compliant
		check_pid $PROGRAM $PIDFILE || exit 0
		if istrue "$STARTSPAMPD" ; then
			start-stop-daemon --stop --exec $EXECUTABLE \
				--pidfile $PIDFILE
		else
			start-stop-daemon --stop --exec $EXECUTABLE \
				--pidfile $PIDFILE > /dev/null 2>&1
		fi
		if [ "$?" = "0" ]; then
			log_end_msg 0
			rm $PIDFILE
			exit 0
		else
			if ! check_pid $PROGRAM $PIDFILE ; then
				log_end_msg 0
				exit 0
			else
				# if we had not successfully stopped the
				# program, we can assume the user didn't
				# have sufficient privileges.
				log_end_msg 1
				exit 4
			fi
		fi
		;;
	status)
		check_pid $PROGRAM $PIDFILE verbose
		exit $?
		;;
	reload)
		log_warning_msg "reload not implemented, try force-reload/restart instead"
		exit 3
		;;
	force-reload|try-restart)
		if check_pid $PROGRAM $PIDFILE ; then
			exec $0 restart
		else
			log_warning_msg "$DESC is not running. Try '$0 start' to start it."
			# LSB 2.1 says that this should return success, anyhow.
			exit 0
		fi
		;;
	restart)
		if check_pid $PROGRAM $PIDFILE ; then
			$0 stop
		fi
		exec $0 start
		;;
	help)
		echo "Usage: $0 (start|stop|restart|try-restart|force-reload|status)"
		exit 0
		;;
	*)	echo "Usage: $0 (start|stop|restart|try-restart|force-reload|status|help)"
		exit 2
		;;

esac

log_error_msg "This point shouldn't be reached. Some weird thing happened"
exit 1