File: init

package info (click to toggle)
fetchmail 6.3.6-1
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 6,336 kB
  • ctags: 3,609
  • sloc: ansic: 26,407; sh: 4,967; perl: 3,180; python: 1,920; yacc: 448; makefile: 331; lex: 277; awk: 124; lisp: 84; sed: 16
file content (229 lines) | stat: -rw-r--r-- 7,097 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
227
228
229
#!/bin/sh
#
# Fetchmail init script
# Latest change: Mo Jul 31 20:23:54 CEST 2006
#
### BEGIN INIT INFO
# Provides:          fetchmail
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: init-Script for system wide fetchmail daemon
### END INIT INFO
#
# A fetchmailrc file containg hosts and passwords for all local users should be
# placed in /etc/fetchmailrc.  Remember to make the /etc/fetchmailrc mode 600
# to avoid disclosing the users' passwords.
#
# This script will NOT start or stop fetchmail if the /etc/fetchmailrc file
# does not exist or /etc/default/fetchmail is set to no.

set -e

if [ ! -e /etc/fetchmailrc ]; then
    exit 0
fi

test -f /etc/default/fetchmail || exit 0
. /etc/default/fetchmail
if [ ! "x$START_DAEMON" = "xyes" ]; then
	echo "Edit /etc/default/fetchmail to start fetchmail"
	exit 0
fi

# Defaults
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/fetchmail
USER=fetchmail

CONFFILE=/etc/fetchmailrc
PIDFILE="/var/run/fetchmail/fetchmail.pid"
OPTIONS="-f $CONFFILE --pidfile $PIDFILE"
UIDL=/var/lib/fetchmail/.fetchmail-UIDL-cache

test -f $DAEMON || exit 0

. /lib/lsb/init-functions

if [ "$1" = "start" ]; then
    if [ ! -r $CONFFILE ] ; then
        log_failure_msg "$CONFFILE not found."
        log_failure_msg "can not start fetchmail daemon... consider disabling the script"
        exit 0
    fi
fi


# sanity checks (saves on MY sanity :-P )
if ! id $USER >/dev/null 2>&1; then
	if [ "$USER" = "fetchmail" ]; then
		# The fetchmail user might have been removed when the fetchmail-common
		# package is purged. We have to re-add it here so the system-wide
		# daemon will run.

		adduser --system --ingroup nogroup --home /var/lib/fetchmail \
			--shell /bin/sh --disabled-password fetchmail >/dev/null 2>&1 || true
		# work around possible adduser bug, see #119366
		[ -d /var/lib/fetchmail ] || mkdir -p /var/lib/fetchmail
		chmod 700 /var/lib/fetchmail
		chown -h -R fetchmail:nogroup /var/lib/fetchmail
	else
		log_failure_msg "$0: $USER user does not exist!"
		exit 1
	fi
fi

# add daemon option if user hasn't already specified it
if ! grep -qs '^[[:space:]]*set[[:space:]]\+daemon[[:space:]]' "$CONFFILE"; then
	OPTIONS="$OPTIONS -d 300"
fi

# add syslog option unless user specified "set no syslog".
if ! grep -qs '^[[:space:]]*set[[:space:]]\+no[[:space:]]\+syslog' "$CONFFILE"; then
	OPTIONS="$OPTIONS --syslog"
fi

# support for ephemeral /var/run
if [ "${PIDFILE%/*}" = "/var/run/fetchmail" ] && [ ! -d ${PIDFILE%/*} ]; then
	mkdir /var/run/fetchmail
	chown -h $USER:nogroup /var/run/fetchmail
	chmod 700 /var/run/fetchmail
fi

# sanity check
#if [ ! -d ${PIDFILE%/*} ]; then
#	log_failure_msg "$0: directory ${PIDFILE%/*} does not exist!"
#	exit 1
#fi

# If the user is going to use a UIDL cache, try to find a better place for the
# UIDL cache than root's homedir. Also create $UIDL if it doesn't exist,
# because the daemon won't have the permission.
if ! grep -qs idfile "$CONFFILE" && [ -d /var/lib/fetchmail ]; then 
	OPTIONS="$OPTIONS -i $UIDL"
	touch $UIDL
	chown -h $USER $UIDL
	chmod 0600 $UIDL
fi

# Makes sure certain files/directories have the proper owner
if [ "`stat -c '%U %a' $CONFFILE 2>/dev/null`" != "$USER 600" ]; then
	chown -h $USER $CONFFILE
	chmod -f 0600 $CONFFILE
fi

case "$1" in
	start)
		if test -e $PIDFILE ; then
			pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
			PIDDIR=/proc/$pid
		    if [ -d ${PIDDIR} -a  "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
				log_failure_msg "fetchmail already started; not starting."
				exit 0
			else
				log_warning_msg "Removing stale PID file $PIDFILE."
				rm -f $PIDFILE
			fi
		fi
	        log_begin_msg "Starting mail retriever agent:" "fetchmail"
		if start-stop-daemon -S -o -q -p $PIDFILE -x $DAEMON -u $USER -a /bin/su -- -c "$DAEMON $OPTIONS" $USER; then
			log_end_msg 0
		else
			log_end_msg 1
			exit 1
		fi
		;;
	stop)
		if ! test -e $PIDFILE ; then
			log_failure_msg "Pidfile not found! Is fetchmail running?"
			exit 0
		fi
	        log_begin_msg "Stopping mail retriever agent:" "fetchmail"
		if start-stop-daemon -K -o -q -p $PIDFILE -x $DAEMON -u $USER; then
			log_end_msg 0
		else
			log_end_msg 1
			exit 1
		fi
		;;
	force-reload|restart)
	        log_begin_msg "Restarting mail retriever agent:" "fetchmail"
		if ! start-stop-daemon -K -o -q -p $PIDFILE -x $DAEMON -u $USER; then
			log_end_msg 1
			exit 1
		fi
		sleep 1
		if start-stop-daemon -S -q -p $PIDFILE -x $DAEMON -u $USER -a /bin/su -- -c "$DAEMON $OPTIONS" $USER; then
			log_end_msg 0
		else
			log_end_msg 1
			exit 1
		fi
		;;
	try-restart)
		if test -e $PIDFILE ; then
			pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
			PIDDIR=/proc/$pid
			if [ -d ${PIDDIR} -a  "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
				$0 restart
				exit 0
			fi
		fi
		$0 start
		;;
	awaken)
	        log_begin_msg "Awakening mail retriever agent:" "fetchmail"
		if [ -s $PIDFILE ]; then
			start-stop-daemon -K -s 10 -q -p $PIDFILE -x $DAEMON
			log_end_msg 0
			exit 0
		else
			log_end_msg 1
			exit 1
		fi
		;;
	debug-run)
		echo "$0: Initiating debug run of system-wide fetchmail service..." 1>&2
		echo "$0: script will be run in debug mode, all output to forced to" 1>&2
		echo "$0: stdout. This is not enough to debug failures that only" 1>&2
		echo "$0: happen in daemon mode." 1>&2
		echo "$0: You might want to direct output to a file, and tail -f it." 1>&2
		if [ "$2" = "strace" ]; then
			echo "$0: (running debug mode under strace. See strace(1) for options)" 1>&2
			echo "$0: WARNING: strace output may contain security-sensitive info, such as" 1>&2
			echo "$0: passwords; please clobber them before sending the strace file to a" 1>&2
			echo "$0: public bug tracking system, such as Debian's." 1>&2
		fi
		echo "$0: Stopping the service..." 1>&2
		"$0" stop
		echo "$0: exit status of service stop was: $?"
		echo "$0: RUNUSER is $USER"
		echo "$0: OPTIONS would be $OPTIONS"
		echo "$0: Starting service in nodetach mode, hit ^C (SIGINT/intr) to finish run..." 1>&2
		if [ "$2" = "strace" ] ; then
			shift
			shift
			[ $# -ne 0 ] && echo "$0: (strace options are: -tt $@)" 1>&2
			su -c "/usr/bin/strace -tt $@ $DAEMON $OPTIONS --nosyslog --nodetach -v -v" $USER <&- 2>&1
		else
			su -c "$DAEMON $OPTIONS --nosyslog --nodetach -v -v" $USER <&- 2>&1
		fi
		echo "$0: End of service run. Exit status was: $?"
		exit 0
		;;
	*)
		log_warning_msg "Usage: /etc/init.d/fetchmail {start|stop|restart|force-reload|awaken|debug-run}"
		log_warning_msg "  start - starts system-wide fetchmail service"
		log_warning_msg "  stop  - stops system-wide fetchmail service"
		log_warning_msg "  restart, force-reload - starts a new system-wide fetchmail service"
		log_warning_msg "  awaken - tell system-wide fetchmail to start a poll cycle immediately"
		log_warning_msg "  debug-run [strace [strace options...]] - start a debug run of the"
		log_warning_msg "    system-wide fetchmail service, optionally running it under strace"
		exit 1
		;;
esac

exit 0

# vim:ts=4:sw=4: