mirror of
https://git.freebsd.org/ports.git
synced 2025-06-22 05:00:30 -04:00
152 lines
4.9 KiB
Bash
152 lines
4.9 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# PROVIDE: fetchmail
|
|
# REQUIRE: mail
|
|
# KEYWORD: shutdown
|
|
|
|
#
|
|
# Add the following lines to /etc/rc.conf to fetchmail in daemon
|
|
# mode.
|
|
#
|
|
# fetchmail_enable="YES"
|
|
#
|
|
# There are two variants:
|
|
#
|
|
# * Single system-wide fetchmail daemon:
|
|
# - It is run as user `fetchmail_user' (default: fetchmail)
|
|
# Note: The directory /var/run/fetchmail must be writable for
|
|
# `fetchmail_user'.
|
|
# - All configuration is contained in one global file
|
|
# `fetchmail_config' (default: %%PREFIX%%/etc/fetchmailrc),
|
|
# that must be owned by `fetchmail_user' (mode 700)
|
|
# - The fetchmail daemon awakes to fetch mail every
|
|
# `fetchmail_polling_interval' seconds (default: 900).
|
|
#
|
|
# * Per-user daemon
|
|
# - Users for which a fetchmail daemon is to be started must be
|
|
# listed in `fetchmail_users', e.g. fetchmail_users="user1 user2"
|
|
# The `fetchmail_user' (sic!) variable is ignored in this
|
|
# configuration variant.
|
|
# - The config files for the individual users must be located at
|
|
# ${fetchmail_home_prefix}/${user}/${fetchmail_config_name}. The
|
|
# default for `fetchmail_home_prefix' is "/home", and that for
|
|
# `fetchmail_config_name' is ".fetchmailrc".
|
|
# - Note that "${fetchmail_home_prefix}/${user}" must be writable
|
|
# for ${user} since it is used to store the per-user PID files!
|
|
# - There are user-specific versions of `fetchmail_config' and
|
|
# `fetchmail_polling_interval' that can be used to override the
|
|
# defaults, i.e. for the user `user1' there are variables
|
|
# `fetchmail_user1_config' and `fetchmail_user1_polling_interval'
|
|
# - All commands (e.g. start, stop, awaken (see below)) can be either
|
|
# passed to all instances of the daemon (if %%PREFIX%%/etc/rc.d/fetchmail)
|
|
# is run as root), or just to the instance belonging to the respective
|
|
# user.
|
|
#
|
|
# Extra commands:
|
|
#
|
|
# * `awaken': Sends a signal to the daemon(s) to check for new mail
|
|
# immediately
|
|
#
|
|
# Fetchmail configuration:
|
|
#
|
|
# In any case, you will need a working fetchmailrc file. Please consult
|
|
# the man page fetchmail(1), the documentation in %%PREFIX%%/share/doc/fetchmail/
|
|
# and/or the material found at http://fetchmail.berlios.de/.
|
|
|
|
. /etc/rc.subr
|
|
|
|
name=fetchmail
|
|
rcvar=`set_rcvar`
|
|
|
|
command=%%PREFIX%%/bin/${name}
|
|
pidfile=/var/run/fetchmail/${name}.pid
|
|
extra_commands="awaken"
|
|
awaken_cmd="fetchmail_awaken"
|
|
|
|
if [ -f %%PREFIX%%/etc/rc.d/fetchmail ]; then
|
|
fetchmail_script=%%PREFIX%%/etc/rc.d/fetchmail
|
|
elif [ -f %%PREFIX%%/etc/rc.d/fetchmail.sh ]; then
|
|
fetchmail_script=%%PREFIX%%/etc/rc.d/fetchmail.sh
|
|
fi
|
|
|
|
# read settings, set default values
|
|
load_rc_config "$name"
|
|
: ${fetchmail_enable="NO"}
|
|
: ${fetchmail_user="fetchmail"}
|
|
: ${fetchmail_config="%%PREFIX%%/etc/fetchmailrc"}
|
|
: ${fetchmail_polling_interval="900"}
|
|
: ${fetchmail_logging_facility="--syslog"}
|
|
: ${fetchmail_home_prefix="/home"}
|
|
: ${fetchmail_config_name=".fetchmailrc"}
|
|
|
|
# send signal to fetchmail process(es) to check for new mail immediately
|
|
fetchmail_awaken()
|
|
{
|
|
if [ $rc_pid ]; then
|
|
echo "Forcing fetchmail to check mailbox(es)..."
|
|
kill -USR1 $rc_pid
|
|
else
|
|
echo "$name not running? (check $pidfile)"
|
|
fi
|
|
|
|
return
|
|
}
|
|
|
|
if [ -n "$2" ]; then
|
|
# perform action for an instance of fetchmail daemon
|
|
user="$2"
|
|
if [ "x${fetchmail_users}" != "x" -o "x$3" = "xGLOBALCONFIG" ]; then
|
|
if [ "x${fetchmail_users}" != "x" ]; then
|
|
# multiuser setup: determine user specific config and pid file
|
|
eval fetchmail_config="\${fetchmail_${user}_config:-${fetchmail_home_prefix}/${user}}/${fetchmail_config_name}"
|
|
eval pidfile="${fetchmail_home_prefix}/${user}/.fetchmail.pid"
|
|
eval fetchmail_user=$user
|
|
else
|
|
eval pidfile=/var/run/fetchmail/fetchmail.pid
|
|
fi
|
|
required_files=${fetchmail_config}
|
|
eval fetchmail_polling_interval="\${fetchmail_${user}_polling_interval:-${fetchmail_polling_interval}}"
|
|
fetchmail_flags="-f ${fetchmail_config} \
|
|
--pidfile ${pidfile} \
|
|
-d ${fetchmail_polling_interval} \
|
|
${fetchmail_logging_facility}"
|
|
else
|
|
echo "$0: extra argument ignored"
|
|
fi
|
|
else
|
|
uid=`id -u`
|
|
if [ "x${fetchmail_users}" != "x" -a "x$1" != "x" -a "$uid" = "0" ]; then
|
|
# root mode: multiple user profiles are handled by recursive
|
|
# calls of this script
|
|
for user in ${fetchmail_users}; do
|
|
echo "===> fetchmail user: ${user}"
|
|
$fetchmail_script $1 ${user}
|
|
retcode="$?"
|
|
if [ "0${retcode}" -ne 0 ]; then
|
|
failed="${user} (${retcode}) ${failed:-}"
|
|
else
|
|
success="${user} ${success:-}"
|
|
fi
|
|
done
|
|
exit 0
|
|
else
|
|
if [ "x${fetchmail_users}" = "x" ]; then
|
|
# There is only one global configuration file
|
|
globalconfig=GLOBALCONFIG
|
|
fi
|
|
$fetchmail_script $1 `id -u -n` $globalconfig
|
|
retcode="$?"
|
|
if [ "0${retcode}" -ne 0 ]; then
|
|
failed="${user} (${retcode}) ${failed:-}"
|
|
else
|
|
success="${user} ${success:-}"
|
|
fi
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# actually execute the fetchmail program
|
|
run_rc_command "$1"
|