diff --git a/srcpkgs/sqmail/INSTALL b/srcpkgs/sqmail/INSTALL new file mode 100644 index 00000000000..7d2dfaa133b --- /dev/null +++ b/srcpkgs/sqmail/INSTALL @@ -0,0 +1,156 @@ +case "${ACTION}" in +post) + # a shell version of hier.c + set -e + chownmod() { chown $1 $3 && chmod $2 $3; } + + install -d -m0755 -o root -g _sqmail var/qmail + + install -d -m0755 -o root -g _sqmail etc/qmail + install -d -m2755 -o _alias -g _sqmail etc/qmail/alias + install -d -m0755 -o root -g _sqmail etc/qmail/control + install -d -m0755 -o root -g _sqmail etc/qmail/users + install -d -m0700 -o _sqmtls -g _nofiles etc/qmail/ssl + + install -d -m0750 -o _qmailq -g _sqmail var/qmail/queue + install -d -m0700 -o _qmailq -g _sqmail var/qmail/queue/pid + install -d -m0700 -o _qmailq -g _sqmail var/qmail/queue/intd + install -d -m0750 -o _qmailq -g _sqmail var/qmail/queue/todo + install -d -m0700 -o _qmails -g _sqmail var/qmail/queue/bounce + + install -d -m0750 -o _qmailq -g _sqmail var/qmail/queue/mess + install -d -m0700 -o _qmails -g _sqmail var/qmail/queue/info + install -d -m0700 -o _qmails -g _sqmail var/qmail/queue/local + install -d -m0700 -o _qmails -g _sqmail var/qmail/queue/remote + + for i in $(seq 0 22); do + install -d -m0750 -o _qmailq -g _sqmail var/qmail/queue/mess/$i + install -d -m0750 -o _qmailq -g _sqmail var/qmail/queue/todo/$i + install -d -m0700 -o _qmailq -g _sqmail var/qmail/queue/intd/$i + install -d -m0700 -o _qmails -g _sqmail var/qmail/queue/info/$i + install -d -m0700 -o _qmails -g _sqmail var/qmail/queue/local/$i + install -d -m0700 -o _qmails -g _sqmail var/qmail/queue/remote/$i + done + + install -d -m0750 -o _qmailq -g _sqmail var/qmail/queue/lock + [ -f var/qmail/queue/lock/tcpto ] || + dd if=/dev/zero bs=1024 count=1 status=none | + install -m0644 -o _qmailr -g _sqmail /dev/stdin var/qmail/queue/lock/tcpto + [ -f var/qmail/queue/lock/sendmutex ] || + install -m0600 -o _qmails -g _sqmail /dev/null var/qmail/queue/lock/sendmutex + [ -p var/qmail/queue/lock/trigger ] || mkfifo var/qmail/queue/lock/trigger + chownmod _qmails:_sqmail 0622 var/qmail/queue/lock/trigger + + chownmod _qmailq:_sqmail 4711 usr/bin/qmail-queue + chownmod root:_sqmail 0700 usr/bin/qmail-lspawn + chownmod root:_sqmail 0700 usr/bin/qmail-start + chownmod root:_sqmail 0711 usr/bin/qmail-getpw + chownmod root:_sqmail 0711 usr/bin/qmail-local + chownmod root:_sqmail 0711 usr/bin/qmail-remote + chownmod root:_sqmail 0711 usr/bin/qmail-smtpam + chownmod root:_sqmail 0711 usr/bin/qmail-rspawn + chownmod root:_sqmail 0711 usr/bin/qmail-clean + chownmod root:_sqmail 0711 usr/bin/qmail-send + chownmod root:_sqmail 0711 usr/bin/qmail-todo + chownmod root:_sqmail 0711 usr/bin/splogger + chownmod root:_sqmail 0700 usr/bin/qmail-newu + chownmod root:_sqmail 0700 usr/bin/qmail-newmrh + + chownmod root:_sqmail 6711 usr/bin/qmail-authuser + chownmod root:_sqmail 6711 usr/bin/qmail-vmailuser + chownmod root:_sqmail 0711 usr/bin/qmail-badloadertypes + chownmod root:_sqmail 0711 usr/bin/qmail-badmimetypes + chownmod root:_sqmail 0711 usr/bin/qmail-recipients + chownmod root:_sqmail 0711 usr/bin/qmail-mfrules + chownmod root:_sqmail 0755 usr/bin/qmail-mrtg + chownmod root:_sqmail 0755 usr/bin/qmail-mrtg-queue + + chownmod root:_sqmail 0711 usr/bin/qmail-pw2u + chownmod root:_sqmail 0755 usr/bin/qmail-inject + chownmod root:_sqmail 0755 usr/bin/qmail-showctl + chownmod root:_sqmail 0755 usr/bin/qmail-qread + chownmod root:_sqmail 0755 usr/bin/qmail-qstat + chownmod root:_sqmail 0755 usr/bin/qmail-tcpto + chownmod root:_sqmail 0755 usr/bin/qmail-tcpok + chownmod root:_sqmail 0755 usr/bin/qmail-pop3d + chownmod root:_sqmail 0711 usr/bin/qmail-popup + chownmod root:_sqmail 0755 usr/bin/qmail-qmqpc + chownmod root:_sqmail 0755 usr/bin/qmail-qmqpd + chownmod root:_sqmail 0755 usr/bin/qmail-qmtpd + chownmod root:_sqmail 0755 usr/bin/qmail-smtpd + + chownmod root:_sqmail 0755 usr/bin/predate + chownmod root:_sqmail 0755 usr/bin/datemail + chownmod root:_sqmail 0755 usr/bin/mailsubj + chownmod root:_sqmail 0755 usr/bin/sendmail + chownmod root:_sqmail 0755 usr/bin/qreceipt + + chownmod root:_sqmail 0755 usr/bin/qbiff + chownmod root:_sqmail 0755 usr/bin/forward + chownmod root:_sqmail 0755 usr/bin/preline + chownmod root:_sqmail 0755 usr/bin/condredirect + chownmod root:_sqmail 0755 usr/bin/bouncesaying + chownmod root:_sqmail 0755 usr/bin/except + chownmod root:_sqmail 0755 usr/bin/maildirmake.sqmail + chownmod root:_sqmail 0755 usr/bin/maildir2mbox + chownmod root:_sqmail 0755 usr/bin/maildirwatch + + chownmod root:_sqmail 0755 usr/bin/fastforward + chownmod root:_sqmail 0755 usr/bin/printforward + chownmod root:_sqmail 0755 usr/bin/setforward + chownmod root:_sqmail 0755 usr/bin/newaliases + chownmod root:_sqmail 0755 usr/bin/printmaillist + chownmod root:_sqmail 0755 usr/bin/setmaillist + chownmod root:_sqmail 0755 usr/bin/newinclude + + chownmod root:_sqmail 0755 usr/bin/srsforward + chownmod root:_sqmail 0755 usr/bin/srsreverse + + chownmod root:_sqmail 0755 usr/bin/ipmeprint + chownmod root:_sqmail 0755 usr/bin/spfquery + chownmod root:_sqmail 0755 usr/bin/dnscname + chownmod root:_sqmail 0755 usr/bin/dnsfq + chownmod root:_sqmail 0755 usr/bin/dnsip + chownmod root:_sqmail 0755 usr/bin/dnsmxip + chownmod root:_sqmail 0755 usr/bin/dnsptr + chownmod root:_sqmail 0755 usr/bin/dnstxt + chownmod root:_sqmail 0755 usr/bin/hostname + + chownmod root:_sqmail 0755 usr/bin/columnt + chownmod root:_sqmail 0755 usr/bin/ddist + chownmod root:_sqmail 0755 usr/bin/deferrals + chownmod root:_sqmail 0755 usr/bin/failures + chownmod root:_sqmail 0755 usr/bin/matchup + chownmod root:_sqmail 0755 usr/bin/recipients + chownmod root:_sqmail 0755 usr/bin/rhosts + chownmod root:_sqmail 0755 usr/bin/rxdelay + chownmod root:_sqmail 0755 usr/bin/senders + chownmod root:_sqmail 0755 usr/bin/successes + chownmod root:_sqmail 0755 usr/bin/suids + chownmod root:_sqmail 0755 usr/bin/tai64nfrac + chownmod root:_sqmail 0755 usr/bin/xqp + chownmod root:_sqmail 0755 usr/bin/xrecipient + chownmod root:_sqmail 0755 usr/bin/xsender + chownmod root:_sqmail 0755 usr/bin/zddist + chownmod root:_sqmail 0755 usr/bin/zdeferrals + chownmod root:_sqmail 0755 usr/bin/zfailures + chownmod root:_sqmail 0755 usr/bin/zfailures + chownmod root:_sqmail 0755 usr/bin/zoverall + chownmod root:_sqmail 0755 usr/bin/zrecipients + chownmod root:_sqmail 0755 usr/bin/zrhosts + chownmod root:_sqmail 0755 usr/bin/zrxdelay + chownmod root:_sqmail 0755 usr/bin/zsenders + chownmod root:_sqmail 0755 usr/bin/zsendmail + chownmod root:_sqmail 0755 usr/bin/zsuccesses + chownmod root:_sqmail 0755 usr/bin/zsuids + + ln -sf ../../usr/bin var/qmail/bin + ln -sf ../../etc/qmail/alias var/qmail/alias + ln -sf ../../etc/qmail/control var/qmail/control + ln -sf ../../etc/qmail/users var/qmail/users + ln -sf ../../etc/qmail/ssl var/qmail/ssl + ln -sf ../../etc/sv var/qmail/svc + chgrp -h _sqmail var/qmail/bin var/qmail/alias var/qmail/control \ + var/qmail/users var/qmail/ssl var/qmail/svc + ;; +esac diff --git a/srcpkgs/sqmail/files/README.voidlinux b/srcpkgs/sqmail/files/README.voidlinux new file mode 100644 index 00000000000..ff7b5cac3c8 --- /dev/null +++ b/srcpkgs/sqmail/files/README.voidlinux @@ -0,0 +1,78 @@ +# Notes on Void Linux packaging for s/qmail + +In order to integrate into a Void Linux system, s/qmail is packaged in +a modified way compared to upstream. + + +1) Sole MTA + +As the other MTA on Void, sqmail can not be installed in parallel to +other providers of smtp-server, and in particular, not custom (manual) +installations of qmail. + + +2) Different UID/GID and names + +UID/GID above 1000 are reserved for the userland on Void. +sqmail therefore runs on a different set than qmail/sqmail defaults. + +Also, user and group names for system services are prefixed with a _. + + + 798:_nofiles:sqmail group for auxiliar files: + 799:_sqmail:sqmail group for binary files: + # + 790:_alias:sqmail Alias user:_nofiles:alias + 791:_qmaild:sqmail Daemon user:_nofiles + 792:_qmaill:sqmail Log user:_nofiles + 793:_qmailp:sqmail Password user:_nofiles + 794:_qmailq:sqmail Queue user:_sqmail:queue + 795:_qmailr:sqmail Remote user:_sqmail + 796:_qmails:sqmail Send user:_sqmail + 797:_sqmtls:sqmail TLS user:_nofiles:ssl + +This should not result in problems unless you are trying to integrate +an existing qmail queue. + + +3) Different directory structure: + +In order to keep /var possibly noexec, binaries reside in /usr/bin. +Configuration resides in /etc/qmail. + +Symlinks provide support for legacy paths: + + drwxr-xr-x root _sqmail /var/qmail/ + drwxr-sr-x _alias _sqmail /var/qmail/alias -> ../../etc/qmail/alias + drwxr-xr-x root root /var/qmail/bin -> ../../usr/bin + drwxr-xr-x root _sqmail /var/qmail/control -> ../../etc/qmail/control + drwxr-x--- _qmailq _sqmail /var/qmail/queue/ + drwx------ _sqmtls _nofiles /var/qmail/ssl -> ../../etc/qmail/ssl + drwxr-xr-x root root /var/qmail/svc -> ../../etc/sv + drwxr-xr-x root _sqmail /var/qmail/users -> ../../etc/qmail/users + + +4) Services + +Services are in /etc/sv and need to be linked to /var/service as usual. +We provide four default services: + + qmail-send The main qmail service + qmail-smtpd SMTP daemon, port 25 (STARTTLS possible) + qmail-smtpsd SMTPS daemon, port 465 (AUTH required, TLS) + qmail-smtpsub SMTP for submission, port 587 (AUTH & STARTTLS required) + +For TLS support you need to create a /var/qmail/ssl/ssl.env, +see the included example. + + +5) Default configuration + +There is no default sqmail configuration. You are expected to know +how to configure this. + + +6) Miscellaneous + +maildirmake is installed as maildirmake.sqmail in order to not +conflict with maildrop. diff --git a/srcpkgs/sqmail/files/qmail-send/log/run b/srcpkgs/sqmail/files/qmail-send/log/run new file mode 100755 index 00000000000..029152819b0 --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-send/log/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec vlogger -p mail.notice diff --git a/srcpkgs/sqmail/files/qmail-send/run b/srcpkgs/sqmail/files/qmail-send/run new file mode 100755 index 00000000000..f84de8c74fb --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-send/run @@ -0,0 +1,7 @@ +#!/bin/sh +if [ -f /var/qmail/control/defaultdelivery ]; then + defaultdelivery=$(cat /var/qmail/control/defaultdelivery) +else + defaultdelivery=./Maildir/ +fi +exec env - PATH="/var/qmail/bin:$PATH" qmail-start $defaultdelivery diff --git a/srcpkgs/sqmail/files/qmail-smtpd/log/run b/srcpkgs/sqmail/files/qmail-smtpd/log/run new file mode 100755 index 00000000000..029152819b0 --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-smtpd/log/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec vlogger -p mail.notice diff --git a/srcpkgs/sqmail/files/qmail-smtpd/run b/srcpkgs/sqmail/files/qmail-smtpd/run new file mode 100755 index 00000000000..a4f8da65e85 --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-smtpd/run @@ -0,0 +1,21 @@ +#!/bin/sh +QMAILU=$(id -u _qmaild) +QMAILG=$(id -g _qmaild) +HOSTNAME=$(hostname) +export SPF="1" +if [ -f /var/qmail/ssl/ssl.env ]; then + export UCSPITLS="" + . /var/qmail/ssl/ssl.env + exec env PATH="/var/qmail/bin:$PATH" \ + sslserver -seVn -Rp -l $HOSTNAME \ + -Xx /var/qmail/control/rules.smtpd.cdb \ + -u $QMAILU -g $QMAILG :: 25 \ + qmail-smtpd 2>&1 +else + exec env PATH="/var/qmail/bin:$PATH" \ + tcpserver -p -v \ + -Xx /var/qmail/control/rules.smtpd.cdb \ + -u $QMAILU -g $QMAILG :: 25 \ + qmail-smtpd 2>&1 +fi + diff --git a/srcpkgs/sqmail/files/qmail-smtpsd/log/run b/srcpkgs/sqmail/files/qmail-smtpsd/log/run new file mode 100755 index 00000000000..029152819b0 --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-smtpsd/log/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec vlogger -p mail.notice diff --git a/srcpkgs/sqmail/files/qmail-smtpsd/run b/srcpkgs/sqmail/files/qmail-smtpsd/run new file mode 100755 index 00000000000..02d77018df4 --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-smtpsd/run @@ -0,0 +1,12 @@ +#!/bin/sh +QMAILU=$(id -u _qmaild) +QMAILG=$(id -g _qmaild) +HOSTNAME=$(hostname) +export SMTPAUTH="!" +. /var/qmail/ssl/ssl.env +exec env PATH="/var/qmail/bin:/usr/local/bin:$PATH" \ + sslserver -seV -Rp -l $HOSTNAME \ + -Xx /var/qmail/control/rules.smtpd.cdb \ + -u $QMAILU -g $QMAILG :: 465 \ + qmail-smtpd qmail-authuser true 2>&1 + diff --git a/srcpkgs/sqmail/files/qmail-smtpsub/log/run b/srcpkgs/sqmail/files/qmail-smtpsub/log/run new file mode 100755 index 00000000000..029152819b0 --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-smtpsub/log/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec vlogger -p mail.notice diff --git a/srcpkgs/sqmail/files/qmail-smtpsub/run b/srcpkgs/sqmail/files/qmail-smtpsub/run new file mode 100755 index 00000000000..4a75b012163 --- /dev/null +++ b/srcpkgs/sqmail/files/qmail-smtpsub/run @@ -0,0 +1,11 @@ +#!/bin/sh +QMAILU=$(id -u _qmaild) +QMAILG=$(id -g _qmaild) +HOSTNAME=$(hostname) +export SMTPAUTH="!" +export UCSPITLS="!" +. /var/qmail/ssl/ssl.env +exec env PATH="/var/qmail/bin:/usr/local/bin:$PATH" \ + sslserver -seVn -Rp -l $HOSTNAME \ + -u $QMAILU -g $QMAILG :: 587 \ + qmail-smtpd qmail-authuser true 2>&1 diff --git a/srcpkgs/sqmail/files/ssl.env b/srcpkgs/sqmail/files/ssl.env new file mode 100644 index 00000000000..1b7c3dc4ce9 --- /dev/null +++ b/srcpkgs/sqmail/files/ssl.env @@ -0,0 +1,8 @@ +export SSL_USER=_sqmtls +export SSL_GROUP=_nofiles +SSL_DIR=/var/qmail/ssl +export SSL_CHROOT=$SSL_DIR + +export CERTFILE=$SSL_DIR/server.pem +export KEYFILE=$SSL_DIR/server-key.pem +export DHFILE=$SSL_DIR/dh1024.pem diff --git a/srcpkgs/sqmail/patches/autouid.patch b/srcpkgs/sqmail/patches/autouid.patch new file mode 100644 index 00000000000..03025c5ca5e --- /dev/null +++ b/srcpkgs/sqmail/patches/autouid.patch @@ -0,0 +1,25 @@ +We generate the file auto_uids.c ourselves. + +--- mail/sqmail/sqmail-4.0.03/src/Makefile.orig ++++ mail/sqmail/sqmail-4.0.03/src/Makefile +@@ -95,20 +95,6 @@ + compile auto_split.c + ./compile auto_split.c + +-auto_uids.c: \ +-auto-uid auto-gid ../conf-users ../conf-groups +- ( ./auto-uid auto_uida `head -1 ../conf-users` \ +- &&./auto-uid auto_uidd `head -2 ../conf-users | tail -1` \ +- &&./auto-uid auto_uidl `head -3 ../conf-users | tail -1` \ +- &&./auto-uid auto_uido `head -4 ../conf-users | tail -1` \ +- &&./auto-uid auto_uidp `head -5 ../conf-users | tail -1` \ +- &&./auto-uid auto_uidq `head -6 ../conf-users | tail -1` \ +- &&./auto-uid auto_uidr `head -7 ../conf-users | tail -1` \ +- &&./auto-uid auto_uids `head -8 ../conf-users | tail -1` \ +- &&./auto-gid auto_gidq `head -1 ../conf-groups` \ +- &&./auto-gid auto_gidn `head -2 ../conf-groups | tail -1` \ +- ) > auto_uids.c.tmp && mv auto_uids.c.tmp auto_uids.c +- + auto_uids.o: \ + compile auto_uids.c + ./compile auto_uids.c diff --git a/srcpkgs/sqmail/template b/srcpkgs/sqmail/template new file mode 100644 index 00000000000..4f442ca4d5d --- /dev/null +++ b/srcpkgs/sqmail/template @@ -0,0 +1,127 @@ +# Template file for 'sqmail' +pkgname=sqmail +version=4.0.03 +revision=1 +create_wrksrc=yes +build_wrksrc="mail/${pkgname}/${pkgname}-${version}/src" +makedepends="fehQlibs libidn2-devel ucspi-ssl-devel" +depends="ucspi-ssl ucspi-tcp6" +short_desc="Fast, secure, and reliable email transmission (s/qmail)" +maintainer="Leah Neukirchen " +license="Public Domain" +homepage="https://www.fehcom.de/sqmail/sqmail.html" +distfiles="https://www.fehcom.de/sqmail/sqmail-${version}.tgz" +checksum=fec96b51aee3506b6c068b0040304eb530f6926f719d9b917f07fac53f5e12bc +nocross="custom build system" +provides="smtp-server-0_1" +replaces="smtp-server>=0" + +system_groups="_nofiles:798 _sqmail:799" + +system_accounts+=" _alias:790" +_alias_descr="sqmail Alias user" +_alias_pgroup="_nofiles" +_alias_homedir="/var/qmail/alias" + +system_accounts+=" _qmaild:791" +_qmaild_descr="sqmail Daemon user" +_qmaild_pgroup="_nofiles" +_qmaild_homedir="/var/qmail/" + +system_accounts+=" _qmaill:792" +_qmaill_descr="sqmail Log user" +_qmaill_pgroup="_nofiles" +_qmaill_homedir="/var/qmail/" + +system_accounts+=" _qmailp:793" +_qmailp_descr="sqmail Password user" +_qmailp_pgroup="_nofiles" +_qmailp_homedir="/var/qmail/" + +system_accounts+=" _qmailq:794" +_qmailq_descr="sqmail Queue user" +_qmailq_pgroup="_sqmail" +_qmailq_homedir="/var/qmail/queue" + +system_accounts+=" _qmailr:795" +_qmailr_descr="sqmail Remote user" +_qmailr_pgroup="_sqmail" +_qmailr_homedir="/var/qmail/" + +system_accounts+=" _qmails:796" +_qmails_descr="sqmail Send user" +_qmails_pgroup="_sqmail" +_qmails_homedir="/var/qmail/" + +system_accounts+=" _sqmtls:797" +_sqmtls_descr="sqmail TLS user" +_sqmtls_pgroup="_nofiles" +_sqmtls_homedir="/var/qmail/ssl" + +do_configure() { + pwd >home + echo "${CC} ${CFLAGS} -DSMTPUTF8 -DIDN2" >../conf-cc + echo "${CC} ${LDFLAGS}" >../conf-ld + echo "/var/qmail" >../conf-home + + printf '%s\n' _sqmail _nofiles >../conf-groups + printf '%s\n' _alias _qmaild _qmaill root _qmailp _qmailq _qmailr _qmails >../conf-users + + cat >../conf-ids <auto_uids.c <socket.lib + echo -lssl -lcrypto -ldl >ssl.lib +} + +do_build() { + ln -sf /usr/include/ucspissl.h . + ln -sf /usr/lib/ucspissl.a . + make +} + +do_install() { + for f in $(cat $(printf '%s\n' it-*=d |grep -v setup)) predate datemail; do + vbin $f + done + vsconf config + vsconf config-fast + for f in ../man/*.?; do + vman $f + done + vsv qmail-send + vsv qmail-smtpd + vsv qmail-smtpsd + vsv qmail-smtpsub + vlicense ../doc/LICENSE + mv ${DESTDIR}/usr/bin/maildirmake ${DESTDIR}/usr/bin/maildirmake.sqmail + mv ${DESTDIR}/usr/share/man/man1/maildirmake.1 ${DESTDIR}/usr/share/man/man1/maildirmake.sqmail.1 + ln -sf sendmail ${DESTDIR}/usr/bin/mailq + vdoc ${FILESDIR}/README.voidlinux + vsconf ${FILESDIR}/ssl.env +}