File: init

package info (click to toggle)
fetchmail 6.2.5-12sarge5
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 5,048 kB
  • ctags: 2,362
  • sloc: ansic: 19,329; sh: 3,735; python: 1,797; perl: 564; makefile: 501; yacc: 461; lex: 262; awk: 124; sed: 93; lisp: 84
file content (179 lines) | stat: -rw-r--r-- 5,592 bytes parent folder | download
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
#!/bin/sh
#
# Fetchmail init script
# $Id: init 157 2004-09-14 03:26:54Z bob $
#
# 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.
#

set -e

# Defaults
DAEMON=/usr/bin/fetchmail
CONFFILE=/etc/fetchmailrc
OPTIONS="-f $CONFFILE"
PIDFILE=/var/run/fetchmail/.fetchmail.pid
UIDL=/var/mail/.fetchmail-UIDL-cache
USER=fetchmail
PATH=/sbin:/bin:/usr/sbin:/usr/bin

test -f $DAEMON || exit 0
test -r $CONFFILE || exit 0

# 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/run/fetchmail \
			--shell /bin/sh --disabled-password fetchmail >/dev/null 2>&1 || true
		# work around possible adduser bug, see #119366
		[ -d /var/run/fetchmail ] || mkdir -p /var/run/fetchmail
		chmod 700 /var/run/fetchmail
		chown -h -R fetchmail:nogroup /var/run/fetchmail
	else
		echo "$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 if user hasn't already specified it
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
	echo "$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/mail ]; 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)
		echo -n "Starting mail retrieval agent: fetchmail"
		if start-stop-daemon -S -o -q -p $PIDFILE -x $DAEMON -u $USER -a /bin/su -- -c "$DAEMON $OPTIONS" $USER; then
			echo "."
		else
			echo " (failed)."
			exit 1
		fi
		;;
	stop)
		echo -n "Stopping mail retrieval agent: fetchmail"
		if start-stop-daemon -K -o -q -p $PIDFILE -x $DAEMON -u $USER; then
			echo "."
		else
			echo " (failed)."
			exit 1
		fi
		;;
	force-reload|restart)
		echo -n "Restarting mail retrieval agent: fetchmail"
		if ! start-stop-daemon -K -o -q -p $PIDFILE -x $DAEMON -u $USER; then
			echo " (failed on stop)."
			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
			echo "."
		else
			echo " (failed on start)."
			exit 1
		fi
		;;
	try-restart)
		if start-stop-daemon -S -t -q -p $PIDFILE -x $DAEMON -u $USER >/dev/null; then
			exit 0
		fi
		$0 restart
		;;
	awaken)
		echo -n "Awakening mail retrieval agent: fetchmail"
		if [ -r $PIDFILE ]; then
			su -c $DAEMON $USER <&- >/dev/null 2>&1
			echo "."
			exit 0
		else
			echo " (not running)."
			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 && true
		else
			su -c "$DAEMON $OPTIONS --nosyslog --nodetach -v -v" $USER <&- 2>&1 && true
		fi
		echo "$0: End of service run. Exit status was: $?"
		exit 0
		;;
	*)
		echo "Usage: /etc/init.d/fetchmail {start|stop|restart|force-reload|awaken|debug-run}"
		echo "  start - starts system-wide fetchmail service"
		echo "  stop  - stops system-wide fetchmail service"
		echo "  restart, force-reload - starts a new system-wide fetchmail service"
		echo "  awaken - tell system-wide fetchmail to start a poll cycle immediately"
		echo "  debug-run [strace [strace options...]] - start a debug run of the"
		echo "    system-wide fetchmail service, optionally running it under strace"
		exit 1
		;;
esac

exit 0

# vim:ts=4:sw=4: