mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-20 00:21:35 +00:00
145c527f0c
PR: 258207 Approved by: chalpin cs wisc edu (maintainer)
192 lines
6.6 KiB
Bash
192 lines
6.6 KiB
Bash
#!/bin/sh
|
|
|
|
# PROVIDE: fetchmail
|
|
# REQUIRE: LOGIN mail
|
|
# KEYWORD: shutdown
|
|
|
|
#
|
|
# Add the following lines to /etc/rc.conf to fetchmail in daemon
|
|
# mode.
|
|
#
|
|
# fetchmail_enable="YES"
|
|
#
|
|
# There are two variants:
|
|
#
|
|
# Note that there are two variables with only very slightly
|
|
# different names, fetchmail_user and fetchmail_users
|
|
# (mind the trailing plural-'s').
|
|
#
|
|
# * Single system-wide fetchmail daemon:
|
|
# - This mode applies if the 'fetchmail_users' variable
|
|
# is unset or empty.
|
|
# - 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' and access mode
|
|
# may not be more than 700.
|
|
# - The fetchmail daemon awakes to fetch mail every
|
|
# 'fetchmail_polling_interval' seconds (default: 900).
|
|
# Note that a "set daemon 123" in the file $fetchmail_config
|
|
# takes precedence. The rc.conf value is only a fall-back.
|
|
# - The fetchmail logs will go to the syslog by default, but
|
|
# you can override it to a file by setting
|
|
# 'fetchmail_logging_facility=--logfile=/path/to/logfile'
|
|
# in the rcfile or set logfile /path/to/logfile in the $fetchmail_config
|
|
# file. The log-file must pre-exist and be writable by the
|
|
# 'fetchmail_user'.
|
|
#
|
|
# * 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 in
|
|
# the fetchmail_user's home directory as ${fetchmail_config_name}. The
|
|
# default for 'fetchmail_config_name' is ".fetchmailrc".
|
|
# - There are user-specific versions of 'fetchmail_config',
|
|
# 'fetchmail_logging_facility' and 'fetchmail_polling_interval' as well as
|
|
# the usual rc.subr variables 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', or fetchmail_user1_env to
|
|
# set user-daemon specific environment variables.
|
|
# Note that a "set daemon 123" in the config file (.fetchmailrc
|
|
# by default) takes precedence. The rc.conf value is only a fall-back.
|
|
# - 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 <https://www.fetchmail.info/> or
|
|
# <https://fetchmail.sourceforge.io/>.
|
|
|
|
. /etc/rc.subr
|
|
|
|
# prevent reading passwords from the boot console
|
|
exec < /dev/null
|
|
|
|
name=fetchmail
|
|
# note we do not override name for instances, because we want to have a fallback
|
|
# to global defaults. Check for PULLVARS below.
|
|
rcvar=fetchmail_enable
|
|
|
|
command=%%PREFIX%%/bin/${name}
|
|
pidfile=/var/run/fetchmail/${name}.pid
|
|
extra_commands="awaken"
|
|
awaken_cmd="fetchmail_awaken"
|
|
|
|
fetchmail_script=%%PREFIX%%/etc/rc.d/$name
|
|
|
|
# read settings, set default values
|
|
load_rc_config "$name"
|
|
: ${fetchmail_enable="NO"}
|
|
: ${fetchmail_flags=""}
|
|
: ${fetchmail_user="fetchmail"}
|
|
: ${fetchmail_config="%%PREFIX%%/etc/fetchmailrc"}
|
|
: ${fetchmail_polling_interval="900"}
|
|
: ${fetchmail_logging_facility="--syslog"}
|
|
: ${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
|
|
}
|
|
|
|
# query a value from the fetchmail config file, value specified in first argument
|
|
fetchmail_dump_config()
|
|
{
|
|
su -m ${fetchmail_user} -c "/bin/sh -c '${command} -f ${fetchmail_config} --configdump'" | fgrep $1 | cut -d: -f2
|
|
}
|
|
|
|
# arguments:
|
|
# ACTION - perform ACTION for the one global daemon
|
|
# ACTION USER GLOBALCONFIG - ditto, inside the recursive call
|
|
# ACTION USER - perform ACTION for the USER-specific daemon, inside recursive call
|
|
|
|
# if this is the global or 'umbrella' run
|
|
if [ -z "$2" ] ; then
|
|
if [ "x${fetchmail_users}" != "x" -a "x$1" != "x" -a "$(id -u)" = "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:-}"
|
|
fi
|
|
done
|
|
|
|
# if we had any failures, exit with an error
|
|
if [ -n "${failed}" ] ; then
|
|
exit 1
|
|
fi
|
|
|
|
# otherwise, exit success
|
|
exit 0
|
|
fi
|
|
else
|
|
fetchmail_user="$2"
|
|
fi
|
|
|
|
# perform action for an instance of fetchmail daemon
|
|
if [ "x${fetchmail_users}" != "x" ]; then
|
|
# multiuser setup: determine user specific config and pid file
|
|
fetchmail_home="$(getent passwd ${fetchmail_user} | cut -f6 -d:)"
|
|
fetchmail_home="${fetchmail_home%/}"
|
|
fetchmail_config="${fetchmail_home}/${fetchmail_config_name}"
|
|
pidfile="${fetchmail_home}/.fetchmail.pid"
|
|
# PULLVARS - pull user specific variables into scope if existing
|
|
# else use global defaults
|
|
for i in chdir chroot env env_file fib flags nice \
|
|
limits login_class oomprotect program user group groups prepend \
|
|
logging_facility polling_interval
|
|
do
|
|
uvarname=fetchmail_${fetchmail_user}_${i}
|
|
eval fetchmail_${i}="\${${uvarname}-\${fetchmail_${i}}}"
|
|
done
|
|
else
|
|
fetchmail_home=/var/run/fetchmail
|
|
fi
|
|
required_files=${fetchmail_config}
|
|
|
|
# set up environment
|
|
export FETCHMAILHOME=${fetchmail_home}
|
|
export FETCHMAILUSER=${fetchmail_user}
|
|
|
|
# add early command line arguments
|
|
# if logfile set in config file, do not override with rc.conf default (note logfile overrides syslog)
|
|
_logfile="$(fetchmail_dump_config logfile)"
|
|
if [ _"${_logfile}" != _"None," ] ; then
|
|
fetchmail_logging_facility=""
|
|
fi
|
|
|
|
fetchmail_flags="${fetchmail_flags} -f ${fetchmail_config} --pidfile ${pidfile} ${fetchmail_logging_facility}"
|
|
|
|
# add late command line arguments
|
|
# if no polling interval in config file, use value from rc.conf
|
|
if [ "$(fetchmail_dump_config poll_interval)" = "0," ] ; then
|
|
fetchmail_flags="${fetchmail_flags} -d ${fetchmail_polling_interval}"
|
|
fi
|
|
|
|
# actually execute the fetchmail program
|
|
run_rc_command "$1"
|