qmail 1.03
This commit is contained in:
parent
d15ee51c9d
commit
f5df10d173
43 changed files with 1675 additions and 1010 deletions
24
BIN.Makefile
Normal file
24
BIN.Makefile
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
SHELL=/bin/sh
|
||||||
|
|
||||||
|
# Files are edited in the installation directory, then copied.
|
||||||
|
# There are 40 arguments to idedit after the filename,
|
||||||
|
# showing the positions of each byte in the following ten ints:
|
||||||
|
# uida, uidd, uidl, uido, uidp, uidq, uidr, uids, gidq, gidn.
|
||||||
|
# Normal little-endian positions are n n+1 n+2 ... n+39 for some n.
|
||||||
|
# Normal big-endian positions are n+3 n+2 n+1 n n+7 ... n+36 for some n.
|
||||||
|
|
||||||
|
setup:
|
||||||
|
mkdir /var/qmail
|
||||||
|
./idedit install-big XXX
|
||||||
|
./idedit qmail-lspawn XXX
|
||||||
|
./idedit qmail-queue XXX
|
||||||
|
./idedit qmail-rspawn XXX
|
||||||
|
./idedit qmail-showctl XXX
|
||||||
|
./idedit qmail-start XXX
|
||||||
|
./install-big
|
||||||
|
cp /var/qmail/boot/binm1+df /var/qmail/rc
|
||||||
|
chmod 755 /var/qmail/rc
|
||||||
|
echo '|fastforward -d /etc/aliases.cdb' > /var/qmail/alias/.qmail-default
|
||||||
|
chmod 644 /var/qmail/alias/.qmail-default
|
||||||
|
hostname | grep -q '\.'
|
||||||
|
./config-fast `hostname`
|
||||||
19
BIN.README
Normal file
19
BIN.README
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
Like any other piece of software (and information generally), qmail
|
||||||
|
comes with NO WARRANTY.
|
||||||
|
|
||||||
|
Configuration: The qmail home directory is /var/qmail. (This must be a
|
||||||
|
local directory, not shared among machines. Under Linux, make sure that
|
||||||
|
all mail-handling filesystems are mounted with synchronous metadata.)
|
||||||
|
The user-ext delimiter is -. The silent concurrency limit is 120. The
|
||||||
|
queue subdirectory split is 23.
|
||||||
|
|
||||||
|
To install:
|
||||||
|
# make setup
|
||||||
|
|
||||||
|
To set up qmail to receive and deliver mail, follow the instructions in
|
||||||
|
/var/qmail/doc/fastforward/ALIASES, and then start at step 9 of
|
||||||
|
/var/qmail/doc/INSTALL.
|
||||||
|
|
||||||
|
Compilation environment: Oops, the package creator forgot to edit this!
|
||||||
|
He's supposed to list his OS version, compiler version, hardware, and
|
||||||
|
name.
|
||||||
2
BLURB3
2
BLURB3
|
|
@ -83,7 +83,7 @@ Local delivery (qmail-local):
|
||||||
* user-controlled program delivery: procmail etc. (qmail-command)
|
* user-controlled program delivery: procmail etc. (qmail-command)
|
||||||
* optional new-mail notification (qbiff)
|
* optional new-mail notification (qbiff)
|
||||||
* optional NRUDT return receipts (qreceipt)
|
* optional NRUDT return receipts (qreceipt)
|
||||||
* conditional filtering (condredirect)
|
* conditional filtering (condredirect, bouncesaying)
|
||||||
|
|
||||||
POP3 service (qmail-popup, qmail-pop3d):
|
POP3 service (qmail-popup, qmail-pop3d):
|
||||||
* RFC 1939
|
* RFC 1939
|
||||||
|
|
|
||||||
39
CHANGES
39
CHANGES
|
|
@ -1,3 +1,42 @@
|
||||||
|
19980615 version: qmail 1.03.
|
||||||
|
19980614 doc: eliminated BIN.setup in favor of a web page.
|
||||||
|
19980614 code: added other auto* to qmail-showctl output.
|
||||||
|
19980614 doc: added pointer to immhf.html in qmail-header.5.
|
||||||
|
19980614 doc: added note to TEST.receive about SMTP command format.
|
||||||
|
19980614 doc: added FAQ 5.6 on qmail-qmqpd.
|
||||||
|
19980614 code: removed unused variables in idedit.c.
|
||||||
|
19980613 code: changed conf-patrn to 002.
|
||||||
|
19980613 doc: moved SENDMAIL lower in INSTALL.
|
||||||
|
19980612 code: added install-big.
|
||||||
|
19980612 code: added BIN.Makefile.
|
||||||
|
19980612 doc: added BIN.README, BIN.setup.
|
||||||
|
19980612 code: switched to new install.
|
||||||
|
19980611 code: added idedit.
|
||||||
|
19980611 doc: added FAQ 1.3 on $QMAILMFTFILE.
|
||||||
|
19980611 doc: used bouncesaying in FAQ 5.5.
|
||||||
|
19980611 code: added except.
|
||||||
|
19980611 code: added bouncesaying.
|
||||||
|
19980611 code: allowed unbracketed IP addresses in dns_ipplus() and
|
||||||
|
dns_mxip().
|
||||||
|
19980611 code: allowed spaces after colon in non-bracketed addresses in
|
||||||
|
qmail-smtpd.
|
||||||
|
19980611 doc: cleaned up UPGRADE.
|
||||||
|
19980528 bug: qmail-smtpd skips first character in rcpthosts() call.
|
||||||
|
tnx NND. impact: qmail-smtpd crashes on empty address; and it
|
||||||
|
allows relaying to ""@any.host. fix: use addr.s.
|
||||||
|
19980515 doc: expanded flock discussion in INSTALL.mbox.
|
||||||
|
19980515 doc: eliminated flock warning from INSTALL.maildir.
|
||||||
|
19980515 doc: split REMOVE.binmail out of INSTALL.
|
||||||
|
19980515 doc: split REMOVE.sendmail out of INSTALL.
|
||||||
|
19980515 doc: split TEST.deliver and TEST.receive out of INSTALL and
|
||||||
|
UPGRADE.
|
||||||
|
19980515 doc: integrated INSTALL.boot into INSTALL.
|
||||||
|
19980515 code: cleaned up final output in qmail-qmqpd.c.
|
||||||
|
19980514 doc: updated procmail notes in INSTALL.mbox. tnx JRM.
|
||||||
|
19980514 doc: changed FAQ 4.4 to point to INSTALL.mbox for procmail.
|
||||||
|
tnx JRM.
|
||||||
|
19980514 code: separated HELO and EHLO; single-line response for HELO.
|
||||||
|
tnx to various people.
|
||||||
19980430 version: qmail 1.02.
|
19980430 version: qmail 1.02.
|
||||||
19980430 doc: updated SECURITY.
|
19980430 doc: updated SECURITY.
|
||||||
19980430 doc: fixed FAQ 4.9. tnx KB.
|
19980430 doc: fixed FAQ 4.9. tnx KB.
|
||||||
|
|
|
||||||
42
FAQ
42
FAQ
|
|
@ -1,6 +1,7 @@
|
||||||
1. Controlling the appearance of outgoing messages
|
1. Controlling the appearance of outgoing messages
|
||||||
1.1. How do I set up host masquerading?
|
1.1. How do I set up host masquerading?
|
||||||
1.2. How do I set up user masquerading?
|
1.2. How do I set up user masquerading?
|
||||||
|
1.3. How do I set up Mail-Followup-To automatically?
|
||||||
|
|
||||||
2. Routing outgoing messages
|
2. Routing outgoing messages
|
||||||
2.1. How do I send local messages to another host?
|
2.1. How do I send local messages to another host?
|
||||||
|
|
@ -32,6 +33,7 @@
|
||||||
5.3. How do I set up qmail-pop3d?
|
5.3. How do I set up qmail-pop3d?
|
||||||
5.4. How do I allow selected clients to use this host as a relay?
|
5.4. How do I allow selected clients to use this host as a relay?
|
||||||
5.5. How do I fix up messages from broken SMTP clients?
|
5.5. How do I fix up messages from broken SMTP clients?
|
||||||
|
5.6. How do I set up qmail-qmqpd?
|
||||||
|
|
||||||
6. Configuring MUAs to work with qmail
|
6. Configuring MUAs to work with qmail
|
||||||
6.1. How do I make BSD mail generate a Date with the local time zone?
|
6.1. How do I make BSD mail generate a Date with the local time zone?
|
||||||
|
|
@ -75,6 +77,14 @@ override From lines supplied by your MUA, add QMAILINJECT=f to your
|
||||||
environment.
|
environment.
|
||||||
|
|
||||||
|
|
||||||
|
1.3. How do I set up Mail-Followup-To automatically? When I send a
|
||||||
|
message to the sos@heaven.af.mil mailing list, I'd like to include
|
||||||
|
``Mail-Followup-To: sos@heaven.af.mil''.
|
||||||
|
|
||||||
|
Answer: Add QMAILMFTFILE=$HOME/.lists to your environment, and put
|
||||||
|
sos@heaven.af.mil into ~/.lists.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2. Routing outgoing messages
|
2. Routing outgoing messages
|
||||||
|
|
||||||
|
|
@ -226,8 +236,8 @@ Answer: Put
|
||||||
|
|
||||||
into ~/.qmail. You'll have to use a full path for procmail unless
|
into ~/.qmail. You'll have to use a full path for procmail unless
|
||||||
procmail is in the system's startup PATH. Note that procmail will try to
|
procmail is in the system's startup PATH. Note that procmail will try to
|
||||||
deliver to /usr/spool/mail/$USER by default; to change this, change
|
deliver to /var/spool/mail/$USER by default; to change this, see
|
||||||
SYSTEM_MBOX in procmail's config.h.
|
INSTALL.mbox.
|
||||||
|
|
||||||
|
|
||||||
4.5. How do I use elm's filter with qmail?
|
4.5. How do I use elm's filter with qmail?
|
||||||
|
|
@ -333,7 +343,7 @@ If you have tcpserver installed, skip the inetd step, and set up
|
||||||
tcpserver -u 7770 -g 2108 0 qmtp /var/qmail/bin/qmail-qmtpd &
|
tcpserver -u 7770 -g 2108 0 qmtp /var/qmail/bin/qmail-qmtpd &
|
||||||
|
|
||||||
replacing 7770 and 2108 with the qmaild uid and nofiles gid. See
|
replacing 7770 and 2108 with the qmaild uid and nofiles gid. See
|
||||||
question 5.1 for more details.
|
question 5.1 for more details on tcpserver.
|
||||||
|
|
||||||
|
|
||||||
5.3. How do I set up qmail-pop3d? My old POP server works with mbox
|
5.3. How do I set up qmail-pop3d? My old POP server works with mbox
|
||||||
|
|
@ -362,7 +372,7 @@ lines)
|
||||||
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
|
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
|
||||||
|
|
||||||
replacing YOURHOST with your host's fully qualified domain name. See
|
replacing YOURHOST with your host's fully qualified domain name. See
|
||||||
question 5.1 for more details.
|
question 5.1 for more details on tcpserver.
|
||||||
|
|
||||||
Security note: pop3d should be used only within a secure network;
|
Security note: pop3d should be used only within a secure network;
|
||||||
otherwise an eavesdropper can steal passwords.
|
otherwise an eavesdropper can steal passwords.
|
||||||
|
|
@ -411,7 +421,7 @@ after tcpserver in your qmail-smtpd invocation.
|
||||||
|
|
||||||
Answer: Three steps. First, put
|
Answer: Three steps. First, put
|
||||||
|
|
||||||
| [ "@$HOST" = "@fixme" ] || ( echo Permission denied; exit 100 )
|
| bouncesaying 'Permission denied' [ "@$HOST" != "@fixme" ]
|
||||||
| qmail-inject -f "$SENDER" -- "$DEFAULT"
|
| qmail-inject -f "$SENDER" -- "$DEFAULT"
|
||||||
|
|
||||||
into ~alias/.qmail-fixup-default. Second, put
|
into ~alias/.qmail-fixup-default. Second, put
|
||||||
|
|
@ -433,6 +443,28 @@ tcpserver instead of inetd and tcpd, put
|
||||||
into /etc/tcp.smtp, and run tcprules as in question 5.4.
|
into /etc/tcp.smtp, and run tcprules as in question 5.4.
|
||||||
|
|
||||||
|
|
||||||
|
5.6. How do I set up qmail-qmqpd? I'd like to allow fast queueing of
|
||||||
|
outgoing mail from authorized clients.
|
||||||
|
|
||||||
|
Answer: Make sure you have installed tcpserver 0.80 or above. Create
|
||||||
|
/etc/qmqp.tcp in tcprules format to allow connections from authorized
|
||||||
|
hosts. For example, if queueing is allowed from 1.2.3.*:
|
||||||
|
|
||||||
|
1.2.3.:allow
|
||||||
|
:deny
|
||||||
|
|
||||||
|
Convert /etc/qmqp.tcp to /etc/qmqp.cdb:
|
||||||
|
|
||||||
|
tcprules /etc/qmqp.cdb /etc/qmqp.tmp < /etc/qmqp.tcp
|
||||||
|
|
||||||
|
Finally, set up
|
||||||
|
|
||||||
|
tcpserver -x /etc/qmqp.cdb -u 7770 -g 2108 0 628 /var/qmail/bin/qmail-qmqpd &
|
||||||
|
|
||||||
|
replacing 7770 and 2108 with the qmaild uid and nofiles gid. See
|
||||||
|
question 5.1 for more details on tcpserver.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
6. Configuring MUAs to work with qmail
|
6. Configuring MUAs to work with qmail
|
||||||
|
|
||||||
|
|
|
||||||
15
FILES
15
FILES
|
|
@ -6,12 +6,15 @@ README
|
||||||
FAQ
|
FAQ
|
||||||
INSTALL
|
INSTALL
|
||||||
INSTALL.alias
|
INSTALL.alias
|
||||||
INSTALL.boot
|
|
||||||
INSTALL.ctl
|
INSTALL.ctl
|
||||||
INSTALL.ids
|
INSTALL.ids
|
||||||
INSTALL.maildir
|
INSTALL.maildir
|
||||||
INSTALL.mbox
|
INSTALL.mbox
|
||||||
INSTALL.vsm
|
INSTALL.vsm
|
||||||
|
REMOVE.sendmail
|
||||||
|
REMOVE.binmail
|
||||||
|
TEST.deliver
|
||||||
|
TEST.receive
|
||||||
UPGRADE
|
UPGRADE
|
||||||
THOUGHTS
|
THOUGHTS
|
||||||
TODO
|
TODO
|
||||||
|
|
@ -34,6 +37,9 @@ VERSION
|
||||||
SYSDEPS
|
SYSDEPS
|
||||||
TARGETS
|
TARGETS
|
||||||
Makefile
|
Makefile
|
||||||
|
BIN.README
|
||||||
|
BIN.Makefile
|
||||||
|
idedit.c
|
||||||
conf-break
|
conf-break
|
||||||
auto_break.h
|
auto_break.h
|
||||||
conf-spawn
|
conf-spawn
|
||||||
|
|
@ -49,6 +55,8 @@ auto_uids.h
|
||||||
auto_usera.h
|
auto_usera.h
|
||||||
extra.h
|
extra.h
|
||||||
addresses.5
|
addresses.5
|
||||||
|
except.1
|
||||||
|
bouncesaying.1
|
||||||
condredirect.1
|
condredirect.1
|
||||||
dot-qmail.9
|
dot-qmail.9
|
||||||
envelopes.5
|
envelopes.5
|
||||||
|
|
@ -99,7 +107,6 @@ config.sh
|
||||||
config-fast.sh
|
config-fast.sh
|
||||||
qmail-clean.c
|
qmail-clean.c
|
||||||
qmail-getpw.c
|
qmail-getpw.c
|
||||||
qmail-hier.c
|
|
||||||
qmail-inject.c
|
qmail-inject.c
|
||||||
qmail-local.c
|
qmail-local.c
|
||||||
qmail-lspawn.c
|
qmail-lspawn.c
|
||||||
|
|
@ -138,6 +145,8 @@ qbiff.c
|
||||||
forward.c
|
forward.c
|
||||||
preline.c
|
preline.c
|
||||||
predate.c
|
predate.c
|
||||||
|
except.c
|
||||||
|
bouncesaying.c
|
||||||
condredirect.c
|
condredirect.c
|
||||||
maildirmake.c
|
maildirmake.c
|
||||||
maildir2mbox.c
|
maildir2mbox.c
|
||||||
|
|
@ -202,8 +211,10 @@ auto-int.c
|
||||||
auto-int8.c
|
auto-int8.c
|
||||||
auto-gid.c
|
auto-gid.c
|
||||||
auto-uid.c
|
auto-uid.c
|
||||||
|
hier.c
|
||||||
install.c
|
install.c
|
||||||
instcheck.c
|
instcheck.c
|
||||||
|
install-big.c
|
||||||
alloc.3
|
alloc.3
|
||||||
alloc.h
|
alloc.h
|
||||||
alloc.c
|
alloc.c
|
||||||
|
|
|
||||||
205
INSTALL
205
INSTALL
|
|
@ -12,7 +12,7 @@ directory, edit conf-qmail now.
|
||||||
names, edit conf-users and conf-groups now.
|
names, edit conf-users and conf-groups now.
|
||||||
|
|
||||||
|
|
||||||
Installation steps that won't interfere with sendmail:
|
To create /var/qmail and configure qmail (won't interfere with sendmail):
|
||||||
|
|
||||||
1. Create the qmail home directory:
|
1. Create the qmail home directory:
|
||||||
# mkdir /var/qmail
|
# mkdir /var/qmail
|
||||||
|
|
@ -21,193 +21,64 @@ Installation steps that won't interfere with sendmail:
|
||||||
users before compiling the programs.
|
users before compiling the programs.
|
||||||
|
|
||||||
3. Compile the programs and create the qmail directory tree:
|
3. Compile the programs and create the qmail directory tree:
|
||||||
# make setup
|
# make setup check
|
||||||
|
|
||||||
4. Run instcheck to make sure it doesn't print any warnings:
|
4. Read INSTALL.ctl and FAQ. Minimal survival command:
|
||||||
# make check
|
|
||||||
|
|
||||||
5. Read INSTALL.ctl and FAQ. Minimal survival command:
|
|
||||||
# ./config
|
# ./config
|
||||||
|
|
||||||
6. Read INSTALL.alias. Minimal survival command:
|
5. Read INSTALL.alias. Minimal survival command:
|
||||||
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
|
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
|
||||||
# chmod 644 ~alias/.qmail*
|
# chmod 644 ~alias/.qmail*
|
||||||
|
|
||||||
7. Read INSTALL.mbox and INSTALL.vsm.
|
6. Read INSTALL.mbox and INSTALL.vsm.
|
||||||
|
|
||||||
8. Read INSTALL.maildir.
|
7. Read INSTALL.maildir.
|
||||||
|
|
||||||
9. Read SENDMAIL. This is what your users will want to know about the
|
8. Copy /var/qmail/boot/home (or proc) to /var/qmail/rc.
|
||||||
|
|
||||||
|
|
||||||
|
To test qmail deliveries (won't interfere with sendmail):
|
||||||
|
|
||||||
|
9. Enable deliveries of messages injected into qmail:
|
||||||
|
# csh -cf '/var/qmail/rc &'
|
||||||
|
|
||||||
|
10. Read TEST.deliver.
|
||||||
|
|
||||||
|
|
||||||
|
To upgrade from sendmail to qmail:
|
||||||
|
|
||||||
|
11. Read SENDMAIL. This is what your users will want to know about the
|
||||||
switch from sendmail to qmail.
|
switch from sendmail to qmail.
|
||||||
|
|
||||||
10. Copy /var/qmail/boot/home (or proc) to /var/qmail/rc.
|
12. Read REMOVE.sendmail. You must remove sendmail before installing
|
||||||
|
qmail.
|
||||||
|
|
||||||
|
13. Read REMOVE.binmail.
|
||||||
|
|
||||||
Pre-upgrade tests:
|
14. Add
|
||||||
|
csh -cf '/var/qmail/rc &'
|
||||||
|
to your boot scripts, so that the qmail daemons are restarted
|
||||||
|
whenever your system reboots. Make sure you include the &.
|
||||||
|
|
||||||
11. Enable deliveries of messages injected into qmail:
|
15. Make qmail's ``sendmail'' wrapper available to MUAs:
|
||||||
# /var/qmail/rc &
|
|
||||||
|
|
||||||
12. Look for a
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
line in syslog. qmail-send always prints either ``cannot start'' or
|
|
||||||
``status''. (The big number is a splogger timestamp.)
|
|
||||||
|
|
||||||
13. Do a ps and look for the qmail daemons. There should be four of
|
|
||||||
them, all idle: qmail-send, running as qmails; qmail-lspawn, running
|
|
||||||
as root; qmail-rspawn, running as qmailr; and qmail-clean, running
|
|
||||||
as qmailq. You will also see splogger, running as qmaill.
|
|
||||||
|
|
||||||
14. Local-local test: Send yourself an empty message. (Replace ``me''
|
|
||||||
with your username. Make sure to include the ``to:'' colon.)
|
|
||||||
% echo to: me | /var/qmail/bin/qmail-inject
|
|
||||||
The message will show up immediately in your mailbox, and syslog
|
|
||||||
will show something like this:
|
|
||||||
qmail: new msg 53
|
|
||||||
qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666
|
|
||||||
qmail: starting delivery 1: msg 53 to local me@domain
|
|
||||||
qmail: status: local 1/10 remote 0/20
|
|
||||||
qmail: delivery 1: success: did_1+0+0/
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: end msg 53
|
|
||||||
(53 is an inode number; 20345 is a process ID; your numbers will
|
|
||||||
probably be different.)
|
|
||||||
|
|
||||||
15. Local-error test: Send a message to a nonexistent local address.
|
|
||||||
% echo to: nonexistent | /var/qmail/bin/qmail-inject
|
|
||||||
qmail: new msg 53
|
|
||||||
qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666
|
|
||||||
qmail: starting delivery 2: msg 53 to local nonexistent@domain
|
|
||||||
qmail: status: local 1/10 remote 0/20
|
|
||||||
qmail: delivery 2: failure: No_such_address.__#5.1.1_/
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: bounce msg 53 qp 20357
|
|
||||||
qmail: end msg 53
|
|
||||||
qmail: new msg 54
|
|
||||||
qmail: info msg 54: bytes 743 from <> qp 20357 uid 666
|
|
||||||
qmail: starting delivery 3: msg 54 to local me@domain
|
|
||||||
qmail: status: local 1/10 remote 0/20
|
|
||||||
qmail: delivery 3: success: did_1+0+0/
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: end msg 54
|
|
||||||
You will now have a bounce message in your mailbox.
|
|
||||||
|
|
||||||
16. Local-remote test: Send an empty message to your account on another
|
|
||||||
machine.
|
|
||||||
% echo to: me@wherever | /var/qmail/bin/qmail-inject
|
|
||||||
qmail: new msg 53
|
|
||||||
qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666
|
|
||||||
qmail: starting delivery 4: msg 53 to remote me@wherever
|
|
||||||
qmail: status: local 0/10 remote 1/20
|
|
||||||
qmail: delivery 4: success: 1.2.3.4_accepted_message./...
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: end msg 53
|
|
||||||
There will be a pause between ``starting delivery'' and ``success'';
|
|
||||||
SMTP is slow. Check that the message is in your mailbox on the other
|
|
||||||
machine.
|
|
||||||
|
|
||||||
17. Local-postmaster test: Send mail to postmaster, any capitalization.
|
|
||||||
% echo to: POSTmaster | /var/qmail/bin/qmail-inject
|
|
||||||
Look for the message in the alias mailbox, normally ~alias/Mailbox.
|
|
||||||
|
|
||||||
18. Double-bounce test: Send a message with a completely bad envelope.
|
|
||||||
% /var/qmail/bin/qmail-inject -f nonexistent
|
|
||||||
To: unknownuser
|
|
||||||
Subject: testing
|
|
||||||
|
|
||||||
This is a test. This is only a test.
|
|
||||||
%
|
|
||||||
(Use end-of-file, not dot, to end the message.) Look for the double
|
|
||||||
bounce in the alias mailbox.
|
|
||||||
|
|
||||||
19. Group membership test:
|
|
||||||
% cat > ~me/.qmail-groups
|
|
||||||
|groups >> MYGROUPS; exit 0
|
|
||||||
% /var/qmail/bin/qmail-inject me-groups < /dev/null
|
|
||||||
% cat ~me/MYGROUPS
|
|
||||||
MYGROUPS will show your normal gid and nothing else. (Under Solaris,
|
|
||||||
make sure to use /usr/ucb/groups; /usr/bin/groups is broken.)
|
|
||||||
|
|
||||||
|
|
||||||
Upgrading from sendmail to qmail:
|
|
||||||
|
|
||||||
20. Read INSTALL.boot. You must replace the sendmail invocation in your
|
|
||||||
boot scripts with an appropriate qmail invocation.
|
|
||||||
|
|
||||||
21. Kill the sendmail daemon. You should first kill -STOP the daemon; if
|
|
||||||
any children are running, you should kill -CONT, wait, kill -STOP
|
|
||||||
again, and repeat ad nauseam. If there aren't any children, kill
|
|
||||||
-TERM and then kill -CONT.
|
|
||||||
|
|
||||||
22. Replace sendmail with a link to qmail's ``sendmail'' wrapper:
|
|
||||||
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
|
|
||||||
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
|
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
|
||||||
|
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
|
||||||
|
/usr/sbin might not exist on your system.
|
||||||
|
|
||||||
23. Set up qmail-smtpd in /etc/inetd.conf (all on one line):
|
16. Set up qmail-smtpd in /etc/inetd.conf (all on one line):
|
||||||
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env
|
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env
|
||||||
tcp-env /var/qmail/bin/qmail-smtpd
|
tcp-env /var/qmail/bin/qmail-smtpd
|
||||||
Also comment out comsat in /etc/inetd.conf.
|
|
||||||
|
|
||||||
24. Reboot. (Or kill -HUP your inetd and make sure the qmail daemons
|
17. Reboot. (Or kill -HUP your inetd and make sure the qmail daemons
|
||||||
are running.)
|
are running.)
|
||||||
|
|
||||||
25. Try to flush the sendmail queue:
|
18. Read TEST.receive.
|
||||||
# /usr/lib/sendmail.bak -q
|
|
||||||
You can safely run sendmail.bak -q (or even sendmail.bak -q15m)
|
|
||||||
while qmail is running. Do this until the sendmail queue is empty.
|
|
||||||
This may take several days.
|
|
||||||
|
|
||||||
26. Disable all the sendmail and binmail programs in your system. The
|
|
||||||
safest approach is to chmod 0 everything. Some locations to check:
|
|
||||||
/usr/sbin/sendmail, /usr/lib/sendmail.bak, /usr/lib/sendmail.mx,
|
|
||||||
/bin/mail, /usr/libexec/mail.local.
|
|
||||||
|
|
||||||
27. Make sure that ``mail'' still invokes a reasonable mailer. Under
|
|
||||||
SVR4 you may want to link mail to mailx.
|
|
||||||
|
|
||||||
|
|
||||||
Post-upgrade tests (can be done immediately after step 24):
|
|
||||||
|
|
||||||
28. SMTP server test: Forge some mail locally via SMTP.
|
|
||||||
% telnet 127.0.0.1 25
|
|
||||||
Trying 127.0.0.1...
|
|
||||||
Connected to 127.0.0.1.
|
|
||||||
Escape character is '^]'.
|
|
||||||
220 domain ESMTP
|
|
||||||
helo dude
|
|
||||||
250-domain
|
|
||||||
250-PIPELINING
|
|
||||||
250 8BITMIME
|
|
||||||
mail <me@domain>
|
|
||||||
250 ok
|
|
||||||
rcpt <me@domain>
|
|
||||||
250 ok
|
|
||||||
data
|
|
||||||
354 go ahead
|
|
||||||
Subject: testing
|
|
||||||
|
|
||||||
This is a test.
|
|
||||||
.
|
|
||||||
250 ok 812345679 qp 12345
|
|
||||||
quit
|
|
||||||
221 domain
|
|
||||||
Connection closed by foreign host.
|
|
||||||
%
|
|
||||||
Look for the message in your mailbox.
|
|
||||||
|
|
||||||
29. Remote-local test: Send yourself some mail from another machine.
|
|
||||||
|
|
||||||
30. Remote-error test: I think you can figure this one out.
|
|
||||||
|
|
||||||
31. UA test: Try sending mail, first to a local account, then to a
|
|
||||||
remote account, with your normal user agent.
|
|
||||||
|
|
||||||
32. Remote-postmaster test: Send mail from another machine to
|
|
||||||
PoStMaStEr@domain. Look for the message in the alias mailbox.
|
|
||||||
|
|
||||||
|
|
||||||
That's it! To report success:
|
That's it! To report success:
|
||||||
% ( echo 'First M. Last'; cat `cat SYSDEPS` ) \
|
% ( echo 'First M. Last'; cat `cat SYSDEPS` ) | mail djb-qst@cr.yp.to
|
||||||
| mail djb-qst@cr.yp.to
|
Replace First M. Last with your name.
|
||||||
Replace First M. Last with your name. If you have questions about qmail,
|
|
||||||
join the qmail mailing list; see http://pobox.com/~djb/qmail.html.
|
If you have questions about qmail, join the qmail mailing list; see
|
||||||
|
http://pobox.com/~djb/qmail.html.
|
||||||
|
|
|
||||||
15
INSTALL.boot
15
INSTALL.boot
|
|
@ -1,15 +0,0 @@
|
||||||
The qmail daemons have to be restarted whenever your system reboots.
|
|
||||||
Meanwhile, sendmail doesn't have to be started any more. Here's what you
|
|
||||||
should do.
|
|
||||||
|
|
||||||
Find sendmail in your boot scripts. It's usually in either /etc/rc or
|
|
||||||
/etc/init.d/sendmail. It looks like
|
|
||||||
|
|
||||||
sendmail -bd -q15m
|
|
||||||
|
|
||||||
-q15m means it should run the queue every 15 minutes; you may see a
|
|
||||||
different number. Comment out this line, and replace it with
|
|
||||||
|
|
||||||
csh -cf '/var/qmail/rc &'
|
|
||||||
|
|
||||||
That's it. (Make sure you include the &.)
|
|
||||||
|
|
@ -25,11 +25,6 @@ default. Nevertheless, I encourage you to start asking for maildir
|
||||||
versions of your favorite MUAs, and to switch over to maildir as soon as
|
versions of your favorite MUAs, and to switch over to maildir as soon as
|
||||||
you can.
|
you can.
|
||||||
|
|
||||||
WARNING: qmail uses flock() to lock ~user/Mailbox. This agrees with the
|
|
||||||
modern mail.local locking choice. If your MUA doesn't use flock(), your
|
|
||||||
best bet is to switch to maildir, and to set up synchronous maildir2mbox
|
|
||||||
execution, as described below.
|
|
||||||
|
|
||||||
|
|
||||||
2. Sun's Network F_ail_u_re System
|
2. Sun's Network F_ail_u_re System
|
||||||
|
|
||||||
|
|
|
||||||
27
INSTALL.mbox
27
INSTALL.mbox
|
|
@ -2,16 +2,17 @@ The qmail package includes a local delivery agent, qmail-local, which
|
||||||
provides user-controlled mailing lists, cross-host alias loop detection,
|
provides user-controlled mailing lists, cross-host alias loop detection,
|
||||||
and many other important qmail features.
|
and many other important qmail features.
|
||||||
|
|
||||||
There's one part of qmail-local that you need to know about right now:
|
There's one important difference between qmail-local and binmail:
|
||||||
qmail-local delivers mail by default into ~user/Mailbox (in mbox format,
|
qmail-local delivers mail by default into ~user/Mailbox, rather than
|
||||||
using flock), rather than /var/spool/mail/user.
|
/var/spool/mail/user. It uses mbox format, with lockf locking on systems
|
||||||
|
that don't have flock (HP/UX, Solaris), and flock locking otherwise.
|
||||||
|
|
||||||
For an explanation of the problems with /var/spool/mail, and a list of
|
This file explains how to switch your system to ~user/Mailbox. You
|
||||||
options if you want to continue delivering to /var/spool/mail, see
|
aren't required to do this; for further discussion of /var/spool/mail,
|
||||||
INSTALL.vsm.
|
and an explanation of how to continue using binmail for local
|
||||||
|
deliveries, see INSTALL.vsm.
|
||||||
|
|
||||||
This file explains how to handle the change to ~user/Mailbox. The basic
|
The basic procedure for switching to ~user/Mailbox is simple:
|
||||||
procedure is simple:
|
|
||||||
|
|
||||||
* Move each /var/spool/mail/user to ~user/Mailbox. For safety, do
|
* Move each /var/spool/mail/user to ~user/Mailbox. For safety, do
|
||||||
this in single-user mode.
|
this in single-user mode.
|
||||||
|
|
@ -20,11 +21,17 @@ procedure is simple:
|
||||||
~user/Mailbox for each user. /var/spool/mail should be mode 1777,
|
~user/Mailbox for each user. /var/spool/mail should be mode 1777,
|
||||||
so users will not be able to accidentally remove these links.
|
so users will not be able to accidentally remove these links.
|
||||||
|
|
||||||
|
A few mail programs are unable to handle symbolic links, so you will
|
||||||
|
have to configure them to look at ~user/Mailbox directly:
|
||||||
|
|
||||||
|
* procmail: Change SYSTEM_MBOX in config.h and recompile; or, with
|
||||||
|
recent versions, define MAILSPOOLHOME in src/authenticate.c.
|
||||||
|
|
||||||
An alternative to symbolic links is hlfsd. Consult the documentation for
|
An alternative to symbolic links is hlfsd. Consult the documentation for
|
||||||
hlfsd if it is included in your operating system.
|
hlfsd if it is included in your operating system.
|
||||||
|
|
||||||
If /var/spool/mail is large, you can gain extra speed by configuring
|
If /var/spool/mail is large, you can gain extra speed by configuring
|
||||||
your mail software to look at ~user/Mailbox directly:
|
all your mail software to look at ~user/Mailbox directly:
|
||||||
|
|
||||||
* Most MUAs: Put ``setenv MAIL $HOME/Mailbox'' in your system-wide
|
* Most MUAs: Put ``setenv MAIL $HOME/Mailbox'' in your system-wide
|
||||||
.cshrc and ``MAIL=$HOME/Mailbox; export MAIL'' in your system-wide
|
.cshrc and ``MAIL=$HOME/Mailbox; export MAIL'' in your system-wide
|
||||||
|
|
@ -37,8 +44,6 @@ your mail software to look at ~user/Mailbox directly:
|
||||||
* pine: Put ``inbox-path=Mailbox'' in your system-wide pine.conf.
|
* pine: Put ``inbox-path=Mailbox'' in your system-wide pine.conf.
|
||||||
(For pine versions more recent than 3.91, see also FAQ 6.2.)
|
(For pine versions more recent than 3.91, see also FAQ 6.2.)
|
||||||
|
|
||||||
* procmail: Change SYSTEM_MBOX in config.h and recompile.
|
|
||||||
|
|
||||||
* qpopper 2.2: Change /.mail to /Mailbox in pop_dropcopy.c and
|
* qpopper 2.2: Change /.mail to /Mailbox in pop_dropcopy.c and
|
||||||
recompile with -DHOMEDIRMAIL in CFLAGS.
|
recompile with -DHOMEDIRMAIL in CFLAGS.
|
||||||
|
|
||||||
|
|
|
||||||
196
Makefile
196
Makefile
|
|
@ -178,6 +178,19 @@ binm3+df.sh conf-qmail
|
||||||
> binm3+df
|
> binm3+df
|
||||||
chmod 755 binm3+df
|
chmod 755 binm3+df
|
||||||
|
|
||||||
|
bouncesaying: \
|
||||||
|
load bouncesaying.o strerr.a error.a substdio.a str.a wait.a
|
||||||
|
./load bouncesaying strerr.a error.a substdio.a str.a \
|
||||||
|
wait.a
|
||||||
|
|
||||||
|
bouncesaying.0: \
|
||||||
|
bouncesaying.1
|
||||||
|
nroff -man bouncesaying.1 > bouncesaying.0
|
||||||
|
|
||||||
|
bouncesaying.o: \
|
||||||
|
compile bouncesaying.c fork.h strerr.h error.h wait.h sig.h exit.h
|
||||||
|
./compile bouncesaying.c
|
||||||
|
|
||||||
byte_chr.o: \
|
byte_chr.o: \
|
||||||
compile byte_chr.c byte.h
|
compile byte_chr.c byte.h
|
||||||
./compile byte_chr.c
|
./compile byte_chr.c
|
||||||
|
|
@ -267,8 +280,8 @@ uint32.h substdio.h
|
||||||
./compile cdbmss.c
|
./compile cdbmss.c
|
||||||
|
|
||||||
check: \
|
check: \
|
||||||
it man conf-qmail
|
it man
|
||||||
./qmail-hier | ./instcheck `head -1 conf-qmail`
|
./instcheck
|
||||||
|
|
||||||
chkshsgr: \
|
chkshsgr: \
|
||||||
load chkshsgr.o
|
load chkshsgr.o
|
||||||
|
|
@ -511,6 +524,18 @@ error_temp.o: \
|
||||||
compile error_temp.c error.h
|
compile error_temp.c error.h
|
||||||
./compile error_temp.c
|
./compile error_temp.c
|
||||||
|
|
||||||
|
except: \
|
||||||
|
load except.o strerr.a error.a substdio.a str.a wait.a
|
||||||
|
./load except strerr.a error.a substdio.a str.a wait.a
|
||||||
|
|
||||||
|
except.0: \
|
||||||
|
except.1
|
||||||
|
nroff -man except.1 > except.0
|
||||||
|
|
||||||
|
except.o: \
|
||||||
|
compile except.c fork.h strerr.h wait.h error.h exit.h
|
||||||
|
./compile except.c
|
||||||
|
|
||||||
fd.a: \
|
fd.a: \
|
||||||
makelib fd_copy.o fd_move.o
|
makelib fd_copy.o fd_move.o
|
||||||
./makelib fd.a fd_copy.o fd_move.o
|
./makelib fd.a fd_copy.o fd_move.o
|
||||||
|
|
@ -676,6 +701,10 @@ hfield.o: \
|
||||||
compile hfield.c hfield.h
|
compile hfield.c hfield.h
|
||||||
./compile hfield.c
|
./compile hfield.c
|
||||||
|
|
||||||
|
hier.o: \
|
||||||
|
compile hier.c auto_qmail.h auto_split.h auto_uids.h fmt.h fifo.h
|
||||||
|
./compile hier.c
|
||||||
|
|
||||||
home: \
|
home: \
|
||||||
home.sh conf-qmail
|
home.sh conf-qmail
|
||||||
cat home.sh \
|
cat home.sh \
|
||||||
|
|
@ -699,26 +728,48 @@ hostname.o: \
|
||||||
compile hostname.c substdio.h subfd.h substdio.h readwrite.h exit.h
|
compile hostname.c substdio.h subfd.h substdio.h readwrite.h exit.h
|
||||||
./compile hostname.c
|
./compile hostname.c
|
||||||
|
|
||||||
|
idedit: \
|
||||||
|
load idedit.o strerr.a substdio.a error.a str.a fs.a wait.a open.a \
|
||||||
|
seek.a
|
||||||
|
./load idedit strerr.a substdio.a error.a str.a fs.a \
|
||||||
|
wait.a open.a seek.a
|
||||||
|
|
||||||
|
idedit.o: \
|
||||||
|
compile idedit.c readwrite.h exit.h scan.h fmt.h strerr.h open.h \
|
||||||
|
seek.h fork.h
|
||||||
|
./compile idedit.c
|
||||||
|
|
||||||
install: \
|
install: \
|
||||||
load install.o fifo.o getln.a strerr.a substdio.a stralloc.a alloc.a \
|
load install.o fifo.o hier.o auto_qmail.o auto_split.o auto_uids.o \
|
||||||
open.a error.a str.a fs.a
|
strerr.a substdio.a open.a error.a str.a fs.a
|
||||||
./load install fifo.o getln.a strerr.a substdio.a \
|
./load install fifo.o hier.o auto_qmail.o auto_split.o \
|
||||||
stralloc.a alloc.a open.a error.a str.a fs.a
|
auto_uids.o strerr.a substdio.a open.a error.a str.a fs.a
|
||||||
|
|
||||||
|
install-big: \
|
||||||
|
load install-big.o fifo.o install.o auto_qmail.o auto_split.o \
|
||||||
|
auto_uids.o strerr.a substdio.a open.a error.a str.a fs.a
|
||||||
|
./load install-big fifo.o install.o auto_qmail.o \
|
||||||
|
auto_split.o auto_uids.o strerr.a substdio.a open.a error.a \
|
||||||
|
str.a fs.a
|
||||||
|
|
||||||
|
install-big.o: \
|
||||||
|
compile install-big.c auto_qmail.h auto_split.h auto_uids.h fmt.h \
|
||||||
|
fifo.h
|
||||||
|
./compile install-big.c
|
||||||
|
|
||||||
install.o: \
|
install.o: \
|
||||||
compile install.c substdio.h stralloc.h gen_alloc.h getln.h \
|
compile install.c substdio.h strerr.h error.h open.h readwrite.h \
|
||||||
readwrite.h exit.h open.h error.h strerr.h byte.h fifo.h
|
exit.h
|
||||||
./compile install.c
|
./compile install.c
|
||||||
|
|
||||||
instcheck: \
|
instcheck: \
|
||||||
load instcheck.o getln.a strerr.a substdio.a stralloc.a alloc.a \
|
load instcheck.o fifo.o hier.o auto_qmail.o auto_split.o auto_uids.o \
|
||||||
error.a str.a fs.a
|
strerr.a substdio.a error.a str.a fs.a
|
||||||
./load instcheck getln.a strerr.a substdio.a stralloc.a \
|
./load instcheck fifo.o hier.o auto_qmail.o auto_split.o \
|
||||||
alloc.a error.a str.a fs.a
|
auto_uids.o strerr.a substdio.a error.a str.a fs.a
|
||||||
|
|
||||||
instcheck.o: \
|
instcheck.o: \
|
||||||
compile instcheck.c substdio.h stralloc.h gen_alloc.h getln.h \
|
compile instcheck.c strerr.h error.h readwrite.h exit.h
|
||||||
readwrite.h exit.h error.h strerr.h byte.h
|
|
||||||
./compile instcheck.c
|
./compile instcheck.c
|
||||||
|
|
||||||
ip.o: \
|
ip.o: \
|
||||||
|
|
@ -754,9 +805,10 @@ qmail-pw2u qmail-qread qmail-qstat qmail-tcpto qmail-tcpok \
|
||||||
qmail-pop3d qmail-popup qmail-qmqpc qmail-qmqpd qmail-qmtpd \
|
qmail-pop3d qmail-popup qmail-qmqpc qmail-qmqpd qmail-qmtpd \
|
||||||
qmail-smtpd sendmail tcp-env qmail-newmrh config config-fast dnscname \
|
qmail-smtpd sendmail tcp-env qmail-newmrh config config-fast dnscname \
|
||||||
dnsptr dnsip dnsmxip dnsfq hostname ipmeprint qreceipt qsmhook qbiff \
|
dnsptr dnsip dnsmxip dnsfq hostname ipmeprint qreceipt qsmhook qbiff \
|
||||||
forward preline condredirect maildirmake maildir2mbox maildirwatch \
|
forward preline condredirect bouncesaying except maildirmake \
|
||||||
qail elq pinq qmail-hier install instcheck home home+df proc proc+df \
|
maildir2mbox maildirwatch qail elq pinq idedit install-big install \
|
||||||
binm1 binm1+df binm2 binm2+df binm3 binm3+df
|
instcheck home home+df proc proc+df binm1 binm1+df binm2 binm2+df \
|
||||||
|
binm3 binm3+df
|
||||||
|
|
||||||
load: \
|
load: \
|
||||||
make-load warn-auto.sh systype
|
make-load warn-auto.sh systype
|
||||||
|
|
@ -879,10 +931,11 @@ qmail-queue.0 qmail-inject.0 mailsubj.0 qmail-showctl.0 qmail-newu.0 \
|
||||||
qmail-pw2u.0 qmail-qread.0 qmail-qstat.0 qmail-tcpto.0 qmail-tcpok.0 \
|
qmail-pw2u.0 qmail-qread.0 qmail-qstat.0 qmail-tcpto.0 qmail-tcpok.0 \
|
||||||
qmail-pop3d.0 qmail-popup.0 qmail-qmqpc.0 qmail-qmqpd.0 qmail-qmtpd.0 \
|
qmail-pop3d.0 qmail-popup.0 qmail-qmqpc.0 qmail-qmqpd.0 qmail-qmtpd.0 \
|
||||||
qmail-smtpd.0 tcp-env.0 qmail-newmrh.0 qreceipt.0 qbiff.0 forward.0 \
|
qmail-smtpd.0 tcp-env.0 qmail-newmrh.0 qreceipt.0 qbiff.0 forward.0 \
|
||||||
preline.0 condredirect.0 maildirmake.0 maildir2mbox.0 maildirwatch.0 \
|
preline.0 condredirect.0 bouncesaying.0 except.0 maildirmake.0 \
|
||||||
qmail.0 qmail-limits.0 qmail-log.0 qmail-control.0 qmail-header.0 \
|
maildir2mbox.0 maildirwatch.0 qmail.0 qmail-limits.0 qmail-log.0 \
|
||||||
qmail-users.0 dot-qmail.0 qmail-command.0 tcp-environ.0 maildir.0 \
|
qmail-control.0 qmail-header.0 qmail-users.0 dot-qmail.0 \
|
||||||
mbox.0 addresses.0 envelopes.0 forgeries.0
|
qmail-command.0 tcp-environ.0 maildir.0 mbox.0 addresses.0 \
|
||||||
|
envelopes.0 forgeries.0
|
||||||
|
|
||||||
mbox.0: \
|
mbox.0: \
|
||||||
mbox.5
|
mbox.5
|
||||||
|
|
@ -1082,17 +1135,6 @@ qmail-header.0: \
|
||||||
qmail-header.5
|
qmail-header.5
|
||||||
nroff -man qmail-header.5 > qmail-header.0
|
nroff -man qmail-header.5 > qmail-header.0
|
||||||
|
|
||||||
qmail-hier: \
|
|
||||||
load qmail-hier.o substdio.a error.a str.a fs.a auto_split.o \
|
|
||||||
auto_uids.o
|
|
||||||
./load qmail-hier substdio.a error.a str.a fs.a \
|
|
||||||
auto_split.o auto_uids.o
|
|
||||||
|
|
||||||
qmail-hier.o: \
|
|
||||||
compile qmail-hier.c subfd.h substdio.h substdio.h auto_split.h \
|
|
||||||
auto_uids.h fmt.h
|
|
||||||
./compile qmail-hier.c
|
|
||||||
|
|
||||||
qmail-inject: \
|
qmail-inject: \
|
||||||
load qmail-inject.o headerbody.o hfield.o newfield.o quote.o now.o \
|
load qmail-inject.o headerbody.o hfield.o newfield.o quote.o now.o \
|
||||||
control.o date822fmt.o constmap.o qmail.o case.a fd.a wait.a open.a \
|
control.o date822fmt.o constmap.o qmail.o case.a fd.a wait.a open.a \
|
||||||
|
|
@ -1470,11 +1512,13 @@ fmtqfn.h readsubdir.h direntry.h
|
||||||
./compile qmail-send.c
|
./compile qmail-send.c
|
||||||
|
|
||||||
qmail-showctl: \
|
qmail-showctl: \
|
||||||
load qmail-showctl.o control.o open.a getln.a stralloc.a alloc.a \
|
load qmail-showctl.o auto_uids.o control.o open.a getln.a stralloc.a \
|
||||||
substdio.a error.a str.a fs.a auto_qmail.o auto_uids.o
|
alloc.a substdio.a error.a str.a fs.a auto_qmail.o auto_break.o \
|
||||||
./load qmail-showctl control.o open.a getln.a stralloc.a \
|
auto_patrn.o auto_spawn.o auto_split.o
|
||||||
alloc.a substdio.a error.a str.a fs.a auto_qmail.o \
|
./load qmail-showctl auto_uids.o control.o open.a getln.a \
|
||||||
auto_uids.o
|
stralloc.a alloc.a substdio.a error.a str.a fs.a \
|
||||||
|
auto_qmail.o auto_break.o auto_patrn.o auto_spawn.o \
|
||||||
|
auto_split.o
|
||||||
|
|
||||||
qmail-showctl.0: \
|
qmail-showctl.0: \
|
||||||
qmail-showctl.8
|
qmail-showctl.8
|
||||||
|
|
@ -1483,7 +1527,8 @@ qmail-showctl.8
|
||||||
qmail-showctl.o: \
|
qmail-showctl.o: \
|
||||||
compile qmail-showctl.c substdio.h subfd.h substdio.h exit.h fmt.h \
|
compile qmail-showctl.c substdio.h subfd.h substdio.h exit.h fmt.h \
|
||||||
str.h control.h constmap.h stralloc.h gen_alloc.h direntry.h \
|
str.h control.h constmap.h stralloc.h gen_alloc.h direntry.h \
|
||||||
auto_qmail.h auto_uids.h
|
auto_uids.h auto_qmail.h auto_break.h auto_patrn.h auto_spawn.h \
|
||||||
|
auto_split.h
|
||||||
./compile qmail-showctl.c
|
./compile qmail-showctl.c
|
||||||
|
|
||||||
qmail-smtpd: \
|
qmail-smtpd: \
|
||||||
|
|
@ -1698,8 +1743,8 @@ substdio.h alloc.h auto_qmail.h exit.h env.h str.h
|
||||||
./compile sendmail.c
|
./compile sendmail.c
|
||||||
|
|
||||||
setup: \
|
setup: \
|
||||||
it man conf-qmail
|
it man
|
||||||
./qmail-hier | ./install `head -1 conf-qmail`
|
./install
|
||||||
|
|
||||||
sgetopt.o: \
|
sgetopt.o: \
|
||||||
compile sgetopt.c substdio.h subfd.h substdio.h sgetopt.h subgetopt.h \
|
compile sgetopt.c substdio.h subfd.h substdio.h sgetopt.h subgetopt.h \
|
||||||
|
|
@ -1708,25 +1753,27 @@ subgetopt.h
|
||||||
|
|
||||||
shar: \
|
shar: \
|
||||||
FILES BLURB BLURB2 BLURB3 BLURB4 README FAQ INSTALL INSTALL.alias \
|
FILES BLURB BLURB2 BLURB3 BLURB4 README FAQ INSTALL INSTALL.alias \
|
||||||
INSTALL.boot INSTALL.ctl INSTALL.ids INSTALL.maildir INSTALL.mbox \
|
INSTALL.ctl INSTALL.ids INSTALL.maildir INSTALL.mbox INSTALL.vsm \
|
||||||
INSTALL.vsm UPGRADE THOUGHTS TODO THANKS CHANGES SECURITY INTERNALS \
|
REMOVE.sendmail REMOVE.binmail TEST.deliver TEST.receive UPGRADE \
|
||||||
SENDMAIL PIC.local2alias PIC.local2ext PIC.local2local PIC.local2rem \
|
THOUGHTS TODO THANKS CHANGES SECURITY INTERNALS SENDMAIL \
|
||||||
|
PIC.local2alias PIC.local2ext PIC.local2local PIC.local2rem \
|
||||||
PIC.local2virt PIC.nullclient PIC.relaybad PIC.relaygood \
|
PIC.local2virt PIC.nullclient PIC.relaybad PIC.relaygood \
|
||||||
PIC.rem2local FILES VERSION SYSDEPS TARGETS Makefile conf-break \
|
PIC.rem2local FILES VERSION SYSDEPS TARGETS Makefile BIN.README \
|
||||||
auto_break.h conf-spawn auto_spawn.h chkspawn.c conf-split \
|
BIN.Makefile BIN.setup idedit.c conf-break auto_break.h conf-spawn \
|
||||||
auto_split.h conf-patrn auto_patrn.h conf-users conf-groups \
|
auto_spawn.h chkspawn.c conf-split auto_split.h conf-patrn \
|
||||||
auto_uids.h auto_usera.h extra.h addresses.5 condredirect.1 \
|
auto_patrn.h conf-users conf-groups auto_uids.h auto_usera.h extra.h \
|
||||||
dot-qmail.9 envelopes.5 forgeries.7 forward.1 maildir2mbox.1 \
|
addresses.5 except.1 bouncesaying.1 condredirect.1 dot-qmail.9 \
|
||||||
maildirmake.1 maildirwatch.1 mailsubj.1 mbox.5 preline.1 qbiff.1 \
|
envelopes.5 forgeries.7 forward.1 maildir2mbox.1 maildirmake.1 \
|
||||||
qmail-clean.8 qmail-command.8 qmail-control.9 qmail-getpw.9 \
|
maildirwatch.1 mailsubj.1 mbox.5 preline.1 qbiff.1 qmail-clean.8 \
|
||||||
qmail-header.5 qmail-inject.8 qmail-limits.9 qmail-local.8 \
|
qmail-command.8 qmail-control.9 qmail-getpw.9 qmail-header.5 \
|
||||||
qmail-log.5 qmail-lspawn.8 qmail-newmrh.9 qmail-newu.9 qmail-pop3d.8 \
|
qmail-inject.8 qmail-limits.9 qmail-local.8 qmail-log.5 \
|
||||||
|
qmail-lspawn.8 qmail-newmrh.9 qmail-newu.9 qmail-pop3d.8 \
|
||||||
qmail-popup.8 qmail-pw2u.9 qmail-qmqpc.8 qmail-qmqpd.8 qmail-qmtpd.8 \
|
qmail-popup.8 qmail-pw2u.9 qmail-qmqpc.8 qmail-qmqpd.8 qmail-qmtpd.8 \
|
||||||
qmail-qread.8 qmail-qstat.8 qmail-queue.8 qmail-remote.8 \
|
qmail-qread.8 qmail-qstat.8 qmail-queue.8 qmail-remote.8 \
|
||||||
qmail-rspawn.8 qmail-send.9 qmail-showctl.8 qmail-smtpd.8 \
|
qmail-rspawn.8 qmail-send.9 qmail-showctl.8 qmail-smtpd.8 \
|
||||||
qmail-start.9 qmail-tcpok.8 qmail-tcpto.8 qmail-users.9 qmail.7 \
|
qmail-start.9 qmail-tcpok.8 qmail-tcpto.8 qmail-users.9 qmail.7 \
|
||||||
qreceipt.1 splogger.8 tcp-env.1 config.sh config-fast.sh \
|
qreceipt.1 splogger.8 tcp-env.1 config.sh config-fast.sh \
|
||||||
qmail-clean.c qmail-getpw.c qmail-hier.c qmail-inject.c qmail-local.c \
|
qmail-clean.c qmail-getpw.c qmail-inject.c qmail-local.c \
|
||||||
qmail-lspawn.c qmail-newmrh.c qmail-newu.c qmail-pop3d.c \
|
qmail-lspawn.c qmail-newmrh.c qmail-newu.c qmail-pop3d.c \
|
||||||
qmail-popup.c qmail-pw2u.c qmail-qmqpc.c qmail-qmqpd.c qmail-qmtpd.c \
|
qmail-popup.c qmail-pw2u.c qmail-qmqpc.c qmail-qmqpd.c qmail-qmtpd.c \
|
||||||
qmail-qread.c qmail-qstat.sh qmail-queue.c qmail-remote.c \
|
qmail-qread.c qmail-qstat.sh qmail-queue.c qmail-remote.c \
|
||||||
|
|
@ -1734,27 +1781,28 @@ qmail-rspawn.c qmail-send.c qmail-showctl.c qmail-smtpd.c \
|
||||||
qmail-start.c qmail-tcpok.c qmail-tcpto.c spawn.c dnscname.c dnsfq.c \
|
qmail-start.c qmail-tcpok.c qmail-tcpto.c spawn.c dnscname.c dnsfq.c \
|
||||||
dnsip.c dnsmxip.c dnsptr.c hostname.c ipmeprint.c tcp-env.c \
|
dnsip.c dnsmxip.c dnsptr.c hostname.c ipmeprint.c tcp-env.c \
|
||||||
sendmail.c qreceipt.c qsmhook.c qbiff.c forward.c preline.c predate.c \
|
sendmail.c qreceipt.c qsmhook.c qbiff.c forward.c preline.c predate.c \
|
||||||
condredirect.c maildirmake.c maildir2mbox.c maildirwatch.c splogger.c \
|
except.c bouncesaying.c condredirect.c maildirmake.c maildir2mbox.c \
|
||||||
qail.sh elq.sh pinq.sh qmail-upq.sh datemail.sh mailsubj.sh qlx.h \
|
maildirwatch.c splogger.c qail.sh elq.sh pinq.sh qmail-upq.sh \
|
||||||
rcpthosts.h rcpthosts.c commands.h commands.c dnsdoe.h dnsdoe.c \
|
datemail.sh mailsubj.sh qlx.h rcpthosts.h rcpthosts.c commands.h \
|
||||||
fmtqfn.h fmtqfn.c gfrom.h gfrom.c myctime.h myctime.c newfield.h \
|
commands.c dnsdoe.h dnsdoe.c fmtqfn.h fmtqfn.c gfrom.h gfrom.c \
|
||||||
newfield.c qsutil.h qsutil.c readsubdir.h readsubdir.c received.h \
|
myctime.h myctime.c newfield.h newfield.c qsutil.h qsutil.c \
|
||||||
received.c tcpto.h tcpto.c tcpto_clean.c trigger.h trigger.c \
|
readsubdir.h readsubdir.c received.h received.c tcpto.h tcpto.c \
|
||||||
triggerpull.h triggerpull.c trynpbg1.c trysyslog.c conf-cc conf-ld \
|
tcpto_clean.c trigger.h trigger.c triggerpull.h triggerpull.c \
|
||||||
home.sh home+df.sh proc.sh proc+df.sh binm1.sh binm2.sh binm3.sh \
|
trynpbg1.c trysyslog.c conf-cc conf-ld home.sh home+df.sh proc.sh \
|
||||||
binm1+df.sh binm2+df.sh binm3+df.sh find-systype.sh make-compile.sh \
|
proc+df.sh binm1.sh binm2.sh binm3.sh binm1+df.sh binm2+df.sh \
|
||||||
make-load.sh make-makelib.sh trycpp.c warn-auto.sh auto-str.c \
|
binm3+df.sh find-systype.sh make-compile.sh make-load.sh \
|
||||||
auto-int.c auto-int8.c auto-gid.c auto-uid.c install.c instcheck.c \
|
make-makelib.sh trycpp.c warn-auto.sh auto-str.c auto-int.c \
|
||||||
alloc.3 alloc.h alloc.c alloc_re.c case.3 case.h case_diffb.c \
|
auto-int8.c auto-gid.c auto-uid.c hier.c install.c instcheck.c \
|
||||||
case_diffs.c case_lowerb.c case_lowers.c case_starts.c cdb.3 cdb.h \
|
install-big.c alloc.3 alloc.h alloc.c alloc_re.c case.3 case.h \
|
||||||
cdb_hash.c cdb_seek.c cdb_unpack.c cdbmake.h cdbmake_add.c \
|
case_diffb.c case_diffs.c case_lowerb.c case_lowers.c case_starts.c \
|
||||||
cdbmake_hash.c cdbmake_pack.c cdbmss.h cdbmss.c coe.3 coe.h coe.c \
|
cdb.3 cdb.h cdb_hash.c cdb_seek.c cdb_unpack.c cdbmake.h \
|
||||||
fd.h fd_copy.3 fd_copy.c fd_move.3 fd_move.c fifo_make.3 fifo.h \
|
cdbmake_add.c cdbmake_hash.c cdbmake_pack.c cdbmss.h cdbmss.c coe.3 \
|
||||||
fifo.c trymkffo.c fork.h1 fork.h2 tryvfork.c now.3 now.h now.c open.h \
|
coe.h coe.c fd.h fd_copy.3 fd_copy.c fd_move.3 fd_move.c fifo_make.3 \
|
||||||
open_append.c open_excl.c open_read.c open_trunc.c open_write.c \
|
fifo.h fifo.c trymkffo.c fork.h1 fork.h2 tryvfork.c now.3 now.h now.c \
|
||||||
seek.h seek_cur.c seek_end.c seek_set.c seek_trunc.c conf-qmail \
|
open.h open_append.c open_excl.c open_read.c open_trunc.c \
|
||||||
auto_qmail.h qmail.h qmail.c gen_alloc.h gen_allocdefs.h stralloc.3 \
|
open_write.c seek.h seek_cur.c seek_end.c seek_set.c seek_trunc.c \
|
||||||
stralloc.h stralloc_eady.c stralloc_pend.c stralloc_copy.c \
|
conf-qmail auto_qmail.h qmail.h qmail.c gen_alloc.h gen_allocdefs.h \
|
||||||
|
stralloc.3 stralloc.h stralloc_eady.c stralloc_pend.c stralloc_copy.c \
|
||||||
stralloc_opyb.c stralloc_opys.c stralloc_cat.c stralloc_catb.c \
|
stralloc_opyb.c stralloc_opys.c stralloc_cat.c stralloc_catb.c \
|
||||||
stralloc_cats.c stralloc_arts.c strerr.h strerr_sys.c strerr_die.c \
|
stralloc_cats.c stralloc_arts.c strerr.h strerr_sys.c strerr_die.c \
|
||||||
substdio.h substdio.c substdi.c substdo.c substdio_copy.c subfd.h \
|
substdio.h substdio.c substdi.c substdo.c substdio_copy.c subfd.h \
|
||||||
|
|
|
||||||
8
README
8
README
|
|
@ -1,5 +1,5 @@
|
||||||
qmail 1.02
|
qmail 1.03
|
||||||
19980430
|
19980615
|
||||||
Copyright 1998
|
Copyright 1998
|
||||||
D. J. Bernstein, qmail@pobox.com
|
D. J. Bernstein, qmail@pobox.com
|
||||||
|
|
||||||
|
|
@ -8,8 +8,8 @@ It is meant as a replacement for the entire sendmail-binmail system on
|
||||||
typical Internet-connected UNIX hosts. See BLURB, BLURB2, BLURB3, and
|
typical Internet-connected UNIX hosts. See BLURB, BLURB2, BLURB3, and
|
||||||
BLURB4 for more detailed advertisements.
|
BLURB4 for more detailed advertisements.
|
||||||
|
|
||||||
INSTALL says how to set up and test qmail. If you're upgrading from
|
INSTALL says how to set up and test qmail. If you're upgrading from a
|
||||||
1.01, read UPGRADE instead.
|
previous version, read UPGRADE instead.
|
||||||
|
|
||||||
See PIC.* for some ``end-to-end'' pictures of mail flowing through the
|
See PIC.* for some ``end-to-end'' pictures of mail flowing through the
|
||||||
qmail system.
|
qmail system.
|
||||||
|
|
|
||||||
16
REMOVE.binmail
Normal file
16
REMOVE.binmail
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
Here's how to remove binmail from your system. Don't do this if you have
|
||||||
|
configured qmail to use binmail for local delivery.
|
||||||
|
|
||||||
|
|
||||||
|
1. Find the binmail binary on your system: /usr/libexec/mail.local if
|
||||||
|
that exists, otherwise /bin/mail.
|
||||||
|
|
||||||
|
2. Remove permissions from the binmail binary:
|
||||||
|
# chmod 0 /usr/libexec/mail.local
|
||||||
|
|
||||||
|
3. If the binmail binary was /bin/mail, make sure that ``mail'' still
|
||||||
|
invokes a usable mailer. Under SVR4 you may want to link mail to
|
||||||
|
mailx.
|
||||||
|
|
||||||
|
4. Comment out the comsat line in /etc/inetd.conf, and kill -HUP your
|
||||||
|
inetd.
|
||||||
28
REMOVE.sendmail
Normal file
28
REMOVE.sendmail
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
Here's how to remove sendmail from your system.
|
||||||
|
|
||||||
|
1. Find sendmail in your boot scripts. It's usually in either /etc/rc or
|
||||||
|
/etc/init.d/sendmail. It looks like
|
||||||
|
sendmail -bd -q15m
|
||||||
|
-q15m means that it should run the queue every 15 minutes; you may
|
||||||
|
see a different number. Comment out this line.
|
||||||
|
|
||||||
|
2. Kill the sendmail daemon. You should first kill -STOP the daemon; if
|
||||||
|
any children are running, you should kill -CONT, wait, kill -STOP
|
||||||
|
again, and repeat ad nauseam. If there aren't any children, kill
|
||||||
|
-TERM and then kill -CONT.
|
||||||
|
|
||||||
|
3. Check whether you have any messages in the sendmail queue,
|
||||||
|
/var/spool/mqueue. If you do, you will have to try flushing them with
|
||||||
|
sendmail.bak -q. If necessary, wait a while and run sendmail.bak -q
|
||||||
|
again. Repeat until the queue is empty. This may take several days.
|
||||||
|
|
||||||
|
4. Remove the setuid bit on the sendmail binary, to prevent local users
|
||||||
|
from gaining extra privileges through sendmail's security holes. The
|
||||||
|
binary may be at several different locations:
|
||||||
|
# chmod 0 /usr/lib/sendmail
|
||||||
|
# chmod 0 /usr/sbin/sendmail
|
||||||
|
# chmod 0 /usr/lib/sendmail.mx
|
||||||
|
|
||||||
|
5. Move the sendmail binary out of the way:
|
||||||
|
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
|
||||||
|
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
|
||||||
13
TARGETS
13
TARGETS
|
|
@ -288,6 +288,10 @@ preline.o
|
||||||
preline
|
preline
|
||||||
condredirect.o
|
condredirect.o
|
||||||
condredirect
|
condredirect
|
||||||
|
bouncesaying.o
|
||||||
|
bouncesaying
|
||||||
|
except.o
|
||||||
|
except
|
||||||
maildirmake.o
|
maildirmake.o
|
||||||
maildirmake
|
maildirmake
|
||||||
maildir2mbox.o
|
maildir2mbox.o
|
||||||
|
|
@ -297,9 +301,12 @@ maildirwatch
|
||||||
qail
|
qail
|
||||||
elq
|
elq
|
||||||
pinq
|
pinq
|
||||||
qmail-hier.o
|
idedit.o
|
||||||
qmail-hier
|
idedit
|
||||||
|
install-big.o
|
||||||
install.o
|
install.o
|
||||||
|
install-big
|
||||||
|
hier.o
|
||||||
install
|
install
|
||||||
instcheck.o
|
instcheck.o
|
||||||
instcheck
|
instcheck
|
||||||
|
|
@ -352,6 +359,8 @@ qbiff.0
|
||||||
forward.0
|
forward.0
|
||||||
preline.0
|
preline.0
|
||||||
condredirect.0
|
condredirect.0
|
||||||
|
bouncesaying.0
|
||||||
|
except.0
|
||||||
maildirmake.0
|
maildirmake.0
|
||||||
maildir2mbox.0
|
maildir2mbox.0
|
||||||
maildirwatch.0
|
maildirwatch.0
|
||||||
|
|
|
||||||
82
TEST.deliver
Normal file
82
TEST.deliver
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
You can do several tests of qmail delivery without setting up qmail to
|
||||||
|
accept messages through SMTP or through /usr/lib/sendmail:
|
||||||
|
|
||||||
|
1. After you start qmail, look for a
|
||||||
|
qmail: status: local 0/10 remote 0/20
|
||||||
|
line in syslog. qmail-send always prints either ``cannot start'' or
|
||||||
|
``status''. (The big number is a splogger timestamp.)
|
||||||
|
|
||||||
|
2. Do a ps and look for the qmail daemons. There should be four of
|
||||||
|
them, all idle: qmail-send, running as qmails; qmail-lspawn, running
|
||||||
|
as root; qmail-rspawn, running as qmailr; and qmail-clean, running
|
||||||
|
as qmailq. You will also see splogger, running as qmaill.
|
||||||
|
|
||||||
|
3. Local-local test: Send yourself an empty message. (Replace ``me''
|
||||||
|
with your username. Make sure to include the ``to:'' colon.)
|
||||||
|
% echo to: me | /var/qmail/bin/qmail-inject
|
||||||
|
The message will show up immediately in your mailbox, and syslog
|
||||||
|
will show something like this:
|
||||||
|
qmail: new msg 53
|
||||||
|
qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666
|
||||||
|
qmail: starting delivery 1: msg 53 to local me@domain
|
||||||
|
qmail: status: local 1/10 remote 0/20
|
||||||
|
qmail: delivery 1: success: did_1+0+0/
|
||||||
|
qmail: status: local 0/10 remote 0/20
|
||||||
|
qmail: end msg 53
|
||||||
|
(53 is an inode number; 20345 is a process ID; your numbers will
|
||||||
|
probably be different.)
|
||||||
|
|
||||||
|
4. Local-error test: Send a message to a nonexistent local address.
|
||||||
|
% echo to: nonexistent | /var/qmail/bin/qmail-inject
|
||||||
|
qmail: new msg 53
|
||||||
|
qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666
|
||||||
|
qmail: starting delivery 2: msg 53 to local nonexistent@domain
|
||||||
|
qmail: status: local 1/10 remote 0/20
|
||||||
|
qmail: delivery 2: failure: No_such_address.__#5.1.1_/
|
||||||
|
qmail: status: local 0/10 remote 0/20
|
||||||
|
qmail: bounce msg 53 qp 20357
|
||||||
|
qmail: end msg 53
|
||||||
|
qmail: new msg 54
|
||||||
|
qmail: info msg 54: bytes 743 from <> qp 20357 uid 666
|
||||||
|
qmail: starting delivery 3: msg 54 to local me@domain
|
||||||
|
qmail: status: local 1/10 remote 0/20
|
||||||
|
qmail: delivery 3: success: did_1+0+0/
|
||||||
|
qmail: status: local 0/10 remote 0/20
|
||||||
|
qmail: end msg 54
|
||||||
|
You will now have a bounce message in your mailbox.
|
||||||
|
|
||||||
|
5. Local-remote test: Send an empty message to your account on another
|
||||||
|
machine.
|
||||||
|
% echo to: me@wherever | /var/qmail/bin/qmail-inject
|
||||||
|
qmail: new msg 53
|
||||||
|
qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666
|
||||||
|
qmail: starting delivery 4: msg 53 to remote me@wherever
|
||||||
|
qmail: status: local 0/10 remote 1/20
|
||||||
|
qmail: delivery 4: success: 1.2.3.4_accepted_message./...
|
||||||
|
qmail: status: local 0/10 remote 0/20
|
||||||
|
qmail: end msg 53
|
||||||
|
There will be a pause between ``starting delivery'' and ``success'';
|
||||||
|
SMTP is slow. Check that the message is in your mailbox on the other
|
||||||
|
machine.
|
||||||
|
|
||||||
|
6. Local-postmaster test: Send mail to postmaster, any capitalization.
|
||||||
|
% echo to: POSTmaster | /var/qmail/bin/qmail-inject
|
||||||
|
Look for the message in the alias mailbox, normally ~alias/Mailbox.
|
||||||
|
|
||||||
|
7. Double-bounce test: Send a message with a completely bad envelope.
|
||||||
|
% /var/qmail/bin/qmail-inject -f nonexistent
|
||||||
|
To: unknownuser
|
||||||
|
Subject: testing
|
||||||
|
|
||||||
|
This is a test. This is only a test.
|
||||||
|
%
|
||||||
|
(Use end-of-file, not dot, to end the message.) Look for the double
|
||||||
|
bounce in the alias mailbox.
|
||||||
|
|
||||||
|
8. Group membership test:
|
||||||
|
% cat > ~me/.qmail-groups
|
||||||
|
|groups >> MYGROUPS; exit 0
|
||||||
|
% /var/qmail/bin/qmail-inject me-groups < /dev/null
|
||||||
|
% cat ~me/MYGROUPS
|
||||||
|
MYGROUPS will show your normal gid and nothing else. (Under Solaris,
|
||||||
|
make sure to use /usr/ucb/groups; /usr/bin/groups is broken.)
|
||||||
41
TEST.receive
Normal file
41
TEST.receive
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
You can do several tests of messages entering the qmail system:
|
||||||
|
|
||||||
|
1. SMTP server test: Forge some mail locally via SMTP. Replace ``me''
|
||||||
|
with your username and ``domain'' with your host's name.
|
||||||
|
% telnet 127.0.0.1 25
|
||||||
|
Trying 127.0.0.1...
|
||||||
|
Connected to 127.0.0.1.
|
||||||
|
Escape character is '^]'.
|
||||||
|
220 domain ESMTP
|
||||||
|
helo dude
|
||||||
|
250 domain
|
||||||
|
mail <me@domain>
|
||||||
|
250 ok
|
||||||
|
rcpt <me@domain>
|
||||||
|
250 ok
|
||||||
|
data
|
||||||
|
354 go ahead
|
||||||
|
Subject: testing
|
||||||
|
|
||||||
|
This is a test.
|
||||||
|
.
|
||||||
|
250 ok 812345679 qp 12345
|
||||||
|
quit
|
||||||
|
221 domain
|
||||||
|
Connection closed by foreign host.
|
||||||
|
%
|
||||||
|
Look for the message in your mailbox. (Note for programmers: Most
|
||||||
|
SMTP servers need more text after MAIL and RCPT. See RFC 821.)
|
||||||
|
|
||||||
|
2. Remote-local test: Send yourself some mail from another machine.
|
||||||
|
Look for the message in your mailbox.
|
||||||
|
|
||||||
|
3. Remote-error test: Send some mail from another machine to
|
||||||
|
nonexistent@domain. Look for a bounce message in the remote mailbox.
|
||||||
|
|
||||||
|
4. UA test: Try sending mail, first to a local account, then to a
|
||||||
|
remote account, with your normal user agent.
|
||||||
|
|
||||||
|
5. Remote-postmaster test: Send mail from another machine to
|
||||||
|
PoStMaStEr@domain. Look for the message in the alias mailbox,
|
||||||
|
normally ~alias/Mailbox.
|
||||||
2
THANKS
2
THANKS
|
|
@ -168,6 +168,7 @@ JPB = Joe Block
|
||||||
JPH = Justin P. Hannah
|
JPH = Justin P. Hannah
|
||||||
JPR = Jean-Pierre Radley
|
JPR = Jean-Pierre Radley
|
||||||
JRL = John R. Levine
|
JRL = John R. Levine
|
||||||
|
JRM = Jason R. Mastaler
|
||||||
JRY = Jamie R. Yukes
|
JRY = Jamie R. Yukes
|
||||||
JS = Jesper Skriver
|
JS = Jesper Skriver
|
||||||
JTB = Jonathan T. Bowie
|
JTB = Jonathan T. Bowie
|
||||||
|
|
@ -231,6 +232,7 @@ MWE = Mark W. Eichin
|
||||||
NA = Norm Aleks
|
NA = Norm Aleks
|
||||||
NAA = Nicholas A. Amato
|
NAA = Nicholas A. Amato
|
||||||
NH = Nick Holloway
|
NH = Nick Holloway
|
||||||
|
NND = N. Dudorov
|
||||||
NR = Norbert Roeding
|
NR = Norbert Roeding
|
||||||
NW = Nicholas Waples
|
NW = Nicholas Waples
|
||||||
OK = Oezguer Kesim
|
OK = Oezguer Kesim
|
||||||
|
|
|
||||||
11
TODO
11
TODO
|
|
@ -1,6 +1,3 @@
|
||||||
test qmail-qmqpc
|
|
||||||
test qmail-qmqpd
|
|
||||||
|
|
||||||
consider stripping vdoms for VERPs; tnx PJH
|
consider stripping vdoms for VERPs; tnx PJH
|
||||||
consider ~ in qmail-local for doing defaultdelivery (not recursively)
|
consider ~ in qmail-local for doing defaultdelivery (not recursively)
|
||||||
consider POP bulletins
|
consider POP bulletins
|
||||||
|
|
@ -16,10 +13,10 @@ test for linux fifo close bug at compile time
|
||||||
|
|
||||||
eliminate qsmhook
|
eliminate qsmhook
|
||||||
finish OTBS conversion
|
finish OTBS conversion
|
||||||
use lib822 in qmail-inject
|
use mess822 in qmail-inject
|
||||||
use lib822 in qreceipt
|
use mess822 in qreceipt
|
||||||
use lib822 in qbiff
|
use mess822 in qbiff
|
||||||
use lib822 in maildirwatch
|
use mess822 in maildirwatch
|
||||||
eliminate token822, headerbody, hfield
|
eliminate token822, headerbody, hfield
|
||||||
replace INTERNALS and THOUGHTS with a real paper describing qmail
|
replace INTERNALS and THOUGHTS with a real paper describing qmail
|
||||||
handle IPv6
|
handle IPv6
|
||||||
|
|
|
||||||
166
UPGRADE
166
UPGRADE
|
|
@ -3,24 +3,21 @@ information generally), the qmail system comes with NO WARRANTY. It's
|
||||||
much more secure and reliable than sendmail, but that's not saying much.
|
much more secure and reliable than sendmail, but that's not saying much.
|
||||||
|
|
||||||
|
|
||||||
Here's how to upgrade from qmail 1.01 to qmail 1.02. This procedure will
|
Here's how to upgrade to qmail 1.03. This procedure will overwrite the
|
||||||
overwrite the old qmail binaries. Furthermore, it may begin delivering
|
old qmail binaries. Furthermore, it may begin delivering messages from
|
||||||
messages from the queue before you have had a chance to test it.
|
the queue before you have had a chance to test it.
|
||||||
|
|
||||||
|
|
||||||
WARNING: qlist has been split into a separate package. You can obtain it
|
WARNING for upgrades from 1.00 or 1.01: qlist has been split into a
|
||||||
from http://pobox.com/~djb/qlist.html if you have any users who need it.
|
separate package. You can obtain it from http://pobox.com/~djb/qlist.html
|
||||||
|
if you have any users who need it.
|
||||||
|
|
||||||
WARNING: recipientmap is gone. The virtualdomains mechanism has been
|
WARNING for upgrades from 1.01: recipientmap is gone. The virtualdomains
|
||||||
expanded to support virtual users.
|
mechanism has been expanded to support virtual users.
|
||||||
|
|
||||||
WARNING: qmail-start is now normally started from /var/qmail/rc. If you
|
|
||||||
have changed your qmail-start line, you will have to change
|
|
||||||
/var/qmail/rc accordingly in step 8.
|
|
||||||
|
|
||||||
|
|
||||||
Before starting, compare conf* to your old conf*, and make any necessary
|
Before starting, compare conf* to your old conf*, and make any necessary
|
||||||
changes. Do not copy your old conf*; the baseline has changed.
|
changes. You can copy conf* from 1.02.
|
||||||
|
|
||||||
|
|
||||||
How to install:
|
How to install:
|
||||||
|
|
@ -39,144 +36,31 @@ How to install:
|
||||||
Wait for current qmail-smtpd processes to die.
|
Wait for current qmail-smtpd processes to die.
|
||||||
|
|
||||||
5. Install the new binaries and man pages:
|
5. Install the new binaries and man pages:
|
||||||
# make setup
|
# make setup check
|
||||||
|
|
||||||
6. Run instcheck to make sure it doesn't print any warnings:
|
6. If your boot scripts are using qmail-start instead of /var/qmail/rc:
|
||||||
# make check
|
Copy /var/qmail/boot/home to /var/qmail/rc. (Use home+df instead if
|
||||||
|
|
||||||
7. Copy /var/qmail/boot/home to /var/qmail/rc. (Use home+df instead if
|
|
||||||
you have installed dot-forward; use proc or proc+df if you are using
|
you have installed dot-forward; use proc or proc+df if you are using
|
||||||
procmail by default for local deliveries.)
|
procmail by default for local deliveries.) Compare /var/qmail/rc to
|
||||||
|
your qmail-start boot line, and edit /var/qmail/rc if necessary.
|
||||||
8. Compare /var/qmail/rc to the qmail-start boot line in your boot
|
Replace your qmail-start boot line with
|
||||||
scripts. Edit /var/qmail/rc if necessary. Replace the qmail-start
|
|
||||||
boot line in your boot scripts with
|
|
||||||
csh -cf '/var/qmail/rc &'
|
csh -cf '/var/qmail/rc &'
|
||||||
|
|
||||||
9. Reenable deliveries:
|
7. Reenable deliveries:
|
||||||
# csh -cf '/var/qmail/rc &'
|
# csh -cf '/var/qmail/rc &'
|
||||||
|
|
||||||
10. Reenable SMTP service by restoring the smtp line in inetd.conf; kill
|
8. Read TEST.deliver.
|
||||||
|
|
||||||
|
9. Reenable SMTP service by restoring the smtp line in inetd.conf; kill
|
||||||
-HUP your inetd. (If you are using tcpserver, simply kill -CONT your
|
-HUP your inetd. (If you are using tcpserver, simply kill -CONT your
|
||||||
tcpserver. If you are running a QMTP server, reenable that too.)
|
tcpserver. If you are running a QMTP server, reenable that too.)
|
||||||
|
|
||||||
|
10. Read TEST.receive.
|
||||||
How to test (steps 11-17 can be done before step 10):
|
|
||||||
|
|
||||||
11. Look for a
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
line in syslog. (The big number is a splogger timestamp.)
|
|
||||||
|
|
||||||
12. Local-local test: Send yourself an empty message. (Replace ``me''
|
|
||||||
with your username. Make sure to include the ``to:'' colon.)
|
|
||||||
% echo to: me | /var/qmail/bin/qmail-inject
|
|
||||||
The message will show up immediately in your mailbox, and syslog
|
|
||||||
will show something like this:
|
|
||||||
qmail: new msg 53
|
|
||||||
qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666
|
|
||||||
qmail: starting delivery 1: msg 53 to local me@domain
|
|
||||||
qmail: status: local 1/10 remote 0/20
|
|
||||||
qmail: delivery 1: success: did_1+0+0/
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: end msg 53
|
|
||||||
(53 is an inode number; 20345 is a process ID; your numbers will
|
|
||||||
probably be different.)
|
|
||||||
|
|
||||||
13. Local-error test: Send a message to a nonexistent local address.
|
|
||||||
% echo to: nonexistent | /var/qmail/bin/qmail-inject
|
|
||||||
qmail: new msg 53
|
|
||||||
qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666
|
|
||||||
qmail: starting delivery 2: msg 53 to local nonexistent@domain
|
|
||||||
qmail: status: local 1/10 remote 0/20
|
|
||||||
qmail: delivery 2: failure: No_such_address.__#5.1.1_/
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: bounce msg 53 qp 20357
|
|
||||||
qmail: end msg 53
|
|
||||||
qmail: new msg 54
|
|
||||||
qmail: info msg 54: bytes 743 from <> qp 20357 uid 666
|
|
||||||
qmail: starting delivery 3: msg 54 to local me@domain
|
|
||||||
qmail: status: local 1/10 remote 0/20
|
|
||||||
qmail: delivery 3: success: did_1+0+0/
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: end msg 54
|
|
||||||
You will now have a bounce message in your mailbox.
|
|
||||||
|
|
||||||
14. Local-remote test: Send an empty message to your account on another
|
|
||||||
machine.
|
|
||||||
% echo to: me@wherever | /var/qmail/bin/qmail-inject
|
|
||||||
qmail: new msg 53
|
|
||||||
qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666
|
|
||||||
qmail: starting delivery 4: msg 53 to remote me@wherever
|
|
||||||
qmail: status: local 0/10 remote 1/20
|
|
||||||
qmail: delivery 4: success: 1.2.3.4_accepted_message./...
|
|
||||||
qmail: status: local 0/10 remote 0/20
|
|
||||||
qmail: end msg 53
|
|
||||||
There will be a pause between ``starting delivery'' and ``success'';
|
|
||||||
SMTP is slow. Check that the message is in your mailbox on the other
|
|
||||||
machine.
|
|
||||||
|
|
||||||
15. Local-postmaster test: Send mail to postmaster, any capitalization.
|
|
||||||
% echo to: POSTmaster | /var/qmail/bin/qmail-inject
|
|
||||||
Look for the message in the alias mailbox.
|
|
||||||
|
|
||||||
16. Double-bounce test: Send a message with a completely bad envelope.
|
|
||||||
% /var/qmail/bin/qmail-inject -f nonexistent
|
|
||||||
To: unknownuser
|
|
||||||
Subject: testing
|
|
||||||
|
|
||||||
This is a test. This is only a test.
|
|
||||||
%
|
|
||||||
(Use end-of-file, not dot, to end the message.) Look for the double
|
|
||||||
bounce in the alias mailbox.
|
|
||||||
|
|
||||||
17. Group membership test:
|
|
||||||
% cat > ~me/.qmail-groups
|
|
||||||
|groups >> MYGROUPS; exit 0
|
|
||||||
% /var/qmail/bin/qmail-inject me-groups < /dev/null
|
|
||||||
% cat ~me/MYGROUPS
|
|
||||||
MYGROUPS will show your normal gid and nothing else. (Under Solaris,
|
|
||||||
make sure to use /usr/ucb/groups; /usr/bin/groups is broken.)
|
|
||||||
|
|
||||||
18. SMTP server test: Forge some mail locally via SMTP.
|
|
||||||
% telnet 127.0.0.1 25
|
|
||||||
Trying 127.0.0.1...
|
|
||||||
Connected to 127.0.0.1.
|
|
||||||
Escape character is '^]'.
|
|
||||||
220 domain ESMTP
|
|
||||||
helo dude
|
|
||||||
250-domain
|
|
||||||
250-PIPELINING
|
|
||||||
250 8BITMIME
|
|
||||||
mail <me@domain>
|
|
||||||
250 ok
|
|
||||||
rcpt <me@domain>
|
|
||||||
250 ok
|
|
||||||
data
|
|
||||||
354 go ahead
|
|
||||||
Subject: testing
|
|
||||||
|
|
||||||
This is a test.
|
|
||||||
.
|
|
||||||
250 ok 812345679 qp 12345
|
|
||||||
quit
|
|
||||||
221 domain
|
|
||||||
Connection closed by foreign host.
|
|
||||||
%
|
|
||||||
Look for the message in your mailbox.
|
|
||||||
|
|
||||||
19. Remote-local test: Send yourself some mail from another machine.
|
|
||||||
|
|
||||||
20. Remote-error test: I think you can figure this one out.
|
|
||||||
|
|
||||||
21. UA test: Try sending mail, first to a local account, then to a
|
|
||||||
remote account, with your normal user agent.
|
|
||||||
|
|
||||||
22. Remote-postmaster test: Send mail from another machine to
|
|
||||||
PoStMaStEr@domain. Look for the message in the alias mailbox.
|
|
||||||
|
|
||||||
|
|
||||||
That's it! To report success:
|
That's it! To report success:
|
||||||
% ( echo 'First M. Last'; cat `cat SYSDEPS` ) \
|
% ( echo 'First M. Last'; cat `cat SYSDEPS` ) | mail djb-qst@cr.yp.to
|
||||||
| mail djb-qst@cr.yp.to
|
Replace First M. Last with your name.
|
||||||
Replace First M. Last with your name. If you have questions about qmail,
|
|
||||||
join the qmail mailing list; see http://pobox.com/~djb/qmail.html.
|
If you have questions about qmail, join the qmail mailing list; see
|
||||||
|
http://pobox.com/~djb/qmail.html.
|
||||||
|
|
|
||||||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
qmail 1.02
|
qmail 1.03
|
||||||
|
|
|
||||||
71
bouncesaying.1
Normal file
71
bouncesaying.1
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
.TH bouncesaying 1
|
||||||
|
.SH NAME
|
||||||
|
bouncesaying \- perhaps bounce each incoming message
|
||||||
|
.SH SYNOPSIS
|
||||||
|
in
|
||||||
|
.BR .qmail :
|
||||||
|
.B |bouncesaying
|
||||||
|
.I error
|
||||||
|
[
|
||||||
|
.I program
|
||||||
|
[
|
||||||
|
.I arg ...
|
||||||
|
]
|
||||||
|
]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B bouncesaying
|
||||||
|
feeds each new mail message to
|
||||||
|
.I program
|
||||||
|
with the given arguments.
|
||||||
|
If
|
||||||
|
.I program
|
||||||
|
exits 0,
|
||||||
|
.B bouncesaying
|
||||||
|
prints
|
||||||
|
.I error
|
||||||
|
and bounces the message.
|
||||||
|
|
||||||
|
If
|
||||||
|
.I program
|
||||||
|
exits 111,
|
||||||
|
.B bouncesaying
|
||||||
|
exits 111,
|
||||||
|
so delivery will be retried later.
|
||||||
|
|
||||||
|
If
|
||||||
|
.I program
|
||||||
|
exits anything else
|
||||||
|
(or does not exist),
|
||||||
|
.B bouncesaying
|
||||||
|
exits 0,
|
||||||
|
so the rest of
|
||||||
|
.B .qmail
|
||||||
|
will be processed as usual.
|
||||||
|
|
||||||
|
Note that
|
||||||
|
it is not safe for
|
||||||
|
.I program
|
||||||
|
to fork a child that
|
||||||
|
reads the message in the background.
|
||||||
|
|
||||||
|
If
|
||||||
|
.I program
|
||||||
|
is not supplied,
|
||||||
|
.B bouncesaying
|
||||||
|
always bounces the message:
|
||||||
|
|
||||||
|
.EX
|
||||||
|
|bouncesaying 'This address no longer accepts mail.'
|
||||||
|
.EE
|
||||||
|
|
||||||
|
.B WARNING:
|
||||||
|
If you create a
|
||||||
|
.B .qmail
|
||||||
|
file to enable
|
||||||
|
.BR bouncesaying ,
|
||||||
|
make sure to also add a line specifying delivery to your normal mailbox.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
condredirect(1),
|
||||||
|
except(1),
|
||||||
|
dot-qmail(5),
|
||||||
|
qmail-command(8)
|
||||||
41
bouncesaying.c
Normal file
41
bouncesaying.c
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#include "fork.h"
|
||||||
|
#include "strerr.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "wait.h"
|
||||||
|
#include "sig.h"
|
||||||
|
#include "exit.h"
|
||||||
|
|
||||||
|
#define FATAL "bouncesaying: fatal: "
|
||||||
|
|
||||||
|
void main(argc,argv)
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
{
|
||||||
|
int pid;
|
||||||
|
int wstat;
|
||||||
|
|
||||||
|
if (!argv[1])
|
||||||
|
strerr_die1x(100,"bouncesaying: usage: bouncesaying error [ program [ arg ... ] ]");
|
||||||
|
|
||||||
|
if (argv[2]) {
|
||||||
|
pid = fork();
|
||||||
|
if (pid == -1)
|
||||||
|
strerr_die2sys(111,FATAL,"unable to fork: ");
|
||||||
|
if (pid == 0) {
|
||||||
|
execvp(argv[2],argv + 2);
|
||||||
|
if (error_temp(errno)) _exit(111);
|
||||||
|
_exit(100);
|
||||||
|
}
|
||||||
|
if (wait_pid(&wstat,pid) == -1)
|
||||||
|
strerr_die2x(111,FATAL,"wait failed");
|
||||||
|
if (wait_crashed(wstat))
|
||||||
|
strerr_die2x(111,FATAL,"child crashed");
|
||||||
|
switch(wait_exitcode(wstat)) {
|
||||||
|
case 0: break;
|
||||||
|
case 111: strerr_die2x(111,FATAL,"temporary child error");
|
||||||
|
default: _exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strerr_die1x(100,argv[1]);
|
||||||
|
}
|
||||||
|
|
@ -56,6 +56,8 @@ file to enable
|
||||||
.BR condredirect ,
|
.BR condredirect ,
|
||||||
make sure to also add a line specifying delivery to your normal mailbox.
|
make sure to also add a line specifying delivery to your normal mailbox.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
|
bouncesaying(1),
|
||||||
|
except(1),
|
||||||
dot-qmail(5),
|
dot-qmail(5),
|
||||||
qmail-command(8),
|
qmail-command(8),
|
||||||
qmail-queue(8)
|
qmail-queue(8)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
022
|
002
|
||||||
|
|
||||||
These stat bits are not allowed in ~ and ~/.qmail.
|
These stat bits are not allowed in ~ and ~/.qmail. On most systems, the
|
||||||
|
default umask is 022 or 077, so 022 will work here.
|
||||||
|
|
||||||
Note that ~ftp, ~www, ~uucp, etc. should be owned by root.
|
Note that ~ftp, ~www, ~uucp, etc. should be owned by root.
|
||||||
|
|
|
||||||
12
dns.c
12
dns.c
|
|
@ -271,12 +271,11 @@ int pref;
|
||||||
int r;
|
int r;
|
||||||
struct ip_mx ix;
|
struct ip_mx ix;
|
||||||
|
|
||||||
if (sa->len && (sa->s[0] == '['))
|
|
||||||
{
|
|
||||||
if (!stralloc_copy(&glue,sa)) return DNS_MEM;
|
if (!stralloc_copy(&glue,sa)) return DNS_MEM;
|
||||||
if (!stralloc_0(&glue)) return DNS_MEM;
|
if (!stralloc_0(&glue)) return DNS_MEM;
|
||||||
|
if (glue.s[0]) {
|
||||||
ix.pref = 0;
|
ix.pref = 0;
|
||||||
if (!glue.s[ip_scanbracket(glue.s,&ix.ip)])
|
if (!glue.s[ip_scan(glue.s,&ix.ip)] || !glue.s[ip_scanbracket(glue.s,&ix.ip)])
|
||||||
{
|
{
|
||||||
if (!ipalloc_append(ia,&ix)) return DNS_MEM;
|
if (!ipalloc_append(ia,&ix)) return DNS_MEM;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -316,6 +315,7 @@ unsigned long random;
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
struct mx { stralloc sa; unsigned short p; } *mx;
|
struct mx { stralloc sa; unsigned short p; } *mx;
|
||||||
|
struct ip_mx ix;
|
||||||
int nummx;
|
int nummx;
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
|
@ -324,13 +324,11 @@ unsigned long random;
|
||||||
if (!ipalloc_readyplus(ia,0)) return DNS_MEM;
|
if (!ipalloc_readyplus(ia,0)) return DNS_MEM;
|
||||||
ia->len = 0;
|
ia->len = 0;
|
||||||
|
|
||||||
if (sa->len && (sa->s[0] == '['))
|
|
||||||
{
|
|
||||||
struct ip_mx ix;
|
|
||||||
if (!stralloc_copy(&glue,sa)) return DNS_MEM;
|
if (!stralloc_copy(&glue,sa)) return DNS_MEM;
|
||||||
if (!stralloc_0(&glue)) return DNS_MEM;
|
if (!stralloc_0(&glue)) return DNS_MEM;
|
||||||
|
if (glue.s[0]) {
|
||||||
ix.pref = 0;
|
ix.pref = 0;
|
||||||
if (!glue.s[ip_scanbracket(glue.s,&ix.ip)])
|
if (!glue.s[ip_scan(glue.s,&ix.ip)] || !glue.s[ip_scanbracket(glue.s,&ix.ip)])
|
||||||
{
|
{
|
||||||
if (!ipalloc_append(ia,&ix)) return DNS_MEM;
|
if (!ipalloc_append(ia,&ix)) return DNS_MEM;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
33
except.1
Normal file
33
except.1
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
.TH except 1
|
||||||
|
.SH NAME
|
||||||
|
except \- reverse the exit code of a program
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B except
|
||||||
|
.I program
|
||||||
|
[
|
||||||
|
.I arg ...
|
||||||
|
]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B except
|
||||||
|
runs
|
||||||
|
.I program
|
||||||
|
with the given arguments.
|
||||||
|
|
||||||
|
If
|
||||||
|
.I program
|
||||||
|
exits 0,
|
||||||
|
.B except
|
||||||
|
exits 100.
|
||||||
|
If
|
||||||
|
.I program
|
||||||
|
exits 111,
|
||||||
|
.B except
|
||||||
|
exits 111.
|
||||||
|
If
|
||||||
|
.I program
|
||||||
|
exits anything else,
|
||||||
|
.B except
|
||||||
|
exits 0.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
bouncesaying(1),
|
||||||
|
condredirect(1)
|
||||||
37
except.c
Normal file
37
except.c
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include "fork.h"
|
||||||
|
#include "strerr.h"
|
||||||
|
#include "wait.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "exit.h"
|
||||||
|
|
||||||
|
#define FATAL "except: fatal: "
|
||||||
|
|
||||||
|
void main(argc,argv)
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
{
|
||||||
|
int pid;
|
||||||
|
int wstat;
|
||||||
|
|
||||||
|
if (!argv[1])
|
||||||
|
strerr_die1x(100,"except: usage: except program [ arg ... ]");
|
||||||
|
|
||||||
|
pid = fork();
|
||||||
|
if (pid == -1)
|
||||||
|
strerr_die2sys(111,FATAL,"unable to fork: ");
|
||||||
|
if (pid == 0) {
|
||||||
|
execvp(argv[1],argv + 1);
|
||||||
|
if (error_temp(errno)) _exit(111);
|
||||||
|
_exit(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wait_pid(&wstat,pid) == -1)
|
||||||
|
strerr_die2x(111,FATAL,"wait failed");
|
||||||
|
if (wait_crashed(wstat))
|
||||||
|
strerr_die2x(111,FATAL,"child crashed");
|
||||||
|
switch(wait_exitcode(wstat)) {
|
||||||
|
case 0: _exit(100);
|
||||||
|
case 111: strerr_die2x(111,FATAL,"temporary child error");
|
||||||
|
default: _exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -71,7 +71,7 @@ Fortunately, a system administrator can easily obtain a copy of a
|
||||||
931/1413/Ident/TAP server, such as
|
931/1413/Ident/TAP server, such as
|
||||||
.BR pidentd .
|
.BR pidentd .
|
||||||
Unfortunately,
|
Unfortunately,
|
||||||
many incompetent system administrators fail to do this,
|
some system administrators fail to do this,
|
||||||
and are thus unable to figure out which local user
|
and are thus unable to figure out which local user
|
||||||
was responsible for generating a message.
|
was responsible for generating a message.
|
||||||
|
|
||||||
|
|
|
||||||
252
hier.c
Normal file
252
hier.c
Normal file
|
|
@ -0,0 +1,252 @@
|
||||||
|
#include "auto_qmail.h"
|
||||||
|
#include "auto_split.h"
|
||||||
|
#include "auto_uids.h"
|
||||||
|
#include "fmt.h"
|
||||||
|
#include "fifo.h"
|
||||||
|
|
||||||
|
char buf[100 + FMT_ULONG];
|
||||||
|
|
||||||
|
void dsplit(base,uid,mode)
|
||||||
|
char *base; /* must be under 100 bytes */
|
||||||
|
int uid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
char *x;
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
|
d(auto_qmail,base,uid,auto_gidq,mode);
|
||||||
|
|
||||||
|
for (i = 0;i < auto_split;++i) {
|
||||||
|
x = buf;
|
||||||
|
x += fmt_str(x,base);
|
||||||
|
x += fmt_str(x,"/");
|
||||||
|
x += fmt_ulong(x,i);
|
||||||
|
*x = 0;
|
||||||
|
|
||||||
|
d(auto_qmail,buf,uid,auto_gidq,mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hier()
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
147
idedit.c
Normal file
147
idedit.c
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <grp.h>
|
||||||
|
#include "readwrite.h"
|
||||||
|
#include "exit.h"
|
||||||
|
#include "scan.h"
|
||||||
|
#include "fmt.h"
|
||||||
|
#include "strerr.h"
|
||||||
|
#include "open.h"
|
||||||
|
#include "seek.h"
|
||||||
|
#include "fork.h"
|
||||||
|
|
||||||
|
#define FATAL "idedit: fatal: "
|
||||||
|
#define WARNING "idedit: warning: "
|
||||||
|
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
void byte(pos,value)
|
||||||
|
char *pos;
|
||||||
|
unsigned int value;
|
||||||
|
{
|
||||||
|
unsigned long u;
|
||||||
|
unsigned char ch;
|
||||||
|
|
||||||
|
if (pos[scan_ulong(pos,&u)]) return;
|
||||||
|
|
||||||
|
if (seek_set(fd,(seek_pos) u) == -1)
|
||||||
|
strerr_die2sys(111,FATAL,"unable to seek: ");
|
||||||
|
|
||||||
|
ch = value;
|
||||||
|
if (write(fd,&ch,1) != 1)
|
||||||
|
strerr_die2sys(111,FATAL,"unable to write: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
char *args[10];
|
||||||
|
|
||||||
|
void run()
|
||||||
|
{
|
||||||
|
int pid;
|
||||||
|
int wstat;
|
||||||
|
|
||||||
|
pid = fork();
|
||||||
|
if (pid == -1)
|
||||||
|
strerr_die2sys(111,FATAL,"unable to fork: ");
|
||||||
|
|
||||||
|
if (pid == 0) {
|
||||||
|
execv(*args,args);
|
||||||
|
strerr_die4sys(111,WARNING,"unable to run ",*args,": ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wait_pid(&wstat,pid) != pid)
|
||||||
|
strerr_die2sys(111,FATAL,"waitpid surprise");
|
||||||
|
}
|
||||||
|
|
||||||
|
void u(account,group,home,pos0,pos1,pos2,pos3)
|
||||||
|
char *account;
|
||||||
|
char *group;
|
||||||
|
char *home;
|
||||||
|
char *pos0;
|
||||||
|
char *pos1;
|
||||||
|
char *pos2;
|
||||||
|
char *pos3;
|
||||||
|
{
|
||||||
|
struct passwd *pw;
|
||||||
|
unsigned int value;
|
||||||
|
|
||||||
|
pw = getpwnam(account);
|
||||||
|
|
||||||
|
if (!pw && group) {
|
||||||
|
args[0] = "add-account";
|
||||||
|
args[1] = account;
|
||||||
|
args[2] = group;
|
||||||
|
args[3] = home;
|
||||||
|
args[4] = 0;
|
||||||
|
run();
|
||||||
|
pw = getpwnam(account);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pw)
|
||||||
|
strerr_die3x(111,FATAL,"unable to find uid for ",account);
|
||||||
|
|
||||||
|
value = pw->pw_uid;
|
||||||
|
byte(pos0,value); value >>= 8;
|
||||||
|
byte(pos1,value); value >>= 8;
|
||||||
|
byte(pos2,value); value >>= 8;
|
||||||
|
byte(pos3,value); value >>= 8;
|
||||||
|
if (value)
|
||||||
|
strerr_die3x(111,FATAL,"excessively large uid for ",account);
|
||||||
|
}
|
||||||
|
|
||||||
|
void g(group,pos0,pos1,pos2,pos3)
|
||||||
|
char *group;
|
||||||
|
char *pos0;
|
||||||
|
char *pos1;
|
||||||
|
char *pos2;
|
||||||
|
char *pos3;
|
||||||
|
{
|
||||||
|
struct group *gr;
|
||||||
|
unsigned int value;
|
||||||
|
|
||||||
|
gr = getgrnam(group);
|
||||||
|
|
||||||
|
if (!gr) {
|
||||||
|
args[0] = "add-group";
|
||||||
|
args[1] = group;
|
||||||
|
args[2] = 0;
|
||||||
|
run();
|
||||||
|
gr = getgrnam(group);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gr)
|
||||||
|
strerr_die3x(111,FATAL,"unable to find gid for ",group);
|
||||||
|
|
||||||
|
value = gr->gr_gid;
|
||||||
|
byte(pos0,value); value >>= 8;
|
||||||
|
byte(pos1,value); value >>= 8;
|
||||||
|
byte(pos2,value); value >>= 8;
|
||||||
|
byte(pos3,value); value >>= 8;
|
||||||
|
if (value)
|
||||||
|
strerr_die3x(111,FATAL,"excessively large gid for ",group);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(argc,argv)
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
{
|
||||||
|
if (argc < 42) _exit(100);
|
||||||
|
|
||||||
|
fd = open_write(argv[1]);
|
||||||
|
if (fd == -1) strerr_die4sys(111,FATAL,"unable to open ",argv[1],": ");
|
||||||
|
|
||||||
|
g("qmail",argv[34],argv[35],argv[36],argv[37]);
|
||||||
|
g("nofiles",argv[38],argv[39],argv[40],argv[41]);
|
||||||
|
|
||||||
|
u("root",(char *) 0,"/",argv[14],argv[15],argv[16],argv[17]);
|
||||||
|
|
||||||
|
u("qmaild","nofiles","/var/qmail",argv[6],argv[7],argv[8],argv[9]);
|
||||||
|
u("qmaill","nofiles","/var/qmail",argv[10],argv[11],argv[12],argv[13]);
|
||||||
|
u("qmailp","nofiles","/var/qmail",argv[18],argv[19],argv[20],argv[21]);
|
||||||
|
u("alias","nofiles","/var/qmail/alias",argv[2],argv[3],argv[4],argv[5]);
|
||||||
|
|
||||||
|
u("qmailq","qmail","/var/qmail",argv[22],argv[23],argv[24],argv[25]);
|
||||||
|
u("qmailr","qmail","/var/qmail",argv[26],argv[27],argv[28],argv[29]);
|
||||||
|
u("qmails","qmail","/var/qmail",argv[30],argv[31],argv[32],argv[33]);
|
||||||
|
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
285
install-big.c
Normal file
285
install-big.c
Normal file
|
|
@ -0,0 +1,285 @@
|
||||||
|
#include "auto_qmail.h"
|
||||||
|
#include "auto_split.h"
|
||||||
|
#include "auto_uids.h"
|
||||||
|
#include "fmt.h"
|
||||||
|
#include "fifo.h"
|
||||||
|
|
||||||
|
char buf[100 + FMT_ULONG];
|
||||||
|
|
||||||
|
void dsplit(base,uid,mode)
|
||||||
|
char *base; /* must be under 100 bytes */
|
||||||
|
int uid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
char *x;
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
|
d(auto_qmail,base,uid,auto_gidq,mode);
|
||||||
|
|
||||||
|
for (i = 0;i < auto_split;++i) {
|
||||||
|
x = buf;
|
||||||
|
x += fmt_str(x,base);
|
||||||
|
x += fmt_str(x,"/");
|
||||||
|
x += fmt_ulong(x,i);
|
||||||
|
*x = 0;
|
||||||
|
|
||||||
|
d(auto_qmail,buf,uid,auto_gidq,mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hier()
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
|
||||||
|
c(auto_qmail,"bin","dot-forward",auto_uido,auto_gidq,0755);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
d(auto_qmail,"doc/fastforward",auto_uido,auto_gidq,0755);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
c(auto_qmail,"doc/fastforward","ALIASES",auto_uido,auto_gidq,0644);
|
||||||
|
|
||||||
|
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(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);
|
||||||
|
}
|
||||||
257
install.c
257
install.c
|
|
@ -1,167 +1,164 @@
|
||||||
#include "substdio.h"
|
#include "substdio.h"
|
||||||
#include "stralloc.h"
|
#include "strerr.h"
|
||||||
#include "getln.h"
|
#include "error.h"
|
||||||
|
#include "open.h"
|
||||||
#include "readwrite.h"
|
#include "readwrite.h"
|
||||||
#include "exit.h"
|
#include "exit.h"
|
||||||
#include "open.h"
|
|
||||||
#include "error.h"
|
|
||||||
#include "strerr.h"
|
|
||||||
#include "byte.h"
|
|
||||||
#include "fifo.h"
|
|
||||||
|
|
||||||
stralloc target = {0};
|
extern void hier();
|
||||||
char *to;
|
|
||||||
|
|
||||||
#define FATAL "install: fatal: "
|
#define FATAL "install: fatal: "
|
||||||
void nomem() { strerr_die2x(111,FATAL,"out of memory"); }
|
|
||||||
|
int fdsourcedir = -1;
|
||||||
|
|
||||||
|
void h(home,uid,gid,mode)
|
||||||
|
char *home;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
if (mkdir(home,0700) == -1)
|
||||||
|
if (errno != error_exist)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to mkdir ",home,": ");
|
||||||
|
if (chown(home,uid,gid) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to chown ",home,": ");
|
||||||
|
if (chmod(home,mode) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to chmod ",home,": ");
|
||||||
|
}
|
||||||
|
|
||||||
|
void d(home,subdir,uid,gid,mode)
|
||||||
|
char *home;
|
||||||
|
char *subdir;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
if (mkdir(subdir,0700) == -1)
|
||||||
|
if (errno != error_exist)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to mkdir ",home,"/",subdir,": ");
|
||||||
|
if (chown(subdir,uid,gid) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to chown ",home,"/",subdir,": ");
|
||||||
|
if (chmod(subdir,mode) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to chmod ",home,"/",subdir,": ");
|
||||||
|
}
|
||||||
|
|
||||||
|
void p(home,fifo,uid,gid,mode)
|
||||||
|
char *home;
|
||||||
|
char *fifo;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
if (fifo_make(fifo,0700) == -1)
|
||||||
|
if (errno != error_exist)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to mkfifo ",home,"/",fifo,": ");
|
||||||
|
if (chown(fifo,uid,gid) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to chown ",home,"/",fifo,": ");
|
||||||
|
if (chmod(fifo,mode) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to chmod ",home,"/",fifo,": ");
|
||||||
|
}
|
||||||
|
|
||||||
char inbuf[SUBSTDIO_INSIZE];
|
char inbuf[SUBSTDIO_INSIZE];
|
||||||
char outbuf[SUBSTDIO_OUTSIZE];
|
char outbuf[SUBSTDIO_OUTSIZE];
|
||||||
substdio ssin;
|
substdio ssin;
|
||||||
substdio ssout;
|
substdio ssout;
|
||||||
|
|
||||||
void doit(line)
|
void c(home,subdir,file,uid,gid,mode)
|
||||||
stralloc *line;
|
char *home;
|
||||||
|
char *subdir;
|
||||||
|
char *file;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
{
|
{
|
||||||
char *x;
|
|
||||||
unsigned int xlen;
|
|
||||||
unsigned int i;
|
|
||||||
char *type;
|
|
||||||
char *uidstr;
|
|
||||||
char *gidstr;
|
|
||||||
char *modestr;
|
|
||||||
char *mid;
|
|
||||||
char *name;
|
|
||||||
unsigned long uid;
|
|
||||||
unsigned long gid;
|
|
||||||
unsigned long mode;
|
|
||||||
int fdin;
|
int fdin;
|
||||||
int fdout;
|
int fdout;
|
||||||
unsigned long zlen;
|
|
||||||
|
|
||||||
x = line->s; xlen = line->len;
|
if (fchdir(fdsourcedir) == -1)
|
||||||
|
strerr_die2sys(111,FATAL,"unable to switch back to source directory: ");
|
||||||
|
|
||||||
type = x;
|
fdin = open_read(file);
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
uidstr = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
gidstr = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
modestr = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
mid = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
name = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
if (!stralloc_copys(&target,to)) nomem();
|
|
||||||
if (!stralloc_cats(&target,mid)) nomem();
|
|
||||||
if (!stralloc_cats(&target,name)) nomem();
|
|
||||||
if (!stralloc_0(&target)) nomem();
|
|
||||||
|
|
||||||
uid = -1; if (*uidstr) scan_ulong(uidstr,&uid);
|
|
||||||
gid = -1; if (*gidstr) scan_ulong(gidstr,&gid);
|
|
||||||
scan_8long(modestr,&mode);
|
|
||||||
|
|
||||||
switch(*type) {
|
|
||||||
case 'z':
|
|
||||||
scan_ulong(type + 1,&zlen);
|
|
||||||
|
|
||||||
fdout = open_trunc(target.s);
|
|
||||||
if (fdout == -1)
|
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
|
||||||
substdio_fdbuf(&ssout,write,fdout,outbuf,sizeof(outbuf));
|
|
||||||
|
|
||||||
while (zlen--)
|
|
||||||
if (substdio_put(&ssout,"",1) == -1)
|
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
|
||||||
|
|
||||||
if (substdio_flush(&ssout) == -1)
|
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
|
||||||
if (fsync(fdout) == -1)
|
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
|
||||||
close(fdout);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'p':
|
|
||||||
if (fifo_make(target.s,0700) == -1)
|
|
||||||
if (errno != error_exist)
|
|
||||||
strerr_die4sys(111,FATAL,"unable to mkfifo ",target.s,": ");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'd':
|
|
||||||
if (mkdir(target.s,0700) == -1)
|
|
||||||
if (errno != error_exist)
|
|
||||||
strerr_die4sys(111,FATAL,"unable to mkdir ",target.s,": ");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'c':
|
|
||||||
fdin = open_read(name);
|
|
||||||
if (fdin == -1)
|
if (fdin == -1)
|
||||||
strerr_die4sys(111,FATAL,"unable to read ",name,": ");
|
strerr_die4sys(111,FATAL,"unable to read ",file,": ");
|
||||||
substdio_fdbuf(&ssin,read,fdin,inbuf,sizeof(inbuf));
|
substdio_fdbuf(&ssin,read,fdin,inbuf,sizeof inbuf);
|
||||||
|
|
||||||
fdout = open_trunc(target.s);
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
if (chdir(subdir) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": ");
|
||||||
|
|
||||||
|
fdout = open_trunc(file);
|
||||||
if (fdout == -1)
|
if (fdout == -1)
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": ");
|
||||||
substdio_fdbuf(&ssout,write,fdout,outbuf,sizeof(outbuf));
|
substdio_fdbuf(&ssout,write,fdout,outbuf,sizeof outbuf);
|
||||||
|
|
||||||
switch(substdio_copy(&ssout,&ssin)) {
|
switch(substdio_copy(&ssout,&ssin)) {
|
||||||
case -2:
|
case -2:
|
||||||
strerr_die4sys(111,FATAL,"unable to read ",name,": ");
|
strerr_die4sys(111,FATAL,"unable to read ",file,": ");
|
||||||
case -3:
|
case -3:
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": ");
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fdin);
|
close(fdin);
|
||||||
if (substdio_flush(&ssout) == -1)
|
if (substdio_flush(&ssout) == -1)
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": ");
|
||||||
if (fsync(fdout) == -1)
|
if (fsync(fdout) == -1)
|
||||||
strerr_die4sys(111,FATAL,"unable to write ",target.s,": ");
|
strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": ");
|
||||||
close(fdout);
|
if (close(fdout) == -1) /* NFS silliness */
|
||||||
break;
|
strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": ");
|
||||||
|
|
||||||
default:
|
if (chown(file,uid,gid) == -1)
|
||||||
return;
|
strerr_die6sys(111,FATAL,"unable to chown .../",subdir,"/",file,": ");
|
||||||
|
if (chmod(file,mode) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to chmod .../",subdir,"/",file,": ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chown(target.s,uid,gid) == -1)
|
void z(home,file,len,uid,gid,mode)
|
||||||
strerr_die4sys(111,FATAL,"unable to chown ",target.s,": ");
|
char *home;
|
||||||
if (chmod(target.s,mode) == -1)
|
char *file;
|
||||||
strerr_die4sys(111,FATAL,"unable to chmod ",target.s,": ");
|
int len;
|
||||||
}
|
int uid;
|
||||||
|
int gid;
|
||||||
char buf[256];
|
int mode;
|
||||||
substdio in = SUBSTDIO_FDBUF(read,0,buf,sizeof(buf));
|
|
||||||
stralloc line = {0};
|
|
||||||
|
|
||||||
void main(argc,argv)
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
{
|
||||||
int match;
|
int fdout;
|
||||||
|
|
||||||
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
|
||||||
|
fdout = open_trunc(file);
|
||||||
|
if (fdout == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to write ",home,"/",file,": ");
|
||||||
|
substdio_fdbuf(&ssout,write,fdout,outbuf,sizeof outbuf);
|
||||||
|
|
||||||
|
while (len-- > 0)
|
||||||
|
if (substdio_put(&ssout,"",1) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to write ",home,"/",file,": ");
|
||||||
|
|
||||||
|
if (substdio_flush(&ssout) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to write ",home,"/",file,": ");
|
||||||
|
if (fsync(fdout) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to write ",home,"/",file,": ");
|
||||||
|
if (close(fdout) == -1) /* NFS silliness */
|
||||||
|
strerr_die6sys(111,FATAL,"unable to write ",home,"/",file,": ");
|
||||||
|
|
||||||
|
if (chown(file,uid,gid) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to chown ",home,"/",file,": ");
|
||||||
|
if (chmod(file,mode) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to chmod ",home,"/",file,": ");
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
fdsourcedir = open_read(".");
|
||||||
|
if (fdsourcedir == -1)
|
||||||
|
strerr_die2sys(111,FATAL,"unable to open current directory: ");
|
||||||
|
|
||||||
umask(077);
|
umask(077);
|
||||||
|
hier();
|
||||||
to = argv[1];
|
|
||||||
if (!to) strerr_die2x(100,FATAL,"install: usage: install dir");
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
if (getln(&in,&line,&match,'\n') == -1)
|
|
||||||
strerr_die2sys(111,FATAL,"unable to read input: ");
|
|
||||||
doit(&line);
|
|
||||||
if (!match)
|
|
||||||
_exit(0);
|
_exit(0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
174
instcheck.c
174
instcheck.c
|
|
@ -1,120 +1,108 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include "substdio.h"
|
#include "strerr.h"
|
||||||
#include "stralloc.h"
|
#include "error.h"
|
||||||
#include "getln.h"
|
|
||||||
#include "readwrite.h"
|
#include "readwrite.h"
|
||||||
#include "exit.h"
|
#include "exit.h"
|
||||||
#include "error.h"
|
|
||||||
#include "strerr.h"
|
|
||||||
#include "byte.h"
|
|
||||||
|
|
||||||
stralloc target = {0};
|
extern void hier();
|
||||||
char *to;
|
|
||||||
|
|
||||||
#define WARNING "instcheck: warning: "
|
|
||||||
#define FATAL "instcheck: fatal: "
|
#define FATAL "instcheck: fatal: "
|
||||||
void nomem() { strerr_die2x(111,FATAL,"out of memory"); }
|
#define WARNING "instcheck: warning: "
|
||||||
|
|
||||||
void doit(line)
|
void perm(prefix1,prefix2,prefix3,file,type,uid,gid,mode)
|
||||||
stralloc *line;
|
char *prefix1;
|
||||||
|
char *prefix2;
|
||||||
|
char *prefix3;
|
||||||
|
char *file;
|
||||||
|
int type;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
char *x;
|
|
||||||
unsigned int xlen;
|
|
||||||
unsigned int i;
|
|
||||||
char *type;
|
|
||||||
char *uidstr;
|
|
||||||
char *gidstr;
|
|
||||||
char *modestr;
|
|
||||||
char *mid;
|
|
||||||
char *name;
|
|
||||||
unsigned long uid;
|
|
||||||
unsigned long gid;
|
|
||||||
unsigned long mode;
|
|
||||||
int ftype;
|
|
||||||
|
|
||||||
x = line->s; xlen = line->len;
|
if (stat(file,&st) == -1) {
|
||||||
|
|
||||||
type = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
uidstr = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
gidstr = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
modestr = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
mid = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
name = x;
|
|
||||||
i = byte_chr(x,xlen,':'); if (i == xlen) return;
|
|
||||||
x[i++] = 0; x += i; xlen -= i;
|
|
||||||
|
|
||||||
if (!stralloc_copys(&target,to)) nomem();
|
|
||||||
if (!stralloc_cats(&target,mid)) nomem();
|
|
||||||
if (!stralloc_cats(&target,name)) nomem();
|
|
||||||
if (!stralloc_0(&target)) nomem();
|
|
||||||
|
|
||||||
uid = -1; if (*uidstr) scan_ulong(uidstr,&uid);
|
|
||||||
gid = -1; if (*gidstr) scan_ulong(gidstr,&gid);
|
|
||||||
scan_8long(modestr,&mode);
|
|
||||||
|
|
||||||
switch(*type) {
|
|
||||||
case 'd': ftype = S_IFDIR; break;
|
|
||||||
case 'c': ftype = S_IFREG; break;
|
|
||||||
case 'z': ftype = S_IFREG; break;
|
|
||||||
case 'p': ftype = S_IFIFO; break;
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stat(target.s,&st) == -1) {
|
|
||||||
if (errno == error_noent)
|
if (errno == error_noent)
|
||||||
strerr_warn3(WARNING,target.s," does not exist",0);
|
strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," does not exist",0);
|
||||||
else
|
else
|
||||||
strerr_warn4(WARNING,"unable to stat ",target.s,": ",&strerr_sys);
|
strerr_warn4(WARNING,"unable to stat .../",file,": ",&strerr_sys);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uid != -1) && (st.st_uid != uid))
|
if ((uid != -1) && (st.st_uid != uid))
|
||||||
strerr_warn3(WARNING,target.s," has wrong owner",0);
|
strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong owner",0);
|
||||||
if ((gid != -1) && (st.st_gid != gid))
|
if ((gid != -1) && (st.st_gid != gid))
|
||||||
strerr_warn3(WARNING,target.s," has wrong group",0);
|
strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong group",0);
|
||||||
if ((st.st_mode & 07777) != mode)
|
if ((st.st_mode & 07777) != mode)
|
||||||
strerr_warn3(WARNING,target.s," has wrong permissions",0);
|
strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong permissions",0);
|
||||||
if ((st.st_mode & S_IFMT) != ftype)
|
if ((st.st_mode & S_IFMT) != type)
|
||||||
strerr_warn3(WARNING,target.s," has wrong type",0);
|
strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong type",0);
|
||||||
}
|
}
|
||||||
|
|
||||||
char buf[256];
|
void h(home,uid,gid,mode)
|
||||||
substdio in = SUBSTDIO_FDBUF(read,0,buf,sizeof(buf));
|
char *home;
|
||||||
stralloc line = {0};
|
int uid;
|
||||||
|
int gid;
|
||||||
void main(argc,argv)
|
int mode;
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
{
|
||||||
int match;
|
perm("","","",home,S_IFDIR,uid,gid,mode);
|
||||||
|
}
|
||||||
|
|
||||||
umask(077);
|
void d(home,subdir,uid,gid,mode)
|
||||||
|
char *home;
|
||||||
|
char *subdir;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
perm("",home,"/",subdir,S_IFDIR,uid,gid,mode);
|
||||||
|
}
|
||||||
|
|
||||||
to = argv[1];
|
void p(home,fifo,uid,gid,mode)
|
||||||
if (!to) strerr_die2x(100,FATAL,"instcheck: usage: instcheck dir");
|
char *home;
|
||||||
|
char *fifo;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
perm("",home,"/",fifo,S_IFIFO,uid,gid,mode);
|
||||||
|
}
|
||||||
|
|
||||||
for (;;) {
|
void c(home,subdir,file,uid,gid,mode)
|
||||||
if (getln(&in,&line,&match,'\n') == -1)
|
char *home;
|
||||||
strerr_die2sys(111,FATAL,"unable to read input: ");
|
char *subdir;
|
||||||
doit(&line);
|
char *file;
|
||||||
if (!match)
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
if (chdir(subdir) == -1)
|
||||||
|
strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": ");
|
||||||
|
perm(".../",subdir,"/",file,S_IFREG,uid,gid,mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void z(home,file,len,uid,gid,mode)
|
||||||
|
char *home;
|
||||||
|
char *file;
|
||||||
|
int len;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
if (chdir(home) == -1)
|
||||||
|
strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
|
||||||
|
perm("",home,"/",file,S_IFREG,uid,gid,mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
hier();
|
||||||
_exit(0);
|
_exit(0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@ The main function of
|
||||||
.B qmail-inject
|
.B qmail-inject
|
||||||
is to make sure that each outgoing message has an appropriate header.
|
is to make sure that each outgoing message has an appropriate header.
|
||||||
|
|
||||||
For more detailed information, see RFC 822 and RFC 1123.
|
For more detailed information, see
|
||||||
|
.BR http://pobox.com/~djb/proto/immhf.html .
|
||||||
.SH "MESSAGE STRUCTURE"
|
.SH "MESSAGE STRUCTURE"
|
||||||
A message contains a series of
|
A message contains a series of
|
||||||
.I header fields\fR,
|
.I header fields\fR,
|
||||||
|
|
|
||||||
288
qmail-hier.c
288
qmail-hier.c
|
|
@ -1,288 +0,0 @@
|
||||||
#include "subfd.h"
|
|
||||||
#include "substdio.h"
|
|
||||||
#include "auto_split.h"
|
|
||||||
#include "auto_uids.h"
|
|
||||||
#include "fmt.h"
|
|
||||||
|
|
||||||
char strnum[FMT_ULONG];
|
|
||||||
|
|
||||||
void uidgid(uid)
|
|
||||||
int uid;
|
|
||||||
{
|
|
||||||
substdio_put(subfdout,strnum,fmt_ulong(strnum,(unsigned long) uid));
|
|
||||||
substdio_puts(subfdout,":");
|
|
||||||
substdio_put(subfdout,strnum,fmt_ulong(strnum,(unsigned long) auto_gidq));
|
|
||||||
substdio_puts(subfdout,":");
|
|
||||||
}
|
|
||||||
|
|
||||||
void copy(uid,mode,sub,fn)
|
|
||||||
int uid;
|
|
||||||
char *mode;
|
|
||||||
char *sub;
|
|
||||||
char *fn;
|
|
||||||
{
|
|
||||||
substdio_puts(subfdout,"c:");
|
|
||||||
uidgid(uid);
|
|
||||||
substdio_puts(subfdout,mode);
|
|
||||||
substdio_puts(subfdout,":");
|
|
||||||
substdio_puts(subfdout,sub);
|
|
||||||
substdio_puts(subfdout,":");
|
|
||||||
substdio_puts(subfdout,fn);
|
|
||||||
substdio_puts(subfdout,":\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void dir(uid,mode,fn)
|
|
||||||
int uid;
|
|
||||||
char *mode;
|
|
||||||
char *fn;
|
|
||||||
{
|
|
||||||
substdio_puts(subfdout,"d:");
|
|
||||||
uidgid(uid);
|
|
||||||
substdio_puts(subfdout,mode);
|
|
||||||
substdio_puts(subfdout,":");
|
|
||||||
substdio_puts(subfdout,fn);
|
|
||||||
substdio_puts(subfdout,"::\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void dirsplit(uid,mode,fn)
|
|
||||||
int uid;
|
|
||||||
char *mode;
|
|
||||||
char *fn;
|
|
||||||
{
|
|
||||||
unsigned long i;
|
|
||||||
dir(uid,mode,fn);
|
|
||||||
for (i = 0;i < auto_split;++i) {
|
|
||||||
substdio_puts(subfdout,"d:");
|
|
||||||
uidgid(uid);
|
|
||||||
substdio_puts(subfdout,mode);
|
|
||||||
substdio_puts(subfdout,":");
|
|
||||||
substdio_puts(subfdout,fn);
|
|
||||||
substdio_puts(subfdout,":/");
|
|
||||||
substdio_put(subfdout,strnum,fmt_ulong(strnum,i));
|
|
||||||
substdio_puts(subfdout,":\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
dir(auto_uido,"755","");
|
|
||||||
dir(auto_uido,"755","/control");
|
|
||||||
dir(auto_uido,"755","/users");
|
|
||||||
dir(auto_uido,"755","/bin");
|
|
||||||
dir(auto_uido,"755","/man");
|
|
||||||
dir(auto_uido,"755","/man/cat1");
|
|
||||||
dir(auto_uido,"755","/man/cat5");
|
|
||||||
dir(auto_uido,"755","/man/cat7");
|
|
||||||
dir(auto_uido,"755","/man/cat8");
|
|
||||||
dir(auto_uido,"755","/man/man1");
|
|
||||||
dir(auto_uido,"755","/man/man5");
|
|
||||||
dir(auto_uido,"755","/man/man7");
|
|
||||||
dir(auto_uido,"755","/man/man8");
|
|
||||||
dir(auto_uido,"755","/doc");
|
|
||||||
dir(auto_uido,"755","/boot");
|
|
||||||
|
|
||||||
copy(auto_uido,"755","/boot/","home");
|
|
||||||
copy(auto_uido,"755","/boot/","home+df");
|
|
||||||
copy(auto_uido,"755","/boot/","proc");
|
|
||||||
copy(auto_uido,"755","/boot/","proc+df");
|
|
||||||
copy(auto_uido,"755","/boot/","binm1");
|
|
||||||
copy(auto_uido,"755","/boot/","binm1+df");
|
|
||||||
copy(auto_uido,"755","/boot/","binm2");
|
|
||||||
copy(auto_uido,"755","/boot/","binm2+df");
|
|
||||||
copy(auto_uido,"755","/boot/","binm3");
|
|
||||||
copy(auto_uido,"755","/boot/","binm3+df");
|
|
||||||
|
|
||||||
copy(auto_uido,"644","/doc/","FAQ");
|
|
||||||
copy(auto_uido,"644","/doc/","UPGRADE");
|
|
||||||
copy(auto_uido,"644","/doc/","SENDMAIL");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL.alias");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL.boot");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL.ctl");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL.ids");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL.maildir");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL.mbox");
|
|
||||||
copy(auto_uido,"644","/doc/","INSTALL.vsm");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.local2alias");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.local2ext");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.local2local");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.local2rem");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.local2virt");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.nullclient");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.relaybad");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.relaygood");
|
|
||||||
copy(auto_uido,"644","/doc/","PIC.rem2local");
|
|
||||||
|
|
||||||
dir(auto_uida,"2755","/alias");
|
|
||||||
dir(auto_uidq,"750","/queue");
|
|
||||||
dir(auto_uidq,"700","/queue/pid");
|
|
||||||
dir(auto_uidq,"700","/queue/intd");
|
|
||||||
dir(auto_uidq,"750","/queue/todo");
|
|
||||||
dir(auto_uidq,"750","/queue/lock");
|
|
||||||
dir(auto_uids,"700","/queue/bounce");
|
|
||||||
|
|
||||||
substdio_puts(subfdout,"z0:");
|
|
||||||
uidgid(auto_uids);
|
|
||||||
substdio_puts(subfdout,"600:/queue/lock/:sendmutex:\n");
|
|
||||||
|
|
||||||
substdio_puts(subfdout,"z1024:");
|
|
||||||
uidgid(auto_uidr);
|
|
||||||
substdio_puts(subfdout,"644:/queue/lock/:tcpto:\n");
|
|
||||||
|
|
||||||
substdio_puts(subfdout,"p:");
|
|
||||||
uidgid(auto_uids);
|
|
||||||
substdio_puts(subfdout,"622:/queue/lock/:trigger:\n");
|
|
||||||
|
|
||||||
dirsplit(auto_uidq,"750","/queue/mess");
|
|
||||||
dirsplit(auto_uids,"700","/queue/info");
|
|
||||||
dirsplit(auto_uids,"700","/queue/local");
|
|
||||||
dirsplit(auto_uids,"700","/queue/remote");
|
|
||||||
|
|
||||||
copy(auto_uidq,"4711","/bin/","qmail-queue");
|
|
||||||
copy(auto_uido,"700","/bin/","qmail-lspawn");
|
|
||||||
copy(auto_uido,"700","/bin/","qmail-start");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-getpw");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-local");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-remote");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-rspawn");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-clean");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-send");
|
|
||||||
copy(auto_uido,"711","/bin/","splogger");
|
|
||||||
copy(auto_uido,"700","/bin/","qmail-newu");
|
|
||||||
copy(auto_uido,"700","/bin/","qmail-newmrh");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-pw2u");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-inject");
|
|
||||||
copy(auto_uido,"755","/bin/","predate");
|
|
||||||
copy(auto_uido,"755","/bin/","datemail");
|
|
||||||
copy(auto_uido,"755","/bin/","mailsubj");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-showctl");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-qread");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-qstat");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-tcpto");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-tcpok");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-pop3d");
|
|
||||||
copy(auto_uido,"711","/bin/","qmail-popup");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-qmqpc");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-qmqpd");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-qmtpd");
|
|
||||||
copy(auto_uido,"755","/bin/","qmail-smtpd");
|
|
||||||
copy(auto_uido,"755","/bin/","sendmail");
|
|
||||||
copy(auto_uido,"755","/bin/","tcp-env");
|
|
||||||
copy(auto_uido,"755","/bin/","qreceipt");
|
|
||||||
copy(auto_uido,"755","/bin/","qsmhook");
|
|
||||||
copy(auto_uido,"755","/bin/","qbiff");
|
|
||||||
copy(auto_uido,"755","/bin/","forward");
|
|
||||||
copy(auto_uido,"755","/bin/","preline");
|
|
||||||
copy(auto_uido,"755","/bin/","condredirect");
|
|
||||||
copy(auto_uido,"755","/bin/","maildirmake");
|
|
||||||
copy(auto_uido,"755","/bin/","maildir2mbox");
|
|
||||||
copy(auto_uido,"755","/bin/","maildirwatch");
|
|
||||||
copy(auto_uido,"755","/bin/","qail");
|
|
||||||
copy(auto_uido,"755","/bin/","elq");
|
|
||||||
copy(auto_uido,"755","/bin/","pinq");
|
|
||||||
|
|
||||||
copy(auto_uido,"644","/man/man5/","addresses.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","addresses.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","envelopes.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","envelopes.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","maildir.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","maildir.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","mbox.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","mbox.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","dot-qmail.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","dot-qmail.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","qmail-control.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","qmail-control.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","qmail-header.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","qmail-header.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","qmail-log.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","qmail-log.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","qmail-users.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","qmail-users.0");
|
|
||||||
copy(auto_uido,"644","/man/man5/","tcp-environ.5");
|
|
||||||
copy(auto_uido,"644","/man/cat5/","tcp-environ.0");
|
|
||||||
|
|
||||||
copy(auto_uido,"644","/man/man7/","forgeries.7");
|
|
||||||
copy(auto_uido,"644","/man/cat7/","forgeries.0");
|
|
||||||
copy(auto_uido,"644","/man/man7/","qmail-limits.7");
|
|
||||||
copy(auto_uido,"644","/man/cat7/","qmail-limits.0");
|
|
||||||
copy(auto_uido,"644","/man/man7/","qmail.7");
|
|
||||||
copy(auto_uido,"644","/man/cat7/","qmail.0");
|
|
||||||
|
|
||||||
copy(auto_uido,"644","/man/man1/","forward.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","forward.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","condredirect.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","condredirect.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","maildirmake.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","maildirmake.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","maildir2mbox.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","maildir2mbox.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","maildirwatch.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","maildirwatch.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","mailsubj.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","mailsubj.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","qreceipt.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","qreceipt.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","qbiff.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","qbiff.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","preline.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","preline.0");
|
|
||||||
copy(auto_uido,"644","/man/man1/","tcp-env.1");
|
|
||||||
copy(auto_uido,"644","/man/cat1/","tcp-env.0");
|
|
||||||
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-local.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-local.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-lspawn.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-lspawn.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-getpw.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-getpw.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-remote.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-remote.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-rspawn.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-rspawn.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-clean.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-clean.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-send.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-send.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-start.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-start.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","splogger.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","splogger.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-queue.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-queue.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-inject.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-inject.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-showctl.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-showctl.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-newmrh.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-newmrh.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-newu.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-newu.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-pw2u.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-pw2u.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-qread.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-qread.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-qstat.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-qstat.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-tcpok.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-tcpok.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-tcpto.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-tcpto.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-pop3d.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-pop3d.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-popup.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-popup.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-qmqpc.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-qmqpc.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-qmqpd.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-qmqpd.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-qmtpd.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-qmtpd.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-smtpd.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-smtpd.0");
|
|
||||||
copy(auto_uido,"644","/man/man8/","qmail-command.8");
|
|
||||||
copy(auto_uido,"644","/man/cat8/","qmail-command.0");
|
|
||||||
|
|
||||||
substdio_flush(subfdout);
|
|
||||||
_exit(0);
|
|
||||||
}
|
|
||||||
|
|
@ -16,12 +16,6 @@ installation,
|
||||||
.B qmail-queue
|
.B qmail-queue
|
||||||
is replaced with a symbolic link to
|
is replaced with a symbolic link to
|
||||||
.BR qmail-qmqpc .
|
.BR qmail-qmqpc .
|
||||||
|
|
||||||
.B qmail-qmqpc
|
|
||||||
is currently experimental;
|
|
||||||
use it at your own risk.
|
|
||||||
It will be fully supported in the next release of
|
|
||||||
.BR qmail .
|
|
||||||
.SH "CONTROL FILES"
|
.SH "CONTROL FILES"
|
||||||
.TP 5
|
.TP 5
|
||||||
.I qmqpservers
|
.I qmqpservers
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
/* EXPERIMENTAL! Use at your own risk. */
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
|
||||||
|
|
@ -17,12 +17,6 @@ see
|
||||||
.B qmail-qmqpd
|
.B qmail-qmqpd
|
||||||
will relay messages to any destination.
|
will relay messages to any destination.
|
||||||
It should be invoked only for connections from preauthorized users.
|
It should be invoked only for connections from preauthorized users.
|
||||||
|
|
||||||
.B qmail-qmqpd
|
|
||||||
is currently experimental;
|
|
||||||
use it at your own risk.
|
|
||||||
It will be fully supported in the next release of
|
|
||||||
.BR qmail .
|
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
tcp-env(1),
|
tcp-env(1),
|
||||||
tcpserver(1),
|
tcpserver(1),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
/* EXPERIMENTAL! Use at your own risk. */
|
|
||||||
|
|
||||||
#include "auto_qmail.h"
|
#include "auto_qmail.h"
|
||||||
#include "qmail.h"
|
#include "qmail.h"
|
||||||
#include "received.h"
|
#include "received.h"
|
||||||
|
|
@ -167,9 +165,7 @@ main()
|
||||||
if (!flagok)
|
if (!flagok)
|
||||||
result = "Dsorry, I can't accept addresses like that (#5.1.3)";
|
result = "Dsorry, I can't accept addresses like that (#5.1.3)";
|
||||||
|
|
||||||
fmt_ulong(strnum,str_len(result));
|
substdio_put(&ssout,strnum,fmt_ulong(strnum,(unsigned long) str_len(result)));
|
||||||
|
|
||||||
substdio_puts(&ssout,strnum);
|
|
||||||
substdio_puts(&ssout,":");
|
substdio_puts(&ssout,":");
|
||||||
substdio_puts(&ssout,result);
|
substdio_puts(&ssout,result);
|
||||||
substdio_puts(&ssout,",");
|
substdio_puts(&ssout,",");
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,12 @@
|
||||||
#include "constmap.h"
|
#include "constmap.h"
|
||||||
#include "stralloc.h"
|
#include "stralloc.h"
|
||||||
#include "direntry.h"
|
#include "direntry.h"
|
||||||
#include "auto_qmail.h"
|
|
||||||
#include "auto_uids.h"
|
#include "auto_uids.h"
|
||||||
|
#include "auto_qmail.h"
|
||||||
|
#include "auto_break.h"
|
||||||
|
#include "auto_patrn.h"
|
||||||
|
#include "auto_spawn.h"
|
||||||
|
#include "auto_split.h"
|
||||||
|
|
||||||
stralloc me = {0};
|
stralloc me = {0};
|
||||||
int meok;
|
int meok;
|
||||||
|
|
@ -139,11 +143,27 @@ void main()
|
||||||
struct stat stmrh;
|
struct stat stmrh;
|
||||||
struct stat stmrhcdb;
|
struct stat stmrhcdb;
|
||||||
|
|
||||||
substdio_puts(subfdout,"The qmail control files are stored in ");
|
substdio_puts(subfdout,"qmail home directory: ");
|
||||||
substdio_puts(subfdout,auto_qmail);
|
substdio_puts(subfdout,auto_qmail);
|
||||||
substdio_puts(subfdout,"/control.\n");
|
substdio_puts(subfdout,".\n");
|
||||||
|
|
||||||
substdio_puts(subfdout,"The uids and gids are ");
|
substdio_puts(subfdout,"user-ext delimiter: ");
|
||||||
|
substdio_puts(subfdout,auto_break);
|
||||||
|
substdio_puts(subfdout,".\n");
|
||||||
|
|
||||||
|
substdio_puts(subfdout,"paternalism (in decimal): ");
|
||||||
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_patrn));
|
||||||
|
substdio_puts(subfdout,".\n");
|
||||||
|
|
||||||
|
substdio_puts(subfdout,"silent concurrency limit: ");
|
||||||
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_spawn));
|
||||||
|
substdio_puts(subfdout,".\n");
|
||||||
|
|
||||||
|
substdio_puts(subfdout,"subdirectory split: ");
|
||||||
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_split));
|
||||||
|
substdio_puts(subfdout,".\n");
|
||||||
|
|
||||||
|
substdio_puts(subfdout,"user ids: ");
|
||||||
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uida));
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uida));
|
||||||
substdio_puts(subfdout,", ");
|
substdio_puts(subfdout,", ");
|
||||||
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uidd));
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uidd));
|
||||||
|
|
@ -159,7 +179,9 @@ void main()
|
||||||
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uidr));
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uidr));
|
||||||
substdio_puts(subfdout,", ");
|
substdio_puts(subfdout,", ");
|
||||||
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uids));
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_uids));
|
||||||
substdio_puts(subfdout,", ");
|
substdio_puts(subfdout,".\n");
|
||||||
|
|
||||||
|
substdio_puts(subfdout,"group ids: ");
|
||||||
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_gidn));
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_gidn));
|
||||||
substdio_puts(subfdout,", ");
|
substdio_puts(subfdout,", ");
|
||||||
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_gidq));
|
substdio_put(subfdout,num,fmt_ulong(num,(unsigned long) auto_gidq));
|
||||||
|
|
|
||||||
|
|
@ -149,12 +149,14 @@ char *arg;
|
||||||
|
|
||||||
terminator = '>';
|
terminator = '>';
|
||||||
i = str_chr(arg,'<');
|
i = str_chr(arg,'<');
|
||||||
if (!arg[i]) { /* partner should go read rfc 821 */
|
if (arg[i])
|
||||||
terminator = ' ';
|
|
||||||
i = str_chr(arg,':');
|
|
||||||
if (!arg[i]) return 0;
|
|
||||||
}
|
|
||||||
arg += i + 1;
|
arg += i + 1;
|
||||||
|
else { /* partner should go read rfc 821 */
|
||||||
|
terminator = ' ';
|
||||||
|
arg += str_chr(arg,':');
|
||||||
|
if (*arg == ':') ++arg;
|
||||||
|
while (*arg == ' ') ++arg;
|
||||||
|
}
|
||||||
|
|
||||||
/* strip source route */
|
/* strip source route */
|
||||||
if (*arg == '@') while (*arg) if (*arg++ == ':') break;
|
if (*arg == '@') while (*arg) if (*arg++ == ':') break;
|
||||||
|
|
@ -209,7 +211,7 @@ int bmfcheck()
|
||||||
int addrallowed()
|
int addrallowed()
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
r = rcpthosts(addr.s + 1,addr.len - 2);
|
r = rcpthosts(addr.s,str_len(addr.s));
|
||||||
if (r == -1) die_control();
|
if (r == -1) die_control();
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
@ -221,6 +223,11 @@ stralloc mailfrom = {0};
|
||||||
stralloc rcptto = {0};
|
stralloc rcptto = {0};
|
||||||
|
|
||||||
void smtp_helo(arg) char *arg;
|
void smtp_helo(arg) char *arg;
|
||||||
|
{
|
||||||
|
smtp_greet("250 "); out("\r\n");
|
||||||
|
seenmail = 0; dohelo(arg);
|
||||||
|
}
|
||||||
|
void smtp_ehlo(arg) char *arg;
|
||||||
{
|
{
|
||||||
smtp_greet("250-"); out("\r\n250-PIPELINING\r\n250 8BITMIME\r\n");
|
smtp_greet("250-"); out("\r\n250-PIPELINING\r\n250 8BITMIME\r\n");
|
||||||
seenmail = 0; dohelo(arg);
|
seenmail = 0; dohelo(arg);
|
||||||
|
|
@ -393,7 +400,7 @@ struct commands smtpcommands[] = {
|
||||||
, { "data", smtp_data, flush }
|
, { "data", smtp_data, flush }
|
||||||
, { "quit", smtp_quit, flush }
|
, { "quit", smtp_quit, flush }
|
||||||
, { "helo", smtp_helo, flush }
|
, { "helo", smtp_helo, flush }
|
||||||
, { "ehlo", smtp_helo, flush }
|
, { "ehlo", smtp_ehlo, flush }
|
||||||
, { "rset", smtp_rset, 0 }
|
, { "rset", smtp_rset, 0 }
|
||||||
, { "help", smtp_help, flush }
|
, { "help", smtp_help, flush }
|
||||||
, { "noop", err_noop, flush }
|
, { "noop", err_noop, flush }
|
||||||
|
|
|
||||||
5
qmail.7
5
qmail.7
|
|
@ -14,7 +14,8 @@ file include
|
||||||
.BR qbiff (1),
|
.BR qbiff (1),
|
||||||
.BR qreceipt (1),
|
.BR qreceipt (1),
|
||||||
.BR forward (1),
|
.BR forward (1),
|
||||||
and (for advanced users)
|
.BR bouncesaying (1),
|
||||||
|
and
|
||||||
.BR condredirect (1).
|
.BR condredirect (1).
|
||||||
Other helpful commands include
|
Other helpful commands include
|
||||||
.BR maildirmake (1),
|
.BR maildirmake (1),
|
||||||
|
|
@ -55,7 +56,7 @@ and
|
||||||
.BR qmail-pop3d (8).
|
.BR qmail-pop3d (8).
|
||||||
|
|
||||||
This documentation describes version
|
This documentation describes version
|
||||||
1.02
|
1.03
|
||||||
of
|
of
|
||||||
.BR qmail .
|
.BR qmail .
|
||||||
See
|
See
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue