summaryrefslogtreecommitdiff
path: root/eclass/qmail.eclass
diff options
context:
space:
mode:
Diffstat (limited to 'eclass/qmail.eclass')
-rw-r--r--eclass/qmail.eclass168
1 files changed, 64 insertions, 104 deletions
diff --git a/eclass/qmail.eclass b/eclass/qmail.eclass
index 76c612f026f2..33157b7e7871 100644
--- a/eclass/qmail.eclass
+++ b/eclass/qmail.eclass
@@ -4,11 +4,11 @@
# @ECLASS: qmail.eclass
# @MAINTAINER:
# Rolf Eike Beer <eike@sf-mail.de>
-# @SUPPORTED_EAPIS: 6 7
+# @SUPPORTED_EAPIS: 6 7 8
# @BLURB: common qmail functions
case ${EAPI:-0} in
- [67]) ;;
+ [678]) ;;
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac
@@ -29,52 +29,36 @@ GENQMAIL_S="${WORKDIR}"/genqmail-${GENQMAIL_PV}
QMAIL_SPP_F=qmail-spp-${QMAIL_SPP_PV}.tar.gz
QMAIL_SPP_S="${WORKDIR}"/qmail-spp-${QMAIL_SPP_PV}
-# @FUNCTION: primes
-# @USAGE: <min> <max>
+# @FUNCTION: is_prime
+# @USAGE: <number>
# @DESCRIPTION:
-# Prints a list of primes between min and max inclusive
-# Note: this functions gets very slow when used with large numbers.
-primes() {
- local min=${1} max=${2}
- local result= primelist=2 i p
+# Checks wether a number is a valid prime number for queue split
+is_prime() {
+ local number=${1} i
- [[ ${min} -le 2 ]] && result="${result} 2"
+ if [[ ${number} -lt 7 ]]; then
+ # too small
+ return 1
+ fi
- for ((i = 3; i <= max; i += 2))
+ if [[ $[number % 2] == 0 ]]; then
+ return 1
+ fi
+
+ # let i run up to the square root of number
+ for ((i = 3; i * i <= number; i += 2))
do
- for p in ${primelist}
- do
- [[ $[i % p] == 0 || $[p * p] -gt ${i} ]] && \
- break
- done
- if [[ $[i % p] != 0 ]]
- then
- primelist="${primelist} ${i}"
- [[ ${i} -ge ${min} ]] && \
- result="${result} ${i}"
+ if [[ $[number % i ] == 0 ]]; then
+ return 1
fi
done
- echo ${result}
-}
-
-# @FUNCTION: is_prima
-# @USAGE: <number>
-# @DESCRIPTION:
-# Checks wether a number is a prime number
-is_prime() {
- local number=${1} i
- for i in $(primes ${number} ${number})
- do
- [[ ${i} == ${number} ]] && return 0
- done
- return 1
+ return 0
}
dospp() {
- insinto "${QMAIL_HOME}"/plugins/
- insopts -o root -g "${GROUP_ROOT}" -m 0755
- newins $1 ${2:-$(basename $1)}
+ exeinto "${QMAIL_HOME}"/plugins/
+ newexe ${1} ${2:-$(basename ${1})}
}
# @FUNCTION: dosupervise
@@ -86,17 +70,14 @@ dosupervise() {
local runfile=${2:-${service}} logfile=${3:-${service}-log}
[[ -z "${service}" ]] && die "no service given"
- insopts -o root -g "${GROUP_ROOT}" -m 0755
- diropts -o root -g "${GROUP_ROOT}" -m 0755
-
dodir ${SUPERVISE_DIR}/${service}{,/log}
fperms +t ${SUPERVISE_DIR}/${service}{,/log}
- insinto ${SUPERVISE_DIR}/${service}
- newins ${runfile} run
+ exeinto ${SUPERVISE_DIR}/${service}
+ newexe ${runfile} run
- insinto ${SUPERVISE_DIR}/${service}/log
- newins ${logfile} run
+ exeinto ${SUPERVISE_DIR}/${service}/log
+ newexe ${logfile} run
}
# @FUNCTION: qmail_set_cc
@@ -149,41 +130,45 @@ qmail_spp_src_compile() {
}
qmail_base_install() {
+ # subshell to not leak the install options
+ (
einfo "Setting up basic directory hierarchy"
- diropts -o root -g qmail -m 755
- keepdir "${QMAIL_HOME}"/{,bin,control}
- keepdir "${QMAIL_HOME}"/users
- diropts -o alias -g qmail -m 755
+ diropts -o root -g qmail
+ dodir "${QMAIL_HOME}"/bin
+ keepdir "${QMAIL_HOME}"/{control,users}
+ diropts -o alias -g qmail
keepdir "${QMAIL_HOME}"/alias
einfo "Adding env.d entry for qmail"
doenvd "${GENQMAIL_S}"/conf/99qmail
einfo "Installing all qmail software"
- insinto "${QMAIL_HOME}"/bin
+ exeinto "${QMAIL_HOME}"/bin
- insopts -o root -g qmail -m 755
- doins bouncesaying condredirect config-fast datemail except forward maildir2mbox \
+ exeopts -o root -g qmail
+ doexe bouncesaying condredirect config-fast datemail except forward maildir2mbox \
maildirmake mailsubj predate preline qbiff \
qmail-{inject,qmqpc,qmqpd,qmtpd,qread,qstat,smtpd,tcpok,tcpto,showctl} \
qreceipt sendmail tcp-env
# obsolete tools, install if they are still present
for i in elq maildirwatch pinq qail qsmhook; do
- [[ -x ${i} ]] && doins ${i}
+ [[ -x ${i} ]] && doexe ${i}
done
- use pop3 && doins qmail-pop3d
+ use pop3 && doexe qmail-pop3d
- insopts -o root -g qmail -m 711
- doins qmail-{clean,getpw,local,pw2u,remote,rspawn,send} splogger
- use pop3 && doins qmail-popup
+ exeopts -o root -g qmail -m 711
+ doexe qmail-{clean,getpw,local,pw2u,remote,rspawn,send} splogger
+ use pop3 && doexe qmail-popup
- insopts -o root -g qmail -m 700
- doins qmail-{lspawn,newmrh,newu,start}
+ exeopts -o root -g qmail -m 700
+ doexe qmail-{lspawn,newmrh,newu,start}
- insopts -o qmailq -g qmail -m 4711
- doins qmail-queue
+ exeopts -o qmailq -g qmail -m 4711
+ doexe qmail-queue
+
+ )
declare -F qmail_base_install_hook >/dev/null && \
qmail_base_install_hook
@@ -192,12 +177,10 @@ qmail_base_install() {
qmail_config_install() {
einfo "Installing stock configuration files"
insinto "${QMAIL_HOME}"/control
- insopts -o root -g "${GROUP_ROOT}" -m 644
doins "${GENQMAIL_S}"/control/{conf-*,defaultdelivery}
einfo "Installing configuration sanity checker and launcher"
insinto "${QMAIL_HOME}"/bin
- insopts -o root -g "${GROUP_ROOT}" -m 644
doins "${GENQMAIL_S}"/control/qmail-config-system
declare -F qmail_config_install_hook >/dev/null && \
@@ -224,7 +207,6 @@ qmail_man_install() {
qmail_sendmail_install() {
einfo "Installing sendmail replacement"
- diropts -m 755
dodir /usr/sbin /usr/lib
dosym "${QMAIL_HOME}"/bin/sendmail /usr/sbin/sendmail
@@ -235,12 +217,21 @@ qmail_sendmail_install() {
}
qmail_maildir_install() {
+ # subshell to not leak the install options
+ (
# use the correct maildirmake
# the courier-imap one has some extensions that are nicer
MAILDIRMAKE="${D}${QMAIL_HOME}/bin/maildirmake"
[[ -e /usr/bin/maildirmake ]] && \
MAILDIRMAKE="/usr/bin/maildirmake"
+ einfo "Setting up default maildirs in the account skeleton"
+ diropts -m 700
+ insinto /etc/skel
+ newins "${GENQMAIL_S}"/control/defaultdelivery .qmail.example
+ "${MAILDIRMAKE}" "${D}"/etc/skel/.maildir
+ keepdir /etc/skel/.maildir/{cur,new,tmp}
+
einfo "Setting up the default aliases"
diropts -o alias -g qmail -m 700
"${MAILDIRMAKE}" "${D}${QMAIL_HOME}"/alias/.maildir
@@ -253,13 +244,7 @@ qmail_maildir_install() {
fi
done
- einfo "Setting up default maildirs in the account skeleton"
- diropts -o root -g "${GROUP_ROOT}" -m 755
- insinto /etc/skel
- insopts -o root -g "${GROUP_ROOT}" -m 644
- newins "${GENQMAIL_S}"/control/defaultdelivery .qmail.sample
- "${MAILDIRMAKE}" "${D}"/etc/skel/.maildir
- keepdir /etc/skel/.maildir/{cur,new,tmp}
+ )
declare -F qmail_maildir_install_hook >/dev/null && \
qmail_maildir_install_hook
@@ -268,7 +253,6 @@ qmail_maildir_install() {
qmail_tcprules_install() {
dodir "${TCPRULES_DIR}"
insinto "${TCPRULES_DIR}"
- insopts -o root -g "${GROUP_ROOT}" -m 0644
doins "${GENQMAIL_S}"/tcprules/Makefile.qmail
doins "${GENQMAIL_S}"/tcprules/tcp.qmail-*
use ssl && use pop3 || rm -f "${D}${TCPRULES_DIR}"/tcp.qmail-pop3sd
@@ -276,8 +260,11 @@ qmail_tcprules_install() {
qmail_supervise_install_one() {
dosupervise ${1}
- diropts -o qmaill -g "${GROUP_ROOT}" -m 755
+ # subshell to not leak the install options
+ (
+ diropts -o qmaill -g root
keepdir /var/log/qmail/${1}
+ )
}
qmail_supervise_install() {
@@ -301,7 +288,6 @@ qmail_supervise_install() {
qmail_spp_install() {
einfo "Installing qmail-spp configuration files"
insinto "${QMAIL_HOME}"/control/
- insopts -o root -g "${GROUP_ROOT}" -m 0644
doins "${GENQMAIL_S}"/spp/smtpplugins
einfo "Installing qmail-spp plugins"
@@ -321,17 +307,14 @@ qmail_ssl_install() {
einfo "Installing SSL Certificate creation script"
insinto "${QMAIL_HOME}"/control
- insopts -o root -g "${GROUP_ROOT}" -m 0644
doins "${GENQMAIL_S}"/ssl/servercert.cnf
- insinto "${QMAIL_HOME}"/bin
- insopts -o root -g "${GROUP_ROOT}" -m 0755
- doins "${GENQMAIL_S}"/ssl/mkservercert
+ exeinto "${QMAIL_HOME}"/bin
+ doexe "${GENQMAIL_S}"/ssl/mkservercert
einfo "Installing RSA key generation cronjob"
- insinto /etc/${CRON_FOLDER}
- insopts -o root -g "${GROUP_ROOT}" -m 0755
- doins "${GENQMAIL_S}"/ssl/qmail-genrsacert.sh
+ exeinto /etc/${CRON_FOLDER}
+ doexe "${GENQMAIL_S}"/ssl/qmail-genrsacert.sh
keepdir "${QMAIL_HOME}"/control/tlshosts
@@ -340,7 +323,6 @@ qmail_ssl_install() {
}
qmail_src_install() {
- export GROUP_ROOT="$(id -gn root)"
qmail_base_install
qmail_config_install
qmail_man_install
@@ -385,28 +367,6 @@ qmail_rootmail_fixup() {
chown -R alias:qmail "${ROOT}${QMAIL_HOME}"/alias/.maildir 2>/dev/null
}
-qmail_tcprules_fixup() {
- mkdir -p "${TCPRULES_DIR}"
- local POP_FILES=
- use pop3 && POP_FILES="pop3 pop3.cdb"
- for f in {smtp,qmtp,qmqp}{,.cdb} ${POP_FILES}; do
- old="/etc/tcp.${f}"
- new="${TCPRULES_DIR}/tcp.qmail-${f}"
- fail=0
- if [[ -f "${old}" && ! -f "${new}" ]]; then
- einfo "Moving ${old} to ${new}"
- cp "${old}" "${new}" || fail=1
- else
- fail=1
- fi
- if [[ "${fail}" = 1 && -f "${old}" ]]; then
- eerror "Error moving ${old} to ${new}, be sure to check the"
- eerror "configuration! You may have already moved the files,"
- eerror "in which case you can delete ${old}"
- fi
- done
-}
-
qmail_tcprules_build() {
for f in tcp.qmail-{smtp,qmtp,qmqp,pop3,pop3s}; do
# please note that we don't check if it exists