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:
|