--- /dev/null
+addresses.0
+auto-ccld.sh
+auto-gid
+auto-int
+auto-int8
+auto-str
+auto-uid
+auto_break.c
+auto_patrn.c
+auto_qmail.c
+auto_spawn.c
+auto_split.c
+auto_uids.c
+auto_usera.c
+binm1
+binm1+df
+binm2
+binm2+df
+binm3
+binm3+df
+bouncesaying
+bouncesaying.0
+build
+chkshsgr
+chkspawn
+compile
+condredirect
+condredirect.0
+config
+config-fast
+datemail
+direntry.h
+dns.lib
+dnscname
+dnsfq
+dnsip
+dnsmxip
+dnsptr
+dot-qmail.0
+dot-qmail.5
+elq
+envelopes.0
+except
+except.0
+find-systype
+forgeries.0
+fork.h
+forward
+forward.0
+hasflock.h
+hasmkffo.h
+hasnpbg1.h
+hassalen.h
+hassgact.h
+hassgprm.h
+hasshsgr.h
+haswaitp.h
+home
+home+df
+hostname
+idedit
+install
+install-big
+instcheck
+ipmeprint
+load
+maildir.0
+maildir2mbox
+maildir2mbox.0
+maildirmake
+maildirmake.0
+maildirwatch
+maildirwatch.0
+mailsubj
+mailsubj.0
+make-compile
+make-load
+make-makelib
+makelib
+mbox.0
+pinq
+predate
+preline
+preline.0
+proc
+proc+df
+qail
+qbiff
+qbiff.0
+qmail-clean
+qmail-clean.0
+qmail-command.0
+qmail-control.0
+qmail-control.5
+qmail-getpw
+qmail-getpw.0
+qmail-getpw.8
+qmail-header.0
+qmail-inject
+qmail-inject.0
+qmail-limits.0
+qmail-limits.7
+qmail-local
+qmail-local.0
+qmail-log.0
+qmail-lspawn
+qmail-lspawn.0
+qmail-newmrh
+qmail-newmrh.0
+qmail-newmrh.8
+qmail-newu
+qmail-newu.0
+qmail-newu.8
+qmail-pop3d
+qmail-pop3d.0
+qmail-popup
+qmail-popup.0
+qmail-pw2u
+qmail-pw2u.0
+qmail-pw2u.8
+qmail-qmqpc
+qmail-qmqpc.0
+qmail-qmqpd
+qmail-qmqpd.0
+qmail-qmtpd
+qmail-qmtpd.0
+qmail-qread
+qmail-qread.0
+qmail-qstat
+qmail-qstat.0
+qmail-queue
+qmail-queue.0
+qmail-remote
+qmail-remote.0
+qmail-rspawn
+qmail-rspawn.0
+qmail-send
+qmail-send.0
+qmail-send.8
+qmail-showctl
+qmail-showctl.0
+qmail-smtpd
+qmail-smtpd.0
+qmail-start
+qmail-start.0
+qmail-start.8
+qmail-tcpok
+qmail-tcpok.0
+qmail-tcpto
+qmail-tcpto.0
+qmail-upq
+qmail-users.0
+qmail-users.5
+qmail.0
+qreceipt
+qreceipt.0
+qsmhook
+select.h
+sendmail
+socket.lib
+splogger
+splogger.0
+syslog.lib
+systype
+tcp-env
+tcp-env.0
+tcp-environ.0
+uint32.h
+qmail-valid-addresses.0
maildir2mbox.0 maildirwatch.0 qmail.0 qmail-limits.0 qmail-log.0 \
qmail-control.0 qmail-header.0 qmail-users.0 dot-qmail.0 \
qmail-command.0 tcp-environ.0 maildir.0 mbox.0 addresses.0 \
-envelopes.0 forgeries.0
+envelopes.0 forgeries.0 qmail-valid-addresses.0
mbox.0: \
mbox.5
trigger.o fmtqfn.o quote.o now.o readsubdir.o qmail.o date822fmt.o \
datetime.a case.a ndelay.a getln.a wait.a seek.a fd.a sig.a open.a \
lock.a stralloc.a alloc.a substdio.a error.a str.a fs.a auto_qmail.o \
-auto_split.o
+auto_split.o env.a
./load qmail-send qsutil.o control.o constmap.o newfield.o \
prioq.o trigger.o fmtqfn.o quote.o now.o readsubdir.o \
qmail.o date822fmt.o datetime.a case.a ndelay.a getln.a \
wait.a seek.a fd.a sig.a open.a lock.a stralloc.a alloc.a \
- substdio.a error.a str.a fs.a auto_qmail.o auto_split.o
+ substdio.a error.a str.a fs.a auto_qmail.o auto_split.o env.a
qmail-send.0: \
qmail-send.8
./compile qmail-showctl.c
qmail-smtpd: \
-load qmail-smtpd.o rcpthosts.o commands.o timeoutread.o \
+load qmail-smtpd.o addrcheck.o rcpthosts.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o received.o \
date822fmt.o now.o qmail.o cdb.a fd.a wait.a datetime.a getln.a \
open.a sig.a case.a env.a stralloc.a alloc.a substdio.a error.a str.a \
fs.a auto_qmail.o socket.lib
- ./load qmail-smtpd rcpthosts.o commands.o timeoutread.o \
+ ./load qmail-smtpd addrcheck.o rcpthosts.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o \
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a \
datetime.a getln.a open.a sig.a case.a env.a stralloc.a \
substdio.h alloc.h auto_qmail.h control.h received.h constmap.h \
error.h ipme.h ip.h ipalloc.h ip.h gen_alloc.h ip.h qmail.h \
substdio.h str.h fmt.h scan.h byte.h case.h env.h now.h datetime.h \
-exit.h rcpthosts.h timeoutread.h timeoutwrite.h commands.h
+exit.h rcpthosts.h timeoutread.h timeoutwrite.h commands.h addrcheck.h
./compile qmail-smtpd.c
+addrcheck.o: \
+compile addrcheck.c cdb.h stralloc.h byte.h str.h
+ ./compile addrcheck.c
+
qmail-start: \
load qmail-start.o prot.o fd.a auto_uids.o
./load qmail-start prot.o fd.a auto_uids.o
| sed s}SPAWN}"`head -1 conf-spawn`"}g \
> qmail-users.5
+qmail-valid-addresses.0: \
+qmail-valid-addresses.8
+ nroff -man qmail-valid-addresses.8 > qmail-valid-addresses.0
+
qmail.0: \
qmail.7
nroff -man qmail.7 > qmail.0
qmail-qmqpd
qmail-qmtpd.o
rcpthosts.o
+addrcheck.o
qmail-qmtpd
qmail-smtpd.o
qmail-smtpd
--- /dev/null
+#include "cdb.h"
+#include "stralloc.h"
+#include "byte.h"
+#include "str.h"
+#include "addrcheck.h"
+#include <errno.h>
+#include <unistd.h>
+
+/* #define DEBUG */
+#ifdef DEBUG
+# define D(x) x
+# include <stdio.h>
+# include <sys/types.h>
+#else
+# define D(x)
+#endif
+
+#define STRALLOC_INIT { 0 }
+
+static int probe(int cdb, int prefix, const char *key, int len,
+ const char *suffix, const char **kp, uint32 *dlen)
+{
+ static stralloc k = STRALLOC_INIT;
+ char ch = prefix;
+ int rc;
+
+ k.len = 0;
+ if (!stralloc_append(&k, &ch) ||
+ !stralloc_catb(&k, key, len) ||
+ (suffix && !stralloc_cats(&k, suffix)) ||
+ !stralloc_0(&k))
+ return (-1);
+ if (kp) *kp = k.s;
+ D( fprintf(stderr, "*** `%.*s' -> ", k.len, k.s); )
+ rc = cdb_seek(cdb, k.s, k.len - 1, dlen);
+ D( if (rc == -1)
+ fprintf(stderr, "error: %s\n", strerror(errno));
+ else if (rc == 0)
+ fprintf(stderr, "not found\n");
+ else if (!*dlen)
+ fprintf(stderr, "empty\n");
+ else {
+ int n = *dlen;
+ int nn;
+ char buf[256];
+ off_t pos = lseek(cdb, 0, SEEK_CUR);
+ fprintf(stderr, "`");
+ while (n) {
+ nn = sizeof(buf); if (nn > n) nn = n;
+ read(cdb, buf, nn);
+ fwrite(buf, 1, nn, stderr);
+ n -= nn;
+ }
+ fprintf(stderr, "'\n");
+ lseek(cdb, pos, SEEK_SET);
+ } )
+ return (rc);
+}
+
+static int localprobe(int cdb, const char *sender,
+ const char *key, int len,
+ const char *suffix, const char *tail, int *rc)
+{
+ int err;
+ uint32 dlen;
+ char ch;
+ const char *k;
+ static stralloc u = STRALLOC_INIT;
+ static stralloc serv = STRALLOC_INIT;
+ int kid;
+ int n;
+ int wstat;
+ int p[2];
+
+ if ((err = probe(cdb, 'L', key, len, suffix, &k, &dlen)) < 0)
+ return (-1);
+ if (!err) { *rc = 0; return (0); }
+ if (!dlen) { errno = EINVAL; return (-1); }
+ if (read(cdb, &ch, 1) != 1) { errno = EIO; return (-1); }
+ if (ch == '?') {
+ u.len = 0;
+ if (!stralloc_ready(&u, dlen - 1)) return (-1);
+ if (read(cdb, u.s, dlen - 1) != dlen - 1) { errno = EIO; return (-1); }
+ u.len = dlen - 1;
+ serv.len = 0;
+ if (!stralloc_cats(&serv, "addrcheck:") ||
+ !stralloc_cats(&serv, k + 1) ||
+ !stralloc_0(&serv) ||
+ !stralloc_0(&u))
+ return (-1);
+ D( fprintf(stderr, "asking user:\n\
+ user = %s; service = %s\n tail = %s; sender = %s\n\
+ address = %s; key = %s\n",
+ u.s, serv.s, tail, sender, key, k + 1); )
+
+ if (pipe(p) || (kid = fork()) == -1)
+ return (-1);
+ if (!kid) {
+ dup2(p[1], 1);
+ close(p[0]);
+ close(p[1]);
+ execl("/usr/bin/userv", "/usr/bin/userv",
+ "-f", "stdin=/dev/null",
+ u.s, serv.s,
+ tail, sender, key, k + 1,
+ (char *)0);
+ _exit(127);
+ }
+ close(p[1]);
+ n = read(p[0], &ch, 1);
+ close(p[0]);
+ if (wait_pid(&wstat, kid) < 0) { return (-1); }
+ D( fprintf(stderr, "userv exited with status %d\n", wstat); )
+ if (n != 1 || wstat) { errno = EAGAIN; return (-1); }
+ D( fprintf(stderr, "userv answer was `%c'\n", ch); )
+ } else if (dlen != 1) {
+ errno = EIO;
+ return (-1);
+ }
+ *rc = ch;
+ return (1);
+}
+
+static int local(int cdb, const char *l, int len,
+ const char *sender, int *rc)
+{
+ int code;
+ int err = 0;
+ int dash;
+
+ if ((err = localprobe(cdb, sender, l, len, 0, l + len, &code)) != 0)
+ goto done;
+
+ for (;;) {
+ dash = byte_rchr(l, len, '-');
+ if (dash == len) break;
+ if ((err = localprobe(cdb, sender,
+ l, dash, "-default", l + dash + 1, &code)) != 0)
+ goto done;
+ len = dash;
+ }
+ *rc = 0;
+ return (0);
+
+done:
+ if (err >= 0) {
+ switch (code) {
+ case '+': *rc = 1; break;
+ case '-': *rc = 0; break;
+ default: errno = EINVAL; err = -1; break;
+ }
+ }
+ return (err);
+}
+
+static int virt(int cdb, const char *u, int ulen,
+ const char *addr, int alen, const char *sender, int *rc)
+{
+ static stralloc l = STRALLOC_INIT;
+ uint32 dlen;
+ int err;
+
+ if ((err = probe(cdb, 'V', addr, alen, 0, 0, &dlen)) <= 0)
+ return (err);
+ if (!stralloc_ready(&l, dlen + 1)) return (-1);
+ if (read(cdb, l.s, dlen) != dlen) { errno = EIO; return (-1); }
+ l.s[dlen] = '-';
+ l.len = dlen + 1;
+ if (!stralloc_catb(&l, u, ulen) || !stralloc_0(&l)) return (-1);
+ D( printf("*** virtual map -> `%s'\n", l.s); )
+ if (local(cdb, l.s, l.len - 1, sender, rc) < 0) return (-1);
+ return (1);
+}
+
+int addrcheck(int cdb, const char *addr, const char *sender, int *rc)
+{
+ int at, len, dot;
+ int err = 0;
+ uint32 dlen;
+
+ len = str_len(addr);
+ at = str_chr(addr, '@');
+ if (!addr[at])
+ return (local(cdb, addr, len, sender, rc));
+
+ if ((err = virt(cdb, addr, at, addr, len, sender, rc)) != 0)
+ return (err);
+ dot = at + 1;
+ while (addr[dot]) {
+ if ((err = virt(cdb, addr, at, addr + dot, len - dot, sender, rc)) != 0)
+ return (err);
+ dot += byte_chr(addr + dot + 1, len - dot - 1, '.') + 1;
+ }
+
+ if ((err = probe(cdb, '@', addr + at + 1, len - at - 1, 0, 0, &dlen)) < 0)
+ return (-1);
+ if (!err) { *rc = 1; return (0); }
+ if (dlen != 0) { errno = EINVAL; return (-1); }
+
+ return (local(cdb, addr, at, sender, rc));
+}
+
+#ifdef TEST
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+
+int main(int argc, char *argv[])
+{
+ int fd;
+ int rc;
+ int i;
+
+ if (argc < 4) {
+ fprintf(stderr, "usage: addrcheck CDB SENDER ADDR...\n");
+ return (1);
+ }
+ if ((fd = open(argv[1], O_RDONLY)) < 0) {
+ perror(argv[1]);
+ return (1);
+ }
+ for (i = 3; i < argc; i++) {
+ if (addrcheck(fd, argv[i], argv[2], &rc) < 0) {
+ perror("checking");
+ return (1);
+ }
+ printf("%s: %s\n", argv[i], rc ? "ok" : "bad");
+ }
+ return (0);
+}
+
+#endif
--- /dev/null
+#ifndef ADDRCHECK_H
+#define ADDRCHECK_H
+
+extern int addrcheck(int, const char *, const char *, int *);
+
+#endif
# Using binmail to deliver messages to /var/spool/mail/$USER by default.
# Using BSD 4.4 binmail interface: /usr/libexec/mail.local -r
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start '|dot-forward .forward
|preline -f /usr/libexec/mail.local -r "${SENDER:-MAILER-DAEMON}" -d "$USER"' \
splogger qmail
# Using binmail to deliver messages to /var/spool/mail/$USER by default.
# Using BSD 4.4 binmail interface: /usr/libexec/mail.local -r
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start \
'|preline -f /usr/libexec/mail.local -r "${SENDER:-MAILER-DAEMON}" -d "$USER"' \
splogger qmail
# Using binmail to deliver messages to /var/spool/mail/$USER by default.
# Using SVR4 binmail interface: /bin/mail -r
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start '|dot-forward .forward
|preline -f /bin/mail -r "${SENDER:-MAILER-DAEMON}" -d "$USER"' \
splogger qmail
# Using binmail to deliver messages to /var/spool/mail/$USER by default.
# Using SVR4 binmail interface: /bin/mail -r
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start \
'|preline -f /bin/mail -r "${SENDER:-MAILER-DAEMON}" -d "$USER"' \
splogger qmail
# Using binmail to deliver messages to /var/spool/mail/$USER by default.
# Using V7 binmail interface: /bin/mail -f
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start '|dot-forward .forward
|preline -f /bin/mail -f "${SENDER:-MAILER-DAEMON}" -d "$USER"' \
splogger qmail
# Using binmail to deliver messages to /var/spool/mail/$USER by default.
# Using V7 binmail interface: /bin/mail -f
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start \
'|preline -f /bin/mail -f "${SENDER:-MAILER-DAEMON}" -d "$USER"' \
splogger qmail
-cc -O2
+cc -O2 -g
This will be used to compile .c files.
qmail
-nofiles
+nogroup
These are the qmail groups. The second group should not have access to
any files, but it must be usable for processes; this requirement
+cc
cc -s
This will be used to link .o files into an executable.
-exec QMAIL/bin/predate QMAIL/bin/sendmail ${1+"$@"}
+exec /usr/sbin/predate /usr/sbin/sendmail ${1+"$@"}
--- /dev/null
+files
+qmail-src
+tmp
+mini-qmail
+mini-qmail.substvars
+substvars
--- /dev/null
+Things to do when debianizing a new version of qmail.
+ Christian Hudon <chrish@debian.org>
+
+* Run debian/debianize-source-tree
+
+NB Programs are classified as belonging to sbin or bin according to their
+manual page section. (section 1: bin; section 8: sbin)
--- /dev/null
+WARNING - WARNING - WARNING - WARNING - WARNING - WARNING
+
+ qmail does not support dot-locking internally.
+
+ You are in danger of losing mail if you re-configure
+ qmail without understanding the implications of this.
+
+WARNING - WARNING - WARNING - WARNING - WARNING - WARNING
+
+On Debian the standard location for a users mailbox is
+
+ /var/spool/mail/<username>
+
+and when programs write to that file they are expected to lock the
+file to prevent another process from accessing it at the same time, and
+thus corrupting your mail file.
+
+For reasons explained in /usr/doc/qmail/INSTALL.mbox, qmail does not do this.
+
+The default setup uses /usr/sbin/qmail-procmail to perform the final
+delivery of mail with apropriate dot-locking to prevent loss of mail.
+This is just a script that invokes procmail.
+
+You should not really need to invoke this as a user, but if you can
+think of a reason to do so, a line like this in your .qmail file will
+result in normal delivery via procmail:
+
+ |/usr/sbin/qmail-procmail
+
+If you were to instead put something like:
+
+ /var/spool/mail/phil
+
+in your .qmail file, it would deliver mail to that file, but would
+lock it using flock's rather than dot-lock's. Unless you know
+different, that would probably mean that every other program on the
+system would consider the file to be unlocked, and would leave you
+open to mail loss.
+
+Personally, I'd recommend moving to Maildir/ format if you can. Read
+the files in /usr/doc/qmail to find out more.
+
+---
+
+How the Debian setup differs from standard qmail setups:
+
+ The default setup sets aliasempty (i.e. the default delivery method)
+ to be /usr/sbin/qmail-procmail, which is a wrapper around procmail.
+
+ This results in delivery into /var/spool/mail.
+
+ To change this to one of the more standard qmail setups edit
+ /etc/init.d/qmail
+
+ The binaries normail found in /var/qmail/bin have been split between
+ /usr/bin and /usr/sbin.
+
+ The configuration files have been moved to /etc/qmail and the queue
+ has been moved to /var/spool/qmail.
+
+ Symbolic links have been placed in /var/qmail to make it look like a
+ normal qmail setup.
+
+Phil Hands <phil@hands.com>
--- /dev/null
+* Write nice qmailconfig script
+* Add aliases for postmaster, root and mailer-daemon
+* Enable pop3d daemon?
+* Edit /etc/login.defs:MAIL_DIR/MAIL_FILE ?
--- /dev/null
+#!/bin/sh -e
+
+NEWDIR=./qmail
+
+cat <<-'!END!'
+
+ This script unpacks the qmail source in /usr/src/qmail-src
+ into a directory, and compiles it to produce a binary qmail*.deb file
+ The directory where this is done will end up containing the
+ source and package files for the qmail binary package, along
+ with a directory containing the unpacked source.
+
+ !END!
+
+echo -n "Where would you like to do this [$NEWDIR] "
+read line
+
+NEWDIR="${line:-$NEWDIR}"
+
+if test -d $NEWDIR
+then
+ echo -n "'$NEWDIR' already exists, should I use it anyway ? [yN] "
+ read yn
+ test "$yn" = y -o "$yn" = Y || exit 1
+else
+ mkdir $NEWDIR
+fi
+
+cd $NEWDIR
+dpkg-source -x /usr/src/qmail-src/qmail_*.dsc
+cd qmail-*
+
+BECOMEROOT=fakeroot
+cat <<-'!END!'
+
+ For some reason fakeroot causes install to hang on my system, so I'm
+ giving you the option of running sudo or fakeroot. Give fakeroot a try
+ but if it does not work use sudo instead.
+
+ !END!
+echo -n "Should I use sudo or fakeroot to build the package ? [sF] "
+read yn
+test "$yn" = s -o "$yn" = S && BECOMEROOT=sudo
+
+dpkg-buildpackage -us -uc -r$BECOMEROOT
--- /dev/null
+qmail (1.03-5) unstable; urgency=low
+
+ * make it build again.
+ * add mini-qmail package.
+ * support checking of recipient mailboxes in qmail-smtpd.
+
+ -- Mark Wooding <mdw@nsict.org> Mon, 2 May 2005 14:44:12 +0100
+
+qmail (1.03-4) non-free; urgency=low
+
+ * twiddle build system for missed Debians.
+ * indirect qmail-queue via QMAILQUEUE environment variable
+
+ -- Mark Wooding <mdw@nsict.org> Wed, 1 Oct 2003 01:16:00 +0100
+
+qmail (1.03-3) non-free; urgency=low
+
+ * fix uids for new standards.
+
+ -- Mark Wooding <mdw@nsict.org> Tue, 14 Oct 2000 08:37:50 +0100
+
+qmail (1.03-2) non-free; urgency=low
+
+ * add message-id to bounces.
+
+ -- Mark Wooding <mdw@nsict.org> Tue, 8 Jun 1999 19:37:43 +0100
+
+qmail (1.03-1) non-free; urgency=low
+
+ * new upstream release
+
+ -- Mark Wooding <mdw@excessus.demon.co.uk> Sun, 28 Jun 1998 12:41:18 +0100
+
+qmail (1.01-2) non-free; urgency=low
+
+ * new maintainer
+ * qmail-1.01.orig.tar.gz now really is pristine source ;-)
+ * revert to unpatched source, and get dot-locking by use of procmail
+ * add creation of qmail-src
+
+ -- Philip Hands <phil@hands.com> Fri, 31 Oct 1997 21:13:40 +0000
+
+qmail (1.01-1) experimental; urgency=low
+
+ * New upstream release.
+ * Gave in and added /usr/lib/sendmail symlink (fixes bugs 10283 and 11347)
+ * Compiled with libc6.
+ * qmail-1.01.orig.tar.gz is now pristine source, thanks to dpkg 1.4.0.19
+
+ -- Christian Hudon <chrish@debian.org> Fri, 8 Aug 1997 22:22:24 -0400
+
+qmail (1.00-2) experimental; urgency=low
+
+ * Fixed error in sed expression of qmailconfig (Thanks to Philip Hands)
+ * Made '/etc/init.d/qmail stop' output look prettier.
+
+ -- Christian Hudon <chrish@debian.org> Sun, 13 Apr 1997 19:12:59 -0400
+
+qmail (1.00-1) experimental; urgency=low
+
+ * Initial release.
+
+ -- Christian Hudon <chrish@debian.org> Wed, 26 Mar 1997 00:24:38 -0500
--- /dev/null
+/etc/init.d/qmail
--- /dev/null
+Source: qmail
+Maintainer: Mark Wooding <mdw@distorted.org.uk>
+Section: mail
+Priority: extra
+Standards-Version: 2.1.2.2
+
+Package: qmail
+Architecture: any
+Section: mail
+Priority: extra
+Depends: ${shlibs:Depends}, netbase, procmail,
+ python (>= 2.3.5), python-cdb, nsict-cdb
+Provides: mail-transport-agent
+Conflicts: mail-transport-agent
+Suggests: pine | mail-reader
+Description: Secure, reliable, efficient, simple mail transport system
+ qmail is a secure, reliable, efficient, simple message transfer agent. It
+ is meant as a replacement for the entire sendmail-binmail system on typical
+ Internet-connected UNIX hosts.
+ .
+ Reliable: qmail's straight-paper-path philosophy guarantees that a message,
+ once accepted into the system, will never be lost. qmail also supports
+ maildir, a new, super-reliable user mailbox format. Maildirs, unlike mbox
+ files and mh folders, won't be corrupted if the system crashes during
+ delivery. Even better, not only can a user safely read his mail over NFS,
+ but any number of NFS clients can deliver mail to him at the same time.
+ .
+ Efficient: On a Pentium, qmail can easily sustain 200000 local messages per
+ day---that's separate messages injected and delivered to mailboxes in a real
+ test! Although remote deliveries are inherently limited by the slowness of
+ DNS and SMTP, qmail overlaps 20 simultaneous deliveries by default, so it
+ zooms quickly through mailing lists.
+ .
+ Simple: qmail is vastly smaller than any other Internet MTA. Some reasons why:
+ (1) Other MTAs have separate forwarding, aliasing, and mailing list
+ mechanisms. qmail has one simple forwarding mechanism that lets users handle
+ their own mailing lists.
+ (2) Other MTAs offer a spectrum of delivery modes, from fast+unsafe to
+ slow+queued. qmail-send is instantly triggered by new items in the queue, so
+ the qmail system has just one delivery mode: fast+queued.
+ (3) Other MTAs include, in effect, a specialized version of inetd that
+ watches the load average. qmail's design inherently limits the machine load,
+ so qmail-smtpd can safely run from your system's inetd.
+ .
+ Replacement for sendmail: qmail supports host and user masquerading, full
+ host hiding, virtual domains, null clients, list-owner rewriting, relay
+ control, double-bounce recording, arbitrary RFC 822 address lists, cross-host
+ mailing list loop detection, per-recipient checkpointing, downed host
+ backoffs, independent message retry schedules, etc. In short, it's up to
+ speed on modern MTA features. qmail also includes a drop-in ``sendmail''
+ wrapper so that it will be used transparently by your current UAs.
+
+Package: mini-qmail
+Architecture: any
+Section: mail
+Depends: ${shlibs:Depends}
+Provides: mail-transport-agent
+Conflicts: mail-transport-agent
+Description: Secure, reliable, efficient, simple mail transport system
+ qmail is a secure, reliable, efficient, simple message transfer agent. It
+ is meant as a replacement for the entire sendmail-binmail system on typical
+ Internet-connected UNIX hosts.
+ .
+ This is the mini-qmail installation which can't deliver locally. It
+ relies on a QMQP server on another host providing it with a reliable
+ remote mail queue. As a result, it's really easy to configure and
+ doesn't require any hassle.
+
+Package: qmail-src
+Architecture: all
+Section: mail
+Depends: dpkg-dev, fakeroot | sudo
+Priority: extra
+Description: Source only package for building qmail binary package
+ qmail is a secure Secure, reliable, efficient, simple mail transport system.
+ .
+ Dan Bernstein (qmail's author) only gives permission for qmail to be
+ distributed in source form, or binary for by approval. This package
+ has been put together to allow people to easily build a qmail binary
+ package for themselves, from source.
+ .
+ If there is a package called qmail available, then Dan has approved the
+ binary version of the package for approval, so you might as well install
+ that and save yourself some effort.
--- /dev/null
+Qmail is Copyright 1996, D. J. Bernstein.
+--
+
+Unfortunately (from SPI's point of view) Dan Bernstein does not include
+a conventional licence for qmail, so instead you must examine his published
+documentation on the subject to determine your rights to use his software.
+
+The right to distribute unmodified copies of the qmail-1.01 source is granted
+here:
+
+ ftp://koobera.math.uic.edu/www/qmail/dist.html
+
+In addition, Dan will approve distribution of specific binary packages, which
+he should have done for the Debian package that contains this file by the time
+you get to read it.
+
+He also states (see ftp://koobera.math.uic.edu/www/softwarelaw.html)
+the following:
+
+ What does all this mean for the free software world? Once you've legally
+ downloaded a program, you can compile it. You can run it. You can modify
+ it. You can distribute your patches for other people to use. If you think
+ you need a license from the copyright holder, you've been bamboozled by
+ Microsoft. As long as you're not distributing the software, you have
+ nothing to worry about.
+
+Of course, this only applies to people under US jurisdiction, but Dan
+claims that similar laws are in effect in most of the countries that
+take any notice of copyright, so I suppose that one can assume that
+this encapsulates his wishes on the subject.
+
+Cheers, Phil.
+<phil@hands.com>
--- /dev/null
+#!/bin/bash
+
+set -e
+
+function startofpath() {
+ if [ -f usr/share/man/man8/`basename $1`.8 ]; then
+ echo usr/sbin
+ elif [ -f usr/share/man/man1/`basename $1`.1 ]; then
+ echo usr/bin
+ else
+ case `basename $1` in
+ elq|pinq|qail|qlist2) echo usr/bin;;
+ datemail|predate|qmail-home|qsmhook|sendmail) echo usr/sbin;;
+ *) echo 1>&2 Cannot determine if $1 belongs in sbin or bin;exit 2;;
+ esac
+ fi
+}
+
+test -d debian/tmp || (echo "Could not find debian/tmp directory.";exit 1)
+
+cd debian/tmp
+
+for f in var/qmail/bin/*; do
+ mv $f `startofpath $f`
+done
+
+rmdir var/qmail/bin || ( echo "Could not remove qmail/bin directory!"; exit 3)
--- /dev/null
+#!/bin/bash
+
+set -e
+
+if [ ! -f qmail-start.c ]; then
+ echo "This program must be run from the qmail source directory!"
+ exit 1
+fi
+
+#if [ ! -f qmail-send.8 ]; then
+# make man
+#fi
+
+for f in `fgrep -l QMAIL/bin *.sh`; do
+ mv $f $f.$$ && sed -e "s,QMAIL/bin/predate,/usr/sbin/predate,g" \
+ -e "s,QMAIL/bin/sendmail,/usr/sbin/sendmail,g" \
+ -e "s,QMAIL/bin/maildir2mbox,/usr/bin/maildir2mbox,g" \
+ -e "s,QMAIL/bin/qmail-inject,/usr/sbin/qmail-inject,g" \
+ -e "s,QMAIL/bin/qlist,/usr/bin/qlist,g" \
+ -e "s,QMAIL/bin:,/usr/bin:/usr/sbin,g" $f.$$ >$f && \
+ rm $f.$$
+done
+
+if ls *.$$ >/dev/null 2>&1; then
+ echo Error during debianization! Some temporary files remain.
+ exit 1
+fi
+
+if fgrep QMAIL/bin *.sh; then
+ echo Error during debianization! Some .sh files still have relative paths.
+ exit 2
+fi
+
+
+if fgrep -q nofiles conf-groups; then
+ if sed <conf-groups >conf-groups.$$ -e '2s/nofiles/nogroup/' && \
+ mv -f conf-groups.$$ conf-groups; then
+ echo The file conf-groups was auto-edited.
+ echo Please eyeball it to see if the editing was done correctly.
+ echo --- begin conf-groups ----
+ cat conf-groups
+ echo --- end conf-groups ----
+ echo
+ else
+ echo Error during auto-editing of conf-groups!
+ exit 3
+ fi
+fi
+
+if grep '\"bin/' *.c | grep -v 'qmail-\(check\|setup\)' >/dev/null; then
+ echo Remember to replace the relative paths by full paths in the following files:
+ grep '\"bin/' *.c | grep -v 'qmail-\(check\|setup\)'
+fi
--- /dev/null
+#!/usr/bin/perl
+
+require DebianNet;
+
+$| = 1;
+
+my $action = shift;
+
+if ( $action eq 'configure' or $action eq 'abort-upgrade' or $action eq 'abort-deconfigure' or $action eq 'abort-remove' ) {
+ my $old_version = shift;
+
+ DebianNet::add_service('smtp stream tcp nowait qmaild /usr/sbin/tcpd /usr/bin/tcp-env /usr/sbin/qmail-smtpd',
+ "MAIL");
+ DebianNet::enable_service('smtp');
+
+ # Add rc?.d links
+ system('update-rc.d qmail defaults >/dev/null');
+
+ if ( ! -r '/var/qmail/control/me' ) {
+ system("/usr/sbin/qmailconfig");
+ }
+
+ if ( !defined($old_version) || $old_version eq '' ) {
+ print <<'EOT1';
+
+By default qmail will deliver mail to ~/Mailbox instead of /var/spool/mail.
+To learn how to deal with this, read the file /usr/doc/qmail/INSTALL.mbox.
+Disregard the warning in INSTALL.mbox about qmail-alias using flock to lock
+the mailbox.
+
+If you were using sendmail (or smail) previously, you will want to read
+the "qmail-upgrade" manpage, which details user-visible differences between
+sendmail and qmail.
+
+If you are new to qmail, you will want to at least peruse the qmail FAQ, which
+can be found in /usr/doc/qmail
+
+EOT1
+ print 'Do you want to start qmail now? [y/N] ';
+ my $answer = <STDIN>;
+ if ( $answer =~ /^\s*[yY]/ ) {
+ system("/etc/init.d/qmail start");
+ }
+ else {
+ print <<'EOT2';
+Qmail will be started at the next reboot. Or you can start qmail manually when
+you are ready by typing (as root) "/etc/init.d/qmail start" at a shell prompt.
+EOT2
+ }
+ }
+ else {
+ system("/etc/init.d/qmail start");
+ }
+}
+
+-e "/usr/doc/qmail" or
+ symlink("../share/doc/qmail", "/usr/doc/qmail") or
+ die "symlink: $!";
+
+exit 0;
+
+__END__
--- /dev/null
+#!/usr/bin/perl
+
+$| = 1;
+
+$action = shift @ARGV;
+
+if ( $action eq 'purge' ) {
+ system('update-rc.d qmail remove >/dev/null');
+ system("rm -rf /var/qmail");
+ system("rm -rf /etc/qmail");
+ exit $?;
+}
+
+if ( $action eq 'abort-install' ) {
+ # Put back old inetd.conf (?)
+ exit 0
+}
+
--- /dev/null
+#!/usr/bin/perl
+
+require 5.002;
+use strict 'subs';
+use English;
+
+sub check_uid($$$$$$) {
+ my ($name, $uid, $gid, $gecos, $home, $shell) = @_;
+ my $ok = 1;
+
+ print "Checking user $name (uid $uid, gid $gid, homedir $home)... ";
+ @name_entry = getpwnam("$name");
+ if ( @name_entry == () ) {
+ my @uid_entry = getpwuid($uid);
+ if ( @uid_entry == () ) {
+ system("adduser --system --quiet --home $home --gid $gid --uid $uid --gecos \'$gecos\' $name >/dev/null 2>&1");
+ if ( $? != 0 ) {
+ print "\n Error while adding user $name!\n";
+ $ok = 0;
+ }
+ else {
+ print "added.\n";
+ }
+ system("chsh -s $shell $name");
+ }
+ else {
+ print "error!\n Uid $uid is being used by user $uid_entry[0]\n";
+ $ok = 0;
+ }
+ }
+ else {
+ if ( $name_entry[3] != $gid ) {
+ print "error!\n" if $ok;
+ print " User $name has primary group $name_entry[3] instead of $gid\n";
+ $ok = 0;
+ }
+ if ( $name_entry[2] != $uid ) {
+ print "error!\n" if $ok;
+ print " User $name has uid $name_entry[2] instead of $uid\n";
+ $ok = 0;
+ }
+ if ( $name_entry[7] ne $home ) {
+ print "error!\n" if $ok;
+ print " User $name has home directory $name_entry[7] instead of $home\n";
+ $ok = 0;
+ }
+ if ( $ok ) {
+ print "ok.\n";
+ }
+ }
+ return $ok;
+}
+
+sub check_gid($$@) {
+ my ($name, $gid, @members) = @_;
+ my $ok = 1;
+
+ print "Checking group $name (gid $gid)... ";
+ @name_entry = getgrnam($name);
+ if ( @name_entry == () ) {
+ my @gid_entry = getgrgid($gid);
+ if ( @gid_entry == () ) {
+ system("addgroup --quiet --gid $gid $name");
+ if ( $? != 0 ) {
+ print "\n Error while adding group $name\n";
+ $ok = 0;
+ }
+ else {
+ print "added.\n";
+ }
+ }
+ else {
+ print "error!\n Gid $gid is being used by group $gid_entry[0]\n";
+ $ok = 0;
+ }
+ }
+ else {
+ if ( $name_entry[2] != $gid ) {
+ print "error!\n Group $name has gid $name_entry[2] instead of $gid\n";
+ $ok = 0;
+ }
+ if ( $ok ) {
+ print "ok.\n";
+ }
+ }
+ return $ok;
+}
+
+sub is_qmail_installed {
+ my $qmail_installed = 0;
+
+ print "Checking if qmail is already installed on this computer... ";
+
+ $qmail_home = '';
+ if ( -d '/var/qmail' ) {
+ print "\n Found /var/qmail directory";
+ $qmail_home = '/var/qmail';
+ $qmail_installed = 1;
+ }
+ else {
+ $qmail_home = `qmail-home`;
+ if ( $qmail_home ne '') {
+ print "\n Found qmail home directory at $qmail_home (using qmail-home program)";
+ $qmail_installed = 1;
+ }
+ }
+
+ if ( -d '/var/spool/qmail' ) {
+ print "\n Found qmail spool directory at /var/spool/qmail";
+ $qmail_installed = 1;
+ }
+ if ( -d '/etc/qmail' ) {
+ print "\n Found qmail control directory at /etc/qmail";
+ $qmail_installed = 1;
+ }
+
+ if ( (-r '/etc/inetd.conf') and `fgrep -q qmail-smtpd /etc/inetd.conf` ) {
+ print "\n Found reference to qmail-smtpd in /etc/inetd.conf";
+ $qmail_installed = 1;
+ }
+ if ( (-r '/etc/xinetd.conf') and `fgrep -q qmail-smtpd /etc/xinetd.conf` ) {
+ print "\n Found reference to qmail-smtpd in /etc/xinetd.conf";
+ $qmail_installed = 1;
+ }
+
+ if ( -x '/etc/init.d/qmail' ) {
+ print "\n Found /etc/init.d/qmail script";
+ $qmail_installed = 1;
+ }
+ elsif ( `fgrep -q qmail-start /etc/init.d/*` ) {
+ print "\n Found reference to qmail-start in /etc/init.d directory";
+ $qmail_installed = 1;
+ }
+ if ( -x '/etc/rc.local' and `fgrep -q qmail-start /etc/rc.local` ) {
+ print "\n Found reference to qmail-start in /etc/rc.local";
+ $qmail_installed = 1;
+ }
+
+ if ( `killall -0 qmail-send >/dev/null 2>&1` ) {
+ print "\n Found qmail-send process running";
+ $qmail_installed = 1;
+ }
+
+ print 'no.' unless $qmail_installed;
+ print "\n";
+ return $qmail_installed;
+}
+
+
+$| = 1;
+
+$action = shift;
+
+if ( $action eq 'install' ) {
+ $old_version = shift;
+ if ( ! defined $old_version || $old_version eq '' ) {
+ print "First installation of the Debian qmail package...\n";
+ # Check if a non-Debian qmail is installed...
+ if ( is_qmail_installed() ) {
+ print "Please remove your copy of qmail before installing the qmail Debian package.\n\n";
+ exit 1;
+ }
+ # Check for qmail uids and gids
+ my $errors;
+ $errors++ unless check_gid('qmail', 64010, ());
+ #$errors++ unless check_gid('nogroup', 65534, ());
+
+ $errors++ unless check_uid('alias', 64010, 65534, 'qmail alias', '/var/qmail/alias', '/bin/sh');
+ $errors++ unless check_uid('qmaild', 64011, 65534, 'qmail daemon', '/var/qmail', '/bin/sh');
+ $errors++ unless check_uid('qmails', 64012, 64010, 'qmail send', '/var/qmail', '/bin/sh');
+ $errors++ unless check_uid('qmailr', 64013, 64010, 'qmail remote', '/var/qmail', '/bin/sh');
+ $errors++ unless check_uid('qmailq', 64015, 64010, 'qmail queue', '/var/qmail', '/bin/sh');
+ $errors++ unless check_uid('qmaill', 64016, 65534, 'qmail log', '/var/qmail', '/bin/sh');
+ $errors++ unless check_uid('qmailp', 64017, 65534, 'qmail pw', '/var/qmail', '/bin/sh');
+ #$errors++ unless check_uid('nobody', 65534, 65534, 'nobody', '/tmp', '/bin/sh');
+
+ if ( $errors ) {
+ print "\n$errors entries have errors. Please correct these errors and reinstall qmail.\n";
+ exit 2;
+ }
+ }
+
+ # Make sure there are no smtp entries in /etc/inetd.conf
+ # Kludge around smail buggy /etc/inetd.conf handling. (Grr.)
+ my $fixed_smail = 0;
+ my $found_commented = 0;
+ my $found_uncommented = 0;
+ my $new_inetd = "/etc/inetd.conf.qmail-preinst.$$";
+ open I, '</etc/inetd.conf' or die "Could not open /etc/inetd.conf\n";
+ open N, ">$new_inetd" or die "Could not create $new_inetd\n";
+ while (<I>) {
+ if ( m|^\# *smtp\s+.*/usr/sbin/in.smtpd.*\(will be restored by smail postinst\)\s*$| ) {
+ $fixed_smail = 1;
+ next;
+ } elsif ( m/^\# *smtp\s+/ ) {
+ $found_commented= 1;
+ } elsif ( m/^smtp\s+/ ) {
+ $found_uncommented= 1;
+ }
+ print N or die "Cannot write to $new_inetd\n";
+ }
+ close N or die "Could not close $new_inetd\n";
+ close I or die "Could not close /etc/inetd.conf\n";
+ if ( $found_commented or $found_uncommented ) {
+ print "Your /etc/inetd.conf already containts entries for the SMTP service.\n";
+ print "Please remove all SMTP entries from /etc/inetd.conf (even those commented out)\n";
+ print "and reinstall the qmail package.\n\n";
+ exit 1;
+ }
+ if ( $fixed_smail ) {
+ print "Removing commented smtp entry left by buggy version of smail postinst... ";
+ rename "$new_inetd", '/etc/inetd.conf' or die "failed!\n";
+ print "done.\n";
+ }
+}
+
+exit 0;
--- /dev/null
+#!/usr/bin/perl
+
+require DebianNet;
+
+$| = 1;
+
+$action = shift;
+
+if ( $action eq 'failed-upgrade' ) {
+ exit 1;
+}
+
+if ( $action eq 'upgrade' or $action eq 'deconfigure' ) {
+ system("/etc/init.d/qmail stop");
+ exit $? if $?;
+ DebianNet::disable_service('smtp');
+ exit 0;
+}
+
+if ( $action eq 'remove' ) {
+ # Ask for confirmation if there are still messages in qmail's queue.
+ $mesg_inqueue = `find /var/qmail/queue/mess -type f -print | wc -l`;
+ $mesg_inqueue =~ s/\s//g;
+ $mesg_unprocessed = `find /var/qmail/queue/todo -type f -print | wc -l`;
+ $mesg_unprocessed =~ s/\s//g;
+
+ if ( $mesg_inqueue != 0 || $mesg_unprocessed != 0 ) {
+ print STDERR <<EOT;
+There are still messages in qmail's queue. You probably want to wait until
+qmail's queue is empty before removing the qmail package. Otherwise
+the messages currently waiting in the queue will not be delivered or will be
+lost. (\`qmail-qstat' will tell you the number of messages in qmail's queue.)
+
+EOT
+
+ print STDERR 'Do you still want to proceed and remove the qmail package? [y/N] ';
+ my $answer = <STDIN>;
+ exit 1 unless $answer =~ /^\s*[yY]/;
+ }
+
+ # Remove qmail-smtpd from inetd.conf
+ DebianNet::remove_service('smtp\s+stream\s+tcp\s+nowait\s+qmaild.*/usr/sbin/qmail-smtpd');
+
+ # Stop qmail process.
+ system("/etc/init.d/qmail stop");
+ exit $? if $?;
+}
+
+unlink("/usr/doc/qmail");
+
+exit 0;
+
+__END__;
--- /dev/null
+#!/bin/sh
+#
+# /etc/init.d/qmail : start or stop the qmail mail subsystem.
+#
+# Written by Christian Hudon <chrish@debian.org>
+
+#
+# Configuration
+#
+
+
+# set default delivery method
+
+alias_empty="|/usr/sbin/qmail-procmail" # procmail delivery to /var/spool/mail
+#alias_empty="./Maildir/" # This uses qmail prefered ~/Maildir/ directory
+#alias_empty="./Mailbox" # This uses Mailbox file in users $HOME
+
+logger="splogger qmail"
+#logger="|accustamp >>/var/log/qmail.log" # If you have accustamp installed.
+#logger=">>/var/log/qmail.log" # Does not give timing info.
+
+# If you uncommented one of the lines that appends to /var/log/qmail.log, you
+# need to uncomment the following two lines.
+#touch /var/log/qmail.log
+#chown qmaill /var/log/qmail.log
+
+#
+# End of configuration
+#
+
+test -x /usr/sbin/qmail-start || exit 0
+test -x /usr/sbin/qmail-send || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting mail-transfer agent: qmail"
+ sh -c "start-stop-daemon --start --quiet \
+ --exec /usr/sbin/qmail-send \
+ --startas /usr/sbin/qmail-start -- \"$alias_empty\" $logger &"
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping mail-transfer agent: qmail"
+ if [ "`pidof /usr/sbin/qmail-send`" ] ; then
+ start-stop-daemon --stop --quiet --oknodo --exec /usr/sbin/qmail-send
+
+ # Wait until the timeout for qmail processes to die.
+ count=120
+ numdots=0
+ while ([ $count != 0 ]) do
+ let count=$count-1
+ if [ "`pidof /usr/sbin/qmail-send`" ] ; then
+ echo -n .
+ let numdots=$numdots+1
+ sleep 1
+ else
+ count=0
+ fi
+ done
+
+ # If it's not dead yet, kill it.
+# if [ "`pidof /usr/sbin/qmail-send`" ] ; then
+# echo -n " TIMEOUT!"
+# kill -KILL `pidof /usr/sbin/qmail-send`
+# else
+ case $numdots in
+ 0) echo "." ;;
+ 1) echo ;;
+ *) echo " done." ;;
+ esac
+# fi
+ else
+ echo " not running.";
+ fi
+
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload)
+ echo "Reloading 'locals' and 'virtualdomains' control files."
+ start-stop-daemon --stop --quiet --oknodo --signal HUP --exec /usr/sbin/qmail-send
+ ;;
+ *)
+ echo 'Usage: /etc/init.d/qmail {start|stop|restart|reload}'
+ exit 1
+esac
+
+exit 0
--- /dev/null
+This is a feeble little package that just contains a script to unpack
+and build qmail from source, so that we don't violate Dan Bernstein's
+`no binary distribution, without approval' restriction.
+
+Hopefully this will help allow a binary package to be approved, but
+even if it doesn't it means that Debian users can use qmail without to
+much effort.
+
+Philip Hands <phil@hands.com>
--- /dev/null
+#!/usr/bin/make -f
+#
+
+mdw-setup:
+ upstream=`git-describe djb | sed 's:^djb/::'`; \
+ dir=qmail_$$upstream.orig; \
+ git-tar-tree djb $$dir | gzip -9c >../$$dir.tar.gz
+
+build:
+ $(checkdir)
+ if fgrep QMAIL/bin *.sh >/dev/null; then \
+ echo >&2 "You must run debian/debianize-source-tree first!"; \
+ exit 1; \
+ fi
+ $(MAKE) man
+ $(MAKE)
+ touch build
+
+clean:
+ $(checkdir)
+ -rm -f build
+ -$(MAKE) clean
+ -rm `find . -name "*~"`
+ -rm -rf debian/files
+ -rm -rf `find debian/* ! \( -name CVS -prune \) -type d -prune`
+
+binary-indep: checkroot build
+ $(checkdir)
+
+binary-arch: checkroot build
+ $(checkdir)
+ -rm -rf debian/files debian/substvars debian/tmp
+ -rm -rf `find ! \( -name CVS -prune \) debian/* -type d -prune`
+# Make the directory tree and copy qmail files.
+ install -d debian/tmp/etc/init.d \
+ debian/tmp/usr/share/doc/qmail \
+ debian/tmp/var/qmail \
+ debian/tmp/var/spool \
+ debian/tmp/usr/bin \
+ debian/tmp/usr/sbin \
+ debian/tmp/usr/lib \
+ debian/qmail-src/usr/bin \
+ debian/qmail-src/usr/src/qmail-src \
+ debian/qmail-src/usr/share/doc/qmail-src
+ ./install `pwd`/debian/tmp/var/qmail
+ mv debian/tmp/var/qmail/queue debian/tmp/var/spool/qmail
+ mv debian/tmp/var/qmail/control debian/tmp/etc/qmail
+ (cd debian/tmp/var/qmail && ln -s /var/spool/qmail queue)
+ (cd debian/tmp/var/qmail && ln -s /etc/qmail control)
+ mv debian/tmp/var/qmail/man debian/tmp/usr/share/man && \
+ rm -r debian/tmp/usr/share/man/cat?
+# Move /var/qmail/bin programs to either /usr/bin or /usr/sbin
+ bash debian/debianize-binary-tree
+# Create /usr/lib/sendmail symlink for backward compatibility.
+ (cd debian/tmp/usr/lib && ln -s ../sbin/sendmail)
+# Copy qmailconfig and its helper programs...
+ install -o root -g root -m 755 dnsfq debian/tmp/usr/sbin/qmailconfig-dnsfq
+ install -o root -g root -m 755 dnsip debian/tmp/usr/sbin/qmailconfig-dnsip
+ install -o root -g root -m 755 ipmeprint debian/tmp/usr/sbin/qmailconfig-ipmeprint
+ install -o root -g root -m 755 dnsptr debian/tmp/usr/sbin/qmailconfig-dnsptr
+# (This one is a bit of a kludge...)
+ sed -e 's|./hostname|hostname|g' \
+ -e 's|\./dnsptr|/usr/sbin/qmailconfig-dnsptr|g' \
+ -e 's|\./dnsip|/usr/sbin/qmailconfig-dnsip|g' \
+ -e 's|\./dnsfq|/usr/sbin/qmailconfig-dnsfq|g' \
+ -e 's|\./ipmeprint|/usr/sbin/qmailconfig-ipmeprint|g' \
+ config >debian/tmp/usr/sbin/qmailconfig
+ chmod 755 debian/tmp/usr/sbin/qmailconfig
+# Install /etc/init.d/qmail
+ install -o root -g root -m 755 debian/qmail debian/tmp/etc/init.d/qmail
+# Copy /usr/share/doc/qmail files.
+ install -o root -g root -m 644 debian/changelog debian/tmp/usr/share/doc/qmail/changelog.Debian
+ rm -rf debian/tmp/var/qmail/doc
+# do the stuff for qmail-src
+ fullver=`dpkg-parsechangelog | sed -n 's/^Version: \(.*\)$$/\1/p'` && \
+ ver=`echo $$fullver | sed 's/-.*//'` && \
+ cp ../qmail_$$ver.orig.tar.gz ../qmail_$$fullver.diff.gz \
+ ../qmail_$$fullver.dsc debian/qmail-src/usr/src/qmail-src
+ install -m 755 debian/build-qmail debian/qmail-src/usr/bin
+ install debian/copyright debian/qmail-src/usr/share/doc/qmail-src
+ install debian/qmail-src.README debian/qmail-src/usr/share/doc/qmail-src/README
+# Correct permissions of binaries and manpages...
+ chmod go+rx debian/tmp/usr/*bin/*
+ chown -R root.root debian/tmp/usr/share/man
+# Do stuff for qmail-leaf
+ rm -rf debian/mini-qmail
+ cp -a debian/tmp debian/mini-qmail
+ rm -rf debian/mini-qmail/etc/init.d
+ for i in \
+ bouncesaying except qreceipt qbiff tcp-env \
+ condredirect preline log dot-qmail qmail-valid-addresses; do \
+ rm -f debian/mini-qmail/usr/share/man?/$$i.*; \
+ rm -f debian/mini-qmail/usr/*bin/$$i/*; \
+ done
+ for i in \
+ getpw remote rspawn clean send start splogger queue newu \
+ pw2u qread qstat tcpok pop3d popup qmqpd qmtpd smtpd command \
+ local lspawn newmrh users; do \
+ rm -f debian/mini-qmail/usr/share/man?/qmail-$$i.*; \
+ rm -f debian/mini-qmail/usr/*bin/qmail-$$i; \
+ done
+ rm -rf debian/mini-qmail/var/spool
+ for i in alias boot queue users; do \
+ rm -rf debian/mini-qmail/var/qmail/$$i; \
+ done
+ ln -s qmail-qmqpc debian/mini-qmail/usr/sbin/qmail-queue
+# Fix everything up
+ debstd -m CHANGES BLURB* FAQ INTERNALS README \
+ SECURITY INSTALL.* PIC.* REMOVE.* SYSDEPS THANKS THOUGHTS \
+ TODO SENDMAIL TEST.* UPGRADE
+ cp -r debian/tmp/usr/share/doc/qmail \
+ debian/mini-qmail/usr/share/doc/mini-qmail
+ dpkg-gencontrol -pqmail
+# And finally, build the Debian package!
+ dpkg --build debian/tmp ..
+ dpkg --build debian/mini-qmail ..
+
+define checkdir
+ test -f qmail-send.c -a -f debian/rules
+endef
+
+binary: binary-indep binary-arch
+
+source: clean mdw-setup
+ dir=`pwd | sed 's:^.*/::'`; \
+ cd ..; \
+ dpkg-source -b -i'(?:^|/)\.git(?:$$|/)' $$dir
+
+checkroot:
+ $(checkdir)
+ test "`whoami`" = root
+
+.PHONY: binary binary-arch binary-indep clean checkroot source mdw-setup
-QMAIL/bin/maildir2mbox && exec elm ${1+"$@"}
+/usr/bin/maildir2mbox && exec elm ${1+"$@"}
#ifndef ERROR_H
#define ERROR_H
-extern int errno;
+#include <errno.h>
extern int error_intr;
extern int error_nomem;
char buf[100 + FMT_ULONG];
-void dsplit(base,uid,mode)
+void dsplit(home,base,uid,mode)
+char *home;
char *base; /* must be under 100 bytes */
int uid;
int mode;
char *x;
unsigned long i;
- d(auto_qmail,base,uid,auto_gidq,mode);
+ d(home,base,uid,auto_gidq,mode);
for (i = 0;i < auto_split;++i) {
x = buf;
x += fmt_ulong(x,i);
*x = 0;
- d(auto_qmail,buf,uid,auto_gidq,mode);
+ d(home,buf,uid,auto_gidq,mode);
}
}
-void hier()
+void hier(home)
+char *home;
{
- h(auto_qmail,auto_uido,auto_gidq,0755);
-
- d(auto_qmail,"control",auto_uido,auto_gidq,0755);
- d(auto_qmail,"users",auto_uido,auto_gidq,0755);
- d(auto_qmail,"bin",auto_uido,auto_gidq,0755);
- d(auto_qmail,"boot",auto_uido,auto_gidq,0755);
- d(auto_qmail,"doc",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat1",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat5",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat7",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat8",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man1",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man5",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man7",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man8",auto_uido,auto_gidq,0755);
-
- d(auto_qmail,"alias",auto_uida,auto_gidq,02755);
-
- d(auto_qmail,"queue",auto_uidq,auto_gidq,0750);
- d(auto_qmail,"queue/pid",auto_uidq,auto_gidq,0700);
- d(auto_qmail,"queue/intd",auto_uidq,auto_gidq,0700);
- d(auto_qmail,"queue/todo",auto_uidq,auto_gidq,0750);
- d(auto_qmail,"queue/bounce",auto_uids,auto_gidq,0700);
-
- dsplit("queue/mess",auto_uidq,0750);
- dsplit("queue/info",auto_uids,0700);
- dsplit("queue/local",auto_uids,0700);
- dsplit("queue/remote",auto_uids,0700);
-
- d(auto_qmail,"queue/lock",auto_uidq,auto_gidq,0750);
- z(auto_qmail,"queue/lock/tcpto",1024,auto_uidr,auto_gidq,0644);
- z(auto_qmail,"queue/lock/sendmutex",0,auto_uids,auto_gidq,0600);
- p(auto_qmail,"queue/lock/trigger",auto_uids,auto_gidq,0622);
-
- c(auto_qmail,"boot","home",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","home+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","proc",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","proc+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm1",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm1+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm2",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm2+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm3",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm3+df",auto_uido,auto_gidq,0755);
-
- c(auto_qmail,"doc","FAQ",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","UPGRADE",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","SENDMAIL",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.alias",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.ctl",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.ids",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.maildir",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.mbox",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.vsm",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","TEST.deliver",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","TEST.receive",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","REMOVE.sendmail",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","REMOVE.binmail",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2alias",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2ext",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2local",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2rem",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2virt",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.nullclient",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.relaybad",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.relaygood",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.rem2local",auto_uido,auto_gidq,0644);
-
- c(auto_qmail,"bin","qmail-queue",auto_uidq,auto_gidq,04711);
- c(auto_qmail,"bin","qmail-lspawn",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-start",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-getpw",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-local",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-remote",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-rspawn",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-clean",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-send",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","splogger",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-newu",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-newmrh",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-pw2u",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-inject",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","predate",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","datemail",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","mailsubj",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-showctl",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qread",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qstat",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-tcpto",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-tcpok",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-pop3d",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-popup",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-qmqpc",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qmqpd",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qmtpd",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-smtpd",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","sendmail",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","tcp-env",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qreceipt",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qsmhook",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qbiff",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","forward",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","preline",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","condredirect",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","bouncesaying",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","except",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","maildirmake",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","maildir2mbox",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","maildirwatch",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qail",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","elq",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","pinq",auto_uido,auto_gidq,0755);
-
- c(auto_qmail,"man/man5","addresses.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","addresses.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","envelopes.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","envelopes.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","maildir.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","maildir.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","mbox.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","mbox.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","dot-qmail.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","dot-qmail.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-control.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-control.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-header.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-header.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-log.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-log.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-users.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-users.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","tcp-environ.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","tcp-environ.0",auto_uido,auto_gidq,0644);
-
- c(auto_qmail,"man/man7","forgeries.7",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat7","forgeries.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man7","qmail-limits.7",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat7","qmail-limits.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man7","qmail.7",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat7","qmail.0",auto_uido,auto_gidq,0644);
-
- c(auto_qmail,"man/man1","forward.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","forward.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","condredirect.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","condredirect.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","bouncesaying.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","bouncesaying.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","except.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","except.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","maildirmake.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","maildirmake.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","maildir2mbox.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","maildir2mbox.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","maildirwatch.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","maildirwatch.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","mailsubj.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","mailsubj.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","qreceipt.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","qreceipt.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","qbiff.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","qbiff.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","preline.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","preline.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","tcp-env.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","tcp-env.0",auto_uido,auto_gidq,0644);
-
- c(auto_qmail,"man/man8","qmail-local.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-local.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-lspawn.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-lspawn.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-getpw.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-getpw.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-remote.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-remote.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-rspawn.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-rspawn.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-clean.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-clean.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-send.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-send.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-start.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-start.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","splogger.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","splogger.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-queue.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-queue.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-inject.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-inject.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-showctl.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-showctl.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-newmrh.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-newmrh.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-newu.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-newu.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-pw2u.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-pw2u.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qread.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qread.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qstat.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qstat.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-tcpok.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-tcpok.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-tcpto.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-tcpto.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-pop3d.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-pop3d.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-popup.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-popup.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qmqpc.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qmqpc.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qmqpd.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qmqpd.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qmtpd.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qmtpd.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-smtpd.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-smtpd.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-command.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-command.0",auto_uido,auto_gidq,0644);
+ if (!home)
+ home = auto_qmail;
+
+ h(home,auto_uido,auto_gidq,0755);
+
+ d(home,"control",auto_uido,auto_gidq,0755);
+ d(home,"users",auto_uido,auto_gidq,0755);
+ d(home,"bin",auto_uido,auto_gidq,0755);
+ d(home,"boot",auto_uido,auto_gidq,0755);
+ d(home,"doc",auto_uido,auto_gidq,0755);
+ d(home,"man",auto_uido,auto_gidq,0755);
+ d(home,"man/cat1",auto_uido,auto_gidq,0755);
+ d(home,"man/cat5",auto_uido,auto_gidq,0755);
+ d(home,"man/cat7",auto_uido,auto_gidq,0755);
+ d(home,"man/cat8",auto_uido,auto_gidq,0755);
+ d(home,"man/man1",auto_uido,auto_gidq,0755);
+ d(home,"man/man5",auto_uido,auto_gidq,0755);
+ d(home,"man/man7",auto_uido,auto_gidq,0755);
+ d(home,"man/man8",auto_uido,auto_gidq,0755);
+
+ d(home,"alias",auto_uida,auto_gidq,02755);
+
+ d(home,"queue",auto_uidq,auto_gidq,0750);
+ d(home,"queue/pid",auto_uidq,auto_gidq,0700);
+ d(home,"queue/intd",auto_uidq,auto_gidq,0700);
+ d(home,"queue/todo",auto_uidq,auto_gidq,0750);
+ d(home,"queue/bounce",auto_uids,auto_gidq,0700);
+
+ dsplit(home,"queue/mess",auto_uidq,0750);
+ dsplit(home,"queue/info",auto_uids,0700);
+ dsplit(home,"queue/local",auto_uids,0700);
+ dsplit(home,"queue/remote",auto_uids,0700);
+
+ d(home,"queue/lock",auto_uidq,auto_gidq,0750);
+ z(home,"queue/lock/tcpto",1024,auto_uidr,auto_gidq,0644);
+ z(home,"queue/lock/sendmutex",0,auto_uids,auto_gidq,0600);
+ p(home,"queue/lock/trigger",auto_uids,auto_gidq,0622);
+
+ c(home,"boot","home",auto_uido,auto_gidq,0755);
+ c(home,"boot","home+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","proc",auto_uido,auto_gidq,0755);
+ c(home,"boot","proc+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm1",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm1+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm2",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm2+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm3",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm3+df",auto_uido,auto_gidq,0755);
+
+ c(home,"doc","FAQ",auto_uido,auto_gidq,0644);
+ c(home,"doc","UPGRADE",auto_uido,auto_gidq,0644);
+ c(home,"doc","SENDMAIL",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.alias",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.ctl",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.ids",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.maildir",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.mbox",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.vsm",auto_uido,auto_gidq,0644);
+ c(home,"doc","TEST.deliver",auto_uido,auto_gidq,0644);
+ c(home,"doc","TEST.receive",auto_uido,auto_gidq,0644);
+ c(home,"doc","REMOVE.sendmail",auto_uido,auto_gidq,0644);
+ c(home,"doc","REMOVE.binmail",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2alias",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2ext",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2local",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2rem",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2virt",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.nullclient",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.relaybad",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.relaygood",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.rem2local",auto_uido,auto_gidq,0644);
+
+ c(home,"bin","qmail-queue",auto_uidq,auto_gidq,04711);
+ c(home,"bin","qmail-lspawn",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-start",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-getpw",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-local",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-remote",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-rspawn",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-clean",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-send",auto_uido,auto_gidq,0711);
+ c(home,"bin","splogger",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-newu",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-newmrh",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-pw2u",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-inject",auto_uido,auto_gidq,0755);
+ c(home,"bin","predate",auto_uido,auto_gidq,0755);
+ c(home,"bin","datemail",auto_uido,auto_gidq,0755);
+ c(home,"bin","mailsubj",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-showctl",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qread",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qstat",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-tcpto",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-tcpok",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-pop3d",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-popup",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-qmqpc",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qmqpd",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qmtpd",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-smtpd",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-valid-addresses",auto_uido,auto_gidq,0755);
+ c(home,"bin","sendmail",auto_uido,auto_gidq,0755);
+ c(home,"bin","tcp-env",auto_uido,auto_gidq,0755);
+ c(home,"bin","qreceipt",auto_uido,auto_gidq,0755);
+ c(home,"bin","qsmhook",auto_uido,auto_gidq,0755);
+ c(home,"bin","qbiff",auto_uido,auto_gidq,0755);
+ c(home,"bin","forward",auto_uido,auto_gidq,0755);
+ c(home,"bin","preline",auto_uido,auto_gidq,0755);
+ c(home,"bin","condredirect",auto_uido,auto_gidq,0755);
+ c(home,"bin","bouncesaying",auto_uido,auto_gidq,0755);
+ c(home,"bin","except",auto_uido,auto_gidq,0755);
+ c(home,"bin","maildirmake",auto_uido,auto_gidq,0755);
+ c(home,"bin","maildir2mbox",auto_uido,auto_gidq,0755);
+ c(home,"bin","maildirwatch",auto_uido,auto_gidq,0755);
+ c(home,"bin","qail",auto_uido,auto_gidq,0755);
+ c(home,"bin","elq",auto_uido,auto_gidq,0755);
+ c(home,"bin","pinq",auto_uido,auto_gidq,0755);
+
+ c(home,"man/man5","addresses.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","addresses.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","envelopes.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","envelopes.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","maildir.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","maildir.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","mbox.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","mbox.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","dot-qmail.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","dot-qmail.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-control.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-control.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-header.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-header.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-log.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-log.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-users.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-users.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","tcp-environ.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","tcp-environ.0",auto_uido,auto_gidq,0644);
+
+ c(home,"man/man7","forgeries.7",auto_uido,auto_gidq,0644);
+ c(home,"man/cat7","forgeries.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man7","qmail-limits.7",auto_uido,auto_gidq,0644);
+ c(home,"man/cat7","qmail-limits.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man7","qmail.7",auto_uido,auto_gidq,0644);
+ c(home,"man/cat7","qmail.0",auto_uido,auto_gidq,0644);
+
+ c(home,"man/man1","forward.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","forward.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","condredirect.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","condredirect.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","bouncesaying.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","bouncesaying.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","except.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","except.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","maildirmake.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","maildirmake.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","maildir2mbox.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","maildir2mbox.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","maildirwatch.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","maildirwatch.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","mailsubj.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","mailsubj.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","qreceipt.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","qreceipt.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","qbiff.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","qbiff.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","preline.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","preline.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","tcp-env.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","tcp-env.0",auto_uido,auto_gidq,0644);
+
+ c(home,"man/man8","qmail-local.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-local.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-lspawn.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-lspawn.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-getpw.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-getpw.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-remote.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-remote.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-rspawn.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-rspawn.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-clean.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-clean.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-send.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-send.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-start.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-start.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","splogger.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","splogger.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-queue.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-queue.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-inject.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-inject.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-showctl.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-showctl.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-newmrh.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-newmrh.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-newu.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-newu.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-pw2u.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-pw2u.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qread.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qread.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qstat.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qstat.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-tcpok.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-tcpok.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-tcpto.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-tcpto.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-pop3d.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-pop3d.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-popup.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-popup.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qmqpc.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qmqpc.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qmqpd.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qmqpd.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qmtpd.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qmtpd.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-smtpd.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-smtpd.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-command.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-command.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-valid-addresses.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-valid-addresses.0",auto_uido,auto_gidq,0644);
}
# Using dot-forward to support sendmail-style ~/.forward files.
# Using qmail-local to deliver messages to ~/Mailbox by default.
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start '|dot-forward .forward
./Mailbox' splogger qmail
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start ./Mailbox splogger qmail
char buf[100 + FMT_ULONG];
-void dsplit(base,uid,mode)
+void dsplit(home,base,uid,mode)
+char *home;
char *base; /* must be under 100 bytes */
int uid;
int mode;
char *x;
unsigned long i;
- d(auto_qmail,base,uid,auto_gidq,mode);
+ d(home,base,uid,auto_gidq,mode);
for (i = 0;i < auto_split;++i) {
x = buf;
x += fmt_ulong(x,i);
*x = 0;
- d(auto_qmail,buf,uid,auto_gidq,mode);
+ d(home,buf,uid,auto_gidq,mode);
}
}
-void hier()
+void hier(home)
+char *home;
{
- h(auto_qmail,auto_uido,auto_gidq,0755);
+ if (!home)
+ home = auto_qmail;
- d(auto_qmail,"control",auto_uido,auto_gidq,0755);
- d(auto_qmail,"users",auto_uido,auto_gidq,0755);
- d(auto_qmail,"bin",auto_uido,auto_gidq,0755);
- d(auto_qmail,"boot",auto_uido,auto_gidq,0755);
- d(auto_qmail,"doc",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat1",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat5",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat7",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/cat8",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man1",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man5",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man7",auto_uido,auto_gidq,0755);
- d(auto_qmail,"man/man8",auto_uido,auto_gidq,0755);
+ h(home,auto_uido,auto_gidq,0755);
- d(auto_qmail,"alias",auto_uida,auto_gidq,02755);
+ d(home,"control",auto_uido,auto_gidq,0755);
+ d(home,"users",auto_uido,auto_gidq,0755);
+ d(home,"bin",auto_uido,auto_gidq,0755);
+ d(home,"boot",auto_uido,auto_gidq,0755);
+ d(home,"doc",auto_uido,auto_gidq,0755);
+ d(home,"man",auto_uido,auto_gidq,0755);
+ d(home,"man/cat1",auto_uido,auto_gidq,0755);
+ d(home,"man/cat5",auto_uido,auto_gidq,0755);
+ d(home,"man/cat7",auto_uido,auto_gidq,0755);
+ d(home,"man/cat8",auto_uido,auto_gidq,0755);
+ d(home,"man/man1",auto_uido,auto_gidq,0755);
+ d(home,"man/man5",auto_uido,auto_gidq,0755);
+ d(home,"man/man7",auto_uido,auto_gidq,0755);
+ d(home,"man/man8",auto_uido,auto_gidq,0755);
- d(auto_qmail,"queue",auto_uidq,auto_gidq,0750);
- d(auto_qmail,"queue/pid",auto_uidq,auto_gidq,0700);
- d(auto_qmail,"queue/intd",auto_uidq,auto_gidq,0700);
- d(auto_qmail,"queue/todo",auto_uidq,auto_gidq,0750);
- d(auto_qmail,"queue/bounce",auto_uids,auto_gidq,0700);
+ d(home,"alias",auto_uida,auto_gidq,02755);
- dsplit("queue/mess",auto_uidq,0750);
- dsplit("queue/info",auto_uids,0700);
- dsplit("queue/local",auto_uids,0700);
- dsplit("queue/remote",auto_uids,0700);
+ d(home,"queue",auto_uidq,auto_gidq,0750);
+ d(home,"queue/pid",auto_uidq,auto_gidq,0700);
+ d(home,"queue/intd",auto_uidq,auto_gidq,0700);
+ d(home,"queue/todo",auto_uidq,auto_gidq,0750);
+ d(home,"queue/bounce",auto_uids,auto_gidq,0700);
- d(auto_qmail,"queue/lock",auto_uidq,auto_gidq,0750);
- z(auto_qmail,"queue/lock/tcpto",1024,auto_uidr,auto_gidq,0644);
- z(auto_qmail,"queue/lock/sendmutex",0,auto_uids,auto_gidq,0600);
- p(auto_qmail,"queue/lock/trigger",auto_uids,auto_gidq,0622);
+ dsplit(home,"queue/mess",auto_uidq,0750);
+ dsplit(home,"queue/info",auto_uids,0700);
+ dsplit(home,"queue/local",auto_uids,0700);
+ dsplit(home,"queue/remote",auto_uids,0700);
- c(auto_qmail,"boot","home",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","home+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","proc",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","proc+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm1",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm1+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm2",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm2+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm3",auto_uido,auto_gidq,0755);
- c(auto_qmail,"boot","binm3+df",auto_uido,auto_gidq,0755);
+ d(home,"queue/lock",auto_uidq,auto_gidq,0750);
+ z(home,"queue/lock/tcpto",1024,auto_uidr,auto_gidq,0644);
+ z(home,"queue/lock/sendmutex",0,auto_uids,auto_gidq,0600);
+ p(home,"queue/lock/trigger",auto_uids,auto_gidq,0622);
- c(auto_qmail,"doc","FAQ",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","UPGRADE",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","SENDMAIL",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.alias",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.ctl",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.ids",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.maildir",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.mbox",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","INSTALL.vsm",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","TEST.deliver",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","TEST.receive",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","REMOVE.sendmail",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","REMOVE.binmail",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2alias",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2ext",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2local",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2rem",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.local2virt",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.nullclient",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.relaybad",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.relaygood",auto_uido,auto_gidq,0644);
- c(auto_qmail,"doc","PIC.rem2local",auto_uido,auto_gidq,0644);
+ c(home,"boot","home",auto_uido,auto_gidq,0755);
+ c(home,"boot","home+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","proc",auto_uido,auto_gidq,0755);
+ c(home,"boot","proc+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm1",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm1+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm2",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm2+df",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm3",auto_uido,auto_gidq,0755);
+ c(home,"boot","binm3+df",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-queue",auto_uidq,auto_gidq,04711);
- c(auto_qmail,"bin","qmail-lspawn",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-start",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-getpw",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-local",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-remote",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-rspawn",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-clean",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-send",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","splogger",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-newu",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-newmrh",auto_uido,auto_gidq,0700);
- c(auto_qmail,"bin","qmail-pw2u",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-inject",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","predate",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","datemail",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","mailsubj",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-showctl",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qread",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qstat",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-tcpto",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-tcpok",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-pop3d",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-popup",auto_uido,auto_gidq,0711);
- c(auto_qmail,"bin","qmail-qmqpc",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qmqpd",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-qmtpd",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qmail-smtpd",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","sendmail",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","tcp-env",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qreceipt",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qsmhook",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qbiff",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","forward",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","preline",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","condredirect",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","bouncesaying",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","except",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","maildirmake",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","maildir2mbox",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","maildirwatch",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","qail",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","elq",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","pinq",auto_uido,auto_gidq,0755);
+ c(home,"doc","FAQ",auto_uido,auto_gidq,0644);
+ c(home,"doc","UPGRADE",auto_uido,auto_gidq,0644);
+ c(home,"doc","SENDMAIL",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.alias",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.ctl",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.ids",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.maildir",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.mbox",auto_uido,auto_gidq,0644);
+ c(home,"doc","INSTALL.vsm",auto_uido,auto_gidq,0644);
+ c(home,"doc","TEST.deliver",auto_uido,auto_gidq,0644);
+ c(home,"doc","TEST.receive",auto_uido,auto_gidq,0644);
+ c(home,"doc","REMOVE.sendmail",auto_uido,auto_gidq,0644);
+ c(home,"doc","REMOVE.binmail",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2alias",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2ext",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2local",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2rem",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.local2virt",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.nullclient",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.relaybad",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.relaygood",auto_uido,auto_gidq,0644);
+ c(home,"doc","PIC.rem2local",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","addresses.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","addresses.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","envelopes.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","envelopes.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","maildir.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","maildir.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","mbox.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","mbox.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","dot-qmail.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","dot-qmail.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-control.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-control.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-header.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-header.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-log.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-log.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","qmail-users.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","qmail-users.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man5","tcp-environ.5",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat5","tcp-environ.0",auto_uido,auto_gidq,0644);
+ c(home,"bin","qmail-queue",auto_uidq,auto_gidq,04711);
+ c(home,"bin","qmail-lspawn",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-start",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-getpw",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-local",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-remote",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-rspawn",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-clean",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-send",auto_uido,auto_gidq,0711);
+ c(home,"bin","splogger",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-newu",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-newmrh",auto_uido,auto_gidq,0700);
+ c(home,"bin","qmail-pw2u",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-inject",auto_uido,auto_gidq,0755);
+ c(home,"bin","predate",auto_uido,auto_gidq,0755);
+ c(home,"bin","datemail",auto_uido,auto_gidq,0755);
+ c(home,"bin","mailsubj",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-showctl",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qread",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qstat",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-tcpto",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-tcpok",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-pop3d",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-popup",auto_uido,auto_gidq,0711);
+ c(home,"bin","qmail-qmqpc",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qmqpd",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-qmtpd",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-smtpd",auto_uido,auto_gidq,0755);
+ c(home,"bin","qmail-valid-addresses",auto_uido,auto_gidq,0755);
+ c(home,"bin","sendmail",auto_uido,auto_gidq,0755);
+ c(home,"bin","tcp-env",auto_uido,auto_gidq,0755);
+ c(home,"bin","qreceipt",auto_uido,auto_gidq,0755);
+ c(home,"bin","qsmhook",auto_uido,auto_gidq,0755);
+ c(home,"bin","qbiff",auto_uido,auto_gidq,0755);
+ c(home,"bin","forward",auto_uido,auto_gidq,0755);
+ c(home,"bin","preline",auto_uido,auto_gidq,0755);
+ c(home,"bin","condredirect",auto_uido,auto_gidq,0755);
+ c(home,"bin","bouncesaying",auto_uido,auto_gidq,0755);
+ c(home,"bin","except",auto_uido,auto_gidq,0755);
+ c(home,"bin","maildirmake",auto_uido,auto_gidq,0755);
+ c(home,"bin","maildir2mbox",auto_uido,auto_gidq,0755);
+ c(home,"bin","maildirwatch",auto_uido,auto_gidq,0755);
+ c(home,"bin","qail",auto_uido,auto_gidq,0755);
+ c(home,"bin","elq",auto_uido,auto_gidq,0755);
+ c(home,"bin","pinq",auto_uido,auto_gidq,0755);
- c(auto_qmail,"man/man7","forgeries.7",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat7","forgeries.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man7","qmail-limits.7",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat7","qmail-limits.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man7","qmail.7",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat7","qmail.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","addresses.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","addresses.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","envelopes.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","envelopes.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","maildir.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","maildir.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","mbox.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","mbox.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","dot-qmail.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","dot-qmail.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-control.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-control.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-header.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-header.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-log.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-log.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","qmail-users.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","qmail-users.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man5","tcp-environ.5",auto_uido,auto_gidq,0644);
+ c(home,"man/cat5","tcp-environ.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","forward.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","forward.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","condredirect.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","condredirect.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","bouncesaying.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","bouncesaying.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","except.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","except.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","maildirmake.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","maildirmake.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","maildir2mbox.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","maildir2mbox.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","maildirwatch.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","maildirwatch.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","mailsubj.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","mailsubj.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","qreceipt.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","qreceipt.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","qbiff.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","qbiff.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","preline.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","preline.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","tcp-env.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","tcp-env.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man7","forgeries.7",auto_uido,auto_gidq,0644);
+ c(home,"man/cat7","forgeries.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man7","qmail-limits.7",auto_uido,auto_gidq,0644);
+ c(home,"man/cat7","qmail-limits.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man7","qmail.7",auto_uido,auto_gidq,0644);
+ c(home,"man/cat7","qmail.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-local.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-local.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-lspawn.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-lspawn.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-getpw.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-getpw.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-remote.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-remote.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-rspawn.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-rspawn.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-clean.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-clean.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-send.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-send.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-start.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-start.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","splogger.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","splogger.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-queue.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-queue.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-inject.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-inject.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-showctl.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-showctl.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-newmrh.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-newmrh.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-newu.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-newu.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-pw2u.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-pw2u.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qread.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qread.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qstat.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qstat.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-tcpok.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-tcpok.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-tcpto.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-tcpto.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-pop3d.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-pop3d.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-popup.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-popup.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qmqpc.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qmqpc.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qmqpd.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qmqpd.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-qmtpd.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-qmtpd.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-smtpd.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-smtpd.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man8","qmail-command.8",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat8","qmail-command.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","forward.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","forward.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","condredirect.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","condredirect.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","bouncesaying.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","bouncesaying.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","except.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","except.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","maildirmake.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","maildirmake.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","maildir2mbox.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","maildir2mbox.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","maildirwatch.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","maildirwatch.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","mailsubj.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","mailsubj.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","qreceipt.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","qreceipt.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","qbiff.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","qbiff.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","preline.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","preline.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","tcp-env.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","tcp-env.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"bin","dot-forward",auto_uido,auto_gidq,0755);
+ c(home,"man/man8","qmail-local.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-local.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-lspawn.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-lspawn.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-getpw.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-getpw.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-remote.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-remote.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-rspawn.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-rspawn.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-clean.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-clean.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-send.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-send.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-start.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-start.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","splogger.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","splogger.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-queue.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-queue.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-inject.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-inject.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-showctl.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-showctl.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-newmrh.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-newmrh.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-newu.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-newu.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-pw2u.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-pw2u.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qread.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qread.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qstat.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qstat.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-tcpok.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-tcpok.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-tcpto.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-tcpto.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-pop3d.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-pop3d.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-popup.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-popup.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qmqpc.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qmqpc.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qmqpd.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qmqpd.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-qmtpd.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-qmtpd.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-smtpd.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-smtpd.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man8","qmail-command.8",auto_uido,auto_gidq,0644);
+ c(home,"man/cat8","qmail-command.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","dot-forward.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","dot-forward.0",auto_uido,auto_gidq,0644);
+ c(home,"bin","dot-forward",auto_uido,auto_gidq,0755);
- d(auto_qmail,"doc/fastforward",auto_uido,auto_gidq,0755);
+ c(home,"man/man1","dot-forward.1",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","dot-forward.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"bin","fastforward",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","printforward",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","setforward",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","newaliases",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","printmaillist",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","setmaillist",auto_uido,auto_gidq,0755);
- c(auto_qmail,"bin","newinclude",auto_uido,auto_gidq,0755);
+ d(home,"doc/fastforward",auto_uido,auto_gidq,0755);
- c(auto_qmail,"doc/fastforward","ALIASES",auto_uido,auto_gidq,0644);
+ c(home,"bin","fastforward",auto_uido,auto_gidq,0755);
+ c(home,"bin","printforward",auto_uido,auto_gidq,0755);
+ c(home,"bin","setforward",auto_uido,auto_gidq,0755);
+ c(home,"bin","newaliases",auto_uido,auto_gidq,0755);
+ c(home,"bin","printmaillist",auto_uido,auto_gidq,0755);
+ c(home,"bin","setmaillist",auto_uido,auto_gidq,0755);
+ c(home,"bin","newinclude",auto_uido,auto_gidq,0755);
- c(auto_qmail,"man/man1","fastforward.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","printforward.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","setforward.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","newaliases.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","printmaillist.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","setmaillist.1",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/man1","newinclude.1",auto_uido,auto_gidq,0644);
+ c(home,"doc/fastforward","ALIASES",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","fastforward.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","printforward.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","setforward.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","newaliases.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","printmaillist.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","setmaillist.0",auto_uido,auto_gidq,0644);
- c(auto_qmail,"man/cat1","newinclude.0",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","fastforward.1",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","printforward.1",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","setforward.1",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","newaliases.1",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","printmaillist.1",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","setmaillist.1",auto_uido,auto_gidq,0644);
+ c(home,"man/man1","newinclude.1",auto_uido,auto_gidq,0644);
+
+ c(home,"man/cat1","fastforward.0",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","printforward.0",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","setforward.0",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","newaliases.0",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","printmaillist.0",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","setmaillist.0",auto_uido,auto_gidq,0644);
+ c(home,"man/cat1","newinclude.0",auto_uido,auto_gidq,0644);
}
strerr_die6sys(111,FATAL,"unable to chmod ",home,"/",file,": ");
}
-void main()
+void main(argc,argv)
+int argc;
+char *argv[];
{
+ char *home = 0;
+ if (argc > 1)
+ home = argv[1];
fdsourcedir = open_read(".");
if (fdsourcedir == -1)
strerr_die2sys(111,FATAL,"unable to open current directory: ");
umask(077);
- hier();
+ hier(home);
_exit(0);
}
perm("",home,"/",file,S_IFREG,uid,gid,mode);
}
-void main()
+void main(argc,argv)
+int argc;
+char *argv[];
{
- hier();
+ char *home = 0;
+ if (argc > 1)
+ home = argv[1];
+ hier(home);
_exit(0);
}
echo To: ${1+"$@"}
echo ''
cat
-) | QMAIL/bin/qmail-inject
+) | /usr/sbin/qmail-inject
-QMAIL/bin/maildir2mbox && exec pine ${1+"$@"}
+/usr/bin/maildir2mbox && exec pine ${1+"$@"}
# Using dot-forward to support sendmail-style ~/.forward files.
# Using procmail to deliver messages to /var/spool/mail/$USER by default.
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start '|dot-forward .forward
|preline procmail' splogger qmail
# Using splogger to send the log through syslog.
# Using procmail to deliver messages to /var/spool/mail/$USER by default.
-exec env - PATH="QMAIL/bin:$PATH" \
+exec env - PATH="/usr/bin:/usr/sbin$PATH" \
qmail-start '|preline procmail' splogger qmail
-QMAIL/bin/maildir2mbox && exec Mail ${1+"$@"}
+/usr/bin/maildir2mbox && exec Mail ${1+"$@"}
.I qmqpservers \fR(none) \fRqmail-qmqpc
.I queuelifetime \fR604800 \fRqmail-send
.I rcpthosts \fR(none) \fRqmail-smtpd
+.I relayhosts \fR(none) \fRqmail-smtpd
.I smtpgreeting \fIme \fRqmail-smtpd
.I smtproutes \fR(none) \fRqmail-remote
.I timeoutconnect \fR60 \fRqmail-remote
stralloc cmds = {0};
stralloc messline = {0};
stralloc foo = {0};
+stralloc qsender = {0};
+stralloc tmpline = {0};
+char *verhhost = (char *)0;
+char *verhlocal = (char *)0;
+int flagheader,flagdobody;
+unsigned int i;
+
+int verhline(sa)
+stralloc *sa;
+/* substitutes ##L => recipient local, ##H => recipient host if VERP sender */
+/* returns 0 normally, -1 on out-of-memory */
+{
+ register char *cp;
+ char *cpnext,*cpafter;
+
+ if (!verhlocal) return 0; /* no VERP SENDER */
+ cp = sa->s;
+ cpnext = sa->s;
+ cpafter = cp + sa->len;
+ tmpline.len = 0; /* clear */
+ for (;;) {
+ while (cp < cpafter && *cp++ != '#');
+ if (cp + 1 < cpafter && *cp == '#') { /* found '##' */
+ cp++;
+ if (*cp == 'L') { /* ##L */
+ if (!stralloc_catb(&tmpline,cpnext,cp - cpnext - 2)) return -1;
+ cp++;
+ cpnext = cp;
+ if (!stralloc_cats(&tmpline,verhlocal)) return -1;
+ } else if (*cp == 'H') { /* ##H */
+ if (!stralloc_catb(&tmpline,cpnext,cp - cpnext - 2)) return -1;
+ cp++;
+ cpnext = cp;
+ if (!stralloc_cats(&tmpline,verhhost)) return -1;
+ }
+ }
+ if (cp >= cpafter) {
+ if (tmpline.len) { /* true if we've done any substitutions */
+ if (!stralloc_catb(&tmpline,cpnext,cpafter - cpnext)) return -1;
+ if (!stralloc_copy(sa,&tmpline)) return -1;
+ }
+ return 0;
+ }
+ }
+}
char buf[1024];
char outbuf[1024];
char host[64];
char *s;
int loop;
+ int match;
struct stat st;
int fd;
substdio ss;
if (substdio_put(&ssout,rpline.s,rpline.len) == -1) goto fail;
if (substdio_put(&ssout,dtline.s,dtline.len) == -1) goto fail;
- switch(substdio_copy(&ssout,&ss))
- {
- case -2: tryunlinktmp(); _exit(4);
- case -3: goto fail;
- }
+ flagheader = 1;
+ flagdobody = 0;
+ do { /* for VERH */
+ if (getln(&ss,&messline,&match,'\n') != 0)
+ { tryunlinktmp(); _exit(4); }
+ if (flagheader) {
+ if (match && messline.len == 1) {
+ flagheader = 0;
+ if (!flagdobody) verhlocal = (char *)0;
+ }
+ if (messline.s[0] == '#') { /* continue in body */
+ flagdobody = 1; /* remove leading '#' */
+ for (i = 1; i < messline.len; i++)
+ messline.s[i - 1] = messline.s[i];
+ messline.len--; /* always >= 1 from \n */
+ }
+ }
+ if (verhlocal)
+ if (verhline(&messline) == -1) goto fail;
+ if (substdio_put(&ssout,messline.s,messline.len) == -1) goto fail;
+ } while (match);
if (substdio_flush(&ssout) == -1) goto fail;
if (fsync(fd) == -1) goto fail;
substdio_fdbuf(&ss,read,0,buf,sizeof(buf));
substdio_fdbuf(&ssout,write,fd,outbuf,sizeof(outbuf));
+ flagheader = 1;
+ flagdobody = 0;
if (substdio_put(&ssout,ufline.s,ufline.len)) goto writeerrs;
if (substdio_put(&ssout,rpline.s,rpline.len)) goto writeerrs;
if (substdio_put(&ssout,dtline.s,dtline.len)) goto writeerrs;
if (!match && !messline.len) break;
if (gfrom(messline.s,messline.len))
if (substdio_bput(&ssout,">",1)) goto writeerrs;
+ if (flagheader) {
+ if (match && messline.len == 1) {
+ if (!flagdobody) verhlocal = (char *)0;
+ flagheader = 0;
+ }
+ if (messline.s[0] == '#') { /* continue in body */
+ flagdobody = 1; /* remove leading '#' */
+ for (i = 1; i < messline.len; i++)
+ messline.s[i - 1] = messline.s[i];
+ messline.len--;
+ }
+ }
+ if (verhlocal)
+ if (verhline(&messline) == -1) goto writeerrs;
if (substdio_bput(&ssout,messline.s,messline.len)) goto writeerrs;
if (!match)
{
if (qmail_open(&qqt) == -1) temp_fork();
mailforward_qp = qmail_qp(&qqt);
qmail_put(&qqt,dtline.s,dtline.len);
+ flagheader = 1;
do
{
if (getln(&ss,&messline,&match,'\n') != 0) { qmail_fail(&qqt); break; }
+ if (flagheader) {
+ if (match && messline.len == 1) {
+ flagheader = 0;
+ if (!flagdobody) verhlocal = (char *)0;
+ }
+ if (messline.s[0] == '#') { /* continue in body */
+ flagdobody = 1; /* remove leading '#' */
+ for (i = 1; i < messline.len; i++)
+ messline.s[i - 1] = messline.s[i];
+ messline.len--;
+ }
+ }
+ if (verhlocal)
+ if (verhline(&messline) == -1) { qmail_fail(&qqt); break; }
qmail_put(&qqt,messline.s,messline.len);
}
while (match);
datetime_sec starttime;
int flagforwardonly;
char *x;
+ char *cplast;
umask(077);
sig_pipeignore();
if (!env_put2("SENDER",sender)) temp_nomem();
- if (!quote2(&foo,sender)) temp_nomem();
+ if (!quote2(&qsender,sender)) temp_nomem();
if (!stralloc_copys(&rpline,"Return-Path: <")) temp_nomem();
- if (!stralloc_cat(&rpline,&foo)) temp_nomem();
+ if (!stralloc_cat(&rpline,&qsender)) temp_nomem();
for (i = 0;i < rpline.len;++i) if (rpline.s[i] == '\n') rpline.s[i] = '_';
if (!stralloc_cats(&rpline,">\n")) temp_nomem();
if (!stralloc_0(&foo)) temp_nomem();
if (!env_put2("RPLINE",foo.s)) temp_nomem();
+ i = byte_rchr(qsender.s,qsender.len,'@'); /* for VERH */
+ if (i != qsender.len) { /* got @ */
+ cplast = qsender.s + i;
+ *cplast = '\0';
+ if (qsender.s[i = str_rchr(qsender.s,'=')]) { /* got = */
+ qsender.s[i] = '\0';
+ cplast = qsender.s + i;
+ verhhost = qsender.s + i + 1;
+ i = str_rchr(qsender.s,'-');
+ if (qsender.s[i] == '-') {
+ for (;;) {
+ if (case_starts(qsender.s + i + 1,"return-")) {
+ verhlocal = qsender.s + i + 9 + str_chr(qsender.s + i + 8,'-');
+ /* here to avoid work if not VERP */
+ /* verhhost not used if verhlocal=0 */
+ for (x = verhlocal; x < cplast; x++)
+ if (*x == '\n') *x = '_'; /* \n would ruin */
+ break;
+ }
+ j = byte_rchr(qsender.s,i,'-');
+ if (j == i) break;
+ i = j;
+ }
+ }
+ }
+ }
+
if (!stralloc_copys(&ufline,"From ")) temp_nomem();
if (*sender)
{
}
if (pipe(pi) == -1) _exit(QLX_SYS);
- args[0] = "bin/qmail-getpw";
+ args[0] = "/usr/sbin/qmail-getpw";
args[1] = local;
args[2] = 0;
switch(gpwpid = vfork())
x = nughde.s;
xlen = nughde.len;
- args[0] = "bin/qmail-local";
+ args[0] = "/usr/sbin/qmail-local";
args[1] = "--";
args[2] = x;
n = byte_chr(x,xlen,0); if (n++ == xlen) _exit(QLX_USAGE); x += n; xlen -= n;
zerodie();
}
+stralloc verh = {0}; /* quoted recipient */
+int flagverh; /* argc */
+char *vp; /* argv[3] */
+
void blast()
{
+ unsigned int posat, i;
+ int flagdobody,flagheader;
int r;
char ch;
+ posat = 0; /* stays 0 if no VERH */
+ flagdobody = 0; /* => 0 at first blank line */
+ flagheader = 1;
+ if (flagverh == 4) { /* only if single recipient */
+ if (!quote2(&verh,vp)) temp_nomem(); /* non-canonicalized */
+ for (i = 0; i < verh.len; i++) /* \n would destroy message */
+ if (verh.s[i] == '\n') verh.s[i] = '_';
+ posat = byte_rchr(verh.s,verh.len,'@'); /* posat=0 if no VERH */
+ if (posat == verh.len) posat = 0;
+ }
for (;;) {
r = substdio_get(&ssin,&ch,1);
if (r == 0) break;
if (r == -1) temp_read();
if (ch == '.')
substdio_put(&smtpto,".",1);
+ if (flagheader) {
+ if (ch == '\n') { /* header ends */
+ flagheader = 0;
+ if (!flagdobody) posat = 0;
+ } else if (ch == '#') { /* # starting line => VERH ... */
+ flagdobody = 1; /* continues in body and ... */
+ continue; /* character is suppressed. */
+ }
+ }
while (ch != '\n') {
- substdio_put(&smtpto,&ch,1);
+ if (ch == '#' && posat) { /* ... # */
+ r = substdio_get(&ssin,&ch,1);
+ if (r == 0) perm_partialline();
+ if (r == -1) temp_read();
+ if (ch == '#') { /* ... ## */
+ register char ch1;
+ ch1 = *substdio_peek(&ssin);
+ if (ch1 != 'L' && ch1 != 'H') { /* ... ##x x!=L x!=H */
+ substdio_put(&smtpto,"#",1);
+ continue;
+ }
+ r = substdio_get(&ssin,&ch,1);
+ if (r == 0) perm_partialline();
+ if (r == -1) temp_read();
+ if (ch == 'L') /* ... ##L */
+ substdio_put(&smtpto,verh.s,posat);
+ else /* ... ##H */
+ substdio_put(&smtpto,verh.s + posat + 1,verh.len - posat - 1);
+ } else {
+ substdio_put(&smtpto,"#",1);
+ if (ch == '\n') break;
+ substdio_put(&smtpto,&ch,1);
+ }
+ } else
+ substdio_put(&smtpto,&ch,1);
r = substdio_get(&ssin,&ch,1);
if (r == 0) perm_partialline();
if (r == -1) temp_read();
sig_pipeignore();
if (argc < 4) perm_usage();
+ flagverh = argc;
+ vp = argv[3];
if (chdir(auto_qmail) == -1) temp_chdir();
getcontrols();
stralloc bouncehost = {0};
stralloc doublebounceto = {0};
stralloc doublebouncehost = {0};
+stralloc control_idhost = {0};
char strnum2[FMT_ULONG];
char strnum3[FMT_ULONG];
while (!newfield_datemake(now())) nomem();
qmail_put(&qqt,newfield_date.s,newfield_date.len);
+ while (!newfield_msgidmake(control_idhost.s,control_idhost.len,now()))
+ nomem();
+ qmail_put(&qqt,newfield_msgid.s,newfield_msgid.len);
qmail_puts(&qqt,"From: ");
while (!quote("ed,&bouncefrom)) nomem();
qmail_put(&qqt,quoted.s,quoted.len);
if (!stralloc_cats(&doublebounceto,"@")) return 0;
if (!stralloc_cat(&doublebounceto,&doublebouncehost)) return 0;
if (!stralloc_0(&doublebounceto)) return 0;
+ if (control_rldef(&control_idhost, "control/idhost",1,"idhost") != 1)
+ return 0;
if (control_readfile(&locals,"control/locals",1) != 1) return 0;
if (!constmap_init(&maplocals,locals.s,locals.len,0)) return 0;
switch(control_readfile(&percenthack,"control/percenthack",0))
else
substdio_puts(subfdout,"Modified recently enough; hopefully up to date.\n");
+ do_lst("relayhosts","No relayhosts","Relay host: ","");
do_str("smtpgreeting",1,"smtpgreeting","SMTP greeting: 220 ");
do_lst("smtproutes","No artificial SMTP routes.","SMTP route: ","");
do_int("timeoutconnect","60","SMTP client connection timeout is "," seconds");
if (str_equal(d->d_name,"qmqpservers")) continue;
if (str_equal(d->d_name,"queuelifetime")) continue;
if (str_equal(d->d_name,"rcpthosts")) continue;
+ if (str_equal(d->d_name,"relayhosts")) continue;
if (str_equal(d->d_name,"smtpgreeting")) continue;
if (str_equal(d->d_name,"smtproutes")) continue;
if (str_equal(d->d_name,"timeoutconnect")) continue;
even though such messages violate the SMTP protocol.
.SH "CONTROL FILES"
.TP 5
+.I addrcheck.cdb
+A database of acceptable mailboxes. If present, this is used to report
+erroneous RCPT TO commands, which can reduce the amount of junk mail
+accepted. It contains an encoding of the virtual domains map
+.RB ( \c
+.BI V domain
+maps to
+.IR prefix ),
+the local domains
+.RB ( \c
+.BI @ domain
+maps to an empty string), and the available local parts
+.RB ( \c
+.BI L mailbox
+maps to
+.B +
+if the address is valid or
+.B \-
+if not). It's best made using
+.BR qmail-valid-addresses (8).
+.TP 5
+.I addrcheck-delay
+Delay in seconds before reporting bad mailbox names after the
+.I addrcheck-slow
+limit is reached. The default is 2.
+.TP 5
+.I addrcheck-limit
+Number of bad mailbox names to tolerate before dropping the connection.
+Zero means an infinite number. The default is 50.
+.TP 5
+.I addrcheck-slow
+Number of bad mailbox names to tolerate before imposing delays. The
+default is 5.
+.TP 5
.I badmailfrom
Unacceptable envelope sender addresses.
.B qmail-smtpd
.B qmail-smtpd
will reject
any envelope recipient address with a domain not listed in
-.IR rcpthosts .
-
-Exception:
-If the environment variable
-.B RELAYCLIENT
-is set,
-.B qmail-smtpd
-will ignore
-.IR rcpthosts ,
-and will append the value of
-.B RELAYCLIENT
-to each incoming recipient address.
+.I rcpthosts
+unless the sending host is a designated relay client (see the
+description of the
+.I relayhosts
+file beow).
.I rcpthosts
may include wildcards:
Envelope recipient addresses without @ signs are
always allowed through.
.TP 5
+.I relayhosts
+Allowed relay clients. Each line is a host-suffix pair, separated by a
+colon. If the client's hostname matches one of the hostnames in the
+file, that client is permitted to send mail to any host (i.e., to use us
+as a relay), and the corresponding suffix is appended to all recipient
+addresses generated by the client.
+
+.I relayhosts
+may include wildcards:
+
+.EX
+ heaven.af.mil:
+ .heaven.af.mil:
+ hell.irs.gov:.irs.virtdomain
+.EE
+
+For historical reasons, the
+.B RELAYCLIENT
+environment variable overrides this table. If
+.B RELAYCLIENT
+is set, it has the same effect as there being a matching entry in the
+.I relayhosts
+file, using the value of
+.B RELAYCLIENT
+as the suffix.
+.TP 5
.I smtpgreeting
SMTP greeting message.
Default:
#include "now.h"
#include "exit.h"
#include "rcpthosts.h"
+#include "addrcheck.h"
#include "timeoutread.h"
#include "timeoutwrite.h"
#include "commands.h"
void die_nomem() { out("421 out of memory (#4.3.0)\r\n"); flush(); _exit(1); }
void die_control() { out("421 unable to read controls (#4.3.0)\r\n"); flush(); _exit(1); }
void die_ipme() { out("421 unable to figure out my IP addresses (#4.3.0)\r\n"); flush(); _exit(1); }
+void die_badaddr() { out("553 too many bad recipients: sulking (#5.5.1)\r\n"); flush(); _exit(1); }
void straynewline() { out("451 See http://pobox.com/~djb/docs/smtplf.html.\r\n"); flush(); _exit(1); }
void err_bmf() { out("553 sorry, your envelope sender is in my badmailfrom list (#5.7.1)\r\n"); }
void err_nogateway() { out("553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)\r\n"); }
+void err_badaddr() { out("553 unknown mailbox (#5.1.1)\r\n"); }
void err_unimpl() { out("502 unimplemented (#5.5.1)\r\n"); }
void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); }
void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); }
int liphostok = 0;
stralloc liphost = {0};
+int relayhostsok = 0;
+stralloc relayhosts = {0};
+struct constmap maprelayhosts;
int bmfok = 0;
stralloc bmf = {0};
struct constmap mapbmf;
+static int ac_slow = 5;
+static int ac_limit = 50;
+static int ac_delay = 2;
+static int ac_count = 0;
+static int ac_fd = -1;
void setup()
{
if (bmfok == -1) die_control();
if (bmfok)
if (!constmap_init(&mapbmf,bmf.s,bmf.len,0)) die_nomem();
+
+ switch (control_readfile(&relayhosts, "control/relayhosts", 0)) {
+ case -1:
+ die_control();
+ case 1:
+ relayhostsok = 1;
+ if (!constmap_init(&maprelayhosts, relayhosts.s, relayhosts.len, 1))
+ die_nomem();
+ }
+
+ if (control_readint(&ac_slow, "control/addrcheck-slow") == -1 ||
+ control_readint(&ac_slow, "control/addrcheck-limit") == -1 ||
+ control_readint(&ac_slow, "control/addrcheck-delay") == -1)
+ die_control();
+
+ if ((ac_fd = open_read("control/addrcheck.cdb")) < 0 && errno != error_noent)
+ die_control();
if (control_readint(&databytes,"control/databytes") == -1) die_control();
x = env_get("DATABYTES");
if (!remotehost) remotehost = "unknown";
remoteinfo = env_get("TCPREMOTEINFO");
relayclient = env_get("RELAYCLIENT");
+ if (!relayclient && relayhostsok) {
+ int j;
+ int l = str_len(remotehost);
+ relayclient = constmap(&maprelayhosts, remotehost, l);
+ if (!relayclient) for (j = 0; j < l; ++j) {
+ if (remotehost[j] == '.' &&
+ (relayclient = constmap(&maprelayhosts,
+ remotehost + j,
+ l - j)) != 0)
+ break;
+ }
+ }
dohelo(remotehost);
}
}
else
if (!addrallowed()) { err_nogateway(); return; }
+ if (ac_fd != -1) {
+ int rc;
+ if (addrcheck(ac_fd, addr.s, mailfrom.s, &rc) < 0) {
+ if (errno == error_nomem)
+ die_nomem();
+ else
+ die_control();
+ }
+ if (!rc) {
+ ac_count++;
+ if (ac_limit && ac_count >= ac_limit) die_badaddr();
+ if (ac_delay && ac_count >= ac_slow) sleep(ac_delay);
+ err_badaddr();
+ return;
+ }
+ }
if (!stralloc_cats(&rcptto,"T")) die_nomem();
if (!stralloc_cats(&rcptto,addr.s)) die_nomem();
if (!stralloc_0(&rcptto)) die_nomem();
--- /dev/null
+#! /usr/bin/python
+
+import os
+import cdb
+from errno import *
+
+def sort(l):
+ l = [] + l
+ l.sort()
+ return l
+class struct (object):
+ def __init__(me, **kw):
+ me.__dict__.update(kw)
+ def __repr__(me):
+ return (type(me).__name__ +
+ '(' +
+ ', '.join(['%s = %r' % (k, me.__dict__[k])
+ for k in me.__dict__
+ if k[0] != '_']) +
+ ')')
+class userentry (struct):
+ pass
+
+os.chdir('/var/qmail')
+
+umap = {}
+udb = cdb.init('users/cdb')
+for k in udb.keys():
+ if len(k) == 0 or k[0] != '!':
+ continue
+ v = udb[k].split('\0')
+ u = userentry(user = v[0], uid = int(v[1]), gid = int(v[2]), home = v[3],
+ dash = v[4], pre = v[5])
+ if k[-1] == '\0':
+ u.name = k[1:-1]
+ u.wild = 0
+ else:
+ u.name = k[1:]
+ u.wild = 1
+ umap[u.name] = u
+del udb
+
+map = {}
+def addlocal(u, p, l, forcep = False):
+ l = 'L' + l
+ if not os.path.exists(p):
+ if forcep:
+ map[l] = '+'
+ return
+ f = open(p)
+ top = f.readline()
+ f.close()
+ if len(top) > 1 and top[0:2] == '#!':
+ map[l] = '-'
+ elif len(top) > 1 and top[0:2] == '#?':
+ name = u.name
+ if name[-1] == '-':
+ name = name[:-1]
+ map[l] = '?' + name
+ else:
+ map[l] = '+'
+for k in sort(umap.keys()):
+ u = umap[k]
+ qm = '.qmail' + u.dash + u.pre
+ qmlen = len(qm)
+ if u.wild:
+ for p in os.listdir(u.home):
+ if not p.startswith(qm):
+ continue
+ ext = p[qmlen:]
+ addlocal(u, os.path.join(u.home, p), u.name + ext)
+ else:
+ addlocal(u, os.path.join(u.home, qm), u.name, u.dash == '')
+
+me = open('control/me').readline()
+
+try:
+ for dom in open('control/locals'):
+ if len(dom) and dom[-1] == '\n':
+ dom = dom[:-1]
+ map['@' + dom] = ''
+except IOError, exc:
+ if exc.errno != ENOENT:
+ raise
+ map['@' + me] = ''
+
+try:
+ for v in open('control/virtualdomains'):
+ if len(v) and v[-1] == '\n':
+ v = v[:-1]
+ (addr, pre) = v.split(':', 2)
+ map['V' + addr] = pre
+except IOError, exc:
+ if exc.errno != ENOENT:
+ raise
+
+for l in sort(map.keys()):
+ print '%s:%s' % (l, map[l])
--- /dev/null
+.TH qmail-valid-addresses 8
+.SH NAME
+qmail-valid-addresses \- prepare addresses for use with qmail-smtpd
+.SH SYNOPSIS
+.B qmail-valid-addresses
+.SH DESCRIPTION
+.B qmail-valid-addresses
+scans the
+.B users/cdb
+file, and the
+.B local
+and
+.B virtualdomain
+control files, and emits a textual representation of the required
+.I addrcheck
+database in a form acceptable to
+.BR cdb-map (8).
+.SH "SEE ALSO"
+qmail-smtpd(8),
+cdb-map(1).
#include "fd.h"
#include "qmail.h"
#include "auto_qmail.h"
+#include "env.h"
-static char *binqqargs[2] = { "bin/qmail-queue", 0 } ;
+static char *binqqargs[2] = { 0, 0 } ;
+
+static void setup_qqargs()
+{
+ if(!binqqargs[0])
+ binqqargs[0] = env_get("QMAILQUEUE");
+ if(!binqqargs[0])
+ binqqargs[0] = "/usr/sbin/qmail-queue";
+}
int qmail_open(qq)
struct qmail *qq;
int pim[2];
int pie[2];
+ setup_qqargs();
+
if (pipe(pim) == -1) return -1;
if (pipe(pie) == -1) { close(pim[0]); close(pim[1]); return -1; }
_exit(100);
}
-char *smtpdarg[] = { "bin/qmail-smtpd", 0 };
+char *smtpdarg[] = { "/usr/sbin/qmail-smtpd", 0 };
void smtpd()
{
if (!env_get("PROTO")) {
_exit(111);
}
-char *qreadarg[] = { "bin/qmail-qread", 0 };
+char *qreadarg[] = { "/usr/sbin/qmail-qread", 0 };
void mailq()
{
execv(*qreadarg,qreadarg);
if (!qiargv) nomem();
arg = qiargv;
- *arg++ = "bin/qmail-inject";
+ *arg++ = "/usr/sbin/qmail-inject";
*arg++ = (flagh ? "-H" : "-a");
if (sender) {
*arg++ = "-f";