From 0694dcb04b81dfbd70ffe7384816863170a48b3e Mon Sep 17 00:00:00 2001 From: Gregory Neil Shapiro Date: Wed, 15 Jul 2020 15:40:46 +0000 Subject: [PATCH 1/2] Bring in fix from upstream that allows libsm to compile against FreeBSD 13 --- libsm/notify.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsm/notify.c b/libsm/notify.c index b529d6ffa5b6..9f4cca27d7a8 100644 --- a/libsm/notify.c +++ b/libsm/notify.c @@ -10,11 +10,6 @@ #include -#include /* FDSET_CAST */ -#include -#include -#include - #include #include #include @@ -25,6 +20,11 @@ #include #include /* for memset() */ +#include /* FDSET_CAST */ +#include +#include +#include + #if SM_NOTIFY_DEBUG #define SM_DBG(p) fprintf p #else From 28fbd2825d216dafca4d991ad96d05b312f4f9a3 Mon Sep 17 00:00:00 2001 From: Gregory Neil Shapiro Date: Sun, 15 Jan 2023 19:15:36 +0000 Subject: [PATCH 2/2] Import sendmail 8.17.1 --- CACerts | 148 +- KNOWNBUGS | 8 + Makefile | 16 +- PGPKEYS | 177 +- README | 5 - RELEASE_NOTES | 139 +- cf/README | 79 +- cf/cf/Makefile | 29 +- cf/cf/generic-bsd4.4.cf | 36 +- cf/cf/generic-hpux10.cf | 36 +- cf/cf/generic-hpux9.cf | 36 +- cf/cf/generic-linux.cf | 36 +- cf/cf/generic-mpeix.cf | 36 +- cf/cf/generic-nextstep3.3.cf | 36 +- cf/cf/generic-osf1.cf | 36 +- cf/cf/generic-solaris.cf | 36 +- cf/cf/generic-sunos4.1.cf | 36 +- cf/cf/generic-ultrix4.cf | 36 +- cf/cf/submit.cf | 39 +- cf/cf/submit.mc | 3 + cf/feature/check_cert_altnames.m4 | 2 +- cf/feature/check_other.m4 | 46 + cf/feature/delay_checks.m4 | 2 +- cf/feature/dnsbl.m4 | 2 +- cf/feature/enhdnsbl.m4 | 2 +- cf/feature/nopercenthack.m4 | 2 +- cf/feature/nouucp.m4 | 2 +- cf/feature/sts.m4 | 19 + cf/m4/cfhead.m4 | 8 +- cf/m4/proto.m4 | 340 +- cf/m4/version.m4 | 2 +- cf/mailer/local.m4 | 2 +- contrib/AuthRealm.p0 | 17 +- contrib/cidrexpand | 77 +- contrib/doublebounce.pl | 0 contrib/link_hash.sh | 0 contrib/re-mqueue.pl | 0 devtools/M4/UNIX/all.m4 | 24 +- devtools/M4/UNIX/check.m4 | 2 + devtools/M4/UNIX/sm-test.m4 | 2 +- devtools/OS/Darwin.19.x | 23 + devtools/OS/Darwin.20.x | 24 + devtools/Site/site.config.m4.sample | 24 +- doc/op/op.me | 216 +- doc/op/op.ps | 11158 +++++++++++++------------- editmap/editmap.0 | 55 +- editmap/editmap.8 | 22 +- editmap/editmap.c | 13 +- include/libmilter/mfapi.h | 2 +- include/libsmdb/smdb.h | 6 +- include/sendmail/pathnames.h | 2 +- include/sm/bdb.h | 4 +- include/sm/conf.h | 1 + include/sm/gen.h | 12 + include/sm/ixlen.h | 43 + include/sm/notify.h | 5 +- include/sm/os/sm_os_freebsd.h | 11 +- include/sm/os/sm_os_openbsd.h | 20 +- include/sm/rpool.h | 10 +- include/sm/sem.h | 2 +- include/sm/sendmail.h | 24 +- include/sm/shm.h | 2 +- include/sm/sysexits.h | 4 + include/sm/time.h | 2 - libmilter/docs/overview.html | 3 +- libmilter/docs/smfi_setmlreply.html | 24 +- libmilter/engine.c | 48 +- libmilter/listener.c | 26 +- libmilter/sm_gethost.c | 4 +- libsm/Makefile.m4 | 12 +- libsm/cf.c | 3 +- libsm/clock.c | 79 +- libsm/config.c | 4 +- libsm/heap.c | 27 +- libsm/ilenx.c | 40 + libsm/ldap.c | 66 +- libsm/lowercase.c | 162 + libsm/makebuf.c | 2 +- libsm/mbdb.c | 54 +- libsm/memstat.c | 4 +- libsm/niprop.c | 20 +- libsm/notify.c | 65 +- libsm/refill.c | 2 +- libsm/rpool.c | 29 +- libsm/sem.c | 18 +- libsm/shm.c | 8 +- libsm/signal.c | 76 +- libsm/strcaseeq.c | 114 + libsm/string.c | 3 - libsm/stringf.c | 2 +- libsm/t-ixlen.c | 105 + libsm/t-ixlen.sh | 41 + libsm/t-notify.c | 130 +- libsm/t-qic.c | 31 +- libsm/t-sem.c | 9 +- libsm/t-shm.c | 1 + libsm/t-str2prt.c | 64 + libsm/t-streq.c | 77 + libsm/t-streq.sh | 29 + libsm/utf8_valid.c | 104 + libsm/util.c | 60 +- libsm/uxtext_unquote.c | 204 + libsm/vasprintf.c | 2 +- libsm/vfprintf.c | 7 +- libsm/vprintf.c | 2 +- libsm/vsnprintf.c | 2 +- libsm/xleni.c | 43 + libsmdb/smcdb.c | 21 +- libsmdb/smdb2.c | 10 +- libsmutil/Makefile.m4 | 6 + libsmutil/cf.c | 3 + libsmutil/safefile.c | 60 +- libsmutil/t-lockfile-0.sh | 70 + libsmutil/t-lockfile.c | 351 + libsmutil/t-maplock-0.sh | 111 + mail.local/mail.local.0 | 70 +- mail.local/mail.local.c | 114 +- mailstats/mailstats.0 | 60 +- mailstats/mailstats.8 | 26 +- makemap/makemap.0 | 93 +- makemap/makemap.c | 69 +- praliases/praliases.0 | 28 +- praliases/praliases.8 | 6 +- praliases/praliases.c | 7 +- rmail/rmail.0 | 30 +- rmail/rmail.8 | 30 +- smrsh/smrsh.0 | 60 +- smrsh/smrsh.c | 4 +- src/README | 68 +- src/TRACEFLAGS | 8 + src/alias.c | 76 +- src/aliases.0 | 44 +- src/aliases.5 | 66 +- src/collect.c | 9 +- src/conf.c | 596 +- src/conf.h | 4 +- src/control.c | 23 +- src/convtime.c | 3 +- src/daemon.c | 131 +- src/deliver.c | 539 +- src/domain.c | 106 +- src/envelope.c | 57 +- src/err.c | 77 +- src/headers.c | 183 +- src/helpfile | 8 +- src/macro.c | 22 +- src/mailq.0 | 80 +- src/mailq.1 | 36 +- src/main.c | 278 +- src/map.c | 643 +- src/mci.c | 14 +- src/milter.c | 96 +- src/mime.c | 27 +- src/newaliases.0 | 30 +- src/parseaddr.c | 111 +- src/queue.c | 562 +- src/ratectrl.c | 18 +- src/readcf.c | 502 +- src/recipient.c | 67 +- src/savemail.c | 48 +- src/sendmail.0 | 399 +- src/sendmail.8 | 359 +- src/sendmail.h | 188 +- src/sfsasl.c | 34 +- src/sm_resolve.c | 148 +- src/sm_resolve.h | 1 - src/srvrsmtp.c | 408 +- src/stab.c | 25 +- src/stats.c | 2 +- src/tls.c | 54 +- src/tls.h | 29 +- src/tlsh.c | 11 +- src/trace.c | 2 +- src/udb.c | 32 +- src/usersmtp.c | 359 +- src/util.c | 232 +- src/version.c | 2 +- test/t_dropgid.c | 17 +- test/t_exclopen.c | 5 +- test/t_pathconf.c | 6 +- test/t_seteuid.c | 5 +- test/t_setgid.c | 15 +- test/t_setreuid.c | 5 +- test/t_setuid.c | 3 +- test/t_snprintf.c | 2 +- vacation/vacation.0 | 126 +- vacation/vacation.1 | 10 +- vacation/vacation.c | 17 +- 188 files changed, 14204 insertions(+), 9098 deletions(-) create mode 100644 cf/feature/check_other.m4 create mode 100644 cf/feature/sts.m4 mode change 100644 => 100755 contrib/doublebounce.pl mode change 100644 => 100755 contrib/link_hash.sh mode change 100644 => 100755 contrib/re-mqueue.pl create mode 100644 devtools/OS/Darwin.19.x create mode 100644 devtools/OS/Darwin.20.x create mode 100644 include/sm/ixlen.h create mode 100644 libsm/ilenx.c create mode 100644 libsm/lowercase.c create mode 100644 libsm/strcaseeq.c create mode 100644 libsm/t-ixlen.c create mode 100755 libsm/t-ixlen.sh create mode 100644 libsm/t-str2prt.c create mode 100644 libsm/t-streq.c create mode 100755 libsm/t-streq.sh create mode 100644 libsm/utf8_valid.c create mode 100644 libsm/uxtext_unquote.c create mode 100644 libsm/xleni.c create mode 100755 libsmutil/t-lockfile-0.sh create mode 100644 libsmutil/t-lockfile.c create mode 100755 libsmutil/t-maplock-0.sh diff --git a/CACerts b/CACerts index 630707555657..5e3b5ee084c7 100644 --- a/CACerts +++ b/CACerts @@ -1,7 +1,7 @@ # This file contains some CA certificates that are used to sign the # certificates of mail servers of members of the sendmail consortium -# who may reply to questions etc sent to sendmail.org. -# It is useful to allow connections from those MTAs that can present +# who may reply to questions etc sent to support.sendmail.org. +# It is useful to allow connections from those MTAs which can present # a certificate signed by one of these CA certificates. # @@ -9,92 +9,92 @@ Certificate: Data: Version: 3 (0x2) Serial Number: - 81:9d:41:0f:40:55:ac:4a - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=CA/emailAddress=ca+ca-rsa2018@esmtp.org + 92:a1:3b:d3:90:0b:ea:a7 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=CA/emailAddress=ca+ca-rsa2021@esmtp.org Validity - Not Before: Feb 27 02:30:55 2018 GMT - Not After : Feb 26 02:30:55 2021 GMT - Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=CA/emailAddress=ca+ca-rsa2018@esmtp.org + Not Before: Feb 25 17:44:02 2021 GMT + Not After : Feb 25 17:44:02 2024 GMT + Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=CA/emailAddress=ca+ca-rsa2021@esmtp.org Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:b8:a3:8d:79:28:c1:1f:9c:11:74:43:26:e1:3b: - cc:14:87:5b:6b:64:4c:ed:79:1b:7f:2a:03:d0:7b: - ef:9e:88:b0:64:36:ee:58:ef:fd:d9:c7:20:b3:71: - e9:6d:1e:a7:bc:c1:7c:3b:fe:2a:e4:16:2f:bc:d6: - 2c:f5:98:f9:c4:21:1c:ca:c3:7e:57:89:c8:a9:2f: - da:6b:9b:52:d6:c9:9d:98:97:6d:08:7c:a6:37:4e: - d4:26:bb:db:73:b0:38:ef:7d:1e:dd:8e:dd:8e:17: - 2f:a0:3d:a9:0e:4d:f0:2b:b8:14:23:33:ad:c8:a0: - e5:9d:0f:27:ad:83:a2:78:90:05:ec:29:06:91:07: - 45:6c:5f:ba:8e:1d:f1:d7:1b:2d:f9:99:ba:2e:27: - e1:03:7d:e9:d2:54:35:cc:39:79:07:83:d8:93:9b: - d6:ef:72:ab:d4:63:8e:6b:f7:00:66:5f:77:e8:b6: - bc:de:5f:8c:d0:ce:1a:c4:db:03:9d:e4:ee:0a:ec: - 77:c5:f2:30:69:7e:70:12:e5:c2:4a:28:3f:e7:19: - eb:af:41:fb:e6:a6:1d:b5:fd:2b:99:03:f5:20:90: - 38:73:bd:43:70:da:cf:1f:34:5d:ab:17:4b:73:cf: - f9:3d:e1:a2:79:14:de:d8:40:85:82:c4:5a:84:82: - 32:f1 + 00:cc:8c:39:bd:cf:55:4f:66:2a:78:c7:65:47:81: + dd:d1:3f:08:12:4b:87:40:48:95:5c:24:52:65:a1: + 82:1c:f4:90:a1:7c:f7:27:8f:02:e5:cb:ac:89:ae: + b8:25:4e:26:da:14:20:07:29:a4:59:03:61:b4:44: + ae:45:55:b4:72:7d:66:9a:88:de:59:bf:6f:31:23: + 06:29:ab:c2:b9:a0:6c:6a:5d:d0:ac:e6:b8:ac:8a: + 6f:5e:bb:f3:19:b5:8d:e1:df:2e:d1:7f:1a:bc:2c: + 13:10:65:46:7f:68:c7:60:49:c6:30:4e:a0:24:ed: + d4:a8:27:cf:b2:d0:c5:7c:96:47:82:b6:f1:17:0a: + 5a:35:82:0b:85:0f:17:71:a9:bd:3a:4c:e6:32:95: + 3e:68:f7:3d:f5:04:33:16:19:1e:4c:0a:04:c3:1f: + 9e:ba:db:e2:0d:29:c8:3f:29:cf:47:cb:11:db:d2: + cd:d0:26:2f:35:eb:7d:a2:60:18:e7:7b:a2:43:15: + 59:d7:ea:9d:38:60:f1:48:df:57:54:df:8a:50:b9: + e3:5c:72:82:51:b7:05:78:c2:14:08:71:71:1c:06: + 44:4a:85:73:08:a8:49:50:b2:d2:fb:da:a2:a5:5a: + 36:49:a8:4b:38:56:f6:67:0f:12:34:39:cc:fb:9c: + bd:d3 Exponent: 65537 (0x10001) X509v3 extensions: - X509v3 Subject Key Identifier: - 42:37:75:E7:8F:12:CF:D9:EB:21:22:7D:8A:E8:49:21:FD:E2:3A:3A - X509v3 Authority Key Identifier: - keyid:42:37:75:E7:8F:12:CF:D9:EB:21:22:7D:8A:E8:49:21:FD:E2:3A:3A - DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=CA/emailAddress=ca+ca-rsa2018@esmtp.org - serial:81:9D:41:0F:40:55:AC:4A - X509v3 Basic Constraints: + X509v3 Subject Key Identifier: + 86:F0:F9:7A:CD:66:A9:16:CC:A3:26:08:3D:B3:B2:42:C2:E5:A9:13 + X509v3 Authority Key Identifier: + keyid:86:F0:F9:7A:CD:66:A9:16:CC:A3:26:08:3D:B3:B2:42:C2:E5:A9:13 + DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=CA/emailAddress=ca+ca-rsa2021@esmtp.org + serial:92:A1:3B:D3:90:0B:EA:A7 + X509v3 Basic Constraints: CA:TRUE - X509v3 Subject Alternative Name: - email:ca+ca-rsa2018@esmtp.org - X509v3 Issuer Alternative Name: - email:ca+ca-rsa2018@esmtp.org - Signature Algorithm: sha1WithRSAEncryption - 0b:4c:e5:c2:ed:0a:e5:7b:95:29:22:d4:8f:5f:cb:1b:b1:e3: - 4c:fc:90:e7:2e:97:87:87:a2:63:0d:6d:4d:f0:1f:0d:84:11: - dc:df:b7:fa:c3:c6:2e:07:e9:a0:e9:a6:9f:54:17:ad:1a:d0: - 36:be:31:cc:a5:85:a0:45:4a:87:45:80:7e:de:ea:97:68:e0: - 2b:09:5d:9a:31:6f:f5:78:22:c5:66:2a:99:70:9e:6d:c4:ab: - f6:90:01:70:53:07:66:6c:a6:b5:ce:4b:36:05:83:87:0c:a7: - e0:1e:34:d0:5e:76:a4:20:71:cd:9d:c1:ae:82:27:e0:6f:16: - 57:74:e7:63:9f:d0:3d:72:91:6d:97:a4:82:23:84:dd:6e:0d: - da:43:00:a7:ce:2f:f8:79:04:67:6a:e5:b0:ab:30:d8:f1:90: - 10:43:3b:09:77:27:34:a4:d4:c0:25:4e:21:32:a3:ab:60:1c: - 9d:6e:e2:65:39:51:7f:cd:9f:88:3a:7e:f4:38:af:7b:5b:a7: - bb:7b:70:97:21:59:fc:5c:55:a1:db:74:0a:37:1e:33:97:5f: - 70:32:98:b3:d9:99:4e:08:3c:de:01:82:17:9b:49:d7:fa:c9: - 45:8d:93:cc:42:d6:36:f2:39:3a:47:28:3f:6f:6a:e5:23:f3: - 5c:d4:a3:1b + X509v3 Subject Alternative Name: + email:ca+ca-rsa2021@esmtp.org + X509v3 Issuer Alternative Name: + email:ca+ca-rsa2021@esmtp.org + Signature Algorithm: sha256WithRSAEncryption + 41:14:09:49:01:5f:51:ff:20:7b:c2:41:79:9d:11:3c:7c:48: + d6:43:d4:c6:0d:55:e6:76:bb:2c:c7:fb:dd:10:53:79:30:1a: + 35:64:2c:d0:64:b6:5a:fd:a9:d3:e3:09:8c:7d:22:81:b7:71: + a6:7d:bf:80:24:79:24:c1:61:6d:54:ab:14:4b:5a:54:cb:75: + 47:2e:e5:51:6f:cb:91:b6:a7:e8:aa:8d:78:c5:7e:05:56:3b: + 31:02:bd:0c:e4:af:78:27:7d:6d:bf:fd:0f:0d:2a:00:1d:cc: + a2:34:4d:a3:9e:70:45:89:56:2d:d2:35:ee:26:ea:0f:9d:fc: + c0:2c:64:f6:55:af:de:e0:72:64:e2:20:8f:e2:f2:e9:e2:6c: + 3a:0c:45:23:dd:80:57:25:fa:18:bb:25:f8:7e:3c:3b:a7:ef: + 40:f0:ba:6f:ce:b1:eb:f9:14:03:04:34:3d:e0:43:a6:8d:95: + d0:a4:dc:df:e4:79:ce:8d:e2:1e:30:ff:55:0c:e6:9d:e4:1d: + 62:cc:a5:4f:9a:6f:c0:b4:1f:05:7c:a7:c7:b1:72:58:98:ad: + 2f:f9:8a:41:0c:48:d5:78:ad:af:eb:ff:59:0b:4a:99:26:5b: + e8:8c:e3:e5:6b:01:d9:a0:db:a2:1b:d8:8e:f1:82:38:58:ba: + 8c:11:65:36 -----BEGIN CERTIFICATE----- -MIIE4jCCA8qgAwIBAgIJAIGdQQ9AVaxKMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD +MIIE4jCCA8qgAwIBAgIJAJKhO9OQC+qnMA0GCSqGSIb3DQEBCwUAMIGOMQswCQYD VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIQmVya2VsZXkx FDASBgNVBAoMC0VuZG1haWwgT3JnMQwwCgYDVQQLDANNVEExCzAJBgNVBAMMAkNB -MSYwJAYJKoZIhvcNAQkBFhdjYStjYS1yc2EyMDE4QGVzbXRwLm9yZzAeFw0xODAy -MjcwMjMwNTVaFw0yMTAyMjYwMjMwNTVaMIGOMQswCQYDVQQGEwJVUzETMBEGA1UE +MSYwJAYJKoZIhvcNAQkBFhdjYStjYS1yc2EyMDIxQGVzbXRwLm9yZzAeFw0yMTAy +MjUxNzQ0MDJaFw0yNDAyMjUxNzQ0MDJaMIGOMQswCQYDVQQGEwJVUzETMBEGA1UE CAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIQmVya2VsZXkxFDASBgNVBAoMC0VuZG1h aWwgT3JnMQwwCgYDVQQLDANNVEExCzAJBgNVBAMMAkNBMSYwJAYJKoZIhvcNAQkB -FhdjYStjYS1yc2EyMDE4QGVzbXRwLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBALijjXkowR+cEXRDJuE7zBSHW2tkTO15G38qA9B7756IsGQ27ljv -/dnHILNx6W0ep7zBfDv+KuQWL7zWLPWY+cQhHMrDfleJyKkv2mubUtbJnZiXbQh8 -pjdO1Ca723OwOO99Ht2O3Y4XL6A9qQ5N8Cu4FCMzrcig5Z0PJ62DoniQBewpBpEH -RWxfuo4d8dcbLfmZui4n4QN96dJUNcw5eQeD2JOb1u9yq9Rjjmv3AGZfd+i2vN5f -jNDOGsTbA53k7grsd8XyMGl+cBLlwkooP+cZ669B++amHbX9K5kD9SCQOHO9Q3Da -zx80XasXS3PP+T3honkU3thAhYLEWoSCMvECAwEAAaOCAT8wggE7MB0GA1UdDgQW -BBRCN3XnjxLP2eshIn2K6Ekh/eI6OjCBwwYDVR0jBIG7MIG4gBRCN3XnjxLP2esh -In2K6Ekh/eI6OqGBlKSBkTCBjjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlm +FhdjYStjYS1yc2EyMDIxQGVzbXRwLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMyMOb3PVU9mKnjHZUeB3dE/CBJLh0BIlVwkUmWhghz0kKF89yeP +AuXLrImuuCVOJtoUIAcppFkDYbRErkVVtHJ9ZpqI3lm/bzEjBimrwrmgbGpd0Kzm +uKyKb1678xm1jeHfLtF/GrwsExBlRn9ox2BJxjBOoCTt1Kgnz7LQxXyWR4K28RcK +WjWCC4UPF3GpvTpM5jKVPmj3PfUEMxYZHkwKBMMfnrrb4g0pyD8pz0fLEdvSzdAm +LzXrfaJgGOd7okMVWdfqnThg8UjfV1TfilC541xyglG3BXjCFAhxcRwGREqFcwio +SVCy0vvaoqVaNkmoSzhW9mcPEjQ5zPucvdMCAwEAAaOCAT8wggE7MB0GA1UdDgQW +BBSG8Pl6zWapFsyjJgg9s7JCwuWpEzCBwwYDVR0jBIG7MIG4gBSG8Pl6zWapFsyj +Jgg9s7JCwuWpE6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlm b3JuaWExETAPBgNVBAcMCEJlcmtlbGV5MRQwEgYDVQQKDAtFbmRtYWlsIE9yZzEM MAoGA1UECwwDTVRBMQswCQYDVQQDDAJDQTEmMCQGCSqGSIb3DQEJARYXY2ErY2Et -cnNhMjAxOEBlc210cC5vcmeCCQCBnUEPQFWsSjAMBgNVHRMEBTADAQH/MCIGA1Ud -EQQbMBmBF2NhK2NhLXJzYTIwMThAZXNtdHAub3JnMCIGA1UdEgQbMBmBF2NhK2Nh -LXJzYTIwMThAZXNtdHAub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQALTOXC7Qrle5Up -ItSPX8sbseNM/JDnLpeHh6JjDW1N8B8NhBHc37f6w8YuB+mg6aafVBetGtA2vjHM -pYWgRUqHRYB+3uqXaOArCV2aMW/1eCLFZiqZcJ5txKv2kAFwUwdmbKa1zks2BYOH -DKfgHjTQXnakIHHNncGugifgbxZXdOdjn9A9cpFtl6SCI4Tdbg3aQwCnzi/4eQRn -auWwqzDY8ZAQQzsJdyc0pNTAJU4hMqOrYBydbuJlOVF/zZ+IOn70OK97W6e7e3CX -IVn8XFWh23QKNx4zl19wMpiz2ZlOCDzeAYIXm0nX+slFjZPMQtY28jk6Ryg/b2rl -I/Nc1KMb +cnNhMjAyMUBlc210cC5vcmeCCQCSoTvTkAvqpzAMBgNVHRMEBTADAQH/MCIGA1Ud +EQQbMBmBF2NhK2NhLXJzYTIwMjFAZXNtdHAub3JnMCIGA1UdEgQbMBmBF2NhK2Nh +LXJzYTIwMjFAZXNtdHAub3JnMA0GCSqGSIb3DQEBCwUAA4IBAQBBFAlJAV9R/yB7 +wkF5nRE8fEjWQ9TGDVXmdrssx/vdEFN5MBo1ZCzQZLZa/anT4wmMfSKBt3Gmfb+A +JHkkwWFtVKsUS1pUy3VHLuVRb8uRtqfoqo14xX4FVjsxAr0M5K94J31tv/0PDSoA +HcyiNE2jnnBFiVYt0jXuJuoPnfzALGT2Va/e4HJk4iCP4vLp4mw6DEUj3YBXJfoY +uyX4fjw7p+9A8LpvzrHr+RQDBDQ94EOmjZXQpNzf5HnOjeIeMP9VDOad5B1izKVP +mm/AtB8FfKfHsXJYmK0v+YpBDEjVeK2v6/9ZC0qZJlvojOPlawHZoNuiG9iO8YI4 +WLqMEWU2 -----END CERTIFICATE----- diff --git a/KNOWNBUGS b/KNOWNBUGS index d3c0a2ff416d..b44f931af585 100644 --- a/KNOWNBUGS +++ b/KNOWNBUGS @@ -20,6 +20,14 @@ This list is not guaranteed to be complete. then it will be truncated which may result in a syntactically invalid address. +* Berkeley DB map locking problem with fcntl(). + + For Linux the default is to use fcntl() for file locking. However, + this does not work with Berkeley DB 5.x and probably later. + Switching to flock(), i.e., compile with -DHASFLOCK fixes this + (however, the have been problems with flock() on some Linux + versions). Alternatively, use CDB or an earlier BDB version. + * Delivery to programs that generate too much output may cause problems If e-mail is delivered to a program which generates too much diff --git a/Makefile b/Makefile index daf20f288f8b..1cb6b56d6a3b 100644 --- a/Makefile +++ b/Makefile @@ -10,8 +10,8 @@ OPTIONS= $(CONFIG) $(FLAGS) all: FRC @for x in $(SUBDIRS); \ do \ - (cd $$x; echo Making $@ in:; pwd; \ - $(SHELL) $(BUILD) $(OPTIONS)); \ + (cd $$x && echo Making $@ in: && pwd && \ + $(SHELL) $(BUILD) $(OPTIONS)) || exit; \ done clean: FRC @@ -24,22 +24,22 @@ clean: FRC install: FRC @for x in $(SUBDIRS); \ do \ - (cd $$x; echo Making $@ in:; pwd; \ - $(SHELL) $(BUILD) $(OPTIONS) $@); \ + (cd $$x && echo Making $@ in: && pwd && \ + $(SHELL) $(BUILD) $(OPTIONS) $@) || exit; \ done install-docs: FRC @for x in $(SUBDIRS); \ do \ - (cd $$x; echo Making $@ in:; pwd; \ - $(SHELL) $(BUILD) $(OPTIONS) $@); \ + (cd $$x && echo Making $@ in: && pwd && \ + $(SHELL) $(BUILD) $(OPTIONS) $@) || exit; \ done fresh: FRC @for x in $(SUBDIRS); \ do \ - (cd $$x; echo Making $@ in:; pwd; \ - $(SHELL) $(BUILD) $(OPTIONS) -c); \ + (cd $$x && echo Making $@ in: && pwd && \ + $(SHELL) $(BUILD) $(OPTIONS) -c) || exit; \ done $(SUBDIRS): FRC diff --git a/PGPKEYS b/PGPKEYS index 03476f63a5ed..0d0b0d5a766c 100644 --- a/PGPKEYS +++ b/PGPKEYS @@ -188,6 +188,182 @@ mk6wxhyuojEHuR7it6IU5BP8vaAGrL1jb1c2EeAe+pdJwpAb1Aq6MU6uWqOGup8t -----END PGP PUBLIC KEY BLOCK----- +pub 4096R/4BEE1BEE 2021-01-24 + Key fingerprint = F4CE 2263 2102 53D6 A9F9 79B0 4C66 EA8D 4BEE 1BEE +uid Sendmail Signing Key/2021 +sub 4096R/A9C0321B 2021-01-24 + +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGANHTwBEACw6b3NmDyyB6uPll+h+pyOmQrbX+up2S007yTXhj2EnYiriLcL +MdMspVLXl/wtABtfTZ9Lf3v3FuNwHZsVdSZWCFmwlWPptsRrF0VWwYBzxgH6QIUK +Qx9sFAD+KVD/9Cfl7YXeu5lZrNn3D8FoQB480jJJRaxshXcB6y9QCyKHeCZx/3Ct +1TE/tlFOgGoKJzNADOimH5SeEZ2gHhB6WB/yKLQYWS8EAvTlGdgZVo6VY6Ar35cd +3Z9TCQxS8YDsA0p6zENCJ4QgiwolmgZHa4R3/9jObxhVrIpCKCUN+rSdmKDotugP +GPDyZ0rZRAaRlyqt3rYKVAztkLTU6TbDNLmDpw3CQv3Tpbb2TT39ySmruVVJLA1C +DYQrh8f35ic0mDwYxKA5KIPZNj9vcReVrwxPDAV5to4n/ZjNNfnqxRiiq4+IzGZ4 +dTlwh4pECps0WdqphLAoTotFcdvYg8cfHMBULdIGqciAGfu7G0yqvlxt4nRe1k8D +60yAwDtqgO3ThtiTzuYkHZAUmAYOBYPF4e/X/zicWoL+whirV6AELnmv6lft5TaW +UfXbcx0njY/QPa1iy3g8qkQcY8durY9OVYnA5X4von1vMC4naEEf/cFsdDBl+nZG +/XxBHr1QX5/P7egbnnF9qMqry856oPE8bjv1KBqZ52UxmGRl14k8gKcfowARAQAB +tDFTZW5kbWFpbCBTaWduaW5nIEtleS8yMDIxIDxzZW5kbWFpbEBTZW5kbWFpbC5P +Ukc+iQJVBBMBCgA/FiEE9M4iYyECU9ap+XmwTGbqjUvuG+4FAmANHTwCGwMLCwkN +CAoMBwsEAwIGFQoJCAsDBRYCAwEAAh4BAheAAAoJEExm6o1L7hvuZlcP/1ipTzk+ +UT36bM/DbeBHaGhQ4yOSg0iiHzu+bzzP3jZslG7rlLgzowEPk7plDlnVbY6MUeXQ +4hO7keoAn5Cskg8jsrh+kpWYlNTPPKFdjgcuWbUEVAoRIprq1kEVqcG2ai0t1iaH +CmrUwFRqCCEPoHKg1U2GKcKafFaxOZwM27kV6yTLM5sYFVsoSh+bJ7sa9hymdwrf +/d1Rh5E+MHJatn3TXGh06aPkVGozyufTXipsxzd5VaBjLDTYbMFkiOt9MC9Sx2IS +BO5Ws2tOlNslGiAeXQG8EaJB4xrvhOi4i99nBA5TYWVdOAwfJGUZ+X4hItMwlCIg +4TaJcYHQ7GASELGSGA7azd2JeqbEskiCdabWF8aSbUxA68HRCOjAAUk5afxqEc5J +BVfT1QmWAPK5cNQTojbd7msrlGXmcSQyFBUDSzoeQNFhpmDpAXCLnGt0vcwbqTik +Ft+2vJ9nbSczKHkxmN1hudpVdsUNfgGi7p4VzyQq/OzYFVeMXrBBt6aLyATjCoY9 +b7chMDyJBFLEk47U0qQe2VhexI8Fk9Z8wFTPF97gb3rSk5pAfIbCZ9eDcIZuR5eD +yDDd23vxsMJK0haD/nZ6gQNqBeCg+zDE8g4T9zCdOtavLuqwOqPUZDnNdke9cA0m +6GSo2MccibyMdqijETcDOPOC47hrIu68QE54iQEzBBABCgAdFiEEsICXn00EPhnQ +WjacYp747gyLgzMFAmANHmsACgkQYp747gyLgzP1zgf/QJi9+sMvoNVks4+lU4xW +9fy4C7+fAO96dJtSO5jSn+9M/C55UmU0kWz8XEU88XCVyChLmpSb+Y+2sf5XhWEY ++KDLUHgqiT6NItozXKVggNFMsxkzDi7mzdkCIevTlcGbQSxai7hbKwZzGPb/OzUK +pRtLl6hTV5wLlsit41EAwILnRmmn6Iix6SPaCx0YvAIKBiy7CSiJyhPbGEKAeEx9 +OTZ9ce0iQWxaCGNgXv22HPvJ7V3VwmfZBJnHcY0ooxEjz/Ky9kHXc+3yHznlATXs +pzOMH0z+zmHldvIBz0djgVlhn2TRkKSSTaGd4kbLKLmci4Ax/il5noR1hZ82aVhl +TokBMwQQAQoAHRYhBLF1lkRTA13O3XvpGWBN+/KFQQq+BQJgDR6pAAoJEGBN+/KF +QQq+4OAH/RpvOktec2Y0AvzWjHorXWmPLi9xEMIuj2GVVVsg+eXP2CDpYuEOVYLP +8VCWpObXADj+w0DIOMcyqUbMPxkps+CPXjTRc/qED3FLvGNTfNQMe5hDTbbs/tw2 +FtfI9Jzlwsmhcfg5ZxnQKDCPGPQufN9AbQHWc4VIEwhQRc9T/cfBhioWUwrtkgPT +BBTPnJp/nA10Rn+ycURA+BLdlhAFwuTYBH7nWHkDJUGLHFIat2RhHRakZNhcMrhE +cXBrg5ONK9qJYtJXzlHiQhM6NP2RPVvYCzLlqkT13SqvLsPMSncyKlIlUuQZqdcE +QOwGRgp2jkZeRYVBYfFzfIpu5gxVQYOJATMEEAEKAB0WIQRYcmIYqRNADeZgNgE5 +pMd9qXiEsAUCYA0esAAKCRA5pMd9qXiEsAB0CAChpLMwocSQ6hpY7nfVl6wAb3SP +9C2Dwr89YxzqBYS7i3b/0pB4t1c4cg0vC72DeOIUwuAwUOq6NVgPYnh/NpovWouP +HN/3WrI013yGkNZIYz3fb8w2+pk0FFndU121pn3IbVYyMxegyHyN+F5NKZCfsTu+ +imlqje26ecBPuz4wcVqYyl/jnR/MU54uMhQW8q0lxCMS67uta0wd2EaTXNxq17Lp +Z48pNOBiAXxZnXaP996T+7whtLBr9isgeZyeizenjupX69bllRVbwuO8uboTsisC +LlUbOLzdvTjuSrAQAzNaAfVjNsxzEvLcxxKaPKPG1ubrHT50k3zpB/Ixi+oliQEz +BBABCgAdFiEEynqPOaJBn/+wqasnjlrp+87u9DsFAmANHrcACgkQjlrp+87u9DtA +kQf/SLAdxTmR/l95WdeOgvxINcV5ADxCkpO1iJeLp440uddscRrrfHdibEngfAA+ +ARwPv2/jhJgInCOQe+4lmsd+4NtKtanXiRZai1MXCxcF5VLTOMs8Vl7EUMAL5JWG +IlvmT4/H7Zhji64KpDFkwEjsE8SdZ6HJokJMFSq+YYBgvnsu/GDSfDpb/HtdM845 +pjxHJ+r93KPRepncLedgyDsQpzzRIgUJNhuC+UGtRp+3qRf1eWSkO6qbyL8DtFfW +WwX1gG099nr8m9Gj+R8zH6HTnWWuFnUyDTHdTN7/25vZ9eoAgjIx0I3g+O02l42B +G5HeOuLSMdUoqqvOq8313wvWSIkBMwQQAQoAHRYhBLh9RWmG8ZSEB+XMtD1osl1S +B8rTBQJgDR69AAoJED1osl1SB8rThsMH/0JcgLmhr3K4t0cxt94u6UN1pVQZDrgG +uMEDpOxW4nPMwN3SkWMM3K7zw0TiGkksyFifRi7zY1BqRilJOGyLkyB3zCY76hKV +SuLx3U4B6eyrAY8gsPownOdY8FJB3o27uXhPX17qLWOl83/GQMoyRfmmwkBnL4hc +puJcPT4bOt3OhDK7bs1vGabS9L3HuX0lUIcp8VKquJHXgS+xIr/lMBk5Jit1Qx/p +VjqmL2qIxTMubmKxU5RxsCZygdV92kBLzYqZ3JO6LOPCwD1a4fZRlwAW2hpC2gtW +KHK1/QZBSgJGjJUgXGV3fYYR3WH5qmTCAWu2HEloLRSdzdHLldWCsUOJATMEEAEK +AB0WIQRJ9qi+hHM5SVGRbzth3hHs4nY6cwUCYA0ewgAKCRBh3hHs4nY6c4ygB/44 +pigG2UoBQNZq7R9ajbU5nRkl9mVCZ4dEqY6i3QJs5tGew+r774jMouL/sBTXMnvS +zD1XgJevJYnQq5U/08zvYDvqrhm4yTkbgg9UqhD9UI8M/XgN0DtbFT6EU/N92lO4 +2xWBMTyAwjVl9JPPjhMoUsGVScZ8pjplJZlgJNuy8GVu6vUoW8j1Gw0jIPKJ0ufy +20uc4jLuKVmxjj7Z5NsFnWJtiFFq/TknppOQZ8KvZjVzrH6EIOmCJfCnuSATiVsb +YJzMAjshhG+fJsm24loUjmDDAzy4Nwf18IJb+wSe1oFCSAz3euhIAIxBFkihA8wk +G4QmCnvdbPfYy4WIMDNEiQEzBBABCgAdFiEEMLynRwX6QVRVcx17qvW13gW9zFMF +AmANHsgACgkQqvW13gW9zFNuYggAwSZ7y+qCvdvFu6LD4qvk/phRF5VINZIHfl1k +aOVQWA+DZaDM8lRsvn2lxGFksaPzK9ZXd5QnF3QTlOkEsCILE1tmL7Myob27PaGV +4mQXjY9bUXe/Ulj4VbHlWjkt5wpwGj9bRuxnn/RKKRNCpknzqv8VTCMVwUyCF4xE +P0BGFXiyPV+PTNN2GwV5l46zn1FWzTlSgbAxjwQBh43RMuBWG320w+YEysJMs4y9 +k0f3i16hO4G/MiD4WRIaohqjBN6ii/sksYf6mgsZieUlAeQPnovi8pScq6s2cYzJ +krZNxX6PCNQFTLs1GvLh6IQgypN9Lxxu4FW82wKQMS9yIKkIMokBMwQQAQoAHRYh +BA9clq7I5p6cjlQuXG1M0ZQp+wPeBQJgDR7SAAoJEG1M0ZQp+wPeFfcH+wUQdI/R +eMuLByF9cjdC0AfnOXD46azyt7Lgyzdi5OK8xAMmfTGH0iYGGv3pNfcbTxblJ868 +PPjUc2arF6CkLZ5hIQ6dUBmmxG+YOecOZF4jO6Z0WFi1XqxRomhy0m9TNQ931I88 +VRpd0/XepnvJc1lTOiTmxKTFex7mKqzTNBeXlNkVOXpM4aCq4AejEgnEzr5imfyF +P2qyITbyGpWrnTKtg4ASYWVU+JAZ3/eZIl/0pNuD0/C9MGRmS2yGM82KKMYrRV3X +QNAdg6LPi8MicUZWlcVYqR/7jEkJeppUpM46EtEo5YoXQR9UflSdu1xjpBzgU56d +MjXtTE5ROtVDl42JAjMEEAEKAB0WIQQ8ih6Of0TK3hFP7UZLyb2ma/cmrQUCYA0e +2AAKCRBLyb2ma/cmrdDSD/92AidTGYuf+D3SbIOBhQttWp3SvnOj5UuqgXtHrmuq +vbhawUAAby+CL0hMOqYk/Z30N/Sr+OQmNyH+Q1C4nuoq4KOINBuaKpcioQai/Jre +TthuVzeFDk33bQd+IQ4n0WXnVWg0DlpIhDDtZyA2Qqj4nPPsnjuw+Y62VuXFahr1 +ci+8sVns9VZJyVKPzGAKo/4rKjRlAqqVTlh5/RvMJ01TvWwSXSg1+yM08e/zaOCz +tuIfZAjDZNqXKIU+3xlKKvQGnNxUB+Bxn6ZaXW/YCzf/uabYfy2i4GIBhyj3dRSH +zbDSg0b/l0zJDIi6qzTzXZFEQr5AFu3CZeLR8maRU/1olCFR2aE29XoAtEF+SyPh +eI8ZhXqL2ccJqStD37TMsUmemTgBkH1Rig3eelRDeaZ6oh5UjuKcg7IpdmyYdRNE +5KO3afHdhM6C/CXoh689273ddasvdYcGCIYku6AjiNjcr4sNbGdmqDNc/6emHqp4 +WxyKfc5AuqZpmbEVhIYG1PTmldJl78EZBYoLjea6fai+6LH3c75p85lUWbfcpq7s +QczweRPz/X+YMnNpCo8+psngSBIjDiJF7JFrVCFPyH8zFbva/TWCZ3Cf8Z4GLm0d +e1gBJfFeXaQHHL2qaX5FXiYqwL2cjmr09lV3hWmQC9bA4q7Z/q2BEjZtZuPJn/qZ +NIkCMwQQAQoAHRYhBKaHPSSk1tYoSuQqdfBgWf1dx8w/BQJgDR7dAAoJEPBgWf1d +x8w/SdkP/1uvi7L2ZVvq564VXA+5YFNq+BvzMDYkf/8RaAAFFUVbblQQBjlHN8nA +ViZZepOJOmba639e8E/uXsXF5z0l7Y1XEiuU6xofjmX8i9Px3MG5G1mXQGgaozW7 +fimU81f5DlLFv3W9lrZ1iQdpfZQYpBMdE6PuBl4wvElHPB6rVTxBIigjVsQceXMV +b64RttDSX84glqv15rTrPQLPg5duX+YzMOVKyH7tWuuOsPuWaUZejNieX7UubA4s +E1pnpH0OBpw/d8r0Rte9ZifmSavfPygaLC3w5ihXKwPLVikhOIF7PgsVaRRBzJQL +pw7BTt+nGOZIQofW1TM8gOPPrbWzwyCnPEMzjyM6g46zsW8FRxTq8/qRXwB7dg9v +wZRVSX4+Dzuuvyt/p3p8OX5nhv2UrqXSeZx5gcWrof+td7X8lGj4j/kvFI6lotqL ++DTf4ndH8OyVjVL3Kzdc6e1+F/odgjurPW20GiNasLFpRz7aNUTtoSMc1zHi7tmW +EB0HMrCvdTwUuDOHVcebaR0xOPVcPcJhLoJDDQPRCFC93RvWL8qf5XPXwxYu9+tk +Kx22lFNJqnQeYH6s0QqJowcGwchpM23JlAyQ4y8qCb8Rng4V2KvmonWO5iadM+/9 +sNFmf7APUzeCMP0LGO+YLKgf3aPe2lQZOF3nQXpQ7iSDW33C45QpiQIzBBABCgAd +FiEEUKMDCY6i3XvL7iraCeAfoDwMUE4FAmANHuMACgkQCeAfoDwMUE47RxAAsbz1 +94m0hNMFUkzXc947B9qozcQMQJRhKsouBaMMwR+F1RgLH0oSAhYESsl+o8ngsyTo +AKYAP5p/N/wMzSZY0/B1XoQkTJT7HCX6G1gBKr6C5US4wL4Y2xQtBBVipAONK21p +RiSVUcvtOVfdUTSd2NNBUcVq9NCnWjtawu+8Z8fwJYa74gy8u9QQi9QjNPcupz63 +PKzB8WG1NjEI6Jx1TkZbGLoyXDQ/J7lfnoqGQoqIXMJjQHiDuNV8gIaPo2isHx6H +VOXYm+kx3mG/3cpTlWS1yfehHPrRYg/CB6joHYUUu9oe8HI1C8GF/4VxRsW6bfaZ +6rByBoPiCIb39xTLyCASXrXZ3n5wJ2blSCN3GPRxOcrNKQRgfNiXEc2jZtVA6sKU +a5DvvHYvIBqD6M9E8hPd5EomOW7t8zNCaFCvqWOanMmJmCqSlgSavZqEMOyTvcOM +ARyjZBseIIQZxwcfiKfJyI17adP/0fRdB5ypUUGaLPcbdh7JWJHzEbplGPj9VHrX ++xBN9fk2l8iXwPxD85C7lvup4SX+HEav3ofIJSrL47yC0DDrmia/JS3U/omD4raL +yfLSoVu0Qf6G6Z1MSLV1sfaMLNWssuwKYx2wHEsjRoURlWuQVR78KuCE8x+GZQ++ +Qa75Wuf0h6myzktUkfvddz6oW5W2yfVbAkuFR+yJAjMEEAEKAB0WIQSt/bcJ/h6m +guWFWXHVgyEO9RRxpwUCYA0e6AAKCRDVgyEO9RRxp277EACTAyRqNIaZPaSMAdw/ +AcYNX+/0G5+3m2+baSEPjcJUYOdwqQeUFAFZ3Sf9H4cm4zfNafQ0AjWUm9NYpwt8 +YKhN78dOpFaNdER43SAjVGmJb7Vs/yEX4EQZ3j7uRtypwAm6tehdo8kiKtMr774H +DZHGUp7NYdbBnCwiQWHFcwcK1ZWdgIY4Nw61pK5/iDl0ZIOZDXPgZWutB3ULNwBg +2PHBLOJaSvzl9jhC7Zjgpus6dEiTU/Ij6dKX+U0X9Hh5c2O3FQ08UwBffTBjTZTm +ThXGN8RN3a3cuBlpP5rTArU412yV4/+GkDPP/hv9iAgRAhwXomskyoC1Wq7I/1O1 +Ipzac19walDjLDvIBEVZmzi7YODEMU0F/EobW6+aByp9/cBGlBBn2Ppy+RQRevHm +Lf6jpvHcmdSEMvIDXDDJfUHVYfcpVnZJ3LfPE1kfdOhOKpCju8ZF9OPHUokhjKRM +frKLWOD2rxNQmqrfhvVsh8NSBNNaL9NkwnwevGo4ap2PaKwA2gxzZrMSrH3au9jE +K9+pnE94hdhRRfKINNME5r2Uo5Rcs6OIiuDM1wCmrIT2f4n0imXJoTiA/jwHWFAK +27EPnxXWZkbjR/oiIm5vaKqB9NbZDVtTw/4H7+pQ3E47THD+KY718FVUuV3cnOtM +MdoRGDkrd8ZS/I6ze7pOnCJy4IkBMwQQAQoAHRYhBK0g4aqLQTZwpkJS2L0nbS5v +z6iFBQJgDR7wAAoJEL0nbS5vz6iFz58IAIJRgMKRz4cOUy5iIPvtswXMb9tFR37U +PyLGJR1CbclXwUxTe6brN+8kWGka/g40qoG0Wr6GgQheYBjmV1CvXwOvZv83/FkK +GkGUZDjNhbfSXlrBMUczUEk3d6w2h8XHOoHozmWgf7fJk06MIJAwEt4ENK3Bfm+k +CCrCJuma8WzccyBLyU2iMLS14w7GOxJVyV37L8XcwmhysNyCpF0TVLPlPeGrvHO3 +hsw+lJZiZeXKUrU2hnzoM29A71PmkLVUYLN1JzvASwWCVsMfIO5T/bUzSLBysuEU +msqRL+vJQvzNDJs9gVrAtCnfZRQFHRYVYHsqqayhsj3/mk7x9a8Q6ZCJAjMEEAEK +AB0WIQQpbJTb0CgCRb/Tkdd7UpZI7oVyZAUCYA0e+AAKCRB7UpZI7oVyZKXLD/96 +55HOR12CYECMhU33Y5fqs10tYTdyoJjjStp+t2oApyaswr+DQPs6UVFUJWgMy478 +ro2DqW9kYHZeX0BumiQ5zrCeyBQYU+RUUNH7MU0pzdGuYWiL9PXqHNacuzV8GrIs +r4NFB1SJ66nbaKRMdJJnnfvtnJyHPfJ2VloxizYLNYptKUVbcP0j5ahXPbhy6Cyy +qlsAK28/gSRhDOqdq4/mKcNrc656bsmOqoaOl5po1N0sGStYQCuFWKjawujG5ZvF +x4hbwJUSU5gOFrBZgm2cYjypIO/GQz6CYbhGt77qV7f7hzo9qwA6UeIqrECvr83W +Jtp4e+FnjVQ6AfSwLI8oOPRa6DvJDdU+EGYPaWLbXnmq1fMu1nNn9SfHtkR+uDlN +GiQJk9EZSz30msacuEXZlXiypA2zTQFYAvtBZmYR4qjBX0qHImqmukjZZFhJ0sxR +LXE66HgvdxMTbYCVCWJY6u21yXF0O0a+nEvx0v1doux1247jzGXwyQTKXZsUZhv1 +qLv8igtMaJkSLZz1E1U703PdsMhU9jH6RKlwkW3KI/2NHEsxw7nDuhS6ez0UIM6O +sur53HCnDcA7k9eUaa+Sm0yCBeccZ9zmUgG2K3cFKdpQlljyt4WJTsKDrK4AkAHR +FjAJ0wOvv4apnz5LYNobKc/oTbjJacbTczB2lwGe17kCDQRgDR08ARAA9XG4WjRg +7cOfk6ur3Tj0TsmoiZ5jDKQ+ObZqk2aeIk5WutraEFe0OkI46F4oEbIwLB8rChHX +uVq18EM1mDD99tM3xTUoSm6BCdQeNx0Hh6enLZK49LBSMqTn3Fd9PNLL/QBABYWc +wgrazwxOlTrLOpX+XcgvRuxK36CisNr5i7Ocuc7EIuUurF6YoSaaxDT9XZHpuSSV +AI//sH+GmeBVgIs6f+8MSGe5R4g3aiyYqykwMtgSVgKqxi6Bo5UD8HeXpEAIgtNT +2gOxLgvar6vwlbTFamv+vy4C2RXY+7paEjGnlwI4nJrIWh0c1z3qIvAkEzhN88/J +fVCtjtKFjPAhGf48LxnRnURGb9anyexrRTPkGcmxx7/sxGMe/M31lpHOVKUZduWV +83/9/7NpSWU0BRmWyzK9CzQC/97Vb8JJhZG3N7RmTZgiO1GKAWFAKgd6X6oo6O/V +n5zngHY3jfKkb+wlcVa76IIDv3dc3JIENkmghfvuzdrx2IIqK+NSrBzp7OeTtgJE +vR5yTysS6wdlihY5zJgIBJh+GAy7lA8gzB3MhZe/qPSvnmK3ZTb1RnM5y5ySMZsU +mZnUVqjqjgUbY7NdXRpPeYLzwzzsvT+vlQX4P7LjGaienI6EP+AO7v2Ei+zv1NMI +jkXPPNtPwp01B3M09nYihjDnM/dviPF8J1sAEQEAAYkCNgQYAQoAIBYhBPTOImMh +AlPWqfl5sExm6o1L7hvuBQJgDR08AhsMAAoJEExm6o1L7hvuW6gP/iTNEyA96lc6 +3WxvkrpqiyZN4vdDwWv9FoEuZohlOCwQZpQy8wZlbtmjYcKAz1mRF3uBqZRvgzu4 +7ggzny8lF0m93PnyroRO5O6I8lT95HWH5+7mcoYpbDY1XII+QbP+Xdxi2mkUXqkY +3TRcp9VzwWyQb/0sgGch7ZOnd7bK12Q8wd2YmkCq5dQ8BXxFbnom6VoRpHnu1AsU +6ZKYbK5ogKXUoBxYKRqX6vMxMjALd/yJFKZwrCWkOxj0ipXCgHOlqbqgi5wH/gRu +qGkMYJ6fAnVcEdyfK5IRrtMB/3ZHlIDFXyEIA+K0AxpqE098KwnemOjrSYZV8Ek5 +48tVsKlmqqgJ1QkacR54OLw9CjNm0bXX1iqMfR89NfdIWqfyq732vqKb7UDfcjOK +IV4VP4sS8rBNrlzGpnkCOejE6YqxqwUt9ggtk9Q3SjqTrPTDZ3hExjcigchwnG5m +rZzBKYo7vQxoK+Y6Kx+BZHo2tUloURtsgqW7mLrfbY68Vbm4O1Ev5mjWA4bmOTrD +ivZF0HKBAdHG0B8JolpbSmoPVB0V9UAQvbb/amMK1zo36/cDrSZ9fid3Pbwyuupg +058rgvZPvBknm6p+k1mGb9XBGJlJaOR9Q0cmKobZhVmnSuCkRBJdLixHRvzcfygi +ra/bqVWSpZTlHZ0xT9seCUSs1urxGw9Z +=3HCo +-----END PGP PUBLIC KEY BLOCK----- + + pub rsa4096/0xD583210EF51471A7 2020-04-08 [SC] Key fingerprint = ADFD B709 FE1E A682 E585 5971 D583 210E F514 71A7 uid [ full ] Sendmail Signing Key/2020 @@ -3715,4 +3891,3 @@ Nq5nZ04BGHdVToZvUf2ABdQnWx94uOCRJp2bLJiEepNtaL2OPqe2EQVF7ia2Y0PT q8WNeh9erYZriQ== =VuMX -----END PGP PUBLIC KEY BLOCK----- - diff --git a/README b/README index 5b11d025b866..50cbce25e169 100644 --- a/README +++ b/README @@ -371,11 +371,6 @@ for a response. As of 8.10.0, the default Timeout.ident is 5 seconds as many sites have adopted the practice of dropping IDENT queries. This has lead to delays processing mail. -No ident server is included with this distribution. It is available -from: - - ftp://ftp.lysator.liu.se/pub/ident/servers/ - http://sf.www.lysator.liu.se/~pen/pidentd/ +-------------------------+ | INTEROPERATION PROBLEMS | diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 6a0f0c52f844..d8186f05e0f4 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -5,6 +5,121 @@ This listing shows the version of the sendmail binary, the version of the sendmail configuration files, the date of release, and a summary of the changes in that release. +8.17.1/8.17.1 2021/08/17 + Deprecation notice: due to compatibility problems with some + third party code, we plan to finally switch from K&R + to ANSI C. If you are using sendmail on a system + which does not have a compiler for ANSI C contact us + with details as soon as possible so we can determine + how to proceed. + Experimental support for SMTPUTF8 (EAI, see RFC 6530-6533) + is available when using the compile time option USE_EAI + (see also devtools/Site/site.config.m4.sample for other + required settings) and the cf option SMTPUTF8. + If a mail submission via the command line requires + the use of SMTPUTF8, e.g., because a header uses UTF-8 + encoding, but the addresses on the command line are all + ASCII, then the new option -U must be used, and + the cf option SMTPUTF8 must be set in submit.cf. + Please test and provide feedback. + Experimental support for SMTP MTA Strict Transport Security + (MTA-STS, see RFC 8461) is available when using + - the compile time option _FFR_MTA_STS (which requires + STARTTLS, MAP_REGEX, SOCKETMAP, and _FFR_TLS_ALTNAMES), + - FEATURE(sts), which implicitly sets the cf option + StrictTransportSecurity, + - postfix-mta-sts-resolver, see + https://github.com/Snawoot/postfix-mta-sts-resolver.git + New ruleset check_other which is called for all unknown SMTP + commands in the server and for commands which do not + have specific rulesets, e.g., NOOP and VERB. + New ruleset clt_features which can be used to select features + in the SMTP client per server. Currently only two + flags are available: D/M to disable DANE/MTA-STS, + respectively. + Avoid leaking session macros for an envelope between + delivery attempts to different servers. This problem + could have affected check_compat. + Avoid leaking actual SMTP replies between delivery attempts + to different servers which could cause bogus logging + of reply= entries. + Change default SMTP reply code for STARTTLS related problems + from 403 to 454 to better match the RFCs. + Fix a theoretical buffer overflow when encountering an + unknown/unsupported socket address family on an + operating system where sa_data is larger than 30 + (the standard is 14). Based on patch by Toomas Soome. + Several potential memory leaks and other similar problems + (mostly in error handling code) have been fixed. + Problems reported by Tomas Korbar of RedHat. + Previously the commands GET, POST, CONNECT, or USER terminate + a connection immediately only if sent as first command. + Now this is also done if any of these is sent directly + after STARTTLS or if the 'h' option is set via + srv_features. + CDB map locking has been changed so a sendmail process which + does have a CDB map open does not block an in-place + update of the map by makemap. The simple workaround + for that problem in earlier versions is to create + the map under a different name and then move it + into place. + On some systems the rejection of a RCPT by a milter could + silently fail. + CONFIG: New FEATURE(`check_other') to provide a default + check_other ruleset. + CONFIG: FEATURE(`tls_failures') is deprecated and will be + removed in future versions because it has a fundamental + problem: it is message oriented but STARTTLS is + session oriented. For example, having multiple + RCPTs in one envelope for different destinations, + with different temporary errors, does not work + properly, as the persistent macro applies to all + RCPTs and hence implicitly to all destinations (servers). + The option TLSFallbacktoClear should be used if needed. + MAIL.LOCAL: Enhance some error messages to simplify + troubleshooting. + Portability: + Add support for Darwin 19 & 20. + NOTE: File locking using fcntl() does not interoperate + with Berkeley DB 5.x (and probably later). Use + CDB, flock() (-DHASFLOCK), or an earlier Berkeley + DB version. Problem noted by Harald Hannelius. + New Files: + cf/feature/check_other.m4 + cf/feature/sts.m4 + devtools/OS/Darwin.19.x + devtools/OS/Darwin.20.x + include/sm/ixlen.h + libsm/ilenx.c + libsm/lowercase.c + libsm/strcaseeq.c + libsm/t-ixlen.c + libsm/t-ixlen.sh + libsm/t-streq.c + libsm/t-streq.sh + libsm/utf8_valid.c + libsm/uxtext_unquote.c + libsm/xleni.c + libsmutil/t-lockfile.c + libsmutil/t-lockfile-0.sh + libsmutil/t-maplock-0.sh + +8.16.2/8.16.2 202X/XX/XX + New compile time option NO_EOH_FIELDS to disable the special + meaning of the headers Message: and Text: to denote the + end of the message header. + CONTRIB: AuthRealm.p0 has been modified for 8.16.1 by Anne Bennett. + CONTRIB: Added cidrexpand -O option for suppressing duplicates from + a CIDR expansion that overlaps a later entry and -S option + for skipping comments exactly like makemap does. + Portability: + Add support for Darwin 19 (Mac OS X 10.15). + Use proper FreeBSD version define to allow for cross + compiling. Fix from Brooks Davis of the FreeBSD + project. + New Files: + devtools/OS/Darwin.19.x + 8.16.1/8.16.1 2020/07/05 SECURITY: If sendmail tried to reuse an SMTP session which had already been closed by the server, then the connection @@ -114,14 +229,22 @@ summary of the changes in that release. changes in sys/sem.h On Linux set MAXHOSTNAMELEN (the maximum length of a FQHN) to 256 if it is less than that value. - Added Files: + New Files: cf/feature/blocklist_recipients.m4 + cf/feature/check_cert_altnames.m4 cf/feature/tls_failures.m4 devtools/OS/Darwin.14.x devtools/OS/Darwin.15.x devtools/OS/Darwin.16.x + devtools/OS/Darwin.17.x + devtools/OS/Darwin.18.x + include/sm/notify.h + libsm/notify.c + libsm/t-notify.c libsmdb/smcdb.c sendmail/ratectrl.h + sendmail/tls.h + sendmail/tlsh.c 8.15.2/8.15.2 2015/07/03 If FEATURE(`nopercenthack') is used then some bogus input triggered @@ -335,7 +458,7 @@ summary of the changes in that release. On Linux use socklen_t as the type for the 3rd argument for getsockname/getpeername if the glibc version is at least 2.1. - Added Files: + New Files: devtools/OS/Darwin.12.x devtools/OS/Darwin.13.x @@ -416,7 +539,7 @@ summary of the changes in that release. Add support for Darwin 11.x (Mac OS X 10.7). Add support for SunOS 5.12 (aka Solaris 12). Patch from John Beck of Oracle. - Added Files: + New Files: devtools/OS/Darwin.11.x devtools/OS/SunOS.5.12 @@ -601,7 +724,7 @@ summary of the changes in that release. Chris Behrens of Concentric. Add support for SCO OpenServer 6, patch from Boyd Gerber. DEVTOOLS: Clarify that confSHAREDLIBDIR requires a trailing slash. - Added Files: + New Files: devtools/OS/Darwin.9.x devtools/OS/OSR.i386 @@ -1825,7 +1948,7 @@ summary of the changes in that release. Use strerror(3) on Linux. If this causes a problem on your Linux distribution, compile with -DHASSTRERROR=0 and tell sendmail.org about it. - Added Files: + New Files: devtools/OS/AIX.5.2 8.12.9/8.12.9 2003/03/29 @@ -3987,7 +4110,7 @@ summary of the changes in that release. have a From line. VACATION: Read all of the headers before deciding whether or not to respond instead of stopping after finding recipient. - Added Files: + New Files: cf/ostype/darwin.m4 contrib/cidrexpand contrib/link_hash.sh @@ -4004,7 +4127,7 @@ summary of the changes in that release. Purczynski of elzabsoft.pl. SECURITY: Add more vigilance around set*uid(), setgid(), setgroups(), initgroups(), and chroot() calls. - Added Files: + New Files: test/t_setuid.c 8.10.1/8.10.1 2000/04/06 @@ -4109,7 +4232,7 @@ summary of the changes in that release. VACATION: Fix -t option which is ignored but available for compatibility with Sun's version, based on patch from Volker Dobler of Infratest Burke. - Added Files: + New Files: devtools/M4/UNIX/smlib.m4 devtools/OS/OSF1.V5.0 Deleted Files: diff --git a/cf/README b/cf/README index 983aa2821a1a..cfabe5eefe45 100644 --- a/cf/README +++ b/cf/README @@ -1120,9 +1120,8 @@ local_procmail Use procmail or another delivery agent as the local mailer. setreuid() call, you may need to add -f $f to the procmail argument vector to pass the proper sender to procmail. - For example, this allows it to use the maildrop - (http://www.flounder.net/~mrsam/maildrop/) mailer instead - by specifying: + For example, this allows it to use the maildrop mailer + instead by specifying: FEATURE(`local_procmail', `/usr/local/bin/maildrop', `maildrop -d $u') @@ -1132,7 +1131,7 @@ local_procmail Use procmail or another delivery agent as the local mailer. FEATURE(`local_procmail', `/usr/local/bin/scanmails') WARNING: This feature sets LOCAL_MAILER_FLAGS unconditionally, - i.e., without respecting any definitions in an OSTYPE setting. + i.e., without respecting any definitions in an OSTYPE setting. bestmx_is_local Accept mail as though locally addressed for any host that lists us as the best possible MX record. This generates @@ -1267,6 +1266,12 @@ delay_checks The rulesets check_mail and check_relay will not be called section. Note: this feature is incompatible to the versions in 8.10 and 8.11. +check_other Enable a default check_other ruleset which terminates + an SMTP session when it encounters a command which matches + a regular expression given as argument. If no argument + is given, then the default (to match potential headers) is: + ^[[:print:]]+ *: + use_client_ptr If this feature is enabled then check_relay will override its first argument with $&{client_ptr}. This is useful for rejections based on the unverified hostname of client, @@ -1578,9 +1583,9 @@ require_rdns Reject mail from connecting SMTP clients without proper Entries such as Connect:1.2.3.4 OK - Connect:1.2 RELAY - will allowlist IP address 1.2.3.4, so that the rDNS - blocking does apply to that IP address + Connect:1.3 RELAY + will allowlist IP address 1.2.3.4 and IP net 1.3.* + so that the rDNS blocking does apply not to those IPs. Entries such as Connect:1.2.3.4 REJECT @@ -1603,6 +1608,14 @@ badmx Reject envelope sender addresses (MAIL) whose domain part has been compiled with the options MAP_REGEX and DNSMAP. +sts Experimental support for Strict Transport Security + (MTA-STS, see RFC 8461). It sets the option + StrictTransportSecurity and takes one optional + argument: the socket map specification to access + postfix-mta-sts-resolver (see feature/sts.m4 + for the default value). + For more information see doc/op/op.me. + +-------+ | HACKS | +-------+ @@ -2581,7 +2594,7 @@ top level domain TLD, 192.168.212.* network, and the IPv6 address 2002:c0a8:02c7::/48. Entries in the access map should be tagged according to their type. -Three tags are available: +These tags are applicable: Connect: connection information (${client_addr}, ${client_name}) From: envelope sender @@ -2818,7 +2831,7 @@ regex map: # check address against various regex checks R$* $: $>Parse0 $>3 $1 R$+ < @ bigisp.com. > $* $: $(allnumbers $1 $) - R@MATCH $#error $: 553 Header Error + R@MATCH $#error $: 553 Address Error These rules are called with the original arguments of the corresponding check_* ruleset. If the local ruleset returns $#OK, no further checking @@ -3081,8 +3094,8 @@ Darth+20Mail+20+28Cert+29/emailAddress=darth+2Bcert@endmail.org (line breaks have been inserted for readability). -The macros which are subject to this encoding are ${cert_subject}, -${cert_issuer}, ${cn_subject}, and ${cn_issuer}. +The macros which are subject to this encoding are ${cert_subject}, +${cert_issuer}, ${cn_subject}, and ${cn_issuer}. Examples: @@ -3223,13 +3236,13 @@ options: - CertFile, KeyFile: {Server,Client}{Cert,Key}File - Flags: see doc/op/op.me for details. -If FEATURE(`tls_session_features') is used, then default rulesets -are activated which look up entries in the access map with the tags -TLS_Srv_features and TLS_Clt_features, respectively. -For example, these entries: +If FEATURE(`tls_session_features') and FEATURE(`access_db') are +used, then default rulesets are activated which look up entries in +the access map with the tags TLS_Srv_features and TLS_Clt_features, +respectively. For example, these entries: - TLS_Srv_features:10.0.2.4 CipherList=MEDIUM+aRSA; - TLS_Clt_features:10.1.0.1 Options=SSL_OP_NO_TLSv1_2; CipherList=ALL:-EXPORT +TLS_Srv_features:10.0.2.4 CipherList=MEDIUM+aRSA; +TLS_Clt_features:10.1.0.1 Options=SSL_OP_NO_TLSv1_2; CipherList=ALL:-EXPORT specify a cipherlist with MEDIUM strength ciphers that use RSA certificates only for the client with the IP address 10.0.2.4, @@ -3240,21 +3253,23 @@ their own rulesets which must return the appropriate data. If the rulesets are not defined or do not return a value, the default TLS options are not modified. -About 2): the ruleset try_tls (srv_features) can be used together -with the access map. Entries for the access map must be tagged -with Try_TLS (Srv_Features) and refer to the hostname or IP address -of the connecting system. A default case can be specified by using -just the tag. For example, the following entries in the access map: +About 2): the rulesets try_tls, srv_features, and clt_features can +be used together with the access map. Entries for the access map +must be tagged with Try_TLS, Srv_Features, Clt_Features and refer +to the hostname or IP address of the connecting system. A default +case can be specified by using just the tag. For example, the +following entries in the access map: Try_TLS:broken.server NO Srv_Features:my.domain v Srv_Features: V + Clt_Features:broken.sts M will turn off STARTTLS when sending to broken.server (or any host -in that domain), and request a client certificate during the TLS -handshake only for hosts in my.domain. The valid entries on the RHS -for Srv_Features are listed in the Sendmail Installation and -Operations Guide. +in that domain), request a client certificate during the TLS handshake +only for hosts in my.domain, and disable MTA-STS for broken.sts. +The valid entries on the RHS for Srv_Features and Clt_Features are +listed in the Sendmail Installation and Operations Guide. Received: Header @@ -3377,11 +3392,11 @@ LOCAL_RULESETS respectively. For example: Smyruleset ... -Local additions for the rulesets srv_features, try_tls, tls_rcpt, -tls_client, and tls_server can be made using LOCAL_SRV_FEATURES, -LOCAL_TRY_TLS, LOCAL_TLS_RCPT, LOCAL_TLS_CLIENT, and LOCAL_TLS_SERVER, -respectively. For example, to add a local ruleset that decides -whether to try STARTTLS in a sendmail client, use: +Local additions for the rulesets srv_features, clt_features, try_tls, +tls_rcpt, tls_client, and tls_server can be made using LOCAL_SRV_FEATURES, +LOCAL_CLT_FEATURES, LOCAL_TRY_TLS, LOCAL_TLS_RCPT, LOCAL_TLS_CLIENT, +and LOCAL_TLS_SERVER, respectively. For example, to add a local +ruleset that decides whether to try STARTTLS in a sendmail client, use: LOCAL_TRY_TLS R... @@ -4288,7 +4303,7 @@ confXF_BUFFER_SIZE XScriptFileBufferSize memory-buffered transcript (xf) file before a disk-based file is used. -confAUTH_MECHANISMS AuthMechanisms [GSSAPI KERBEROS_V4 DIGEST-MD5 +confAUTH_MECHANISMS AuthMechanisms [EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5] List of authentication mechanisms for AUTH (separated by spaces). The advertised list of diff --git a/cf/cf/Makefile b/cf/cf/Makefile index bf6f031b2f11..bdb9f9e9b426 100644 --- a/cf/cf/Makefile +++ b/cf/cf/Makefile @@ -100,23 +100,36 @@ M4FILES=\ ${CFDIR}/feature/access_db.m4 \ ${CFDIR}/feature/allmasquerade.m4 \ ${CFDIR}/feature/always_add_domain.m4 \ + ${CFDIR}/feature/authinfo.m4 \ + ${CFDIR}/feature/badmx.m4 \ ${CFDIR}/feature/bcc.m4 \ ${CFDIR}/feature/bestmx_is_local.m4 \ ${CFDIR}/feature/bitdomain.m4 \ + ${CFDIR}/feature/block_bad_helo.m4 \ ${CFDIR}/feature/blocklist_recipients.m4 \ + ${CFDIR}/feature/check_cert_altnames.m4 \ + ${CFDIR}/feature/check_other.m4 \ + ${CFDIR}/feature/compat_check.m4 \ ${CFDIR}/feature/conncontrol.m4 \ + ${CFDIR}/feature/delay_checks.m4 \ ${CFDIR}/feature/dnsbl.m4 \ ${CFDIR}/feature/domaintable.m4 \ + ${CFDIR}/feature/enhdnsbl.m4 \ ${CFDIR}/feature/generics_entire_domain.m4 \ ${CFDIR}/feature/genericstable.m4 \ + ${CFDIR}/feature/greet_pause.m4 \ ${CFDIR}/feature/ldap_routing.m4 \ ${CFDIR}/feature/limited_masquerade.m4 \ ${CFDIR}/feature/local_lmtp.m4 \ + ${CFDIR}/feature/local_no_masquerade.m4 \ ${CFDIR}/feature/local_procmail.m4 \ + ${CFDIR}/feature/lookupdotdomain.m4 \ ${CFDIR}/feature/loose_relay_check.m4 \ ${CFDIR}/feature/mailertable.m4 \ ${CFDIR}/feature/masquerade_entire_domain.m4 \ ${CFDIR}/feature/masquerade_envelope.m4 \ + ${CFDIR}/feature/msp.m4 \ + ${CFDIR}/feature/mtamark.m4 \ ${CFDIR}/feature/no_default_msa.m4 \ ${CFDIR}/feature/nocanonify.m4 \ ${CFDIR}/feature/nopercenthack.m4 \ @@ -124,17 +137,24 @@ M4FILES=\ ${CFDIR}/feature/nouucp.m4 \ ${CFDIR}/feature/nullclient.m4 \ ${CFDIR}/feature/prefixmod.m4 \ + ${CFDIR}/feature/preserve_local_plus_detail.m4 \ + ${CFDIR}/feature/preserve_luser_host.m4 \ ${CFDIR}/feature/promiscuous_relay.m4 \ - ${CFDIR}/feature/redirect.m4 \ + ${CFDIR}/feature/queuegroup.m4 \ ${CFDIR}/feature/ratecontrol.m4 \ + ${CFDIR}/feature/redirect.m4 \ ${CFDIR}/feature/relay_based_on_MX.m4 \ ${CFDIR}/feature/relay_entire_domain.m4 \ ${CFDIR}/feature/relay_hosts_only.m4 \ ${CFDIR}/feature/relay_local_from.m4 \ ${CFDIR}/feature/relay_mail_from.m4 \ + ${CFDIR}/feature/require_rdns.m4 \ ${CFDIR}/feature/smrsh.m4 \ ${CFDIR}/feature/stickyhost.m4 \ + ${CFDIR}/feature/sts.m4 \ + ${CFDIR}/feature/tls_failures.m4 \ ${CFDIR}/feature/tls_session_features.m4 \ + ${CFDIR}/feature/use_client_ptr.m4 \ ${CFDIR}/feature/use_ct_file.m4 \ ${CFDIR}/feature/use_cw_file.m4 \ ${CFDIR}/feature/uucpdomain.m4 \ @@ -147,6 +167,7 @@ M4FILES=\ ${CFDIR}/m4/proto.m4 \ ${CFDIR}/m4/version.m4 \ ${CFDIR}/mailer/cyrus.m4 \ + ${CFDIR}/mailer/cyrusv2.m4 \ ${CFDIR}/mailer/fax.m4 \ ${CFDIR}/mailer/local.m4 \ ${CFDIR}/mailer/mail11.m4 \ @@ -159,6 +180,7 @@ M4FILES=\ ${CFDIR}/mailer/uucp.m4 \ ${CFDIR}/ostype/aix3.m4 \ ${CFDIR}/ostype/aix4.m4 \ + ${CFDIR}/ostype/aix5.m4 \ ${CFDIR}/ostype/altos.m4 \ ${CFDIR}/ostype/amdahl-uts.m4 \ ${CFDIR}/ostype/a-ux.m4 \ @@ -167,6 +189,7 @@ M4FILES=\ ${CFDIR}/ostype/bsdi.m4 \ ${CFDIR}/ostype/bsdi1.0.m4 \ ${CFDIR}/ostype/bsdi2.0.m4 \ + ${CFDIR}/ostype/darwin.m4 \ ${CFDIR}/ostype/dgux.m4 \ ${CFDIR}/ostype/domainos.m4 \ ${CFDIR}/ostype/dragonfly.m4 \ @@ -200,10 +223,14 @@ M4FILES=\ ${CFDIR}/ostype/solaris2.ml.m4 \ ${CFDIR}/ostype/solaris2.pre5.m4 \ ${CFDIR}/ostype/solaris8.m4 \ + ${CFDIR}/ostype/solaris11.m4 \ ${CFDIR}/ostype/sunos3.5.m4 \ ${CFDIR}/ostype/sunos4.1.m4 \ ${CFDIR}/ostype/svr4.m4 \ ${CFDIR}/ostype/ultrix4.m4 \ + ${CFDIR}/ostype/unicos.m4 \ + ${CFDIR}/ostype/unicosmk.m4 \ + ${CFDIR}/ostype/unicosmp.m4 \ ${CFDIR}/ostype/unixware7.m4 \ ${CFDIR}/ostype/unknown.m4 \ ${CFDIR}/ostype/uxpds.m4 diff --git a/cf/cf/generic-bsd4.4.cf b/cf/cf/generic-bsd4.4.cf index c1c9ce64751d..b60ce6d913bb 100644 --- a/cf/cf/generic-bsd4.4.cf +++ b/cf/cf/generic-bsd4.4.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:56 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:04:59 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -96,6 +96,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -122,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -370,7 +371,7 @@ O StatusFile=/var/log/sendmail.st # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -544,7 +545,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -804,7 +805,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -898,7 +899,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -928,7 +929,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1197,7 +1198,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1240,6 +1241,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1247,6 +1255,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1286,8 +1295,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1477,6 +1490,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-bsd4.4.mc ### # divert(-1) # # diff --git a/cf/cf/generic-hpux10.cf b/cf/cf/generic-hpux10.cf index 7442b076a85a..c475525bd701 100644 --- a/cf/cf/generic-hpux10.cf +++ b/cf/cf/generic-hpux10.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:56 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:04:59 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -97,6 +97,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -123,7 +124,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -371,7 +372,7 @@ O TimeZoneSpec= # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -545,7 +546,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -805,7 +806,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -899,7 +900,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -929,7 +930,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1198,7 +1199,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1241,6 +1242,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1248,6 +1256,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1287,8 +1296,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1478,6 +1491,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-hpux10.mc ### # divert(-1) # # diff --git a/cf/cf/generic-hpux9.cf b/cf/cf/generic-hpux9.cf index 2f39b3d8f5c4..a067a19c3b63 100644 --- a/cf/cf/generic-hpux9.cf +++ b/cf/cf/generic-hpux9.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:56 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:04:59 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -97,6 +97,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -123,7 +124,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -371,7 +372,7 @@ O TimeZoneSpec= # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -545,7 +546,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -805,7 +806,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -899,7 +900,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -929,7 +930,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1198,7 +1199,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1241,6 +1242,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1248,6 +1256,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1287,8 +1296,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1478,6 +1491,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-hpux9.mc ### # divert(-1) # # diff --git a/cf/cf/generic-linux.cf b/cf/cf/generic-linux.cf index 17bf46e49866..5d1f08151226 100644 --- a/cf/cf/generic-linux.cf +++ b/cf/cf/generic-linux.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:56 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:04:59 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -101,6 +101,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -127,7 +128,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -375,7 +376,7 @@ O SuperSafe=True # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -549,7 +550,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -809,7 +810,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -903,7 +904,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -933,7 +934,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1202,7 +1203,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1245,6 +1246,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1252,6 +1260,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1291,8 +1300,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1482,6 +1495,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-linux.mc ### # divert(-1) # # diff --git a/cf/cf/generic-mpeix.cf b/cf/cf/generic-mpeix.cf index f0520de5d0ef..5f5d8b5714be 100644 --- a/cf/cf/generic-mpeix.cf +++ b/cf/cf/generic-mpeix.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:56 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:04:59 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -97,6 +97,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -123,7 +124,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -371,7 +372,7 @@ O DefaultUser=SERVER.SENDMAIL # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -545,7 +546,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -805,7 +806,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -899,7 +900,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -929,7 +930,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1198,7 +1199,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1241,6 +1242,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1248,6 +1256,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1287,8 +1296,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1478,6 +1491,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-mpeix.mc ### # divert(-1) # # diff --git a/cf/cf/generic-nextstep3.3.cf b/cf/cf/generic-nextstep3.3.cf index b51bbf80487a..705210e51dd7 100644 --- a/cf/cf/generic-nextstep3.3.cf +++ b/cf/cf/generic-nextstep3.3.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:56 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:04:59 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -96,6 +96,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -122,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -370,7 +371,7 @@ O SuperSafe=True # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -544,7 +545,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -804,7 +805,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -898,7 +899,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -928,7 +929,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1197,7 +1198,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1240,6 +1241,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1247,6 +1255,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1286,8 +1295,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1477,6 +1490,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-nextstep3.3.mc ### # divert(-1) # # diff --git a/cf/cf/generic-osf1.cf b/cf/cf/generic-osf1.cf index 2c9c7a5911e3..2100bc3f9a09 100644 --- a/cf/cf/generic-osf1.cf +++ b/cf/cf/generic-osf1.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:57 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:04:59 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -97,6 +97,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -123,7 +124,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -371,7 +372,7 @@ O DefaultUser=daemon # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -545,7 +546,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -805,7 +806,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -899,7 +900,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -929,7 +930,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1198,7 +1199,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1241,6 +1242,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1248,6 +1256,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1287,8 +1296,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1478,6 +1491,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-osf1.mc ### # divert(-1) # # diff --git a/cf/cf/generic-solaris.cf b/cf/cf/generic-solaris.cf index 0c4c232ecbbe..a1553a26e06a 100644 --- a/cf/cf/generic-solaris.cf +++ b/cf/cf/generic-solaris.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:57 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:05:00 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -96,6 +96,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -122,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -370,7 +371,7 @@ O SuperSafe=True # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -544,7 +545,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -804,7 +805,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -898,7 +899,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -928,7 +929,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1197,7 +1198,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1240,6 +1241,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1247,6 +1255,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1286,8 +1295,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1477,6 +1490,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-solaris.mc ### # divert(-1) # # diff --git a/cf/cf/generic-sunos4.1.cf b/cf/cf/generic-sunos4.1.cf index 98a6084d6a75..b323360678da 100644 --- a/cf/cf/generic-sunos4.1.cf +++ b/cf/cf/generic-sunos4.1.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:57 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:05:00 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -97,6 +97,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -123,7 +124,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -371,7 +372,7 @@ O SuperSafe=True # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -545,7 +546,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -805,7 +806,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -899,7 +900,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -929,7 +930,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1198,7 +1199,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1241,6 +1242,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1248,6 +1256,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1287,8 +1296,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1478,6 +1491,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-sunos4.1.mc ### # divert(-1) # # diff --git a/cf/cf/generic-ultrix4.cf b/cf/cf/generic-ultrix4.cf index 0e3a8e89c216..5adb1ef6b32e 100644 --- a/cf/cf/generic-ultrix4.cf +++ b/cf/cf/generic-ultrix4.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:57 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:05:00 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -97,6 +97,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -123,7 +124,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.16.1 +DZ8.17.1 ############### @@ -371,7 +372,7 @@ O SuperSafe=True # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -545,7 +546,7 @@ O MaxHeadersLength=32768 #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -805,7 +806,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -899,7 +900,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -929,7 +930,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1198,7 +1199,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1241,6 +1242,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1248,6 +1256,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1287,8 +1296,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1478,6 +1491,7 @@ Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2 T=DNS/RFC822/SMTP, A=TCP $h + ### generic-ultrix4.mc ### # divert(-1) # # diff --git a/cf/cf/submit.cf b/cf/cf/submit.cf index 63d7cb720eb7..1faab23e9e39 100644 --- a/cf/cf/submit.cf +++ b/cf/cf/submit.cf @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:57 PDT 2020 -##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf +##### built by ca@lab.smi.sendmail.com on Sun Aug 15 23:05:00 PDT 2021 +##### in /var/tmp/ca/sm8.head/sendmail/OpenSource/sendmail-8.17.1/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -88,6 +88,7 @@ C{ResOk}OKR # Hosts for which relaying is permitted ($=R) FR-o /etc/mail/relay-domains + # arithmetic map Karith arith @@ -114,7 +115,7 @@ D{MTAHost}[127.0.0.1] # Configuration version number -DZ8.16.1/Submit +DZ8.17.1/Submit ############### @@ -362,7 +363,7 @@ O TimeZoneSpec= # maximum number of new connections per second #O ConnectionRateThrottle=0 -# Width of the window +# Width of the window #O ConnectionRateWindowSize=60s # work recipient factor @@ -536,7 +537,7 @@ O PidFile=/var/spool/clientmqueue/sm-client.pid #O ClientCertFile # Client private key #O ClientKeyFile -# File containing certificate revocation lists +# File containing certificate revocation lists #O CRLFile # Directory containing hashes pointing to certificate revocation status files #O CRLPath @@ -802,7 +803,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -896,7 +897,7 @@ R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 > SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -926,7 +927,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1 -R< $+ > $* $#local $@ $2 $: $1 +R< $+ > $* $#local $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1189,7 +1190,7 @@ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $ R $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name} R$* $: <@> $&{client_name} # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] R$* . $1 strip trailing dots R $=w $@ RELAY @@ -1232,6 +1233,13 @@ SLocal_Relay_Auth Ssrv_features +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features + + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -1239,6 +1247,7 @@ Ssrv_features Stry_tls + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -1278,8 +1287,12 @@ R$* $@ $>"TLS_connection" $1 ### Requirement: RHS from access map, may be ? for none. ###################################################################### STLS_connection -RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake." -RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed." +RSOFTWARE $#error $@ 4.7.0 $: "454 TLS handshake failed." +RDANE_FAIL $#error $@ 4.7.0 $: "454 DANE check failed." +RPROTOCOL $#error $@ 4.7.0 $: "454 STARTTLS failed." +RCONFIG $#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible." + + @@ -1478,6 +1491,7 @@ Mrelay, P=[IPC], F=mDFMuXa8k, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L= T=DNS/RFC822/SMTP, A=TCP $h + ### submit.mc ### # divert(-1) # # @@ -1505,3 +1519,6 @@ Mrelay, P=[IPC], F=mDFMuXa8k, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L= # dnl # dnl If you use IPv6 only, change [127.0.0.1] to [IPv6:0:0:0:0:0:0:0:1] # FEATURE(`msp', `[127.0.0.1]')dnl +# dnl enable this for SMTPUTF8 support +# dnl LOCAL_CONFIG +# dnl O SMTPUTF8=true diff --git a/cf/cf/submit.mc b/cf/cf/submit.mc index fc3cceec6b8f..99e58ac2629c 100644 --- a/cf/cf/submit.mc +++ b/cf/cf/submit.mc @@ -24,3 +24,6 @@ define(`confDONT_INIT_GROUPS', `True')dnl dnl dnl If you use IPv6 only, change [127.0.0.1] to [IPv6:0:0:0:0:0:0:0:1] FEATURE(`msp', `[127.0.0.1]')dnl +dnl enable this for SMTPUTF8 support +dnl LOCAL_CONFIG +dnl O SMTPUTF8=true diff --git a/cf/feature/check_cert_altnames.m4 b/cf/feature/check_cert_altnames.m4 index 9fae74ef0a3c..baa10697fd95 100644 --- a/cf/feature/check_cert_altnames.m4 +++ b/cf/feature/check_cert_altnames.m4 @@ -10,7 +10,7 @@ divert(-1) # divert(0)dnl -VERSIONID(`$Id: block_bad_helo.m4,v 1.2 2013-11-22 20:51:11 ca Exp $') +VERSIONID(`$Id: check_cert_altnames.m4 1.0 2019-01-01 01:01:01 ca Exp $') divert(-1) define(`_FFR_TLS_ALTNAMES', `1') divert(6)dnl diff --git a/cf/feature/check_other.m4 b/cf/feature/check_other.m4 new file mode 100644 index 000000000000..fa792243e137 --- /dev/null +++ b/cf/feature/check_other.m4 @@ -0,0 +1,46 @@ +divert(-1) +# +# Copyright (c) 2021 Proofpoint, Inc. and its suppliers. +# All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# +# +dnl bogus Id, just here to show up in the generated cf file +divert(0) +VERSIONID(`$Id: check_other.m4,v 1.0 2021-04-30 00:01:11 ca Exp $') +divert(-1) +dnl +dnl Options: +dnl first arg: +dnl empty: use default regex +dnl else: use as regex +dnl [not implemented: NOREGEX: do not use any regex] +dnl +dnl Possible enhancements: +dnl select which SMTP reply type(s) should be allowed to match? +dnl maybe add "exceptions": +dnl - via an "OK" regex? +dnl - access map lookup for clients to be "ok" (Connect:... {ok,relay}) +dnl more args? possible matches for rejections: +dnl does not seem to worth the effort: too inflexible. +dnl +dnl Note: sendmail removes whitespace before ':' ("tokenization") +ifelse( + defn(`_ARG_'), `', `define(`CHKORX', `^[[:print:]]+ *:')', + dnl defn(`_ARG_'), `NOREGEX', `define(`CHKORX', `')', + `define(`CHKORX', defn(`_ARG_'))') +LOCAL_CONFIG +ifelse(defn(`CHKORX'), `', `', `dnl +Kbadcmd regex -m -a defn(`CHKORX')') +LOCAL_RULESETS +Scheck_other +dnl accept anything that will be accepted by the MTA +R$* $| 2 $@ ok +ifelse(defn(`CHKORX'), `', `', `dnl +R$+ $| 5 $: $(badcmd $1 $) +R$* $#error $@ 4.7.0 $: 421 bad command') +dnl terminate on any bad command? +dnl R$* $| 5 $#error $@ 4.7.0 $: 421 bad command diff --git a/cf/feature/delay_checks.m4 b/cf/feature/delay_checks.m4 index 368057c991a8..630f94072922 100644 --- a/cf/feature/delay_checks.m4 +++ b/cf/feature/delay_checks.m4 @@ -21,5 +21,5 @@ ifelse(defn(`_ARG_'), `', `', ') ') -dnl be backward compatible by default +dnl be backward compatible by default ifelse(len(X`'_ARG2_), `1', `define(`_DELAY_COMPAT_8_10_', 1)', `') diff --git a/cf/feature/dnsbl.m4 b/cf/feature/dnsbl.m4 index dd8fd52583f9..4a6969687b0b 100644 --- a/cf/feature/dnsbl.m4 +++ b/cf/feature/dnsbl.m4 @@ -14,7 +14,7 @@ divert(0) ifdef(`_DNSBL_R_',`dnl',`dnl VERSIONID(`$Id: dnsbl.m4,v 8.34 2013-11-22 20:51:11 ca Exp $') define(`_DNSBL_R_',`') -ifelse(defn(`_ARG_'), `', +ifelse(defn(`_ARG_'), `', `errprint(`*** ERROR: missing argument for FEATURE(`dnsbl')')') LOCAL_CONFIG # map for DNS based blocklist lookups diff --git a/cf/feature/enhdnsbl.m4 b/cf/feature/enhdnsbl.m4 index f0ba5c50d482..a1f5f62a004b 100644 --- a/cf/feature/enhdnsbl.m4 +++ b/cf/feature/enhdnsbl.m4 @@ -9,7 +9,7 @@ divert(-1) # # -ifelse(defn(`_ARG_'), `', +ifelse(defn(`_ARG_'), `', `errprint(`*** ERROR: missing argument for FEATURE(`enhdnsbl')')') divert(0) ifdef(`_EDNSBL_R_',`dnl',`dnl diff --git a/cf/feature/nopercenthack.m4 b/cf/feature/nopercenthack.m4 index f6c9621c970d..7f5c7485fef0 100644 --- a/cf/feature/nopercenthack.m4 +++ b/cf/feature/nopercenthack.m4 @@ -16,7 +16,7 @@ divert(0) VERSIONID(`$Id: nopercenthack.m4,v 8.14 2013/01/31 15:07:00 ca Exp $') divert(-1) -ifelse(defn(`_ARG_'), `', +ifelse(defn(`_ARG_'), `', `errprint(`*** ERROR: missing argument for FEATURE(nopercenthack): use `reject' or `nospecial'. See cf/README. ')define(`_NO_PERCENTHACK_', `e')', diff --git a/cf/feature/nouucp.m4 b/cf/feature/nouucp.m4 index 5d1ee76f4dd7..98a9d69d2efb 100644 --- a/cf/feature/nouucp.m4 +++ b/cf/feature/nouucp.m4 @@ -16,7 +16,7 @@ divert(0) VERSIONID(`$Id: nouucp.m4,v 8.14 2013-11-22 20:51:11 ca Exp $') divert(-1) -ifelse(defn(`_ARG_'), `', +ifelse(defn(`_ARG_'), `', `errprint(`*** ERROR: missing argument for FEATURE(nouucp): use `reject' or `nospecial'. See cf/README. ')define(`_NO_UUCP_', `e')', diff --git a/cf/feature/sts.m4 b/cf/feature/sts.m4 new file mode 100644 index 000000000000..54ffb96a9b9c --- /dev/null +++ b/cf/feature/sts.m4 @@ -0,0 +1,19 @@ +divert(-1) +# +# Copyright (c) 2020 Proofpoint, Inc. and its suppliers. +# All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# + +divert(-1) +define(`_MTA_STS_', `') +define(`_NEED_MACRO_MAP_', `1') +ifelse(_ARG2_,`NO_SAN_TST',`',`define(`_STS_SAN', `1')') +LOCAL_CONFIG +O StrictTransportSecurity=true +ifelse(_ARG2_,`NO_SAN_TST',`',`O SetCertAltnames=true') +Ksts ifelse(defn(`_ARG_'), `', socket -d5 -T inet:5461@127.0.0.1, + defn(`_NARG_'), `', `_ARG_', `_NARG_') diff --git a/cf/m4/cfhead.m4 b/cf/m4/cfhead.m4 index 6d12e8582627..c30fad014300 100644 --- a/cf/m4/cfhead.m4 +++ b/cf/m4/cfhead.m4 @@ -170,6 +170,12 @@ ifdef(`_MAILER_DEFINED_',,`errprint(`*** WARNING: MAILER() should be before LOCA ')') divert(9) SLocal_srv_features') +define(`LOCAL_CLT_FEATURES', +`define(`_LOCAL_CLT_FEATURES_') +ifdef(`_MAILER_DEFINED_',,`errprint(`*** WARNING: MAILER() should be before LOCAL_CLT_FEATURES +')') +divert(9) +SLocal_clt_features') define(`LOCAL_TRY_TLS', `define(`_LOCAL_TRY_TLS_') ifdef(`_MAILER_DEFINED_',,`errprint(`*** WARNING: MAILER() should be before LOCAL_TRY_TLS @@ -212,7 +218,7 @@ define(`SITE', `ifelse(CONCAT($'2`, $3), SU, sinclude(_CF_DIR_`'siteconfig/$1.m4)') define(`EXPOSED_USER', `PUSHDIVERT(5)C{E}$1 POPDIVERT`'dnl`'') -define(`EXPOSED_USER_FILE', `PUSHDIVERT(5)F{E}$1 +define(`EXPOSED_USER_FILE', `PUSHDIVERT(5)F{E}$1 POPDIVERT`'dnl`'') define(`LOCAL_USER', `PUSHDIVERT(5)C{L}$1 POPDIVERT`'dnl`'') diff --git a/cf/m4/proto.m4 b/cf/m4/proto.m4 index 618dde00e24a..cfd71b3f9cad 100644 --- a/cf/m4/proto.m4 +++ b/cf/m4/proto.m4 @@ -183,16 +183,20 @@ ifdef(`confCR_FILE', `dnl FR`'confCR_FILE', `dnl') +ifdef(`_ACCESS_TABLE_', `dnl +define(`_FULL_TLS_CONNECTION_CHECK_', `1')', `dnl +ifdef(`_MTA_STS_', `define(`_FULL_TLS_CONNECTION_CHECK_', `1')')') define(`TLS_SRV_TAG', `"TLS_Srv"')dnl define(`TLS_CLT_TAG', `"TLS_Clt"')dnl define(`TLS_RCPT_TAG', `"TLS_Rcpt"')dnl define(`TLS_TRY_TAG', `"Try_TLS"')dnl define(`SRV_FEAT_TAG', `"Srv_Features"')dnl +define(`CLT_FEAT_TAG', `"Clt_Features"')dnl dnl this may be useful in other contexts too ifdef(`_ARITH_MAP_', `', `# arithmetic map define(`_ARITH_MAP_', `1')dnl Karith arith') -ifdef(`_ACCESS_TABLE_', `dnl +ifdef(`_FULL_TLS_CONNECTION_CHECK_', `dnl ifdef(`_MACRO_MAP_', `', `# macro storage map define(`_MACRO_MAP_', `1')dnl Kmacro macro') @@ -206,6 +210,13 @@ KCERTIssuer regex _CERT_REGEX_ISSUER_', `dnl') ifdef(`_CERT_REGEX_SUBJECT_', `dnl # extract relevant part from cert subject KCERTSubject regex _CERT_REGEX_SUBJECT_', `dnl') +ifdef(`_MTA_STS_', `dnl +Kstsxsni regex -a: -s3 (.*)(servername=)(.*) +Kstsxsni2 regex -a: -s2 (.*)(servername=.*) +Kstsxmatch regex -a: -s2 (match=)(.*) +# flag d: turn off DANE +Kstsxnodaneflag regex -a@ -s3 (.*)(flags=)([^;]*d)(.*) +', `dnl') ifdef(`LOCAL_RELAY', `dnl # who I send unqualified names to if `FEATURE(stickyhost)' is used @@ -502,7 +513,7 @@ _OPTION(MaxDaemonChildren, `confMAX_DAEMON_CHILDREN', `0') # maximum number of new connections per second _OPTION(ConnectionRateThrottle, `confCONNECTION_RATE_THROTTLE', `0') -# Width of the window +# Width of the window _OPTION(ConnectionRateWindowSize, `confCONNECTION_RATE_WINDOW_SIZE', `60s') # work recipient factor @@ -688,7 +699,7 @@ _OPTION(ServerKeyFile, `confSERVER_KEY', `') _OPTION(ClientCertFile, `confCLIENT_CERT', `') # Client private key _OPTION(ClientKeyFile, `confCLIENT_KEY', `') -# File containing certificate revocation lists +# File containing certificate revocation lists _OPTION(CRLFile, `confCRL', `') # Directory containing hashes pointing to certificate revocation status files _OPTION(CRLPath, `confCRL_PATH', `') @@ -868,7 +879,7 @@ R$* < @@ $+ > $* $@ $1 < @ $2 > $3 canon IP addr ifdef(`_DOMAIN_TABLE_', `dnl # look up domains in the domain table -R$* < @ $+ > $* $: $1 < @ $(domaintable $2 $) > $3', `dnl') +R$* < @ $+ > $* $: $1 < @ $(domaintable $2 $) > $3', `dnl') undivert(2)dnl LOCAL_RULE_3 @@ -953,14 +964,14 @@ ifdef(`_MASQUERADE_ENTIRE_DOMAIN_', ifdef(`_VIRTUSER_TABLE_', `dnl dnl virtual hosts are also canonical ifdef(`_VIRTUSER_ENTIRE_DOMAIN_', -`R$* < @ $* $={VirtHost} > $* $: $1 < @ $2 $3 . > $4', -`R$* < @ $={VirtHost} > $* $: $1 < @ $2 . > $3')', +`R$* < @ $* $={VirtHost} > $* $: $1 < @ $2 $3 . > $4', +`R$* < @ $={VirtHost} > $* $: $1 < @ $2 . > $3')', `dnl') ifdef(`_GENERICS_TABLE_', `dnl dnl hosts for genericstable are also canonical ifdef(`_GENERICS_ENTIRE_DOMAIN_', -`R$* < @ $* $=G > $* $: $1 < @ $2 $3 . > $4', -`R$* < @ $=G > $* $: $1 < @ $2 . > $3')', +`R$* < @ $* $=G > $* $: $1 < @ $2 $3 . > $4', +`R$* < @ $=G > $* $: $1 < @ $2 . > $3')', `dnl') dnl remove superfluous dots (maybe repeatedly) which may have been added dnl by one of the rules before @@ -1062,7 +1073,7 @@ R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ... R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here R< @ $+ > $#error $@ 5.1.3 $: "_CODE553 User address required" R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ... -R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" +R$- $: $(dequote $1 $) < @ *LOCAL* > dequote "foo" R< @ *LOCAL* > $#error $@ 5.1.3 $: "_CODE553 User address required" R$* $=O $* < @ *LOCAL* > $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ... @@ -1105,17 +1116,17 @@ dnl are identical, i.e., if address A is mapped to A. dnl it does not deal with multi-level recursion # handle full domains in RHS of virtusertable R$+ < @ $+ > $: $(macro {RecipientAddress} $) $1 < @ $2 > -R$+ < @ $+ > $: $1 < @ $2 > $| $>final $1 < @ $2 > +R$+ < @ $+ > $: $1 < @ $2 > $| $>final $1 < @ $2 > R $+ $| $+ $: $1 $(macro {RecipientAddress} $@ $2 $) R $+ $| $* $: $1', `dnl') R$+ $: $1 Mark for lookup dnl input: local<@domain> ifdef(`_VIRTUSER_ENTIRE_DOMAIN_', -`R $+ < @ $* $={VirtHost} . > $: < $(virtuser $1 @ $2 $3 $@ $1 $: @ $) > $1 < @ $2 $3 . >', -`R $+ < @ $={VirtHost} . > $: < $(virtuser $1 @ $2 $@ $1 $: @ $) > $1 < @ $2 . >') +`R $+ < @ $* $={VirtHost} . > $: < $(virtuser $1 @ $2 $3 $@ $1 $: @ $) > $1 < @ $2 $3 . >', +`R $+ < @ $={VirtHost} . > $: < $(virtuser $1 @ $2 $@ $1 $: @ $) > $1 < @ $2 . >') dnl input: local<@domain> | local<@domain> -R $+ < @ $=w . > $: < $(virtuser $1 @ $2 $@ $1 $: @ $) > $1 < @ $2 . > +R $+ < @ $=w . > $: < $(virtuser $1 @ $2 $@ $1 $: @ $) > $1 < @ $2 . > dnl if <@> local<@domain>: no match but try lookup dnl user+detail: try user++@domain if detail not empty R<@> $+ + $+ < @ $* . > @@ -1140,14 +1151,14 @@ dnl no match R<@> $+ $: $1 dnl remove mark R $+ $: $1 -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 -R< error : $- $+ > $* $#error $@ $(dequote $1 $) $: $2 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $- $+ > $* $#error $@ $(dequote $1 $) $: $2 ifdef(`_VIRTUSER_STOP_ONE_LEVEL_RECURSION_',`dnl # check virtuser input address against output address, if same, skip recursion R< $+ > $+ < @ $+ > $: < $1 > $2 < @ $3 > $| $1 # it is the same: stop now R< $+ > $+ < @ $+ > $| $&{RecipientAddress} $: $>ParseLocal $>Parse0 $>canonify $1 -R< $+ > $+ < @ $+ > $| $* $: < $1 > $2 < @ $3 > +R< $+ > $+ < @ $+ > $| $* $: < $1 > $2 < @ $3 > dnl', `dnl') dnl this is not a documented option dnl it performs no looping at all for virtusertable @@ -1176,7 +1187,7 @@ R$* <@ $+ > $* $: < $2 > $1 < @ $2 > $3 extract host name R< $+ . > $* $: < $1 > $2 strip trailing dot R< $+ > $* $: < $(mailertable $1 $) > $2 lookup dnl it is $~[ instead of $- to avoid matches on IPv6 addresses -R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3 check -- resolved? +R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3 check -- resolved? R< $+ > $* $: $>Mailertable <$1> $2 try domain', `dnl') undivert(4)dnl UUCP rules from `MAILER(uucp)' @@ -1285,7 +1296,7 @@ R< > $+ + $* $: < ? $L > <+ $2> $(user $1 $) look up user+ R< > $+ $: < ? $L > < > $(user $1 $) look up user R< ? $* > < $* > $+ <> $: < > $3 $2 found; strip $L R< ? $* > < $* > $+ $: < $1 > $3 $2 not found', ` -R< > $+ $: < $L > $(user $1 $) look up user +R< > $+ $: < $L > $(user $1 $) look up user R< $* > $+ <> $: < > $2 found; strip $L') ifdef(`_PRESERVE_LUSER_HOST_', `dnl R< $+ > $+ $: < $1 > $2 $&{Host}') @@ -1336,7 +1347,7 @@ R< $+ > $* $#_RELAY_ $@ $1 $: $2 not found, direct relay', `dnl') ################################################################### -### Ruleset 90 -- try domain part of mailertable entry ### +### Ruleset 90 -- try domain part of mailertable entry ### dnl input: LeftPartOfDomain FullAddress ################################################################### @@ -1346,7 +1357,7 @@ dnl %2 is not documented in cf/README R$* <$- . $+ > $* $: $1$2 < $(mailertable .$3 $@ $1$2 $@ $2 $) > $4 dnl it is $~[ instead of $- to avoid matches on IPv6 addresses R$* <$~[ : $* > $* $>MailerToTriple < $2 : $3 > $4 check -- resolved? -R$* < . $+ > $* $@ $>Mailertable $1 . <$2> $3 no -- strip & try again +R$* < . $+ > $* $@ $>Mailertable $1 . <$2> $3 no -- strip & try again dnl is $2 always empty? R$* < $* > $* $: < $(mailertable . $@ $1$2 $) > $3 try "." R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3 "." found? @@ -1369,7 +1380,7 @@ dnl address -> relay host address SMailerToTriple=95 R< > $* $@ $1 strip off null relay -R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 +R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2 R< error : $+ > $* $#error $: $1 R< local : $* > $* $>CanonLocal < $1 > $2 @@ -1408,7 +1419,7 @@ R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 > # handle local:user syntax R< $+ > $* <@ $* > $* $#_LOCAL_ $@ $2@$3 $: $1 -R< $+ > $* $#_LOCAL_ $@ $2 $: $1 +R< $+ > $* $#_LOCAL_ $@ $2 $: $1 ################################################################### ### Ruleset 93 -- convert header names to masqueraded form ### @@ -1440,9 +1451,9 @@ dnl no match, try @domain for exceptions R< > $+ < @ $+ . > $: < $(generics @$2 $@ $1 $: $) > $1 < @ $2 . > dnl workspace: ... or user <@domain> dnl no match, try local part -R< > $+ < @ $+ > $: < $(generics $1 $: $) > $1 < @ $2 > -R< > $+ + $* < @ $+ > $: < $(generics $1+* $@ $2 $: $) > $1 + $2 < @ $3 > -R< > $+ + $* < @ $+ > $: < $(generics $1 $: $) > $1 + $2 < @ $3 > +R< > $+ < @ $+ > $: < $(generics $1 $: $) > $1 < @ $2 > +R< > $+ + $* < @ $+ > $: < $(generics $1+* $@ $2 $: $) > $1 + $2 < @ $3 > +R< > $+ + $* < @ $+ > $: < $(generics $1 $: $) > $1 + $2 < @ $3 > R< $* @ $* > $* < $* > $@ $>canonify $1 @ $2 found qualified R< $+ > $* < $* > $: $>canonify $1 @ *LOCAL* found unqualified R< > $* $: $1 not found', @@ -1594,7 +1605,7 @@ dnl must not be empty ### + does lookup with and without tag ### <$4> -- passthru (additional data passed unchanged through) dnl returns: -dnl +dnl ###################################################################### SD @@ -2183,10 +2194,10 @@ R$* $| $* $: $1 dnl workspace: localpart<@domain> | localpart ifelse(defn(`_NO_UUCP_'), `r', `R$* ! $* < @ $* > $: $2 < @ BANG_PATH > -R$* ! $* $: $2 < @ BANG_PATH >', `dnl') +R$* ! $* $: $2 < @ BANG_PATH >', `dnl') ifelse(defn(`_NO_PERCENTHACK_'), `r', `R$* % $* < @ $* > $: $1 < @ PERCENT_HACK > -R$* % $* $: $1 < @ PERCENT_HACK >', `dnl') +R$* % $* $: $1 < @ PERCENT_HACK >', `dnl') # anything terminating locally is ok ifdef(`_RELAY_ENTIRE_DOMAIN_', `dnl R$+ < @ $* $=m > $@ RELAY', `dnl') @@ -2273,13 +2284,13 @@ RIPv6:::1 $@ RELAY originated locally R$=R $* $@ RELAY relayable IP address ifdef(`_ACCESS_TABLE_', `dnl R$* $: $>A <$1> <+ Connect> <$1> -R $* $@ RELAY relayable IP address +R $* $@ RELAY relayable IP address ifdef(`_FFR_REJECT_IP_IN_CHECK_RCPT_',`dnl dnl this will cause rejections in cases like: dnl Connect:My.Host.Domain RELAY dnl Connect:My.Net REJECT dnl since in check_relay client_name is checked before client_addr -R $* $@ REJECT rejected IP address') +R $* $@ REJECT rejected IP address') ifdef(`_ATMPF_', `R<_ATMPF_> $* $#TEMP $@ 4.3.0 $: _TMPFMSG_(`YOK1')', `dnl') R<$*> <$*> $: $2', `dnl') R$* $: [ $1 ] put brackets around it... @@ -2326,7 +2337,7 @@ dnl nevertheless, removing the rule doesn't hurt. dnl R<@> $@ RELAY dnl workspace: <@> ${client_name} (not empty) # pass to name server to make hostname canonical -R<@> $* $=P $: $1 $2 +R<@> $* $=P $: $1 $2 R<@> $+ $: $[ $1 $] dnl workspace: ${client_name} (canonified) R$* . $1 strip trailing dots @@ -2471,7 +2482,7 @@ dnl must not be empty ### + does lookup with and without tag ### <$4> -- passthru (additional data passed unchanged through) dnl returns: -dnl +dnl ###################################################################### SF @@ -2520,7 +2531,7 @@ dnl must not be empty ### + does lookup with and without tag ### <$4> -- passthru (additional data passed unchanged through) dnl returns: -dnl +dnl ###################################################################### SE @@ -2554,7 +2565,7 @@ dnl must not be empty ### + does lookup with and without tag ### <$4> -- passthru (additional data passed unchanged through) dnl returns: -dnl +dnl ###################################################################### SU @@ -2685,6 +2696,24 @@ ifdef(`_ATMPF_', `dnl tempfail? R<$* _ATMPF_>$* $#temp', `dnl') R<$+>$* $# $1') +###################################################################### +### clt_features: which features to use with a server? +### (done in client) +###################################################################### +Sclt_features +ifdef(`_LOCAL_CLT_FEATURES_', `dnl +R$* $: $1 $| $>"Local_clt_features" $1 +R$* $| $#$* $#$2 +R$* $| $* $: $1', `dnl') +ifdef(`_ACCESS_TABLE_', `dnl +R$* $: $>D <$&{client_name}> <> +R$* $: $>A <$&{client_addr}> <> +R$* $: <$(access CLT_FEAT_TAG`'_TAG_DELIM_ $: ? $)> +R$* $@ OK +ifdef(`_ATMPF_', `dnl tempfail? +R<$* _ATMPF_>$* $#temp', `dnl') +R<$+>$* $# $1') + ###################################################################### ### try_tls: try to use STARTTLS? ### (done in client) @@ -2703,6 +2732,76 @@ ifdef(`_ATMPF_', `dnl tempfail? R<$* _ATMPF_>$* $#error $@ 4.3.0 $: _TMPFMSG_(`TT')', `dnl') R$* $#error $@ 5.7.1 $: "550 do not try TLS with " $&{server_name} " ["$&{server_addr}"]"') +ifdef(`_MTA_STS_', `dnl +STLS_NameInList +R$* :$&{TLS_Name}: $* $@ ok +R$* $@ $1 + +dnl check SAN for STS +SSTS_SAN +ifdef(`_STS_SAN', `dnl +R$* $: $&{server_name} +dnl exact match +R$={cert_altnames} $@ ok +# strip only one level (no recursion!) +R$-.$+ $: $2 +dnl wildcard: *. or just .? +R *.$={cert_altnames} $@ ok +dnl R .$={cert_altnames} $@ ok +dnl always temporary error? make it an option (of the feature)? +R$* $#error $@ 4.7.0 $: 450 $&{server_name} not listed in SANs', `dnl') + +dnl input: ${verify} +dnl output: $# error ... (from TLS_connection) +dnl everything else: ok +SSTS_secure +R$* $: $&{rcpt_addr} $| $1 +# no {rcpt_addr}, no STS check +R $| $* $@ ok +dnl canonify to extract domain part? +R$*@$+ $| $* $2 $| $3 +R$+. $| $* $1 $| $2 +R$+ $| $* $: $(sts $1 $: none $) $| $2 +R$* $| $* $#error $@ 4.7.0 $: 450 STS lookup temp fail +dnl check whether connection is "secure" +dnl always temporary error? make it an option (of the feature)? +R$* secure $* $| $* $@ $>"TLS_connection" $3 $| +R$* $| $* $: $2 + +dnl check STS policy: secure and match? if so, check list +SSTS_Check +R$* $: $&{rcpt_addr} $| $1 +# no {rcpt_addr}, no STS check +R $| $* $@ ok +# use the original argument for the test, not {rcpt_addr} +R$* $| $* $: $2 $| $2 +dnl canonify to extract domain part? +R$*@$+ $| $* $2 $| $3 +R$+. $| $* $1 $| $2 +R$* $| $* $: $(sts $1 $: none $) $| mark +R$* $| $* $#error $@ 4.7.0 $: 450 STS lookup temp fail +dnl STS check only for "secure" +dnl do this only if {sts_sni} is set? +dnl workspace: result of sts lookup $| mark +R$* secure $* $| mark $: $2 $| trmatch +dnl not "secure": no check +R$* $| mark $@ ok +dnl remove servername=hostname, keep match= +R$* servername=hostname $| trmatch $: $1 $| trmatch +dnl extra list of matches, i.e., remove match= +R$+ $| trmatch $: : $(stsxmatch $1 $: : $) +dnl no match= data +R$* $| trmatch $@ $>STS_SAN +dnl Remove trailing dots from each entry in the list; +dnl those should not be there, but better safe than sorry. +R$*:$+.:$* $1:$2:$3 +R:$+: $: $(macro {TLS_Name} $@ $&{server_name} $) $>TLS_NameInList :$1: +R$* ok $@ $>STS_SAN +R$* $: $1 $| $&{server_name} +R:$* $| $-.$+ $: $(macro {TLS_Name} $@ .$3 $) $>TLS_NameInList :$1 +R$* ok $@ $>STS_SAN +R:$*: $#error $@ 4.7.0 $: 450 $&{server_name} not found in " "$1', `dnl') + ###################################################################### ### tls_rcpt: is connection with server "good" enough? ### (done in client, per recipient) @@ -2716,6 +2815,10 @@ ifdef(`_LOCAL_TLS_RCPT_', `dnl R$* $: $1 $| $>"Local_tls_rcpt" $1 R$* $| $#$* $#$2 R$* $| $* $: $1', `dnl') +ifdef(`_MTA_STS_', `dnl +R$* $: $1 $| $>"STS_Check" $1 +R$* $| $#$* $#$2 +R$* $| $* $: $1', `dnl') ifdef(`_ACCESS_TABLE_', `dnl dnl store name of other side R$* $: $(macro {TLS_Name} $@ $&{server_name} $) $1 @@ -2783,6 +2886,10 @@ R$* $| $#$* $#$2 R$* $| $* $: $1', `dnl') ifdef(`_TLS_FAILURES_',`dnl R$* $: $(macro {saved_verify} $@ $1 $) $1') +ifdef(`_MTA_STS_', `dnl +R$* $: $1 $| $>"STS_secure" $1 +R$* $| $#$* $#$2 +R$* $| $* $: $1', `dnl') ifdef(`_ACCESS_TABLE_', `dnl dnl store name of other side R$* $: $(macro {TLS_Name} $@ $&{server_name} $) $1 @@ -2808,11 +2915,22 @@ dnl [(PERM|TEMP)+] (VERIFY[:bits]|ENCR:bits) [+extensions] dnl extensions: could be a list of further requirements dnl for now: CN:string {cn_subject} == string ###################################################################### +ifdef(`TLS_PERM_ERR', `dnl +define(`TLS_DSNCODE', `5.7.0')dnl +define(`TLS_ERRCODE', `554')',`dnl +define(`TLS_DSNCODE', `4.7.0')dnl +define(`TLS_ERRCODE', `454')')dnl +define(`SW_MSG', `TLS handshake failed.')dnl +define(`DANE_MSG', `DANE check failed.')dnl +define(`PROT_MSG', `STARTTLS failed.')dnl +define(`CNF_MSG', `STARTTLS temporarily not possible.')dnl STLS_connection -ifdef(`_ACCESS_TABLE_', `dnl', `dnl use default error +ifdef(`_FULL_TLS_CONNECTION_CHECK_', `dnl', `dnl use default error dnl deal with TLS handshake failures: abort -RSOFTWARE $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') TLS handshake." -RDANE_FAIL $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') DANE check failed." +RSOFTWARE $#error $@ TLS_DSNCODE $: "TLS_ERRCODE SW_MSG" +RDANE_FAIL $#error $@ TLS_DSNCODE $: "TLS_ERRCODE DANE_MSG" +RPROTOCOL $#error $@ TLS_DSNCODE $: "TLS_ERRCODE PROT_MSG" +RCONFIG $#error $@ TLS_DSNCODE $: "TLS_ERRCODE CNF_MSG" divert(-1)') dnl common ruleset for tls_{client|server} dnl input: ${verify} $| [<>] @@ -2824,23 +2942,21 @@ dnl permanent or temporary error? R$* $| $: $1 $| <503:5.7.0> <$2 $3> R$* $| $: $1 $| <403:4.7.0> <$2 $3> dnl default case depends on TLS_PERM_ERR -R$* $| <$={Tls} $*> $: $1 $| <$2 $3> +R$* $| <$={Tls} $*> $: $1 $| <$2 $3> dnl workspace: ${verify} $| [] +define(`TLS_ERRORS', `dnl +R`'$1 $| <$-:$+> $`'* $`'#error $`'@ $`'2 $: $`'1 " $2" +dnl no i.e. no requirements in the access map +dnl use default error +R`'$1 $| $`'* $`'#error $`'@ TLS_DSNCODE $: "TLS_ERRCODE $2"')dnl # deal with TLS handshake failures: abort -RSOFTWARE $| <$-:$+> $* $#error $@ $2 $: $1 " TLS handshake failed." -dnl no i.e. no requirements in the access map -dnl use default error -RSOFTWARE $| $* $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') TLS handshake failed." +TLS_ERRORS(SOFTWARE,SW_MSG) # deal with TLS protocol errors: abort -RPROTOCOL $| <$-:$+> $* $#error $@ $2 $: $1 " STARTTLS failed." -dnl no i.e. no requirements in the access map -dnl use default error -RPROTOCOL $| $* $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') STARTTLS failed." +TLS_ERRORS(PROTOCOL,PROT_MSG) # deal with DANE errors: abort -RDANE_FAIL $| <$-:$+> $* $#error $@ $2 $: $1 " DANE check failed." -dnl no i.e. no requirements in the access map -dnl use default error -RDANE_FAIL $| $* $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') DANE check failed." +TLS_ERRORS(DANE_FAIL,DANE_MSG) +# deal with CONFIG (tls_clt_features) errors: abort +TLS_ERRORS(CONFIG,CNF_MSG) R$* $| <$*> $: <$2> <> $1 dnl separate optional requirements R$* $| <$*> $: <$2> <$3> $1 @@ -2958,25 +3074,116 @@ R$-:$-:$- $: $2 dnl endif _ACCESS_TABLE_ divert(0) +dnl this must also be activated without _TLS_SESSION_FEATURES_ +ifdef(`_MTA_STS_', `dnl +dnl caller preserves workspace +SSet_SNI +R$* $: <$&{rcpt_addr}> +# no {rcpt_addr}, no STS check +R<> $@ "" +dnl canonify to extract domain part? +R<$*@$+> $2 +R$+. $1 +R$+ $: $(sts $1 $: none $) +R$* $#error $@ 4.7.0 $: 450 STS lookup temp fail +Rnone $@ "" +dnl get servername=sni and store it in {sts_sni} +dnl stsxsni extracts the value of servername= (sni) +dnl stsxsni2 extracts servername=sni so it can be returned to the caller +R$* secure $* $: $(stsxsni $2 $: : $) $| sts=secure; $(stsxsni2 $2 $: : $) +dnl store {server_addr} as sni if there was a match +dnl Note: this implies that only servername=hostname (literally!) +dnl is only ever returned. +R$+: $| $+ : $: $(macro {sts_sni} $@ $&{server_name} $) set $| $2 +R$* $| $* $@ $2 +R$* $@ "" +dnl', `dnl') + ifdef(`_TLS_SESSION_FEATURES_', `dnl +define(`_NEED_TLS_CLT_FEATURES') Stls_srv_features ifdef(`_ACCESS_TABLE_', `dnl R$* $| $* $: $>D <$1> <$2> -R <$*> $: $>A <$1> <$1> -R <$*> $@ "" -R<$+> <$*> $@ $1 +R <$*> $: $>A <$1> <$1> +R <$*> $@ "" +R<$+> <$*> $@ $1 ', `dnl -R$* $@ ""') +R$* $@ ""') +', `dnl +ifdef(`_MTA_STS_',`define(`_NEED_TLS_CLT_FEATURES')')dnl +')dnl + +ifdef(`_NEED_TLS_CLT_FEATURES', `dnl +ifdef(`_ACCESS_TABLE_', `dnl +Stls_clt_feat_acc +R$* $| $* $: $>D <$1> <$2> +R <$*> $: $>A <$1> <$1> +R <$*> $@ "" +R<$+> <$*> $@ $1') + +SDANE_disabled +dnl Note: most of this is handled in the binary. +dnl input: access map lookup for tls_clt_features +dnl output: +dnl <>: disabled +dnl : enabled +R$+ $: < $(stsxnodaneflag $1 $: NOFLAGS $) > +R<$* @> $@ <> +R$* $: < $&{sts_sni} > +R<> $@ <> +# check this too? +# R$* $: $&{client_flags} +# R$* DD $* $@ <> +R$* $@ + +SSTS_disabled +dnl input: ignored +dnl output: +dnl <>: disabled +dnl : enabled +R$* $: $&{client_flags} +R$* MM $* $@ <> +dnl +R$* $: $&{rcpt_addr} $| $1 +# no {rcpt_addr}, no STS check +R $| $* $@ <> +R$* $@ Stls_clt_features +dnl host $| ip +R$* $: $1 $| <> ifdef(`_ACCESS_TABLE_', `dnl -R$* $| $* $: $>D <$1> <$2> -R <$*> $: $>A <$1> <$1> -R <$*> $@ "" -R<$+> <$*> $@ $1 -', `dnl -R$* $@ ""') -') +R$* $| <> $: $1 $| $>"tls_clt_feat_acc" $1 +R$* $| $* $| $* $: $1 $| $2 $| <$3>', `dnl') +ifdef(`_MTA_STS_', `dnl +dnl host $| ip $| +R$* $| $* $| <$*> $: $1 $| $2 $| <$3> $| $>"STS_disabled" sts +dnl host $| ip $| $| STS_disabled result +dnl disable STS check? return access result +R$* $| $* $| <$*> $| <> $@ $3 +dnl host $| ip $| $| STS_disabled result +R$* $| $* $| <$*> $| $* $: $1 $| $2 $| <$3> $| $>"DANE_disabled" $3 +dnl DANE enabled: return access result; take care of empty return +R$* $| $* $| <$+> $| $@ $3 +R$* $| $* $| <> $| $@ "" +dnl host $| ip $| $| +R$* $| $* $| <$*> $| <$*> $: $1 $| $2 $| <$3> $| $>"Set_SNI" $1 +dnl host $| ip $| $| sni result +dnl return sni result if not empty but acc is +R$* $| $* $| <""> $| $+ $@ $3 +dnl return acc + sni result if not empty +R$* $| $* $| <$+;> $| $+ $@ $3 ; $4 +dnl return acc + sni result if not empty +R$* $| $* $| <$+> $| $+ $@ $3 ; $4 +dnl return sni result if not empty +R$* $| $* $| <> $| $+ $@ $3 +dnl remove sni result +R$* $| $* $| $* $| $* $: $1 $| $2 $| $3 +', `dnl') +dnl host $| ip $| +R$* $| $* $| <""> $@ "" +R$* $| $* $| <$+> $@ $3 +R$* $@ ""') ###################################################################### ### RelayTLS: allow relaying based on TLS authentication @@ -3046,7 +3253,7 @@ dnl', `dnl')') ifdef(`_RATE_CONTROL_',`dnl ###################################################################### -### RateControl: +### RateControl: ### Parameters: ignored ### return: $#error or OK ###################################################################### @@ -3068,7 +3275,7 @@ R<$+> $| TRUE $#error $@ 4.3.2 $: _RATE_CONTROL_REPLY Connection rate limit exce ifdef(`_CONN_CONTROL_',`dnl ###################################################################### -### ConnControl: +### ConnControl: ### Parameters: ignored ### return: $#error or OK ###################################################################### @@ -3108,3 +3315,10 @@ _MAIL_FILTERS_ ###################################################################### undivert(7)dnl MAILER_DEFINITIONS + +dnl Helper ruleset for -bt mode to invoke rulesets +dnl which take two arguments separated by $| +dnl For example: +dnl Start,check_relay host.name $| I.P.V.4 +dnl SStart +dnl R$* $$| $* $: $1 $| $2 diff --git a/cf/m4/version.m4 b/cf/m4/version.m4 index dadff627bb2e..3942ca1a0691 100644 --- a/cf/m4/version.m4 +++ b/cf/m4/version.m4 @@ -15,4 +15,4 @@ VERSIONID(`$Id: version.m4,v 8.237 2014-01-27 12:55:17 ca Exp $') # divert(0) # Configuration version number -DZ8.16.1`'ifdef(`confCF_VERSION', `/confCF_VERSION') +DZ8.17.1`'ifdef(`confCF_VERSION', `/confCF_VERSION') diff --git a/cf/mailer/local.m4 b/cf/mailer/local.m4 index 85d24f32a2a6..1a9e4a3a1309 100644 --- a/cf/mailer/local.m4 +++ b/cf/mailer/local.m4 @@ -79,7 +79,7 @@ R$* $: $>MasqHdr $1 do all-masquerading')', # SAddDomain ifdef(`_ALWAYS_ADD_DOMAIN_', `dnl -R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully qualified +R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully qualified ifelse(len(X`'_ALWAYS_ADD_DOMAIN_),`1',` R$+ $@ $1 < @ *LOCAL* > add local qualification', `R$+ $@ $1 < @ _ALWAYS_ADD_DOMAIN_ > add qualification')', diff --git a/contrib/AuthRealm.p0 b/contrib/AuthRealm.p0 index 1ba8f58057fc..d1ac553df01f 100644 --- a/contrib/AuthRealm.p0 +++ b/contrib/AuthRealm.p0 @@ -1,19 +1,18 @@ Patch from John Marshall (slightly modified). +Modified for 8.16.1 by Anne Bennett. -diff --git a/sendmail/srvrsmtp.c b/sendmail/srvrsmtp.c -index 7dba983..bf804ab 100644 ---- a/sendmail/srvrsmtp.c -+++ b/sendmail/srvrsmtp.c -@@ -84,7 +84,7 @@ static int reset_saslconn __P((sasl_conn_t **_conn, char *_hostname, - # define RESET_SASLCONN \ +--- a/sendmail/srvrsmtp.c 2020-09-28 17:51:12.497535563 -0400 ++++ b/sendmail/srvrsmtp.c 2020-09-28 18:21:30.482890337 -0400 +@@ -116,7 +116,7 @@ do \ { \ + RESET_AUTH_FAIL_LOG_USER; \ - result = reset_saslconn(&conn, AuthRealm, remoteip, \ + result = reset_saslconn(&conn, hostname, remoteip, \ localip, auth_id, &ext_ssf); \ if (result != SASL_OK) \ sasl_ok = false; \ -@@ -938,8 +938,6 @@ smtp(nullserver, d_flags, e) +@@ -1018,8 +1018,6 @@ e->e_features = features; hostname = macvalue('j', e); #if SASL @@ -22,7 +21,7 @@ index 7dba983..bf804ab 100644 sasl_ok = bitset(SRV_OFFER_AUTH, features); n_mechs = 0; authenticating = SASL_NOT_AUTH; -@@ -948,8 +946,8 @@ smtp(nullserver, d_flags, e) +@@ -1028,8 +1026,8 @@ if (sasl_ok) { # if SASL >= 20000 @@ -33,7 +32,7 @@ index 7dba983..bf804ab 100644 # elif SASL > 10505 /* use empty realm: only works in SASL > 1.5.5 */ result = sasl_server_new("smtp", AuthRealm, "", NULL, 0, &conn); -@@ -5392,7 +5390,7 @@ reset_saslconn(sasl_conn_t **conn, char *hostname, +@@ -5559,7 +5557,7 @@ sasl_dispose(conn); # if SASL >= 20000 diff --git a/contrib/cidrexpand b/contrib/cidrexpand index ee24ee865275..d43b548ada81 100755 --- a/contrib/cidrexpand +++ b/contrib/cidrexpand @@ -3,7 +3,7 @@ # usage: # cidrexpand < /etc/mail/access | makemap -r hash /etc/mail/access # -# v 0.4 +# v 1.1 # # 17 July 2000 Derek J. Balling (dredd@megacity.org) # @@ -73,16 +73,25 @@ # Report bugs to: # +our $VERSION = '1.1'; use strict; use Net::CIDR qw(cidr2octets cidrvalidate); use Getopt::Std; +$Getopt::Std::STANDARD_HELP_VERSION = 1; +sub VERSION_MESSAGE; +sub HELP_MESSAGE; sub print_expanded_v4network; sub print_expanded_v6network; our %opts; -getopts('ct:', \%opts); +getopts('cfhOSt:', \%opts); + +if ($opts{h}) { + HELP_MESSAGE(\*STDOUT); + exit 0; +} # Delimiter between the key and value my $space_re = exists $opts{t} ? $opts{t} : '\s+'; @@ -94,11 +103,13 @@ my $ipv4_re = qr"(?:\d+\.){3}\d+"; # Further checks are required for verifying that it's really one my $ipv6_re = qr"[0-9A-Fa-f:]{2,39}(?:\.\d+\.\d+\.\d+)?"; +my %pending; while (<>) { chomp; my ($prefix, $network, $len, $right); + next if /^#/ && $opts{S}; if ( (/\#/) && $opts{c} ) { # print "checking...\n"; @@ -129,12 +140,12 @@ while (<>) } if (($prefix, $network, $len, $right) = - m!^(|\S+:)(${ipv4_re})/(\d+)(${space_re}.*)$!) + m!^(|[^\s:]+:)(${ipv4_re})/(\d+)(${space_re}.*)$!) { print_expanded_v4network($network, $len, $prefix, $right); } elsif ((($prefix, $network, $len, $right) = - m!^((?:\S+:)?[Ii][Pp][Vv]6:)(${ipv6_re})(?:/(\d+))?(${space_re}.*)$!) && + m!^((?:[^\s:]+:)?[Ii][Pp][Vv]6:)(${ipv6_re})(?:/(\d+))?(${space_re}.*)$!) && (!defined($len) || $len <= 128) && defined(cidrvalidate($network))) { @@ -142,19 +153,31 @@ while (<>) } else { + if (%pending && m!^(.+?)${space_re}!) + { + delete $pending{$opts{f} ? $1 : lc($1)}; + } print "$_\n"; } } +print foreach values %pending; sub print_expanded_v4network { my ($network, $len, $prefix, $suffix) = @_; + my $fp = $opts{f} ? $prefix : lc($prefix); # cidr2octets() doesn't handle a prefix-length of zero, so do # that ourselves foreach my $nl ($len == 0 ? (0..255) : cidr2octets("$network/$len")) { - print "$prefix$nl$suffix\n"; + my $val = "$prefix$nl$suffix\n"; + if ($opts{O}) + { + $pending{"$fp$nl"} = $val; + next; + } + print $val; } } @@ -171,11 +194,53 @@ sub print_expanded_v6network } else { + my $fp = $opts{f} ? $prefix : lc($prefix); foreach my $nl (cidr2octets("$network/$len")) { # trim leading zeros from each group $nl =~ s/(^|:)0+(?=[^:])/$1/g; - print "$prefix$nl$suffix\n"; + my $val = "$prefix$nl$suffix\n"; + if ($opts{O}) + { + $pending{"$fp$nl"} = $val; + next; + } + print $val; } } } + +sub VERSION_MESSAGE +{ + my ($fh) = @_; + print $fh "cidrexpand - Version $VERSION\n"; +} + +sub HELP_MESSAGE +{ + my ($fh) = @_; + print $fh <<'EOF'; +Usage: cidrexpand [-cfhOS] [-t regexp] files... + +Expand CIDR format inside the keys of map entries for makemap. + + -c Truncate lines at the first unquoted '#' + + -f Treat keys as case-sensitive when doing override detection + for the -O option. By default overlap detection is + case-insensitive. + + -h Print this usage + + -O When a CIDR expansion would generate a partial conflict + with a later entry, suppress the overlap from the earlier + expansion + + -S Skip lines that start with '#' + + -t regexp + Use 'regexp' to match the delimiter between key and value, + defaulting to \s+ + +EOF +} diff --git a/contrib/doublebounce.pl b/contrib/doublebounce.pl old mode 100644 new mode 100755 diff --git a/contrib/link_hash.sh b/contrib/link_hash.sh old mode 100644 new mode 100755 diff --git a/contrib/re-mqueue.pl b/contrib/re-mqueue.pl old mode 100644 new mode 100755 diff --git a/devtools/M4/UNIX/all.m4 b/devtools/M4/UNIX/all.m4 index b0f2435ba04e..cde5f83e1459 100644 --- a/devtools/M4/UNIX/all.m4 +++ b/devtools/M4/UNIX/all.m4 @@ -33,7 +33,7 @@ TESTS=bldCHECK_TARGETS') VPATH=${srcdir} changequote([[, ]]) check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; \ + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ list='$(TESTS)'; \ srcdir=$(srcdir); export srcdir; \ if test -n "$$list"; then \ @@ -65,6 +65,9 @@ check-TESTS: $(TESTS) echo "FAIL: $$tst"; \ ;; \ esac; \ + else \ + skip=`expr $$skip + 1`; \ + res=SKIP; \ fi; \ done; \ if test "$$failed" -eq 0; then \ @@ -80,7 +83,19 @@ check-TESTS: $(TESTS) banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ fi; \ fi; \ - dashes=`echo "$$banner" | sed s/./=/g`; \ + skipped=""; \ + dashes="$$banner"; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + test -z "$$skipped" || echo "$$skipped"; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes"; \ @@ -88,11 +103,12 @@ check-TESTS: $(TESTS) fi changequote(`, ') -check-am: all +check-am: make-test all $(MAKE) $(check_PROGRAMS) $(MAKE) check-TESTS check: check-am - +make-test: + ifdef(`confTEST_PRGS', `(cd ${SRCDIR}/test && $(MAKE) confTEST_PRGS)') define(`bldADD_SRC_CHK', ${$1SRCS_CHK} )dnl SRCS_CHK=bldFOREACH(`bldADD_SRC_CHK(', bldC_CHECKS) diff --git a/devtools/M4/UNIX/check.m4 b/devtools/M4/UNIX/check.m4 index 40cc62462656..b19a5a845ca7 100644 --- a/devtools/M4/UNIX/check.m4 +++ b/devtools/M4/UNIX/check.m4 @@ -11,6 +11,8 @@ divert(-1) # # $Id: check.m4,v 8.6 2013-11-22 20:51:22 ca Exp $ # +divert(0)dnl +divert(-1) define(`smcheck', `dnl ifelse(X`'$2, `X', `', `ifelse(index($2, `run'), `-1', `', `dnl bldLIST_PUSH_ITEM(`bldCHECK_TARGETS', $1)dnl diff --git a/devtools/M4/UNIX/sm-test.m4 b/devtools/M4/UNIX/sm-test.m4 index a71f8c96d307..69f8036e03ed 100644 --- a/devtools/M4/UNIX/sm-test.m4 +++ b/devtools/M4/UNIX/sm-test.m4 @@ -7,7 +7,7 @@ divert(-1) # forth in the LICENSE file which can be found at the top level of # the sendmail distribution. # -# Compile/run a test program for libsm. +# Compile/run a test program. # # $Id: sm-test.m4,v 1.8 2013-11-22 20:51:23 ca Exp $ # diff --git a/devtools/OS/Darwin.19.x b/devtools/OS/Darwin.19.x new file mode 100644 index 000000000000..db378d2c13fc --- /dev/null +++ b/devtools/OS/Darwin.19.x @@ -0,0 +1,23 @@ +dnl DO NOT EDIT THIS FILE. +dnl Place personal settings in devtools/Site/site.config.m4 + +# +define(`confCC', `cc -pipe ${Extra_CC_Flags}') +define(`confMAPDEF', `-DNEWDB -DNIS -DMAP_REGEX') +define(`confENVDEF', `-DDARWIN=190000 -DBIND_8_COMPAT -DNETINET6') +define(`confLDOPTS', `${Extra_LD_Flags}') +define(`confMTLDOPTS', `-lpthread') +define(`confMILTER_STATIC', `') +define(`confDEPEND_TYPE', `CC-M') +define(`confOPTIMIZE', `-O3') +define(`confRANLIBOPTS', `-c') +define(`confHFDIR', `/usr/share/sendmail') +define(`confINSTALL_RAWMAN') +define(`confMANOWN', `root') +define(`confMANGRP', `wheel') +define(`confUBINOWN', `root') +define(`confUBINGRP', `wheel') +define(`confSBINOWN', `root') +define(`confSBINGRP', `wheel') +define(`confLDOPTS_SO', `-dynamiclib -flat_namespace -undefined suppress -single_module') +define(`confSHAREDLIB_EXT', `.dylib') diff --git a/devtools/OS/Darwin.20.x b/devtools/OS/Darwin.20.x new file mode 100644 index 000000000000..032d10449fcf --- /dev/null +++ b/devtools/OS/Darwin.20.x @@ -0,0 +1,24 @@ +dnl DO NOT EDIT THIS FILE. +dnl Place personal settings in devtools/Site/site.config.m4 + +# +define(`confCC', `cc -pipe ${Extra_CC_Flags}') +define(`confMAPDEF', `-DNEWDB -DNIS -DMAP_REGEX') +define(`confENVDEF', `-DDARWIN=200000 -DBIND_8_COMPAT -DNETINET6') +define(`confLDOPTS', `${Extra_LD_Flags}') +define(`confMTLDOPTS', `-lpthread') +define(`confMILTER_STATIC', `') +define(`confDEPEND_TYPE', `CC-M') +define(`confOPTIMIZE', `-O3') +define(`confRANLIBOPTS', `-c') +define(`confHFDIR', `/usr/share/sendmail') +define(`confINSTALL_RAWMAN') +define(`confMANOWN', `root') +define(`confMANGRP', `wheel') +define(`confUBINOWN', `root') +define(`confUBINGRP', `wheel') +define(`confSBINOWN', `root') +define(`confSBINGRP', `wheel') +define(`confLDOPTS_SO', `-dynamiclib -flat_namespace -undefined suppress -single_module') +define(`confSHAREDLIB_EXT', `.dylib') +APPENDDEF(`conf_sendmail_LIBS', `-lresolv') diff --git a/devtools/Site/site.config.m4.sample b/devtools/Site/site.config.m4.sample index f1e0a56c26df..5cdf0efe027f 100644 --- a/devtools/Site/site.config.m4.sample +++ b/devtools/Site/site.config.m4.sample @@ -21,8 +21,7 @@ APPENDDEF(`confENVDEF', `-UNIS') dnl ##################################################################### dnl ### ### dnl ### The next group of statements illustrates how to add support ### -dnl ### for a particular map class. If you have not heard of this ### -dnl ### particular map type, then you probably don't need it. ### +dnl ### for a particular map class. dnl ### ### dnl ### Note that the map define goes in confMAPDEF, and that any ### dnl ### special library must be defined. Note, also that include ### @@ -32,11 +31,11 @@ dnl ### search. ### dnl ### ### dnl ##################################################################### -dnl ### Changes for PH_MAP support. -APPENDDEF(`confMAPDEF',`-DPH_MAP') -APPENDDEF(`confLIBS', `-lphclient') -APPENDDEF(`confINCDIRS', `-I/opt/nph/include') -APPENDDEF(`confLIBDIRS', `-L/opt/nph/lib') +dnl ### Changes for CDB support. +APPENDDEF(`confMAPDEF',`-DCDB') +APPENDDEF(`confLIBS', `-lcdb') +APPENDDEF(`confINCDIRS', `-I/usr/local/include') +APPENDDEF(`confLIBDIRS', `-L/usr/local/lib') dnl ##################################################################### dnl ### ### @@ -60,3 +59,14 @@ APPENDDEF(`confLIBS', `-lssl -lcrypto') APPENDDEF(`confLIBDIRS', `-L/usr/local/ssl/lib -R/usr/local/ssl/lib') APPENDDEF(`confINCDIRS', `-I/usr/local/ssl/include') +dnl ### Example for SMTPUTF8 support +dnl Note: the proper "International Components for Unicode" +dnl must be installed. It's available under different names, e.g., +dnl OpenBSD: icu4c +dnl FreeBSD, NetBSD, etc: icu +dnl Centos, Fedora, RHEL: libicu-devel +dnl Debian, Ubuntu: libicu-dev +APPENDDEF(`confENVDEF',`-DUSE_EAI') +APPENDDEF(`confLIBS', `-licuuc') +dnl APPENDDEF(`confLIBDIRS', `-L/usr/local/lib') +dnl APPENDDEF(`confINCDIRS', `-I/usr/local/include') diff --git a/doc/op/op.me b/doc/op/op.me index 4d7ead30d4bb..b5b3cbac9e62 100644 --- a/doc/op/op.me +++ b/doc/op/op.me @@ -92,7 +92,7 @@ Version \\$2 .. .rm Ve .sp -For Sendmail Version 8.16 +For Sendmail Version 8.17 .)l .(f Sendmail is a trademark of Proofpoint, Inc. @@ -1613,6 +1613,20 @@ hosts files dns will not avoid DNS lookups even if a host can be found in /etc/hosts. .pp +Note: in contrast to the +.i sendmail +stub implementation +some operating systems do not preserve temporary failures. +For example, if DNS returns a TRY_AGAIN status for this setup +.(b +hosts files dns myhostname +.)b +but myhostname does not find the requested entry, +then a permanent error is returned to +.i sendmail +which obviously can cause problems, +e.g., an immediate bounce instead of a deferral. +.pp Service switches are not completely integrated. For example, despite the fact that the host entry listed in the above example specifies to look in NIS, @@ -4255,6 +4269,43 @@ ruleset is called after the .sm "SMTP DATA" command, its parameter is the number of recipients. It can accept or reject the command. +.sh 4 "check_other" +.pp +The +.i check_other +ruleset is invoked for all unknown SMTP commands +and for commands which do not have specific rulesets, +e.g., NOOP and VERB. +Internal checks, e.g., those explained in +"Measures against Denial of Service Attacks", +are performed first. +The ruleset is passed +.(b +entire-SMTP-command $| SMTP-reply-first-digit +.)b +where +.b $| +is a metacharacter separating the two parts. +For example, +.(b +VERB $| 2 +.)b +reflects receiving the "VERB" SMTP command and the +intent to return a "2XX" SMTP success reply. +Alternatively, +.(b +JUNK TYPE=I $| 5 +.)b +reflects receiving the unknown "JUNK TYPE=I" SMTP command +and the intent to return a "5XX" SMTP failure reply. +If the ruleset returns the SMTP reply code 421: +.(b +$#error $@ 4.7.0 $: 421 bad command +.)b +the session is terminated. +Note: it is a bad idea to return the original command in the error text +to the client as that might be abused for certain attacks. +The ruleset cannot override a rejection triggered by the built-in rules. .sh 4 "check_compat" .pp The @@ -4359,6 +4410,30 @@ ruleset is passed the user name parameter of the .sm "SMTP VRFY" command. It can accept or reject the command. +.sh 4 "clt_features" +.pp +The +.i clt_features +ruleset is called with the server's host name +when sendmail connects to it. +This ruleset should return +.b $# +followed by a list of options +(single characters delimited by white space). +If the return value starts with anything else it is silently ignored. +Generally upper case characters turn off a feature +while lower case characters turn it on. +Options `D'/`M' cause the client to not use DANE/MTA-STS, +respectively, +which is useful to interact with MTAs/MUs that have broken +DANE/MTA-STS setups by simply not using it. +Note: +The +.i d +option in +.i tls_clt_features +to turn off DANE does not work when the server does not +even offer STARTTLS. .sh 4 "trust_auth" .pp The @@ -4404,11 +4479,11 @@ mailer, the connection is aborted .pp The .i tls_rcpt -ruleset is called each time before a RCPT TO command is sent. +ruleset is called each time before a RCPT command is sent. The parameter is the current recipient. If the ruleset does resolve to the .q error -mailer, the RCPT TO command is suppressed +mailer, the RCPT command is suppressed (treated as non-deliverable with a permanent or temporary error). This ruleset allows to require encryption or verification of the recipient's MTA even if the mail is somehow redirected @@ -4447,6 +4522,10 @@ passive attack (e.g., PLAIN, LOGIN), unless a security layer is active. Option `l' requires SMTP AUTH for a connection. Options 'B', 'D', 'E', and 'X' suppress SMTP VERB, DSN, ETRN, and EXPN, respectively. +If a client sends one of the (HTTP) commands GET, POST, CONNECT, or USER +the connection is immediately terminated in the following cases: +if sent as first command, if sent as first command after STARTTLS, +or if the 'h' option is set. .(b .ta 9n A Do not offer AUTH @@ -4460,6 +4539,7 @@ D Do not offer DSN d Offer DSN (default) E Do not offer ETRN e Offer ETRN (default) +h Terminate session after HTTP commands L Do not require AUTH (default) l Require AUTH P Do not offer PIPELINING @@ -4495,10 +4575,14 @@ by simply not using it. .pp The .i tls_clt_features -ruleset is called when sendmail connects to another MTA +ruleset is called right before sendmail issues the +.i STARTTLS +command to another MTA and the .i tls_srv_features -ruleset is called when a client connects to +ruleset is called when a client sends the +.i STARTTLS +command to .i sendmail . The arguments for the rulesets are the host name and IP address of the other side separated by @@ -5134,6 +5218,13 @@ The current delivery mode sendmail is using. It is initially set to the value of the .b DeliveryMode option. +.ip ${dsn_envid} +The envelope id parameter (ENVID=) passed to sendmail as part of the envelope. +.ip ${dsn_notify} +Value of DSN NOTIFY= parameter +(never, success, failure, delay, or empty string). +.ip ${dsn_ret} +Value of DSN RET= parameter (hdrs, full, or empty string). .ip ${envid} The envelope id parameter (ENVID=) passed to sendmail as part of the envelope. .ip ${hdrlen} @@ -5243,8 +5334,10 @@ Defined in the SMTP server only after a RCPT command. .ip ${server_addr} The address of the server of the current outgoing SMTP connection. For LMTP delivery the macro is set to the name of the mailer. +(only if sendmail is compiled with STARTTLS or SASL.) .ip ${server_name} The name of the server of the current outgoing SMTP or LMTP connection. +(only if sendmail is compiled with STARTTLS or SASL.) .ip ${time} The output of the .i time (3) @@ -5262,6 +5355,7 @@ only defined after STARTTLS has been used (or attempted). Possible values are: .(b .ta 13n +TRUSTED verification via DANE succeeded. OK verification succeeded. NO no cert presented. NOT no cert requested. @@ -5950,7 +6044,7 @@ This flag is ignored if the flag is set. .ip p Use the route-addr style reverse-path in the SMTP -.q "MAIL FROM:" +.sm "SMTP MAIL" command rather than just the return address; although this is required in RFC 821 section 3.1, @@ -6018,7 +6112,7 @@ i.e., must succeed. If not, the mail is bounced. See also the -.b MailBoxDatabase +.b MailboxDatabase option. This is required to get .q \&.forward @@ -6253,7 +6347,7 @@ is used when converting a message to MIME; this is the character set used in the Content-Type: header. If this is not set, the -.b DefaultCharset +.b DefaultCharSet option is used, and if that is not set, the value .q unknown-8bit @@ -6599,7 +6693,7 @@ STARTTLS is already encrypting the communication, because the existing encryption strength is taken into account when choosing an algorithm for the security layer. For example, if STARTTLS is used and the symmetric cipher is 3DES, -then the the keylength (in bits) is 168. +then the keylength (in bits) is 168. Hence setting .b AuthMaxBits to 168 will disable any encryption in SASL. @@ -6617,7 +6711,7 @@ List of options for SMTP AUTH consisting of single characters with intervening white space or commas. .(b .ta 4n -A Use the AUTH= parameter for the MAIL FROM +A Use the AUTH= parameter for the MAIL command only when authentication succeeded. This can be used as a workaround for broken MTAs that do not implement RFC 2554 correctly. @@ -6729,7 +6823,7 @@ File containing the private key belonging to the client certificate .i sendmail runs as client). .ip ClientPortOptions=\fIoptions\fP -[O] +[no short name] Set client SMTP options. The options are .i key=value @@ -7137,7 +7231,7 @@ When the system load average exceeds will sleep for one second on most SMTP commands and before accepting connections. .ip DeliverByMin=\fItime\fP -[0] +[no short name] Set minimum time for Deliver By SMTP Service Extension (RFC 2852). If 0, no time is listed, if less than 0, the extension is not offered, if greater than 0, it is listed as minimum time @@ -7191,7 +7285,7 @@ If not set, is either "CC f" if the option .b \-G is used or "c u" otherwise. -Note that only the the "CC", "c", "f", and "u" flags are checked. +Note that only the "CC", "c", "f", and "u" flags are checked. .ip DontBlameSendmail=\fIoption,option,...\fP [no short name] In order to avoid possible cracking attempts @@ -7450,6 +7544,12 @@ Set the name to be used for HELO/EHLO (instead of $j). [H] Specify the help file for SMTP. If no file name is specified, "helpfile" is used. +If the help file does not exist (cannot be opened for reading) +.i sendmail +will print a note including its version in response to a +.b HELP +command. +To avoid providing this information to a client specify an empty file. .ip HoldExpensive [c] If an outgoing mailer is marked as being expensive, @@ -7716,8 +7816,8 @@ after a certain event occurred. .ta \w'envfrom'u+3n connect After session connection start helo After EHLO/HELO command -envfrom After MAIL From command -envrcpt After RCPT To command +envfrom After MAIL command +envrcpt After RCPT command data After DATA command. eoh After DATA command and header eom After DATA command and terminating ``.'' @@ -8105,7 +8205,7 @@ it is enabled by default for Linux. According to some information this flag is not needed anymore for kernel 2.4.16 and newer. .ip RrtImpliesDsn -[R] +[no short name] If this option is set, a .q Return-Receipt-To: header causes the request of a DSN, which is sent to @@ -8361,6 +8461,8 @@ option. The message printed when the SMTP server starts up. Defaults to .q "$j Sendmail $v ready at $b". +.ip SMTPUTF8 +Enable runtime support for SMTPUTF8. .ip SoftBounce If set, issue temporary errors (4xy) instead of permanent errors (5xy). This can be useful during testing of a new configuration to avoid @@ -9188,7 +9290,7 @@ flag is used. Without it, the key is discarded or if .b \-s if used, it is substituted by the substring matches, delimited by .b $| -or the string specified with the the +or the string specified with the .b \-d option. The options available for the map are @@ -9575,7 +9677,7 @@ number to override the default LDAP port. LDAP service port. .ip "\-H \fILDAPURI\fP" Use the specified LDAP URI instead of specifying the hostname and port -separately with the the +separately with the .b \-h and .b \-p @@ -11184,6 +11286,61 @@ error conditions as required by the RFCs. Moreover, TLSA RRs are not looked up for some features, e.g., .i FallBackSmartHost . +.sh 2 "EAI" +.pp +Experimental support for SMTPUTF8 (EAI, see RFC 6530-6533) +is available when +the compile time option +.b USE_EAI, +(see also +.i devtools/Site/site.config.m4.sample +for other settings that might be needed), +and the cf option +.i SMTPUTF8 +are used. +This allows the use of UTF-8 for envelope addresses +as well as the entire message. +DNS lookups are done using the A-label format (Punycode) +as required by the RFCs. +For all other interactions with external programs and maps, +the actual value are used, +i.e., no conversions between UTF-8 and ASCII encodings are made. +This applies to +.\" how to make a list? +.\" .(l +the keys in map lookups, which might require to specify both versions in a map; +the data exchanged with a milter, i.e., each milter must be "8 bit clean"; +mail delivery agents which must be able to handle 8 bit addresses. +.\" .)l +Some values must be ASCII as those are used before SMTPUTF8 support +can be requested, e.g., +the macros +.b $j +and +.b $m. +Please test and provide feedback. +.sh 2 "MTA-STS" +.pp +Experimental support for SMTP MTA Strict Transport Security +(MTA-STS, see RFC 8461) +is available when using +the compile time option _FFR_MTA_STS +(as well as some others, e.g., _FFR_TLS_ALTNAMES and obviously STARTTLS), +.\"(which requires in a default setting +.\"MAP_REGEX, SOCKETMAP, _FFR_TLS_ALTNAMES, and obviously STARTTLS), +FEATURE(sts) +(which implicitly sets the cf option StrictTransportSecurity), +and +postfix-mta-sts-resolver +(see https://github.com/Snawoot/postfix-mta-sts-resolver.git). +.pp +Note: this implementation uses a socket map to communicate with +postfix-mta-sts-resolver +and handles only the values returned by that program, +which might not fully implement MTA-STS. +.pp +If both DANE and MTA-STS are enabled and available for the receiving domain, +DANE is used because it offers a much higher level of security. .sh 1 "ACKNOWLEDGEMENTS" .pp I've worked on @@ -11517,6 +11674,19 @@ The line will be deleted before sending. Any addresses in the argument vector will be deleted from the send list. +.ip \-U +This option is required when sending mail using UTF-8; +it sets the +.q SMTPUTF8 +argument for +.q MAIL +command. +Only available if +.q EAI +support is enabled, +and the +.q SMTPUTF8 +option is set. .ip "\-V envid" The indicated .i envid @@ -11641,7 +11811,8 @@ file to and send it again. .pp The queue control file is structured as a series of lines -each beginning with a code letter. +each beginning with a code letter; +the file must end with a line containing only a single dot. The lines are as follows: .ip V The version number of the queue file format, @@ -11650,10 +11821,10 @@ used to allow new binaries to read queue files created by older versions. Defaults to version zero. Must be the first line of the file if present. -For 8.12 the version number is 6. +For 8.13 and later the version number is 8. .ip A The information given by the AUTH= parameter of the -.q "MAIL FROM:" +.sm "SMTP MAIL" command or $f@$j if sendmail has been called directly. .ip H @@ -11809,6 +11980,9 @@ H?x?Full-name: Eric Allman H??Message-id: <9207170931.AA22757@foo.bar.baz.de> H??To: sendmail@vangogh.CS.Berkeley.EDU H??Subject: this is an example message +.cc ' +. +'cc .)b This shows the person who sent the message, diff --git a/doc/op/op.ps b/doc/op/op.ps index 6e0e2cba8e66..862a96cbcb75 100644 --- a/doc/op/op.ps +++ b/doc/op/op.ps @@ -1,11 +1,11 @@ %!PS-Adobe-3.0 -%%Creator: groff version 1.19.2 -%%CreationDate: Wed Jul 1 22:01:42 2020 +%%Creator: groff version 1.22.4 +%%CreationDate: Sun Aug 15 21:55:37 2021 %%DocumentNeededResources: font Times-Bold %%+ font Times-Roman %%+ font Times-Italic %%+ font Symbol -%%DocumentSuppliedResources: procset grops 1.19 2 +%%DocumentSuppliedResources: procset grops 1.22 4 %%Pages: 114 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () @@ -15,7 +15,8 @@ %%PageMedia: Default %%EndDefaults %%BeginProlog -%%BeginResource: procset grops 1.19 2 +%%BeginResource: procset grops 1.22 4 +%!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop currentpacking @@ -72,6 +73,7 @@ exch pop add exch pop /level0 save def 1 setlinecap 1 setlinejoin +DEFS/BPhook known{DEFS begin BPhook end}if 72 RES div dup scale LS{ 90 rotate @@ -137,7 +139,10 @@ pop findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { -1 index/FID ne{def}{pop pop}ifelse +1 index/FID ne +2 index/UniqueID ne +and +{def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def @@ -175,8 +180,10 @@ newpath userdict begin /showpage{}def /setpagedevice{}def +mark }bind def /PEND{ +cleartomark countdictstack CNT sub{end}repeat level1 restore }bind def @@ -186,6 +193,8 @@ pop setpacking }if %%EndResource +%%EndProlog +%%BeginSetup %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature @@ -223,7 +232,7 @@ def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def /Times-Italic@0 ENC0/Times-Italic RE/Times-Roman@0 ENC0/Times-Roman RE /Times-Bold@0 ENC0/Times-Bold RE -%%EndProlog +%%EndSetup %%Page: 1 1 %%BeginPageSetup BP @@ -233,7 +242,7 @@ BP (TION AND OPERA)-1.14 E(TION GUIDE)-1.14 E/F3 10/Times-Roman@0 SF (Eric Allman)263.42 196.2 Q(Claus Assmann)256.75 208.2 Q(Gre)244.75 220.2 Q(gory Neil Shapiro)-.15 E(Proofpoint, Inc.)256.475 232.2 Q -.15 -(Fo)234.465 268.2 S 2.5(rS).15 G(endmail V)-2.5 E(ersion 8.16)-1.11 E/F4 +(Fo)234.465 268.2 S 2.5(rS).15 G(endmail V)-2.5 E(ersion 8.17)-1.11 E/F4 10/Times-Italic@0 SF(Sendmail)97 312.6 Q/F5 8/Times-Roman@0 SF(TM)-5 I F3 .1(implements a general purpose internetw)2.6 5 N .1 (ork mail routing f)-.1 F .1(acility under the UNIX\256 oper)-.1 F(-)-.2 @@ -276,17 +285,17 @@ on for Authentication\), RFC 2821 \(Simple Mail T)72 525 R .118 (ransfer Protocol\), RFC 2822)-.35 F .904(\(Internet Message F)72 537 R .903(ormat\), RFC 2852 \(Deli)-.15 F -.15(ve)-.25 G 3.403(rB).15 G 3.403 (yS)-3.403 G .903(MTP Service Extension\), RFC 2920 \(SMTP Service) --3.403 F 2.201(Extension for Command Pipelining\), and RFC 7505 \(A "Nu\ -ll MX" No Service Resource Record for)72 549 R .678 -(Domains That Accept No Mail\).)72 561 R(Ho)5.678 E(we)-.25 E -.15(ve) --.25 G 1.478 -.4(r, s).15 H(ince).4 E F4(sendmail)3.178 E F3 .678 -(is designed to w)3.178 F .677(ork in a wider w)-.1 F .677(orld, in man) --.1 F(y)-.15 E(cases it can be con\214gured to e)72 573 Q +-3.403 F .851(Extension for Command Pipelining\), and RFC 7505 \(A "Nul\ +l MX" No Service Resource Record for Do-)72 549 R .008 +(mains That Accept No Mail\).)72 561 R(Ho)5.008 E(we)-.25 E -.15(ve)-.25 +G .808 -.4(r, s).15 H(ince).4 E F4(sendmail)2.508 E F3 .008 +(is designed to w)2.508 F .008(ork in a wider w)-.1 F .007(orld, in man) +-.1 F 2.507(yc)-.15 G(ases)-2.507 E(it can be con\214gured to e)72 573 Q (xceed these protocols.)-.15 E(These cases are described herein.)5 E (Although)97 589.2 Q F4(sendmail)3.547 E F3 1.048(is intended to run wi\ -thout the need for monitoring, it has a number of features)3.547 F 1.972 +thout the need for monitoring, it has a number of features)3.547 F .895 (that may be used to monitor or adjust the operation under unusual circ\ -umstances.)72 601.2 R 1.972(These features are)6.972 F(described.)72 +umstances.)72 601.2 R .894(These features are de-)5.894 F(scribed.)72 613.2 Q .816(Section one describes ho)97 629.4 R 3.316(wt)-.25 G 3.316 (od)-3.316 G 3.316(oab)-3.316 G(asic)-3.316 E F4(sendmail)3.316 E F3 3.317(installation. Section)3.317 F(tw)3.317 E 3.317(oe)-.1 G .817 @@ -393,27 +402,28 @@ F2(en)2.5 E(var)-.4 E F1(=)A F2(value)A F1(Set an en)153 498 Q (vironment v)-.4 E(ariable to an indicated)-.25 E F2(value)2.5 E F1 (before compiling.)2.5 E 23.42(\255c Create)117 514.2 R 2.5(an)2.5 G -.25(ew)-2.5 G F2(obj.*)2.75 E F1(tree before running.)5 E117 -530.4 Q F2(sitecon\214g)2.5 E F1 2.192 -(Read the indicated site con\214guration \214le.)153 542.4 R 2.193 -(If this parameter is not speci\214ed,)7.192 F F2(Build)4.693 E F1 -(includes)153 554.4 Q F2(all)11.512 E F1 9.012(of the \214les)11.512 F -F2($B)11.511 E(UILDT)-.1 E(OOLS/Site/site)-.18 E(.$oscf)-.15 E(.m4)-.15 -E F1(and)11.511 E F2($B)11.511 E(UILD-)-.1 E -.18(TO)153 566.4 S -(OLS/Site/site).18 E(.con\214g)-.15 E(.m4)-.15 E F1 2.985(,w)C .485 +530.4 Q F2(sitecon\214g)2.5 E F1 .977 +(Read the indicated site con\214guration \214le.)153 542.4 R .977 +(If this parameter is not speci\214ed,)5.977 F F2(Build)3.477 E F1(in-) +3.477 E(cludes)153 554.4 Q F2(all)12.623 E F1 10.123(of the \214les) +12.623 F F2($B)12.623 E(UILDT)-.1 E(OOLS/Site/site)-.18 E(.$oscf)-.15 E +(.m4)-.15 E F1(and)12.623 E F2($B)12.622 E(UILD-)-.1 E -.18(TO)153 566.4 +S(OLS/Site/site).18 E(.con\214g)-.15 E(.m4)-.15 E F1 2.985(,w)C .485 (here $B)-2.985 F(UILDT)-.1 E .485(OOLS is normally)-.18 F F2(../de) 2.985 E(vtools)-.15 E F1 .485(and $oscf is)2.985 F .678 (the same name as used on the)153 578.4 R F2(obj.*)3.178 E F1(directory) 5.678 E 5.678(.S)-.65 G .678(ee belo)-5.678 F 3.178(wf)-.25 G .678 (or a description of the site)-3.178 F(con\214guration \214le.)153 590.4 -Q 22.3(\255S Skip)117 606.6 R(auto-con\214guration.)4.42 E F2(Build) -6.921 E F1 1.921(will a)4.421 F -.2(vo)-.2 G 1.921 -(id auto-detecting libraries if this is set.).2 F(All)6.921 E(libraries\ - and map de\214nitions must be speci\214ed in the site con\214guration \ -\214le.)153 618.6 Q 5.607(Most other parameters are passed to the)117 -634.8 R F2(mak)8.107 E(e)-.1 E F1 5.606(program; for details see)8.107 F -F2($B)8.106 E(UILD-)-.1 E -.18(TO)117 646.8 S(OLS/README).18 E F1(.)A F0 -2.5(1.1.2. Cr)102 670.8 R(eating a Site Con\214guration File)-.18 E F1 -4.321(See sendmail/README for v)142 687 R 4.322 +Q 22.3(\255S Skip)117 606.6 R(auto-con\214guration.)3.311 E F2(Build) +5.811 E F1 .811(will a)3.311 F -.2(vo)-.2 G .812 +(id auto-detecting libraries if this is set.).2 F .812(All li-)5.812 F(\ +braries and map de\214nitions must be speci\214ed in the site con\214gu\ +ration \214le.)153 618.6 Q 5.607 +(Most other parameters are passed to the)117 634.8 R F2(mak)8.107 E(e) +-.1 E F1 5.606(program; for details see)8.107 F F2($B)8.106 E(UILD-)-.1 +E -.18(TO)117 646.8 S(OLS/README).18 E F1(.)A F0 2.5(1.1.2. Cr)102 670.8 +R(eating a Site Con\214guration File)-.18 E F1 4.321 +(See sendmail/README for v)142 687 R 4.322 (arious compilation \215ags that can be set, and de)-.25 F(v-)-.25 E (tools/README for details ho)117 699 Q 2.5(wt)-.25 G 2.5(os)-2.5 G (et them.)-2.5 E 0 Cg EP @@ -424,9 +434,9 @@ BP /F0 10/Times-Bold@0 SF 198.36(SMM:08-8 Sendmail)72 60 R (Installation and Operation Guide)2.5 E 2.5(1.1.3. T)102 96 R (weaking the Mak)-.74 E(e\214le)-.1 E/F1 10/Times-Italic@0 SF(Sendmail) -142 112.2 Q/F2 10/Times-Roman@0 SF 2.181(supports tw)4.681 F 4.681(od) --.1 G(if)-4.681 E 2.181(ferent formats for the local \(on disk\) v)-.25 -F 2.18(ersion of databases,)-.15 F(notably the)117 124.2 Q F1(aliases) +142 112.2 Q/F2 10/Times-Roman@0 SF .796(supports tw)3.296 F 3.296(od)-.1 +G(if)-3.296 E .795(ferent formats for the local \(on disk\) v)-.25 F +.795(ersion of databases, no-)-.15 F(tably the)117 124.2 Q F1(aliases) 2.5 E F2 2.5(database. At)2.5 F (least one of these should be de\214ned if at all possible.)2.5 E 48.94 (CDB Constant)117 140.4 R(DataBase \(tin)2.5 E(ycdb\).)-.15 E 39.5 @@ -440,32 +450,31 @@ F 2.18(ersion of databases,)-.15 F(notably the)117 124.2 Q F1(aliases) 32.84(NEWDB The)117 196.8 R(Berk)3.787 E(ele)-.1 E 3.787(yD)-.15 G 3.787 (Bp)-3.787 G 3.787(ackage. If)-3.787 F 1.288(you ha)3.788 F 1.588 -.15 (ve t)-.2 H 1.288(his, use it.).15 F 1.288(It allo)6.288 F 1.288 -(ws long records,)-.25 F 2.56 +(ws long records,)-.25 F .939 (multiple open databases, real in-memory caching, and so forth.)189 -208.8 R -1.1(Yo)7.56 G 5.06(uc)1.1 G(an)-5.06 E .468 -(de\214ne this in conjunction with)189 220.8 R/F3 9/Times-Roman@0 SF -(NDBM)2.968 E F2 2.968(;i)C 2.968(fy)-2.968 G .469 -(ou do, old alias databases are read,)-2.968 F -.2(bu)189 232.8 S 3.108 -(tw).2 G .608(hen a ne)-3.108 F 3.108(wd)-.25 G .608 -(atabase is created it will be in NEWDB format.)-3.108 F .608 -(As a nasty)5.608 F 1.803(hack, if you ha)189 244.8 R 2.104 -.15(ve N) --.2 H 1.804(EWDB, NDBM, and NIS de\214ned, and if the alias \214le).15 F -.124(name includes the substring \231/yp/\232,)189 256.8 R F1(sendmail) -2.623 E F2 .123(will create both ne)2.623 F 2.623(wa)-.25 G .123 -(nd old v)-2.623 F(er)-.15 E(-)-.2 E 1.08 -(sions of the alias \214le during a)189 268.8 R F1(ne)3.58 E(walias)-.15 -E F2 3.58(command. This)3.58 F 1.08(is required because)3.58 F .845 -(the Sun NIS/YP system reads the DBM v)189 280.8 R .845 -(ersion of the alias \214le.)-.15 F(It')5.845 E 3.345(su)-.55 G .845 -(gly as)-3.345 F(sin, b)189 292.8 Q(ut it w)-.2 E(orks.)-.1 E 1.112 -(If neither of these are de\214ned,)117 309 R F1(sendmail)3.612 E F2 -1.112(reads the alias \214le into memory on e)3.612 F -.15(ve)-.25 G -1.112(ry in).15 F -.2(vo)-.4 G(cation.).2 E 1.043(This can be slo)117 -321 R 3.543(wa)-.25 G 1.043(nd should be a)-3.543 F -.2(vo)-.2 G 3.543 -(ided. There).2 F 1.043(are also se)3.543 F -.15(ve)-.25 G 1.042 -(ral methods for remote database).15 F(access:)117 333 Q(LD)117 349.2 Q -43.79(AP Lightweight)-.4 F(Directory Access Protocol.)2.5 E 53.39 -(NIS Sun')117 365.4 R 2.5(sN)-.55 G(etw)-2.5 E +208.8 R -1.1(Yo)5.939 G 3.439(uc)1.1 G .939(an de-)-3.439 F .032 +(\214ne this in conjunction with)189 220.8 R/F3 9/Times-Roman@0 SF(NDBM) +2.532 E F2 2.532(;i)C 2.532(fy)-2.532 G .032 +(ou do, old alias databases are read, b)-2.532 F(ut)-.2 E .022 +(when a ne)189 232.8 R 2.522(wd)-.25 G .021 +(atabase is created it will be in NEWDB format.)-2.522 F .021 +(As a nasty hack,)5.021 F .682(if you ha)189 244.8 R .983 -.15(ve N)-.2 +H .683(EWDB, NDBM, and NIS de\214ned, and if the alias \214le name in-) +.15 F .43(cludes the substring \231/yp/\232,)189 256.8 R F1(sendmail) +2.93 E F2 .43(will create both ne)2.93 F 2.93(wa)-.25 G .43(nd old v) +-2.93 F .43(ersions of)-.15 F 1.172(the alias \214le during a)189 268.8 +R F1(ne)3.672 E(walias)-.15 E F2 3.673(command. This)3.672 F 1.173 +(is required because the Sun)3.673 F .32(NIS/YP system reads the DBM v) +189 280.8 R .32(ersion of the alias \214le.)-.15 F(It')5.32 E 2.82(su) +-.55 G .32(gly as sin, b)-2.82 F .32(ut it)-.2 F -.1(wo)189 292.8 S +(rks.).1 E 1.112(If neither of these are de\214ned,)117 309 R F1 +(sendmail)3.612 E F2 1.112(reads the alias \214le into memory on e)3.612 +F -.15(ve)-.25 G 1.112(ry in).15 F -.2(vo)-.4 G(cation.).2 E .059 +(This can be slo)117 321 R 2.558(wa)-.25 G .058(nd should be a)-2.558 F +-.2(vo)-.2 G 2.558(ided. There).2 F .058(are also se)2.558 F -.15(ve) +-.25 G .058(ral methods for remote database ac-).15 F(cess:)117 333 Q +(LD)117 349.2 Q 43.79(AP Lightweight)-.4 F(Directory Access Protocol.) +2.5 E 53.39(NIS Sun')117 365.4 R 2.5(sN)-.55 G(etw)-2.5 E (ork Information Services \(formerly YP\).)-.1 E 28.94(NISPLUS Sun')117 381.6 R 2.5(sN)-.55 G(IS+ services.)-2.5 E 26.73(NETINFO NeXT')117 397.8 R 2.5(sN)-.55 G(etInfo service.)-2.5 E 32.84(HESIOD Hesiod)117 414 R @@ -494,14 +503,14 @@ stall the binary in /usr/sbin and create links from /usr/bin/ne)117 (ant to use the old method, you can specify it as tar)-.1 E(get:)-.18 E (./Build install-set-user)157 627.6 Q(-id)-.2 E F0 2.5 (1.2. Con\214guration)87 655.8 R(Files)2.5 E F1(Sendmail)127 672 Q F2 -2.079(cannot operate without a con\214guration \214le.)4.58 F 2.079 -(The con\214guration de\214nes the mail)7.079 F(deli)102 684 Q -.15(ve) --.25 G .888(ry mechanisms understood at this site, ho).15 F 3.389(wt) --.25 G 3.389(oa)-3.389 G .889(ccess them, ho)-3.389 F 3.389(wt)-.25 G -3.389(of)-3.389 G(orw)-3.389 E .889(ard email to remote)-.1 F .088 -(mail systems, and a number of tuning parameters.)102 696 R .088 -(This con\214guration \214le is detailed in the later por)5.088 F(-)-.2 -E(tion of this document.)102 708 Q 0 Cg EP +.634(cannot operate without a con\214guration \214le.)3.134 F .633 +(The con\214guration de\214nes the mail de-)5.633 F(li)102 684 Q -.15 +(ve)-.25 G .155(ry mechanisms understood at this site, ho).15 F 2.656 +(wt)-.25 G 2.656(oa)-2.656 G .156(ccess them, ho)-2.656 F 2.656(wt)-.25 +G 2.656(of)-2.656 G(orw)-2.656 E .156(ard email to remote mail)-.1 F +.618(systems, and a number of tuning parameters.)102 696 R .617 +(This con\214guration \214le is detailed in the later portion)5.617 F +(of this document.)102 708 Q 0 Cg EP %%Page: 9 5 %%BeginPageSetup BP @@ -560,11 +569,11 @@ Q(ving them here is to mak)-.2 E 2.5(ei)-.1 G 2.5(tc)-2.5 G (This can be thought of as a \231#include\232 directory)5 E(.)-.65 E 43.95(mailer De\214nitions)102 413.4 R .152 (of mailers, referenced using the)2.653 F F3(MAILER)2.652 E F0(m4)2.652 -E F1 2.652(macro. The)2.652 F .152(mailer types)2.652 F 1.786 -(that are kno)174 425.4 R 1.787(wn in this distrib)-.25 F 1.787 -(ution are f)-.2 F 1.787(ax, local, smtp, uucp, and usenet.)-.1 F -.15 -(Fo)6.787 G(r).15 E -.15(ex)174 437.4 S(ample, to include support for t\ -he UUCP-based mailers, use \231MAILER\(uucp\)\232.).15 E 43.39 +E F1 2.652(macro. The)2.652 F .152(mailer types)2.652 F .579 +(that are kno)174 425.4 R .579(wn in this distrib)-.25 F .579 +(ution are f)-.2 F .579(ax, local, smtp, uucp, and usenet.)-.1 F -.15 +(Fo)5.58 G 3.08(re).15 G(x-)-3.23 E(ample, to include support for the U\ +UCP-based mailers, use \231MAILER\(uucp\)\232.)174 437.4 Q 43.39 (ostype De\214nitions)102 453.6 R 1.157(describing v)3.657 F 1.157 (arious operating system en)-.25 F 1.156(vironments \(such as the loca-) -.4 F(tion of support \214les\).)174 465.6 Q @@ -590,305 +599,315 @@ F .05(ant enabled site-)-.1 F .915(wide: for e)102 562.2 R .915 (ele)-.1 E 2.819 -.65(y, a)-.15 H 1.519 (nd should be fully-quali\214ed internet-style domain names.).65 F 1.519 (Please check to)6.519 F(mak)102 586.2 Q 2.5(ec)-.1 G(ertain the)-2.5 E -2.5(ya)-.15 G(re reasonable for your domain.)-2.5 E 1.406 -(Subdomains at Berk)127 602.4 R(ele)-.1 E 3.906(ya)-.15 G 1.407 -(re also represented in the cf/domain directory)-3.906 F 6.407(.F)-.65 G -1.407(or e)-6.557 F 1.407(xample, the)-.15 F .356(domain CS.Berk)102 -614.4 R(ele)-.1 E -.65(y.)-.15 G .356 +2.5(ya)-.15 G(re reasonable for your domain.)-2.5 E .08 +(Subdomains at Berk)127 602.4 R(ele)-.1 E 2.58(ya)-.15 G .081 +(re also represented in the cf/domain directory)-2.58 F 5.081(.F)-.65 G +.081(or e)-5.231 F .081(xample, the do-)-.15 F .523(main CS.Berk)102 +614.4 R(ele)-.1 E -.65(y.)-.15 G .523 (EDU is the Computer Science subdomain, EECS.Berk).65 F(ele)-.1 E -.65 -(y.)-.15 G .356(EDU is the Electri-).65 F 1.278 -(cal Engineering and Computer Sciences subdomain, and S2K.Berk)102 626.4 -R(ele)-.1 E -.65(y.)-.15 G 1.278(EDU is the Sequoia 2000).65 F 4.004 -(subdomain. Y)102 638.4 R 1.504(ou will probably ha)-1.1 F 1.804 -.15 -(ve t)-.2 H 4.004(oa).15 G 1.504 -(dd an entry to this directory to be appropriate for your)-4.004 F -(domain.)102 650.4 Q -1.1(Yo)127 666.6 S 4.372(uw)1.1 G 1.872(ill ha) --4.372 F 2.172 -.15(ve t)-.2 H 4.372(ou).15 G 1.872(se or create)-4.372 -F F0(.mc)4.372 E F1 1.872(\214les in the)4.372 F F2(cf/cf)4.372 E F1 -1.873(subdirectory for your hosts.)4.373 F 1.873(This is)6.873 F -(detailed in the cf/README \214le.)102 678.6 Q 0 Cg EP +(y.)-.15 G .523(EDU is the Electrical).65 F .772 +(Engineering and Computer Sciences subdomain, and S2K.Berk)102 626.4 R +(ele)-.1 E -.65(y.)-.15 G .773(EDU is the Sequoia 2000 sub-).65 F 2.5 +(domain. Y)102 638.4 R(ou will probably ha)-1.1 E .3 -.15(ve t)-.2 H 2.5 +(oa).15 G +(dd an entry to this directory to be appropriate for your domain.)-2.5 E +-1.1(Yo)127 654.6 S 3.42(uw)1.1 G .92(ill ha)-3.42 F 1.22 -.15(ve t)-.2 +H 3.42(ou).15 G .92(se or create)-3.42 F F0(.mc)3.42 E F1 .92 +(\214les in the)3.42 F F2(cf/cf)3.42 E F1 .92 +(subdirectory for your hosts.)3.42 F .92(This is de-)5.92 F +(tailed in the cf/README \214le.)102 666.6 Q F0 2.5(1.3. Details)87 +690.6 R(of Installation Files)2.5 E F1 +(This subsection describes the \214les that comprise the)127 706.8 Q F2 +(sendmail)2.5 E F1(installation.)2.5 E 0 Cg EP %%Page: 10 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-10 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E 2.5(1.3. Details)87 96 R -(of Installation Files)2.5 E/F1 10/Times-Roman@0 SF -(This subsection describes the \214les that comprise the)127 112.2 Q/F2 -10/Times-Italic@0 SF(sendmail)2.5 E F1(installation.)2.5 E F0 2.5 -(1.3.1. /usr/sbin/sendmail)102 136.2 R F1 1.831(The binary for)142 154.4 -R F2(sendmail)4.331 E F1 1.831(is located in /usr/sbin)4.331 F/F3 7 -/Times-Roman@0 SF(1)-4 I F1 6.832(.I)4 K 4.332(ts)-6.832 G 1.832 -(hould be set-group-ID smmsp as)-4.332 F .645 -(described in sendmail/SECURITY)117 166.4 R 5.644(.F)-1.29 G .644 -(or security reasons, /, /usr)-5.794 F 3.144(,a)-.4 G .644 -(nd /usr/sbin should be o)-3.144 F(wned)-.25 E(by root, mode 0755)117 -180.4 Q F3(2)-4 I F1(.)4 I F0 2.5(1.3.2. /etc/mail/sendmail.cf)102 204.4 -R F1 .889(This is the main con\214guration \214le for)142 222.6 R F2 -(sendmail)3.389 E F3(3)-4 I F1 5.889(.T)4 K .89(his is one of the tw) --5.889 F 3.39(on)-.1 G .89(on-library \214le)-3.39 F -(names compiled into)117 236.6 Q F2(sendmail)2.5 E F3(4)-4 I F1 2.5(,t)4 +(Installation and Operation Guide)2.5 E 2.5(1.3.1. /usr/sbin/sendmail) +102 96 R/F1 10/Times-Roman@0 SF .61(The binary for)142 114.2 R/F2 10 +/Times-Italic@0 SF(sendmail)3.11 E F1 .61(is located in /usr/sbin)3.11 F +/F3 7/Times-Roman@0 SF(1)-4 I F1 5.61(.I)4 K 3.11(ts)-5.61 G .61 +(hould be set-group-ID smmsp as de-)-3.11 F .359 +(scribed in sendmail/SECURITY)117 126.2 R 5.359(.F)-1.29 G .359 +(or security reasons, /, /usr)-5.509 F 2.859(,a)-.4 G .359 +(nd /usr/sbin should be o)-2.859 F .36(wned by)-.25 F(root, mode 0755) +117 140.2 Q F3(2)-4 I F1(.)4 I F0 2.5(1.3.2. /etc/mail/sendmail.cf)102 +164.2 R F1 .89(This is the main con\214guration \214le for)142 182.4 R +F2(sendmail)3.389 E F3(3)-4 I F1 5.889(.T)4 K .889(his is one of the tw) +-5.889 F 3.389(on)-.1 G .889(on-library \214le)-3.389 F +(names compiled into)117 196.4 Q F2(sendmail)2.5 E F3(4)-4 I F1 2.5(,t)4 K(he other is /etc/mail/submit.cf.)-2.5 E .721 (The con\214guration \214le is normally created using the distrib)142 -252.8 R .721(ution \214les described abo)-.2 F -.15(ve)-.15 G 5.721(.I) -.15 G(f)-5.721 E .64(you ha)117 264.8 R .94 -.15(ve a p)-.2 H .64(artic\ -ularly unusual system con\214guration you may need to create a special \ -v).15 F(ersion.)-.15 E(The format of this \214le is detailed in later s\ -ections of this document.)117 276.8 Q F0 2.5(1.3.3. /etc/mail/submit.cf) -102 300.8 R F1 .91(This is the con\214guration \214le for)142 317 R F2 -(sendmail)3.411 E F1 .911 -(when it is used for initial mail submission, in)3.411 F 1.005 -(which case it is also called `)117 329 R 1.004 -(`Mail Submission Program')-.74 F 3.504('\()-.74 G 1.004 -(MSP\) in contrast to `)-3.504 F 1.004(`Mail T)-.74 F(ransfer)-.35 E -(Agent')117 341 Q 3.87('\()-.74 G(MT)-3.87 E 3.87(A\). Starting)-.93 F +212.6 R .721(ution \214les described abo)-.2 F -.15(ve)-.15 G 5.72(.I) +.15 G(f)-5.72 E .64(you ha)117 224.6 R .94 -.15(ve a p)-.2 H .64(articu\ +larly unusual system con\214guration you may need to create a special v) +.15 F(ersion.)-.15 E(The format of this \214le is detailed in later sec\ +tions of this document.)117 236.6 Q F0 2.5(1.3.3. /etc/mail/submit.cf) +102 260.6 R F1 .911(This is the con\214guration \214le for)142 276.8 R +F2(sendmail)3.411 E F1 .91 +(when it is used for initial mail submission, in)3.411 F 1.004 +(which case it is also called `)117 288.8 R 1.004 +(`Mail Submission Program')-.74 F 3.504('\()-.74 G 1.005 +(MSP\) in contrast to `)-3.504 F 1.005(`Mail T)-.74 F(ransfer)-.35 E +(Agent')117 300.8 Q 3.87('\()-.74 G(MT)-3.87 E 3.87(A\). Starting)-.93 F 1.37(with v)3.87 F 1.37(ersion 8.12,)-.15 F F2(sendmail)3.87 E F1 1.37 (uses one of tw)3.87 F 3.87(od)-.1 G(if)-3.87 E 1.37 -(ferent con\214guration)-.25 F .052 -(\214les based on its operation mode \(or the ne)117 353 R(w)-.25 E F0 -2.552 E F1 2.552(option\). F)2.552 F .051 -(or initial mail submission, i.e., if one)-.15 F .951(of the options)117 -365 R F0(\255bm)3.451 E F1(\(def)3.451 E(ault\),)-.1 E F0(\255bs)3.451 E -F1 3.451(,o)C(r)-3.451 E F03.451 E F1 .951 -(is speci\214ed, submit.cf is used \(if a)3.451 F -.25(va)-.2 G .952 -(ilable\), for other).25 F 2.28(operations sendmail.cf is used.)117 377 -R 2.28(Details can be found in)7.28 F F2(sendmail/SECURITY)4.78 E F1 -7.28(.s)C 2.28(ubmit.cf is)-7.28 F .014 -(shipped with sendmail \(in cf/cf/\) and is installed by def)117 389 R +(ferent con\214guration)-.25 F .051 +(\214les based on its operation mode \(or the ne)117 312.8 R(w)-.25 E F0 +2.552 E F1 2.552(option\). F)2.552 F .052 +(or initial mail submission, i.e., if one)-.15 F .952(of the options)117 +324.8 R F0(\255bm)3.452 E F1(\(def)3.452 E(ault\),)-.1 E F0(\255bs)3.451 +E F1 3.451(,o)C(r)-3.451 E F03.451 E F1 .951 +(is speci\214ed, submit.cf is used \(if a)3.451 F -.25(va)-.2 G .951 +(ilable\), for other).25 F 2.28(operations sendmail.cf is used.)117 +336.8 R 2.28(Details can be found in)7.28 F F2(sendmail/SECURITY)4.78 E +F1 7.28(.s)C 2.28(ubmit.cf is)-7.28 F .014 +(shipped with sendmail \(in cf/cf/\) and is installed by def)117 348.8 R 2.514(ault. If)-.1 F .014(changes to the con\214guration need)2.514 F -(to be made, start with cf/cf/submit.mc and follo)117 401 Q 2.5(wt)-.25 -G(he instruction in cf/README.)-2.5 E F0 2.5(1.3.4. /usr/bin/newaliases) -102 425 R F1(The)142 441.2 Q F2(ne)2.5 E(waliases)-.15 E F1 -(command should just be a link to)2.5 E F2(sendmail)2.5 E F1(:)A -(rm \255f /usr/bin/ne)157 457.4 Q -.1(wa)-.25 G(liases).1 E -(ln \255s /usr/sbin/sendmail /usr/bin/ne)157 469.4 Q -.1(wa)-.25 G -(liases).1 E(This can be installed in whate)117 485.6 Q -.15(ve)-.25 G +(to be made, start with cf/cf/submit.mc and follo)117 360.8 Q 2.5(wt) +-.25 G(he instruction in cf/README.)-2.5 E F0 2.5 +(1.3.4. /usr/bin/newaliases)102 384.8 R F1(The)142 401 Q F2(ne)2.5 E +(waliases)-.15 E F1(command should just be a link to)2.5 E F2(sendmail) +2.5 E F1(:)A(rm \255f /usr/bin/ne)157 417.2 Q -.1(wa)-.25 G(liases).1 E +(ln \255s /usr/sbin/sendmail /usr/bin/ne)157 429.2 Q -.1(wa)-.25 G +(liases).1 E(This can be installed in whate)117 445.4 Q -.15(ve)-.25 G 2.5(rs).15 G(earch path you prefer for your system.)-2.5 E F0 2.5 -(1.3.5. /usr/bin/hoststat)102 509.6 R F1(The)142 525.8 Q F2(hoststat) -5.845 E F1 3.344(command should just be a link to)5.845 F F2(sendmail) -5.844 E F1 5.844(,i)C 5.844(naf)-5.844 G 3.344(ashion similar to)-5.944 -F F2(ne)117 537.8 Q(waliases)-.15 E F1 6.443(.T)C 1.444(his command lis\ -ts the status of the last mail transaction with all remote hosts.)-6.443 -F(The)117 549.8 Q F03.857 E F1 1.357(\215ag will pre)3.857 F -.15 -(ve)-.25 G 1.357(nt the status display from being truncated.).15 F 1.356 -(It functions only when the)6.356 F F0(HostStatusDir)117 561.8 Q(ectory) --.18 E F1(option is set.)2.5 E .32 LW 76 580.4 72 580.4 DL 80 580.4 76 -580.4 DL 84 580.4 80 580.4 DL 88 580.4 84 580.4 DL 92 580.4 88 580.4 DL -96 580.4 92 580.4 DL 100 580.4 96 580.4 DL 104 580.4 100 580.4 DL 108 -580.4 104 580.4 DL 112 580.4 108 580.4 DL 116 580.4 112 580.4 DL 120 -580.4 116 580.4 DL 124 580.4 120 580.4 DL 128 580.4 124 580.4 DL 132 -580.4 128 580.4 DL 136 580.4 132 580.4 DL 140 580.4 136 580.4 DL 144 -580.4 140 580.4 DL 148 580.4 144 580.4 DL 152 580.4 148 580.4 DL 156 -580.4 152 580.4 DL 160 580.4 156 580.4 DL 164 580.4 160 580.4 DL 168 -580.4 164 580.4 DL 172 580.4 168 580.4 DL 176 580.4 172 580.4 DL 180 -580.4 176 580.4 DL 184 580.4 180 580.4 DL 188 580.4 184 580.4 DL 192 -580.4 188 580.4 DL 196 580.4 192 580.4 DL 200 580.4 196 580.4 DL 204 -580.4 200 580.4 DL 208 580.4 204 580.4 DL 212 580.4 208 580.4 DL 216 -580.4 212 580.4 DL/F4 5/Times-Roman@0 SF(1)93.6 590.8 Q/F5 8 -/Times-Roman@0 SF .385(This is usually /usr/sbin on 4.4BSD and ne)3.2 J -.385(wer systems; man)-.2 F 2.385(ys)-.12 G .385 -(ystems install it in /usr/lib)-2.385 F 4.384(.I)-.32 G .384 -(understand it is in /usr/ucblib on)-2 F(System V Release 4.)72 603.6 Q -F4(2)93.6 614 Q F5 .149(Some v)3.2 J .15(endors ship them o)-.12 F .15(\ -wned by bin; this creates a security hole that is not actually related \ -to)-.2 F/F6 8/Times-Italic@0 SF(sendmail)2.15 E F5 4.15(.O)C .15 -(ther important di-)-4.15 F(rectories that should ha)72 626.8 Q .24 -.12 -(ve r)-.16 H(estricti).12 E .24 -.12(ve o)-.2 H(wnerships and permissio\ -ns are /bin, /usr/bin, /etc, /etc/mail, /usr/etc, /lib, and /usr/lib) --.08 E(.)-.32 E F4(3)93.6 637.2 Q F5(Actually)3.2 I 2.332(,t)-.52 G .332 -(he pathname v)-2.332 F .332(aries depending on the operating system; /\ -etc/mail is the preferred directory)-.2 F 4.332(.S)-.52 G .332 -(ome older systems in-)-4.332 F 1.486(stall it in)72 650 R/F7 8 -/Times-Bold@0 SF(/usr/lib/sendmail.cf)3.486 E F5 3.486(,a)C 1.486(nd I') --3.486 F 1.726 -.12(ve a)-.4 H 1.486(lso seen it in).12 F F7 -(/usr/ucblib)3.486 E F5 5.486(.I)C 3.486(fy)-5.486 G 1.486(ou w)-3.486 F -1.487(ant to mo)-.08 F 1.727 -.12(ve t)-.12 H 1.487 -(his \214le, add -D_P).12 F -.888(AT)-.736 G(H_SENDMAIL-).888 E .093 -(CF=\\"/\214le/name\\" to the \215ags passed to the C compiler)72 659.6 -R 4.093(.M)-.44 G -.12(ov)-4.093 G .093 +(1.3.5. /usr/bin/hoststat)102 469.4 R F1(The)142 485.6 Q F2(hoststat) +5.844 E F1 3.344(command should just be a link to)5.844 F F2(sendmail) +5.844 E F1 5.844(,i)C 5.845(naf)-5.844 G 3.345(ashion similar to)-5.945 +F F2(ne)117 497.6 Q(waliases)-.15 E F1 6.444(.T)C 1.444(his command lis\ +ts the status of the last mail transaction with all remote hosts.)-6.444 +F(The)117 509.6 Q F03.856 E F1 1.356(\215ag will pre)3.856 F -.15 +(ve)-.25 G 1.357(nt the status display from being truncated.).15 F 1.357 +(It functions only when the)6.357 F F0(HostStatusDir)117 521.6 Q(ectory) +-.18 E F1(option is set.)2.5 E F0 2.5(1.3.6. /usr/bin/pur)102 545.6 R +(gestat)-.1 E F1 .187(This command is also a link to)142 561.8 R F2 +(sendmail)2.687 E F1 5.187(.I)C 2.686<748d>-5.187 G .186(ushes e)-2.686 +F .186(xpired \(T)-.15 F .186(imeout.hoststatus\) informa-)-.35 F +(tion that is stored in the)117 573.8 Q F0(HostStatusDir)2.5 E(ectory) +-.18 E F1(tree.)2.5 E .32 LW 76 583.4 72 583.4 DL 80 583.4 76 583.4 DL +84 583.4 80 583.4 DL 88 583.4 84 583.4 DL 92 583.4 88 583.4 DL 96 583.4 +92 583.4 DL 100 583.4 96 583.4 DL 104 583.4 100 583.4 DL 108 583.4 104 +583.4 DL 112 583.4 108 583.4 DL 116 583.4 112 583.4 DL 120 583.4 116 +583.4 DL 124 583.4 120 583.4 DL 128 583.4 124 583.4 DL 132 583.4 128 +583.4 DL 136 583.4 132 583.4 DL 140 583.4 136 583.4 DL 144 583.4 140 +583.4 DL 148 583.4 144 583.4 DL 152 583.4 148 583.4 DL 156 583.4 152 +583.4 DL 160 583.4 156 583.4 DL 164 583.4 160 583.4 DL 168 583.4 164 +583.4 DL 172 583.4 168 583.4 DL 176 583.4 172 583.4 DL 180 583.4 176 +583.4 DL 184 583.4 180 583.4 DL 188 583.4 184 583.4 DL 192 583.4 188 +583.4 DL 196 583.4 192 583.4 DL 200 583.4 196 583.4 DL 204 583.4 200 +583.4 DL 208 583.4 204 583.4 DL 212 583.4 208 583.4 DL 216 583.4 212 +583.4 DL/F4 5/Times-Roman@0 SF(1)93.6 593.8 Q/F5 8/Times-Roman@0 SF .384 +(This is usually /usr/sbin on 4.4BSD and ne)3.2 J .384(wer systems; man) +-.2 F 2.385(ys)-.12 G .385(ystems install it in /usr/lib)-2.385 F 4.385 +(.I)-.32 G .385(understand it is in /usr/ucblib on)-2 F +(System V Release 4.)72 606.6 Q F4(2)93.6 617 Q F5 .15(Some v)3.2 J .15 +(endors ship them o)-.12 F .15(wned by bin; this creates a security hol\ +e that is not actually related to)-.2 F/F6 8/Times-Italic@0 SF(sendmail) +2.15 E F5 4.15(.O)C .149(ther important di-)-4.15 F +(rectories that should ha)72 629.8 Q .24 -.12(ve r)-.16 H(estricti).12 E +.24 -.12(ve o)-.2 H(wnerships and permissions are /bin, /usr/bin, /etc,\ + /etc/mail, /usr/etc, /lib, and /usr/lib)-.08 E(.)-.32 E F4(3)93.6 640.2 +Q F5(Actually)3.2 I 2.332(,t)-.52 G .332(he pathname v)-2.332 F .332(ar\ +ies depending on the operating system; /etc/mail is the preferred direc\ +tory)-.2 F 4.332(.S)-.52 G .332(ome older systems in-)-4.332 F 1.487 +(stall it in)72 653 R/F7 8/Times-Bold@0 SF(/usr/lib/sendmail.cf)3.487 E +F5 3.487(,a)C 1.487(nd I')-3.487 F 1.727 -.12(ve a)-.4 H 1.486 +(lso seen it in).12 F F7(/usr/ucblib)3.486 E F5 5.486(.I)C 3.486(fy) +-5.486 G 1.486(ou w)-3.486 F 1.486(ant to mo)-.08 F 1.726 -.12(ve t)-.12 +H 1.486(his \214le, add -D_P).12 F -.888(AT)-.736 G(H_SENDMAIL-).888 E +.093(CF=\\"/\214le/name\\" to the \215ags passed to the C compiler)72 +662.6 R 4.093(.M)-.44 G -.12(ov)-4.093 G .093 (ing this \214le is not recommended: other programs and scripts kno).12 -F 2.093(wo)-.2 G 2.092(ft)-2.093 G(his)-2.092 E(location.)72 669.2 Q F4 -(4)93.6 679.6 Q F5 .589 +F 2.093(wo)-.2 G 2.093(ft)-2.093 G(his)-2.093 E(location.)72 672.2 Q F4 +(4)93.6 682.6 Q F5 .588 (The system libraries can reference other \214les; in particular)3.2 J 2.589(,s)-.32 G .589(ystem library subroutines that)-2.589 F F6 -(sendmail)2.588 E F5 .588(calls probably reference)2.588 F F6 -(/etc/passwd)72 692.4 Q F5(and)2 E F6(/etc/r)2 E(esolv)-.296 E(.conf) +(sendmail)2.589 E F5 .589(calls probably reference)2.589 F F6 +(/etc/passwd)72 695.4 Q F5(and)2 E F6(/etc/r)2 E(esolv)-.296 E(.conf) -.592 E F5(.)A 0 Cg EP %%Page: 11 7 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-11)195.86 E 2.5(1.3.6. /usr/bin/pur)102 96 R(gestat)-.1 E/F1 10 -/Times-Roman@0 SF .186(This command is also a link to)142 112.2 R/F2 10 -/Times-Italic@0 SF(sendmail)2.687 E F1 5.187(.I)C 2.687<748d>-5.187 G -.187(ushes e)-2.687 F .187(xpired \(T)-.15 F .187 -(imeout.hoststatus\) informa-)-.35 F(tion that is stored in the)117 -124.2 Q F0(HostStatusDir)2.5 E(ectory)-.18 E F1(tree.)2.5 E F0 2.5 -(1.3.7. /v)102 148.2 R(ar/spool/mqueue)-.1 E F1 .218(The directory)142 -164.4 R F2(/var/spool/mqueue)2.718 E F1 .217 -(should be created to hold the mail queue.)2.718 F .217(This directory) -5.217 F(should be mode 0700 and o)117 176.4 Q(wned by root.)-.25 E 1.191 -(The actual path of this directory is de\214ned by the)142 192.6 R F0 -(QueueDir)3.692 E(ectory)-.18 E F1 1.192(option of the)3.692 F F2(send-) -3.692 E(mail.cf)117 204.6 Q F1 4.428(\214le. T)4.428 F 4.428(ou)-.8 G +(SMM:08-11)195.86 E 2.5(1.3.7. /v)102 96 R(ar/spool/mqueue)-.1 E/F1 10 +/Times-Roman@0 SF .217(The directory)142 112.2 R/F2 10/Times-Italic@0 SF +(/var/spool/mqueue)2.717 E F1 .218 +(should be created to hold the mail queue.)2.717 F .218(This directory) +5.218 F(should be mode 0700 and o)117 124.2 Q(wned by root.)-.25 E 1.192 +(The actual path of this directory is de\214ned by the)142 140.4 R F0 +(QueueDir)3.691 E(ectory)-.18 E F1 1.191(option of the)3.691 F F2(send-) +3.691 E(mail.cf)117 152.4 Q F1 4.427(\214le. T)4.427 F 4.428(ou)-.8 G 1.928(se multiple queues, supply a v)-4.428 F 1.928 -(alue ending with an asterisk.)-.25 F -.15(Fo)6.927 G 4.427(re).15 G -(xample,)-4.577 E F2(/var/spool/mqueue/qd*)117 216.6 Q F1 .737 +(alue ending with an asterisk.)-.25 F -.15(Fo)6.928 G 4.428(re).15 G +(xample,)-4.578 E F2(/var/spool/mqueue/qd*)117 164.4 Q F1 .737 (will use all of the directories or symbolic links to directories be) -3.236 F(ginning)-.15 E .78(with `qd' in)117 228.6 R F2 -(/var/spool/mqueue)3.28 E F1 .779(as queue directories.)3.279 F .779 +3.237 F(ginning)-.15 E .779(with `qd' in)117 176.4 R F2 +(/var/spool/mqueue)3.279 E F1 .779(as queue directories.)3.279 F .779 (Do not change the queue directory struc-)5.779 F -(ture while sendmail is running.)117 240.6 Q .897 -(If these directories ha)142 256.8 R 1.197 -.15(ve s)-.2 H .898 -(ubdirectories or symbolic links to directories named `qf).15 F .898 -(', `df).55 F(',).55 E 1.241(and `xf)117 268.8 R 1.241 -(', then these will be used for the dif).55 F 1.24 -(ferent queue \214le types.)-.25 F 1.24(That is, the data \214les are) -6.24 F .246(stored in the `df)117 280.8 R 2.746('s).55 G(ubdirectory) --2.746 E 2.746(,t)-.65 G .246 -(he transcript \214les are stored in the `xf)-2.746 F 2.747('s).55 G -(ubdirectory)-2.747 E 2.747(,a)-.65 G .247(nd all oth-)-2.747 F -(ers are stored in the `qf)117 292.8 Q 2.5('s).55 G(ubdirectory)-2.5 E -(.)-.65 E 1.603(If shared memory support is compiled in,)142 309 R F2 -(sendmail)4.102 E F1 1.602(stores the a)4.102 F -.25(va)-.2 G 1.602 -(ilable diskspace in a).25 F 1.064(shared memory se)117 321 R 1.064 -(gment to mak)-.15 F 3.564(et)-.1 G 1.065(he v)-3.564 F 1.065 -(alues readily a)-.25 F -.25(va)-.2 G 1.065 -(ilable to all children without incurring).25 F .251(system o)117 333 R --.15(ve)-.15 G 2.751(rhead. In).15 F .251(this case, only the daemon up\ -dates the data; i.e., the sendmail daemon cre-)2.751 F 1.036 -(ates the shared memory se)117 345 R 1.037 +(ture while sendmail is running.)117 188.4 Q .898 +(If these directories ha)142 204.6 R 1.198 -.15(ve s)-.2 H .897 +(ubdirectories or symbolic links to directories named `qf).15 F .897 +(', `df).55 F(',).55 E 1.24(and `xf)117 216.6 R 1.24 +(', then these will be used for the dif).55 F 1.241 +(ferent queue \214le types.)-.25 F 1.241(That is, the data \214les are) +6.241 F .247(stored in the `df)117 228.6 R 2.747('s).55 G(ubdirectory) +-2.747 E 2.746(,t)-.65 G .246 +(he transcript \214les are stored in the `xf)-2.746 F 2.746('s).55 G +(ubdirectory)-2.746 E 2.746(,a)-.65 G .246(nd all oth-)-2.746 F +(ers are stored in the `qf)117 240.6 Q 2.5('s).55 G(ubdirectory)-2.5 E +(.)-.65 E 1.602(If shared memory support is compiled in,)142 256.8 R F2 +(sendmail)4.102 E F1 1.602(stores the a)4.102 F -.25(va)-.2 G 1.603 +(ilable diskspace in a).25 F 1.065(shared memory se)117 268.8 R 1.065 +(gment to mak)-.15 F 3.565(et)-.1 G 1.065(he v)-3.565 F 1.065 +(alues readily a)-.25 F -.25(va)-.2 G 1.064 +(ilable to all children without incurring).25 F .25(system o)117 280.8 R +-.15(ve)-.15 G 2.75(rhead. In).15 F .251(this case, only the daemon upd\ +ates the data; i.e., the sendmail daemon cre-)2.75 F 1.037 +(ates the shared memory se)117 292.8 R 1.037 (gment and deletes it if it is terminated.)-.15 F 2.637 -.8(To u)6.037 H -1.037(se this,).8 F F2(sendmail)3.537 E F1(must)3.537 E(ha)117 357 Q -2.462 -.15(ve b)-.2 H 2.162(een compiled with support for shared memory\ - \(-DSM_CONF_SHM\) and the option).15 F F0(Shar)117 369 Q(edMemoryK)-.18 -E(ey)-.25 E F1 1.516(must be set.)4.016 F 1.516 +1.037(se this,).8 F F2(sendmail)3.536 E F1(must)3.536 E(ha)117 304.8 Q +2.461 -.15(ve b)-.2 H 2.162(een compiled with support for shared memory\ + \(-DSM_CONF_SHM\) and the option).15 F F0(Shar)117 316.8 Q(edMemoryK) +-.18 E(ey)-.25 E F1 1.517(must be set.)4.017 F 1.516 (Notice: do not use the same k)6.516 F 1.816 -.15(ey f)-.1 H(or).15 E F2 -(sendmail)4.017 E F1(in)4.017 E -.2(vo)-.4 G(cations).2 E .032(with dif) -117 381 R .032(ferent queue directories or dif)-.25 F .032 -(ferent queue group declarations.)-.25 F .031(Access to shared memory) -5.031 F 1.542(is not controlled by locks, i.e., there is a race conditi\ -on when data in the shared memory is)117 393 R 2.844(updated. Ho)117 405 -R(we)-.25 E -.15(ve)-.25 G 1.144 -.4(r, s).15 H .344(ince operation of) -.4 F F2(sendmail)2.844 E F1 .344 -(does not rely on the data in the shared memory)2.844 F(,)-.65 E -(this does not ne)117 417 Q -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G +(sendmail)4.016 E F1(in)4.016 E -.2(vo)-.4 G(cations).2 E .031(with dif) +117 328.8 R .031(ferent queue directories or dif)-.25 F .032 +(ferent queue group declarations.)-.25 F .032(Access to shared memory) +5.032 F .577(is not controlled by locks, i.e., there is a race conditio\ +n when data in the shared memory is up-)117 340.8 R 3.51(dated. Ho)117 +352.8 R(we)-.25 E -.15(ve)-.25 G 1.81 -.4(r, s).15 H 1.01 +(ince operation of).4 F F2(sendmail)3.51 E F1 1.011 +(does not rely on the data in the shared memory)3.511 F(,)-.65 E +(this does not ne)117 364.8 Q -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G (ly in\215uence the beha).15 E(vior)-.2 E(.)-.55 E F0 2.5(1.3.8. /v)102 -441 R(ar/spool/clientmqueue)-.1 E F1 1.726(The directory)142 457.2 R F2 -(/var/spool/clientmqueue)4.226 E F1 1.726 -(should be created to hold the mail queue.)4.226 F(This)6.727 E -(directory should be mode 0770 and o)117 469.2 Q +388.8 R(ar/spool/clientmqueue)-.1 E F1 .449(The directory)142 405 R F2 +(/var/spool/clientmqueue)2.949 E F1 .448 +(should be created to hold the mail queue.)2.949 F .448(This di-)5.448 F +(rectory should be mode 0770 and o)117 417 Q (wned by user smmsp, group smmsp.)-.25 E .139 -(The actual path of this directory is de\214ned by the)142 485.4 R F0 -(QueueDir)2.639 E(ectory)-.18 E F1 .139(option of the)2.639 F F2 -(submit.cf)2.639 E F1(\214le.)117 497.4 Q F0 2.5(1.3.9. /v)102 521.4 R -(ar/spool/mqueue/.hoststat)-.1 E F1 1.044(This is a typical v)142 537.6 -R 1.044(alue for the)-.25 F F0(HostStatusDir)3.545 E(ectory)-.18 E F1 -1.045(option, containing one \214le per host)3.545 F -(that this sendmail has chatted with recently)117 549.6 Q 5(.I)-.65 G +(The actual path of this directory is de\214ned by the)142 433.2 R F0 +(QueueDir)2.639 E(ectory)-.18 E F1 .14(option of the)2.64 F F2 +(submit.cf)2.64 E F1(\214le.)117 445.2 Q F0 2.5(1.3.9. /v)102 469.2 R +(ar/spool/mqueue/.hoststat)-.1 E F1 1.045(This is a typical v)142 485.4 +R 1.045(alue for the)-.25 F F0(HostStatusDir)3.545 E(ectory)-.18 E F1 +1.044(option, containing one \214le per host)3.545 F +(that this sendmail has chatted with recently)117 497.4 Q 5(.I)-.65 G 2.5(ti)-5 G 2.5(sn)-2.5 G(ormally a subdirectory of)-2.5 E F2(mqueue)2.5 -E F1(.)A F0 2.5(1.3.10. /etc/mail/aliases*)102 573.6 R F1 .019 -(The system aliases are held in \231/etc/mail/aliases\232.)142 589.8 R -2.519(As)5.019 G .019(ample is gi)-2.519 F -.15(ve)-.25 G 2.519(ni).15 G -2.519<6e99>-2.519 G(sendmail/aliases\232)-2.519 E -(which includes some aliases which)117 601.8 Q F2(must)2.5 E F1 -(be de\214ned:)2.5 E(cp sendmail/aliases /etc/mail/aliases)157 618 Q F2 -(edit /etc/mail/aliases)157 630 Q F1 -1.1(Yo)117 646.2 S 2.5(us)1.1 G +E F1(.)A F0 2.5(1.3.10. /etc/mail/aliases*)102 521.4 R F1 .019 +(The system aliases are held in \231/etc/mail/aliases\232.)142 537.6 R +2.519(As)5.019 G .019(ample is gi)-2.519 F -.15(ve)-.25 G 2.52(ni).15 G +2.52<6e99>-2.52 G(sendmail/aliases\232)-2.52 E +(which includes some aliases which)117 549.6 Q F2(must)2.5 E F1 +(be de\214ned:)2.5 E(cp sendmail/aliases /etc/mail/aliases)157 565.8 Q +F2(edit /etc/mail/aliases)157 577.8 Q F1 -1.1(Yo)117 594 S 2.5(us)1.1 G (hould e)-2.5 E(xtend this \214le with an)-.15 E 2.5(ya)-.15 G -(liases that are apropos to your system.)-2.5 E(Normally)142 662.4 Q F2 -(sendmail)7.983 E F1 5.483(looks at a database v)7.983 F 5.484 +(liases that are apropos to your system.)-2.5 E(Normally)142 610.2 Q F2 +(sendmail)7.984 E F1 5.484(looks at a database v)7.984 F 5.483 (ersion of the \214les, stored either in)-.15 F 1.089(\231/etc/mail/ali\ ases.dir\232 and \231/etc/mail/aliases.pag\232 or \231/etc/mail/aliases\ -.db\232 depending on which)117 674.4 R .202 -(database package you are using.)117 686.4 R .202 -(The actual path of this \214le is de\214ned in the)5.202 F F0 -(AliasFile)2.703 E F1 .203(option of)2.703 F(the)117 698.4 Q F2 -(sendmail.cf)2.5 E F1(\214le.)2.5 E 0 Cg EP +.db\232 depending on which)117 622.2 R .203 +(database package you are using.)117 634.2 R .202 +(The actual path of this \214le is de\214ned in the)5.203 F F0 +(AliasFile)2.702 E F1 .202(option of)2.702 F(the)117 646.2 Q F2 +(sendmail.cf)2.5 E F1(\214le.)2.5 E .154 +(The permissions of the alias \214le and the database v)142 662.4 R .155 +(ersions should be 0640 to pre)-.15 F -.15(ve)-.25 G .155(nt local).15 F +.242(denial of service attacks as e)117 674.4 R .242 +(xplained in the top le)-.15 F -.15(ve)-.25 G(l).15 E F0(README)2.742 E +F1 .242(in the sendmail distrib)2.742 F 2.742(ution. If)-.2 F .909(the \ +permissions 0640 are used, be sure that only trusted users belong to th\ +e group assigned to)117 686.4 R(those \214les.)117 698.4 Q +(Otherwise, \214les should not e)5 E -.15(ve)-.25 G 2.5(nb).15 G 2.5(eg) +-2.5 G(roup readable.)-2.5 E 0 Cg EP %%Page: 12 8 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-12 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .155 -(The permissions of the alias \214le and the database v)142 96 R .154 -(ersions should be 0640 to pre)-.15 F -.15(ve)-.25 G .154(nt local).15 F -.242(denial of service attacks as e)117 108 R .242 -(xplained in the top le)-.15 F -.15(ve)-.25 G(l).15 E F0(README)2.742 E -F1 .242(in the sendmail distrib)2.742 F 2.742(ution. If)-.2 F .909(the \ -permissions 0640 are used, be sure that only trusted users belong to th\ -e group assigned to)117 120 R(those \214les.)117 132 Q -(Otherwise, \214les should not e)5 E -.15(ve)-.25 G 2.5(nb).15 G 2.5(eg) --2.5 G(roup readable.)-2.5 E F0 2.5(1.3.11. /etc/r)102 156 R 2.5(co)-.18 -G 2.5(r/)-2.5 G(etc/init.d/sendmail)-2.5 E F1 .155 -(It will be necessary to start up the)142 172.2 R/F2 10/Times-Italic@0 -SF(sendmail)2.655 E F1 .156(daemon when your system reboots.)2.655 F -.156(This dae-)5.156 F 1.538(mon performs tw)117 184.2 R 4.037(of)-.1 G -1.537(unctions: it listens on the SMTP sock)-4.037 F 1.537 -(et for connections \(to recei)-.1 F 1.837 -.15(ve m)-.25 H(ail).15 E +(Installation and Operation Guide)2.5 E 2.5(1.3.11. /etc/r)102 96 R 2.5 +(co)-.18 G 2.5(r/)-2.5 G(etc/init.d/sendmail)-2.5 E/F1 10/Times-Roman@0 +SF .156(It will be necessary to start up the)142 112.2 R/F2 10 +/Times-Italic@0 SF(sendmail)2.655 E F1 .155 +(daemon when your system reboots.)2.655 F .155(This dae-)5.155 F 1.537 +(mon performs tw)117 124.2 R 4.037(of)-.1 G 1.537 +(unctions: it listens on the SMTP sock)-4.037 F 1.537 +(et for connections \(to recei)-.1 F 1.838 -.15(ve m)-.25 H(ail).15 E .442(from a remote system\) and it processes the queue periodically to \ -insure that mail gets deli)117 196.2 R -.15(ve)-.25 G(red).15 E -(when hosts come up.)117 208.2 Q .894(If necessary)142 224.4 R 3.393(,a) +insure that mail gets deli)117 136.2 R -.15(ve)-.25 G(red).15 E +(when hosts come up.)117 148.2 Q .893(If necessary)142 164.4 R 3.393(,a) -.65 G .893(dd the follo)-3.393 F .893(wing lines to \231/etc/rc\232 \(\ -or \231/etc/rc.local\232 as appropriate\) in the)-.25 F .312(area where\ +or \231/etc/rc.local\232 as appropriate\) in the)-.25 F .313(area where\ it is starting up the daemons on a BSD-base system, or on a System-V) -117 236.4 R .313(-based system)-1 F +117 176.4 R .312(-based system)-1 F (in one of the startup \214les, typically \231/etc/init.d/sendmail\232:) -117 248.4 Q(if [ \255f /usr/sbin/sendmail \255a \255f /etc/mail/sendmai\ -l.cf ]; then)157 264.6 Q(\(cd /v)193 276.6 Q +117 188.4 Q(if [ \255f /usr/sbin/sendmail \255a \255f /etc/mail/sendmai\ +l.cf ]; then)157 204.6 Q(\(cd /v)193 216.6 Q (ar/spool/mqueue; rm \255f xf*\))-.25 E -(/usr/sbin/sendmail \255bd \255q30m &)193 288.6 Q -(echo \255n ' sendmail' >/de)193 300.6 Q(v/console)-.25 E<8c>157 312.6 Q +(/usr/sbin/sendmail \255bd \255q30m &)193 228.6 Q +(echo \255n ' sendmail' >/de)193 240.6 Q(v/console)-.25 E<8c>157 252.6 Q 1.611(The \231cd\232 and \231rm\232 commands insure that all transcript\ - \214les ha)117 328.8 R 1.91 -.15(ve b)-.2 H 1.61(een remo).15 F -.15 -(ve)-.15 G 1.61(d; e).15 F(xtraneous)-.15 E .772 -(transcript \214les may be left around if the system goes do)117 340.8 R -.773(wn in the middle of processing a mes-)-.25 F 3.922(sage. The)117 -352.8 R 1.422(line that actually in)3.922 F -.2(vo)-.4 G -.1(ke).2 G(s) + \214les ha)117 268.8 R 1.911 -.15(ve b)-.2 H 1.611(een remo).15 F -.15 +(ve)-.15 G 1.611(d; e).15 F(xtraneous)-.15 E .773 +(transcript \214les may be left around if the system goes do)117 280.8 R +.772(wn in the middle of processing a mes-)-.25 F 3.921(sage. The)117 +292.8 R 1.422(line that actually in)3.921 F -.2(vo)-.4 G -.1(ke).2 G(s) .1 E F2(sendmail)3.922 E F1 1.422(has tw)3.922 F 3.922<6f8d>-.1 G 1.422 (ags: \231\255bd\232 causes it to listen on the)-3.922 F -(SMTP port, and \231\255q30m\232 causes it to run the queue e)117 364.8 -Q -.15(ve)-.25 G(ry half hour).15 E(.)-.55 E .029 -(Some people use a more comple)142 381 R 2.529(xs)-.15 G .029 -(tartup script, remo)-2.529 F .03 -(ving zero length qf/hf/Qf \214les and df)-.15 F .023 -(\214les for which there is no qf/hf/Qf \214le.)117 393 R .022 -(Note this is not advisable.)5.022 F -.15(Fo)5.022 G 2.522(re).15 G .022 -(xample, see Figure 1 for)-2.672 F(an e)117 405 Q(xample of a comple) +(SMTP port, and \231\255q30m\232 causes it to run the queue e)117 304.8 +Q -.15(ve)-.25 G(ry half hour).15 E(.)-.55 E .03 +(Some people use a more comple)142 321 R 2.529(xs)-.15 G .029 +(tartup script, remo)-2.529 F .029 +(ving zero length qf/hf/Qf \214les and df)-.15 F .022 +(\214les for which there is no qf/hf/Qf \214le.)117 333 R .022 +(Note this is not advisable.)5.022 F -.15(Fo)5.022 G 2.522(re).15 G .023 +(xample, see Figure 1 for)-2.672 F(an e)117 345 Q(xample of a comple) -.15 E 2.5(xs)-.15 G(cript which does this clean up.)-2.5 E F0 2.5 -(1.3.12. /etc/mail/help\214le)102 429 R F1 .16 -(This is the help \214le used by the SMTP)142 445.2 R F0(HELP)2.661 E F1 -2.661(command. It)2.661 F .161(should be copied from \231send-)2.661 F -(mail/help\214le\232:)117 457.2 Q -(cp sendmail/help\214le /etc/mail/help\214le)157 473.4 Q -(The actual path of this \214le is de\214ned in the)117 489.6 Q F0 +(1.3.12. /etc/mail/help\214le)102 369 R F1 .161 +(This is the help \214le used by the SMTP)142 385.2 R F0(HELP)2.661 E F1 +2.66(command. It)2.661 F .16(should be copied from \231send-)2.66 F +(mail/help\214le\232:)117 397.2 Q +(cp sendmail/help\214le /etc/mail/help\214le)157 413.4 Q +(The actual path of this \214le is de\214ned in the)117 429.6 Q F0 (HelpFile)2.5 E F1(option of the)2.5 E F2(sendmail.cf)2.5 E F1(\214le.) -2.5 E F0 2.5(1.3.13. /etc/mail/statistics)102 513.6 R F1 3.04 -(If you wish to collect statistics about your mail traf)142 529.8 R 3.04 +2.5 E F0 2.5(1.3.13. /etc/mail/statistics)102 453.6 R F1 3.04 +(If you wish to collect statistics about your mail traf)142 469.8 R 3.04 (\214c, you should create the \214le)-.25 F -(\231/etc/mail/statistics\232:)117 541.8 Q(cp /de)157 558 Q +(\231/etc/mail/statistics\232:)117 481.8 Q(cp /de)157 498 Q (v/null /etc/mail/statistics)-.25 E(chmod 0600 /etc/mail/statistics)157 -570 Q .715(This \214le does not gro)117 586.2 R 4.516 -.65(w. I)-.25 H +510 Q .716(This \214le does not gro)117 526.2 R 4.516 -.65(w. I)-.25 H 3.216(ti).65 G 3.216(sp)-3.216 G .716 -(rinted with the program \231mailstats/mailstats.c.)-3.216 F 5.716<9a54> --.7 G .716(he actual path)-5.716 F(of this \214le is de\214ned in the) -117 598.2 Q F0(S)2.5 E F1(option of the)2.5 E F2(sendmail.cf)2.5 E F1 -(\214le.)2.5 E F0 2.5(1.3.14. /usr/bin/mailq)102 622.2 R F1(If)142 638.4 -Q F2(sendmail)3.44 E F1 .94(is in)3.44 F -.2(vo)-.4 G -.1(ke).2 G 3.44 -(da).1 G 3.44<7399>-3.44 G(mailq,)-3.44 E 3.439<9a69>-.7 G 3.439(tw) --3.439 G .939(ill simulate the)-3.439 F F0(\255bp)3.439 E F1 .939 -(\215ag \(i.e.,)3.439 F F2(sendmail)3.439 E F1 .939(will print)3.439 F -(the contents of the mail queue; see belo)117 650.4 Q 2.5(w\). This)-.25 +(rinted with the program \231mailstats/mailstats.c.)-3.216 F 5.715<9a54> +-.7 G .715(he actual path)-5.715 F(of this \214le is de\214ned in the) +117 538.2 Q F0(S)2.5 E F1(option of the)2.5 E F2(sendmail.cf)2.5 E F1 +(\214le.)2.5 E F0 2.5(1.3.14. /usr/bin/mailq)102 562.2 R F1(If)142 578.4 +Q F2(sendmail)3.439 E F1 .939(is in)3.439 F -.2(vo)-.4 G -.1(ke).2 G +3.439(da).1 G 3.439<7399>-3.439 G(mailq,)-3.439 E 3.439<9a69>-.7 G 3.439 +(tw)-3.439 G .939(ill simulate the)-3.439 F F0(\255bp)3.439 E F1 .94 +(\215ag \(i.e.,)3.44 F F2(sendmail)3.44 E F1 .94(will print)3.44 F +(the contents of the mail queue; see belo)117 590.4 Q 2.5(w\). This)-.25 F(should be a link to /usr/sbin/sendmail.)2.5 E F0 2.5 -(1.3.15. sendmail.pid)102 674.4 R F2(sendmail)142 690.6 Q F1 2.333 -(stores its current pid in the \214le speci\214ed by the)4.833 F F0 -(PidFile)4.834 E F1 2.334(option \(def)4.834 F 2.334(ault is)-.1 F(_P) -117 702.6 Q -1.11(AT)-.92 G(H_SENDMAILPID\).)1.11 E F2(sendmail)5.697 E +(1.3.15. sendmail.pid)102 614.4 R F2(sendmail)142 630.6 Q F1 2.334 +(stores its current pid in the \214le speci\214ed by the)4.834 F F0 +(PidFile)4.833 E F1 2.333(option \(def)4.833 F 2.333(ault is)-.1 F(_P) +117 642.6 Q -1.11(AT)-.92 G(H_SENDMAILPID\).)1.11 E F2(sendmail)5.697 E F1(uses)3.197 E F0 -.92(Te)3.197 G(mpFileMode).92 E F1 .697(\(which def) 3.197 F .697(aults to 0600\) as the per)-.1 F(-)-.2 E 1.958 -(missions of that \214le to pre)117 714.6 R -.15(ve)-.25 G 1.958 +(missions of that \214le to pre)117 654.6 R -.15(ve)-.25 G 1.958 (nt local denial of service attacks as e).15 F 1.958 -(xplained in the top le)-.15 F -.15(ve)-.25 G(l).15 E 0 Cg EP +(xplained in the top le)-.15 F -.15(ve)-.25 G(l).15 E F0(README)117 +666.6 Q F1 .64(in the sendmail distrib)3.14 F 3.14(ution. If)-.2 F .64 +(the \214le already e)3.14 F .64(xists, then it might be necessary to) +-.15 F(change the permissions accordingly)117 678.6 Q 2.5(,e)-.65 G +(.g.,)-2.5 E(chmod 0600 /v)157 694.8 Q(ar/run/sendmail.pid)-.25 E 1.956 +(Note that as of v)117 711 R 1.956(ersion 8.13, this \214le is unlink) +-.15 F 1.956(ed when)-.1 F F2(sendmail)4.456 E F1 -.15(ex)4.456 G 4.456 +(its. As).15 F 4.456(ar)4.456 G 1.955(esult of this)-4.456 F 1.324 +(change, a script such as the follo)117 723 R 1.324(wing, which may ha) +-.25 F 1.624 -.15(ve w)-.2 H(ork).05 E 1.325 +(ed prior to 8.13, will no longer)-.1 F 0 Cg EP %%Page: 13 9 %%BeginPageSetup BP @@ -980,69 +999,68 @@ DL 399 108 394 108 DL 404 108 399 108 DL 409 108 404 108 DL 414 108 409 429 108 DL 439 108 434 108 DL 444 108 439 108 DL 449 108 444 108 DL 454 108 449 108 DL 459 108 454 108 DL 464 108 459 108 DL 469 108 464 108 DL 474 108 469 108 DL 479 108 474 108 DL 484 108 479 108 DL 489 108 484 108 -DL 494 108 489 108 DL 499 108 494 108 DL 504 108 499 108 DL F0(README) -117 144 Q F1 .64(in the sendmail distrib)3.14 F 3.14(ution. If)-.2 F .64 -(the \214le already e)3.14 F .64(xists, then it might be necessary to) --.15 F(change the permissions accordingly)117 156 Q 2.5(,e)-.65 G(.g.,) --2.5 E(chmod 0600 /v)157 172.2 Q(ar/run/sendmail.pid)-.25 E 1.955 -(Note that as of v)117 188.4 R 1.956(ersion 8.13, this \214le is unlink) --.15 F 1.956(ed when)-.1 F/F2 10/Times-Italic@0 SF(sendmail)4.456 E F1 --.15(ex)4.456 G 4.456(its. As).15 F 4.456(ar)4.456 G 1.956 -(esult of this)-4.456 F 1.325(change, a script such as the follo)117 -200.4 R 1.324(wing, which may ha)-.25 F 1.624 -.15(ve w)-.2 H(ork).05 E -1.324(ed prior to 8.13, will no longer)-.1 F -.1(wo)117 212.4 S(rk:).1 E -2.5(#s)157 228.6 S(top & start sendmail)-2.5 E(PIDFILE=/v)157 240.6 Q -(ar/run/sendmail.pid)-.25 E(kill `head -1 $PIDFILE`)157 252.6 Q -(`tail -1 $PIDFILE`)157 264.6 Q .217 -(because it assumes that the pid\214le will still e)117 280.8 R .218 -(xist e)-.15 F -.15(ve)-.25 G 2.718(na).15 G .218 -(fter killing the process to which it refers.)-2.718 F(Belo)117 292.8 Q +DL 494 108 489 108 DL 499 108 494 108 DL 504 108 499 108 DL -.1(wo)117 +144 S(rk:).1 E 2.5(#s)157 160.2 S(top & start sendmail)-2.5 E +(PIDFILE=/v)157 172.2 Q(ar/run/sendmail.pid)-.25 E +(kill `head -1 $PIDFILE`)157 184.2 Q(`tail -1 $PIDFILE`)157 196.2 Q .218 +(because it assumes that the pid\214le will still e)117 212.4 R .218 +(xist e)-.15 F -.15(ve)-.25 G 2.718(na).15 G .217 +(fter killing the process to which it refers.)-2.718 F(Belo)117 224.4 Q 2.5(wi)-.25 G 2.5(sas)-2.5 G(cript which will w)-2.5 E (ork correctly on both ne)-.1 E(wer and older v)-.25 E(ersions:)-.15 E -2.5(#s)157 309 S(top & start sendmail)-2.5 E(PIDFILE=/v)157 321 Q -(ar/run/sendmail.pid)-.25 E(pid=`head -1 $PIDFILE`)157 333 Q -(cmd=`tail -1 $PIDFILE`)157 345 Q(kill $pid)157 357 Q($cmd)157 369 Q -1.311(This is just an e)117 385.2 R 1.311 -(xample script, it does not perform an)-.15 F 3.81(ye)-.15 G 1.31 -(rror checks, e.g., whether the pid\214le)-3.81 F -.15(ex)117 397.2 S -(ists at all.).15 E F0 2.5(1.3.16. Map)102 421.2 R(Files)2.5 E F1 2.465 --.8(To p)142 437.4 T(re).8 E -.15(ve)-.25 G .865 +2.5(#s)157 240.6 S(top & start sendmail)-2.5 E(PIDFILE=/v)157 252.6 Q +(ar/run/sendmail.pid)-.25 E(pid=`head -1 $PIDFILE`)157 264.6 Q +(cmd=`tail -1 $PIDFILE`)157 276.6 Q(kill $pid)157 288.6 Q($cmd)157 300.6 +Q .344(This is just an e)117 316.8 R .344 +(xample script, it does not perform an)-.15 F 2.844(ye)-.15 G .344 +(rror checks, e.g., whether the pid\214le e)-2.844 F(x-)-.15 E +(ists at all.)117 328.8 Q F0 2.5(1.3.16. Map)102 352.8 R(Files)2.5 E F1 +2.466 -.8(To p)142 369 T(re).8 E -.15(ve)-.25 G .866 (nt local denial of service attacks as e).15 F .865 -(xplained in the top le)-.15 F -.15(ve)-.25 G(l).15 E F0(README)3.366 E -F1 .866(in the)3.366 F 1.077(sendmail distrib)117 449.4 R 1.077 -(ution, the permissions of map \214les created by)-.2 F F2(mak)3.577 E -(emap)-.1 E F1 1.077(should be 0640.)3.577 F(The)6.076 E .56(use of 064\ -0 implies that only trusted users belong to the group assigned to those\ - \214les.)117 461.4 R .56(If those)5.56 F(\214les already e)117 473.4 Q +(xplained in the top le)-.15 F -.15(ve)-.25 G(l).15 E F0(README)3.365 E +F1 .865(in the)3.365 F 1.076(sendmail distrib)117 381 R 1.077 +(ution, the permissions of map \214les created by)-.2 F/F2 10 +/Times-Italic@0 SF(mak)3.577 E(emap)-.1 E F1 1.077(should be 0640.)3.577 +F(The)6.077 E .56(use of 0640 implies that only trusted users belong to\ + the group assigned to those \214les.)117 393 R .56(If those)5.56 F +(\214les already e)117 405 Q (xist, then it might be necessary to change the permissions accordingly) --.15 E 2.5(,e)-.65 G(.g.,)-2.5 E(cd /etc/mail)157 489.6 Q -(chmod 0640 *.db *.pag *.dir)157 501.6 Q F0 2.5(2. NORMAL)72 529.8 R -(OPERA)2.5 E(TIONS)-.95 E 2.5(2.1. The)87 553.8 R(System Log)2.5 E F1 -1.511(The system log is supported by the)127 570 R F2(syslo)4.011 E(gd) --.1 E F1 1.511(\(8\) program.)1.666 F 1.511(All messages from)6.511 F F2 -(sendmail)4.011 E F1(are)4.011 E(logged under the)102 584 Q/F3 9 +-.15 E 2.5(,e)-.65 G(.g.,)-2.5 E(cd /etc/mail)157 421.2 Q +(chmod 0640 *.db *.pag *.dir)157 433.2 Q F0 2.5(2. NORMAL)72 461.4 R +(OPERA)2.5 E(TIONS)-.95 E 2.5(2.1. The)87 485.4 R(System Log)2.5 E F1 +1.511(The system log is supported by the)127 501.6 R F2(syslo)4.011 E +(gd)-.1 E F1 1.511(\(8\) program.)1.666 F 1.511(All messages from)6.511 +F F2(sendmail)4.011 E F1(are)4.012 E(logged under the)102 515.6 Q/F3 9 /Times-Roman@0 SF(LOG_MAIL)2.5 E F1 -.1(fa)2.5 G(cility).1 E/F4 7 -/Times-Roman@0 SF(5)-4 I F1(.)4 I F0 2.5(2.1.1. F)102 608 R(ormat)-.25 E -F1 .574(Each line in the system log consists of a timestamp, the name o\ -f the machine that gener)142 624.2 R(-)-.2 E .849 -(ated it \(for logging from se)117 636.2 R -.15(ve)-.25 G .849 -(ral machines o).15 F -.15(ve)-.15 G 3.349(rt).15 G .848 -(he local area netw)-3.349 F .848(ork\), the w)-.1 F .848 -(ord \231sendmail:\232,)-.1 F(and a message)117 650.2 Q F4(6)-4 I F1 5 +/Times-Roman@0 SF(5)-4 I F1(.)4 I F0 2.5(2.1.1. F)102 539.6 R(ormat)-.25 +E F1 .574(Each line in the system log consists of a timestamp, the name\ + of the machine that gener)142 555.8 R(-)-.2 E .848 +(ated it \(for logging from se)117 567.8 R -.15(ve)-.25 G .848 +(ral machines o).15 F -.15(ve)-.15 G 3.349(rt).15 G .849 +(he local area netw)-3.349 F .849(ork\), the w)-.1 F .849 +(ord \231sendmail:\232,)-.1 F(and a message)117 581.8 Q F4(6)-4 I F1 5 (.M)4 K(ost messages are a sequence of)-5 E F2(name)2.5 E F1(=)A F2 -(value)A F1(pairs.)2.5 E .32 LW 76 665.2 72 665.2 DL 80 665.2 76 665.2 -DL 84 665.2 80 665.2 DL 88 665.2 84 665.2 DL 92 665.2 88 665.2 DL 96 -665.2 92 665.2 DL 100 665.2 96 665.2 DL 104 665.2 100 665.2 DL 108 665.2 -104 665.2 DL 112 665.2 108 665.2 DL 116 665.2 112 665.2 DL 120 665.2 116 -665.2 DL 124 665.2 120 665.2 DL 128 665.2 124 665.2 DL 132 665.2 128 -665.2 DL 136 665.2 132 665.2 DL 140 665.2 136 665.2 DL 144 665.2 140 -665.2 DL 148 665.2 144 665.2 DL 152 665.2 148 665.2 DL 156 665.2 152 -665.2 DL 160 665.2 156 665.2 DL 164 665.2 160 665.2 DL 168 665.2 164 -665.2 DL 172 665.2 168 665.2 DL 176 665.2 172 665.2 DL 180 665.2 176 -665.2 DL 184 665.2 180 665.2 DL 188 665.2 184 665.2 DL 192 665.2 188 -665.2 DL 196 665.2 192 665.2 DL 200 665.2 196 665.2 DL 204 665.2 200 -665.2 DL 208 665.2 204 665.2 DL 212 665.2 208 665.2 DL 216 665.2 212 -665.2 DL/F5 5/Times-Roman@0 SF(5)93.6 675.6 Q/F6 8/Times-Roman@0 SF +(value)A F1(pairs.)2.5 E .68(The tw)142 598 R 3.18(om)-.1 G .68 +(ost common lines are logged when a message is processed.)-3.18 F .68 +(The \214rst logs the)5.68 F .376(receipt of a message; there will be e) +117 610 R .376(xactly one of these per message.)-.15 F .376 +(Some \214elds may be omit-)5.376 F(ted if the)117 622 Q 2.5(yd)-.15 G +2.5(on)-2.5 G(ot contain interesting information.)-2.5 E(Fields are:)5 E +50.06(from The)117 638.2 R(en)2.5 E -.15(ve)-.4 G(lope sender address.) +.15 E 53.95(size The)117 654.4 R(size of the message in bytes.)2.5 E .32 +LW 76 665.2 72 665.2 DL 80 665.2 76 665.2 DL 84 665.2 80 665.2 DL 88 +665.2 84 665.2 DL 92 665.2 88 665.2 DL 96 665.2 92 665.2 DL 100 665.2 96 +665.2 DL 104 665.2 100 665.2 DL 108 665.2 104 665.2 DL 112 665.2 108 +665.2 DL 116 665.2 112 665.2 DL 120 665.2 116 665.2 DL 124 665.2 120 +665.2 DL 128 665.2 124 665.2 DL 132 665.2 128 665.2 DL 136 665.2 132 +665.2 DL 140 665.2 136 665.2 DL 144 665.2 140 665.2 DL 148 665.2 144 +665.2 DL 152 665.2 148 665.2 DL 156 665.2 152 665.2 DL 160 665.2 156 +665.2 DL 164 665.2 160 665.2 DL 168 665.2 164 665.2 DL 172 665.2 168 +665.2 DL 176 665.2 172 665.2 DL 180 665.2 176 665.2 DL 184 665.2 180 +665.2 DL 188 665.2 184 665.2 DL 192 665.2 188 665.2 DL 196 665.2 192 +665.2 DL 200 665.2 196 665.2 DL 204 665.2 200 665.2 DL 208 665.2 204 +665.2 DL 212 665.2 208 665.2 DL 216 665.2 212 665.2 DL/F5 5 +/Times-Roman@0 SF(5)93.6 675.6 Q/F6 8/Times-Roman@0 SF (Except on Ultrix, which does not support f)3.2 I (acilities in the syslog.)-.08 E F5(6)93.6 689.2 Q F6(This format may v) 3.2 I(ary slightly if your v)-.2 E(endor has changed the syntax.)-.12 E @@ -1052,688 +1070,699 @@ DL 84 665.2 80 665.2 DL 88 665.2 84 665.2 DL 92 665.2 88 665.2 DL 96 BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-15)195.86 E/F1 10/Times-Roman@0 SF .68(The tw)142 96 R 3.18(om) --.1 G .68(ost common lines are logged when a message is processed.)-3.18 -F .68(The \214rst logs the)5.68 F .376 -(receipt of a message; there will be e)117 108 R .376 -(xactly one of these per message.)-.15 F .376 -(Some \214elds may be omit-)5.376 F(ted if the)117 120 Q 2.5(yd)-.15 G -2.5(on)-2.5 G(ot contain interesting information.)-2.5 E(Fields are:)5 E -50.06(from The)117 136.2 R(en)2.5 E -.15(ve)-.4 G(lope sender address.) -.15 E 53.95(size The)117 152.4 R(size of the message in bytes.)2.5 E -50.06(class The)117 168.6 R +(SMM:08-15)195.86 E/F1 10/Times-Roman@0 SF 50.06(class The)117 96 R (class \(i.e., numeric precedence\) of the message.)2.5 E 58.39(pri The) -117 184.8 R(initial message priority \(used for queue sorting\).)2.5 E -45.06(nrcpts The)117 201 R 1.514(number of en)4.014 F -.15(ve)-.4 G -1.515(lope recipients for this message \(after aliasing and for).15 F(-) --.2 E -.1(wa)189 213 S(rding\).).1 E 45.05(msgid The)117 229.2 R +117 112.2 R(initial message priority \(used for queue sorting\).)2.5 E +45.06(nrcpts The)117 128.4 R 1.515(number of en)4.015 F -.15(ve)-.4 G +1.514(lope recipients for this message \(after aliasing and for).15 F(-) +-.2 E -.1(wa)189 140.4 S(rding\).).1 E 45.05(msgid The)117 156.6 R (message id of the message \(from the header\).)2.5 E 32.28 -(bodytype The)117 245.4 R 3.144 -(message body type \(7BIT or 8BITMIME\), as determined from the)5.644 F -(en)189 257.4 Q -.15(ve)-.4 G(lope.).15 E 48.39(proto The)117 273.6 R +(bodytype The)117 172.8 R .662 +(message body type \(7BIT or 8BITMIME\), as determined from the en)3.161 +F -.15(ve)-.4 G(-).15 E(lope.)189 184.8 Q 48.39(proto The)117 201 R (protocol used to recei)2.5 E .3 -.15(ve t)-.25 H -(his message \(e.g., ESMTP or UUCP\)).15 E 37.84(daemon The)117 289.8 R +(his message \(e.g., ESMTP or UUCP\)).15 E 37.84(daemon The)117 217.2 R (daemon name from the)2.5 E F0(DaemonP)2.5 E(ortOptions)-.2 E F1 -(setting.)2.5 E 49.51(relay The)117 306 R(machine from which it w)2.5 E -(as recei)-.1 E -.15(ve)-.25 G(d.).15 E .43 -(There is also one line logged per deli)117 322.2 R -.15(ve)-.25 G .43 +(setting.)2.5 E 49.51(relay The)117 233.4 R(machine from which it w)2.5 +E(as recei)-.1 E -.15(ve)-.25 G(d.).15 E .43 +(There is also one line logged per deli)117 249.6 R -.15(ve)-.25 G .43 (ry attempt \(so there can be se).15 F -.15(ve)-.25 G .43 (ral per message if deli).15 F(v-)-.25 E -(ery is deferred or there are multiple recipients\).)117 334.2 Q -(Fields are:)5 E 61.72(to A)117 350.4 R +(ery is deferred or there are multiple recipients\).)117 261.6 Q +(Fields are:)5 E 61.72(to A)117 277.8 R (comma-separated list of the recipients to this mailer)2.5 E(.)-.55 E -41.73(ctladdr The)117 366.6 R -.74(``)2.727 G .227(controlling user').74 -F .226(', that is, the name of the user whose credentials we use)-.74 F -(for deli)189 378.6 Q -.15(ve)-.25 G(ry).15 E(.)-.65 E 47.84(delay The) -117 394.8 R 1.205(total delay between the time this message w)3.705 F -1.205(as recei)-.1 F -.15(ve)-.25 G 3.705(da).15 G 1.205(nd the current) --3.705 F(deli)189 406.8 Q -.15(ve)-.25 G(ry attempt.).15 E 42.84 -(xdelay The)117 423 R .116(amount of time needed in this deli)2.616 F --.15(ve)-.25 G .116(ry attempt \(normally indicati).15 F .415 -.15(ve o) --.25 H 2.615(ft).15 G(he)-2.615 E(speed of the connection\).)189 435 Q -43.95(mailer The)117 451.2 R(name of the mailer used to deli)2.5 E -.15 +41.73(ctladdr The)117 294 R -.74(``)2.726 G .226(controlling user').74 F +.226(', that is, the name of the user whose credentials we use)-.74 F +(for deli)189 306 Q -.15(ve)-.25 G(ry).15 E(.)-.65 E 47.84(delay The)117 +322.2 R 1.205(total delay between the time this message w)3.705 F 1.205 +(as recei)-.1 F -.15(ve)-.25 G 3.705(da).15 G 1.205(nd the current) +-3.705 F(deli)189 334.2 Q -.15(ve)-.25 G(ry attempt.).15 E 42.84 +(xdelay The)117 350.4 R .116(amount of time needed in this deli)2.615 F +-.15(ve)-.25 G .116(ry attempt \(normally indicati).15 F .416 -.15(ve o) +-.25 H 2.616(ft).15 G(he)-2.616 E(speed of the connection\).)189 362.4 Q +43.95(mailer The)117 378.6 R(name of the mailer used to deli)2.5 E -.15 (ve)-.25 G 2.5(rt).15 G 2.5(ot)-2.5 G(his recipient.)-2.5 E 49.51 -(relay The)117 467.4 R(name of the host that actually accepted \(or rej\ -ected\) this recipient.)2.5 E 55.61(dsn The)117 483.6 R +(relay The)117 394.8 R(name of the host that actually accepted \(or rej\ +ected\) this recipient.)2.5 E 55.61(dsn The)117 411 R (enhanced error code \(RFC 2034\) if a)2.5 E -.25(va)-.2 G(ilable.).25 E -55.61(stat The)117 499.8 R(deli)2.5 E -.15(ve)-.25 G(ry status.).15 E -1.012(Not all \214elds are present in all messages; for e)117 516 R -1.012(xample, the relay is usually not listed for local)-.15 F(deli)117 -528 Q -.15(ve)-.25 G(ries.).15 E F0 2.5(2.1.2. Le)102 552 R -.1(ve)-.15 -G(ls).1 E F1 .205(If you ha)142 568.2 R -.15(ve)-.2 G/F2 10 -/Times-Italic@0 SF(syslo)2.855 E(gd)-.1 E F1 .205(\(8\) or an equi)1.666 +55.61(stat The)117 427.2 R(deli)2.5 E -.15(ve)-.25 G(ry status.).15 E +.107(Not all \214elds are present in all messages; for e)117 443.4 R +.107(xample, the relay is usually not listed for local de-)-.15 F(li)117 +455.4 Q -.15(ve)-.25 G(ries.).15 E F0 2.5(2.1.2. Le)102 479.4 R -.1(ve) +-.15 G(ls).1 E F1 .204(If you ha)142 495.6 R -.15(ve)-.2 G/F2 10 +/Times-Italic@0 SF(syslo)2.854 E(gd)-.1 E F1 .204(\(8\) or an equi)1.666 F -.25(va)-.25 G .205(lent installed, you will be able to do logging.) -.25 F .204(There is)5.204 F 2.787(al)117 580.2 S(ar)-2.787 E .287 +.25 F .205(There is)5.205 F 2.788(al)117 507.6 S(ar)-2.788 E .287 (ge amount of information that can be logged.)-.18 F .287 (The log is arranged as a succession of le)5.287 F -.15(ve)-.25 G(ls.) -.15 E .651(At the lo)117 592.2 R .651(west le)-.25 F -.15(ve)-.25 G -3.151(lo).15 G .651(nly e)-3.151 F .651 -(xtremely strange situations are logged.)-.15 F .65(At the highest le) -5.651 F -.15(ve)-.25 G .65(l, e).15 F -.15(ve)-.25 G 3.15(nt).15 G(he) --3.15 E .825(most mundane and uninteresting e)117 604.2 R -.15(ve)-.25 G -.825(nts are recorded for posterity).15 F 5.826(.A)-.65 G 3.326(sac) --5.826 G(on)-3.326 E -.15(ve)-.4 G .826(ntion, log le).15 F -.15(ve)-.25 -G(ls).15 E .201 -(under ten are considered generally \231useful;\232 log le)117 616.2 R --.15(ve)-.25 G .201(ls abo).15 F .501 -.15(ve 6)-.15 H 2.701(4a).15 G .2 -(re reserv)-2.701 F .2(ed for deb)-.15 F .2(ugging pur)-.2 F(-)-.2 E 2.5 -(poses. Le)117 628.2 R -.15(ve)-.25 G(ls from 11\25564 are reserv).15 E -(ed for v)-.15 E(erbose information that some sites might w)-.15 E(ant.) --.1 E 2.5(Ac)142 644.4 S(omplete description of the log le)-2.5 E -.15 -(ve)-.25 G(ls is gi).15 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(ns)-2.5 G -(ection `)-2.5 E(`Log Le)-.74 E -.15(ve)-.25 G(l').15 E('.)-.74 E F0 2.5 -(2.2. Dumping)87 668.4 R(State)2.5 E F1 -1.1(Yo)127 684.6 S 2.563(uc)1.1 -G .063(an ask)-2.563 F F2(sendmail)2.563 E F1 .064(to log a dump of the\ - open \214les and the connection cache by sending it a)2.563 F/F3 9 -/Times-Roman@0 SF(SIGUSR1)102 696.6 Q F1 2.5(signal. The)2.5 F -(results are logged at)2.5 E F3(LOG_DEB)2.5 E(UG)-.09 E F1(priority)2.5 -E(.)-.65 E 0 Cg EP +.15 E .65(At the lo)117 519.6 R .65(west le)-.25 F -.15(ve)-.25 G 3.15 +(lo).15 G .65(nly e)-3.15 F .651 +(xtremely strange situations are logged.)-.15 F .651(At the highest le) +5.651 F -.15(ve)-.25 G .651(l, e).15 F -.15(ve)-.25 G 3.151(nt).15 G(he) +-3.151 E .826(most mundane and uninteresting e)117 531.6 R -.15(ve)-.25 +G .825(nts are recorded for posterity).15 F 5.825(.A)-.65 G 3.325(sac) +-5.825 G(on)-3.325 E -.15(ve)-.4 G .825(ntion, log le).15 F -.15(ve)-.25 +G(ls).15 E .2(under ten are considered generally \231useful;\232 log le) +117 543.6 R -.15(ve)-.25 G .201(ls abo).15 F .501 -.15(ve 6)-.15 H 2.701 +(4a).15 G .201(re reserv)-2.701 F .201(ed for deb)-.15 F .201 +(ugging pur)-.2 F(-)-.2 E 2.5(poses. Le)117 555.6 R -.15(ve)-.25 G +(ls from 11\25564 are reserv).15 E(ed for v)-.15 E +(erbose information that some sites might w)-.15 E(ant.)-.1 E 2.5(Ac)142 +571.8 S(omplete description of the log le)-2.5 E -.15(ve)-.25 G +(ls is gi).15 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(ns)-2.5 G(ection `)-2.5 +E(`Log Le)-.74 E -.15(ve)-.25 G(l').15 E('.)-.74 E F0 2.5(2.2. Dumping) +87 595.8 R(State)2.5 E F1 -1.1(Yo)127 612 S 2.564(uc)1.1 G .064(an ask) +-2.564 F F2(sendmail)2.564 E F1 .064(to log a dump of the open \214les \ +and the connection cache by sending it a)2.564 F/F3 9/Times-Roman@0 SF +(SIGUSR1)102 624 Q F1 2.5(signal. The)2.5 F(results are logged at)2.5 E +F3(LOG_DEB)2.5 E(UG)-.09 E F1(priority)2.5 E(.)-.65 E F0 2.5(2.3. The)87 +648 R(Mail Queues)2.5 E F1 .648(Mail messages may either be deli)127 +664.2 R -.15(ve)-.25 G .649(red immediately or be held for later deli) +.15 F -.15(ve)-.25 G(ry).15 E 5.649(.H)-.65 G .649(eld mes-)-5.649 F +(sages are placed into a holding directory called a mail queue.)102 +676.2 Q 2.5(Am)127 692.4 S(ail message may be queued for these reasons:) +-2.5 E 5<8349>107 708.6 S 2.547(fam)-5 G .047 +(ail message is temporarily undeli)-2.547 F -.15(ve)-.25 G .047 +(rable, it is queued and deli).15 F -.15(ve)-.25 G .047 +(ry is attempted later).15 F 5.046(.I)-.55 G 2.546(ft)-5.046 G(he)-2.546 +E 1.979(message is addressed to multiple recipients, it is queued only \ +for those recipients to whom)115.5 720.6 R 0 Cg EP %%Page: 16 12 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-16 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E 2.5(2.3. The)87 96 R -(Mail Queues)2.5 E/F1 10/Times-Roman@0 SF .649 -(Mail messages may either be deli)127 112.2 R -.15(ve)-.25 G .648 -(red immediately or be held for later deli).15 F -.15(ve)-.25 G(ry).15 E -5.648(.H)-.65 G .648(eld mes-)-5.648 F -(sages are placed into a holding directory called a mail queue.)102 -124.2 Q 2.5(Am)127 140.4 S(ail message may be queued for these reasons:) --2.5 E 5<8349>107 156.6 S 2.546(fam)-5 G .047 -(ail message is temporarily undeli)-2.546 F -.15(ve)-.25 G .047 -(rable, it is queued and deli).15 F -.15(ve)-.25 G .047 -(ry is attempted later).15 F 5.047(.I)-.55 G 2.547(ft)-5.047 G(he)-2.547 -E .141(message is addressed to multiple recipients, it is queued only f\ -or those recipients to whom deli)115.5 168.6 R(v-)-.25 E -(ery is not immediately possible.)115.5 180.6 Q 5<8349>107 192.6 S 2.5 -(ft)-5 G(he SuperSafe option is set to true, all mail messages are queu\ -ed while deli)-2.5 E -.15(ve)-.25 G(ry is attempted.).15 E 5<8349>107 -204.6 S 3.258(ft)-5 G .758(he Deli)-3.258 F -.15(ve)-.25 G .758 +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(deli) +115.5 96 Q -.15(ve)-.25 G(ry is not immediately possible.).15 E 5<8349> +107 108 S 2.5(ft)-5 G(he SuperSafe option is set to true, all mail mess\ +ages are queued while deli)-2.5 E -.15(ve)-.25 G(ry is attempted.).15 E +5<8349>107 120 S 3.259(ft)-5 G .759(he Deli)-3.259 F -.15(ve)-.25 G .758 (ryMode option is set to queue-only or defer).15 F 3.258(,a)-.4 G .758 -(ll mail is queued, and no immediate)-3.258 F(deli)115.5 216.6 Q -.15 -(ve)-.25 G(ry is attempted.).15 E 5<8349>107 228.6 S 2.815(ft)-5 G .315 -(he load a)-2.815 F -.15(ve)-.2 G .315(rage becomes higher than the v) -.15 F .314(alue of the QueueLA option and the)-.25 F F0(QueueF)2.814 E -(actor)-.25 E F1(\()115.5 240.6 Q F0(q)A F1 3.442(\)o)C .942(ption di) +(ll mail is queued, and no immediate)-3.258 F(deli)115.5 132 Q -.15(ve) +-.25 G(ry is attempted.).15 E 5<8349>107 144 S 2.814(ft)-5 G .314 +(he load a)-2.814 F -.15(ve)-.2 G .315(rage becomes higher than the v) +.15 F .315(alue of the QueueLA option and the)-.25 F F0(QueueF)2.815 E +(actor)-.25 E F1(\()115.5 156 Q F0(q)A F1 3.442(\)o)C .942(ption di) -3.442 F .942(vided by the dif)-.25 F .942 (ference in the current load a)-.25 F -.15(ve)-.2 G .942(rage and the) .15 F F0(QueueLA)3.442 E F1 .942(option plus)3.442 F .403(one is less t\ han the priority of the message, messages are queued rather than immedi\ -ately deli)115.5 252.6 R(v-)-.25 E(ered.)115.5 264.6 Q 5<834f>107 276.6 -S .744(ne or more addresses are mark)-5 F .745(ed as e)-.1 F(xpensi)-.15 -E 1.045 -.15(ve a)-.25 H .745(nd deli).15 F -.15(ve)-.25 G .745 -(ry is postponed until the ne).15 F .745(xt queue)-.15 F -(run or one or more address are mark)115.5 288.6 Q +ately deli)115.5 168 R(v-)-.25 E(ered.)115.5 180 Q 5<834f>107 192 S .745 +(ne or more addresses are mark)-5 F .745(ed as e)-.1 F(xpensi)-.15 E +1.045 -.15(ve a)-.25 H .745(nd deli).15 F -.15(ve)-.25 G .744 +(ry is postponed until the ne).15 F .744(xt queue)-.15 F +(run or one or more address are mark)115.5 204 Q (ed as held via mailer which uses the hold mailer \215ag.)-.1 E 5<8354> -107 300.6 S(he mail message has been mark)-5 E +107 216 S(he mail message has been mark)-5 E (ed as quarantined via a mail \214lter or rulesets.)-.1 E F0 2.5 -(2.3.1. Queue)102 324.6 R(Gr)2.5 E(oups and Queue Dir)-.18 E(ectories) --.18 E F1 .339(There are one or more mail queues.)142 340.8 R .339 -(Each mail queue belongs to a queue group.)5.339 F .338(There is)5.338 F -(al)117 352.8 Q -.1(wa)-.1 G .616(ys a def).1 F .616 +(2.3.1. Queue)102 240 R(Gr)2.5 E(oups and Queue Dir)-.18 E(ectories)-.18 +E F1 .338(There are one or more mail queues.)142 256.2 R .339 +(Each mail queue belongs to a queue group.)5.339 F .339(There is)5.339 F +(al)117 268.2 Q -.1(wa)-.1 G .617(ys a def).1 F .617 (ault queue group that is called `)-.1 F(`mqueue')-.74 E 3.117('\()-.74 -G .617(which is where messages go by def)-3.117 F(ault)-.1 E 2.244 -(unless otherwise speci\214ed\).)117 364.8 R 2.244 -(The directory or directories which comprise the def)7.244 F 2.243 -(ault queue)-.1 F 1.379 -(group are speci\214ed by the QueueDirectory option.)117 376.8 R 1.379 +G .616(which is where messages go by def)-3.117 F(ault)-.1 E 2.243 +(unless otherwise speci\214ed\).)117 280.2 R 2.244 +(The directory or directories which comprise the def)7.243 F 2.244 +(ault queue)-.1 F 1.38 +(group are speci\214ed by the QueueDirectory option.)117 292.2 R 1.379 (There are zero or more additional named)6.379 F -(queue groups declared using the)117 388.8 Q F0(Q)2.5 E F1 -(command in the con\214guration \214le.)2.5 E .182(By def)142 405 R .181 -(ault, a queued message is placed in the queue group associated with th\ -e \214rst recipi-)-.1 F 1.18(ent in the recipient list.)117 417 R 3.68 -(Ar)6.18 G 1.181(ecipient address is mapped to a queue group as follo) --3.68 F 3.681(ws. First,)-.25 F(if)3.681 E 1.222 -(there is a ruleset called `)117 429 R(`queue)-.74 E(group')-.15 E 1.222 -(', and if this ruleset maps the address to a queue group)-.74 F 1.39 -(name, then that queue group is chosen.)117 441 R 1.39(That is, the ar) -6.39 F 1.39(gument for the ruleset is the recipient)-.18 F .44 -(address \(i.e., the address part of the resolv)117 453 R .439 -(ed triple\) and the result should be)-.15 F F0($#)2.939 E F1(follo) -2.939 E .439(wed by the)-.25 F .768(name of a queue group.)117 465 R +(queue groups declared using the)117 304.2 Q F0(Q)2.5 E F1 +(command in the con\214guration \214le.)2.5 E .181(By def)142 320.4 R +.181(ault, a queued message is placed in the queue group associated wit\ +h the \214rst recipi-)-.1 F 1.181(ent in the recipient list.)117 332.4 R +3.681(Ar)6.181 G 1.18 +(ecipient address is mapped to a queue group as follo)-3.681 F 3.68 +(ws. First,)-.25 F(if)3.68 E 1.222(there is a ruleset called `)117 344.4 +R(`queue)-.74 E(group')-.15 E 1.222 +(', and if this ruleset maps the address to a queue group)-.74 F .41 +(name, then that queue group is chosen.)117 356.4 R .41(That is, the ar) +5.41 F .41(gument for the ruleset is the recipient ad-)-.18 F .994 +(dress \(i.e., the address part of the resolv)117 368.4 R .995 +(ed triple\) and the result should be)-.15 F F0($#)3.495 E F1(follo) +3.495 E .995(wed by the)-.25 F .769(name of a queue group.)117 380.4 R .769(Otherwise, if the mailer associated with the address speci\214es a\ - queue)5.768 F(group, then that queue group is chosen.)117 477 Q -(Otherwise, the def)5 E(ault queue group is chosen.)-.1 E 3.379(Am)142 -493.2 S .879(essage with multiple recipients will be split if dif)-3.379 -F .878(ferent queue groups are chosen by)-.25 F -(the mapping of recipients to queue groups.)117 505.2 Q 1.606(When a me\ + queue)5.769 F(group, then that queue group is chosen.)117 392.4 Q +(Otherwise, the def)5 E(ault queue group is chosen.)-.1 E 3.378(Am)142 +408.6 S .878(essage with multiple recipients will be split if dif)-3.378 +F .879(ferent queue groups are chosen by)-.25 F +(the mapping of recipients to queue groups.)117 420.6 Q 1.606(When a me\ ssage is placed in a queue group, and the queue group has more than one) -142 521.4 R(queue, a queue is selected randomly)117 533.4 Q(.)-.65 E +142 436.8 R(queue, a queue is selected randomly)117 448.8 Q(.)-.65 E 1.633(If a message with multiple recipients is placed into a queue grou\ -p with the ')142 549.6 R 1.632(r' option)-.5 F 1.055 -(\(maximum number of recipients per message\) set to a positi)117 561.6 -R 1.356 -.15(ve v)-.25 H(alue)-.1 E/F2 10/Times-Italic@0 SF(N)3.556 E F1 -3.556(,a)C 1.056(nd if there are more)-3.556 F(than)117 573.6 Q F2(N) -2.905 E F1 .405(recipients in the message, then the message will be spl\ -it into multiple messages, each of)2.905 F(which ha)117 585.6 Q .3 -.15 -(ve a)-.2 H 2.5(tm).15 G(ost)-2.5 E F2(N)2.5 E F1(recipients.)2.5 E .06 -(Notice: if multiple queue groups are used, do)142 601.8 R F0(not)2.56 E +p with the ')142 465 R 1.633(r' option)-.5 F 1.056 +(\(maximum number of recipients per message\) set to a positi)117 477 R +1.356 -.15(ve v)-.25 H(alue)-.1 E/F2 10/Times-Italic@0 SF(N)3.555 E F1 +3.555(,a)C 1.055(nd if there are more)-3.555 F(than)117 489 Q F2(N)2.905 +E F1 .405(recipients in the message, then the message will be split int\ +o multiple messages, each of)2.905 F(which ha)117 501 Q .3 -.15(ve a)-.2 +H 2.5(tm).15 G(ost)-2.5 E F2(N)2.5 E F1(recipients.)2.5 E .06 +(Notice: if multiple queue groups are used, do)142 517.2 R F0(not)2.56 E F1(mo)2.56 E .36 -.15(ve q)-.15 H .06 -(ueue \214les around, e.g., into a dif-).15 F 1.436 -(ferent queue directory)117 613.8 R 6.436(.T)-.65 G 1.436(his may ha) --6.436 F 1.735 -.15(ve w)-.2 H 1.435(eird ef).15 F 1.435 +(ueue \214les around, e.g., into a dif-).15 F 1.435 +(ferent queue directory)117 529.2 R 6.435(.T)-.65 G 1.435(his may ha) +-6.435 F 1.735 -.15(ve w)-.2 H 1.435(eird ef).15 F 1.436 (fects and can cause mail not to be deli)-.25 F -.15(ve)-.25 G(red.).15 E(Queue \214les and directories should be treated as opaque and should \ -not be manipulated directly)117 625.8 Q(.)-.65 E F0 2.5(2.3.2. Queue)102 -649.8 R(Runs)2.5 E F2(sendmail)142 666 Q F1 1(has tw)3.5 F 3.5(od)-.1 G -(if)-3.5 E 1(ferent w)-.25 F 1.001(ays to process the queue\(s\).)-.1 F -1.001(The \214rst one is to start queue)6.001 F .104 -(runners after certain interv)117 678 R .104(als \(`)-.25 F(`normal') --.74 E 2.604('q)-.74 G .103(ueue runners\), the second one is to k) --2.604 F .103(eep queue runner)-.1 F .4(processes around \(`)117 690 R -(`persistent')-.74 E 2.9('q)-.74 G .401(ueue runners\).)-2.9 F(Ho)5.401 -E 2.901(wt)-.25 G 2.901(os)-2.901 G .401 -(elect either of these types is discussed)-2.901 F 1.349 -(in the appendix `)117 702 R 1.348(`COMMAND LINE FLA)-.74 F(GS')-.4 E -3.848('. Persistent)-.74 F 1.348(queue runners ha)3.848 F 1.648 -.15 -(ve t)-.2 H 1.348(he adv).15 F(antage)-.25 E .054(that no ne)117 714 R -2.554(wp)-.25 G .054(rocesses need to be spa)-2.554 F .055 -(wned at certain interv)-.15 F .055(als; the)-.25 F 2.555(yj)-.15 G .055 -(ust sleep for a speci\214ed time)-2.555 F 0 Cg EP +not be manipulated directly)117 541.2 Q(.)-.65 E F0 2.5(2.3.2. Queue)102 +565.2 R(Runs)2.5 E F2(sendmail)142 581.4 Q F1 1.001(has tw)3.501 F 3.501 +(od)-.1 G(if)-3.501 E 1.001(ferent w)-.25 F 1.001 +(ays to process the queue\(s\).)-.1 F 1 +(The \214rst one is to start queue)6.001 F .103 +(runners after certain interv)117 593.4 R .103(als \(`)-.25 F(`normal') +-.74 E 2.603('q)-.74 G .104(ueue runners\), the second one is to k) +-2.603 F .104(eep queue runner)-.1 F .401(processes around \(`)117 605.4 +R(`persistent')-.74 E 2.901('q)-.74 G .401(ueue runners\).)-2.901 F(Ho) +5.401 E 2.901(wt)-.25 G 2.901(os)-2.901 G .401 +(elect either of these types is discussed)-2.901 F 1.348 +(in the appendix `)117 617.4 R 1.348(`COMMAND LINE FLA)-.74 F(GS')-.4 E +3.848('. Persistent)-.74 F 1.348(queue runners ha)3.848 F 1.649 -.15 +(ve t)-.2 H 1.349(he adv).15 F(antage)-.25 E .055(that no ne)117 629.4 R +2.555(wp)-.25 G .055(rocesses need to be spa)-2.555 F .055 +(wned at certain interv)-.15 F .055(als; the)-.25 F 2.555(yj)-.15 G .054 +(ust sleep for a speci\214ed time)-2.555 F .554(after the)117 641.4 R +3.054<798c>-.15 G .554(nished a queue run.)-3.054 F .554(Another adv) +5.554 F .554(antage of persistent queue runners is that only one)-.25 F +.38(process belonging to a w)117 653.4 R .38(orkgroup \(a w)-.1 F .379 +(orkgroup is a set of queue groups\) collects the data for a)-.1 F .489 +(queue run and then multiple queue runner may go ahead using that data.) +117 665.4 R .489(This can signi\214cantly)5.489 F .861(reduce the disk \ +I/O necessary to read the queue \214les compared to starting multiple q\ +ueue run-)117 677.4 R .549(ners directly)117 689.4 R 5.549(.T)-.65 G +.549(heir disadv)-5.549 F .549(antage is that a ne)-.25 F 3.049(wq)-.25 +G .55(ueue run is only started after all queue runners)-3.049 F 1.044 +(belonging to a group \214nished their tasks.)117 701.4 R 1.043 +(In case one of the queue runners tries deli)6.044 F -.15(ve)-.25 G +1.043(ry to a).15 F(slo)117 713.4 Q 3.282(wr)-.25 G .782 +(ecipient site at the end of a queue run, the ne)-3.282 F .783 +(xt queue run may be substantially delayed.)-.15 F .741 +(In general this should be smoothed out due to the distrib)117 725.4 R +.741(ution of those slo)-.2 F 3.241(wj)-.25 G .741(obs, ho)-3.241 F(we) +-.25 E -.15(ve)-.25 G 1.541 -.4(r, f).15 H(or).4 E 0 Cg EP %%Page: 17 13 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-17)195.86 E/F1 10/Times-Roman@0 SF .554(after the)117 96 R 3.054 -<798c>-.15 G .554(nished a queue run.)-3.054 F .554(Another adv)5.554 F -.554(antage of persistent queue runners is that only one)-.25 F .379 -(process belonging to a w)117 108 R .379(orkgroup \(a w)-.1 F .38 -(orkgroup is a set of queue groups\) collects the data for a)-.1 F .489 -(queue run and then multiple queue runner may go ahead using that data.) -117 120 R .488(This can signi\214cantly)5.488 F .861(reduce the disk I/\ -O necessary to read the queue \214les compared to starting multiple que\ -ue run-)117 132 R .55(ners directly)117 144 R 5.55(.T)-.65 G .55 -(heir disadv)-5.55 F .55(antage is that a ne)-.25 F 3.049(wq)-.25 G .549 -(ueue run is only started after all queue runners)-3.049 F 1.043 -(belonging to a group \214nished their tasks.)117 156 R 1.044 -(In case one of the queue runners tries deli)6.043 F -.15(ve)-.25 G -1.044(ry to a).15 F(slo)117 168 Q 3.283(wr)-.25 G .783 -(ecipient site at the end of a queue run, the ne)-3.283 F .782 -(xt queue run may be substantially delayed.)-.15 F .741 -(In general this should be smoothed out due to the distrib)117 180 R -.741(ution of those slo)-.2 F 3.242(wj)-.25 G .742(obs, ho)-3.242 F(we) --.25 E -.15(ve)-.25 G 1.542 -.4(r, f).15 H(or).4 E .142(sites with smal\ -l number of queue entries this might introduce noticeable delays.)117 -192 R .141(In general, per)5.141 F(-)-.2 E +(SMM:08-17)195.86 E/F1 10/Times-Roman@0 SF .141(sites with small number\ + of queue entries this might introduce noticeable delays.)117 96 R .142 +(In general, per)5.142 F(-)-.2 E (sistent queue runners are only useful for sites with big queues.)117 -204 Q F0 2.5(2.3.3. Manual)102 228 R(Inter)2.5 E -.1(ve)-.1 G(ntion).1 E +108 Q F0 2.5(2.3.3. Manual)102 132 R(Inter)2.5 E -.1(ve)-.1 G(ntion).1 E F1 1.049 (Under normal conditions the mail queue will be processed transparently) -142 244.2 R 6.049(.H)-.65 G -.25(ow)-6.049 G -2.15 -.25(ev e).25 H 1.85 --.4(r, y).25 H(ou).4 E .152(may \214nd that manual interv)117 256.2 R +142 148.2 R 6.049(.H)-.65 G -.25(ow)-6.049 G -2.15 -.25(ev e).25 H 1.849 +-.4(r, y).25 H(ou).4 E .151(may \214nd that manual interv)117 160.2 R .151(ention is sometimes necessary)-.15 F 5.151(.F)-.65 G .151(or e) --5.301 F .151(xample, if a major host is do)-.15 F(wn)-.25 E .103 -(for a period of time the queue may become clogged.)117 268.2 R -(Although)5.103 E/F2 10/Times-Italic@0 SF(sendmail)2.604 E F1 .104 -(ought to reco)2.604 F -.15(ve)-.15 G 2.604(rg).15 G(race-)-2.604 E .249 +-5.301 F .152(xample, if a major host is do)-.15 F(wn)-.25 E .104 +(for a period of time the queue may become clogged.)117 172.2 R +(Although)5.103 E/F2 10/Times-Italic@0 SF(sendmail)2.603 E F1 .103 +(ought to reco)2.603 F -.15(ve)-.15 G 2.603(rg).15 G(race-)-2.603 E .249 (fully when the host comes up, you may \214nd performance unacceptably \ -bad in the meantime.)117 280.2 R(In)5.248 E .538(that case you w)117 -292.2 R .538 -(ant to check the content of the queue and manipulate it as e)-.1 F .539 -(xplained in the ne)-.15 F(xt)-.15 E(tw)117 304.2 Q 2.5(os)-.1 G -(ections.)-2.5 E F0 2.5(2.3.4. Printing)102 328.2 R(the queue)2.5 E F1 -.862(The contents of the queue\(s\) can be printed using the)142 344.4 R -F2(mailq)3.361 E F1 .861(command \(or by specifying)3.361 F(the)117 -356.4 Q F0(\255bp)2.5 E F1(\215ag to)2.5 E F2(sendmail)2.5 E F1(\):)A -(mailq)157 372.6 Q 1.673(This will produce a listing of the queue id') -117 388.8 R 1.673(s, the size of the message, the date the message)-.55 -F .528(entered the queue, and the sender and recipients.)117 400.8 R -.527(If shared memory support is compiled in, the)5.527 F(\215ag)117 -412.8 Q F0(\255bP)3.014 E F1 .514 -(can be used to print the number of entries in the queue\(s\), pro)3.014 -F .515(vided a process updates)-.15 F .541(the data.)117 424.8 R(Ho) -5.541 E(we)-.25 E -.15(ve)-.25 G 1.341 -.4(r, a).15 H 3.041(se).4 G .541 -(xplained earlier)-3.191 F 3.041(,t)-.4 G .54 -(he output might be slightly wrong, since access to the)-3.041 F 1.43 -(shared memory is not lock)117 436.8 R 3.931(ed. F)-.1 F 1.431(or e)-.15 +bad in the meantime.)117 184.2 R(In)5.249 E .539(that case you w)117 +196.2 R .538 +(ant to check the content of the queue and manipulate it as e)-.1 F .538 +(xplained in the ne)-.15 F(xt)-.15 E(tw)117 208.2 Q 2.5(os)-.1 G +(ections.)-2.5 E F0 2.5(2.3.4. Printing)102 232.2 R(the queue)2.5 E F1 +.861(The contents of the queue\(s\) can be printed using the)142 248.4 R +F2(mailq)3.362 E F1 .862(command \(or by specifying)3.362 F(the)117 +260.4 Q F0(\255bp)2.5 E F1(\215ag to)2.5 E F2(sendmail)2.5 E F1(\):)A +(mailq)157 276.6 Q .732(This will produce a listing of the queue id')117 +292.8 R .731(s, the size of the message, the date the message en-)-.55 F +1.156(tered the queue, and the sender and recipients.)117 304.8 R 1.157 +(If shared memory support is compiled in, the)6.157 F(\215ag)117 316.8 Q +F0(\255bP)3.015 E F1 .514 +(can be used to print the number of entries in the queue\(s\), pro)3.015 +F .514(vided a process updates)-.15 F .54(the data.)117 328.8 R(Ho)5.54 +E(we)-.25 E -.15(ve)-.25 G 1.34 -.4(r, a).15 H 3.04(se).4 G .54 +(xplained earlier)-3.19 F 3.041(,t)-.4 G .541 +(he output might be slightly wrong, since access to the)-3.041 F 1.431 +(shared memory is not lock)117 340.8 R 3.931(ed. F)-.1 F 1.431(or e)-.15 F 1.431(xample, `)-.15 F(`unkno)-.74 E 1.431(wn number of entries')-.25 -F 3.931('m)-.74 G 1.431(ight be sho)-3.931 F(wn.)-.25 E(The internal co\ -unters are updated after each queue run to the correct v)117 448.8 Q -(alue ag)-.25 E(ain.)-.05 E F0 2.5(2.3.5. F)102 472.8 R(or)-.25 E -(cing the queue)-.18 E F2(Sendmail)142 489 Q F1 .353 -(should run the queue automatically at interv)2.853 F 2.852(als. When) --.25 F .352(using multiple queues, a)2.852 F .276 -(separate process will by def)117 501 R .276 +F 3.93('m)-.74 G 1.43(ight be sho)-3.93 F(wn.)-.25 E(The internal count\ +ers are updated after each queue run to the correct v)117 352.8 Q +(alue ag)-.25 E(ain.)-.05 E F0 2.5(2.3.5. F)102 376.8 R(or)-.25 E +(cing the queue)-.18 E F2(Sendmail)142 393 Q F1 .352 +(should run the queue automatically at interv)2.852 F 2.853(als. When) +-.25 F .353(using multiple queues, a)2.853 F .277 +(separate process will by def)117 405 R .276 (ault be created to run each of the queues unless the queue run is ini-) --.1 F .614(tiated by a user with the v)117 513 R .613(erbose \215ag.) +-.1 F .613(tiated by a user with the v)117 417 R .613(erbose \215ag.) -.15 F .613(The algorithm is to read and sort the queue, and then to) -5.613 F .159(attempt to process all jobs in order)117 525 R 5.159(.W) +5.613 F .159(attempt to process all jobs in order)117 429 R 5.159(.W) -.55 G .159(hen it attempts to run the job,)-5.159 F F2(sendmail)2.659 E -F1 .159(\214rst checks to see)2.659 F(if the job is lock)117 537 Q 2.5 +F1 .158(\214rst checks to see)2.659 F(if the job is lock)117 441 Q 2.5 (ed. If)-.1 F(so, it ignores the job)2.5 E(.)-.4 E .338 -(There is no attempt to insure that only one queue processor e)142 553.2 -R .338(xists at an)-.15 F 2.838(yt)-.15 G .338(ime, since there)-2.838 F -.094(is no guarantee that a job cannot tak)117 565.2 R 2.595(ef)-.1 G -(ore)-2.595 E -.15(ve)-.25 G 2.595(rt).15 G 2.595(op)-2.595 G .095 +(There is no attempt to insure that only one queue processor e)142 457.2 +R .338(xists at an)-.15 F 2.838(yt)-.15 G .339(ime, since there)-2.838 F +.095(is no guarantee that a job cannot tak)117 469.2 R 2.595(ef)-.1 G +(ore)-2.595 E -.15(ve)-.25 G 2.595(rt).15 G 2.595(op)-2.595 G .094 (rocess \(ho)-2.595 F(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F2(sendmail) -2.995 E F1 .095(does include heuris-)2.595 F 1.086(tics to try to abort\ - jobs that are taking absurd amounts of time; technically)117 577.2 R -3.586(,t)-.65 G 1.086(his violates RFC)-3.586 F .461(821, b)117 589.2 R +2.994 E F1 .094(does include heuris-)2.594 F 1.086(tics to try to abort\ + jobs that are taking absurd amounts of time; technically)117 481.2 R +3.587(,t)-.65 G 1.087(his violates RFC)-3.587 F .462(821, b)117 493.2 R .461(ut is blessed by RFC 1123\).)-.2 F .461 (Due to the locking algorithm, it is impossible for one job to)5.461 F -1.087(freeze the entire queue.)117 601.2 R(Ho)6.086 E(we)-.25 E -.15(ve) +1.086(freeze the entire queue.)117 505.2 R(Ho)6.086 E(we)-.25 E -.15(ve) -.25 G 1.886 -.4(r, a).15 H 3.586(nu).4 G(ncooperati)-3.586 E 1.386 -.15 (ve r)-.25 H 1.086(ecipient host or a program recipient that).15 F(ne) -117 613.2 Q -.15(ve)-.25 G 3.35(rr).15 G .85(eturns can accumulate man) --3.35 F 3.351(yp)-.15 G .851(rocesses in your system.)-3.351 F -(Unfortunately)5.851 E 3.351(,t)-.65 G .851(here is no com-)-3.351 F -(pletely general w)117 625.2 Q(ay to solv)-.1 E 2.5(et)-.15 G(his.)-2.5 -E .082(In some cases, you may \214nd that a major host going do)142 -641.4 R .082(wn for a couple of days may create)-.25 F 2.924(ap)117 -653.4 S(rohibiti)-2.924 E -.15(ve)-.25 G .424(ly lar).15 F .424 -(ge queue.)-.18 F .424(This will result in)5.424 F F2(sendmail)2.924 E -F1 .425(spending an inordinate amount of time)2.924 F 1.085 -(sorting the queue.)117 665.4 R 1.085(This situation can be \214x)6.085 -F 1.084(ed by mo)-.15 F 1.084(ving the queue to a temporary place and) --.15 F .022(creating a ne)117 677.4 R 2.522(wq)-.25 G 2.522(ueue. The) --2.522 F .022(old queue can be run later when the of)2.522 F .023 -(fending host returns to service.)-.25 F 1.6 -.8(To d)142 693.6 T 2.5 +117 517.2 Q -.15(ve)-.25 G 3.351(rr).15 G .851 +(eturns can accumulate man)-3.351 F 3.351(yp)-.15 G .851 +(rocesses in your system.)-3.351 F(Unfortunately)5.851 E 3.351(,t)-.65 G +.85(here is no com-)-3.351 F(pletely general w)117 529.2 Q(ay to solv) +-.1 E 2.5(et)-.15 G(his.)-2.5 E .082 +(In some cases, you may \214nd that a major host going do)142 545.4 R +.083(wn for a couple of days may create)-.25 F 2.925(ap)117 557.4 S +(rohibiti)-2.925 E -.15(ve)-.25 G .425(ly lar).15 F .425(ge queue.)-.18 +F .424(This will result in)5.425 F F2(sendmail)2.924 E F1 .424 +(spending an inordinate amount of time)2.924 F 1.084(sorting the queue.) +117 569.4 R 1.084(This situation can be \214x)6.084 F 1.084(ed by mo) +-.15 F 1.085(ving the queue to a temporary place and)-.15 F +(creating a ne)117 581.4 Q 2.5(wq)-.25 G 2.5(ueue. The)-2.5 F +(old queue can be run later when the of)2.5 E +(fending host returns to service.)-.25 E 1.6 -.8(To d)142 597.6 T 2.5 (ot).8 G(his, it is acceptable to mo)-2.5 E .3 -.15(ve t)-.15 H -(he entire queue directory:).15 E 0 Cg EP +(he entire queue directory:).15 E(cd /v)157 613.8 Q(ar/spool)-.25 E +(mv mqueue omqueue; mkdir mqueue; chmod 0700 mqueue)157 625.8 Q -1.1(Yo) +117 642 S 2.709(us)1.1 G .209(hould then kill the e)-2.709 F .209(xisti\ +ng daemon \(since it will still be processing in the old queue direc-) +-.15 F(tory\) and create a ne)117 654 Q 2.5(wd)-.25 G(aemon.)-2.5 E 1.6 +-.8(To r)142 670.2 T(un the old mail queue, issue the follo).8 E +(wing command:)-.25 E(/usr/sbin/sendmail \255C /etc/mail/queue.cf \255q) +157 686.4 Q(The)117 702.6 Q F03.312 E F1 .813 +(\215ag speci\214es an alternate con\214guration \214le)3.312 F F0 +(queue.cf)3.313 E F1 .813(which should refer to the mo)3.313 F -.15(ve) +-.15 G(d).15 E(queue directory)117 714.6 Q 0 Cg EP %%Page: 18 14 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-18 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(cd /v)157 -96 Q(ar/spool)-.25 E(mv mqueue omqueue; mkdir mqueue; chmod 0700 mqueue) -157 108 Q -1.1(Yo)117 124.2 S 2.709(us)1.1 G .209(hould then kill the e) --2.709 F .209(xisting daemon \(since it will still be processing in the\ - old queue direc-)-.15 F(tory\) and create a ne)117 136.2 Q 2.5(wd)-.25 -G(aemon.)-2.5 E 1.6 -.8(To r)142 152.4 T -(un the old mail queue, issue the follo).8 E(wing command:)-.25 E -(/usr/sbin/sendmail \255C /etc/mail/queue.cf \255q)157 168.6 Q(The)117 -184.8 Q F03.312 E F1 .813 -(\215ag speci\214es an alternate con\214guration \214le)3.312 F F0 -(queue.cf)3.313 E F1 .813(which should refer to the mo)3.313 F -.15(ve) --.15 G(d).15 E(queue directory)117 196.8 Q 2.5(OQ)157 213 S -(ueueDirectory=/v)-2.5 E(ar/spool/omqueue)-.25 E .649(and the)117 229.2 -R F03.149 E F1 .649(\215ag says to just run e)3.149 F -.15(ve)-.25 -G .648(ry job in the queue.).15 F -1.1(Yo)5.648 G 3.148(uc)1.1 G .648 -(an also specify the mo)-3.148 F -.15(ve)-.15 G 3.148(dq).15 G(ueue) --3.148 E(directory on the command line)117 241.2 Q -(/usr/sbin/sendmail \255oQ/v)157 257.4 Q(ar/spool/omqueue \255q)-.25 E --.2(bu)117 273.6 S 3.235(tt).2 G .735(his requires that you do not ha) +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5(OQ) +157 96 S(ueueDirectory=/v)-2.5 E(ar/spool/omqueue)-.25 E .649(and the) +117 112.2 R F03.149 E F1 .649(\215ag says to just run e)3.149 F +-.15(ve)-.25 G .648(ry job in the queue.).15 F -1.1(Yo)5.648 G 3.148(uc) +1.1 G .648(an also specify the mo)-3.148 F -.15(ve)-.15 G 3.148(dq).15 G +(ueue)-3.148 E(directory on the command line)117 124.2 Q +(/usr/sbin/sendmail \255oQ/v)157 140.4 Q(ar/spool/omqueue \255q)-.25 E +-.2(bu)117 156.6 S 3.235(tt).2 G .735(his requires that you do not ha) -3.235 F 1.036 -.15(ve q)-.2 H .736 (ueue groups in the con\214guration \214le, because those are).15 F -1.071(not subdirectories of the mo)117 285.6 R -.15(ve)-.15 G 3.571(dd) +1.071(not subdirectories of the mo)117 168.6 R -.15(ve)-.15 G 3.571(dd) .15 G(irectory)-3.571 E 6.071(.S)-.65 G 1.071(ee the section about `) -6.071 F 1.07(`Queue Group Declaration')-.74 F(')-.74 E .011 -(for details; you most lik)117 297.6 R .011(ely need a dif)-.1 F .012 +(for details; you most lik)117 180.6 R .011(ely need a dif)-.1 F .012 (ferent con\214guration \214le to correctly deal with this problem.)-.25 -F(Ho)117 309.6 Q(we)-.25 E -.15(ve)-.25 G 1.818 -.4(r, a p).15 H 1.018 +F(Ho)117 192.6 Q(we)-.25 E -.15(ve)-.25 G 1.818 -.4(r, a p).15 H 1.018 (roper con\214guration of queue groups should a).4 F -.2(vo)-.2 G 1.017 -(id \214lling up queue directories, so).2 F .367(you shouldn')117 321.6 +(id \214lling up queue directories, so).2 F .367(you shouldn')117 204.6 R 2.867(tr)-.18 G .367(un into this problem.)-2.867 F .367(If you ha) 5.367 F .668 -.15(ve a t)-.2 H(endenc).15 E 2.868(yt)-.15 G -2.1 -.25 (ow a)-2.868 H .368(rd v).25 F -.1(oy)-.2 G .368 -(eurism, you can use the).1 F F0117 333.6 Q F1(\215ag to w)2.5 E +(eurism, you can use the).1 F F0117 216.6 Q F1(\215ag to w)2.5 E (atch what is going on.)-.1 E -(When the queue is \214nally emptied, you can remo)142 349.8 Q .3 -.15 -(ve t)-.15 H(he directory:).15 E(rmdir /v)157 366 Q(ar/spool/omqueue) --.25 E F0 2.5(2.3.6. Quarantined)102 394.2 R(Queue Items)2.5 E F1 1.183 -(It is possible to "quarantine" mail messages, otherwise kno)142 410.4 R +(When the queue is \214nally emptied, you can remo)142 232.8 Q .3 -.15 +(ve t)-.15 H(he directory:).15 E(rmdir /v)157 249 Q(ar/spool/omqueue) +-.25 E F0 2.5(2.3.6. Quarantined)102 277.2 R(Queue Items)2.5 E F1 1.183 +(It is possible to "quarantine" mail messages, otherwise kno)142 293.4 R 1.182(wn as en)-.25 F -.15(ve)-.4 G 3.682(lopes. En).15 F -.15(ve)-.4 G -(lopes).15 E .097(\(queue \214les\) are stored b)117 422.4 R .097 +(lopes).15 E .097(\(queue \214les\) are stored b)117 305.4 R .097 (ut not considered for deli)-.2 F -.15(ve)-.25 G .098 (ry or display unless the "quarantine" state of).15 F 1.237(the en)117 -434.4 R -.15(ve)-.4 G 1.236(lope is undone or deli).15 F -.15(ve)-.25 G +317.4 R -.15(ve)-.4 G 1.236(lope is undone or deli).15 F -.15(ve)-.25 G 1.236(ry or display of quarantined items is requested.).15 F -(Quarantined)6.236 E 1.07(messages are tagged by using a dif)117 446.4 R +(Quarantined)6.236 E 1.07(messages are tagged by using a dif)117 329.4 R 1.07(ferent name for the queue \214le, 'hf)-.25 F 3.57('i).55 G 1.07 (nstead of 'qf)-3.57 F 1.07(', and by).55 F -(adding the quarantine reason to the queue \214le.)117 458.4 Q(Deli)142 -474.6 Q -.15(ve)-.25 G .323 +(adding the quarantine reason to the queue \214le.)117 341.4 Q(Deli)142 +357.6 Q -.15(ve)-.25 G .323 (ry or display of quarantined items can be requested using the).15 F F0 (\255qQ)2.823 E F1 .322(\215ag to)2.823 F/F2 10/Times-Italic@0 SF -(sendmail)2.822 E F1(or)117 486.6 Q F2(mailq)4.277 E F1 6.777(.A)C -(dditionally)-6.777 E 4.277(,m)-.65 G 1.778 -(essages already in the queue can be quarantined or unquarantined)-4.277 -F(using the ne)117 498.6 Q(w)-.25 E F02.5 E F1 +(sendmail)2.822 E F1(or)117 369.6 Q F2(mailq)3.008 E F1 5.508(.A)C +(dditionally)-5.508 E 3.008(,m)-.65 G .509 +(essages already in the queue can be quarantined or unquarantined us-) +-3.008 F(ing the ne)117 381.6 Q(w)-.25 E F02.5 E F1 (\215ag to sendmail.)2.5 E -.15(Fo)5 G 2.5(re).15 G(xample,)-2.65 E -(sendmail -Qreason -q[!][I|R|S][matchstring])157 514.8 Q .875(Quarantin\ +(sendmail -Qreason -q[!][I|R|S][matchstring])157 397.8 Q .875(Quarantin\ es the normal queue items matching the criteria speci\214ed by the)117 -531 R F0(-q[!][I|R|S][match-)3.374 E(string])117 543 Q F1 +414 R F0(-q[!][I|R|S][match-)3.374 E(string])117 426 Q F1 (using the reason gi)2.5 E -.15(ve)-.25 G 2.5(no).15 G 2.5(nt)-2.5 G(he) -2.5 E F02.5 E F1 2.5(\215ag. Lik)2.5 F -.25(ew)-.1 G(ise,).25 E -(sendmail -qQ -Q[reason] -q[!][I|R|S|Q][matchstring])157 559.2 Q 1.164(\ +(sendmail -qQ -Q[reason] -q[!][I|R|S|Q][matchstring])157 442.2 Q 1.164(\ Change the quarantine reason for the quarantined items matching the cri\ -teria speci\214ed by the)117 575.4 R F0(-q[!][I|R|S|Q][matchstring])117 -587.4 Q F1(using the reason gi)2.5 E -.15(ve)-.25 G 2.5(no).15 G 2.5(nt) +teria speci\214ed by the)117 458.4 R F0(-q[!][I|R|S|Q][matchstring])117 +470.4 Q F1(using the reason gi)2.5 E -.15(ve)-.25 G 2.5(no).15 G 2.5(nt) -2.5 G(he)-2.5 E F02.5 E F1 2.5(\215ag. If)2.5 F (there is no reason,)2.5 E .757(unquarantine the matching items and mak) -119.5 599.4 R 3.257(et)-.1 G .757(hem normal queue items.)-3.257 F .757 +119.5 482.4 R 3.257(et)-.1 G .757(hem normal queue items.)-3.257 F .757 (Note that the)5.757 F F0(\255qQ)3.257 E F1(\215ag)3.257 E(tells sendma\ -il to operate on quarantined items instead of normal items.)117 611.4 Q -F0 2.5(2.4. Disk)87 635.4 R(Based Connection Inf)2.5 E(ormation)-.25 E -F2(Sendmail)127 651.6 Q F1 .596(stores a lar)3.096 F .597 +il to operate on quarantined items instead of normal items.)117 494.4 Q +F0 2.5(2.4. Disk)87 518.4 R(Based Connection Inf)2.5 E(ormation)-.25 E +F2(Sendmail)127 534.6 Q F1 .596(stores a lar)3.096 F .597 (ge amount of information about each remote system it has connected to) --.18 F .003(in memory)102 663.6 R 2.503(.I)-.65 G 2.503(ti)-2.503 G +-.18 F .003(in memory)102 546.6 R 2.503(.I)-.65 G 2.503(ti)-2.503 G 2.503(sp)-2.503 G .002(ossible to preserv)-2.503 F 2.502(es)-.15 G .002 (ome of this information on disk as well, by using the)-2.502 F F0 -(HostSta-)2.502 E(tusDir)102 675.6 Q(ectory)-.18 E F1 .229 +(HostSta-)2.502 E(tusDir)102 558.6 Q(ectory)-.18 E F1 .229 (option, so that it may be shared between se)2.729 F -.15(ve)-.25 G .229 (ral in).15 F -.2(vo)-.4 G .23(cations of).2 F F2(sendmail)2.73 E F1 5.23(.T)C .23(his allo)-5.23 F(ws)-.25 E .831(mail to be queued immedia\ tely or skipped during a queue run if there has been a recent f)102 -687.6 R .831(ailure in)-.1 F .371(connecting to a remote machine.)102 -699.6 R .371 +570.6 R .831(ailure in)-.1 F .371(connecting to a remote machine.)102 +582.6 R .371 (Note: information about a remote system is stored in a \214le whose) 5.371 F .694(pathname consists of the components of the hostname in re) -102 711.6 R -.15(ve)-.25 G .693(rse order).15 F 5.693(.F)-.55 G .693 -(or e)-5.843 F .693(xample, the informa-)-.15 F 1.102(tion for)102 723.6 +102 594.6 R -.15(ve)-.25 G .693(rse order).15 F 5.693(.F)-.55 G .693 +(or e)-5.843 F .693(xample, the informa-)-.15 F 1.102(tion for)102 606.6 R F0(host.example.com)3.602 E F1 1.102(is stored in)3.602 F F0 (com./example./host)3.602 E F1 6.103(.F)C 1.103(or top-le)-6.253 F -.15 (ve)-.25 G 3.603(ld).15 G 1.103(omains lik)-3.603 F(e)-.1 E F0(com)3.603 -E F1(this)3.603 E 0 Cg EP +E F1(this)3.603 E 1.382(can create a lar)102 618.6 R 1.381 +(ge number of subdirectories which on some \214lesystems can e)-.18 F +1.381(xhaust some limits.)-.15 F(Moreo)102 630.6 Q -.15(ve)-.15 G 1.305 +-.4(r, t).15 H .505(he performance of lookups in directory with thousan\ +ds of entries can be f).4 F .506(airly slo)-.1 F 3.006(wd)-.25 G(e-) +-3.006 E(pending on the \214lesystem implementation.)102 642.6 Q 1.439 +(Additionally enabling)127 658.8 R F0(SingleThr)3.939 E(eadDeli)-.18 E +-.1(ve)-.1 G(ry).1 E F1 1.439(has the added ef)3.939 F 1.439 +(fect of single-threading mail)-.25 F(deli)102 670.8 Q -.15(ve)-.25 G +1.61(ry to a destination.).15 F 1.611 +(This can be quite helpful if the remote machine is running an SMTP)6.61 +F(serv)102 682.8 Q 1.011(er that is easily o)-.15 F -.15(ve)-.15 G 1.011 +(rloaded or cannot accept more than a single connection at a time, b).15 +F 1.01(ut can)-.2 F .458 +(cause some messages to be punted to a future queue run.)102 694.8 R +.458(It also applies to)5.458 F F2(all)2.958 E F1 .458 +(hosts, so setting this)2.958 F .282(because you ha)102 706.8 R .582 +-.15(ve o)-.2 H .281(ne machine on site that runs some softw).15 F .281 +(are that is easily o)-.1 F -.15(ve)-.15 G .281(rrun can cause mail).15 +F .315(to other hosts to be slo)102 718.8 R .315(wed do)-.25 F 2.815 +(wn. If)-.25 F .315(this option is set, you probably w)2.815 F .315 +(ant to set the)-.1 F F0(MinQueueAge)2.815 E 0 Cg EP %%Page: 19 15 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-19)195.86 E/F1 10/Times-Roman@0 SF 1.382(can create a lar)102 96 -R 1.381(ge number of subdirectories which on some \214lesystems can e) --.18 F 1.381(xhaust some limits.)-.15 F(Moreo)102 108 Q -.15(ve)-.15 G -2.432 -.4(r, t).15 H 1.632(he performance of lookups in directory with \ -thousands of entries can be f).4 F 1.633(airly slo)-.1 F(w)-.25 E -(depending on the \214lesystem implementation.)102 120 Q 1.439 -(Additionally enabling)127 136.2 R F0(SingleThr)3.939 E(eadDeli)-.18 E --.1(ve)-.1 G(ry).1 E F1 1.439(has the added ef)3.939 F 1.439 -(fect of single-threading mail)-.25 F(deli)102 148.2 Q -.15(ve)-.25 G -1.61(ry to a destination.).15 F 1.611 -(This can be quite helpful if the remote machine is running an SMTP)6.61 -F(serv)102 160.2 Q 1.011(er that is easily o)-.15 F -.15(ve)-.15 G 1.011 -(rloaded or cannot accept more than a single connection at a time, b).15 -F 1.01(ut can)-.2 F .458 -(cause some messages to be punted to a future queue run.)102 172.2 R -.458(It also applies to)5.458 F/F2 10/Times-Italic@0 SF(all)2.958 E F1 -.458(hosts, so setting this)2.958 F .282(because you ha)102 184.2 R .582 --.15(ve o)-.2 H .281(ne machine on site that runs some softw).15 F .281 -(are that is easily o)-.1 F -.15(ve)-.15 G .281(rrun can cause mail).15 -F .315(to other hosts to be slo)102 196.2 R .315(wed do)-.25 F 2.815 -(wn. If)-.25 F .315(this option is set, you probably w)2.815 F .315 -(ant to set the)-.1 F F0(MinQueueAge)2.815 E F1 .872 -(option as well and run the queue f)102 208.2 R .871 +(SMM:08-19)195.86 E/F1 10/Times-Roman@0 SF .872 +(option as well and run the queue f)102 96 R .871 (airly frequently; this w)-.1 F .871 -(ay jobs that are skipped because another)-.1 F F2(sendmail)102 220.2 Q -F1 .363(is talking to the same host will be tried ag)2.863 F .364 -(ain quickly rather than being delayed for a long)-.05 F(time.)102 232.2 -Q 1.099 +(ay jobs that are skipped because another)-.1 F/F2 10/Times-Italic@0 SF +(sendmail)102 108 Q F1 .363 +(is talking to the same host will be tried ag)2.863 F .364 +(ain quickly rather than being delayed for a long)-.05 F(time.)102 120 Q +1.099 (The disk based host information is stored in a subdirectory of the)127 -248.4 R F0(mqueue)3.598 E F1 1.098(directory called)3.598 F F0 -(.hoststat)102 262.4 Q/F3 7/Times-Roman@0 SF(7)-4 I F1 6.749(.R)4 K(emo) +136.2 R F0(mqueue)3.598 E F1 1.098(directory called)3.598 F F0 +(.hoststat)102 150.2 Q/F3 7/Times-Roman@0 SF(7)-4 I F1 6.749(.R)4 K(emo) -6.749 E 1.749(ving this directory and its subdirectories has an ef)-.15 F 1.75(fect similar to the)-.25 F F2(pur)4.25 E -.1(ge)-.37 G(stat).1 E -F1 1.215(command and is completely safe.)102 274.4 R(Ho)6.215 E(we)-.25 +F1 1.215(command and is completely safe.)102 162.2 R(Ho)6.215 E(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F2(pur)4.115 E -.1(ge)-.37 G(stat).1 E F1 1.215(only remo)3.715 F -.15(ve)-.15 G 3.715(se).15 G 1.215(xpired \(T) --3.865 F(imeout.hoststatus\))-.35 E 3.539(data. The)102 286.4 R 1.039 -(information in these directories can be perused with the)3.539 F F2 -(hoststat)3.54 E F1 1.04(command, which will)3.54 F .065(indicate the h\ -ost name, the last access, and the status of that access.)102 298.4 R -.064(An asterisk in the left most col-)5.065 F(umn indicates that a)102 -310.4 Q F2(sendmail)2.5 E F1(process currently has the host lock)2.5 E -(ed for mail deli)-.1 E -.15(ve)-.25 G(ry).15 E(.)-.65 E .53 -(The disk based connection information is treated the same w)127 326.6 R +-3.865 F(imeout.hoststatus\))-.35 E 2.562(data. The)102 174.2 R .063 +(information in these directories can be perused with the)2.562 F F2 +(hoststat)2.563 E F1 .063(command, which will in-)2.563 F .474 +(dicate the host name, the last access, and the status of that access.) +102 186.2 R .474(An asterisk in the left most col-)5.474 F +(umn indicates that a)102 198.2 Q F2(sendmail)2.5 E F1 +(process currently has the host lock)2.5 E(ed for mail deli)-.1 E -.15 +(ve)-.25 G(ry).15 E(.)-.65 E .53 +(The disk based connection information is treated the same w)127 214.4 R .53(ay as memory based connection)-.1 F .536 -(information for the purpose of timeouts.)102 338.6 R .536(By def)5.536 +(information for the purpose of timeouts.)102 226.4 R .536(By def)5.536 F .536(ault, information about host f)-.1 F .536(ailures is v)-.1 F .536 -(alid for 30)-.25 F 2.5(minutes. This)102 350.6 R +(alid for 30)-.25 F 2.5(minutes. This)102 238.4 R (can be adjusted with the)2.5 E F0 -.18(Ti)2.5 G(meout.hoststatus).18 E F1(option.)2.5 E 1.51 -(The connection information stored on disk may be e)127 366.8 R 1.51 +(The connection information stored on disk may be e)127 254.6 R 1.51 (xpired at an)-.15 F 4.01(yt)-.15 G 1.51(ime with the)-4.01 F F2(pur) -4.01 E -.1(ge)-.37 G(stat).1 E F1 2.093(command or by in)102 378.8 R -.2 +4.01 E -.1(ge)-.37 G(stat).1 E F1 2.093(command or by in)102 266.6 R -.2 (vo)-.4 G 2.092(king sendmail with the).2 F F0(\255bH)4.592 E F1 4.592 (switch. The)4.592 F 2.092(connection information may be)4.592 F(vie)102 -390.8 Q(wed with the)-.25 E F2(hoststat)2.5 E F1(command or by in)2.5 E +278.6 Q(wed with the)-.25 E F2(hoststat)2.5 E F1(command or by in)2.5 E -.2(vo)-.4 G(king sendmail with the).2 E F0(\255bh)2.5 E F1(switch.)2.5 -E F0 2.5(2.5. The)87 414.8 R(Ser)2.5 E(vice Switch)-.1 E F1 1.416(The i\ +E F0 2.5(2.5. The)87 302.6 R(Ser)2.5 E(vice Switch)-.1 E F1 1.416(The i\ mplementation of certain system services such as host and user name loo\ -kup is con-)127 431 R 1.322(trolled by the service switch.)102 443 R +kup is con-)127 318.8 R 1.322(trolled by the service switch.)102 330.8 R 1.321(If the host operating system supports such a switch, and sendmail) -6.322 F(kno)102 455 Q .383(ws about it,)-.25 F F2(sendmail)2.883 E F1 +6.322 F(kno)102 342.8 Q .383(ws about it,)-.25 F F2(sendmail)2.883 E F1 .383(will use the nati)2.883 F .683 -.15(ve ve)-.25 H 2.883 (rsion. Ultrix,).15 F .384(Solaris, and DEC OSF/1 are e)2.883 F(xamples) --.15 E(of such systems)102 469 Q F3(8)-4 I F1(.)4 I .88(If the underlyi\ -ng operating system does not support a service switch \(e.g., SunOS 4.X\ -, HP-)127 485.2 R .212(UX, BSD\) then)102 497.2 R F2(sendmail)2.712 E F1 +-.15 E(of such systems)102 356.8 Q F3(8)-4 I F1(.)4 I .88(If the underl\ +ying operating system does not support a service switch \(e.g., SunOS 4\ +.X, HP-)127 373 R .212(UX, BSD\) then)102 385 R F2(sendmail)2.712 E F1 .212(will pro)2.712 F .212(vide a stub implementation.)-.15 F(The)5.211 E F0(Ser)2.711 E(viceSwitchFile)-.1 E F1 .211(option points)2.711 F .937 -(to the name of a \214le that has the service de\214nitions.)102 509.2 R +(to the name of a \214le that has the service de\214nitions.)102 397 R .937(Each line has the name of a service and the)5.937 F -(possible implementations of that service.)102 521.2 Q -.15(Fo)5 G 2.5 -(re).15 G(xample, the \214le:)-2.65 E 12.94(hosts dns)142 537.4 R -(\214les nis)2.5 E 6.84(aliases \214les)142 549.4 R(nis)2.5 E .329 -(will ask)102 565.6 R F2(sendmail)2.829 E F1 .328 +(possible implementations of that service.)102 409 Q -.15(Fo)5 G 2.5(re) +.15 G(xample, the \214le:)-2.65 E 12.94(hosts dns)142 425.2 R +(\214les nis)2.5 E 6.84(aliases \214les)142 437.2 R(nis)2.5 E .329 +(will ask)102 453.4 R F2(sendmail)2.829 E F1 .328 (to look for hosts in the Domain Name System \214rst.)2.829 F .328 (If the requested host name is)5.328 F .379 -(not found, it tries local \214les, and if that f)102 577.6 R .379 +(not found, it tries local \214les, and if that f)102 465.4 R .379 (ails it tries NIS.)-.1 F(Similarly)5.379 E 2.879(,w)-.65 G .379 (hen looking for aliases it will)-2.879 F -(try the local \214les \214rst follo)102 589.6 Q(wed by NIS.)-.25 E .494 -(Notice: since)127 605.8 R F2(sendmail)2.994 E F1 .493 +(try the local \214les \214rst follo)102 477.4 Q(wed by NIS.)-.25 E .494 +(Notice: since)127 493.6 R F2(sendmail)2.994 E F1 .493 (must access MX records for correct operation, it will use DNS if it is) -2.993 F(con\214gured in the)102 617.8 Q F0(Ser)2.5 E(viceSwitchFile)-.1 +2.993 F(con\214gured in the)102 505.6 Q F0(Ser)2.5 E(viceSwitchFile)-.1 E F1 2.5(\214le. Hence)2.5 F(an entry lik)2.5 E(e)-.1 E 12.94 -(hosts \214les)142 634 R(dns)2.5 E(will not a)102 650.2 Q -.2(vo)-.2 G +(hosts \214les)142 521.8 R(dns)2.5 E(will not a)102 538 Q -.2(vo)-.2 G (id DNS lookups e).2 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(fah)-2.5 G -(ost can be found in /etc/hosts.)-2.5 E .32 LW 76 659.8 72 659.8 DL 80 -659.8 76 659.8 DL 84 659.8 80 659.8 DL 88 659.8 84 659.8 DL 92 659.8 88 -659.8 DL 96 659.8 92 659.8 DL 100 659.8 96 659.8 DL 104 659.8 100 659.8 -DL 108 659.8 104 659.8 DL 112 659.8 108 659.8 DL 116 659.8 112 659.8 DL -120 659.8 116 659.8 DL 124 659.8 120 659.8 DL 128 659.8 124 659.8 DL 132 -659.8 128 659.8 DL 136 659.8 132 659.8 DL 140 659.8 136 659.8 DL 144 -659.8 140 659.8 DL 148 659.8 144 659.8 DL 152 659.8 148 659.8 DL 156 -659.8 152 659.8 DL 160 659.8 156 659.8 DL 164 659.8 160 659.8 DL 168 -659.8 164 659.8 DL 172 659.8 168 659.8 DL 176 659.8 172 659.8 DL 180 -659.8 176 659.8 DL 184 659.8 180 659.8 DL 188 659.8 184 659.8 DL 192 -659.8 188 659.8 DL 196 659.8 192 659.8 DL 200 659.8 196 659.8 DL 204 -659.8 200 659.8 DL 208 659.8 204 659.8 DL 212 659.8 208 659.8 DL 216 -659.8 212 659.8 DL/F4 5/Times-Roman@0 SF(7)93.6 670.2 Q/F5 8 +(ost can be found in /etc/hosts.)-2.5 E .017(Note: in contrast to the) +127 554.2 R F2(sendmail)2.518 E F1 .018 +(stub implementation some operating systems do not preserv)2.518 F(e) +-.15 E(temporary f)102 566.2 Q 2.5(ailures. F)-.1 F(or e)-.15 E +(xample, if DNS returns a TR)-.15 E(Y_A)-.65 E +(GAIN status for this setup)-.4 E 12.94(hosts \214les)142 582.4 R +(dns myhostname)2.5 E -.2(bu)102 598.6 S 3.435(tm).2 G .935 +(yhostname does not \214nd the requested entry)-3.435 F 3.435(,t)-.65 G +.934(hen a permanent error is returned to)-3.435 F F2(sendmail)3.434 E +F1(which ob)102 610.6 Q(viously can cause problems, e.g., an immediate \ +bounce instead of a deferral.)-.15 E .088 +(Service switches are not completely inte)127 626.8 R 2.588(grated. F) +-.15 F .088(or e)-.15 F .088(xample, despite the f)-.15 F .088 +(act that the host en-)-.1 F .849(try listed in the abo)102 638.8 R +1.149 -.15(ve ex)-.15 H .849 +(ample speci\214es to look in NIS, on SunOS this w).15 F(on')-.1 E 3.348 +(th)-.18 G .848(appen because the)-3.348 F(system implementation of)102 +650.8 Q F2 -.1(ge)2.5 G(thostbyname).1 E F1(\(3\) doesn')1.666 E 2.5(tu) +-.18 G(nderstand this.)-2.5 E .32 LW 76 660.4 72 660.4 DL 80 660.4 76 +660.4 DL 84 660.4 80 660.4 DL 88 660.4 84 660.4 DL 92 660.4 88 660.4 DL +96 660.4 92 660.4 DL 100 660.4 96 660.4 DL 104 660.4 100 660.4 DL 108 +660.4 104 660.4 DL 112 660.4 108 660.4 DL 116 660.4 112 660.4 DL 120 +660.4 116 660.4 DL 124 660.4 120 660.4 DL 128 660.4 124 660.4 DL 132 +660.4 128 660.4 DL 136 660.4 132 660.4 DL 140 660.4 136 660.4 DL 144 +660.4 140 660.4 DL 148 660.4 144 660.4 DL 152 660.4 148 660.4 DL 156 +660.4 152 660.4 DL 160 660.4 156 660.4 DL 164 660.4 160 660.4 DL 168 +660.4 164 660.4 DL 172 660.4 168 660.4 DL 176 660.4 172 660.4 DL 180 +660.4 176 660.4 DL 184 660.4 180 660.4 DL 188 660.4 184 660.4 DL 192 +660.4 188 660.4 DL 196 660.4 192 660.4 DL 200 660.4 196 660.4 DL 204 +660.4 200 660.4 DL 208 660.4 204 660.4 DL 212 660.4 208 660.4 DL 216 +660.4 212 660.4 DL/F4 5/Times-Roman@0 SF(7)93.6 670.8 Q/F5 8 /Times-Roman@0 SF(This is the usual v)3.2 I(alue of the)-.2 E/F6 8 /Times-Bold@0 SF(HostStatusDir)2 E(ectory)-.144 E F5 (option; it can, of course, go an)2 E(ywhere you lik)-.12 E 2(ei)-.08 G -2(ny)-2 G(our \214lesystem.)-2 E F4(8)93.6 683.8 Q F5 .108 +2(ny)-2 G(our \214lesystem.)-2 E F4(8)93.6 684.4 Q F5 .108 (HP-UX 10 has service switch support, b)3.2 J .108 (ut since the APIs are apparently not a)-.16 F -.2(va)-.16 G .107 (ilable in the libraries).2 F/F7 8/Times-Italic@0 SF(sendmail)2.107 E F5 -.107(does not use the)2.107 F(nati)72 696.6 Q .24 -.12(ve s)-.2 H +.107(does not use the)2.107 F(nati)72 697.2 Q .24 -.12(ve s)-.2 H (ervice switch in this release.).12 E 0 Cg EP %%Page: 20 16 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-20 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.269 -(Service switches are not completely inte)127 96 R 3.769(grated. F)-.15 -F 1.269(or e)-.15 F 1.269(xample, despite the f)-.15 F 1.27 -(act that the host)-.1 F .294(entry listed in the abo)102 108 R .594 --.15(ve ex)-.15 H .293 -(ample speci\214es to look in NIS, on SunOS this w).15 F(on')-.1 E 2.793 -(th)-.18 G .293(appen because the)-2.793 F(system implementation of)102 -120 Q/F2 10/Times-Italic@0 SF -.1(ge)2.5 G(thostbyname).1 E F1 -(\(3\) doesn')1.666 E 2.5(tu)-.18 G(nderstand this.)-2.5 E F0 2.5 -(2.6. The)87 144 R(Alias Database)2.5 E F1 2.074(After recipient addres\ -ses are read from the SMTP connection or command line the)127 160.2 R +(Installation and Operation Guide)2.5 E 2.5(2.6. The)87 96 R +(Alias Database)2.5 E/F1 10/Times-Roman@0 SF 2.074(After recipient addr\ +esses are read from the SMTP connection or command line the)127 112.2 R 4.574(ya)-.15 G(re)-4.574 E .6(parsed by ruleset 0, which must resolv) -102 172.2 R 3.1(et)-.15 G 3.099(oa{)-3.1 G F2(mailer)-3.099 E F1(,)A F2 -(host)3.099 E F1(,)A F2(addr)3.099 E(ess)-.37 E F1 3.099(}t)C 3.099 -(riple. If)-3.099 F .599(the \215ags selected by)3.099 F(the)102 184.2 Q -F2(mailer)3.099 E F1 .599(include the)3.099 F F0(A)3.099 E F1 .599 -(\(aliasable\) \215ag, the)3.099 F F2(addr)3.099 E(ess)-.37 E F1 .6 -(part of the triple is look)3.099 F .6(ed up as the k)-.1 F .9 -.15 -(ey \()-.1 H(i.e.,).15 E 1.046 -(the left hand side\) in the alias database.)102 196.2 R 1.045 +102 124.2 R 3.1(et)-.15 G 3.099(oa{)-3.1 G/F2 10/Times-Italic@0 SF +(mailer)-3.099 E F1(,)A F2(host)3.099 E F1(,)A F2(addr)3.099 E(ess)-.37 +E F1 3.099(}t)C 3.099(riple. If)-3.099 F .599(the \215ags selected by) +3.099 F(the)102 136.2 Q F2(mailer)3.099 E F1 .599(include the)3.099 F F0 +(A)3.099 E F1 .599(\(aliasable\) \215ag, the)3.099 F F2(addr)3.099 E +(ess)-.37 E F1 .6(part of the triple is look)3.099 F .6(ed up as the k) +-.1 F .9 -.15(ey \()-.1 H(i.e.,).15 E 1.046 +(the left hand side\) in the alias database.)102 148.2 R 1.045 (If there is a match, the address is deleted from the send)6.045 F .776 (queue and all addresses on the right hand side of the alias are added \ -in place of the alias that w)102 208.2 R(as)-.1 E 2.683(found. This)102 -220.2 R .183(is a recursi)2.683 F .483 -.15(ve o)-.25 H .183(peration, \ +in place of the alias that w)102 160.2 R(as)-.1 E 2.683(found. This)102 +172.2 R .183(is a recursi)2.683 F .483 -.15(ve o)-.25 H .183(peration, \ so aliases found in the right hand side of the alias are similarly).15 F --.15(ex)102 232.2 S(panded.).15 E 3.718(The alias database e)127 248.4 R +-.15(ex)102 184.2 S(panded.).15 E 3.718(The alias database e)127 200.4 R 3.718(xists in tw)-.15 F 6.218(of)-.1 G 6.218(orms. One)-6.218 F 3.718 (is a te)6.218 F 3.718(xt form, maintained in the \214le)-.15 F F2 -(/etc/mail/aliases.)102 260.4 Q F1(The aliases are of the form)5 E -(name: name1, name2, ...)142 276.6 Q -(Only local names may be aliased; e.g.,)102 292.8 Q(eric@prep.ai.MIT)142 -309 Q(.EDU: eric@CS.Berk)-.74 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E 1.088 -(will not ha)102 327.2 R 1.388 -.15(ve t)-.2 H 1.088(he desired ef).15 F +(/etc/mail/aliases.)102 212.4 Q F1(The aliases are of the form)5 E +(name: name1, name2, ...)142 228.6 Q +(Only local names may be aliased; e.g.,)102 244.8 Q(eric@prep.ai.MIT)142 +261 Q(.EDU: eric@CS.Berk)-.74 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E 1.088 +(will not ha)102 279.2 R 1.388 -.15(ve t)-.2 H 1.088(he desired ef).15 F 1.088(fect \(e)-.25 F 1.088(xcept on prep.ai.MIT)-.15 F 1.088 (.EDU, and the)-.74 F 3.588(yp)-.15 G 1.088(robably don')-3.588 F 3.587 (tw)-.18 G 1.087(ant me\))-3.687 F/F3 7/Times-Roman@0 SF(9)-4 I F1(.)4 I -.986(Aliases may be continued by starting an)102 339.2 R 3.486(yc)-.15 G +.986(Aliases may be continued by starting an)102 291.2 R 3.486(yc)-.15 G .986(ontinuation lines with a space or a tab or by putting a)-3.486 F -.776(backslash directly before the ne)102 351.2 R 3.276(wline. Blank) +.776(backslash directly before the ne)102 303.2 R 3.276(wline. Blank) -.25 F .776(lines and lines be)3.276 F .776 -(ginning with a sharp sign \(\231#\232\) are)-.15 F(comments.)102 363.2 -Q .65(The second form is processed by the)127 381.4 R F2(ndbm)3.15 E F1 +(ginning with a sharp sign \(\231#\232\) are)-.15 F(comments.)102 315.2 +Q .65(The second form is processed by the)127 333.4 R F2(ndbm)3.15 E F1 (\(3\))1.666 E F3(10)-4 I F1 .65(or the Berk)3.15 4 N(ele)-.1 E 3.15(yD) -.15 G 3.15(Bl)-3.15 G(ibrary)-3.15 E 5.651(.T)-.65 G .651 -(his form is in)-5.651 F .794(the \214le)102 393.4 R F2 +(his form is in)-5.651 F .794(the \214le)102 345.4 R F2 (/etc/mail/aliases.db)3.294 E F1 .794(\(if using NEWDB\) or)3.294 F F2 (/etc/mail/aliases.dir)3.294 E F1(and)3.294 E F2(/etc/mail/aliases.pa) -3.294 E(g)-.1 E F1(\(if)3.294 E 1.126(using NDBM\).)102 405.4 R 1.126 +3.294 E(g)-.1 E F1(\(if)3.294 E 1.126(using NDBM\).)102 357.4 R 1.126 (This is the form that)6.126 F F2(sendmail)3.627 E F1 1.127 (actually uses to resolv)3.627 F 3.627(ea)-.15 G 3.627(liases. This) --3.627 F 1.127(technique is)3.627 F(used to impro)102 417.4 Q .3 -.15 +-3.627 F 1.127(technique is)3.627 F(used to impro)102 369.4 Q .3 -.15 (ve p)-.15 H(erformance.).15 E (The control of search order is actually set by the service switch.)127 -433.6 Q(Essentially)5 E 2.5(,t)-.65 G(he entry)-2.5 E 2.5(OA)142 449.8 S -(liasFile=switch:aliases)-2.5 E .927(is al)102 466 R -.1(wa)-.1 G .927(\ +385.6 Q(Essentially)5 E 2.5(,t)-.65 G(he entry)-2.5 E 2.5(OA)142 401.8 S +(liasFile=switch:aliases)-2.5 E .927(is al)102 418 R -.1(wa)-.1 G .927(\ ys added as the \214rst alias entry; also, the \214rst alias \214le nam\ e without a class \(e.g., without).1 F .268(\231nis:\232 on the front\)\ - will be used as the name of the \214le for a `)102 478 R(`\214les')-.74 + will be used as the name of the \214le for a `)102 430 R(`\214les')-.74 E 2.769('e)-.74 G .269(ntry in the aliases switch.)-2.769 F -.15(Fo) -5.269 G(r).15 E -.15(ex)102 490 S -(ample, if the con\214guration \214le contains).15 E 2.5(OA)142 506.2 S +5.269 G(r).15 E -.15(ex)102 442 S +(ample, if the con\214guration \214le contains).15 E 2.5(OA)142 458.2 S (liasFile=/etc/mail/aliases)-2.5 E(and the service switch contains)102 -522.4 Q 6.84(aliases nis)142 538.6 R(\214les nisplus)2.5 E 1.164(then a\ +474.4 Q 6.84(aliases nis)142 490.6 R(\214les nisplus)2.5 E 1.164(then a\ liases will \214rst be searched in the NIS database, then in /etc/mail/\ -aliases, then in the NIS+)102 554.8 R(database.)102 566.8 Q -1.1(Yo)127 -583 S 2.5(uc)1.1 G(an also use)-2.5 E/F4 9/Times-Roman@0 SF(NIS)2.5 E F1 +aliases, then in the NIS+)102 506.8 R(database.)102 518.8 Q -1.1(Yo)127 +535 S 2.5(uc)1.1 G(an also use)-2.5 E/F4 9/Times-Roman@0 SF(NIS)2.5 E F1 (-based alias \214les.)A -.15(Fo)5 G 2.5(re).15 G -(xample, the speci\214cation:)-2.65 E 2.5(OA)142 599.2 S -(liasFile=/etc/mail/aliases)-2.5 E 2.5(OA)142 611.2 S +(xample, the speci\214cation:)-2.65 E 2.5(OA)142 551.2 S +(liasFile=/etc/mail/aliases)-2.5 E 2.5(OA)142 563.2 S (liasFile=nis:mail.aliases@my)-2.5 E(.nis.domain)-.65 E .143(will \214r\ st search the /etc/mail/aliases \214le and then the map named \231mail.\ -aliases\232 in \231my)102 627.4 R(.nis.domain\232.)-.65 E -.8(Wa)102 -639.4 S .59(rning: if you b).8 F .59(uild your o)-.2 F(wn)-.25 E F4(NIS) +aliases\232 in \231my)102 579.4 R(.nis.domain\232.)-.65 E -.8(Wa)102 +591.4 S .59(rning: if you b).8 F .59(uild your o)-.2 F(wn)-.25 E F4(NIS) 3.09 E F1 .589(-based alias \214les, be sure to pro)B .589(vide the)-.15 F F03.089 E F1 .589(\215ag to)3.089 F F2(mak)3.089 E(edbm)-.1 E F1 -(\(8\))A .159(to map upper case letters in the k)102 651.4 R -.15(ey)-.1 +(\(8\))A .159(to map upper case letters in the k)102 603.4 R -.15(ey)-.1 G 2.659(st).15 G 2.659(ol)-2.659 G -.25(ow)-2.659 G .159 (er case; otherwise, aliases with upper case letters in their).25 F -(names w)102 663.4 Q(on')-.1 E 2.5(tm)-.18 G(atch incoming addresses.) --2.5 E .32 LW 76 673 72 673 DL 80 673 76 673 DL 84 673 80 673 DL 88 673 -84 673 DL 92 673 88 673 DL 96 673 92 673 DL 100 673 96 673 DL 104 673 -100 673 DL 108 673 104 673 DL 112 673 108 673 DL 116 673 112 673 DL 120 -673 116 673 DL 124 673 120 673 DL 128 673 124 673 DL 132 673 128 673 DL -136 673 132 673 DL 140 673 136 673 DL 144 673 140 673 DL 148 673 144 673 -DL 152 673 148 673 DL 156 673 152 673 DL 160 673 156 673 DL 164 673 160 -673 DL 168 673 164 673 DL 172 673 168 673 DL 176 673 172 673 DL 180 673 -176 673 DL 184 673 180 673 DL 188 673 184 673 DL 192 673 188 673 DL 196 -673 192 673 DL 200 673 196 673 DL 204 673 200 673 DL 208 673 204 673 DL -212 673 208 673 DL 216 673 212 673 DL/F5 5/Times-Roman@0 SF(9)93.6 683.4 -Q/F6 8/Times-Roman@0 SF(Actually)3.2 I 2(,a)-.52 G .24 -.12(ny m)-2 H -(ailer that has the `).12 E 1.776 -.888(A' m)-.64 H(ailer \215ag set wi\ -ll permit aliasing; this is normally limited to the local mailer).888 E -(.)-.44 E F5(10)93.6 697 Q F6(The)3.2 I/F7 8/Times-Italic@0 SF(gdbm)2 E -F6(package does not w)2 E(ork.)-.08 E 0 Cg EP +(names w)102 615.4 Q(on')-.1 E 2.5(tm)-.18 G(atch incoming addresses.) +-2.5 E(Additional \215ags can be added after the colon e)127 631.6 Q +(xactly lik)-.15 E 2.5(ea)-.1 G F0(K)A F1(line \212 for e)2.5 E(xample:) +-.15 E 2.5(OA)142 647.8 S(liasFile=nis:\255N mail.aliases@my)-2.5 E +(.nis.domain)-.65 E(will search the appropriate NIS map and al)102 664 Q +-.1(wa)-.1 G(ys include null bytes in the k).1 E -.15(ey)-.1 G 5(.A)-.5 +G(lso:)-5 E .32 LW 76 673.6 72 673.6 DL 80 673.6 76 673.6 DL 84 673.6 80 +673.6 DL 88 673.6 84 673.6 DL 92 673.6 88 673.6 DL 96 673.6 92 673.6 DL +100 673.6 96 673.6 DL 104 673.6 100 673.6 DL 108 673.6 104 673.6 DL 112 +673.6 108 673.6 DL 116 673.6 112 673.6 DL 120 673.6 116 673.6 DL 124 +673.6 120 673.6 DL 128 673.6 124 673.6 DL 132 673.6 128 673.6 DL 136 +673.6 132 673.6 DL 140 673.6 136 673.6 DL 144 673.6 140 673.6 DL 148 +673.6 144 673.6 DL 152 673.6 148 673.6 DL 156 673.6 152 673.6 DL 160 +673.6 156 673.6 DL 164 673.6 160 673.6 DL 168 673.6 164 673.6 DL 172 +673.6 168 673.6 DL 176 673.6 172 673.6 DL 180 673.6 176 673.6 DL 184 +673.6 180 673.6 DL 188 673.6 184 673.6 DL 192 673.6 188 673.6 DL 196 +673.6 192 673.6 DL 200 673.6 196 673.6 DL 204 673.6 200 673.6 DL 208 +673.6 204 673.6 DL 212 673.6 208 673.6 DL 216 673.6 212 673.6 DL/F5 5 +/Times-Roman@0 SF(9)93.6 684 Q/F6 8/Times-Roman@0 SF(Actually)3.2 I 2 +(,a)-.52 G .24 -.12(ny m)-2 H(ailer that has the `).12 E 1.776 -.888 +(A' m)-.64 H(ailer \215ag set will permit aliasing; this is normally li\ +mited to the local mailer).888 E(.)-.44 E F5(10)93.6 697.6 Q F6(The)3.2 +I/F7 8/Times-Italic@0 SF(gdbm)2 E F6(package does not w)2 E(ork.)-.08 E +0 Cg EP %%Page: 21 17 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-21)195.86 E/F1 10/Times-Roman@0 SF -(Additional \215ags can be added after the colon e)127 96 Q(xactly lik) --.15 E 2.5(ea)-.1 G F0(K)A F1(line \212 for e)2.5 E(xample:)-.15 E 2.5 -(OA)142 112.2 S(liasFile=nis:\255N mail.aliases@my)-2.5 E(.nis.domain) --.65 E(will search the appropriate NIS map and al)102 128.4 Q -.1(wa)-.1 -G(ys include null bytes in the k).1 E -.15(ey)-.1 G 5(.A)-.5 G(lso:)-5 E -2.5(OA)142 144.6 S(liasFile=nis:\255f mail.aliases@my)-2.5 E -(.nis.domain)-.65 E(will pre)102 160.8 Q -.15(ve)-.25 G -(nt sendmail from do).15 E(wncasing the k)-.25 E .3 -.15(ey b)-.1 H -(efore the alias lookup.).15 E F0 2.5(2.6.1. Reb)102 184.8 R -(uilding the alias database)-.2 E F1(The)142 201 Q/F2 10/Times-Italic@0 -SF(hash)3.08 E F1(or)3.08 E F2(dbm)3.08 E F1 -.15(ve)3.08 G .579 -(rsion of the database may be reb).15 F .579(uilt e)-.2 F .579 -(xplicitly by e)-.15 F -.15(xe)-.15 G .579(cuting the com-).15 F(mand) -117 213 Q(ne)157 229.2 Q -.1(wa)-.25 G(liases).1 E(This is equi)117 -245.4 Q -.25(va)-.25 G(lent to gi).25 E(ving)-.25 E F2(sendmail)2.5 E F1 -(the)2.5 E F0(\255bi)2.5 E F1(\215ag:)2.5 E(/usr/sbin/sendmail \255bi) -157 261.6 Q 1.77(If you ha)142 282 R 2.07 -.15(ve m)-.2 H 1.77 -(ultiple aliases databases speci\214ed, the).15 F F0(\255bi)4.27 E F1 -1.77(\215ag reb)4.27 F 1.77(uilds all the database)-.2 F -(types it understands \(for e)117 294 Q(xample, it can reb)-.15 E +(SMM:08-21)195.86 E/F1 10/Times-Roman@0 SF 2.5(OA)142 96 S +(liasFile=nis:\255f mail.aliases@my)-2.5 E(.nis.domain)-.65 E(will pre) +102 112.2 Q -.15(ve)-.25 G(nt sendmail from do).15 E(wncasing the k)-.25 +E .3 -.15(ey b)-.1 H(efore the alias lookup.).15 E F0 2.5(2.6.1. Reb)102 +136.2 R(uilding the alias database)-.2 E F1(The)142 152.4 Q/F2 10 +/Times-Italic@0 SF(hash)3.08 E F1(or)3.08 E F2(dbm)3.08 E F1 -.15(ve) +3.08 G .579(rsion of the database may be reb).15 F .579(uilt e)-.2 F +.579(xplicitly by e)-.15 F -.15(xe)-.15 G .579(cuting the com-).15 F +(mand)117 164.4 Q(ne)157 180.6 Q -.1(wa)-.25 G(liases).1 E(This is equi) +117 196.8 Q -.25(va)-.25 G(lent to gi).25 E(ving)-.25 E F2(sendmail)2.5 +E F1(the)2.5 E F0(\255bi)2.5 E F1(\215ag:)2.5 E +(/usr/sbin/sendmail \255bi)157 213 Q 1.77(If you ha)142 233.4 R 2.07 +-.15(ve m)-.2 H 1.77(ultiple aliases databases speci\214ed, the).15 F F0 +(\255bi)4.27 E F1 1.77(\215ag reb)4.27 F 1.77(uilds all the database)-.2 +F(types it understands \(for e)117 245.4 Q(xample, it can reb)-.15 E (uild NDBM databases b)-.2 E(ut not NIS databases\).)-.2 E F0 2.5 -(2.6.2. P)102 318 R(otential pr)-.2 E(oblems)-.18 E F1 1.131 +(2.6.2. P)102 269.4 R(otential pr)-.2 E(oblems)-.18 E F1 1.131 (There are a number of problems that can occur with the alias database.) -142 334.2 R(The)6.13 E 3.63(ya)-.15 G 1.13(ll result)-3.63 F 1.103 -(from a)117 346.2 R F2(sendmail)3.603 E F1 1.103 +142 285.6 R(The)6.13 E 3.63(ya)-.15 G 1.13(ll result)-3.63 F 1.103 +(from a)117 297.6 R F2(sendmail)3.603 E F1 1.103 (process accessing the DBM v)3.603 F 1.103 (ersion while it is only partially b)-.15 F 3.604(uilt. This)-.2 F(can) -3.604 E 1.249(happen under tw)117 358.2 R 3.749(oc)-.1 G 1.248(ircumsta\ -nces: One process accesses the database while another process is)-3.749 -F(reb)117 370.2 Q .518(uilding it, or the process reb)-.2 F .518 -(uilding the database dies \(due to being killed or a system crash\))-.2 -F(before completing the reb)117 382.2 Q(uild.)-.2 E .401 -(Sendmail has three techniques to try to relie)142 398.4 R .701 -.15 +3.604 E .107(happen under tw)117 309.6 R 2.606(oc)-.1 G .106(ircumstanc\ +es: One process accesses the database while another process is re-) +-2.606 F -.2(bu)117 321.6 S .046(ilding it, or the process reb).2 F .047 +(uilding the database dies \(due to being killed or a system crash\) be\ +-)-.2 F(fore completing the reb)117 333.6 Q(uild.)-.2 E .401 +(Sendmail has three techniques to try to relie)142 349.8 R .701 -.15 (ve t)-.25 H .401(hese problems.).15 F .4(First, it ignores interrupts) -5.401 F .045(while reb)117 410.4 R .045(uilding the database; this a)-.2 +5.401 F .045(while reb)117 361.8 R .045(uilding the database; this a)-.2 F -.2(vo)-.2 G .045(ids the problem of someone aborting the process lea) -.2 F .045(ving a)-.2 F .177(partially reb)117 422.4 R .177 +.2 F .045(ving a)-.2 F .177(partially reb)117 373.8 R .177 (uilt database.)-.2 F .177 (Second, it locks the database source \214le during the reb)5.177 F .176 -(uild \212 b)-.2 F .176(ut that)-.2 F .812(may not w)117 434.4 R .812 +(uild \212 b)-.2 F .176(ut that)-.2 F .812(may not w)117 385.8 R .812 (ork o)-.1 F -.15(ve)-.15 G 3.312(rN).15 G .812 (FS or if the \214le is unwritable.)-3.312 F .813 (Third, at the end of the reb)5.813 F .813(uild it adds an)-.2 F -(alias of the form)117 446.4 Q(@: @)157 462.6 Q .336 -(\(which is not normally le)117 478.8 R -.05(ga)-.15 G 2.836 +(alias of the form)117 397.8 Q(@: @)157 414 Q .336 +(\(which is not normally le)117 430.2 R -.05(ga)-.15 G 2.836 (l\). Before).05 F F2(sendmail)2.836 E F1 .336 (will access the database, it checks to insure that)2.836 F -(this entry e)117 492.8 Q(xists)-.15 E/F3 7/Times-Roman@0 SF(11)-4 I F1 -(.)4 I F0 2.5(2.6.3. List)102 516.8 R -.1(ow)2.5 G(ners).1 E F1 .4 -(If an error occurs on sending to a certain address, say \231)142 533 R -F2(x)A F1<9a2c>A F2(sendmail)2.901 E F1 .401(will look for an alias) -2.901 F .418(of the form \231o)117 545 R(wner)-.25 E(-)-.2 E F2(x)A F1 +(this entry e)117 444.2 Q(xists)-.15 E/F3 7/Times-Roman@0 SF(11)-4 I F1 +(.)4 I F0 2.5(2.6.3. List)102 468.2 R -.1(ow)2.5 G(ners).1 E F1 .4 +(If an error occurs on sending to a certain address, say \231)142 484.4 +R F2(x)A F1<9a2c>A F2(sendmail)2.901 E F1 .401(will look for an alias) +2.901 F .418(of the form \231o)117 496.4 R(wner)-.25 E(-)-.2 E F2(x)A F1 2.918<9a74>C 2.918(or)-2.918 G(ecei)-2.918 E .718 -.15(ve t)-.25 H .418 (he errors.).15 F .417 (This is typically useful for a mailing list where the)5.418 F 1.116 -(submitter of the list has no control o)117 557 R -.15(ve)-.15 G 3.617 +(submitter of the list has no control o)117 508.4 R -.15(ve)-.15 G 3.617 (rt).15 G 1.117 (he maintenance of the list itself; in this case the list)-3.617 F -(maintainer w)117 569 Q(ould be the o)-.1 E(wner of the list.)-.25 E +(maintainer w)117 520.4 Q(ould be the o)-.1 E(wner of the list.)-.25 E -.15(Fo)5 G 2.5(re).15 G(xample:)-2.65 E -(unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser)157 585.2 Q(,)-.4 E -(sam@matisse)193 597.2 Q -.25(ow)157 609.2 S(ner).25 E +(unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser)157 536.6 Q(,)-.4 E +(sam@matisse)193 548.6 Q -.25(ow)157 560.6 S(ner).25 E (-unix-wizards: unix-wizards-request)-.2 E -(unix-wizards-request: eric@ucbarpa)157 621.2 Q -.1(wo)117 637.4 S .689 +(unix-wizards-request: eric@ucbarpa)157 572.6 Q -.1(wo)117 588.8 S .689 (uld cause \231eric@ucbarpa\232 to get the error that will occur when s\ omeone sends to unix-wiz-).1 F -(ards due to the inclusion of \231nosuchuser\232 on the list.)117 649.4 -Q .958(List o)142 665.6 R .958(wners also cause the en)-.25 F -.15(ve) --.4 G .959(lope sender address to be modi\214ed.).15 F .959 -(The contents of the)5.959 F -.25(ow)117 677.6 S .429 +(ards due to the inclusion of \231nosuchuser\232 on the list.)117 600.8 +Q .958(List o)142 617 R .958(wners also cause the en)-.25 F -.15(ve)-.4 +G .959(lope sender address to be modi\214ed.).15 F .959 +(The contents of the)5.959 F -.25(ow)117 629 S .429 (ner alias are used if the).25 F 2.929(yp)-.15 G .429 (oint to a single user)-2.929 F 2.928(,o)-.4 G .428 -(therwise the name of the alias itself is used.)-2.928 F .32 LW 76 687.2 -72 687.2 DL 80 687.2 76 687.2 DL 84 687.2 80 687.2 DL 88 687.2 84 687.2 -DL 92 687.2 88 687.2 DL 96 687.2 92 687.2 DL 100 687.2 96 687.2 DL 104 -687.2 100 687.2 DL 108 687.2 104 687.2 DL 112 687.2 108 687.2 DL 116 -687.2 112 687.2 DL 120 687.2 116 687.2 DL 124 687.2 120 687.2 DL 128 -687.2 124 687.2 DL 132 687.2 128 687.2 DL 136 687.2 132 687.2 DL 140 -687.2 136 687.2 DL 144 687.2 140 687.2 DL 148 687.2 144 687.2 DL 152 -687.2 148 687.2 DL 156 687.2 152 687.2 DL 160 687.2 156 687.2 DL 164 -687.2 160 687.2 DL 168 687.2 164 687.2 DL 172 687.2 168 687.2 DL 176 -687.2 172 687.2 DL 180 687.2 176 687.2 DL 184 687.2 180 687.2 DL 188 -687.2 184 687.2 DL 192 687.2 188 687.2 DL 196 687.2 192 687.2 DL 200 -687.2 196 687.2 DL 204 687.2 200 687.2 DL 208 687.2 204 687.2 DL 212 -687.2 208 687.2 DL 216 687.2 212 687.2 DL/F4 5/Times-Roman@0 SF(11)93.6 -697.6 Q/F5 8/Times-Roman@0 SF(The)3.2 I/F6 8/Times-Bold@0 SF(AliasW)2 E -(ait)-.52 E F5 +(therwise the name of the alias itself is used.)-2.928 F -.15(Fo)117 641 +S 3.454(rt).15 G .954(his reason, and to obe)-3.454 F 3.454(yI)-.15 G +.954(nternet con)-3.454 F -.15(ve)-.4 G .954(ntions, the \231o).15 F +(wner)-.25 E .955(-\232 address normally points at the)-.2 F .504(\231-\ +request\232 address; this causes messages to go out with the typical In\ +ternet con)117 653 R -.15(ve)-.4 G .503(ntion of using).15 F -.74(``)117 +665 S F2(list).74 E F1(-request')A 2.5('a)-.74 G 2.5(st)-2.5 G +(he return address.)-2.5 E .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 +DL 84 678.8 80 678.8 DL 88 678.8 84 678.8 DL 92 678.8 88 678.8 DL 96 +678.8 92 678.8 DL 100 678.8 96 678.8 DL 104 678.8 100 678.8 DL 108 678.8 +104 678.8 DL 112 678.8 108 678.8 DL 116 678.8 112 678.8 DL 120 678.8 116 +678.8 DL 124 678.8 120 678.8 DL 128 678.8 124 678.8 DL 132 678.8 128 +678.8 DL 136 678.8 132 678.8 DL 140 678.8 136 678.8 DL 144 678.8 140 +678.8 DL 148 678.8 144 678.8 DL 152 678.8 148 678.8 DL 156 678.8 152 +678.8 DL 160 678.8 156 678.8 DL 164 678.8 160 678.8 DL 168 678.8 164 +678.8 DL 172 678.8 168 678.8 DL 176 678.8 172 678.8 DL 180 678.8 176 +678.8 DL 184 678.8 180 678.8 DL 188 678.8 184 678.8 DL 192 678.8 188 +678.8 DL 196 678.8 192 678.8 DL 200 678.8 196 678.8 DL 204 678.8 200 +678.8 DL 208 678.8 204 678.8 DL 212 678.8 208 678.8 DL 216 678.8 212 +678.8 DL/F4 5/Times-Roman@0 SF(11)93.6 689.2 Q/F5 8/Times-Roman@0 SF +(The)3.2 I/F6 8/Times-Bold@0 SF(AliasW)2 E(ait)-.52 E F5 (option is required in the con\214guration for this action to occur)2 E 4(.T)-.44 G(his should normally be speci\214ed.)-4 E 0 Cg EP %%Page: 22 18 @@ -1741,295 +1770,289 @@ DL 92 687.2 88 687.2 DL 96 687.2 92 687.2 DL 100 687.2 96 687.2 DL 104 BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-22 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -.15(Fo) -117 96 S 3.454(rt).15 G .954(his reason, and to obe)-3.454 F 3.454(yI) --.15 G .954(nternet con)-3.454 F -.15(ve)-.4 G .954(ntions, the \231o) -.15 F(wner)-.25 E .955(-\232 address normally points at the)-.2 F .504(\ -\231-request\232 address; this causes messages to go out with the typic\ -al Internet con)117 108 R -.15(ve)-.4 G .503(ntion of using).15 F -.74 -(``)117 120 S/F2 10/Times-Italic@0 SF(list).74 E F1(-request')A 2.5('a) --.74 G 2.5(st)-2.5 G(he return address.)-2.5 E F0 2.5(2.7. User)87 144 R -(Inf)2.5 E(ormation Database)-.25 E F1 3.635(This option is deprecated,\ - use virtusertable and genericstable instead as e)127 160.2 R 3.636 -(xplained in)-.15 F F2(cf/README)102 172.2 Q F1 5.06(.I)C 2.56(fy)-5.06 -G .06(ou ha)-2.56 F .36 -.15(ve a ve)-.2 H .06(rsion of).15 F F2 -(sendmail)2.56 E F1 .06 +(Installation and Operation Guide)2.5 E 2.5(2.7. User)87 96 R(Inf)2.5 E +(ormation Database)-.25 E/F1 10/Times-Roman@0 SF 3.635(This option is d\ +eprecated, use virtusertable and genericstable instead as e)127 112.2 R +3.636(xplained in)-.15 F/F2 10/Times-Italic@0 SF(cf/README)102 124.2 Q +F1 5.06(.I)C 2.56(fy)-5.06 G .06(ou ha)-2.56 F .36 -.15(ve a ve)-.2 H +.06(rsion of).15 F F2(sendmail)2.56 E F1 .06 (with the user information database compiled in, and)2.56 F .764(you ha) -102 184.2 R 1.064 -.15(ve s)-.2 H .764 +102 136.2 R 1.064 -.15(ve s)-.2 H .764 (peci\214ed one or more databases using the).15 F F0(U)3.264 E F1 .764 -(option, the databases will be searched for a)3.264 F F2(user)102 196.2 +(option, the databases will be searched for a)3.264 F F2(user)102 148.2 Q F1(:maildrop entry)A 5(.I)-.65 G 2.5(ff)-5 G (ound, the mail will be sent to the speci\214ed address.)-2.5 E F0 2.5 -(2.8. P)87 220.2 R(er)-.2 E(-User F)-.37 E(orwarding \(.f)-.25 E -(orward Files\))-.25 E F1 .121(As an alternati)127 236.4 R .421 -.15 +(2.8. P)87 172.2 R(er)-.2 E(-User F)-.37 E(orwarding \(.f)-.25 E +(orward Files\))-.25 E F1 .121(As an alternati)127 188.4 R .421 -.15 (ve t)-.25 H 2.621(ot).15 G .121(he alias database, an)-2.621 F 2.621 (yu)-.15 G .12(ser may put a \214le with the name \231.forw)-2.621 F .12 -(ard\232 in his)-.1 F .205(or her home directory)102 248.4 R 5.205(.I) +(ard\232 in his)-.1 F .205(or her home directory)102 200.4 R 5.205(.I) -.65 G 2.705(ft)-5.205 G .205(his \214le e)-2.705 F(xists,)-.15 E F2 (sendmail)2.705 E F1 .205 (redirects mail for that user to the list of addresses)2.705 F .665 -(listed in the .forw)102 260.4 R .665(ard \214le.)-.1 F .665 +(listed in the .forw)102 212.4 R .665(ard \214le.)-.1 F .665 (Note that aliases are fully e)5.665 F .664(xpanded before forw)-.15 F -.664(ard \214les are referenced.)-.1 F -.15(Fo)102 272.4 S 2.5(re).15 G +.664(ard \214les are referenced.)-.1 F -.15(Fo)102 224.4 S 2.5(re).15 G (xample, if the home directory for user \231mckusick\232 has a .forw) --2.65 E(ard \214le with contents:)-.1 E(mckusick@ernie)142 288.6 Q -(kirk@calder)142 300.6 Q(then an)102 316.8 Q 2.5(ym)-.15 G(ail arri)-2.5 +-2.65 E(ard \214le with contents:)-.1 E(mckusick@ernie)142 240.6 Q +(kirk@calder)142 252.6 Q(then an)102 268.8 Q 2.5(ym)-.15 G(ail arri)-2.5 E(ving for \231mckusick\232 will be redirected to the speci\214ed accou\ -nts.)-.25 E(Actually)127 333 Q 3.374(,t)-.65 G .874(he con\214guration \ +nts.)-.25 E(Actually)127 285 Q 3.374(,t)-.65 G .874(he con\214guration \ \214le de\214nes a sequence of \214lenames to check.)-3.374 F .875 -(By def)5.875 F .875(ault, this is)-.1 F .517(the user')102 345 R 3.017 +(By def)5.875 F .875(ault, this is)-.1 F .517(the user')102 297 R 3.017 (s.)-.55 G(forw)-3.017 E .517(ard \214le, b)-.1 F .517 (ut can be de\214ned to be more generally using the)-.2 F F0 -.25(Fo) 3.017 G(rwardP).25 E(ath)-.1 E F1 3.016(option. If)3.016 F .182 -(you change this, you will ha)102 357 R .482 -.15(ve t)-.2 H 2.682(oi) +(you change this, you will ha)102 309 R .482 -.15(ve t)-.2 H 2.682(oi) .15 G .182(nform your user base of the change; .forw)-2.682 F .183 (ard is pretty well incor)-.1 F(-)-.2 E(porated into the collecti)102 -369 Q .3 -.15(ve s)-.25 H(ubconscious.).15 E F0 2.5(2.9. Special)87 393 -R(Header Lines)2.5 E F1(Se)127 409.2 Q -.15(ve)-.25 G 1.898 +321 Q .3 -.15(ve s)-.25 H(ubconscious.).15 E F0 2.5(2.9. Special)87 345 +R(Header Lines)2.5 E F1(Se)127 361.2 Q -.15(ve)-.25 G 1.898 (ral header lines ha).15 F 2.197 -.15(ve s)-.2 H 1.897 (pecial interpretations de\214ned by the con\214guration \214le.).15 F -(Others)6.897 E(ha)102 421.2 Q 1.205 -.15(ve i)-.2 H .905 +(Others)6.897 E(ha)102 373.2 Q 1.205 -.15(ve i)-.2 H .905 (nterpretations b).15 F .905(uilt into)-.2 F F2(sendmail)3.405 E F1 .906 (that cannot be changed without changing the code.)3.405 F(These)5.906 E --.2(bu)102 433.2 S(ilt-ins are described here.).2 E F0 2.5(2.9.1. Err) -102 457.2 R(ors-T)-.18 E(o:)-.92 E F1 .22(If errors occur an)142 473.4 R +-.2(bu)102 385.2 S(ilt-ins are described here.).2 E F0 2.5(2.9.1. Err) +102 409.2 R(ors-T)-.18 E(o:)-.92 E F1 .22(If errors occur an)142 425.4 R .22(ywhere during processing, this header will cause error messages to \ -go to)-.15 F(the listed addresses.)117 485.4 Q -(This is intended for mailing lists.)5 E .384(The Errors-T)142 501.6 R +go to)-.15 F(the listed addresses.)117 437.4 Q +(This is intended for mailing lists.)5 E .384(The Errors-T)142 453.6 R .384(o: header w)-.8 F .384 (as created in the bad old days when UUCP didn')-.1 F 2.885(tu)-.18 G -.385(nderstand the)-2.885 F .89(distinction between an en)117 513.6 R +.385(nderstand the)-2.885 F .89(distinction between an en)117 465.6 R -.15(ve)-.4 G .89(lope and a header; this w).15 F .889(as a hack to pro) -.1 F .889(vide what should no)-.15 F 3.389(wb)-.25 G(e)-3.389 E .809 -(passed as the en)117 525.6 R -.15(ve)-.4 G .809(lope sender address.) +(passed as the en)117 477.6 R -.15(ve)-.4 G .809(lope sender address.) .15 F .809(It should go a)5.809 F -.1(wa)-.15 G 4.609 -.65(y. I).1 H 3.31(ti).65 G 3.31(so)-3.31 G .81(nly used if the)-3.31 F F0(UseErr)3.31 -E(orsT)-.18 E(o)-.92 E F1(option is set.)117 537.6 Q(The Errors-T)142 -553.8 Q(o: header is of)-.8 E(\214cially deprecated and will go a)-.25 E +E(orsT)-.18 E(o)-.92 E F1(option is set.)117 489.6 Q(The Errors-T)142 +505.8 Q(o: header is of)-.8 E(\214cially deprecated and will go a)-.25 E -.1(wa)-.15 G 2.5(yi).1 G 2.5(naf)-2.5 G(uture release.)-2.5 E F0 2.5 -(2.9.2. A)102 577.8 R(ppar)-.25 E(ently-T)-.18 E(o:)-.92 E F1 .045 -(RFC 822 requires at least one recipient \214eld \(T)142 594 R .045 +(2.9.2. A)102 529.8 R(ppar)-.25 E(ently-T)-.18 E(o:)-.92 E F1 .045 +(RFC 822 requires at least one recipient \214eld \(T)142 546 R .045 (o:, Cc:, or Bcc: line\) in e)-.8 F -.15(ve)-.25 G .044(ry message.).15 F .044(If a)5.044 F .562 -(message comes in with no recipients listed in the message then)117 606 +(message comes in with no recipients listed in the message then)117 558 R F2(sendmail)3.062 E F1 .562(will adjust the header)3.062 F .085 -(based on the \231NoRecipientAction\232 option.)117 618 R .085 +(based on the \231NoRecipientAction\232 option.)117 570 R .085 (One of the possible actions is to add an \231)5.085 F(Apparently-)-.8 E --.8(To)117 630 S(:\232 header line for an).8 E 2.5(yr)-.15 G +-.8(To)117 582 S(:\232 header line for an).8 E 2.5(yr)-.15 G (ecipients it is a)-2.5 E -.1(wa)-.15 G(re of.).1 E .91 -(The Apparently-T)142 646.2 R .911 +(The Apparently-T)142 598.2 R .911 (o: header is non-standard and is both deprecated and strongly discour) --.8 F(-)-.2 E(aged.)117 658.2 Q F0 2.5(2.9.3. Pr)102 682.2 R(ecedence) +-.8 F(-)-.2 E(aged.)117 610.2 Q F0 2.5(2.9.3. Pr)102 634.2 R(ecedence) -.18 E F1 .425(The Precedence: header can be used as a crude control of\ - message priority)142 698.4 R 5.424(.I)-.65 G 2.924(tt)-5.424 G .424 + message priority)142 650.4 R 5.424(.I)-.65 G 2.924(tt)-5.424 G .424 (weaks the)-2.924 F .181(sort order in the queue and can be con\214gure\ -d to change the message timeout v)117 710.4 R 2.682(alues. The)-.25 F -(prece-)2.682 E .235(dence of a message also controls ho)117 722.4 R +d to change the message timeout v)117 662.4 R 2.682(alues. The)-.25 F +(prece-)2.682 E .235(dence of a message also controls ho)117 674.4 R 2.734(wd)-.25 G(eli)-2.734 E -.15(ve)-.25 G .234 -(ry status noti\214cations \(DSNs\) are processed for that).15 F 0 Cg EP +(ry status noti\214cations \(DSNs\) are processed for that).15 F +(message.)117 686.4 Q 0 Cg EP %%Page: 23 19 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-23)195.86 E/F1 10/Times-Roman@0 SF(message.)117 96 Q F0 2.5 -(2.10. IDENT)87 120 R(Pr)2.5 E(otocol Support)-.18 E/F2 10 -/Times-Italic@0 SF(Sendmail)127 136.2 Q F1 .745 -(supports the IDENT protocol as de\214ned in RFC 1413.)3.245 F .746 -(Note that the RFC states a)5.745 F 1.361(client should w)102 148.2 R +(SMM:08-23)195.86 E 2.5(2.10. IDENT)87 96 R(Pr)2.5 E(otocol Support)-.18 +E/F1 10/Times-Italic@0 SF(Sendmail)127 112.2 Q/F2 10/Times-Roman@0 SF +.745(supports the IDENT protocol as de\214ned in RFC 1413.)3.245 F .746 +(Note that the RFC states a)5.745 F 1.361(client should w)102 124.2 R 1.361(ait at least 30 seconds for a response.)-.1 F 1.36(The def)6.361 F -1.36(ault T)-.1 F 1.36(imeout.ident is 5 seconds as)-.35 F(man)102 160.2 +1.36(ault T)-.1 F 1.36(imeout.ident is 5 seconds as)-.35 F(man)102 136.2 Q 3.024(ys)-.15 G .524(ites ha)-3.024 F .824 -.15(ve a)-.2 H .524 (dopted the practice of dropping IDENT queries.).15 F .524 -(This has lead to delays process-)5.524 F .452(ing mail.)102 172.2 R +(This has lead to delays process-)5.524 F .452(ing mail.)102 148.2 R .452(Although this enhances identi\214cation of the author of an email \ -message by doing a `)5.452 F(`call)-.74 E(back')102 184.2 Q 3.627('t) +message by doing a `)5.452 F(`call)-.74 E(back')102 160.2 Q 3.627('t) -.74 G 3.627(ot)-3.627 G 1.127(he originating system to include the o) -3.627 F 1.128(wner of a particular TCP connection in the audit)-.25 F -.164(trail it is in no sense perfect; a determined for)102 196.2 R .164 +.164(trail it is in no sense perfect; a determined for)102 172.2 R .164 (ger can easily spoof the IDENT protocol.)-.18 F .164(The follo)5.164 F -(w-)-.25 E(ing description is e)102 208.2 Q(xcerpted from RFC 1413:)-.15 -E 2.5(6. Security)127 224.4 R(Considerations)2.5 E .005 +(w-)-.25 E(ing description is e)102 184.2 Q(xcerpted from RFC 1413:)-.15 +E 2.5(6. Security)127 200.4 R(Considerations)2.5 E .005 (The information returned by this protocol is at most as trustw)127 -240.6 R(orth)-.1 E 2.506(ya)-.05 G 2.506(st)-2.506 G .006(he host pro) --2.506 F .006(viding it OR)-.15 F .274(the or)127 252.6 R -.05(ga)-.18 G +216.6 R(orth)-.1 E 2.506(ya)-.05 G 2.506(st)-2.506 G .006(he host pro) +-2.506 F .006(viding it OR)-.15 F .274(the or)127 228.6 R -.05(ga)-.18 G .274(nization operating the host.).05 F -.15(Fo)5.274 G 2.774(re).15 G .273(xample, a PC in an open lab has fe)-2.924 F 2.773(wi)-.25 G 2.773 (fa)-2.773 G .573 -.15(ny c)-2.773 H(ontrols).15 E .986(on it to pre)127 -264.6 R -.15(ve)-.25 G .986(nt a user from ha).15 F .986 +240.6 R -.15(ve)-.25 G .986(nt a user from ha).15 F .986 (ving this protocol return an)-.2 F 3.486(yi)-.15 G .987 (denti\214er the user w)-3.486 F 3.487(ants. Lik)-.1 F(e-)-.1 E 1.441(w\ ise, if the host has been compromised the information returned may be c\ -ompletely erro-)127 276.6 R(neous and misleading.)127 288.6 Q .521(The \ +ompletely erro-)127 252.6 R(neous and misleading.)127 264.6 Q .521(The \ Identi\214cation Protocol is not intended as an authorization or access\ - control protocol.)127 304.8 R(At)5.521 E 1.037(best, it pro)127 316.8 R + control protocol.)127 280.8 R(At)5.521 E 1.037(best, it pro)127 292.8 R 1.037(vides some additional auditing information with respect to TCP co\ -nnections.)-.15 F(At)6.036 E -.1(wo)127 328.8 S(rst, it can pro).1 E +nnections.)-.15 F(At)6.036 E -.1(wo)127 304.8 S(rst, it can pro).1 E (vide misleading, incorrect, or maliciously incorrect information.)-.15 E 1.006(The use of the information returned by this protocol for other \ -than auditing is strongly dis-)127 345 R 2.697(couraged. Speci\214cally) -127 357 R 2.697(,u)-.65 G .197 +than auditing is strongly dis-)127 321 R 2.697(couraged. Speci\214cally) +127 333 R 2.697(,u)-.65 G .197 (sing Identi\214cation Protocol information to mak)-2.697 F 2.697(ea)-.1 G .197(ccess control deci-)-2.697 F .514(sions - either as the primary \ method \(i.e., no other checks\) or as an adjunct to other methods)127 -369 R(may result in a weak)127 381 Q(ening of normal host security)-.1 E -(.)-.65 E 1.779(An Identi\214cation serv)127 397.2 R 1.778(er may re) +345 R(may result in a weak)127 357 Q(ening of normal host security)-.1 E +(.)-.65 E 1.779(An Identi\214cation serv)127 373.2 R 1.778(er may re) -.15 F -.15(ve)-.25 G 1.778 (al information about users, entities, objects or processes).15 F .336 -(which might normally be considered pri)127 409.2 R -.25(va)-.25 G 2.836 +(which might normally be considered pri)127 385.2 R -.25(va)-.25 G 2.836 (te. An).25 F .337(Identi\214cation serv)2.836 F .337(er pro)-.15 F .337 (vides service which)-.15 F .806 -(is a rough analog of the CallerID services pro)127 421.2 R .806 +(is a rough analog of the CallerID services pro)127 397.2 R .806 (vided by some phone companies and man)-.15 F 3.306(yo)-.15 G(f)-3.306 E -1.397(the same pri)127 433.2 R -.25(va)-.25 G 1.697 -.15(cy c).25 H +1.397(the same pri)127 409.2 R -.25(va)-.25 G 1.697 -.15(cy c).25 H 1.397(onsiderations and ar).15 F 1.398 (guments that apply to the CallerID service apply to)-.18 F 3.546 -(Identi\214cation. If)127 445.2 R 1.046(you w)3.546 F(ouldn')-.1 E 3.546 +(Identi\214cation. If)127 421.2 R 1.046(you w)3.546 F(ouldn')-.1 E 3.546 (tr)-.18 G 1.045(un a "\214nger" serv)-3.546 F 1.045(er due to pri)-.15 F -.25(va)-.25 G 1.345 -.15(cy c).25 H 1.045(onsiderations you may).15 F -(not w)127 457.2 Q(ant to run this protocol.)-.1 E .376 -(In some cases your system may not w)102 473.4 R .377 +(not w)127 433.2 Q(ant to run this protocol.)-.1 E .376 +(In some cases your system may not w)102 449.4 R .377 (ork properly with IDENT support due to a b)-.1 F .377(ug in the TCP/IP) --.2 F 3.675(implementation. The)102 485.4 R 1.175(symptoms will be that\ - for some hosts the SMTP connection will be closed)3.675 F .565 -(almost immediately)102 497.4 R 5.565(.I)-.65 G 3.065(ft)-5.565 G .565 -(his is true or if you do not w)-3.065 F .565(ant to use IDENT)-.1 F -3.066(,y)-.74 G .566(ou should set the IDENT)-3.066 F -(timeout to zero; this will disable the IDENT protocol.)102 509.4 Q F0 -2.5(3. ARGUMENTS)72 533.4 R F1 .018(The complete list of ar)112 549.6 R -.018(guments to)-.18 F F2(sendmail)2.517 E F1 .017 +-.2 F 2.727(implementation. The)102 461.4 R .227(symptoms will be that \ +for some hosts the SMTP connection will be closed al-)2.727 F .945 +(most immediately)102 473.4 R 5.945(.I)-.65 G 3.445(ft)-5.945 G .945 +(his is true or if you do not w)-3.445 F .945(ant to use IDENT)-.1 F +3.446(,y)-.74 G .946(ou should set the IDENT)-3.446 F +(timeout to zero; this will disable the IDENT protocol.)102 485.4 Q F0 +2.5(3. ARGUMENTS)72 509.4 R F2 .018(The complete list of ar)112 525.6 R +.018(guments to)-.18 F F1(sendmail)2.517 E F2 .017 (is described in detail in Appendix A.)2.517 F .017(Some important)5.017 -F(ar)87 561.6 Q(guments are described here.)-.18 E F0 2.5(3.1. Queue)87 -585.6 R(Inter)2.5 E -.1(va)-.1 G(l).1 E F1 .455(The amount of time betw\ +F(ar)87 537.6 Q(guments are described here.)-.18 E F0 2.5(3.1. Queue)87 +561.6 R(Inter)2.5 E -.1(va)-.1 G(l).1 E F2 .455(The amount of time betw\ een forking a process to run through the queue is de\214ned by the)127 -601.8 R F02.956 E F1 2.676(\215ag. If)102 613.8 R .176 +577.8 R F02.956 E F2 2.676(\215ag. If)102 589.8 R .176 (you run with deli)2.676 F -.15(ve)-.25 G .176(ry mode set to).15 F F0 -(i)2.676 E F1(or)2.676 E F0(b)2.675 E F1 .175(this can be relati)2.675 F +(i)2.676 E F2(or)2.676 E F0(b)2.675 E F2 .175(this can be relati)2.675 F -.15(ve)-.25 G .175(ly lar).15 F .175(ge, since it will only be rel-) --.18 F -.25(eva)102 625.8 S .206(nt when a host that w).25 F .206(as do) +-.18 F -.25(eva)102 601.8 S .206(nt when a host that w).25 F .206(as do) -.1 F .206(wn comes back up.)-.25 F .207(If you run in)5.206 F F0(q) -2.707 E F1 .207(mode it should be relati)2.707 F -.15(ve)-.25 G .207 +2.707 E F2 .207(mode it should be relati)2.707 F -.15(ve)-.25 G .207 (ly short,).15 F 1.039(since it de\214nes the maximum amount of time th\ -at a message may sit in the queue.)102 637.8 R 1.038(\(See also the) -6.039 F(MinQueueAge option.\))102 649.8 Q 1.335 -(RFC 1123 section 5.3.1.1 says that this v)127 666 R 1.336 +at a message may sit in the queue.)102 613.8 R 1.038(\(See also the) +6.039 F(MinQueueAge option.\))102 625.8 Q 1.335 +(RFC 1123 section 5.3.1.1 says that this v)127 642 R 1.336 (alue should be at least 30 minutes \(although that)-.25 F -(probably doesn')102 678 Q 2.5(tm)-.18 G(ak)-2.5 E 2.5(es)-.1 G +(probably doesn')102 654 Q 2.5(tm)-.18 G(ak)-2.5 E 2.5(es)-.1 G (ense if you use `)-2.5 E(`queue-only')-.74 E 2.5('m)-.74 G(ode\).)-2.5 -E .365(Notice: the meaning of the interv)127 694.2 R .364 +E .365(Notice: the meaning of the interv)127 670.2 R .364 (al time depends on whether normal queue runners or persis-)-.25 F .207 -(tent queue runners are used.)102 706.2 R -.15(Fo)5.208 G 2.708(rt).15 G +(tent queue runners are used.)102 682.2 R -.15(Fo)5.208 G 2.708(rt).15 G .208(he former)-2.708 F 2.708(,i)-.4 G 2.708(ti)-2.708 G 2.708(st)-2.708 G .208(he time between subsequent starts of a queue run.)-2.708 F -.15 -(Fo)102 718.2 S 3.35(rt).15 G .85(he latter)-3.35 F 3.35(,i)-.4 G 3.35 +(Fo)102 694.2 S 3.35(rt).15 G .85(he latter)-3.35 F 3.35(,i)-.4 G 3.35 (ti)-3.35 G 3.35(st)-3.35 G .85(he time sendmail w)-3.35 F .849 (aits after a persistent queue runner has \214nished its w)-.1 F .849 -(ork to)-.1 F 0 Cg EP +(ork to)-.1 F .41(start the ne)102 706.2 R .41(xt one.)-.15 F .411 +(Hence for persistent queue runners this interv)5.41 F .411 +(al should be v)-.25 F .411(ery lo)-.15 F 1.711 -.65(w, t)-.25 H .411 +(ypically no).65 F(more than tw)102 718.2 Q 2.5(om)-.1 G(inutes.)-2.5 E +0 Cg EP %%Page: 24 20 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-24 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .41 -(start the ne)102 96 R .41(xt one.)-.15 F .411 -(Hence for persistent queue runners this interv)5.41 F .411 -(al should be v)-.25 F .411(ery lo)-.15 F 1.711 -.65(w, t)-.25 H .411 -(ypically no).65 F(more than tw)102 108 Q 2.5(om)-.1 G(inutes.)-2.5 E F0 -2.5(3.2. Daemon)87 132 R(Mode)2.5 E F1 .085(If you allo)127 148.2 R -2.585(wi)-.25 G .085(ncoming mail o)-2.585 F -.15(ve)-.15 G 2.585(ra).15 -G 2.585(nI)-2.585 G .085(PC connection, you should ha)-2.585 F .384 -.15 -(ve a d)-.2 H .084(aemon running.).15 F(This)5.084 E .069 -(should be set by your)102 160.2 R/F2 10/Times-Italic@0 SF(/etc/r)2.569 -E(c)-.37 E F1 .069(\214le using the)2.569 F F0(\255bd)2.569 E F1 2.57 -(\215ag. The)2.569 F F0(\255bd)2.57 E F1 .07(\215ag and the)2.57 F F0 -2.57 E F1 .07(\215ag may be combined)2.57 F(in one call:)102 172.2 -Q(/usr/sbin/sendmail \255bd \255q30m)142 188.4 Q 1.141(An alternati)127 -208.8 R 1.441 -.15(ve a)-.25 H 1.141(pproach is to in).15 F -.2(vo)-.4 G +(Installation and Operation Guide)2.5 E 2.5(3.2. Daemon)87 96 R(Mode)2.5 +E/F1 10/Times-Roman@0 SF .085(If you allo)127 112.2 R 2.585(wi)-.25 G +.085(ncoming mail o)-2.585 F -.15(ve)-.15 G 2.585(ra).15 G 2.585(nI) +-2.585 G .085(PC connection, you should ha)-2.585 F .384 -.15(ve a d)-.2 +H .084(aemon running.).15 F(This)5.084 E .069(should be set by your)102 +124.2 R/F2 10/Times-Italic@0 SF(/etc/r)2.569 E(c)-.37 E F1 .069 +(\214le using the)2.569 F F0(\255bd)2.569 E F1 2.57(\215ag. The)2.569 F +F0(\255bd)2.57 E F1 .07(\215ag and the)2.57 F F02.57 E F1 .07 +(\215ag may be combined)2.57 F(in one call:)102 136.2 Q +(/usr/sbin/sendmail \255bd \255q30m)142 152.4 Q 1.141(An alternati)127 +172.8 R 1.441 -.15(ve a)-.25 H 1.141(pproach is to in).15 F -.2(vo)-.4 G 1.341 -.1(ke s).2 H 1.141(endmail from).1 F F2(inetd)3.641 E F1 1.141 (\(8\) \(use the)B F0(\255bs)3.64 E F1 1.14(\255Am \215ags to ask)2.5 F -1.339(sendmail to speak SMTP on its standard input and output and to ru\ -n as MT)102 220.8 R 3.84(A\). This)-.93 F -.1(wo)3.84 G 1.34(rks and).1 -F(allo)102 232.8 Q .323(ws you to wrap)-.25 F F2(sendmail)2.823 E F1 -.323(in a TCP wrapper program, b)2.823 F .323(ut may be a bit slo)-.2 F -.322(wer since the con\214gu-)-.25 F .345 -(ration \214le has to be re-read on e)102 244.8 R -.15(ve)-.25 G .346 -(ry message that comes in.).15 F .346 -(If you do this, you still need to ha)5.346 F .646 -.15(ve a)-.2 H F2 -(sendmail)102 256.8 Q F1(running to \215ush the queue:)2.5 E -(/usr/sbin/sendmail \255q30m)142 273 Q F0 2.5(3.3. F)87 301.2 R(or)-.25 +.54(sendmail to speak SMTP on its standard input and output and to run \ +as MT)102 184.8 R 3.04(A\). This)-.93 F -.1(wo)3.04 G .54(rks and al-).1 +F(lo)102 196.8 Q .293(ws you to wrap)-.25 F F2(sendmail)2.793 E F1 .292 +(in a TCP wrapper program, b)2.792 F .292(ut may be a bit slo)-.2 F .292 +(wer since the con\214gura-)-.25 F .715 +(tion \214le has to be re-read on e)102 208.8 R -.15(ve)-.25 G .716 +(ry message that comes in.).15 F .716 +(If you do this, you still need to ha)5.716 F 1.016 -.15(ve a)-.2 H F2 +(sendmail)102 220.8 Q F1(running to \215ush the queue:)2.5 E +(/usr/sbin/sendmail \255q30m)142 237 Q F0 2.5(3.3. F)87 265.2 R(or)-.25 E(cing the Queue)-.18 E F1 .04(In some cases you may \214nd that the qu\ -eue has gotten clogged for some reason.)127 317.4 R -1.1(Yo)5.04 G 2.54 -(uc)1.1 G .04(an force)-2.54 F 3.184(aq)102 329.4 S .684 +eue has gotten clogged for some reason.)127 281.4 R -1.1(Yo)5.04 G 2.54 +(uc)1.1 G .04(an force)-2.54 F 3.184(aq)102 293.4 S .684 (ueue run using the)-3.184 F F03.184 E F1 .684(\215ag \(with no v) 3.184 F 3.184(alue\). It)-.25 F .684(is entertaining to use the)3.184 F F03.185 E F1 .685(\215ag \(v)3.185 F .685(erbose\) when)-.15 F -(this is done to w)102 341.4 Q(atch what happens:)-.1 E -(/usr/sbin/sendmail \255q \255v)142 357.6 Q -1.1(Yo)127 378 S 3(uc)1.1 G +(this is done to w)102 305.4 Q(atch what happens:)-.1 E +(/usr/sbin/sendmail \255q \255v)142 321.6 Q -1.1(Yo)127 342 S 3(uc)1.1 G .499 (an also limit the jobs to those with a particular queue identi\214er)-3 F 2.999(,r)-.4 G .499(ecipient, sender)-2.999 F 2.999(,q)-.4 G(uar) --2.999 E(-)-.2 E 2.097 +-2.999 E(-)-.2 E .976 (antine reason, or queue group using one of the queue modi\214ers.)102 -390 R -.15(Fo)7.097 G 4.597(re).15 G 2.097(xample, \231\255qRberk)-4.747 -F(ele)-.1 E<799a>-.15 E 1.364(restricts the queue run to jobs that ha) -102 402 R 1.664 -.15(ve t)-.2 H 1.364(he string \231berk).15 F(ele)-.1 E -1.364(y\232 some)-.15 F 1.363(where in one of the recipient)-.25 F 2.842 -(addresses. Similarly)102 414 R 2.842<2c99>-.65 G .342(\255qSstring\232\ - limits the run to particular senders, \231\255qIstring\232 limits it t\ -o partic-)-2.842 F .408(ular queue identi\214ers, and \231\255qQstring\ -\232 limits it to particular quarantined reasons and only operated)102 -426 R 1.748(on quarantined queue items, and \231\255qGstring\232 limits\ - it to a particular queue group.)102 438 R 1.748(The named)6.748 F .389 -(queue group will be run e)102 450 R -.15(ve)-.25 G 2.889(ni).15 G 2.888 -(fi)-2.889 G 2.888(ti)-2.888 G 2.888(ss)-2.888 G .388(et to ha)-2.888 F -.688 -.15(ve 0 r)-.2 H 2.888(unners. Y).15 F .388(ou may also place an) --1.1 F F0(!)2.888 E F1 .388(before the)5.388 F F0(I)2.888 E F1(or)2.888 -E F0(R)102 462 Q F1(or)3.052 E F0(S)3.052 E F1(or)3.052 E F0(Q)3.052 E -F1 .552(to indicate that jobs are limited to not including a particular\ - queue identi\214er)3.052 F 3.053(,r)-.4 G(ecipient)-3.053 E .252 -(or sender)102 474 R 5.252(.F)-.55 G .252(or e)-5.402 F .252(xample, \ -\231\255q!Rseattle\232 limits the queue run to jobs that do not ha)-.15 -F .551 -.15(ve t)-.2 H .251(he string \231seat-).15 F .296(tle\232 some) -102 486 R .297(where in one of the recipient addresses.)-.25 F .297 -(Should you need to terminate the queue jobs cur)5.297 F(-)-.2 E -(rently acti)102 498 Q .3 -.15(ve t)-.25 H(hen a SIGTERM to the parent \ -of the process \(or processes\) will cleanly stop the jobs.).15 E F0 2.5 -(3.4. Deb)87 522 R(ugging)-.2 E F1 .256(There are a f)127 538.2 R .256 -(airly lar)-.1 F .256(ge number of deb)-.18 F .256(ug \215ags b)-.2 F -.256(uilt into)-.2 F F2(sendmail)2.756 E F1 5.256(.E)C .256(ach deb) --5.256 F .256(ug \215ag has a cat-)-.2 F -.15(eg)102 550.2 S .501 -(ory and a le).15 F -.15(ve)-.25 G 3.002(l. Higher).15 F(le)3.002 E -.15 -(ve)-.25 G .502(ls increase the le).15 F -.15(ve)-.25 G 3.002(lo).15 G -3.002(fd)-3.002 G(eb)-3.002 E .502(ugging acti)-.2 F .502 +354 R -.15(Fo)5.976 G 3.476(re).15 G .976(xample, \231\255qRberk)-3.626 +F(ele)-.1 E .976(y\232 re-)-.15 F .843 +(stricts the queue run to jobs that ha)102 366 R 1.142 -.15(ve t)-.2 H +.842(he string \231berk).15 F(ele)-.1 E .842(y\232 some)-.15 F .842 +(where in one of the recipient ad-)-.25 F 2.628(dresses. Similarly)102 +378 R 2.628<2c99>-.65 G .129(\255qSstring\232 limits the run to particu\ +lar senders, \231\255qIstring\232 limits it to particular)-2.628 F .835 +(queue identi\214ers, and \231\255qQstring\232 limits it to particular \ +quarantined reasons and only operated on)102 390 R .756(quarantined que\ +ue items, and \231\255qGstring\232 limits it to a particular queue grou\ +p.)102 402 R .757(The named queue)5.757 F .268(group will be run e)102 +414 R -.15(ve)-.25 G 2.768(ni).15 G 2.768(fi)-2.768 G 2.768(ti)-2.768 G +2.768(ss)-2.768 G .268(et to ha)-2.768 F .568 -.15(ve 0 r)-.2 H 2.768 +(unners. Y).15 F .268(ou may also place an)-1.1 F F0(!)2.768 E F1 .268 +(before the)5.268 F F0(I)2.768 E F1(or)2.768 E F0(R)2.768 E F1(or)2.768 +E F0(S)2.768 E F1(or)102 426 Q F0(Q)4.232 E F1 1.732(to indicate that j\ +obs are limited to not including a particular queue identi\214er)4.232 F +4.233(,r)-.4 G 1.733(ecipient or)-4.233 F(sender)102 438 Q 5.25(.F)-.55 +G .25(or e)-5.4 F .25(xample, \231\255q!Rseattle\232 limits the queue r\ +un to jobs that do not ha)-.15 F .55 -.15(ve t)-.2 H .25 +(he string \231seattle\232).15 F(some)102 450 Q .099 +(where in one of the recipient addresses.)-.25 F .1 +(Should you need to terminate the queue jobs currently)5.099 F(acti)102 +462 Q .3 -.15(ve t)-.25 H(hen a SIGTERM to the parent of the process \(\ +or processes\) will cleanly stop the jobs.).15 E F0 2.5(3.4. Deb)87 486 +R(ugging)-.2 E F1 .256(There are a f)127 502.2 R .256(airly lar)-.1 F +.256(ge number of deb)-.18 F .256(ug \215ags b)-.2 F .256(uilt into)-.2 +F F2(sendmail)2.756 E F1 5.256(.E)C .256(ach deb)-5.256 F .256 +(ug \215ag has a cat-)-.2 F -.15(eg)102 514.2 S .501(ory and a le).15 F +-.15(ve)-.25 G 3.002(l. Higher).15 F(le)3.002 E -.15(ve)-.25 G .502 +(ls increase the le).15 F -.15(ve)-.25 G 3.002(lo).15 G 3.002(fd)-3.002 +G(eb)-3.002 E .502(ugging acti)-.2 F .502 (vity; in most cases, this means)-.25 F .138 -(to print out more information.)102 562.2 R .138(The con)5.138 F -.15 +(to print out more information.)102 526.2 R .138(The con)5.138 F -.15 (ve)-.4 G .138(ntion is that le).15 F -.15(ve)-.25 G .137 (ls greater than nine are \231absurd,).15 F 2.637<9a69>-.7 G .137 (.e., the)-2.637 F(y)-.15 E .869 -(print out so much information that you w)102 574.2 R(ouldn')-.1 E 3.369 +(print out so much information that you w)102 538.2 R(ouldn')-.1 E 3.369 (tn)-.18 G .869(ormally w)-3.369 F .87(ant to see them e)-.1 F .87 (xcept for deb)-.15 F(ugging)-.2 E(that particular piece of code.)102 -586.2 Q -1.1(Yo)127 602.4 S 2.866(us)1.1 G(hould)-2.866 E F0(ne)2.866 E +550.2 Q -1.1(Yo)127 566.4 S 2.866(us)1.1 G(hould)-2.866 E F0(ne)2.866 E -.1(ve)-.15 G(r).1 E F1 .366(run a production sendmail serv)2.866 F .366 (er in deb)-.15 F .366(ug mode.)-.2 F(Man)5.366 E 2.866(yo)-.15 G 2.866 (ft)-2.866 G .366(he deb)-2.866 F .366(ug \215ags)-.2 F .907 -(will result in deb)102 614.4 R .907(ug output being sent o)-.2 F -.15 +(will result in deb)102 578.4 R .907(ug output being sent o)-.2 F -.15 (ve)-.15 G 3.407(rt).15 G .907(he SMTP channel unless the option)-3.407 F F03.407 E F1 .907(is used.)3.407 F(This)5.908 E 1.225 -(will confuse man)102 626.4 R 3.725(ym)-.15 G 1.225(ail programs.)-3.725 +(will confuse man)102 590.4 R 3.725(ym)-.15 G 1.225(ail programs.)-3.725 F(Ho)6.225 E(we)-.25 E -.15(ve)-.25 G 2.025 -.4(r, f).15 H 1.225 (or testing purposes, it can be useful when sending).4 F -(mail manually via telnet to the port you are using while deb)102 638.4 -Q(ugging.)-.2 E 2.753(Ad)127 654.6 S(eb)-2.753 E .253(ug cate)-.2 F .254 +(mail manually via telnet to the port you are using while deb)102 602.4 +Q(ugging.)-.2 E 2.753(Ad)127 618.6 S(eb)-2.753 E .253(ug cate)-.2 F .254 (gory is either an inte)-.15 F(ger)-.15 E 2.754(,l)-.4 G(ik)-2.754 E 2.754(e4)-.1 G .254(2, or a name, lik)-2.754 F 2.754(eA)-.1 G 2.754 (NSI. Y)-2.754 F .254(ou can specify a range)-1.1 F .929(of numeric deb) -102 666.6 R .928(ug cate)-.2 F .928(gories using the syntax 17-42.)-.15 +102 630.6 R .928(ug cate)-.2 F .928(gories using the syntax 17-42.)-.15 F -1.1(Yo)5.928 G 3.428(uc)1.1 G .928(an specify a set of named deb) -3.428 F .928(ug cate-)-.2 F .483(gories using a glob pattern lik)102 -678.6 R 2.984<6599>-.1 G 2.984(sm_trace_*\232. At)-2.984 F .484 +642.6 R 2.984<6599>-.1 G 2.984(sm_trace_*\232. At)-2.984 F .484 (present, only \231*\232 and \231?\232)2.984 F .484 -(are supported in these)5.484 F(glob patterns.)102 690.6 Q(Deb)127 706.8 +(are supported in these)5.484 F(glob patterns.)102 654.6 Q(Deb)127 670.8 Q(ug \215ags are set using the)-.2 E F02.5 E F1 (option; the syntax is:)2.5 E 0 Cg EP %%Page: 25 21 @@ -2092,10 +2115,10 @@ F1(\215ag; for e)2.5 E(xample,)-.15 E F1(in the current directory)2.5 E(.)-.65 E F2(Sendmail)127 545 Q F1(gi) 2.571 E -.15(ve)-.25 G 2.571(su).15 G 2.571(ps)-2.571 G(et-user)-2.571 E .071(-ID root permissions \(if it has been installed set-user)-.2 F .07 -(-ID root\) when)-.2 F .779(you use this \215ag, so it is common to use\ - a publicly writable directory \(such as /tmp\) as the queue)102 557 R -(directory \(QueueDirectory or Q option\) while testing.)102 569 Q F0 -2.5(3.7. Logging)87 593 R -.74(Tr)2.5 G(af\214c).74 E F1(Man)127 609.2 Q +(-ID root\) when)-.2 F .06(you use this \215ag, so it is common to use \ +a publicly writable directory \(such as /tmp\) as the queue di-)102 557 +R(rectory \(QueueDirectory or Q option\) while testing.)102 569 Q F0 2.5 +(3.7. Logging)87 593 R -.74(Tr)2.5 G(af\214c).74 E F1(Man)127 609.2 Q 3.255(yS)-.15 G .754 (MTP implementations do not fully implement the protocol.)-3.255 F -.15 (Fo)5.754 G 3.254(re).15 G .754(xample, some per)-3.404 F(-)-.2 E 1.178 @@ -2159,10 +2182,10 @@ F F2(addr)3.006 E(ess)-.37 E F1 .506(is an address to apply the set to.) (\214rst applies ruleset three to the input \231monet:bollard.)102 361.8 R 5.622<9a52>-.7 G .622(uleset one is then applied to the output of) -5.622 F(ruleset three, follo)102 373.8 Q -(wed similarly by rulesets twenty-one and four)-.25 E(.)-.55 E 1.084(If\ - you need more detail, you can also use the \231\255d21\232 \215ag to t\ -urn on more deb)127 390 R 3.584(ugging. F)-.2 F(or)-.15 E -.15(ex)102 -402 S(ample,).15 E(sendmail \255bt \255d21.99)142 418.2 Q .689 +(wed similarly by rulesets twenty-one and four)-.25 E(.)-.55 E .184(If \ +you need more detail, you can also use the \231\255d21\232 \215ag to tu\ +rn on more deb)127 390 R 2.683(ugging. F)-.2 F .183(or e)-.15 F(x-)-.15 +E(ample,)102 402 Q(sendmail \255bt \255d21.99)142 418.2 Q .689 (turns on an incredible amount of information; a single w)102 434.4 R .689(ord address is probably going to print out)-.1 F(se)102 446.4 Q -.15(ve)-.25 G(ral pages w).15 E(orth of information.)-.1 E -1.1(Yo)127 @@ -2221,18 +2244,18 @@ F .248(disk and can thus be shared between dif)102 273.6 R .249 (nection with each remote host may be vie)102 285.6 Q (wed with the command:)-.25 E(sendmail \255bh)142 301.8 Q (This information may be \215ushed with the command:)102 318 Q -(sendmail \255bH)142 334.2 Q 1.535(Flushing the information pre)102 -350.4 R -.15(ve)-.25 G 1.535(nts ne).15 F(w)-.25 E F2(sendmail)4.035 E -F1 1.535(processes from loading it, b)4.035 F 1.534(ut does not pre)-.2 -F -.15(ve)-.25 G(nt).15 E -.15(ex)102 362.4 S -(isting processes from using the status information that the).15 E 2.5 -(ya)-.15 G(lready ha)-2.5 E -.15(ve)-.2 G(.).15 E F0 2.5(4. TUNING)72 -386.4 R F1 1.922 +(sendmail \255bH)142 334.2 Q .345(Flushing the information pre)102 350.4 +R -.15(ve)-.25 G .345(nts ne).15 F(w)-.25 E F2(sendmail)2.845 E F1 .345 +(processes from loading it, b)2.845 F .345(ut does not pre)-.2 F -.15 +(ve)-.25 G .345(nt e).15 F(x-)-.15 E +(isting processes from using the status information that the)102 362.4 Q +2.5(ya)-.15 G(lready ha)-2.5 E -.15(ve)-.2 G(.).15 E F0 2.5(4. TUNING)72 +386.4 R F1 .887 (There are a number of con\214guration parameters you may w)112 402.6 R -1.922(ant to change, depending on the)-.1 F .367 -(requirements of your site.)87 414.6 R .366 +.888(ant to change, depending on the re-)-.1 F .824 +(quirements of your site.)87 414.6 R .823 (Most of these are set using an option in the con\214guration \214le.) -5.367 F -.15(Fo)5.366 G 2.866(re).15 G(xample,)-3.016 E +5.824 F -.15(Fo)5.823 G 3.323(re).15 G(xample,)-3.473 E (the line \231O T)87 426.6 Q (imeout.queuereturn=5d\232 sets option \231T)-.35 E (imeout.queuereturn\232 to the v)-.35 E(alue \2315d\232 \(\214v)-.25 E @@ -2312,48 +2335,48 @@ B .297(of these control SMTP oper)2.797 F(-)-.2 E 3.898(ations. The)117 5.026(.H)-.65 G .026(osts that are slo)-5.026 F 2.526(ww)-.25 G .026 (ill not hold up other deli)-2.526 F(v-)-.25 E (eries in the initial deli)189 312.6 Q -.15(ve)-.25 G(ry attempt.).15 E -33.96(aconnect [0,)117 328.8 R 1.708(unspeci\214ed] The o)4.208 F -.15 -(ve)-.15 G 1.707(rall timeout w).15 F 1.707 -(aiting for all connection for a single)-.1 F(deli)189 340.8 Q -.15(ve) --.25 G .152(ry attempt to succeed.).15 F .152(If 0, no o)5.152 F -.15 -(ve)-.15 G .152(rall limit is applied.).15 F .153(This can be used)5.152 -F .521(to restrict the total amount of time trying to connect to a long\ - list of host that)189 352.8 R .514 +33.96(aconnect [0,)117 328.8 R .293(unspeci\214ed] The o)2.793 F -.15 +(ve)-.15 G .293(rall timeout w).15 F .292 +(aiting for all connection for a single de-)-.1 F(li)189 340.8 Q -.15 +(ve)-.25 G .086(ry attempt to succeed.).15 F .086(If 0, no o)5.086 F +-.15(ve)-.15 G .086(rall limit is applied.).15 F .086 +(This can be used to)5.086 F 1.241(restrict the total amount of time tr\ +ying to connect to a long list of host that)189 352.8 R .514 (could accept an e-mail for the recipient.)189 364.8 R .514 (This timeout does not apply to)5.514 F F0 -.25(Fa)3.014 G(ll-).25 E -(backMXhost)189 376.8 Q F1 2.678(,i)C .177(.e., if the time is e)-2.678 -F .177(xhausted, the)-.15 F F0 -.25(Fa)2.677 G(llbackMXhost).25 E F1 -.177(is tried ne)2.677 F(xt.)-.15 E 46.16(initial The)117 393 R -.1(wa) -2.5 G(it for the initial 220 greeting message [5m, 5m].).1 E 52.28 -(helo The)117 409.2 R -.1(wa)4.226 G 1.727 +(backMXhost)189 376.8 Q F1 2.5(,i)C(.e., if the time is e)-2.5 E +(xhausted, the)-.15 E F0 -.25(Fa)2.5 G(llbackMXhost).25 E F1 +(is tried ne)2.5 E(xt.)-.15 E 46.16(initial The)117 393 R -.1(wa)2.5 G +(it for the initial 220 greeting message [5m, 5m].).1 E 52.28(helo The) +117 409.2 R -.1(wa)4.227 G 1.727 (it for a reply from a HELO or EHLO command [5m, unspeci\214ed].).1 F .1 (This may require a host name lookup, so \214v)189 421.2 R 2.6(em)-.15 G .1(inutes is probably a reasonable)-2.6 F(minimum.)189 433.2 Q 46.72 (mail\207 The)117 449.4 R -.1(wa)2.5 G (it for a reply from a MAIL command [10m, 5m].).1 E 48.95(rcpt\207 The) -117 465.6 R -.1(wa)3.481 G .981 -(it for a reply from a RCPT command [1h, 5m].).1 F .982 -(This should be long)5.982 F 1.556 -(because it could be pointing at a list that tak)189 477.6 R 1.556 -(es a long time to e)-.1 F 1.556(xpand \(see)-.15 F(belo)189 489.6 Q +117 465.6 R -.1(wa)3.482 G .982 +(it for a reply from a RCPT command [1h, 5m].).1 F .981 +(This should be long)5.981 F .504 +(because it could be pointing at a list that tak)189 477.6 R .505 +(es a long time to e)-.1 F .505(xpand \(see be-)-.15 F(lo)189 489.6 Q (w\).)-.25 E 34.5(datainit\207 The)117 505.8 R -.1(wa)2.5 G (it for a reply from a D).1 E -1.21 -1.11(AT A)-.4 H(command [5m, 2m].) 3.61 E 20.62(datablock\207\210 The)117 522 R -.1(wa)2.696 G .196 (it for reading a data block \(that is, the body of the message\).).1 F .196([1h, 3m].)5.196 F .621(This should be long because it also applies\ - to programs piping input to)189 534 R F2(send-)3.12 E(mail)189 546 Q F1 -(which ha)2.5 E .3 -.15(ve n)-.2 H 2.5(og).15 G(uarantee of promptness.) --2.5 E 30.06(data\214nal\207 The)117 562.2 R -.1(wa)2.806 G .306 -(it for a reply from the dot terminating a message.).1 F .306 -([1h, 10m].)5.306 F .306(If this is)5.306 F .884 + to programs piping input to)189 534 R F2(send-)3.121 E(mail)189 546 Q +F1(which ha)2.5 E .3 -.15(ve n)-.2 H 2.5(og).15 G +(uarantee of promptness.)-2.5 E 30.06(data\214nal\207 The)117 562.2 R +-.1(wa)2.806 G .306(it for a reply from the dot terminating a message.) +.1 F .306([1h, 10m].)5.306 F .306(If this is)5.306 F .883 (shorter than the time actually needed for the recei)189 574.2 R -.15 -(ve)-.25 G 3.383(rt).15 G 3.383(od)-3.383 G(eli)-3.383 E -.15(ve)-.25 G -3.383(rt).15 G .883(he message,)-3.383 F(duplicates will be generated.) +(ve)-.25 G 3.384(rt).15 G 3.384(od)-3.384 G(eli)-3.384 E -.15(ve)-.25 G +3.384(rt).15 G .884(he message,)-3.384 F(duplicates will be generated.) 189 586.2 Q(This is discussed in RFC 1047.)5 E 55.06(rset The)117 602.4 R -.1(wa)2.5 G(it for a reply from a RSET command [5m, unspeci\214ed].) .1 E 53.94(quit The)117 618.6 R -.1(wa)2.5 G(it for a reply from a Q).1 E(UIT command [2m, unspeci\214ed].)-.1 E 50.61(misc The)117 634.8 R -.1 -(wa)2.76 G .261(it for a reply from miscellaneous \(b).1 F .261 +(wa)2.761 G .261(it for a reply from miscellaneous \(b).1 F .261 (ut short\) commands such as NOOP)-.2 F (\(no-operation\) and VERB \(go into v)189 646.8 Q(erbose mode\).)-.15 E ([2m, unspeci\214ed].)5 E 20.06(command\207\210 In)117 663 R(serv)2.5 E @@ -2385,19 +2408,19 @@ BP (wa)2.5 G(it for a reply to an LMTP LHLO command [2m, unspeci\214ed].).1 E 52.28(auth The)117 112.2 R(timeout for a reply in an SMTP A)2.5 E (UTH dialogue [10m, unspeci\214ed].)-.55 E 42.83(starttls The)117 128.4 -R .141(timeout for a reply to an SMTP ST)2.641 F(AR)-.93 E .14 +R .141(timeout for a reply to an SMTP ST)2.64 F(AR)-.93 E .141 (TTLS command and the TLS hand-)-.6 F(shak)189 140.4 Q 2.5(e[)-.1 G (1h, unspeci\214ed].)-2.5 E 32.28(\214leopen\210 The)117 156.6 R (timeout for opening .forw)2.5 E(ard and :include: \214les [60s, none].) --.1 E 36.17(control\210 The)117 172.8 R .241 -(timeout for a complete control sock)2.74 F .241 -(et transaction to complete [2m, none].)-.1 F 25.05(hoststatus\210 Ho) -117 189 R 4.142(wl)-.25 G 1.642 -(ong status information about a host \(e.g., host do)-4.142 F 1.641 -(wn\) will be cached)-.25 F -(before it is considered stale [30m, unspeci\214ed].)189 201 Q(resolv) -117 217.2 Q(er)-.15 E 3.28(.retrans\210 The)-.55 F(resolv)4.274 E(er') --.15 E 4.274(sr)-.55 G 1.774(etransmission time interv)-4.274 F 1.775 +-.1 E 36.17(control\210 The)117 172.8 R +(timeout for a complete control sock)2.5 E +(et transaction to complete [2m, none].)-.1 E 25.05(hoststatus\210 Ho) +117 189 R 2.841(wl)-.25 G .341 +(ong status information about a host \(e.g., host do)-2.841 F .34 +(wn\) will be cached be-)-.25 F +(fore it is considered stale [30m, unspeci\214ed].)189 201 Q(resolv)117 +217.2 Q(er)-.15 E 3.28(.retrans\210 The)-.55 F(resolv)4.274 E(er')-.15 E +4.274(sr)-.55 G 1.774(etransmission time interv)-4.274 F 1.775 (al \(in seconds\) [v)-.25 F 4.275(aries]. Sets)-.25 F(both)4.275 E/F2 10/Times-Italic@0 SF -.55(Ti)189 229.2 S(meout.r).55 E(esolver)-.37 E (.r)-1.11 E(etr)-.37 E(ans.\214r)-.15 E(st)-.1 E F1(and)2.5 E F2 -.55 @@ -2412,16 +2435,16 @@ R(er')-.15 E 6.054(sr)-.55 G 3.554(etransmission time interv)-6.054 F 3.555(al \(in seconds\) for all resolv)-.25 F(er)-.15 E(lookups e)189 309.6 Q(xcept the \214rst deli)-.15 E -.15(ve)-.25 G(ry attempt [v).15 E (aries].)-.25 E(resolv)117 325.8 Q(er)-.15 E 11.61(.retry\210 The)-.55 F -3.838(number of times to retransmit a resolv)6.339 F 3.838(er query)-.15 -F 8.838(.S)-.65 G 3.838(ets both)-8.838 F F2 -.55(Ti)6.338 G(me-).55 E -(out.r)189 337.8 Q(esolver)-.37 E(.r)-1.11 E(etry)-.37 E(.\214r)-.55 E -(st)-.1 E F1(and)2.5 E F2 -.55(Ti)2.5 G(meout.r).55 E(esolver)-.37 E(.r) +1.726(number of times to retransmit a resolv)4.226 F 1.725(er query)-.15 +F 6.725(.S)-.65 G 1.725(ets both)-6.725 F F2 -.55(Ti)4.225 G(meout.r).55 +E(e-)-.37 E(solver)189 337.8 Q(.r)-1.11 E(etry)-.37 E(.\214r)-.55 E(st) +-.1 E F1(and)2.5 E F2 -.55(Ti)2.5 G(meout.r).55 E(esolver)-.37 E(.r) -1.11 E(etry)-.37 E(.normal)-.55 E F1([v)2.5 E(aries].)-.25 E(resolv)117 -354 Q(er)-.15 E(.retry)-.55 E(.\214rst\210)-.65 E 1.66 -(The number of times to retransmit a resolv)189 366 R 1.66 -(er query for the \214rst attempt to)-.15 F(deli)189 378 Q -.15(ve)-.25 -G 2.5(ram).15 G(essage [v)-2.5 E(aries].)-.25 E(resolv)117 394.2 Q(er) --.15 E(.retry)-.55 E(.normal\210)-.65 E +354 Q(er)-.15 E(.retry)-.55 E(.\214rst\210)-.65 E .45 +(The number of times to retransmit a resolv)189 366 R .451 +(er query for the \214rst attempt to de-)-.15 F(li)189 378 Q -.15(ve) +-.25 G 2.5(ram).15 G(essage [v)-2.5 E(aries].)-.25 E(resolv)117 394.2 Q +(er)-.15 E(.retry)-.55 E(.normal\210)-.65 E (The number of times to retransmit a resolv)189 406.2 Q (er query for all resolv)-.15 E(er lookups)-.15 E -.15(ex)191.5 418.2 S (cept the \214rst deli).15 E -.15(ve)-.25 G(ry attempt [v).15 E(aries].) @@ -2447,20 +2470,20 @@ F1 .463(After sitting in the queue for a fe)142 571.2 R 2.964(wd)-.25 G (nient to also send a w).15 F .56(arning message if)-.1 F .236 (the message is in the queue longer than a fe)117 607.2 R 2.736(wh)-.25 G .236(ours \(assuming you normally ha)-2.736 F .536 -.15(ve g)-.2 H -.236(ood connec-).15 F(ti)117 619.2 Q 2.073 -(vity; if your messages normally took se)-.25 F -.15(ve)-.25 G 2.073 -(ral hours to send you w).15 F(ouldn')-.1 E 4.574(tw)-.18 G 2.074 -(ant to do this)-4.674 F .794(because it w)117 631.2 R(ouldn')-.1 E -3.294(tb)-.18 G 3.294(ea)-3.294 G 3.294(nu)-3.294 G .794(nusual e)-3.294 -F -.15(ve)-.25 G 3.294(nt\). These).15 F .794 -(timeouts are set using the)3.294 F F0 -.18(Ti)3.293 G(meout.queuer).18 -E(e-)-.18 E(tur)117 643.2 Q(n)-.15 E F1(and)3.075 E F0 -.18(Ti)3.075 G -(meout.queuewar).18 E(n)-.15 E F1 .576 -(options in the con\214guration \214le \(pre)3.076 F .576 -(viously both were set using)-.25 F(the)117 655.2 Q F0(T)2.5 E F1 -(option\).)2.5 E 1.368(If the message is submitted using the)142 671.4 R -/F3 9/Times-Roman@0 SF(NO)3.867 E 1.617(TIFY SMTP)-.36 F F1 -.15(ex) -3.867 G 1.367(tension, w).15 F 1.367(arning messages will)-.1 F .888 +.236(ood connec-).15 F(ti)117 619.2 Q .989 +(vity; if your messages normally took se)-.25 F -.15(ve)-.25 G .989 +(ral hours to send you w).15 F(ouldn')-.1 E 3.49(tw)-.18 G .99 +(ant to do this be-)-3.59 F .335(cause it w)117 631.2 R(ouldn')-.1 E +2.835(tb)-.18 G 2.835(ea)-2.835 G 2.835(nu)-2.835 G .335(nusual e)-2.835 +F -.15(ve)-.25 G 2.835(nt\). These).15 F .334 +(timeouts are set using the)2.835 F F0 -.18(Ti)2.834 G(meout.queuer).18 +E(etur)-.18 E(n)-.15 E F1(and)117 643.2 Q F0 -.18(Ti)2.827 G +(meout.queuewar).18 E(n)-.15 E F1 .328 +(options in the con\214guration \214le \(pre)2.827 F .328 +(viously both were set using the)-.25 F F0(T)2.828 E F1(option\).)117 +655.2 Q 1.368(If the message is submitted using the)142 671.4 R/F3 9 +/Times-Roman@0 SF(NO)3.867 E 1.617(TIFY SMTP)-.36 F F1 -.15(ex)3.867 G +1.367(tension, w).15 F 1.367(arning messages will)-.1 F .888 (only be sent if)117 683.4 R F3(NO)3.388 E(TIFY=DELA)-.36 E(Y)-.945 E F1 .888(is speci\214ed.)3.388 F .888(The queuereturn and queue)5.888 F -.1 (wa)-.25 G .888(rn timeouts can be).1 F .67(further quali\214ed with a \ @@ -2488,11 +2511,11 @@ recedences.)-.1 F .014(If the message)5.014 F 3.288(has a normal \(def) E(out.queuer)117 132 Q(etur)-.18 E(n.dsn)-.15 E F1(and)2.751 E F0 -.18 (Ti)2.751 G(meout.queuewar).18 E(n.dsn)-.15 E F1 .251(can be used to gi) 2.751 F .551 -.15(ve a)-.25 H 2.751(na).15 G(lternati)-2.751 E .551 -.15 -(ve w)-.25 H .25(arn and).05 F 2.027(return time for DSNs.)117 144 R -2.027(The v)7.027 F 2.027(alue "no)-.25 F 2.027(w" can be used for -O T) --.25 F 2.028(imeout.queuereturn to return)-.35 F .901(entries immediate\ -ly during a queue run, e.g., to bounce messages independent of their ti\ -me in)117 156 R(the queue.)117 168 Q .28 +(ve w)-.25 H .25(arn and).05 F .874(return time for DSNs.)117 144 R .874 +(The v)5.874 F .874(alue "no)-.25 F .874(w" can be used for -O T)-.25 F +.874(imeout.queuereturn to return en-)-.35 F .489(tries immediately dur\ +ing a queue run, e.g., to bounce messages independent of their time in \ +the)117 156 R(queue.)117 168 Q .28 (Since these options are global, and since you cannot kno)142 184.2 R(w) -.25 E/F2 10/Times-Italic@0 SF 2.78(ap)2.78 G(riori)-2.78 E F1(ho)2.78 E 2.78(wl)-.25 G .28(ong another host)-2.78 F .476 @@ -2548,9 +2571,9 @@ R .285(ws users to send \231high priority\232 messages by including a \ \231Precedence:\232 \214eld)-.25 F .007(in their message; the v)102 537.6 R .007(alue of this \214eld is look)-.25 F .008(ed up in the)-.1 F F0(P)2.508 E F1 .008(lines of the con\214guration \214le.)2.508 F .008 -(Since the)5.008 F 1.967(number of recipients af)102 549.6 R 1.967(fect\ -s the amount of load a message presents to the system, this is also)-.25 -F(included into the priority)102 561.6 Q(.)-.65 E .53 +(Since the)5.008 F 1.051(number of recipients af)102 549.6 R 1.051(fect\ +s the amount of load a message presents to the system, this is also in-) +-.25 F(cluded into the priority)102 561.6 Q(.)-.65 E .53 (The recipient and class f)127 577.8 R .53 (actors can be set in the con\214guration \214le using the)-.1 F F0 (RecipientF)3.03 E(actor)-.25 E F1(\()102 589.8 Q F0(y)A F1 3.443(\)a)C @@ -2565,16 +2588,16 @@ F(included into the priority)102 561.6 Q(.)-.65 E .53 2.88 E F0(RecipientFactor\))2.2 E F1(\(Remember)102 637.8 Q 3.328 (,h)-.4 G .828(igher v)-3.328 F .828(alues for this parameter actually \ mean that the job will be treated with lo)-.25 F(wer)-.25 E(priority)102 -649.8 Q(.\))-.65 E 1.519(The priority of a job can also be adjusted eac\ -h time it is processed \(that is, each time an)127 666 R .235 -(attempt is made to deli)102 678 R -.15(ve)-.25 G 2.736(ri).15 G .236 -(t\) using the \231w)-2.736 F .236(ork time f)-.1 F(actor)-.1 E 1.636 --.7(,\232 s)-.4 H .236(et by the).7 F F0(RetryF)2.736 E(actor)-.25 E F1 -(\()2.736 E F0(Z)A F1 2.736(\)o)C 2.736(ption. This)-2.736 F .367 -(is added to the priority)102 690 R 2.867(,s)-.65 G 2.867(oi)-2.867 G -2.867(tn)-2.867 G .366 +649.8 Q(.\))-.65 E .752(The priority of a job can also be adjusted each\ + time it is processed \(that is, each time an at-)127 666 R .114 +(tempt is made to deli)102 678 R -.15(ve)-.25 G 2.614(ri).15 G .114 +(t\) using the \231w)-2.614 F .114(ork time f)-.1 F(actor)-.1 E 1.515 +-.7(,\232 s)-.4 H .115(et by the).7 F F0(RetryF)2.615 E(actor)-.25 E F1 +(\()2.615 E F0(Z)A F1 2.615(\)o)C 2.615(ption. This)-2.615 F(is)2.615 E +.928(added to the priority)102 690 R 3.428(,s)-.65 G 3.428(oi)-3.428 G +3.428(tn)-3.428 G .927 (ormally decreases the precedence of the job, on the grounds that jobs) --2.867 F .137(that ha)102 702 R .437 -.15(ve f)-.2 H .137(ailed man).05 +-3.428 F .137(that ha)102 702 R .437 -.15(ve f)-.2 H .137(ailed man).05 F 2.637(yt)-.15 G .137(imes will tend to f)-2.637 F .137(ail ag)-.1 F .137(ain in the future.)-.05 F(The)5.137 E F0(RetryF)2.637 E(actor)-.25 E F1 .137(option def)2.637 F .138(aults to)-.1 F(90000.)102 714 Q 0 Cg @@ -2729,10 +2752,10 @@ BP run in mode \231q\232 \(queue only\), \231d\232 \(defer\), or \231b\ \232 \(deli)127 248.4 R -.15(ve)-.25 G 2.552(ri).15 G 2.552(nb)-2.552 G (ackground\))-2.552 E/F2 10/Times-Italic@0 SF(sendmail)2.551 E F1(will) -2.551 E 1.391(not e)102 260.4 R 1.392(xpand aliases and follo)-.15 F -3.892(w.)-.25 G(forw)-3.892 E 1.392 -(ard \214les upon initial receipt of the mail.)-.1 F 1.392 -(This speeds up the)6.392 F(response to RCPT commands.)102 272.4 Q +2.551 E .51(not e)102 260.4 R .51(xpand aliases and follo)-.15 F 3.01 +(w.)-.25 G(forw)-3.01 E .51 +(ard \214les upon initial receipt of the mail.)-.1 F .51 +(This speeds up the re-)5.51 F(sponse to RCPT commands.)102 272.4 Q (Mode \231i\232 should not be used by the SMTP serv)5 E(er)-.15 E(.)-.55 E F0 2.5(4.8. Log)87 296.4 R(Le)2.5 E -.1(ve)-.15 G(l).1 E F1 1.041 (The le)127 312.6 R -.15(ve)-.25 G 3.541(lo).15 G 3.541(fl)-3.541 G @@ -2815,18 +2838,19 @@ F0(S)2.622 E F1 .122(\215ag to the mailer for mail-)2.622 F .804 (we)-.25 E -.15(ve)-.25 G 1.604 -.4(r, t).15 H .804 (his will cause mail processing to be).4 F(accounted \(using)117 288.6 Q F2(sa)2.5 E F1 -(\(8\)\) to root rather than to the user sending the mail.)1.666 E 3.557 -(Am)142 304.8 S 1.057(iddle ground is to set the)-3.557 F F0(RunAsUser) -3.557 E F1 3.557(option. This)3.557 F(causes)3.557 E F2(sendmail)3.557 E -F1 1.058(to become the)3.557 F .392(indicated user as soon as it has do\ -ne the startup that requires root pri)117 316.8 R(vile)-.25 E .392 -(ges \(primarily)-.15 F 2.892(,o)-.65 G(pening)-2.892 E(the)117 328.8 Q -/F3 9/Times-Roman@0 SF(SMTP)3.741 E F1(sock)3.741 E 3.741(et\). If)-.1 F -1.241(you use)3.741 F F0(RunAsUser)3.741 E F1 3.741(,t)C 1.241 -(he queue directory \(normally)-3.741 F F2(/var/spool/mqueue)3.742 E F1 -(\))A 1.315(should be o)117 340.8 R 1.315(wned by that user)-.25 F 3.815 -(,a)-.4 G 1.315(nd all \214les and databases \(including user)-3.815 F -F2(.forwar)3.814 E(d)-.37 E F1 1.314(\214les, alias)3.814 F .256 +(\(8\)\) to root rather than to the user sending the mail.)1.666 E 2.579 +(Am)142 304.8 S .079(iddle ground is to set the)-2.579 F F0(RunAsUser) +2.579 E F1 2.579(option. This)2.579 F(causes)2.579 E F2(sendmail)2.58 E +F1 .08(to become the in-)2.58 F .911 +(dicated user as soon as it has done the startup that requires root pri) +117 316.8 R(vile)-.25 E .91(ges \(primarily)-.15 F 3.41(,o)-.65 G +(pening)-3.41 E(the)117 328.8 Q/F3 9/Times-Roman@0 SF(SMTP)3.741 E F1 +(sock)3.741 E 3.741(et\). If)-.1 F 1.241(you use)3.741 F F0(RunAsUser) +3.741 E F1 3.741(,t)C 1.241(he queue directory \(normally)-3.741 F F2 +(/var/spool/mqueue)3.742 E F1(\))A 1.315(should be o)117 340.8 R 1.315 +(wned by that user)-.25 F 3.815(,a)-.4 G 1.315 +(nd all \214les and databases \(including user)-3.815 F F2(.forwar)3.814 +E(d)-.37 E F1 1.314(\214les, alias)3.814 F .256 (\214les, :include: \214les, and e)117 352.8 R .256 (xternal databases\) must be readable by that user)-.15 F 5.257(.A)-.55 G .257(lso, since sendmail)-5.257 F .836 @@ -2858,23 +2882,23 @@ n the grounds that the)-.1 F 2.751(ym)-.15 G(ight)-2.751 E(ha)117 501 Q 1.216 -.15(ve b)-.2 H .916 (een tampered with by someone other than the o).15 F .916 (wner; it will e)-.25 F -.15(ve)-.25 G 3.416(nr).15 G .916 -(efuse to read \214les in)-3.416 F 1.456(group writable directories.)117 -513 R 1.456(Also, sendmail will refuse to create a ne)6.456 F 3.957(wa) --.25 G 1.457(liases database in an)-3.957 F .032(unsafe directory)117 -525 R 5.032(.Y)-.65 G .031(ou can get around this by manually creating \ -the database \214le as a trusted user)-6.132 F +(efuse to read \214les in)-3.416 F .304(group writable directories.)117 +513 R .304(Also, sendmail will refuse to create a ne)5.304 F 2.804(wa) +-.25 G .304(liases database in an un-)-2.804 F .657(safe directory)117 +525 R 5.657(.Y)-.65 G .656(ou can get around this by manually creating \ +the database \214le as a trusted user)-6.757 F (ahead of time and then reb)117 537 Q(uilding the aliases database with) -.2 E F0(newaliases)2.5 E F1(.)A .437(If you are)142 553.2 R F2(quite) 2.937 E F1 .437(sure that your con\214guration is safe and you w)2.937 F (ant)-.1 E F2(sendmail)2.938 E F1 .438(to a)2.938 F -.2(vo)-.2 G .438 (id these).2 F 1.187(security checks, you can turn of)117 565.2 R 3.687 (fc)-.25 G 1.187(ertain checks using the)-3.687 F F0(DontBlameSendmail) -3.686 E F1 3.686(option. This)3.686 F 1.389(option tak)117 577.2 R 1.389 -(es one or more names that disable checks.)-.1 F 1.39 -(In the descriptions that follo)6.389 F 2.69 -.65(w, \231)-.25 H(unsafe) -.65 E(directory\232 means a directory that is writable by an)117 589.2 Q -(yone other than the o)-.15 E(wner)-.25 E 5(.T)-.55 G(he v)-5 E -(alues are:)-.25 E 15.73(Safe No)117 605.4 R(special handling.)2.5 E +3.686 E F1 3.686(option. This)3.686 F .389(option tak)117 577.2 R .389 +(es one or more names that disable checks.)-.1 F .39 +(In the descriptions that follo)5.389 F 1.69 -.65(w, \231)-.25 H .39 +(unsafe di-).65 F(rectory\232 means a directory that is writable by an) +117 589.2 Q(yone other than the o)-.15 E(wner)-.25 E 5(.T)-.55 G(he v)-5 +E(alues are:)-.25 E 15.73(Safe No)117 605.4 R(special handling.)2.5 E (AssumeSafeCho)117 621.6 Q(wn)-.25 E .413(Assume that the)153 633.6 R F2 -.15(ch)2.913 G(own).15 E F1 .413(system call is restricted to root.) 2.913 F .413(Since some v)5.413 F .412(ersions of UNIX)-.15 F .865 @@ -2883,11 +2907,11 @@ the database \214le as a trusted user)-6.132 F F2(send-)3.366 E(mail)153 657.6 Q F1 .457(often cannot assume that a gi) 2.957 F -.15(ve)-.25 G 2.956<6e8c>.15 G .456(le w)-2.956 F .456 (as created by the o)-.1 F(wner)-.25 E 2.956(,p)-.4 G .456 -(articularly when)-2.956 F 1.474(it is in a writable directory)153 669.6 -R 6.475(.Y)-.65 G 1.475(ou can set this \215ag if you kno)-7.575 F 3.975 -(wt)-.25 G 1.475(hat \214le gi)-3.975 F -.15(ve)-.25 G -2.3 -.15(aw a) -.15 H 3.975(yi).15 G(s)-3.975 E(restricted on your system.)153 681.6 Q -(ClassFileInUnsafeDirP)117 697.8 Q(ath)-.15 E .494 +(articularly when)-2.956 F .637(it is in a writable directory)153 669.6 +R 5.637(.Y)-.65 G .637(ou can set this \215ag if you kno)-6.737 F 3.137 +(wt)-.25 G .638(hat \214le gi)-3.137 F -.15(ve)-.25 G -2.3 -.15(aw a).15 +H 3.138(yi).15 G 3.138(sr)-3.138 G(e-)-3.138 E(stricted on your system.) +153 681.6 Q(ClassFileInUnsafeDirP)117 697.8 Q(ath)-.15 E .494 (When reading class \214les \(using the)153 709.8 R F0(F)2.993 E F1 .493 (line in the con\214guration \214le\), allo)2.993 F 2.993<778c>-.25 G .493(les that are)-2.993 F(in unsafe directories.)153 721.8 Q 0 Cg EP @@ -2969,9 +2993,9 @@ E(Link)117 164.4 Q(edClassFileInWritableDir)-.1 E(Allo)153 176.4 Q 2.5 (\214les that are links in writable directories.)2.5 E(Link)117 220.8 Q (edIncludeFileInWritableDir)-.1 E(Allo)153 232.8 Q(w)-.25 E F2 (:include:)2.5 E F1(\214les that are links in writable directories.)2.5 -E(Link)117 249 Q(edMapInWritableDir)-.1 E(Allo)153 261 Q 2.684(wm)-.25 G -.184(ap \214les that are links in writable directories.)-2.684 F .185 -(This includes alias database \214les.)5.185 F(Link)117 277.2 Q +E(Link)117 249 Q(edMapInWritableDir)-.1 E(Allo)153 261 Q 2.5(wm)-.25 G +(ap \214les that are links in writable directories.)-2.5 E +(This includes alias database \214les.)5 E(Link)117 277.2 Q (edServiceSwitchFileInWritableDir)-.1 E(Allo)153 289.2 Q 2.5(wt)-.25 G (he service switch \214le to be a link e)-2.5 E -.15(ve)-.25 G 2.5(ni) .15 G 2.5(ft)-2.5 G(he directory is writable.)-2.5 E(MapInUnsafeDirP)117 @@ -2979,18 +3003,18 @@ E(Link)117 249 Q(edMapInWritableDir)-.1 E(Allo)153 261 Q 2.684(wm)-.25 G F F2(hash)2.97 E F1(,)A F2(btr)2.97 E(ee)-.37 E F1 2.97(,a)C(nd)-2.97 E F2(dbm)2.97 E F1 .47(\214les\) in unsafe directories.)2.97 F .47 (This includes alias)5.47 F(database \214les.)153 329.4 Q -(NonRootSafeAddr)117 345.6 Q .484(Do not mark \214le and program deli) -153 357.6 R -.15(ve)-.25 G .485 +(NonRootSafeAddr)117 345.6 Q .485(Do not mark \214le and program deli) +153 357.6 R -.15(ve)-.25 G .484 (ries as unsafe if sendmail is not running with root).15 F(pri)153 369.6 Q(vile)-.25 E(ges.)-.15 E(RunProgramInUnsafeDirP)117 385.8 Q(ath)-.15 E (Run programs that are in writable directories without logging a w)153 397.8 Q(arning.)-.1 E(RunWritableProgram)117 414 Q (Run programs that are group- or w)153 426 Q (orld-writable without logging a w)-.1 E(arning.)-.1 E -.35(Tr)117 442.2 -S(ustStick).35 E(yBit)-.15 E(Allo)153 454.2 Q 3.406(wg)-.25 G .906 -(roup or w)-3.406 F .905(orld writable directories if the stick)-.1 F -3.405(yb)-.15 G .905(it is set on the directory)-3.405 F 5.905(.D)-.65 G -(o)-5.905 E(not set this on systems which do not honor the stick)153 +S(ustStick).35 E(yBit)-.15 E(Allo)153 454.2 Q 3.405(wg)-.25 G .905 +(roup or w)-3.405 F .905(orld writable directories if the stick)-.1 F +3.405(yb)-.15 G .906(it is set on the directory)-3.405 F 5.906(.D)-.65 G +(o)-5.906 E(not set this on systems which do not honor the stick)153 466.2 Q 2.5(yb)-.15 G(it on directories.)-2.5 E -.8(Wo)117 482.4 S (rldWritableAliasFile).8 E(Accept w)153 494.4 Q (orld-writable alias \214les.)-.1 E -.8(Wo)117 510.6 S(rldWritableF).8 E @@ -3018,229 +3042,228 @@ BP /F0 10/Times-Bold@0 SF 193.36(SMM:08-36 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .286 (When trying to open a connection the cache is \214rst searched.)127 96 -R .286(If an open connection is found,)5.286 F 1.033 -(it is probed to see if it is still acti)102 108 R 1.333 -.15(ve b)-.25 -H 3.533(ys).15 G 1.033(ending a)-3.533 F/F2 9/Times-Roman@0 SF(RSET) -3.533 E F1 3.534(command. It)3.534 F 1.034(is not an error if this f) -3.534 F(ails;)-.1 E(instead, the connection is closed and reopened.)102 -120 Q -1 -.8(Tw o)127 136.2 T .408 -(parameters control the connection cache.)3.708 F(The)5.408 E F0 -(ConnectionCacheSize)2.908 E F1(\()2.908 E F0(k)A F1 2.908(\)o)C .408 -(ption de\214nes)-2.908 F .145 +R .287(If an open connection is found,)5.286 F .397 +(it is probed to see if it is still acti)102 108 R .697 -.15(ve b)-.25 H +2.897(ys).15 G .397(ending a)-2.897 F/F2 9/Times-Roman@0 SF(RSET)2.897 E +F1 2.897(command. It)2.897 F .396(is not an error if this f)2.897 F .396 +(ails; in-)-.1 F(stead, the connection is closed and reopened.)102 120 Q +-1 -.8(Tw o)127 136.2 T .408(parameters control the connection cache.) +3.708 F(The)5.408 E F0(ConnectionCacheSize)2.908 E F1(\()2.908 E F0(k)A +F1 2.908(\)o)C .408(ption de\214nes)-2.908 F .145 (the number of simultaneous open connections that will be permitted.)102 -148.2 R .145(If it is set to zero, connections)5.145 F .213 +148.2 R .145(If it is set to zero, connections)5.145 F .212 (will be closed as quickly as possible.)102 160.2 R .212(The def)5.212 F -.212(ault is one.)-.1 F .212(This should be set as appropriate for your) -5.212 F .629 +.212(ault is one.)-.1 F .213(This should be set as appropriate for your) +5.212 F .63 (system size; it will limit the amount of system resources that)102 -172.2 R/F3 10/Times-Italic@0 SF(sendmail)3.13 E F1 .63 -(will use during queue runs.)3.13 F(Ne)102 184.2 Q -.15(ve)-.25 G 2.5 +172.2 R/F3 10/Times-Italic@0 SF(sendmail)3.129 E F1 .629 +(will use during queue runs.)3.129 F(Ne)102 184.2 Q -.15(ve)-.25 G 2.5 (rs).15 G(et this higher than 4.)-2.5 E(The)127 200.4 Q F0 -(ConnectionCacheT)2.741 E(imeout)-.18 E F1(\()2.741 E F0(K)A F1 2.741 +(ConnectionCacheT)2.74 E(imeout)-.18 E F1(\()2.741 E F0(K)A F1 2.741 (\)o)C .241(ption speci\214es the maximum time that an)-2.741 F 2.741 -(yc)-.15 G .24(ached con-)-2.741 F .899 +(yc)-.15 G .241(ached con-)-2.741 F .9 (nection will be permitted to idle.)102 212.4 R .899 -(When the idle time e)5.899 F .9(xceeds this v)-.15 F .9 +(When the idle time e)5.9 F .899(xceeds this v)-.15 F .899 (alue the connection is closed.)-.25 F .34 (This number should be small \(under ten minutes\) to pre)102 224.4 R -.15(ve)-.25 G .34(nt you from grabbing too man).15 F 2.84(yr)-.15 G (esources)-2.84 E(from other hosts.)102 236.4 Q(The def)5 E (ault is \214v)-.1 E 2.5(em)-.15 G(inutes.)-2.5 E F0 2.5(4.11. Name)87 -260.4 R(Ser)2.5 E -.1(ve)-.1 G 2.5(rA).1 G(ccess)-2.5 E F1 .103 +260.4 R(Ser)2.5 E -.1(ve)-.1 G 2.5(rA).1 G(ccess)-2.5 E F1 .104 (Control of host address lookups is set by the)127 276.6 R F0(hosts) -2.604 E F1 .104(service entry in your service switch \214le.)2.604 F(If) -5.104 E .99(you are on a system that has b)102 288.6 R .99 +2.604 E F1 .103(service entry in your service switch \214le.)2.603 F(If) +5.103 E .99(you are on a system that has b)102 288.6 R .99 (uilt-in service switch support \(e.g., Ultrix, Solaris, or DEC OSF/1\)) --.2 F .335(then your system is probably con\214gured properly already) -102 300.6 R 5.335(.O)-.65 G(therwise,)-5.335 E F3(sendmail)2.836 E F1 -.336(will consult the \214le)2.836 F F0(/etc/mail/ser)102 312.6 Q -(vice.switch)-.1 E F1 4.902(,w)C 2.402(hich should be created.)-4.902 F +-.2 F .336(then your system is probably con\214gured properly already) +102 300.6 R 5.335(.O)-.65 G(therwise,)-5.335 E F3(sendmail)2.835 E F1 +.335(will consult the \214le)2.835 F F0(/etc/mail/ser)102 312.6 Q +(vice.switch)-.1 E F1 4.901(,w)C 2.402(hich should be created.)-4.901 F F3(Sendmail)7.402 E F1 2.402(only uses tw)4.902 F 4.902(oe)-.1 G -(ntries:)-4.902 E F0(hosts)4.901 E F1(and)4.901 E F0(aliases)102 324.6 Q -F1 2.745(,a)C .246 -(lthough system routines may use other services \(notably the)-2.745 F -F0(passwd)2.746 E F1 .246(service for user name)2.746 F(lookups by)102 +(ntries:)-4.902 E F0(hosts)4.902 E F1(and)4.902 E F0(aliases)102 324.6 Q +F1 2.746(,a)C .246 +(lthough system routines may use other services \(notably the)-2.746 F +F0(passwd)2.746 E F1 .245(service for user name)2.745 F(lookups by)102 336.6 Q F3 -.1(ge)2.5 G(tpwname).1 E F1(\).)A(Ho)127 352.8 Q(we)-.25 E --.15(ve)-.25 G 1.511 -.4(r, s).15 H .711 +-.15(ve)-.25 G 1.51 -.4(r, s).15 H .711 (ome systems \(such as SunOS 4.X\) will do DNS lookups re).4 F -.05(ga) --.15 G .71(rdless of the setting).05 F 1.028 -(of the service switch entry)102 364.8 R 6.028(.I)-.65 G 3.529(np)-6.028 +-.15 G .711(rdless of the setting).05 F 1.029 +(of the service switch entry)102 364.8 R 6.029(.I)-.65 G 3.529(np)-6.029 G(articular)-3.529 E 3.529(,t)-.4 G 1.029(he system routine)-3.529 F F3 --.1(ge)3.529 G(thostbyname).1 E F1 1.029(\(3\) is used to look up)B -1.869(host names, and man)102 376.8 R 4.369(yv)-.15 G 1.869(endor v) --4.519 F 1.869 +-.1(ge)3.529 G(thostbyname).1 E F1 1.028(\(3\) is used to look up)B +1.868(host names, and man)102 376.8 R 4.368(yv)-.15 G 1.868(endor v) +-4.518 F 1.869 (ersions try some combination of DNS, NIS, and \214le lookup in)-.15 F -1.73(/etc/hosts without consulting a service switch.)102 388.8 R F3 -(Sendmail)6.731 E F1(mak)4.231 E 1.731(es no attempt to w)-.1 F 1.731 -(ork around this)-.1 F .368(problem, and the DNS lookup will be done an) -102 400.8 R(yw)-.15 E(ay)-.1 E 5.368(.I)-.65 G 2.868(fy)-5.368 G .367 -(ou do not ha)-2.868 F .667 -.15(ve a n)-.2 H(ameserv).15 E .367 +1.731(/etc/hosts without consulting a service switch.)102 388.8 R F3 +(Sendmail)6.731 E F1(mak)4.231 E 1.731(es no attempt to w)-.1 F 1.73 +(ork around this)-.1 F .367(problem, and the DNS lookup will be done an) +102 400.8 R(yw)-.15 E(ay)-.1 E 5.368(.I)-.65 G 2.868(fy)-5.368 G .368 +(ou do not ha)-2.868 F .668 -.15(ve a n)-.2 H(ameserv).15 E .368 (er con\214gured at)-.15 F .464(all, such as at a UUCP-only site,)102 412.8 R F3(sendmail)2.964 E F1 .464 (will get a \231connection refused\232 message when it tries to)2.964 F -.424(connect to the name serv)102 424.8 R(er)-.15 E 5.424(.I)-.55 G -2.924(ft)-5.424 G(he)-2.924 E F0(hosts)2.924 E F1 .423 -(switch entry has the service \231dns\232 listed some)2.924 F .423 -(where in the)-.25 F(list,)102 436.8 Q F3(sendmail)3.312 E F1 .813 +.423(connect to the name serv)102 424.8 R(er)-.15 E 5.423(.I)-.55 G +2.923(ft)-5.423 G(he)-2.923 E F0(hosts)2.923 E F1 .424 +(switch entry has the service \231dns\232 listed some)2.923 F .424 +(where in the)-.25 F(list,)102 436.8 Q F3(sendmail)3.313 E F1 .813 (will interpret this to mean a temporary f)3.313 F .813 (ailure and will queue the mail for later pro-)-.1 F (cessing; otherwise, it ignores the name serv)102 448.8 Q(er data.)-.15 -E .673(The same technique is used to decide whether to do MX lookups.) -127 465 R .672(If you w)5.672 F .672(ant MX support,)-.1 F(you)102 477 Q +E .672(The same technique is used to decide whether to do MX lookups.) +127 465 R .673(If you w)5.673 F .673(ant MX support,)-.1 F(you)102 477 Q F3(must)2.5 E F1(ha)2.5 E .3 -.15(ve \231)-.2 H (dns\232 listed as a service in the).15 E F0(hosts)2.5 E F1 -(switch entry)2.5 E(.)-.65 E(The)127 493.2 Q F0(Resolv)3.869 E -(erOptions)-.1 E F1(\()3.869 E F0(I)A F1 3.869(\)o)C 1.369(ption allo) --3.869 F 1.369(ws you to tweak name serv)-.25 F 1.369(er options.)-.15 F -1.37(The command)6.37 F .892(line tak)102 505.2 R .892 +(switch entry)2.5 E(.)-.65 E(The)127 493.2 Q F0(Resolv)3.87 E(erOptions) +-.1 E F1(\()3.87 E F0(I)A F1 3.869(\)o)C 1.369(ption allo)-3.869 F 1.369 +(ws you to tweak name serv)-.25 F 1.369(er options.)-.15 F 1.369 +(The command)6.369 F .892(line tak)102 505.2 R .892 (es a series of \215ags as documented in)-.1 F F3 -.37(re)3.392 G (solver).37 E F1 .892(\(3\) \(with the leading \231RES_\232 deleted\).)B (Each)5.892 E(can be preceded by an optional `+' or `)102 517.2 Q/F4 10 /Symbol SF(-)A F1 2.5('. F)B(or e)-.15 E(xample, the line)-.15 E 2.5(OR) 142 533.4 S(esolv)-2.5 E(erOptions=+AA)-.15 E(ONL)-.55 E(Y)-1 E F4(-)2.5 -E F1(DNSRCH)A .861(turns on the AA)102 549.6 R(ONL)-.55 E 3.361(Y\()-1 G -.861(accept authoritati)-3.361 F 1.161 -.15(ve a)-.25 H .861 -(nswers only\) and turns of).15 F 3.362(ft)-.25 G .862 -(he DNSRCH \(search the)-3.362 F 2.039(domain path\) options.)102 561.6 +E F1(DNSRCH)A .862(turns on the AA)102 549.6 R(ONL)-.55 E 3.362(Y\()-1 G +.862(accept authoritati)-3.362 F 1.162 -.15(ve a)-.25 H .861 +(nswers only\) and turns of).15 F 3.361(ft)-.25 G .861 +(he DNSRCH \(search the)-3.361 F 2.039(domain path\) options.)102 561.6 R 2.039(Most resolv)7.039 F 2.039(er libraries def)-.15 F 2.039 -(ault DNSRCH, DEFN)-.1 F 2.039(AMES, and RECURSE)-.35 F .393 +(ault DNSRCH, DEFN)-.1 F 2.039(AMES, and RECURSE)-.35 F .394 (\215ags on and all others of)102 573.6 R 2.894(f. If)-.25 F .394 -(NETINET6 is enabled, most libraries def)2.894 F .394 -(ault to USE_INET6 as well.)-.1 F -1.1(Yo)102 585.6 S 3.749(uc)1.1 G -1.249(an also include \231HasW)-3.749 F 1.248 +(NETINET6 is enabled, most libraries def)2.894 F .393 +(ault to USE_INET6 as well.)-.1 F -1.1(Yo)102 585.6 S 3.748(uc)1.1 G +1.248(an also include \231HasW)-3.748 F 1.249 (ildcardMX\232 to specify that there is a wildcard MX record matching) --.4 F .224(your domain; this turns of)102 597.6 R 2.724(fM)-.25 G 2.724 +-.4 F .225(your domain; this turns of)102 597.6 R 2.724(fM)-.25 G 2.724 (Xm)-2.724 G .224 (atching when canonifying names, which can lead to inappropriate)-2.724 -F 5.249(canoni\214cations. Use)102 609.6 R<9957>5.249 E(orkAroundBrok) --.8 E 2.749(enAAAA\232 when f)-.1 F 2.749(aced with a brok)-.1 F 2.749 -(en nameserv)-.1 F 2.748(er that)-.15 F .564(returns SER)102 621.6 R(VF) --.8 E .564(AIL \(a temporary f)-.74 F .565 +F 3.614(canoni\214cations. Use)102 609.6 R<9957>3.614 E(orkAroundBrok) +-.8 E 1.114(enAAAA\232 when f)-.1 F 1.114(aced with a brok)-.1 F 1.114 +(en nameserv)-.1 F 1.114(er that re-)-.15 F 1.271(turns SER)102 621.6 R +(VF)-.8 E 1.271(AIL \(a temporary f)-.74 F 1.271 (ailure\) on T_AAAA \(IPv6\) lookups during hostname canoni\214ca-)-.1 F 2.5(tion. Notice:)102 633.6 R (it might be necessary to apply the same \(or similar\) options to)2.5 E -F3(submit.cf)2.5 E F1(too.)2.5 E -1.11(Ve)127 649.8 S 1.733(rsion le) -1.11 F -.15(ve)-.25 G 4.233(l1c).15 G 1.733 -(on\214gurations \(see the section about `)-4.233 F 1.732 -(`Con\214guration V)-.74 F 1.732(ersion Le)-1.11 F -.15(ve)-.25 G(l').15 -E 1.732('\) turn)-.74 F .842(DNSRCH and DEFN)102 661.8 R .842(AMES of) --.35 F 3.342(fw)-.25 G .842(hen doing deli)-3.342 F -.15(ve)-.25 G .842 -(ry lookups, b).15 F .842(ut lea)-.2 F 1.143 -.15(ve t)-.2 H .843 -(hem on e).15 F -.15(ve)-.25 G .843(rywhere else.).15 F -1.11(Ve)102 -673.8 S 1.043(rsion 8 of)1.11 F F3(sendmail)3.543 E F1 1.043(ignores th\ +F3(submit.cf)2.5 E F1(too.)2.5 E -1.11(Ve)127 649.8 S 1.732(rsion le) +1.11 F -.15(ve)-.25 G 4.232(l1c).15 G 1.733 +(on\214gurations \(see the section about `)-4.232 F 1.733 +(`Con\214guration V)-.74 F 1.733(ersion Le)-1.11 F -.15(ve)-.25 G(l').15 +E 1.733('\) turn)-.74 F .843(DNSRCH and DEFN)102 661.8 R .843(AMES of) +-.35 F 3.343(fw)-.25 G .842(hen doing deli)-3.343 F -.15(ve)-.25 G .842 +(ry lookups, b).15 F .842(ut lea)-.2 F 1.142 -.15(ve t)-.2 H .842 +(hem on e).15 F -.15(ve)-.25 G .842(rywhere else.).15 F -1.11(Ve)102 +673.8 S 1.042(rsion 8 of)1.11 F F3(sendmail)3.542 E F1 1.043(ignores th\ em when doing canoni\214cation lookups \(that is, when using $[ ...) -3.543 F .391($]\), and al)102 685.8 R -.1(wa)-.1 G .391 -(ys does the search.).1 F .392(If you don')5.391 F 2.892(tw)-.18 G .392 -(ant to do automatic name e)-2.992 F .392(xtension, don')-.15 F 2.892 -(tc)-.18 G .392(all $[ ...)-2.892 F($].)102 697.8 Q 0 Cg EP +3.542 F .392($]\), and al)102 685.8 R -.1(wa)-.1 G .392 +(ys does the search.).1 F .392(If you don')5.392 F 2.892(tw)-.18 G .392 +(ant to do automatic name e)-2.992 F .391(xtension, don')-.15 F 2.891 +(tc)-.18 G .391(all $[ ...)-2.891 F($].)102 697.8 Q 0 Cg EP %%Page: 37 33 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-37)195.86 E/F1 10/Times-Roman@0 SF .486 +(SMM:08-37)195.86 E/F1 10/Times-Roman@0 SF .485 (The search rules for $[ ... $] are some)127 96 R .485(what dif)-.25 F -.485(ferent than usual.)-.25 F .485(If the name being look)5.485 F .485 -(ed up)-.1 F .109(has at least one dot, it al)102 108 R -.1(wa)-.1 G -.109(ys tries the unmodi\214ed name \214rst.).1 F .11(If that f)5.11 F -.11(ails, it tries the reduced search)-.1 F .124 +.485(ferent than usual.)-.25 F .486(If the name being look)5.485 F .486 +(ed up)-.1 F .11(has at least one dot, it al)102 108 R -.1(wa)-.1 G .11 +(ys tries the unmodi\214ed name \214rst.).1 F .109(If that f)5.109 F +.109(ails, it tries the reduced search)-.1 F .124 (path, and lastly tries the unmodi\214ed name \(b)102 120 R .124 (ut only for names without a dot, since names with a dot)-.2 F(ha)102 -132 Q .788 -.15(ve a)-.2 H .488(lready been tried\).).15 F .488 -(This allo)5.488 F .489(ws names such as `)-.25 F(`utc.CS')-.74 E 2.989 -('t)-.74 G 2.989(om)-2.989 G .489(atch the site in Czechoslo)-2.989 F --.25(va)-.15 G(kia).25 E 1.588 +132 Q .789 -.15(ve a)-.2 H .489(lready been tried\).).15 F .489 +(This allo)5.489 F .489(ws names such as `)-.25 F(`utc.CS')-.74 E 2.989 +('t)-.74 G 2.988(om)-2.989 G .488(atch the site in Czechoslo)-2.988 F +-.25(va)-.15 G(kia).25 E 1.587 (rather than the site in your local Computer Science department.)102 144 -R 1.587(It also prefers A and CN)6.587 F(AME)-.35 E .512(records o)102 -156 R -.15(ve)-.15 G 3.012(rM).15 G 3.012(Xr)-3.012 G .512 -(ecords \212 that is, if it \214nds an MX record it mak)-3.012 F .513 -(es note of it, b)-.1 F .513(ut k)-.2 F .513(eeps looking.)-.1 F 1.542 -(This w)102 168 R(ay)-.1 E 4.042(,i)-.65 G 4.042(fy)-4.042 G 1.541 -(ou ha)-4.042 F 1.841 -.15(ve a w)-.2 H 1.541 +R 1.588(It also prefers A and CN)6.587 F(AME)-.35 E .513(records o)102 +156 R -.15(ve)-.15 G 3.013(rM).15 G 3.013(Xr)-3.013 G .513 +(ecords \212 that is, if it \214nds an MX record it mak)-3.013 F .512 +(es note of it, b)-.1 F .512(ut k)-.2 F .512(eeps looking.)-.1 F 1.541 +(This w)102 168 R(ay)-.1 E 4.041(,i)-.65 G 4.041(fy)-4.041 G 1.541 +(ou ha)-4.041 F 1.841 -.15(ve a w)-.2 H 1.541 (ildcard MX record matching your domain, it will not assume that all).15 -F(names match.)102 180 Q 3.453 -.8(To c)127 196.2 T 1.853 +F(names match.)102 180 Q 3.454 -.8(To c)127 196.2 T 1.853 (ompletely turn of).8 F 4.353(fa)-.25 G 1.853(ll name serv)-4.353 F -1.853(er access on systems without service switch support)-.15 F .942 +1.853(er access on systems without service switch support)-.15 F .941 (\(such as SunOS 4.X\) you will ha)102 208.2 R 1.242 -.15(ve t)-.2 H -3.441(or).15 G .941(ecompile with \255DN)-3.441 F .941 -(AMED_BIND=0 and remo)-.35 F 1.241 -.15(ve \255)-.15 H(lresolv).15 E +3.442(or).15 G .942(ecompile with \255DN)-3.442 F .942 +(AMED_BIND=0 and remo)-.35 F 1.242 -.15(ve \255)-.15 H(lresolv).15 E (from the list of libraries to be searched when linking.)102 220.2 Q F0 2.5(4.12. Mo)87 244.2 R(ving the P)-.1 E(er)-.2 E(-User F)-.37 E (orward Files)-.25 E F1 .772(Some sites mount each user')127 260.4 R 3.272(sh)-.55 G .772(ome directory from a local disk on their w)-3.272 F -.772(orkstation, so that)-.1 F .615(local access is f)102 272.4 R 3.114 +.772(orkstation, so that)-.1 F .614(local access is f)102 272.4 R 3.114 (ast. Ho)-.1 F(we)-.25 E -.15(ve)-.25 G 1.414 -.4(r, t).15 H .614 (he result is that .forw).4 F .614 -(ard \214le lookups from a central mail serv)-.1 F .614(er are)-.15 F +(ard \214le lookups from a central mail serv)-.1 F .615(er are)-.15 F (slo)102 284.4 Q 5.534 -.65(w. I)-.25 H 4.234(ns).65 G 1.734 (ome cases, mail can e)-4.234 F -.15(ve)-.25 G 4.234(nb).15 G 4.234(ed) -4.234 G(eli)-4.234 E -.15(ve)-.25 G 1.734 (red on machines inappropriately because of a \214le).15 F(serv)102 296.4 Q(er being do)-.15 E 2.5(wn. The)-.25 F (performance can be especially bad if you run the automounter)2.5 E(.) --.55 E(The)127 312.6 Q F0 -.25(Fo)2.744 G(rwardP).25 E(ath)-.1 E F1(\() -2.744 E F0(J)A F1 2.743(\)o)C .243(ption allo)-2.743 F .243 +-.55 E(The)127 312.6 Q F0 -.25(Fo)2.743 G(rwardP).25 E(ath)-.1 E F1(\() +2.743 E F0(J)A F1 2.743(\)o)C .243(ption allo)-2.743 F .243 (ws you to set a path of forw)-.25 F .243(ard \214les.)-.1 F -.15(Fo) -5.243 G 2.743(re).15 G .243(xample, the con-)-2.893 F(\214g \214le line) +5.243 G 2.743(re).15 G .244(xample, the con-)-2.893 F(\214g \214le line) 102 324.6 Q 2.5(OF)142 340.8 S(orw)-2.65 E(ardP)-.1 E(ath=/v)-.15 E -(ar/forw)-.25 E(ard/$u:$z/.forw)-.1 E(ard.$w)-.1 E -.1(wo)102 357 S .207 +(ar/forw)-.25 E(ard/$u:$z/.forw)-.1 E(ard.$w)-.1 E -.1(wo)102 357 S .208 (uld \214rst look for a \214le with the same name as the user').1 F -2.708(sl)-.55 G .208(ogin in /v)-2.708 F(ar/forw)-.25 E .208 -(ard; if that is not found)-.1 F 1.171 +2.707(sl)-.55 G .207(ogin in /v)-2.707 F(ar/forw)-.25 E .207 +(ard; if that is not found)-.1 F 1.17 (\(or is inaccessible\) the \214le `)102 369 R(`.forw)-.74 E(ard.)-.1 E /F2 10/Times-Italic@0 SF(mac)A(hinename)-.15 E F1 2.651 -.74('' i)D -3.671(nt).74 G 1.171(he user')-3.671 F 3.671(sh)-.55 G 1.17 -(ome directory is searched.)-3.671 F(A)6.17 E(truly perv)102 381 Q +3.671(nt).74 G 1.171(he user')-3.671 F 3.671(sh)-.55 G 1.171 +(ome directory is searched.)-3.671 F(A)6.171 E(truly perv)102 381 Q (erse site could also search by sender by using $r)-.15 E 2.5(,$)-.4 G (s, or $f.)-2.5 E .69(If you create a directory such as /v)127 397.2 R (ar/forw)-.25 E .69(ard, it should be mode 1777 \(that is, the stick)-.1 -F 3.19(yb)-.15 G(it)-3.19 E .109(should be set\).)102 409.2 R .109 -(Users should create the \214les mode 0644.)5.109 F .108 +F 3.19(yb)-.15 G(it)-3.19 E .108(should be set\).)102 409.2 R .109 +(Users should create the \214les mode 0644.)5.108 F .109 (Note that you must use the F)5.109 F(orw)-.15 E(ardFileIn-)-.1 E -(UnsafeDirP)102 421.2 Q .392(ath and F)-.15 F(orw)-.15 E -(ardFileInUnsafeDirP)-.1 E .392(athSafe \215ags with the)-.15 F F0 -(DontBlameSendmail)2.893 E F1 .393(option to)2.893 F(allo)102 433.2 Q -3.782(wf)-.25 G(orw)-3.782 E 1.282(ard \214les in a w)-.1 F 1.281 -(orld writable directory)-.1 F 6.281(.T)-.65 G 1.281 -(his might also be used as a denial of service)-6.281 F 2.351 -(attack \(users could create forw)102 445.2 R 2.351 -(ard \214les for other users\); a better approach might be to create)-.1 -F(/v)102 457.2 Q(ar/forw)-.25 E 1.086 -(ard mode 0755 and create empty \214les for each user)-.1 F 3.586(,o)-.4 -G 1.086(wned by that user)-3.836 F 3.586(,m)-.4 G 1.086(ode 0644.)-3.586 -F(If)6.086 E(you do this, you don')102 469.2 Q 2.5(th)-.18 G -2.25 -.2 -(av e)-2.5 H(to set the DontBlameSendmail options indicated abo)2.7 E +(UnsafeDirP)102 421.2 Q .393(ath and F)-.15 F(orw)-.15 E +(ardFileInUnsafeDirP)-.1 E .393(athSafe \215ags with the)-.15 F F0 +(DontBlameSendmail)2.892 E F1 .392(option to)2.892 F(allo)102 433.2 Q +2.985(wf)-.25 G(orw)-2.985 E .485(ard \214les in a w)-.1 F .485 +(orld writable directory)-.1 F 5.485(.T)-.65 G .485 +(his might also be used as a denial of service at-)-5.485 F .445 +(tack \(users could create forw)102 445.2 R .445 +(ard \214les for other users\); a better approach might be to create /v) +-.1 F(ar/for)-.25 E(-)-.2 E -.1(wa)102 457.2 S .951 +(rd mode 0755 and create empty \214les for each user).1 F 3.451(,o)-.4 G +.951(wned by that user)-3.701 F 3.451(,m)-.4 G .951(ode 0644.)-3.451 F +.952(If you do)5.951 F(this, you don')102 469.2 Q 2.5(th)-.18 G -2.25 +-.2(av e)-2.5 H(to set the DontBlameSendmail options indicated abo)2.7 E -.15(ve)-.15 G(.).15 E F0 2.5(4.13. Fr)87 493.2 R(ee Space)-.18 E F1 -1.405(On systems that ha)127 509.4 R 1.705 -.15(ve o)-.2 H 1.405 -(ne of the system calls in the).15 F F2(statfs)3.906 E F1 1.406(\(2\) f) -B 1.406(amily \(including)-.1 F F2(statvfs)3.906 E F1(and)3.906 E F2 -(ustat)102 521.4 Q F1 .839(\), you can specify a minimum number of free\ - blocks on the queue \214lesystem using the)B F0(Min-)3.339 E(Fr)102 -533.4 Q(eeBlocks)-.18 E F1(\()2.553 E F0(b)A F1 2.553(\)o)C 2.553 -(ption. If)-2.553 F .053(there are fe)2.553 F .053 -(wer than the indicated number of blocks free on the \214lesystem)-.25 F -1.355(on which the queue is mounted the SMTP serv)102 545.4 R 1.355 -(er will reject mail with the 452 error code.)-.15 F(This)6.354 E(in)102 -557.4 Q(vites the SMTP client to try ag)-.4 E(ain later)-.05 E(.)-.55 E -(Be)127 573.6 Q -.1(wa)-.25 G .746(re of setting this option too high; \ -it can cause rejection of email when that mail w).1 F(ould)-.1 E +.398(On systems that ha)127 509.4 R .698 -.15(ve o)-.2 H .398 +(ne of the system calls in the).15 F F2(statfs)2.897 E F1 .397(\(2\) f)B +.397(amily \(including)-.1 F F2(statvfs)2.897 E F1(and)2.897 E F2(us-) +2.897 E(tat)102 521.4 Q F1 .192(\), you can specify a minimum number of\ + free blocks on the queue \214lesystem using the)B F0(MinFr)2.692 E(ee-) +-.18 E(Blocks)102 533.4 Q F1(\()2.948 E F0(b)A F1 2.947(\)o)C 2.947 +(ption. If)-2.947 F .447(there are fe)2.947 F .447 +(wer than the indicated number of blocks free on the \214lesystem on) +-.25 F .397(which the queue is mounted the SMTP serv)102 545.4 R .398 +(er will reject mail with the 452 error code.)-.15 F .398(This in)5.398 +F(vites)-.4 E(the SMTP client to try ag)102 557.4 Q(ain later)-.05 E(.) +-.55 E(Be)127 573.6 Q -.1(wa)-.25 G .746(re of setting this option too \ +high; it can cause rejection of email when that mail w).1 F(ould)-.1 E (be processed without dif)102 585.6 Q(\214culty)-.25 E(.)-.65 E F0 2.5 -(4.14. Maximum)87 609.6 R(Message Size)2.5 E F1 2.078 -.8(To a)127 625.8 -T -.2(vo).6 G .478(id o).2 F -.15(ve)-.15 G(r\215o).15 E .478 +(4.14. Maximum)87 609.6 R(Message Size)2.5 E F1 2.077 -.8(To a)127 625.8 +T -.2(vo).6 G .477(id o).2 F -.15(ve)-.15 G(r\215o).15 E .478 (wing your system with a lar)-.25 F .478(ge message, the)-.18 F F0 -(MaxMessageSize)2.977 E F1 .477(option can be)2.977 F .692 +(MaxMessageSize)2.978 E F1 .478(option can be)2.978 F .693 (set to set an absolute limit on the size of an)102 637.8 R 3.193(yo) --.15 G .693(ne message.)-3.193 F .693(This will be adv)5.693 F .693 +-.15 G .693(ne message.)-3.193 F .692(This will be adv)5.692 F .692 (ertised in the ESMTP)-.15 F(dialogue and check)102 649.8 Q (ed during message collection.)-.1 E F0 2.5(4.15. Pri)87 673.8 R -.1(va) -.1 G(cy Flags).1 E F1(The)127 690 Q F0(Pri)2.96 E -.1(va)-.1 G (cyOptions).1 E F1(\()2.96 E F0(p)A F1 2.96(\)o)C .46(ption allo)-2.96 F .46(ws you to set certain `)-.25 F(`pri)-.74 E -.25(va)-.25 G -.15(cy) .25 G 1.94 -.74('' \215).15 H 2.96(ags. Actually).74 F 2.96(,m)-.65 G -(an)-2.96 E 2.96(yo)-.15 G(f)-2.96 E .533(them don')102 702 R 3.033(tg) --.18 G -2.15 -.25(iv e)-3.033 H .533(you an)3.283 F 3.034(ye)-.15 G .534 +(an)-2.96 E 2.96(yo)-.15 G(f)-2.96 E .534(them don')102 702 R 3.034(tg) +-.18 G -2.15 -.25(iv e)-3.034 H .534(you an)3.284 F 3.034(ye)-.15 G .534 (xtra pri)-3.184 F -.25(va)-.25 G -.15(cy).25 G 3.034(,r)-.5 G .534 -(ather just insisting that client SMTP serv)-3.034 F .534 +(ather just insisting that client SMTP serv)-3.034 F .533 (ers use the HELO)-.15 F 2.87 (command before using certain commands or adding e)102 714 R 2.87 (xtra headers to indicate possible spoof)-.15 F 0 Cg EP @@ -3250,41 +3273,41 @@ BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-38 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(attempts.)102 96 Q .123(The option tak)127 112.2 R .124 +(attempts.)102 96 Q .124(The option tak)127 112.2 R .124 (es a series of \215ag names; the \214nal pri)-.1 F -.25(va)-.25 G .424 -.15(cy i).25 H 2.624(st).15 G .124(he inclusi)-2.624 F .424 -.15(ve o) --.25 H 2.624(ro).15 G 2.624(ft)-2.624 G .124(hose \215ags.)-2.624 F -.15 -(Fo)5.124 G(r).15 E -.15(ex)102 124.2 S(ample:).15 E 2.5(OP)142 140.4 S +-.25 H 2.624(ro).15 G 2.624(ft)-2.624 G .123(hose \215ags.)-2.624 F -.15 +(Fo)5.123 G(r).15 E -.15(ex)102 124.2 S(ample:).15 E 2.5(OP)142 140.4 S (ri)-2.5 E -.25(va)-.25 G -.15(cy).25 G(Options=needmailhelo, noe).15 E (xpn)-.15 E .928(insists that the HELO or EHLO command be used before a\ MAIL command is accepted and dis-)102 156.6 R(ables the EXPN command.) 102 168.6 Q(The \215ags are detailed in section 5.6.)127 184.8 Q F0 2.5 -(4.16. Send)87 208.8 R(to Me T)2.5 E(oo)-.92 E F1(Be)127 225 Q 1.074 -(ginning with v)-.15 F 1.074(ersion 8.10,)-.15 F/F2 10/Times-Italic@0 SF -(sendmail)3.574 E F1 1.075(includes by def)3.574 F 1.075(ault the \(en) --.1 F -.15(ve)-.4 G 1.075(lope\) sender in an).15 F 3.575(yl)-.15 G(ist) --3.575 E -.15(ex)102 237 S 3.465(pansions. F).15 F .965(or e)-.15 F .964 +(4.16. Send)87 208.8 R(to Me T)2.5 E(oo)-.92 E F1(Be)127 225 Q 1.075 +(ginning with v)-.15 F 1.075(ersion 8.10,)-.15 F/F2 10/Times-Italic@0 SF +(sendmail)3.575 E F1 1.075(includes by def)3.575 F 1.075(ault the \(en) +-.1 F -.15(ve)-.4 G 1.074(lope\) sender in an).15 F 3.574(yl)-.15 G(ist) +-3.574 E -.15(ex)102 237 S 3.464(pansions. F).15 F .964(or e)-.15 F .964 (xample, if \231matt\232 sends to a list that contains \231matt\232 as \ -one of the members he)-.15 F .227(will get a cop)102 249 R 2.727(yo)-.1 -G 2.727(ft)-2.727 G .227(he message.)-2.727 F .227(If the)5.227 F F0 +one of the members he)-.15 F .228(will get a cop)102 249 R 2.728(yo)-.1 +G 2.728(ft)-2.728 G .228(he message.)-2.728 F .228(If the)5.228 F F0 (MeT)2.728 E(oo)-.92 E F1 .228(option is set to)2.728 F/F3 9 -/Times-Roman@0 SF -.666(FA)2.728 G(LSE).666 E F1 .228 -(\(in the con\214guration \214le or via)2.728 F 1.023 +/Times-Roman@0 SF -.666(FA)2.727 G(LSE).666 E F1 .227 +(\(in the con\214guration \214le or via)2.727 F 1.022 (the command line\), this beha)102 261 R 1.023 -(vior is changed, i.e., the \(en)-.2 F -.15(ve)-.4 G 1.022 -(lope\) sender is e).15 F 1.022(xcluded in list e)-.15 F(xpan-)-.15 E +(vior is changed, i.e., the \(en)-.2 F -.15(ve)-.4 G 1.023 +(lope\) sender is e).15 F 1.023(xcluded in list e)-.15 F(xpan-)-.15 E (sions.)102 273 Q F0 2.5(5. THE)72 297 R(WHOLE SCOOP ON THE CONFIGURA) 2.5 E(TION FILE)-.95 E F1 (This section describes the con\214guration \214le in detail.)112 313.2 Q .648(There is one point that should be made clear immediately: the sy\ -ntax of the con\214guration \214le is)112 329.4 R 1.077 +ntax of the con\214guration \214le is)112 329.4 R 1.076 (designed to be reasonably easy to parse, since this is done e)87 341.4 -R -.15(ve)-.25 G 1.076(ry time).15 F F2(sendmail)3.576 E F1 1.076 -(starts up, rather than)3.576 F .302(easy for a human to read or write.) -87 353.4 R .303(The con\214guration \214le should be generated via the \ -method described)5.302 F(in)87 365.4 Q F0(cf/README)3.658 E F1 3.658(,i) -C 3.658(ts)-3.658 G 1.158 -(hould not be edited directly unless someone is f)-3.658 F 1.157 +R -.15(ve)-.25 G 1.077(ry time).15 F F2(sendmail)3.577 E F1 1.077 +(starts up, rather than)3.577 F .303(easy for a human to read or write.) +87 353.4 R .302(The con\214guration \214le should be generated via the \ +method described)5.302 F(in)87 365.4 Q F0(cf/README)3.657 E F1 3.657(,i) +C 3.657(ts)-3.657 G 1.157 +(hould not be edited directly unless someone is f)-3.657 F 1.158 (amiliar with the internals of the)-.1 F (syntax described here and it is not possible to achie)87 377.4 Q .3 -.15(ve t)-.25 H(he desired result via the def).15 E(ault method.)-.1 E @@ -3293,43 +3316,43 @@ C 3.658(ts)-3.658 G 1.158 (gins with a single charac-)-.15 F .102 (ter de\214ning the semantics for the rest of the line.)87 405.6 R .102 (Lines be)5.102 F .102(ginning with a space or a tab are continuation) --.15 F 1.322 +-.15 F 1.323 (lines \(although the semantics are not well de\214ned in man)87 417.6 R -3.823(yp)-.15 G 3.823(laces\). Blank)-3.823 F 1.323(lines and lines be) -3.823 F(ginning)-.15 E(with a sharp symbol \(`#'\) are comments.)87 +3.823(yp)-.15 G 3.822(laces\). Blank)-3.823 F 1.322(lines and lines be) +3.822 F(ginning)-.15 E(with a sharp symbol \(`#'\) are comments.)87 429.6 Q F0 2.5(5.1. R)87 453.6 R(and S \212 Rewriting Rules)2.5 E F1 -.466(The core of address parsing are the re)127 469.8 R .466 -(writing rules.)-.25 F .465(These are an ordered production system.) +.465(The core of address parsing are the re)127 469.8 R .466 +(writing rules.)-.25 F .466(These are an ordered production system.) 5.466 F F2(Sendmail)102 481.8 Q F1 .19(scans through the set of re)2.69 F .19 (writing rules looking for a match on the left hand side \(LHS\) of)-.25 F(the rule.)102 493.8 Q(When a rule matches, the address is replaced by\ - the right hand side \(RHS\) of the rule.)5 E .922(There are se)127 510 -R -.15(ve)-.25 G .922(ral sets of re).15 F .921(writing rules.)-.25 F -.921(Some of the re)5.921 F .921(writing sets are used internally and) --.25 F .359(must ha)102 522 R .659 -.15(ve s)-.2 H .359 + the right hand side \(RHS\) of the rule.)5 E .921(There are se)127 510 +R -.15(ve)-.25 G .921(ral sets of re).15 F .921(writing rules.)-.25 F +.921(Some of the re)5.921 F .922(writing sets are used internally and) +-.25 F .36(must ha)102 522 R .66 -.15(ve s)-.2 H .36 (peci\214c semantics.).15 F .359(Other re)5.359 F .359 -(writing sets do not ha)-.25 F .659 -.15(ve s)-.2 H .36 +(writing sets do not ha)-.25 F .659 -.15(ve s)-.2 H .359 (peci\214cally assigned semantics, and).15 F (may be referenced by the mailer de\214nitions or by other re)102 534 Q (writing sets.)-.25 E(The syntax of these tw)127 550.2 Q 2.5(oc)-.1 G -(ommands are:)-2.5 E F0(S)142 566.4 Q F2(n)A F1 .249 -(Sets the current ruleset being collected to)102 582.6 R F2(n)2.749 E F1 -5.249(.I)C 2.748(fy)-5.249 G .248(ou be)-2.748 F .248 +(ommands are:)-2.5 E F0(S)142 566.4 Q F2(n)A F1 .248 +(Sets the current ruleset being collected to)102 582.6 R F2(n)2.748 E F1 +5.248(.I)C 2.748(fy)-5.248 G .248(ou be)-2.748 F .249 (gin a ruleset more than once it appends to the)-.15 F (old de\214nition.)102 594.6 Q F0(R)142 610.8 Q F2(lhs rhs comments)A F1 1.185(The \214elds must be separated by at least one tab character; the\ -re may be embedded spaces in the)102 627 R 2.595(\214elds. The)102 639 R -F2(lhs)2.595 E F1 .095(is a pattern that is applied to the input.)2.595 -F .095(If it matches, the input is re)5.095 F .094(written to the)-.25 F -F2(rhs)2.594 E F1(.)A(The)102 651 Q F2(comments)2.5 E F1(are ignored.) -2.5 E .426(Macro e)127 667.2 R .426(xpansions of the form)-.15 F F0($) -2.926 E F2(x)A F1 .427 -(are performed when the con\214guration \214le is read.)2.927 F 2.927 -(Al)5.427 G(iteral)-2.927 E F0($)102 679.2 Q F1 .609 -(can be included using)3.109 F F0($$)3.109 E F1 5.609(.E)C .609 +re may be embedded spaces in the)102 627 R 2.594(\214elds. The)102 639 R +F2(lhs)2.594 E F1 .095(is a pattern that is applied to the input.)2.594 +F .095(If it matches, the input is re)5.095 F .095(written to the)-.25 F +F2(rhs)2.595 E F1(.)A(The)102 651 Q F2(comments)2.5 E F1(are ignored.) +2.5 E .427(Macro e)127 667.2 R .427(xpansions of the form)-.15 F F0($) +2.927 E F2(x)A F1 .427 +(are performed when the con\214guration \214le is read.)2.927 F 2.926 +(Al)5.426 G(iteral)-2.926 E F0($)102 679.2 Q F1 .609 +(can be included using)3.108 F F0($$)3.109 E F1 5.609(.E)C .609 (xpansions of the form)-5.609 F F0($&)3.109 E F2(x)A F1 .609 -(are performed at run time using a some-)3.109 F .147 +(are performed at run time using a some-)3.109 F .148 (what less general algorithm.)102 691.2 R .148(This is intended only fo\ r referencing internally de\214ned macros such as)5.148 F F0($h)102 703.2 Q F1(that are changed at runtime.)2.5 E 0 Cg EP @@ -3339,8 +3362,8 @@ BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q (SMM:08-39)195.86 E 2.5(5.1.1. The)102 96 R(left hand side)2.5 E/F1 10 -/Times-Roman@0 SF 2.771(The left hand side of re)142 112.2 R 2.771 -(writing rules contains a pattern.)-.25 F 2.77(Normal w)7.771 F 2.77 +/Times-Roman@0 SF 2.77(The left hand side of re)142 112.2 R 2.771 +(writing rules contains a pattern.)-.25 F 2.771(Normal w)7.771 F 2.771 (ords are simply)-.1 F(matched directly)117 124.2 Q 5(.M)-.65 G (etasyntax is introduced using a dollar sign.)-5 E(The metasymbols are:) 5 E F0($*)157 140.4 Q F1(Match zero or more tok)10.14 E(ens)-.1 E F0($+) @@ -3348,26 +3371,26 @@ BP Q F1(Match e)9.44 E(xactly one tok)-.15 E(en)-.1 E F0($=)157 176.4 Q/F2 10/Times-Italic@0 SF(x)A F1(Match an)5 E 2.5(yp)-.15 G(hrase in class) -2.5 E F2(x)2.5 E F0($~)157 188.4 Q F2(x)A F1(Match an)7.37 E 2.5(yw) --.15 G(ord not in class)-2.6 E F2(x)2.5 E F1 .131(If an)117 204.6 R -2.631(yo)-.15 G 2.631(ft)-2.631 G .131(hese match, the)-2.631 F 2.631 -(ya)-.15 G .132(re assigned to the symbol)-2.631 F F0($)2.632 E F2(n)A -F1 .132(for replacement on the right hand side,)2.632 F(where)117 216.6 +-.15 G(ord not in class)-2.6 E F2(x)2.5 E F1 .132(If an)117 204.6 R +2.632(yo)-.15 G 2.632(ft)-2.632 G .132(hese match, the)-2.632 F 2.632 +(ya)-.15 G .132(re assigned to the symbol)-2.632 F F0($)2.632 E F2(n)A +F1 .131(for replacement on the right hand side,)2.632 F(where)117 216.6 Q F2(n)2.5 E F1(is the inde)2.5 E 2.5(xi)-.15 G 2.5(nt)-2.5 G(he LHS.) -2.5 E -.15(Fo)5 G 2.5(re).15 G(xample, if the LHS:)-2.65 E($\255:$+)157 232.8 Q(is applied to the input:)117 249 Q(UCB)157 265.2 Q(ARP)-.35 E (A:eric)-.92 E(the rule will match, and the v)117 281.4 Q (alues passed to the RHS will be:)-.25 E 7.5($1 UCB)157 297.6 R(ARP)-.35 -E(A)-.92 E 7.5($2 eric)157 309.6 R(Additionally)142 330 Q 2.705(,t)-.65 -G .204(he LHS can include)-2.705 F F0($@)2.704 E F1 .204 +E(A)-.92 E 7.5($2 eric)157 309.6 R(Additionally)142 330 Q 2.704(,t)-.65 +G .204(he LHS can include)-2.704 F F0($@)2.704 E F1 .204 (to match zero tok)2.704 F 2.704(ens. This)-.1 F(is)2.704 E F2(not)2.704 -E F1 .204(bound to a)2.704 F F0($)2.704 E F2(n)A F1(on)2.704 E(the RHS,\ +E F1 .204(bound to a)2.704 F F0($)2.705 E F2(n)A F1(on)2.705 E(the RHS,\ and is normally only used when it stands alone in order to match the n\ ull input.)117 342 Q F0 2.5(5.1.2. The)102 366 R(right hand side)2.5 E -F1 .648(When the left hand side of a re)142 382.2 R .649 -(writing rule matches, the input is deleted and replaced by)-.25 F 1.037 -(the right hand side.)117 394.2 R -.8(To)6.037 G -.1(ke).8 G 1.036 -(ns are copied directly from the RHS unless the).1 F 3.536(yb)-.15 G --.15(eg)-3.536 G 1.036(in with a dollar).15 F 2.5(sign. Metasymbols)117 +F1 .649(When the left hand side of a re)142 382.2 R .649 +(writing rule matches, the input is deleted and replaced by)-.25 F 1.036 +(the right hand side.)117 394.2 R -.8(To)6.036 G -.1(ke).8 G 1.036 +(ns are copied directly from the RHS unless the).1 F 3.537(yb)-.15 G +-.15(eg)-3.537 G 1.037(in with a dollar).15 F 2.5(sign. Metasymbols)117 406.2 R(are:)2.5 E F0($)157 422.4 Q F2(n)A F1 (Substitute inde\214nite tok)40.55 E(en)-.1 E F2(n)2.5 E F1(from LHS)2.5 E F0($[)157 434.4 Q F2(name)A F0($])A F1(Canonicalize)12.23 E F2(name) @@ -3378,34 +3401,34 @@ F2(n)A F1(\231Call\232 ruleset)34.85 E F2(n)2.5 E F0($#)157 482.4 Q F2 (mailer)A F1(Resolv)14.44 E 2.5(et)-.15 G(o)-2.5 E F2(mailer)2.5 E F0 ($@)157 494.4 Q F2(host)A F1(Specify)19.58 E F2(host)2.5 E F0($:)157 506.4 Q F2(user)A F1(Specify)25 E F2(user)2.5 E F1(The)142 526.8 Q F0($) -3.136 E F2(n)A F1 .637(syntax substitutes the corresponding v)3.136 F +3.137 E F2(n)A F1 .637(syntax substitutes the corresponding v)3.137 F .637(alue from a)-.25 F F0($+)3.137 E F1(,)A F0<24ad>3.137 E F1(,)A F0 ($*)3.137 E F1(,)A F0($=)3.137 E F1 3.137(,o)C(r)-3.137 E F0($~)3.137 E -F1 .637(match on)3.137 F(the LHS.)117 538.8 Q(It may be used an)5 E -(ywhere.)-.15 E 2.706(Ah)142 555 S .206(ost name enclosed between)-2.706 -F F0($[)2.706 E F1(and)2.706 E F0($])2.706 E F1 .206(is look)2.706 F -.205(ed up in the host database\(s\) and replaced)-.1 F 1.683 +F1 .636(match on)3.136 F(the LHS.)117 538.8 Q(It may be used an)5 E +(ywhere.)-.15 E 2.705(Ah)142 555 S .205(ost name enclosed between)-2.705 +F F0($[)2.705 E F1(and)2.705 E F0($])2.706 E F1 .206(is look)2.706 F +.206(ed up in the host database\(s\) and replaced)-.1 F 1.683 (by the canonical name)117 569 R/F3 7/Times-Roman@0 SF(14)-4 I F1 6.683 (.F)4 K 1.683(or e)-6.833 F 1.683 (xample, \231$[ftp$]\232 might become \231ftp.CS.Berk)-.15 F(ele)-.1 E --.65(y.)-.15 G 1.683(EDU\232 and).65 F 3.17 -(\231$[[128.32.130.2]$]\232 w)117 581 R 3.17(ould become \231v)-.1 F +-.65(y.)-.15 G 1.683(EDU\232 and).65 F .455 +(\231$[[128.32.130.2]$]\232 w)117 581 R .455(ould become \231v)-.1 F (angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU.).65 E<9a>-.7 E F2 -(Sendmail)8.17 E F1 3.17(recognizes its)5.67 F -(numeric IP address without calling the name serv)117 593 Q +(Sendmail)5.456 E F1 .456(recognizes its nu-)2.956 F +(meric IP address without calling the name serv)117 593 Q (er and replaces it with its canonical name.)-.15 E(The)142 609.2 Q F0 -($\()3.003 E F1(...)3.003 E F0($\))5.503 E F1 .503(syntax is a more gen\ -eral form of lookup; it uses a named map instead of an)3.003 F .81 -(implicit map.)117 621.2 R .81(If no lookup is found, the indicated)5.81 -F F2(default)3.309 E F1 .809(is inserted; if no def)3.309 F .809 -(ault is speci\214ed)-.1 F .775(and no lookup matches, the v)117 633.2 R +($\()3.004 E F1(...)3.004 E F0($\))5.504 E F1 .503(syntax is a more gen\ +eral form of lookup; it uses a named map instead of an)3.003 F .809 +(implicit map.)117 621.2 R .809(If no lookup is found, the indicated) +5.809 F F2(default)3.309 E F1 .81(is inserted; if no def)3.309 F .81 +(ault is speci\214ed)-.1 F .776(and no lookup matches, the v)117 633.2 R .776(alue is left unchanged.)-.25 F(The)5.776 E F2(ar)3.276 E(guments) --.37 E F1 .776(are passed to the map for)3.276 F(possible use.)117 645.2 -Q(The)142 661.4 Q F0($>)2.62 E F2(n)A F1 .119(syntax causes the remaind\ -er of the line to be substituted as usual and then passed)2.62 F .586 -(as the ar)117 673.4 R .586(gument to ruleset)-.18 F F2(n)3.086 E F1 -5.586(.T)C .586(he \214nal v)-5.586 F .586(alue of ruleset)-.25 F F2(n) -3.087 E F1 .587(then becomes the substitution for this)3.087 F .32 LW 76 +-.37 E F1 .775(are passed to the map for)3.275 F(possible use.)117 645.2 +Q(The)142 661.4 Q F0($>)2.619 E F2(n)A F1 .119(syntax causes the remain\ +der of the line to be substituted as usual and then passed)2.619 F .587 +(as the ar)117 673.4 R .587(gument to ruleset)-.18 F F2(n)3.087 E F1 +5.587(.T)C .587(he \214nal v)-5.587 F .586(alue of ruleset)-.25 F F2(n) +3.086 E F1 .586(then becomes the substitution for this)3.086 F .32 LW 76 683 72 683 DL 80 683 76 683 DL 84 683 80 683 DL 88 683 84 683 DL 92 683 88 683 DL 96 683 92 683 DL 100 683 96 683 DL 104 683 100 683 DL 108 683 104 683 DL 112 683 108 683 DL 116 683 112 683 DL 120 683 116 683 DL 124 @@ -3425,91 +3448,92 @@ DL 156 683 152 683 DL 160 683 156 683 DL 164 683 160 683 DL 168 683 164 BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-40 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 3.759 -(rule. The)117 96 R F0($>)3.759 E F1 1.259(syntax e)3.759 F 1.259 +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 3.758 +(rule. The)117 96 R F0($>)3.758 E F1 1.258(syntax e)3.758 F 1.258 (xpands e)-.15 F -.15(ve)-.25 G 1.259 -(rything after the ruleset name to the end of the replacement).15 F .976 +(rything after the ruleset name to the end of the replacement).15 F .03 (string and then passes that as the initial input to the ruleset.)117 -108 R(Recursi)5.976 E 1.277 -.15(ve c)-.25 H .977(alls are allo).15 F -3.477(wed. F)-.25 F(or)-.15 E -.15(ex)117 120 S(ample,).15 E($>0 $>3 $1) -157 136.2 Q -.15(ex)117 152.4 S(pands $1, passes that to ruleset 3, and\ - then passes the result of ruleset 3 to ruleset 0.).15 E(The)142 168.6 Q -F0($#)2.769 E F1 .268(syntax should)2.769 F/F2 10/Times-Italic@0 SF -(only)2.768 E F1 .268 +108 R(Recursi)5.029 E .329 -.15(ve c)-.25 H .029(alls are allo).15 F +2.529(wed. F)-.25 F .029(or e)-.15 F(x-)-.15 E(ample,)117 120 Q +($>0 $>3 $1)157 136.2 Q -.15(ex)117 152.4 S(pands $1, passes that to ru\ +leset 3, and then passes the result of ruleset 3 to ruleset 0.).15 E +(The)142 168.6 Q F0($#)2.768 E F1 .268(syntax should)2.768 F/F2 10 +/Times-Italic@0 SF(only)2.768 E F1 .268 (be used in ruleset zero, a subroutine of ruleset zero, or rulesets) -2.768 F .454(that return decisions \(e.g., check_rcpt\).)117 180.6 R -.455(It causes e)5.454 F -.25(va)-.25 G .455 +2.768 F .455(that return decisions \(e.g., check_rcpt\).)117 180.6 R +.455(It causes e)5.455 F -.25(va)-.25 G .454 (luation of the ruleset to terminate immedi-).25 F(ately)117 192.6 Q 2.565(,a)-.65 G .065(nd signals to)-2.565 F F2(sendmail)2.565 E F1 .065 (that the address has completely resolv)2.565 F 2.565(ed. The)-.15 F .065(complete syntax for)2.565 F(ruleset 0 is:)117 204.6 Q F0($#)157 -220.8 Q F2(mailer)A F0($@)2.5 E F2(host)A F0($:)2.5 E F2(user)A F1 .878 -(This speci\214es the {mailer)117 237 R 3.378(,h)-.4 G .879 -(ost, user} 3-tuple \(triple\) necessary to direct the mailer)-3.378 F -5.879(.N)-.55 G .879(ote: the)-5.879 F .122(third element \()117 249 R -F2(user)2.622 E F1 2.622(\)i)2.622 G 2.622(so)-2.622 G .122 -(ften also called)-2.622 F F2(addr)2.622 E(ess)-.37 E F1 2.621(part. If) -2.622 F .121(the mailer is local the host part may be)2.621 F(omitted) -117 263 Q/F3 7/Times-Roman@0 SF(15)-4 I F1 5.968(.T)4 K(he)-5.968 E F2 +220.8 Q F2(mailer)A F0($@)2.5 E F2(host)A F0($:)2.5 E F2(user)A F1 .879 +(This speci\214es the {mailer)117 237 R 3.379(,h)-.4 G .879 +(ost, user} 3-tuple \(triple\) necessary to direct the mailer)-3.379 F +5.878(.N)-.55 G .878(ote: the)-5.878 F .121(third element \()117 249 R +F2(user)2.621 E F1 2.621(\)i)2.621 G 2.621(so)-2.621 G .121 +(ften also called)-2.621 F F2(addr)2.621 E(ess)-.37 E F1 2.622(part. If) +2.621 F .122(the mailer is local the host part may be)2.622 F(omitted) +117 263 Q/F3 7/Times-Roman@0 SF(15)-4 I F1 5.967(.T)4 K(he)-5.967 E F2 (mailer)3.467 E F1 .967(must be a single w)3.467 F .967(ord, b)-.1 F .967(ut the)-.2 F F2(host)3.467 E F1(and)3.467 E F2(user)3.467 E F1 .967 -(may be multi-part.)3.467 F .967(If the)5.967 F F2(mailer)117 275 Q F1 -1.118(is the b)3.618 F 1.119(uilt-in IPC mailer)-.2 F 3.619(,t)-.4 G(he) +(may be multi-part.)3.467 F .968(If the)5.967 F F2(mailer)117 275 Q F1 +1.119(is the b)3.619 F 1.119(uilt-in IPC mailer)-.2 F 3.619(,t)-.4 G(he) -3.619 E F2(host)3.619 E F1 1.119 -(may be a colon \(or comma\) separated list of hosts.)3.619 F .208 +(may be a colon \(or comma\) separated list of hosts.)3.619 F .207 (Each is separately MX e)117 287 R .207 (xpanded and the results are concatenated to mak)-.15 F 2.707(e\()-.1 G -.207(essentially\) one long)-2.707 F .587(MX list.)117 299 R .587 -(Hosts separated by a comma ha)5.587 F .887 -.15(ve t)-.2 H .588 -(he same MX preference, and for each colon sepa-).15 F 1.492 -(rated host the MX preference is increased.)117 311 R(The)6.491 E F2 -(user)3.991 E F1 1.491(is later re)3.991 F 1.491(written by the mailer) --.25 F(-speci\214c)-.2 E(en)117 323 Q -.15(ve)-.4 G .752(lope re).15 F -.752(writing set and assigned to the)-.25 F F0($u)3.252 E F1 3.253 -(macro. As)3.252 F 3.253(as)3.253 G .753 -(pecial case, if the mailer speci\214ed)-3.253 F .146(has the)117 335 R -F0(F=@)2.646 E F1 .146 -(\215ag speci\214ed and the \214rst character of the)2.646 F F0($:)2.646 -E F1 -.25(va)2.646 G .145 -(lue is \231@\232, the \231@\232 is stripped of).25 F(f,)-.25 E(and a \ -\215ag is set in the address descriptor that causes sendmail to not do \ -ruleset 5 processing.)117 347 Q(Normally)142 363.2 Q 3.251(,ar)-.65 G -.751(ule that matches is retried, that is, the rule loops until it f) --3.251 F 3.252(ails. A)-.1 F .752(RHS may)3.252 F 1.086 -(also be preceded by a)117 375.2 R F0($@)3.586 E F1 1.085(or a)3.585 F -F0($:)3.585 E F1 1.085(to change this beha)3.585 F(vior)-.2 E 6.085(.A) --.55 G F0($@)-2.5 E F1 1.085(pre\214x causes the ruleset to)3.585 F 1.46 -(return with the remainder of the RHS as the v)117 387.2 R 3.96(alue. A) --.25 F F0($:)3.96 E F1 1.46(pre\214x causes the rule to terminate)3.96 F -(immediately)117 399.2 Q 3.756(,b)-.65 G 1.256 -(ut the ruleset to continue; this can be used to a)-3.956 F -.2(vo)-.2 G -1.256(id continued application of a).2 F 2.5(rule. The)117 411.2 R -(pre\214x is stripped before continuing.)2.5 E(The)142 427.4 Q F0($@)2.5 -E F1(and)2.5 E F0($:)2.5 E F1(pre\214x)2.5 E(es may precede a)-.15 E F0 -($>)2.5 E F1(spec; for e)2.5 E(xample:)-.15 E 20.19(R$+ $:)157 443.6 R -($>7 $1)2.5 E 1.256(matches an)117 459.8 R 1.256 -(ything, passes that to ruleset se)-.15 F -.15(ve)-.25 G 1.256 -(n, and continues; the).15 F F0($:)3.756 E F1 1.256(is necessary to a) -3.756 F -.2(vo)-.2 G 1.256(id an).2 F(in\214nite loop.)117 471.8 Q 1.205 -(Substitution occurs in the order described, that is, parameters from t\ -he LHS are substi-)142 488 R .219(tuted, hostnames are canonicalized, \ -\231subroutines\232 are called, and \214nally)117 500 R F0($#)2.719 E F1 -(,)A F0($@)2.719 E F1 2.72(,a)C(nd)-2.72 E F0($:)2.72 E F1 .22(are pro-) -2.72 F(cessed.)117 512 Q F0 2.5(5.1.3. Semantics)102 536 R(of r)2.5 E -(ewriting rule sets)-.18 E F1 1.848(There are six re)142 552.2 R 1.847 -(writing sets that ha)-.25 F 2.147 -.15(ve s)-.2 H 1.847 -(peci\214c semantics.).15 F(Fi)6.847 E 2.147 -.15(ve o)-.25 H 4.347(ft) -.15 G 1.847(hese are related as)-4.347 F(depicted by \214gure 1.)117 +.208(essentially\) one long)-2.707 F .588(MX list.)117 299 R .588 +(Hosts separated by a comma ha)5.588 F .888 -.15(ve t)-.2 H .587 +(he same MX preference, and for each colon sepa-).15 F .374 +(rated host the MX preference is increased.)117 311 R(The)5.374 E F2 +(user)2.874 E F1 .374(is later re)2.874 F .374(written by the mailer) +-.25 F .374(-speci\214c en-)-.2 F -.15(ve)117 323 S .309(lope re).15 F +.309(writing set and assigned to the)-.25 F F0($u)2.809 E F1 2.809 +(macro. As)2.809 F 2.809(as)2.809 G .309 +(pecial case, if the mailer speci\214ed has)-2.809 F(the)117 335 Q F0 +(F=@)2.587 E F1 .087 +(\215ag speci\214ed and the \214rst character of the)2.587 F F0($:)2.587 +E F1 -.25(va)2.587 G .088 +(lue is \231@\232, the \231@\232 is stripped of).25 F .088(f, and)-.25 F +2.5<618d>117 347 S(ag is set in the address descriptor that causes send\ +mail to not do ruleset 5 processing.)-2.5 E(Normally)142 363.2 Q 3.252 +(,ar)-.65 G .751 +(ule that matches is retried, that is, the rule loops until it f)-3.252 +F 3.251(ails. A)-.1 F .751(RHS may)3.251 F .351(also be preceded by a) +117 375.2 R F0($@)2.851 E F1 .351(or a)2.851 F F0($:)2.851 E F1 .351 +(to change this beha)2.851 F(vior)-.2 E 5.351(.A)-.55 G F0($@)-2.5 E F1 +.351(pre\214x causes the ruleset to re-)2.851 F .221 +(turn with the remainder of the RHS as the v)117 387.2 R 2.721(alue. A) +-.25 F F0($:)2.721 E F1 .221 +(pre\214x causes the rule to terminate imme-)2.721 F(diately)117 399.2 Q +2.53(,b)-.65 G .03(ut the ruleset to continue; this can be used to a) +-2.73 F -.2(vo)-.2 G .031(id continued application of a rule.).2 F(The) +5.031 E(pre\214x is stripped before continuing.)117 411.2 Q(The)142 +427.4 Q F0($@)2.5 E F1(and)2.5 E F0($:)2.5 E F1(pre\214x)2.5 E +(es may precede a)-.15 E F0($>)2.5 E F1(spec; for e)2.5 E(xample:)-.15 E +20.19(R$+ $:)157 443.6 R($>7 $1)2.5 E .327(matches an)117 459.8 R .327 +(ything, passes that to ruleset se)-.15 F -.15(ve)-.25 G .327 +(n, and continues; the).15 F F0($:)2.827 E F1 .327(is necessary to a) +2.827 F -.2(vo)-.2 G .326(id an in-).2 F(\214nite loop.)117 471.8 Q +1.205(Substitution occurs in the order described, that is, parameters f\ +rom the LHS are substi-)142 488 R .22(tuted, hostnames are canonicalize\ +d, \231subroutines\232 are called, and \214nally)117 500 R F0($#)2.719 E +F1(,)A F0($@)2.719 E F1 2.719(,a)C(nd)-2.719 E F0($:)2.719 E F1 .219 +(are pro-)2.719 F(cessed.)117 512 Q F0 2.5(5.1.3. Semantics)102 536 R +(of r)2.5 E(ewriting rule sets)-.18 E F1 .706(There are six re)142 552.2 +R .706(writing sets that ha)-.25 F 1.006 -.15(ve s)-.2 H .706 +(peci\214c semantics.).15 F(Fi)5.706 E 1.006 -.15(ve o)-.25 H 3.206(ft) +.15 G .706(hese are related as de-)-3.206 F(picted by \214gure 1.)117 564.2 Q 1.029 (Ruleset three should turn the address into \231canonical form.)142 -580.4 R 6.029<9a54>-.7 G 1.03(his form should ha)-6.029 F 1.33 -.15 +580.4 R 6.029<9a54>-.7 G 1.029(his form should ha)-6.029 F 1.329 -.15 (ve t)-.2 H(he).15 E(basic syntax:)117 592.4 Q (local-part@host-domain-spec)157 608.6 Q(Ruleset three is applied by)117 624.8 Q F2(sendmail)2.5 E F1(before doing an)2.5 E(ything with an)-.15 E -2.5(ya)-.15 G(ddress.)-2.5 E .302 +2.5(ya)-.15 G(ddress.)-2.5 E .301 (If no \231@\232 sign is speci\214ed, then the host-domain-spec)142 641 -R F2(may)2.801 E F1 .301(be appended \(box \231D\232 in Fig-)2.801 F -.577(ure 1\) from the sender address \(if the)117 653 R F0(C)3.077 E F1 +R F2(may)2.801 E F1 .302(be appended \(box \231D\232 in Fig-)2.801 F +.578(ure 1\) from the sender address \(if the)117 653 R F0(C)3.077 E F1 .577(\215ag is set in the mailer de\214nition corresponding to the)3.077 F F2(sending)117 665 Q F1(mailer\).)2.5 E .32 LW 76 674.6 72 674.6 DL 80 674.6 76 674.6 DL 84 674.6 80 674.6 DL 88 674.6 84 674.6 DL 92 674.6 88 @@ -3524,9 +3548,9 @@ DL 108 674.6 104 674.6 DL 112 674.6 108 674.6 DL 116 674.6 112 674.6 DL 674.6 188 674.6 DL 196 674.6 192 674.6 DL 200 674.6 196 674.6 DL 204 674.6 200 674.6 DL 208 674.6 204 674.6 DL 212 674.6 208 674.6 DL 216 674.6 212 674.6 DL/F4 5/Times-Roman@0 SF(15)93.6 685 Q/F5 8 -/Times-Roman@0 SF -.88(Yo)3.2 K 2.725(um).88 G .725(ay w)-2.725 F .726 +/Times-Roman@0 SF -.88(Yo)3.2 K 2.726(um).88 G .726(ay w)-2.726 F .726 (ant to use it for special \231per user\232 e)-.08 F 2.726(xtensions. F) --.12 F .726(or e)-.12 F .726 +-.12 F .726(or e)-.12 F .725 (xample, in the address \231jgm+foo@CMU.EDU\232; the \231+foo\232)-.12 F (part is not part of the user name, and is passed to the local mailer f\ or local use.)72 697.8 Q 0 Cg EP @@ -3621,71 +3645,71 @@ MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 252 146.4 MT -7.2 1.8 RL 0 -3.6 RL CL 296.4 449 296.4 DL 459 296.4 454 296.4 DL 464 296.4 459 296.4 DL 469 296.4 464 296.4 DL 474 296.4 469 296.4 DL 479 296.4 474 296.4 DL 484 296.4 479 296.4 DL 489 296.4 484 296.4 DL 494 296.4 489 296.4 DL 499 -296.4 494 296.4 DL 504 296.4 499 296.4 DL 1.021(Ruleset zero is applied\ - after ruleset three to addresses that are going to actually specify)142 -332.4 R 2.818(recipients. It)117 344.4 R .318(must resolv)2.818 F 2.818 -(et)-.15 G 2.819(oa)-2.818 G/F2 10/Times-Italic@0 SF({mailer)A 2.819(,h) --1.11 G .319(ost, addr)-2.819 F(ess})-.37 E F1 2.819(triple. The)2.819 F -F2(mailer)2.819 E F1 .319(must be de\214ned in the)2.819 F .752 -(mailer de\214nitions from the con\214guration \214le.)117 356.4 R(The) -5.751 E F2(host)3.251 E F1 .751(is de\214ned into the)3.251 F F0($h) -3.251 E F1 .751(macro for use in)3.251 F 1.202(the ar)117 368.4 R 1.202 -(gv e)-.18 F 1.203(xpansion of the speci\214ed mailer)-.15 F 6.203(.N) --.55 G 1.203(otice: since the en)-6.203 F -.15(ve)-.4 G 1.203 -(lope sender address will be).15 F .707(used if a deli)117 380.4 R -.15 +296.4 494 296.4 DL 504 296.4 499 296.4 DL .047(Ruleset zero is applied \ +after ruleset three to addresses that are going to actually specify re-) +142 332.4 R 3.305(cipients. It)117 344.4 R .805(must resolv)3.305 F +3.305(et)-.15 G 3.305(oa)-3.305 G/F2 10/Times-Italic@0 SF({mailer)A +3.304(,h)-1.11 G .804(ost, addr)-3.304 F(ess})-.37 E F1 3.304 +(triple. The)3.304 F F2(mailer)3.304 E F1 .804(must be de\214ned in the) +3.304 F .751(mailer de\214nitions from the con\214guration \214le.)117 +356.4 R(The)5.751 E F2(host)3.251 E F1 .751(is de\214ned into the)3.251 +F F0($h)3.251 E F1 .752(macro for use in)3.252 F 1.203(the ar)117 368.4 +R 1.203(gv e)-.18 F 1.203(xpansion of the speci\214ed mailer)-.15 F +6.203(.N)-.55 G 1.203(otice: since the en)-6.203 F -.15(ve)-.4 G 1.203 +(lope sender address will be).15 F .706(used if a deli)117 380.4 R -.15 (ve)-.25 G .706(ry status noti\214cation must be send, i.e., it may spe\ -cify a recipient, it is also run).15 F 1.548(through ruleset zero.)117 -392.4 R 1.548(If ruleset zero returns a temporary error)6.548 F F0(4xy) -4.049 E F1 1.549(then deli)4.049 F -.15(ve)-.25 G 1.549(ry is deferred.) +cify a recipient, it is also run).15 F 1.549(through ruleset zero.)117 +392.4 R 1.549(If ruleset zero returns a temporary error)6.549 F F0(4xy) +4.048 E F1 1.548(then deli)4.048 F -.15(ve)-.25 G 1.548(ry is deferred.) .15 F .064(This can be used to temporarily disable deli)117 404.4 R -.15 (ve)-.25 G(ry).15 E 2.564(,e)-.65 G .064 (.g., based on the time of the day or other v)-2.564 F(ary-)-.25 E (ing parameters.)117 416.4 Q -(It should not be used to quarantine e-mails.)5 E .452 -(Rulesets one and tw)142 432.6 R 2.952(oa)-.1 G .452 -(re applied to all sender and recipient addresses respecti)-2.952 F -.15 -(ve)-.25 G(ly).15 E 5.453(.T)-.65 G(he)-5.453 E(y)-.15 E +(It should not be used to quarantine e-mails.)5 E .453 +(Rulesets one and tw)142 432.6 R 2.953(oa)-.1 G .452 +(re applied to all sender and recipient addresses respecti)-2.953 F -.15 +(ve)-.25 G(ly).15 E 5.452(.T)-.65 G(he)-5.452 E(y)-.15 E (are applied before an)117 444.6 Q 2.5(ys)-.15 G (peci\214cation in the mailer de\214nition.)-2.5 E(The)5 E 2.5(ym)-.15 G -(ust ne)-2.5 E -.15(ve)-.25 G 2.5(rr).15 G(esolv)-2.5 E(e.)-.15 E 1.266 +(ust ne)-2.5 E -.15(ve)-.25 G 2.5(rr).15 G(esolv)-2.5 E(e.)-.15 E .335 (Ruleset four is applied to all addresses in the message.)142 460.8 R -1.265(It is typically used to translate)6.265 F(internal to e)117 472.8 -Q(xternal form.)-.15 E .652(In addition, ruleset 5 is applied to all lo\ -cal addresses \(speci\214cally)142 489 R 3.153(,t)-.65 G .653 -(hose that resolv)-3.153 F 3.153(et)-.15 G 3.153(oa)-3.153 G .296 +.336(It is typically used to translate in-)5.336 F(ternal to e)117 472.8 +Q(xternal form.)-.15 E .653(In addition, ruleset 5 is applied to all lo\ +cal addresses \(speci\214cally)142 489 R 3.152(,t)-.65 G .652 +(hose that resolv)-3.152 F 3.152(et)-.15 G 3.152(oa)-3.152 G .296 (mailer with the `F=5' \215ag set\) that do not ha)117 501 R .596 -.15 (ve a)-.2 H 2.796(liases. This).15 F(allo)2.796 E .296 (ws a last minute hook for local)-.25 F(names.)117 513 Q F0 2.5 -(5.1.4. Ruleset)102 537 R(hooks)2.5 E F1 3.814(Af)142 553.2 S 1.814 -.25 -(ew e)-3.814 H 1.315(xtra rulesets are de\214ned as \231hooks\232 that \ -can be de\214ned to get special features.).1 F(The)117 565.2 Q 3.468(ya) --.15 G .968(re all named rulesets.)-3.468 F .968 +(5.1.4. Ruleset)102 537 R(hooks)2.5 E F1 3.815(Af)142 553.2 S 1.815 -.25 +(ew e)-3.815 H 1.315(xtra rulesets are de\214ned as \231hooks\232 that \ +can be de\214ned to get special features.).1 F(The)117 565.2 Q 3.467(ya) +-.15 G .968(re all named rulesets.)-3.467 F .968 (The \231check_*\232 forms all gi)5.968 F 1.268 -.15(ve a)-.25 H .968 -(ccept/reject status; f).15 F .967(alling of)-.1 F 3.467(ft)-.25 G(he) --3.467 E .207(end or returning normally is an accept, and resolving to) +(ccept/reject status; f).15 F .968(alling of)-.1 F 3.468(ft)-.25 G(he) +-3.468 E .207(end or returning normally is an accept, and resolving to) 117 577.2 R F0($#err)2.707 E(or)-.18 E F1 .207 -(is a reject or quarantine.)2.707 F(Quar)5.207 E(-)-.2 E +(is a reject or quarantine.)2.707 F(Quar)5.206 E(-)-.2 E (antining is chosen by specifying)117 589.2 Q F0(quarantine)2.5 E F1 (in the second part of the mailer triplet:)2.5 E ($#error $@ quarantine $: Reason for quarantine)157 605.4 Q(Man)117 -621.6 Q 3.121(yo)-.15 G 3.121(ft)-3.121 G .621(hese can also resolv) --3.121 F 3.121(et)-.15 G 3.121(ot)-3.121 G .621(he special mailer name) --3.121 F F0($#discard)3.12 E F1 3.12(;t)C .62(his accepts the message) --3.12 F .923(as though it were successful b)117 633.6 R .923 -(ut then discards it without deli)-.2 F -.15(ve)-.25 G(ry).15 E 5.924 -(.N)-.65 G .924(ote, this mailer cannot be)-5.924 F .682 +621.6 Q 3.12(yo)-.15 G 3.12(ft)-3.12 G .62(hese can also resolv)-3.12 F +3.121(et)-.15 G 3.121(ot)-3.121 G .621(he special mailer name)-3.121 F +F0($#discard)3.121 E F1 3.121(;t)C .621(his accepts the message)-3.121 F +.924(as though it were successful b)117 633.6 R .923 +(ut then discards it without deli)-.2 F -.15(ve)-.25 G(ry).15 E 5.923 +(.N)-.65 G .923(ote, this mailer cannot be)-5.923 F .681 (chosen as a mailer in ruleset 0.)117 645.6 R .682 -(Note also that all \231check_*\232 rulesets ha)5.682 F .981 -.15(ve t) --.2 H 3.181(od).15 G .681(eal with tempo-)-3.181 F .682(rary f)117 657.6 -R .682(ailures, especially for map lookups, themselv)-.1 F .682 -(es, i.e., the)-.15 F 3.182(ys)-.15 G .683 +(Note also that all \231check_*\232 rulesets ha)5.682 F .982 -.15(ve t) +-.2 H 3.182(od).15 G .682(eal with tempo-)-3.182 F .683(rary f)117 657.6 +R .683(ailures, especially for map lookups, themselv)-.1 F .682 +(es, i.e., the)-.15 F 3.182(ys)-.15 G .682 (hould return a temporary error)-3.182 F(code or at least the)117 669.6 Q 2.5(ys)-.15 G(hould mak)-2.5 E 2.5(eap)-.1 G (roper decision in those cases.)-2.5 E F0 2.5(5.1.4.1. check_r)117 693.6 -R(elay)-.18 E F1(The)157 709.8 Q F2 -.15(ch)3.336 G(ec).15 E(k_r)-.2 E +R(elay)-.18 E F1(The)157 709.8 Q F2 -.15(ch)3.335 G(ec).15 E(k_r)-.2 E (elay)-.37 E F1 .836 -(ruleset is called after a connection is accepted by the daemon.)3.336 F -.835(It is)5.835 F(not called when sendmail is started using the)132 +(ruleset is called after a connection is accepted by the daemon.)3.335 F +.836(It is)5.836 F(not called when sendmail is started using the)132 721.8 Q F0(\255bs)2.5 E F1 2.5(option. It)2.5 F(is passed)2.5 E 0 Cg EP %%Page: 42 38 %%BeginPageSetup @@ -3694,191 +3718,245 @@ BP /F0 10/Times-Bold@0 SF 193.36(SMM:08-42 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF (client.host.name $| client.host.address)172 96 Q(where)132 112.2 Q F0 -($|)4.016 E F1 1.517(is a metacharacter separating the tw)4.017 F 4.017 +($|)4.017 E F1 1.517(is a metacharacter separating the tw)4.017 F 4.017 (op)-.1 G 4.017(arts. This)-4.017 F 1.517 -(ruleset can reject connections)4.017 F .323(from v)132 124.2 R .323 +(ruleset can reject connections)4.017 F .322(from v)132 124.2 R .322 (arious locations.)-.25 F .322 (Note that it only checks the connecting SMTP client IP address and) -5.322 F 3.463(hostname. It)132 136.2 R .963 +5.322 F 3.464(hostname. It)132 136.2 R .963 (does not check for third party message relaying.)3.463 F(The)5.963 E/F2 10/Times-Italic@0 SF -.15(ch)3.463 G(ec).15 E(k_r)-.2 E(cpt)-.37 E F1 -.964(ruleset dis-)3.463 F(cussed belo)132 148.2 Q 2.5(wu)-.25 G +.963(ruleset dis-)3.463 F(cussed belo)132 148.2 Q 2.5(wu)-.25 G (sually does third party message relay checking.)-2.5 E F0 2.5 -(5.1.4.2. check_mail)117 172.2 R F1(The)157 188.4 Q F2 -.15(ch)3.723 G +(5.1.4.2. check_mail)117 172.2 R F1(The)157 188.4 Q F2 -.15(ch)3.722 G (ec).15 E(k_mail)-.2 E F1 1.223 -(ruleset is passed the user name parameter of the)3.723 F/F3 9 -/Times-Roman@0 SF 1.222(SMTP MAIL)3.723 F F1(com-)3.722 E 2.5(mand. It) +(ruleset is passed the user name parameter of the)3.722 F/F3 9 +/Times-Roman@0 SF 1.223(SMTP MAIL)3.723 F F1(com-)3.723 E 2.5(mand. It) 132 200.4 R(can accept or reject the address.)2.5 E F0 2.5 (5.1.4.3. check_r)117 224.4 R(cpt)-.18 E F1(The)157 240.6 Q F2 -.15(ch) -3.917 G(ec).15 E(k_r)-.2 E(cpt)-.37 E F1 1.417 -(ruleset is passed the user name parameter of the)3.917 F F3 1.418 -(SMTP RCPT)3.917 F F1(com-)3.918 E 2.5(mand. It)132 252.6 R +3.918 G(ec).15 E(k_r)-.2 E(cpt)-.37 E F1 1.417 +(ruleset is passed the user name parameter of the)3.918 F F3 1.417 +(SMTP RCPT)3.917 F F1(com-)3.917 E 2.5(mand. It)132 252.6 R (can accept or reject the address.)2.5 E F0 2.5(5.1.4.4. check_data)117 -276.6 R F1(The)157 292.8 Q F2 -.15(ch)3.246 G(ec).15 E(k_data)-.2 E F1 -.746(ruleset is called after the)3.246 F F3 .746(SMTP D)3.246 F -1.089 --.999(AT A)-.36 H F1 .745(command, its parameter is the)4.245 F +276.6 R F1(The)157 292.8 Q F2 -.15(ch)3.245 G(ec).15 E(k_data)-.2 E F1 +.746(ruleset is called after the)3.245 F F3 .746(SMTP D)3.246 F -1.089 +-.999(AT A)-.36 H F1 .746(command, its parameter is the)4.245 F (number of recipients.)132 304.8 Q(It can accept or reject the command.) -5 E F0 2.5(5.1.4.5. check_compat)117 328.8 R F1(The)157 345 Q F2 -.15 -(ch)2.5 G(ec).15 E(k_compat)-.2 E F1(ruleset is passed)2.5 E(sender)172 -361.2 Q(-address $| recipient-address)-.2 E(where)132 377.4 Q F0($|) -3.725 E F1 1.225(is a metacharacter separating the addresses.)3.725 F -1.225(It can accept or reject mail transfer)6.225 F 2.386 -(between these tw)132 389.4 R 4.886(oa)-.1 G 2.386(ddresses much lik) --4.886 F 4.885(et)-.1 G(he)-4.885 E F2 -.15(ch)4.885 G(ec).15 E -(kcompat\(\))-.2 E F1 4.885(function. Note:)4.885 F 2.385(while other) -4.885 F F2 -.15(ch)132 401.4 S(ec).15 E(k_*)-.2 E F1 1.99 -(rulesets are in)4.49 F -.2(vo)-.4 G -.1(ke).2 G 4.49(dd).1 G 1.99 -(uring the SMTP mail receiption stage \(i.e., in the SMTP)-4.49 F(serv) -132 413.4 Q(er\),)-.15 E F2 -.15(ch)2.5 G(ec).15 E(k_compat)-.2 E F1 -(is in)2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(dd).1 G(uring the mail deli) --2.5 E -.15(ve)-.25 G(ry stage.).15 E F0 2.5(5.1.4.6. check_eoh)117 -437.4 R F1(The)157 453.6 Q F2 -.15(ch)2.5 G(ec).15 E(k_eoh)-.2 E F1 -(ruleset is passed)2.5 E(number)172 469.8 Q -(-of-headers $| size-of-headers)-.2 E(where)132 486 Q F0($|)3.803 E F1 -1.303(is a metacharacter separating the numbers.)3.803 F 1.303 -(These numbers can be used for size)6.303 F .588(comparisons with the) -132 498 R F0(arith)3.088 E F1 3.088(map. The)3.088 F .588 -(ruleset is triggered after all of the headers ha)3.088 F .888 -.15 -(ve b)-.2 H(een).15 E 3.262(read. It)132 510 R .762 -(can be used to correlate information g)3.262 F .761 -(athered from those headers using the)-.05 F F0(macr)3.261 E(o)-.18 E F1 -(storage map.)132 522 Q -(One possible use is to check for a missing header)5 E 5(.F)-.55 G(or e) --5.15 E(xample:)-.15 E 0 Cg EP +5 E F0 2.5(5.1.4.5. check_other)117 328.8 R F1(The)157 345 Q F2 -.15(ch) +3.613 G(ec).15 E(k_other)-.2 E F1 1.113(ruleset is in)3.613 F -.2(vo)-.4 +G -.1(ke).2 G 3.613(df).1 G 1.113(or all unkno)-3.613 F 1.112 +(wn SMTP commands and for com-)-.25 F 1.232(mands which do not ha)132 +357 R 1.532 -.15(ve s)-.2 H 1.232 +(peci\214c rulesets, e.g., NOOP and VERB.).15 F 1.233 +(Internal checks, e.g.,)6.233 F .969(those e)132 369 R .969 +(xplained in "Measures ag)-.15 F .968 +(ainst Denial of Service Attacks", are performed \214rst.)-.05 F(The) +5.968 E(ruleset is passed)132 381 Q +(entire-SMTP-command $| SMTP-reply-\214rst-digit)172 397.2 Q(where)132 +413.4 Q F0($|)2.5 E F1(is a metacharacter separating the tw)2.5 E 2.5 +(op)-.1 G 2.5(arts. F)-2.5 F(or e)-.15 E(xample,)-.15 E(VERB $| 2)172 +429.6 Q .187(re\215ects recei)132 445.8 R .188(ving the "VERB" SMTP com\ +mand and the intent to return a "2XX" SMTP suc-)-.25 F(cess reply)132 +457.8 Q 5(.A)-.65 G(lternati)-5 E -.15(ve)-.25 G(ly).15 E(,)-.65 E +(JUNK TYPE=I $| 5)172 474 Q .438(re\215ects recei)132 490.2 R .438 +(ving the unkno)-.25 F .438 +(wn "JUNK TYPE=I" SMTP command and the intent to return a)-.25 F +("5XX" SMTP f)132 502.2 Q(ailure reply)-.1 E 5(.I)-.65 G 2.5(ft)-5 G +(he ruleset returns the SMTP reply code 421:)-2.5 E +($#error $@ 4.7.0 $: 421 bad command)172 518.4 Q .594 +(the session is terminated.)132 534.6 R .594 +(Note: it is a bad idea to return the original command in the error) +5.594 F(te)132 546.6 Q .83(xt to the client as that might be ab)-.15 F +.83(used for certain attacks.)-.2 F .83(The ruleset cannot o)5.83 F -.15 +(ve)-.15 G .83(rride a).15 F(rejection triggered by the b)132 558.6 Q +(uilt-in rules.)-.2 E F0 2.5(5.1.4.6. check_compat)117 582.6 R F1(The) +157 598.8 Q F2 -.15(ch)2.5 G(ec).15 E(k_compat)-.2 E F1 +(ruleset is passed)2.5 E(sender)172 615 Q(-address $| recipient-address) +-.2 E(where)132 631.2 Q F0($|)2.625 E F1 .125 +(is a metacharacter separating the addresses.)2.625 F .126 +(It can accept or reject mail transfer be-)5.125 F .065(tween these tw) +132 643.2 R 2.564(oa)-.1 G .064(ddresses much lik)-2.564 F 2.564(et)-.1 +G(he)-2.564 E F2 -.15(ch)2.564 G(ec).15 E(kcompat\(\))-.2 E F1 2.564 +(function. Note:)2.564 F .064(while other)2.564 F F2 -.15(ch)2.564 G(ec) +.15 E(k_*)-.2 E F1 2.166(rulesets are in)132 655.2 R -.2(vo)-.4 G -.1 +(ke).2 G 4.667(dd).1 G 2.167 +(uring the SMTP mail receiption stage \(i.e., in the SMTP serv)-4.667 F +(er\),)-.15 E F2 -.15(ch)132 667.2 S(ec).15 E(k_compat)-.2 E F1(is in) +2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(dd).1 G(uring the mail deli)-2.5 E +-.15(ve)-.25 G(ry stage.).15 E F0 2.5(5.1.4.7. check_eoh)117 691.2 R F1 +(The)157 707.4 Q F2 -.15(ch)2.5 G(ec).15 E(k_eoh)-.2 E F1 +(ruleset is passed)2.5 E 0 Cg EP %%Page: 43 39 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-43)195.86 E/F1 10/Times-Roman@0 SF(Kstorage macro)172 96 Q -(HMessage-Id: $>CheckMessageId)172 108 Q(SCheckMessageId)172 132 Q 2.5 -(#R)172 144 S(ecord the presence of the header)-2.5 E 88.83(R$* $:)172 -156 R($\(storage {MessageIdCheck} $@ OK $\) $1)2.5 E(R< $+ @ $+ >)172 -168 Q($@ OK)49.56 E 88.83(R$* $#error)172 180 R($: 553 Header Error)2.5 -E(Scheck_eoh)172 204 Q 2.5(#C)172 216 S(heck the macro)-2.5 E 88.83 -(R$* $:)172 228 R 2.5(<$)2.5 G(&{MessageIdCheck} >)-2.5 E 2.5(#C)172 240 -S(lear the macro for the ne)-2.5 E(xt message)-.15 E 88.83(R$* $:)172 -252 R($\(storage {MessageIdCheck} $\) $1)2.5 E 2.5(#H)172 264 S -(as a Message-Id: header)-2.5 E(R< $+ >)172 276 Q($@ OK)74.41 E 2.5(#A) -172 288 S(llo)-2.5 E 2.5(wm)-.25 G(issing Message-Id: from local mail) --2.5 E 88.83(R$* $:)172 300 R 2.5(<$)2.5 G(&{client_name} >)-2.5 E(R< >) -172 312 Q($@ OK)87.55 E(R< $=w >)172 324 Q($@ OK)67.19 E 2.5(#O)172 336 -S(therwise, reject the mail)-2.5 E 88.83(R$* $#error)172 348 R -($: 553 Header Error)2.5 E -.25(Ke)132 364.2 S .459(ep in mind the Mess\ +(SMM:08-43)195.86 E/F1 10/Times-Roman@0 SF(number)172 96 Q +(-of-headers $| size-of-headers)-.2 E(where)132 112.2 Q F0($|)3.803 E F1 +1.303(is a metacharacter separating the numbers.)3.803 F 1.303 +(These numbers can be used for size)6.303 F .588(comparisons with the) +132 124.2 R F0(arith)3.088 E F1 3.088(map. The)3.088 F .588 +(ruleset is triggered after all of the headers ha)3.088 F .888 -.15 +(ve b)-.2 H(een).15 E 3.262(read. It)132 136.2 R .762 +(can be used to correlate information g)3.262 F .761 +(athered from those headers using the)-.05 F F0(macr)3.261 E(o)-.18 E F1 +(storage map.)132 148.2 Q +(One possible use is to check for a missing header)5 E 5(.F)-.55 G(or e) +-5.15 E(xample:)-.15 E(Kstorage macro)172 164.4 Q +(HMessage-Id: $>CheckMessageId)172 176.4 Q(SCheckMessageId)172 200.4 Q +2.5(#R)172 212.4 S(ecord the presence of the header)-2.5 E 88.83(R$* $:) +172 224.4 R($\(storage {MessageIdCheck} $@ OK $\) $1)2.5 E(R< $+ @ $+ >) +172 236.4 Q($@ OK)49.56 E 88.83(R$* $#error)172 248.4 R +($: 553 Header Error)2.5 E(Scheck_eoh)172 272.4 Q 2.5(#C)172 284.4 S +(heck the macro)-2.5 E 88.83(R$* $:)172 296.4 R 2.5(<$)2.5 G +(&{MessageIdCheck} >)-2.5 E 2.5(#C)172 308.4 S +(lear the macro for the ne)-2.5 E(xt message)-.15 E 88.83(R$* $:)172 +320.4 R($\(storage {MessageIdCheck} $\) $1)2.5 E 2.5(#H)172 332.4 S +(as a Message-Id: header)-2.5 E(R< $+ >)172 344.4 Q($@ OK)74.41 E 2.5 +(#A)172 356.4 S(llo)-2.5 E 2.5(wm)-.25 G +(issing Message-Id: from local mail)-2.5 E 88.83(R$* $:)172 368.4 R 2.5 +(<$)2.5 G(&{client_name} >)-2.5 E(R< >)172 380.4 Q($@ OK)87.55 E +(R< $=w >)172 392.4 Q($@ OK)67.19 E 2.5(#O)172 404.4 S +(therwise, reject the mail)-2.5 E 88.83(R$* $#error)172 416.4 R +($: 553 Header Error)2.5 E -.25(Ke)132 432.6 S .459(ep in mind the Mess\ age-Id: header is not a required header and is not a guaranteed spam).25 -F(indicator)132 376.2 Q 5(.T)-.55 G(his ruleset is an e)-5 E +F(indicator)132 444.6 Q 5(.T)-.55 G(his ruleset is an e)-5 E (xample and should probably not be used in production.)-.15 E F0 2.5 -(5.1.4.7. check_eom)117 400.2 R F1(The)157 416.4 Q/F2 10/Times-Italic@0 +(5.1.4.8. check_eom)117 468.6 R F1(The)157 484.8 Q/F2 10/Times-Italic@0 SF -.15(ch)3.219 G(ec).15 E(k_eom)-.2 E F1 .719(ruleset is called after\ the end of a message, its parameter is the mes-)3.219 F(sage size.)132 -428.4 Q(It can accept or reject the message.)5 E F0 2.5 -(5.1.4.8. check_etr)117 452.4 R(n)-.15 E F1(The)157 468.6 Q F2 -.15(ch) +496.8 Q(It can accept or reject the message.)5 E F0 2.5 +(5.1.4.9. check_etr)117 520.8 R(n)-.15 E F1(The)157 537 Q F2 -.15(ch) 3.384 G(ec).15 E(k_etrn)-.2 E F1 .885 (ruleset is passed the parameter of the)3.384 F/F3 9/Times-Roman@0 SF .885(SMTP ETRN)3.385 F F1 3.385(command. It)3.385 F(can)3.385 E -(accept or reject the command.)132 480.6 Q F0 2.5(5.1.4.9. check_expn) -117 504.6 R F1(The)157 520.8 Q F2 -.15(ch)3.615 G(ec).15 E(k_e)-.2 E -(xpn)-.2 E F1 1.115(ruleset is passed the user name parameter of the) -3.615 F F3 1.114(SMTP EXPN)3.615 F F1(com-)3.614 E 2.5(mand. It)132 -532.8 R(can accept or reject the address.)2.5 E F0 2.5 -(5.1.4.10. check_vrfy)117 556.8 R F1(The)157 573 Q F2 -.15(ch)3.816 G -(ec).15 E(k_vrfy)-.2 E F1 1.317 -(ruleset is passed the user name parameter of the)3.816 F F3 1.317 -(SMTP VRFY)3.817 F F1(com-)3.817 E 2.5(mand. It)132 585 R -(can accept or reject the command.)2.5 E F0 2.5(5.1.4.11. trust_auth)117 -609 R F1(The)157 625.2 Q F2(trust_auth)3.045 E F1 .545 -(ruleset is passed the A)3.045 F .545(UTH= parameter of the)-.55 F F3 -.544(SMTP MAIL)3.044 F F1(command.)3.044 E .635 -(It is used to determine whether this v)132 637.2 R .636 -(alue should be trusted. In order to mak)-.25 F 3.136(et)-.1 G .636 -(his decision,)-3.136 F .154(the ruleset may mak)132 649.2 R 2.654(eu) --.1 G .154(se of the v)-2.654 F(arious)-.25 E F0(${auth_*})2.654 E F1 -2.654(macros. If)2.654 F .153(the ruleset does resolv)2.654 F 2.653(et) --.15 G 2.653(ot)-2.653 G(he)-2.653 E .018(\231error\232 mailer the A)132 -661.2 R .019 -(UTH= parameter is not trusted and hence not passed on to the ne)-.55 F -.019(xt relay)-.15 F(.)-.65 E F0 2.5(5.1.4.12. tls_client)117 685.2 R F1 -(The)157 701.4 Q F2(tls_client)2.947 E F1 .447 -(ruleset is called when sendmail acts as serv)2.947 F(er)-.15 E 2.947 -(,a)-.4 G .447(fter a ST)-2.947 F(AR)-.93 E .446(TTLS com-)-.6 F 1.045 -(mand has been issued, and from)132 713.4 R F2 -.15(ch)3.545 G(ec).15 E -(k_mail.)-.2 E F1 1.045(The parameter is the v)6.045 F 1.045(alue of) --.25 F F0(${v)3.545 E(erify})-.1 E F1(and)3.545 E(ST)132 725.4 Q(AR)-.93 -E 1.704(TTLS or MAIL, respecti)-.6 F -.15(ve)-.25 G(ly).15 E 6.704(.I) --.65 G 4.204(ft)-6.704 G 1.704(he ruleset does resolv)-4.204 F 4.204(et) --.15 G 4.204(ot)-4.204 G 1.704(he \231error\232 mailer)-4.204 F 4.203 -(,t)-.4 G(he)-4.203 E 0 Cg EP +(accept or reject the command.)132 549 Q F0 2.5(5.1.4.10. check_expn)117 +573 R F1(The)157 589.2 Q F2 -.15(ch)3.615 G(ec).15 E(k_e)-.2 E(xpn)-.2 E +F1 1.115(ruleset is passed the user name parameter of the)3.615 F F3 +1.114(SMTP EXPN)3.615 F F1(com-)3.614 E 2.5(mand. It)132 601.2 R +(can accept or reject the address.)2.5 E F0 2.5(5.1.4.11. check_vrfy)117 +625.2 R F1(The)157 641.4 Q F2 -.15(ch)3.816 G(ec).15 E(k_vrfy)-.2 E F1 +1.317(ruleset is passed the user name parameter of the)3.816 F F3 1.317 +(SMTP VRFY)3.817 F F1(com-)3.817 E 2.5(mand. It)132 653.4 R +(can accept or reject the command.)2.5 E F0 2.5(5.1.4.12. clt_featur)117 +677.4 R(es)-.18 E F1(The)157 693.6 Q F2(clt_featur)2.946 E(es)-.37 E F1 +.446(ruleset is called with the serv)2.946 F(er')-.15 E 2.946(sh)-.55 G +.446(ost name when sendmail connects)-2.946 F .392(to it.)132 705.6 R +.392(This ruleset should return)5.392 F F0($#)2.893 E F1(follo)2.893 E +.393(wed by a list of options \(single characters delimited)-.25 F .108 +(by white space\).)132 717.6 R .108(If the return v)5.108 F .108 +(alue starts with an)-.25 F .108(ything else it is silently ignored.) +-.15 F(Generally)5.108 E 0 Cg EP %%Page: 44 40 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-44 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(appropriate error code is returned to the client.)132 96 Q F0 2.5 -(5.1.4.13. tls_ser)117 120 R -.1(ve)-.1 G(r).1 E F1(The)157 136.2 Q/F2 -10/Times-Italic@0 SF(tls_server)3.053 E F1 .554 +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.853 +(upper case characters turn of)132 96 R 4.353(faf)-.25 G 1.854 +(eature while lo)-4.353 F 1.854(wer case characters turn it on.)-.25 F +(Options)6.854 E .592(`D'/`M' cause the client to not use D)132 108 R +(ANE/MT)-.4 E .591(A-STS, respecti)-.93 F -.15(ve)-.25 G(ly).15 E 3.091 +(,w)-.65 G .591(hich is useful to inter)-3.091 F(-)-.2 E 2.221 +(act with MT)132 120 R 2.221(As/MUs that ha)-.93 F 2.522 -.15(ve b)-.2 H +(rok).15 E 2.222(en D)-.1 F(ANE/MT)-.4 E 2.222 +(A-STS setups by simply not using it.)-.93 F .242(Note: The)132 132 R/F2 +10/Times-Italic@0 SF(d)2.742 E F1 .242(option in)2.742 F F2 +(tls_clt_featur)2.742 E(es)-.37 E F1 .242(to turn of)2.742 F 2.742(fD) +-.25 G .242(ANE does not w)-3.142 F .242(ork when the serv)-.1 F .241 +(er does)-.15 F(not e)132 144 Q -.15(ve)-.25 G 2.5(no).15 G -.25(ff)-2.5 +G(er ST).25 E(AR)-.93 E(TTLS.)-.6 E F0 2.5(5.1.4.13. trust_auth)117 168 +R F1(The)157 184.2 Q F2(trust_auth)3.044 E F1 .545 +(ruleset is passed the A)3.044 F .545(UTH= parameter of the)-.55 F/F3 9 +/Times-Roman@0 SF .545(SMTP MAIL)3.045 F F1(command.)3.045 E .636 +(It is used to determine whether this v)132 196.2 R .635 +(alue should be trusted. In order to mak)-.25 F 3.135(et)-.1 G .635 +(his decision,)-3.135 F .153(the ruleset may mak)132 208.2 R 2.653(eu) +-.1 G .154(se of the v)-2.653 F(arious)-.25 E F0(${auth_*})2.654 E F1 +2.654(macros. If)2.654 F .154(the ruleset does resolv)2.654 F 2.654(et) +-.15 G 2.654(ot)-2.654 G(he)-2.654 E(\231error\232 mailer the A)132 +220.2 Q(UTH= parameter is not trusted and hence not passed on to the ne) +-.55 E(xt relay)-.15 E(.)-.65 E F0 2.5(5.1.4.14. tls_client)117 244.2 R +F1(The)157 260.4 Q F2(tls_client)2.947 E F1 .447 +(ruleset is called when sendmail acts as serv)2.947 F(er)-.15 E 2.947 +(,a)-.4 G .447(fter a ST)-2.947 F(AR)-.93 E .446(TTLS com-)-.6 F 1.045 +(mand has been issued, and from)132 272.4 R F2 -.15(ch)3.545 G(ec).15 E +(k_mail.)-.2 E F1 1.045(The parameter is the v)6.045 F 1.045(alue of) +-.25 F F0(${v)3.545 E(erify})-.1 E F1(and)3.545 E(ST)132 284.4 Q(AR)-.93 +E .492(TTLS or MAIL, respecti)-.6 F -.15(ve)-.25 G(ly).15 E 5.492(.I) +-.65 G 2.992(ft)-5.492 G .491(he ruleset does resolv)-2.992 F 2.991(et) +-.15 G 2.991(ot)-2.991 G .491(he \231error\232 mailer)-2.991 F 2.991(,t) +-.4 G .491(he ap-)-2.991 F +(propriate error code is returned to the client.)132 296.4 Q F0 2.5 +(5.1.4.15. tls_ser)117 320.4 R -.1(ve)-.1 G(r).1 E F1(The)157 336.6 Q F2 +(tls_server)3.053 E F1 .554 (ruleset is called when sendmail acts as client after a ST)3.053 F(AR) --.93 E .554(TTLS com-)-.6 F .05(mand \(should\) ha)132 148.2 R .35 -.15 +-.93 E .554(TTLS com-)-.6 F .05(mand \(should\) ha)132 348.6 R .35 -.15 (ve b)-.2 H .05(een issued.).15 F .049(The parameter is the v)5.05 F .049(alue of)-.25 F F0(${v)2.549 E(erify})-.1 E F1 5.049(.I)C 2.549(ft) --5.049 G .049(he ruleset does)-2.549 F(resolv)132 160.2 Q 2.514(et)-.15 +-5.049 G .049(he ruleset does)-2.549 F(resolv)132 360.6 Q 2.514(et)-.15 G 2.514(ot)-2.514 G .014(he \231error\232 mailer)-2.514 F 2.514(,t)-.4 G .014(he connection is aborted \(treated as non-deli)-2.514 F -.15(ve) -.25 G .015(rable with a per).15 F(-)-.2 E(manent or temporary error\).) -132 172.2 Q F0 2.5(5.1.4.14. tls_r)117 196.2 R(cpt)-.18 E F1(The)157 -212.4 Q F2(tls_r)4.075 E(cpt)-.37 E F1 1.574 -(ruleset is called each time before a RCPT T)4.075 F 4.074(Oc)-.18 G -1.574(ommand is sent.)-4.074 F(The)6.574 E .102 -(parameter is the current recipient.)132 224.4 R .102 -(If the ruleset does resolv)5.102 F 2.602(et)-.15 G 2.602(ot)-2.602 G -.102(he \231error\232 mailer)-2.602 F 2.602(,t)-.4 G .102(he RCPT)-2.602 -F 2.749 -.18(TO c)132 236.4 T 2.388 -(ommand is suppressed \(treated as non-deli).18 F -.15(ve)-.25 G 2.388 -(rable with a permanent or temporary).15 F 3.027(error\). This)132 248.4 -R .527(ruleset allo)3.027 F .528(ws to require encryption or v)-.25 F -.528(eri\214cation of the recipient')-.15 F 3.028(sM)-.55 G 2.388 -.93 -(TA e)-3.028 H -.15(ve).68 G(n).15 E .468(if the mail is someho)132 -260.4 R 2.968(wr)-.25 G .468(edirected to another host.)-2.968 F -.15 -(Fo)5.468 G 2.968(re).15 G .468(xample, sending mail to)-3.118 F F2(luk) -2.967 E(e@end-)-.1 E(mail.or)132 272.4 Q(g)-.37 E F1 1.929 -(may get redirected to a host named)4.429 F F2(death.star)4.429 E F1 -1.93(and hence the tls_serv)4.429 F 1.93(er ruleset)-.15 F -.1(wo)132 -284.4 S(n').1 E 3.003(ta)-.18 G(pply)-3.003 E 5.503(.B)-.65 G 3.003(yi) --5.503 G .502(ntroducing per recipient restrictions such attacks \(e.g.\ -, via DNS spoo\214ng\))-3.003 F(can be made impossible.)132 296.4 Q(See) -5 E F2(cf/README)2.5 E F1(ho)2.5 E 2.5(wt)-.25 G -(his ruleset can be used.)-2.5 E F0 2.5(5.1.4.15. sr)117 320.4 R -(v_featur)-.1 E(es)-.18 E F1(The)157 336.6 Q F2(srv_featur)2.75 E(es) --.37 E F1 .25(ruleset is called with the connecting client')2.75 F 2.75 -(sh)-.55 G .25(ost name when a client)-2.75 F 1.512 -(connects to sendmail.)132 348.6 R 1.512(This ruleset should return) -6.512 F F0($#)4.011 E F1(follo)4.011 E 1.511 -(wed by a list of options \(single)-.25 F 2.16 -(characters delimited by white space\).)132 360.6 R 2.16 -(If the return v)7.16 F 2.16(alue starts with an)-.25 F 2.16 -(ything else it is)-.15 F .267(silently ignored.)132 372.6 R .267 +132 372.6 Q F0 2.5(5.1.4.16. tls_r)117 396.6 R(cpt)-.18 E F1(The)157 +412.8 Q F2(tls_r)2.674 E(cpt)-.37 E F1 .174 +(ruleset is called each time before a RCPT command is sent.)2.674 F .173 +(The parame-)5.173 F .494(ter is the current recipient.)132 424.8 R .494 +(If the ruleset does resolv)5.494 F 2.994(et)-.15 G 2.995(ot)-2.994 G +.495(he \231error\232 mailer)-2.995 F 2.995(,t)-.4 G .495(he RCPT com-) +-2.995 F .717(mand is suppressed \(treated as non-deli)132 436.8 R -.15 +(ve)-.25 G .717(rable with a permanent or temporary error\).).15 F(This) +5.716 E .308(ruleset allo)132 448.8 R .308 +(ws to require encryption or v)-.25 F .308 +(eri\214cation of the recipient')-.15 F 2.808(sM)-.55 G 2.168 -.93(TA e) +-2.808 H -.15(ve).68 G 2.808(ni).15 G 2.808(ft)-2.808 G .308(he mail is) +-2.808 F(someho)132 460.8 Q 3.331(wr)-.25 G .831 +(edirected to another host.)-3.331 F -.15(Fo)5.831 G 3.331(re).15 G .831 +(xample, sending mail to)-3.481 F F2(luk)3.331 E(e@endmail.or)-.1 E(g) +-.37 E F1(may)3.33 E .879(get redirected to a host named)132 472.8 R F2 +(death.star)3.379 E F1 .879(and hence the tls_serv)3.379 F .88 +(er ruleset w)-.15 F(on')-.1 E 3.38(ta)-.18 G(pply)-3.38 E 5.88(.B)-.65 +G(y)-5.88 E .458(introducing per recipient restrictions such attacks \(\ +e.g., via DNS spoo\214ng\) can be made im-)132 484.8 R 2.5 +(possible. See)132 496.8 R F2(cf/README)2.5 E F1(ho)2.5 E 2.5(wt)-.25 G +(his ruleset can be used.)-2.5 E F0 2.5(5.1.4.17. sr)117 520.8 R +(v_featur)-.1 E(es)-.18 E F1(The)157 537 Q F2(srv_featur)2.75 E(es)-.37 +E F1 .25(ruleset is called with the connecting client')2.75 F 2.75(sh) +-.55 G .25(ost name when a client)-2.75 F 1.512(connects to sendmail.) +132 549 R 1.512(This ruleset should return)6.512 F F0($#)4.011 E F1 +(follo)4.011 E 1.511(wed by a list of options \(single)-.25 F 2.16 +(characters delimited by white space\).)132 561 R 2.16(If the return v) +7.16 F 2.16(alue starts with an)-.25 F 2.16(ything else it is)-.15 F +.267(silently ignored.)132 573 R .267 (Generally upper case characters turn of)5.267 F 2.767(faf)-.25 G .267 (eature while lo)-2.767 F .267(wer case charac-)-.25 F .049 -(ters turn it on.)132 384.6 R .049(Option `S' causes the serv)5.049 F -.049(er not to of)-.15 F .05(fer ST)-.25 F(AR)-.93 E .05 -(TTLS, which is useful to inter)-.6 F(-)-.2 E .23(act with MT)132 396.6 -R(As/MU)-.93 E .229(As that ha)-.4 F .529 -.15(ve b)-.2 H(rok).15 E .229 +(ters turn it on.)132 585 R .049(Option `S' causes the serv)5.049 F .049 +(er not to of)-.15 F .05(fer ST)-.25 F(AR)-.93 E .05 +(TTLS, which is useful to inter)-.6 F(-)-.2 E .23(act with MT)132 597 R +(As/MU)-.93 E .229(As that ha)-.4 F .529 -.15(ve b)-.2 H(rok).15 E .229 (en ST)-.1 F(AR)-.93 E .229(TTLS implementations by simply not of)-.6 F -(fering)-.25 E 3.362(it. `V')132 408.6 R .862(turns of)3.362 F 3.362(ft) +(fering)-.25 E 3.362(it. `V')132 609 R .862(turns of)3.362 F 3.362(ft) -.25 G .863 (he request for a client certi\214cate during the TLS handshak)-3.362 F -3.363(e. Options)-.1 F -.8(`A)3.363 G(')-.31 E 2.036 -(and `P' suppress SMTP A)132 420.6 R 2.036(UTH and PIPELINING, respecti) --.55 F -.15(ve)-.25 G(ly).15 E 7.036(.`)-.65 G 2.036(c' is the equi) --7.036 F -.25(va)-.25 G 2.035(lent to).25 F .229 -(AuthOptions=p, i.e., it doesn')132 432.6 R 2.729(tp)-.18 G .229 -(ermit mechanisms susceptible to simple passi)-2.729 F .529 -.15(ve a) --.25 H .23(ttack \(e.g.,).15 F .93 -(PLAIN, LOGIN\), unless a security layer is acti)132 444.6 R -.15(ve) --.25 G 5.93(.O).15 G .93(ption `l' requires SMTP A)-5.93 F .93 -(UTH for a)-.55 F 5.03(connection. Options)132 456.6 R 2.531 -('B', 'D', 'E', and 'X' suppress SMTP VERB, DSN, ETRN, and)5.03 F -(EXPN, respecti)132 468.6 Q -.15(ve)-.25 G(ly).15 E(.)-.65 E 0 Cg EP +3.363(e. Options)-.1 F -.8(`A)3.363 G(')-.31 E .491 +(and `P' suppress SMTP A)132 621 R .491(UTH and PIPELINING, respecti) +-.55 F -.15(ve)-.25 G(ly).15 E 5.491(.`)-.65 G .491(c' is the equi) +-5.491 F -.25(va)-.25 G .49(lent to Au-).25 F 1.34 +(thOptions=p, i.e., it doesn')132 633 R 3.84(tp)-.18 G 1.34 +(ermit mechanisms susceptible to simple passi)-3.84 F 1.64 -.15(ve a) +-.25 H 1.34(ttack \(e.g.,).15 F .93 +(PLAIN, LOGIN\), unless a security layer is acti)132 645 R -.15(ve)-.25 +G 5.93(.O).15 G .93(ption `l' requires SMTP A)-5.93 F .93(UTH for a)-.55 +F 5.03(connection. Options)132 657 R 2.531 +('B', 'D', 'E', and 'X' suppress SMTP VERB, DSN, ETRN, and)5.03 F 1.635 +(EXPN, respecti)132 669 R -.15(ve)-.25 G(ly).15 E 6.635(.I)-.65 G 4.135 +(fac)-6.635 G 1.635(lient sends one of the \(HTTP\) commands GET)-4.135 +F 4.134(,P)-.74 G(OST)-4.134 E 4.134(,C)-.74 G(ON-)-4.134 E(NECT)132 681 +Q 2.973(,o)-.74 G 2.973(rU)-2.973 G .473 +(SER the connection is immediately terminated in the follo)-2.973 F .474 +(wing cases: if sent as)-.25 F +(\214rst command, if sent as \214rst command after ST)132 693 Q(AR)-.93 +E(TTLS, or if the 'h' option is set.)-.6 E 0 Cg EP %%Page: 45 41 %%BeginPageSetup BP @@ -3895,66 +3973,69 @@ G(er VERB \(def).25 E(ault\))-.1 E 38.33(CD)172 144 S 2.5(on)-38.33 G (DD)172 180 S 2.5(on)-37.78 G(ot of)-2.5 E(fer DSN)-.25 E 40(dO)172 192 S -.25(ff)-40 G(er DSN \(def).25 E(ault\))-.1 E 38.89(ED)172 204 S 2.5 (on)-38.89 G(ot of)-2.5 E(fer ETRN)-.25 E 40.56(eO)172 216 S -.25(ff) --40.56 G(er ETRN \(def).25 E(ault\))-.1 E 38.89(LD)172 228 S 2.5(on) +-40.56 G(er ETRN \(def).25 E(ault\))-.1 E 40(hT)172 228 S +(erminate session after HTTP commands)-40.7 E 38.89(LD)172 240 S 2.5(on) -38.89 G(ot require A)-2.5 E(UTH \(def)-.55 E(ault\))-.1 E 42.22(lR)172 -240 S(equire A)-42.22 E(UTH)-.55 E 39.44(PD)172 252 S 2.5(on)-39.44 G -(ot of)-2.5 E(fer PIPELINING)-.25 E 40(pO)172 264 S -.25(ff)-40 G -(er PIPELINING \(def).25 E(ault\))-.1 E 39.44(SD)172 276 S 2.5(on)-39.44 -G(ot of)-2.5 E(fer ST)-.25 E(AR)-.93 E(TTLS)-.6 E 41.11(sO)172 288 S +252 S(equire A)-42.22 E(UTH)-.55 E 39.44(PD)172 264 S 2.5(on)-39.44 G +(ot of)-2.5 E(fer PIPELINING)-.25 E 40(pO)172 276 S -.25(ff)-40 G +(er PIPELINING \(def).25 E(ault\))-.1 E 39.44(SD)172 288 S 2.5(on)-39.44 +G(ot of)-2.5 E(fer ST)-.25 E(AR)-.93 E(TTLS)-.6 E 41.11(sO)172 300 S -.25(ff)-41.11 G(er ST).25 E(AR)-.93 E(TTLS \(def)-.6 E(ault\))-.1 E -37.78(VD)172 300 S 2.5(on)-37.78 G(ot request a client certi\214cate) --2.5 E 40(vR)172 312 S(equest a client certi\214cate \(def)-40 E(ault\)) --.1 E 37.78(XD)172 324 S 2.5(on)-37.78 G(ot of)-2.5 E(fer EXPN)-.25 E 40 -(xO)172 336 S -.25(ff)-40 G(er EXPN \(def).25 E(ault\))-.1 E .205 -(Note: the entries mark)132 352.2 R .205(ed as `)-.1 F(`\(def)-.74 E +37.78(VD)172 312 S 2.5(on)-37.78 G(ot request a client certi\214cate) +-2.5 E 40(vR)172 324 S(equest a client certi\214cate \(def)-40 E(ault\)) +-.1 E 37.78(XD)172 336 S 2.5(on)-37.78 G(ot of)-2.5 E(fer EXPN)-.25 E 40 +(xO)172 348 S -.25(ff)-40 G(er EXPN \(def).25 E(ault\))-.1 E .205 +(Note: the entries mark)132 364.2 R .205(ed as `)-.1 F(`\(def)-.74 E (ault\)')-.1 E 2.705('m)-.74 G .204 (ay require that some con\214guration has been made,)-2.705 F .406 -(e.g., SMTP A)132 364.2 R .407(UTH is only a)-.55 F -.25(va)-.2 G .407 +(e.g., SMTP A)132 376.2 R .407(UTH is only a)-.55 F -.25(va)-.2 G .407 (ilable if properly con\214gured.).25 F(Moreo)5.407 E -.15(ve)-.15 G 1.207 -.4(r, m).15 H(an).4 E 2.907(yo)-.15 G .407(ptions can be)-2.907 F -.054(changed on a global basis via other settings as e)132 376.2 R .054 +.054(changed on a global basis via other settings as e)132 388.2 R .054 (xplained in this document, e.g., via Daemon-)-.15 F(PortOptions.)132 -388.2 Q .88(The ruleset may return `$#temp' to indicate that there is a\ - temporary problem deter)157 404.4 R(-)-.2 E 1.623 -(mining the correct features, e.g., if a map is una)132 416.4 R -.25(va) --.2 G 4.123(ilable. In).25 F 1.622(that case, the SMTP serv)4.122 F(er) --.15 E(issues a temporary f)132 428.4 Q -(ailure and does not accept email.)-.1 E F0 2.5(5.1.4.16. try_tls)117 -452.4 R F1(The)157 468.6 Q/F2 10/Times-Italic@0 SF(try_tls)3.563 E F1 +400.2 Q .88(The ruleset may return `$#temp' to indicate that there is a\ + temporary problem deter)157 416.4 R(-)-.2 E .74 +(mining the correct features, e.g., if a map is una)132 428.4 R -.25(va) +-.2 G 3.24(ilable. In).25 F .74(that case, the SMTP serv)3.24 F .74 +(er is-)-.15 F(sues a temporary f)132 440.4 Q +(ailure and does not accept email.)-.1 E F0 2.5(5.1.4.18. try_tls)117 +464.4 R F1(The)157 480.6 Q/F2 10/Times-Italic@0 SF(try_tls)3.563 E F1 1.063(ruleset is called when sendmail connects to another MT)3.563 F -3.563(A. If)-.93 F 1.064(the ruleset)3.563 F 1.153(does resolv)132 480.6 +3.563(A. If)-.93 F 1.064(the ruleset)3.563 F 1.153(does resolv)132 492.6 R 3.653(et)-.15 G 3.653(ot)-3.653 G 1.153(he \231error\232 mailer)-3.653 F 3.653(,s)-.4 G 1.153(endmail does not try ST)-3.653 F(AR)-.93 E 1.152 (TTLS e)-.6 F -.15(ve)-.25 G 3.652(ni).15 G 3.652(fi)-3.652 G 3.652(ti) -3.652 G 3.652(so)-3.652 G -.25(ff)-3.652 G(ered.).25 E -(This is useful to deal with ST)132 492.6 Q(AR)-.93 E +(This is useful to deal with ST)132 504.6 Q(AR)-.93 E (TTLS interoperability issues by simply not using it.)-.6 E F0 2.5 -(5.1.4.17. tls_sr)117 516.6 R(v_featur)-.1 E(es and tls_clt_featur)-.18 -E(es)-.18 E F1(The)157 532.8 Q F2(tls_clt_featur)2.871 E(es)-.37 E F1 -.372(ruleset is called when sendmail connects to another MT)2.871 F -2.872(Aa)-.93 G .372(nd the)-2.872 F F2(tls_srv_featur)132 544.8 Q(es) --.37 E F1 .436(ruleset is called when a client connects to)2.936 F F2 -(sendmail)2.935 E F1 5.435(.T)C .435(he ar)-5.435 F .435 -(guments for the)-.18 F 1.872(rulesets are the host name and IP address\ - of the other side separated by)132 556.8 R F0($|)4.372 E F1 1.872 -(\(which is a)4.372 F 3.593(metacharacter\). The)132 568.8 R 3.593(ys) --.15 G 1.093(hould return a list of)-3.593 F F2 -.1(ke)3.592 G(y=value) --.2 E F1 1.092(pairs separated by semicolons; the)3.592 F .552 -(list can be empty if no options should be applied to the connection.) -132 580.8 R -1.27 -.74(Av a)5.553 H .553(ilable k).74 F -.15(ey)-.1 G -3.053(sa).15 G .553(re and)-3.053 F(their allo)132 592.8 Q(wed v)-.25 E -(alues are:)-.25 E(Options)132 609 Q 3.977(Ac)146.4 621 S 1.477 +(5.1.4.19. tls_sr)117 528.6 R(v_featur)-.1 E(es and tls_clt_featur)-.18 +E(es)-.18 E F1(The)157 544.8 Q F2(tls_clt_featur)2.889 E(es)-.37 E F1 +.389(ruleset is called right before sendmail issues the)2.889 F F2(ST) +2.889 E(ARTTLS)-.5 E F1(com-)2.89 E 1.827(mand to another MT)132 556.8 R +4.327(Aa)-.93 G 1.827(nd the)-4.327 F F2(tls_srv_featur)4.327 E(es)-.37 +E F1 1.826(ruleset is called when a client sends the)4.326 F F2(ST)132 +568.8 Q(ARTTLS)-.5 E F1 .511(command to)3.011 F F2(sendmail)3.011 E F1 +5.511(.T)C .511(he ar)-5.511 F .512 +(guments for the rulesets are the host name and IP)-.18 F .911 +(address of the other side separated by)132 580.8 R F0($|)3.411 E F1 +.911(\(which is a metacharacter\).)3.411 F(The)5.91 E 3.41(ys)-.15 G .91 +(hould return a)-3.41 F .043(list of)132 592.8 R F2 -.1(ke)2.543 G +(y=value)-.2 E F1 .043(pairs separated by semicolons; the list can be e\ +mpty if no options should be)2.543 F(applied to the connection.)132 +604.8 Q -1.27 -.74(Av a)5 H(ilable k).74 E -.15(ey)-.1 G 2.5(sa).15 G +(re and their allo)-2.5 E(wed v)-.25 E(alues are:)-.25 E(Options)132 621 +Q 3.977(Ac)146.4 633 S 1.477 (omma separated list of SSL related options.)-3.977 F(See)6.476 E F2 (ServerSSLOptions)3.976 E F1(and)3.976 E F2(ClientSS-)3.976 E(LOptions) -146.4 633 Q F1 2.519(for details, as well as)5.019 F F2(SSL_set_options) -5.019 E F1 2.519(\(3\) and note this w)B 2.52(arning: Options)-.1 F -(already set before are not cleared!)146.4 645 Q(CipherList)132 661.2 Q -.222(Specify cipher list for ST)146.4 673.2 R(AR)-.93 E .222 +146.4 645 Q F1 1.221(for details, as well as)3.721 F F2(SSL_set_options) +3.722 E F1 1.222(\(3\) and note this w)B 1.222(arning: Options al-)-.1 F +(ready set before are not cleared!)146.4 657 Q(CipherList)132 673.2 Q +.222(Specify cipher list for ST)146.4 685.2 R(AR)-.93 E .222 (TTLS \(does not apply to TLSv1.3\), see)-.6 F F2(cipher)2.721 E(s)-.1 E -F1 .221(\(1\) for possi-)B(ble v)146.4 685.2 Q 2.5(alues. This)-.25 F +F1 .221(\(1\) for possi-)B(ble v)146.4 697.2 Q 2.5(alues. This)-.25 F -.15(ove)2.5 G(rrides the global).15 E F2(CipherList)2.5 E F1 -(for the session.)2.5 E(CertFile)132 701.4 Q -(File containing a certi\214cate.)146.4 713.4 Q 0 Cg EP +(for the session.)2.5 E(CertFile)132 713.4 Q +(File containing a certi\214cate.)146.4 725.4 Q 0 Cg EP %%Page: 46 42 %%BeginPageSetup BP @@ -3989,7 +4070,7 @@ F 2.661 -.15(ve b)-.2 H(een).15 E(changed.)132 325.2 Q(The k)157 341.4 Q E(Both)157 357.6 Q F2(CertF)2.5 E(ile)-.45 E F1(and)2.5 E F2 -2.1 -.35 (Ke y)2.5 H -.45(Fi).35 G(le).45 E F1 (must be speci\214ed together; specifying only one is an error)2.5 E(.) --.55 E F0 2.5(5.1.4.18. authinf)117 381.6 R(o)-.25 E F1(The)157 397.8 Q +-.55 E F0 2.5(5.1.4.20. authinf)117 381.6 R(o)-.25 E F1(The)157 397.8 Q F2(authinfo)3.049 E F1 .549 (ruleset is called when sendmail tries to authenticate to another MT) 3.049 F 3.05(A. It)-.93 F .844(should return)132 409.8 R F0($#)3.344 E @@ -4012,7 +4093,7 @@ F1(follo)3.344 E .844(wed by a list of tok)-.25 F .843 E(uthInf)-.5 E(o)-.25 E F1 .323(is ignored \(e)2.823 F -.15(ve)-.25 G 2.823(ni).15 G 2.823(ft)-2.823 G .323(he ruleset does not)-2.823 F (return a `)132 594.6 Q(`useful')-.74 E 2.5('r)-.74 G(esult\).)-2.5 E F0 -2.5(5.1.4.19. queuegr)117 618.6 R(oup)-.18 E F1(The)157 634.8 Q F2 +2.5(5.1.4.21. queuegr)117 618.6 R(oup)-.18 E F1(The)157 634.8 Q F2 (queue)3.918 E(gr)-.4 E(oup)-.45 E F1 1.419 (ruleset is used to map a recipient address to a queue group name.)3.918 F .434(The input for the ruleset is the recipient address \(i.e., the a\ @@ -4029,16 +4110,16 @@ ddress part of the resolv)132 646.8 R .434(ed triple\))-.15 F 1.306 BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-47)195.86 E 2.5(5.1.4.20. gr)117 96 R(eet_pause)-.18 E/F1 10 +(SMM:08-47)195.86 E 2.5(5.1.4.22. gr)117 96 R(eet_pause)-.18 E/F1 10 /Times-Roman@0 SF(The)157 112.2 Q/F2 10/Times-Italic@0 SF(gr)2.792 E (eet_pause)-.37 E F1 .292 (ruleset is used to specify the amount of time to pause before sending) -2.792 F 1.226(the initial SMTP 220 greeting.)132 124.2 R 1.226(If an) -6.226 F 3.726(yt)-.15 G(raf)-3.726 E 1.226(\214c is recei)-.25 F -.15 -(ve)-.25 G 3.726(dd).15 G 1.226(uring that pause, an SMTP 554)-3.726 F -.295(rejection response is gi)132 136.2 R -.15(ve)-.25 G 2.795(ni).15 G -.295(nstead of the 220 greeting and all SMTP commands are rejected) --2.795 F 1.489(during that connection.)132 148.2 R 1.488 +2.792 F .3(the initial SMTP 220 greeting.)132 124.2 R .3(If an)5.3 F +2.799(yt)-.15 G(raf)-2.799 E .299(\214c is recei)-.25 F -.15(ve)-.25 G +2.799(dd).15 G .299(uring that pause, an SMTP 554 re-)-2.799 F .85 +(jection response is gi)132 136.2 R -.15(ve)-.25 G 3.35(ni).15 G .85 +(nstead of the 220 greeting and all SMTP commands are rejected)-3.35 F +1.489(during that connection.)132 148.2 R 1.488 (This helps protect sites from open proxies and SMTP slammers.)6.489 F .521(The ruleset should return)132 160.2 R F0($#)3.021 E F1(follo)3.021 E .522(wed by the number of milliseconds \(thousandths of a sec-)-.25 F @@ -4055,13 +4136,13 @@ E .522(wed by the number of milliseconds \(thousandths of a sec-)-.25 F (erformed before the greeting is sent.)-2.5 E F0 2.5(5.1.5. IPC)102 232.2 R(mailers)2.5 E F1 1.332 (Some special processing occurs if the ruleset zero resolv)142 248.4 R -1.333(es to an IPC mailer \(that is, a)-.15 F 1.179 -(mailer that has \231[IPC]\232 listed as the P)117 260.4 R 1.179 -(ath in the)-.15 F F0(M)3.679 E F1 1.179(con\214guration line.)3.679 F -1.178(The host name passed)6.178 F 1.178(after \231$@\232 has MX e)117 -272.4 R 1.178(xpansion performed if not deli)-.15 F -.15(ve)-.25 G 1.178 -(ring via a named sock).15 F 1.178(et; this looks the)-.1 F -(name up in DNS to \214nd alternate deli)117 284.4 Q -.15(ve)-.25 G +1.333(es to an IPC mailer \(that is, a)-.15 F .31 +(mailer that has \231[IPC]\232 listed as the P)117 260.4 R .309 +(ath in the)-.15 F F0(M)2.809 E F1 .309(con\214guration line.)2.809 F +.309(The host name passed af-)5.309 F .08(ter \231$@\232 has MX e)117 +272.4 R .08(xpansion performed if not deli)-.15 F -.15(ve)-.25 G .08 +(ring via a named sock).15 F .08(et; this looks the name)-.1 F +(up in DNS to \214nd alternate deli)117 284.4 Q -.15(ve)-.25 G (ry sites.).15 E .442(The host name can also be pro)142 300.6 R .442 (vided as a dotted quad or an IPv6 address in square brack-)-.15 F (ets; for e)117 312.6 Q(xample:)-.15 E([128.32.149.78])157 328.8 Q(or) @@ -4097,13 +4178,13 @@ G(te internal netw).25 E(orks.)-.1 E <8a44>2.5 G(e\214ne Macr)-2.5 E(o)-.18 E F1 .88 (Macros are named with a single character or with a w)127 578.4 R .881 (ord in {braces}.)-.1 F .881(The names `)5.881 F(`x')-.74 E 3.381('a) --.74 G(nd)-3.381 E -.74(``)102 590.4 S({x}').74 E 4.35('d)-.74 G 1.85 -(enote the same macro for e)-4.35 F -.15(ve)-.25 G 1.849 -(ry single character `).15 F(`x')-.74 E 4.349('. Single)-.74 F 1.849 -(character names may be)4.349 F .172 -(selected from the entire ASCII set, b)102 602.4 R .172(ut user)-.2 F -.173(-de\214ned macros should be selected from the set of upper)-.2 F -.032(case letters only)102 614.4 R 5.032(.L)-.65 G -.25(ow)-5.032 G .031 +-.74 G(nd)-3.381 E -.74(``)102 590.4 S({x}').74 E 3.282('d)-.74 G .782 +(enote the same macro for e)-3.282 F -.15(ve)-.25 G .782 +(ry single character `).15 F(`x')-.74 E 3.282('. Single)-.74 F .782 +(character names may be se-)3.282 F .693 +(lected from the entire ASCII set, b)102 602.4 R .693(ut user)-.2 F .693 +(-de\214ned macros should be selected from the set of upper)-.2 F .032 +(case letters only)102 614.4 R 5.032(.L)-.65 G -.25(ow)-5.032 G .031 (er case letters and special symbols are used internally).25 F 5.031(.L) -.65 G .031(ong names be)-5.031 F(ginning)-.15 E .326(with a lo)102 626.4 R .326(wer case letter or a punctuation character are reserv)-.25 @@ -4189,13 +4270,14 @@ e the fully quali\214ed domain name if your system is not con-)3.094 F 127 525.2 R 1.71 -.15(ve c)-.2 H 1.409 (hanged the UNIX mailbox format, you should not change the def).15 F 1.409(ault, which is)-.1 F(\231From $g $d\232.)127 537.2 Q 9.72($m The) -102 553.4 R .718(domain part of the)3.218 F F2 -.1(ge)3.218 G(thostname) -.1 E F1 .718(return v)3.218 F 3.219(alue. Under)-.25 F .719 -(normal circumstances,)3.219 F F0($j)3.219 E F1 .719(is equi)3.219 F(v-) --.25 E(alent to)127 565.4 Q F0($w)2.5 E(.$m)-.7 E F1(.)A 7.5($n\207 The) -102 581.6 R(name of the daemon \(for error messages\).)2.5 E(Def)5 E -(aults to \231MAILER-D)-.1 E(AEMON\232.)-.4 E 7.5($o\207 \(Obsolete:)102 -597.8 R .651(use OperatorChars option instead.\))3.151 F .651 +102 553.4 R .396(domain part of the)2.896 F F2 -.1(ge)2.896 G(thostname) +.1 E F1 .396(return v)2.896 F 2.896(alue. Under)-.25 F .396 +(normal circumstances,)2.896 F F0($j)2.896 E F1 .397(is equi)2.897 F +-.25(va)-.25 G(-).25 E(lent to)127 565.4 Q F0($w)2.5 E(.$m)-.7 E F1(.)A +7.5($n\207 The)102 581.6 R(name of the daemon \(for error messages\).) +2.5 E(Def)5 E(aults to \231MAILER-D)-.1 E(AEMON\232.)-.4 E 7.5 +($o\207 \(Obsolete:)102 597.8 R .651 +(use OperatorChars option instead.\))3.151 F .651 (The set of \231operators\232 in addresses.)5.651 F 3.15(Al)5.65 G .65 (ist of)-3.15 F .581(characters which will be considered tok)127 609.8 R .582(ens and which will separate tok)-.1 F .582(ens when doing pars-)-.1 @@ -4290,11 +4372,11 @@ F(plied.)127 571.2 Q(${auth_type})102 587.4 Q the security layer of a).15 F(SASL mechanism.)127 639.6 Q(${bodytype}) 102 655.8 Q (The message body type \(7BIT or 8BITMIME\), as determined from the en) -127 667.8 Q -.15(ve)-.4 G(lope.).15 E(${cert_fp})102 684 Q 2.288 +127 667.8 Q -.15(ve)-.4 G(lope.).15 E(${cert_fp})102 684 Q .937 (The \214ngerprint of the presented certi\214cate \(ST)127 696 R(AR)-.93 -E 2.288(TTLS only\).)-.6 F 2.289(Note: this macro is only)7.288 F .017 -(de\214ned if the option)127 708 R F0(CertFinger)2.517 E(printAlgorithm) --.1 E F1 .016(is set, in which case the speci\214ed \214ngerprint)2.517 +E .938(TTLS only\).)-.6 F .938(Note: this macro is only de-)5.938 F .804 +(\214ned if the option)127 708 R F0(CertFinger)3.304 E(printAlgorithm) +-.1 E F1 .803(is set, in which case the speci\214ed \214ngerprint)3.303 F 1.076(algorithm is used.)127 720 R 1.077(The v)6.077 F 1.077 (alid algorithms depend on the OpenSSL v)-.25 F 1.077(ersion, b)-.15 F 1.077(ut usually md5,)-.2 F 0 Cg EP @@ -4309,10 +4391,10 @@ BP 144.6 Q .709(The DN \(distinguished name\) of the CA \(certi\214cate au\ thority\) that signed the presented cer)127 156.6 R(-)-.2 E (ti\214cate \(the cert issuer\) \(ST)127 168.6 Q(AR)-.93 E(TTLS only\).) --.6 E(${cert_md5})102 184.8 Q 2.134 +-.6 E(${cert_md5})102 184.8 Q .89 (The MD5 hash of the presented certi\214cate \(ST)127 196.8 R(AR)-.93 E -2.134(TTLS only\).)-.6 F 2.134(Note: this macro is only)7.134 F -(de\214ned if the option)127 208.8 Q F0(CertFinger)2.5 E(printAlgorithm) +.891(TTLS only\).)-.6 F .891(Note: this macro is only de-)5.891 F +(\214ned if the option)127 208.8 Q F0(CertFinger)2.5 E(printAlgorithm) -.1 E F1(is not set.)2.5 E(${cert_subject})102 225 Q (The DN of the presented certi\214cate \(called the cert subject\) \(ST) 127 237 Q(AR)-.93 E(TTLS only\).)-.6 E(${cipher})102 253.2 Q .228(The c\ @@ -4321,10 +4403,10 @@ A-DES-)127 265.2 R(CBC-SHA, DES-CBC-MD5, DES-CBC3-SHA \(ST)127 277.2 Q (AR)-.93 E(TTLS only\).)-.6 E(${cipher_bits})102 293.4 Q .687(The ef)127 305.4 R(fecti)-.25 E .987 -.15(ve k)-.25 H -.15(ey).05 G .688(length \(\ in bits\) of the symmetric encryption algorithm used for a TLS con-).15 -F(nection.)127 317.4 Q(${client_addr})102 333.6 Q 2.302 -(The IP address of the SMTP client.)127 345.6 R 2.302 -(IPv6 addresses are tagged with "IPv6:" before the)7.302 F 2.5 -(address. De\214ned)127 357.6 R(in the SMTP serv)2.5 E(er only)-.15 E(.) +F(nection.)127 317.4 Q(${client_addr})102 333.6 Q 1.131 +(The IP address of the SMTP client.)127 345.6 R 1.13 +(IPv6 addresses are tagged with "IPv6:" before the ad-)6.131 F 2.5 +(dress. De\214ned)127 357.6 R(in the SMTP serv)2.5 E(er only)-.15 E(.) -.65 E(${client_connections})102 373.8 Q (The number of open connections in the SMTP serv)127 385.8 Q (er for the client IP address.)-.15 E(${client_\215ags})102 402 Q 1.524 @@ -4425,279 +4507,254 @@ F(\231inet\232, \231inet6\232, \231iso\232, \231ns\232, \231x.25\232)127 -.15(ve)-.25 G(ryMode}).15 E .806(The current deli)127 578.4 R -.15(ve) -.25 G .806(ry mode sendmail is using.).15 F .806 (It is initially set to the v)5.806 F .805(alue of the)-.25 F F0(Deli) -3.305 E -.1(ve)-.1 G(ry-).1 E(Mode)127 590.4 Q F1(option.)2.5 E(${en)102 -606.6 Q(vid})-.4 E(The en)127 618.6 Q -.15(ve)-.4 G +3.305 E -.1(ve)-.1 G(ry-).1 E(Mode)127 590.4 Q F1(option.)2.5 E +(${dsn_en)102 606.6 Q(vid})-.4 E(The en)127 618.6 Q -.15(ve)-.4 G (lope id parameter \(ENVID=\) passed to sendmail as part of the en).15 E --.15(ve)-.4 G(lope.).15 E(${hdrlen})102 634.8 Q .339 -(The length of the header v)127 646.8 R .339 -(alue which is stored in ${currHeader} \(before possible truncation\).) --.25 F(If this v)127 658.8 Q(alue is greater than or equal to)-.25 E F0 -(MAXN)2.5 E(AME)-.2 E F1(the header has been truncated.)2.5 E -(${hdr_name})102 675 Q .167(The name of the header \214eld for which th\ -e current header check ruleset has been called.)127 687 R(This)5.166 E -.831(is useful for a def)127 699 R .832(ault header check ruleset to ge\ -t the name of the header; the macro is only)-.1 F -.2(av)127 711 S -(ailable in header check rulesets.)-.05 E 0 Cg EP +-.15(ve)-.4 G(lope.).15 E(${dsn_notify})102 634.8 Q -1.11(Va)127 646.8 S +(lue of DSN NO)1.11 E(TIFY= parameter \(ne)-.4 E -.15(ve)-.25 G .8 -.4 +(r, s).15 H(uccess, f).4 E(ailure, delay)-.1 E 2.5(,o)-.65 G 2.5(re)-2.5 +G(mpty string\).)-2.5 E(${dsn_ret})102 663 Q -1.11(Va)127 675 S +(lue of DSN RET= parameter \(hdrs, full, or empty string\).)1.11 E(${en) +102 691.2 Q(vid})-.4 E(The en)127 703.2 Q -.15(ve)-.4 G +(lope id parameter \(ENVID=\) passed to sendmail as part of the en).15 E +-.15(ve)-.4 G(lope.).15 E 0 Cg EP %%Page: 52 48 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-52 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(${if_addr})102 96 Q 1.194(The IP address of the interf)127 108 R 1.194 +(${hdrlen})102 96 Q .339(The length of the header v)127 108 R .339 +(alue which is stored in ${currHeader} \(before possible truncation\).) +-.25 F(If this v)127 120 Q(alue is greater than or equal to)-.25 E F0 +(MAXN)2.5 E(AME)-.2 E F1(the header has been truncated.)2.5 E +(${hdr_name})102 136.2 Q .167(The name of the header \214eld for which \ +the current header check ruleset has been called.)127 148.2 R(This)5.166 +E .831(is useful for a def)127 160.2 R .832(ault header check ruleset t\ +o get the name of the header; the macro is only)-.1 F -.2(av)127 172.2 S +(ailable in header check rulesets.)-.05 E(${if_addr})102 188.4 Q 1.194 +(The IP address of the interf)127 200.4 R 1.194 (ace of an incoming connection unless it is in the loopback net.)-.1 F -(IPv6 addresses are tagged with "IPv6:" before the address.)127 120 Q -(${if_addr_out})102 136.2 Q 1.332(The IP address of the interf)127 148.2 +(IPv6 addresses are tagged with "IPv6:" before the address.)127 212.4 Q +(${if_addr_out})102 228.6 Q 1.332(The IP address of the interf)127 240.6 R 1.333(ace of an outgoing connection unless it is in the loopback net.) -.1 F(IPv6 addresses are tagged with "IPv6:" before the address.)127 -160.2 Q(${if_f)102 176.4 Q(amily})-.1 E(The IP f)127 188.4 Q +252.6 Q(${if_f)102 268.8 Q(amily})-.1 E(The IP f)127 280.8 Q (amily of the interf)-.1 E (ace of an incoming connection unless it is in the loopback net.)-.1 E -(${if_f)102 204.6 Q(amily_out})-.1 E(The IP f)127 216.6 Q +(${if_f)102 297 Q(amily_out})-.1 E(The IP f)127 309 Q (amily of the interf)-.1 E (ace of an outgoing connection unless it is in the loopback net.)-.1 E -(${if_name})102 232.8 Q 1.086(The hostname associated with the interf) -127 244.8 R 1.086(ace of an incoming connection.)-.1 F 1.086 +(${if_name})102 325.2 Q 1.086(The hostname associated with the interf) +127 337.2 R 1.086(ace of an incoming connection.)-.1 F 1.086 (This macro can be)6.086 F(used for SmtpGreetingMessage and HRecei)127 -256.8 Q -.15(ve)-.25 G 2.5(df).15 G(or virtual hosting.)-2.5 E -.15(Fo)5 -G 2.5(re).15 G(xample:)-2.65 E 2.5(OS)167 273 S +349.2 Q -.15(ve)-.25 G 2.5(df).15 G(or virtual hosting.)-2.5 E -.15(Fo)5 +G 2.5(re).15 G(xample:)-2.65 E 2.5(OS)167 365.4 S (mtpGreetingMessage=$?{if_name}${if_name}$|$j$. MT)-2.5 E(A)-.93 E -(${if_name_out})102 293.4 Q(The name of the interf)127 305.4 Q -(ace of an outgoing connection.)-.1 E(${load_a)102 321.6 Q(vg})-.2 E -(The current load a)127 333.6 Q -.15(ve)-.2 G(rage.).15 E(${mail_addr}) -102 349.8 Q 1.239(The address part of the resolv)127 361.8 R 1.239 +(${if_name_out})102 385.8 Q(The name of the interf)127 397.8 Q +(ace of an outgoing connection.)-.1 E(${load_a)102 414 Q(vg})-.2 E +(The current load a)127 426 Q -.15(ve)-.2 G(rage.).15 E(${mail_addr})102 +442.2 Q 1.239(The address part of the resolv)127 454.2 R 1.239 (ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.739(nf).15 G 1.239 (or the)-3.739 F/F2 9/Times-Roman@0 SF 1.24(SMTP MAIL)3.739 F F1 -(command.)3.74 E(De\214ned in the SMTP serv)127 373.8 Q(er only)-.15 E -(.)-.65 E(${mail_host})102 390 Q .146(The host from the resolv)127 402 R -.146(ed triple of the address gi)-.15 F -.15(ve)-.25 G 2.646(nf).15 G -.146(or the)-2.646 F F2 .145(SMTP MAIL)2.646 F F1 2.645 -(command. De\214ned)2.645 F(in the SMTP serv)127 414 Q(er only)-.15 E(.) --.65 E(${mail_mailer})102 430.2 Q 2.14(The mailer from the resolv)127 -442.2 R 2.14(ed triple of the address gi)-.15 F -.15(ve)-.25 G 4.641(nf) -.15 G 2.141(or the)-4.641 F F2 2.141(SMTP MAIL)4.641 F F1(command.)4.641 -E(De\214ned in the SMTP serv)127 454.2 Q(er only)-.15 E(.)-.65 E -(${msg_id})102 470.4 Q(The v)127 482.4 Q(alue of the Message-Id: header) --.25 E(.)-.55 E(${msg_size})102 498.6 Q 1.033(The v)127 510.6 R 1.033 -(alue of the SIZE= parameter)-.25 F 3.533(,i)-.4 G 1.032 -(.e., usually the size of the message \(in an ESMTP dia-)-3.533 F 1.252 -(logue\), before the message has been collected, thereafter the message\ - size as computed by)127 522.6 R/F3 10/Times-Italic@0 SF(sendmail)127 -534.6 Q F1(\(and can be used in check_compat\).)2.5 E(${nbadrcpts})102 -550.8 Q(The number of bad recipients for a single message.)127 562.8 Q -(${nrcpts})102 579 Q .049(The number of v)127 591 R .049 +(command.)3.74 E(De\214ned in the SMTP serv)127 466.2 Q(er only)-.15 E +(.)-.65 E(${mail_host})102 482.4 Q .146(The host from the resolv)127 +494.4 R .146(ed triple of the address gi)-.15 F -.15(ve)-.25 G 2.646(nf) +.15 G .146(or the)-2.646 F F2 .145(SMTP MAIL)2.646 F F1 2.645 +(command. De\214ned)2.645 F(in the SMTP serv)127 506.4 Q(er only)-.15 E +(.)-.65 E(${mail_mailer})102 522.6 Q .665(The mailer from the resolv)127 +534.6 R .665(ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.165(nf) +.15 G .665(or the)-3.165 F F2 .665(SMTP MAIL)3.165 F F1 3.166 +(command. De-)3.166 F(\214ned in the SMTP serv)127 546.6 Q(er only)-.15 +E(.)-.65 E(${msg_id})102 562.8 Q(The v)127 574.8 Q +(alue of the Message-Id: header)-.25 E(.)-.55 E(${msg_size})102 591 Q +1.033(The v)127 603 R 1.033(alue of the SIZE= parameter)-.25 F 3.533(,i) +-.4 G 1.032(.e., usually the size of the message \(in an ESMTP dia-) +-3.533 F 1.252(logue\), before the message has been collected, thereaft\ +er the message size as computed by)127 615 R/F3 10/Times-Italic@0 SF +(sendmail)127 627 Q F1(\(and can be used in check_compat\).)2.5 E +(${nbadrcpts})102 643.2 Q +(The number of bad recipients for a single message.)127 655.2 Q +(${nrcpts})102 671.4 Q .049(The number of v)127 683.4 R .049 (alidated recipients for a single message.)-.25 F .048 (Note: since recipient v)5.048 F .048(alidation hap-)-.25 F .472 -(pens after)127 603 R F3 -.15(ch)2.973 G(ec).15 E(k_r)-.2 E(cpt)-.37 E +(pens after)127 695.4 R F3 -.15(ch)2.973 G(ec).15 E(k_r)-.2 E(cpt)-.37 E F1 .473(has been called, the v)2.973 F .473 (alue in this ruleset is one less than what might be)-.25 F -.15(ex)127 -615 S(pected.).15 E(${ntries})102 631.2 Q(The number of deli)127 643.2 Q --.15(ve)-.25 G(ry attempts.).15 E(${opMode})102 659.4 Q -(The current operation mode \(from the)127 671.4 Q F02.5 E F1 -(\215ag\).)2.5 E(${quarantine})102 687.6 Q -(The quarantine reason for the en)127 699.6 Q -.15(ve)-.4 G -(lope, if it is quarantined.).15 E 0 Cg EP +707.4 S(pected.).15 E 0 Cg EP %%Page: 53 49 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-53)195.86 E/F1 10/Times-Roman@0 SF(${queue_interv)102 96 Q(al}) --.25 E .362(The queue run interv)127 108 R .362(al gi)-.25 F -.15(ve) --.25 G 2.862(nb).15 G 2.862(yt)-2.862 G(he)-2.862 E F02.861 E F1 -2.861(\215ag. F)2.861 F .361(or e)-.15 F(xample,)-.15 E F0(\255q30m) -2.861 E F1 -.1(wo)2.861 G .361(uld set).1 F F0(${queue_inter)2.861 E(-) --.37 E -.1(va)127 120 S(l}).1 E F1(to \23100:30:00\232.)2.5 E -(${rcpt_addr})102 136.2 Q 1.271(The address part of the resolv)127 148.2 -R 1.272(ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.772(nf).15 G -1.272(or the)-3.772 F/F2 9/Times-Roman@0 SF 1.272(SMTP RCPT)3.772 F F1 -(command.)3.772 E(De\214ned in the SMTP serv)127 160.2 Q -(er only after a RCPT command.)-.15 E(${rcpt_host})102 176.4 Q .179 -(The host from the resolv)127 188.4 R .178(ed triple of the address gi) +(SMM:08-53)195.86 E/F1 10/Times-Roman@0 SF(${ntries})102 96 Q +(The number of deli)127 108 Q -.15(ve)-.25 G(ry attempts.).15 E +(${opMode})102 124.2 Q(The current operation mode \(from the)127 136.2 Q +F02.5 E F1(\215ag\).)2.5 E(${quarantine})102 152.4 Q +(The quarantine reason for the en)127 164.4 Q -.15(ve)-.4 G +(lope, if it is quarantined.).15 E(${queue_interv)102 180.6 Q(al})-.25 E +.362(The queue run interv)127 192.6 R .362(al gi)-.25 F -.15(ve)-.25 G +2.862(nb).15 G 2.862(yt)-2.862 G(he)-2.862 E F02.861 E F1 2.861 +(\215ag. F)2.861 F .361(or e)-.15 F(xample,)-.15 E F0(\255q30m)2.861 E +F1 -.1(wo)2.861 G .361(uld set).1 F F0(${queue_inter)2.861 E(-)-.37 E +-.1(va)127 204.6 S(l}).1 E F1(to \23100:30:00\232.)2.5 E(${rcpt_addr}) +102 220.8 Q 1.271(The address part of the resolv)127 232.8 R 1.272 +(ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.772(nf).15 G 1.272 +(or the)-3.772 F/F2 9/Times-Roman@0 SF 1.272(SMTP RCPT)3.772 F F1 +(command.)3.772 E(De\214ned in the SMTP serv)127 244.8 Q +(er only after a RCPT command.)-.15 E(${rcpt_host})102 261 Q .179 +(The host from the resolv)127 273 R .178(ed triple of the address gi) -.15 F -.15(ve)-.25 G 2.678(nf).15 G .178(or the)-2.678 F F2 .178 (SMTP RCPT)2.678 F F1 2.678(command. De\214ned)2.678 F(in the SMTP serv) -127 200.4 Q(er only after a RCPT command.)-.15 E(${rcpt_mailer})102 -216.6 Q 2.175(The mailer from the resolv)127 228.6 R 2.175 -(ed triple of the address gi)-.15 F -.15(ve)-.25 G 4.675(nf).15 G 2.175 -(or the)-4.675 F F2 2.176(SMTP RCPT)4.676 F F1(command.)4.676 E -(De\214ned in the SMTP serv)127 240.6 Q(er only after a RCPT command.) --.15 E(${serv)102 256.8 Q(er_addr})-.15 E .515(The address of the serv) -127 268.8 R .514(er of the current outgoing SMTP connection.)-.15 F -.15 -(Fo)5.514 G 3.014(rL).15 G .514(MTP deli)-3.014 F -.15(ve)-.25 G .514 -(ry the).15 F(macro is set to the name of the mailer)127 280.8 Q(.)-.55 -E(${serv)102 297 Q(er_name})-.15 E(The name of the serv)127 309 Q -(er of the current outgoing SMTP or LMTP connection.)-.15 E(${time})102 -325.2 Q .006(The output of the)127 337.2 R/F3 10/Times-Italic@0 SF(time) -2.506 E F1 .007(\(3\) function, i.e., the number of seconds since 0 hou\ -rs, 0 minutes, 0 sec-)B(onds, January 1, 1970, Coordinated Uni)127 349.2 -Q -.15(ve)-.25 G(rsal T).15 E(ime \(UTC\).)-.35 E(${tls_v)102 365.4 Q -(ersion})-.15 E .85(The TLS/SSL v)127 377.4 R .849(ersion used for the \ -connection, e.g., TLSv1.2, TLSv1; de\214ned after ST)-.15 F(AR)-.93 E --.92(T-)-.6 G(TLS has been used.)127 389.4 Q(${total_rate})102 405.6 Q -1.373(The total number of incoming connections o)127 417.6 R -.15(ve) --.15 G 3.873(rt).15 G 1.373(he time interv)-3.873 F 1.374 -(al speci\214ed by Connection-)-.25 F(RateW)127 429.6 Q(indo)-.4 E -(wSize.)-.25 E(${v)102 445.8 Q(erify})-.15 E 1.141(The result of the v) -127 457.8 R 1.141 +127 285 Q(er only after a RCPT command.)-.15 E(${rcpt_mailer})102 301.2 +Q .697(The mailer from the resolv)127 313.2 R .697 +(ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.198(nf).15 G .698 +(or the)-3.198 F F2 .698(SMTP RCPT)3.198 F F1 3.198(command. De-)3.198 F +(\214ned in the SMTP serv)127 325.2 Q(er only after a RCPT command.)-.15 +E(${serv)102 341.4 Q(er_addr})-.15 E .515(The address of the serv)127 +353.4 R .514(er of the current outgoing SMTP connection.)-.15 F -.15(Fo) +5.514 G 3.014(rL).15 G .514(MTP deli)-3.014 F -.15(ve)-.25 G .514 +(ry the).15 F 1.298(macro is set to the name of the mailer)127 365.4 R +6.298(.\()-.55 G 1.298(only if sendmail is compiled with ST)-6.298 F(AR) +-.93 E 1.299(TTLS or)-.6 F(SASL.\))127 377.4 Q(${serv)102 393.6 Q +(er_name})-.15 E .944(The name of the serv)127 405.6 R .943 +(er of the current outgoing SMTP or LMTP connection.)-.15 F .943 +(\(only if send-)5.943 F(mail is compiled with ST)127 417.6 Q(AR)-.93 E +(TTLS or SASL.\))-.6 E(${time})102 433.8 Q .006(The output of the)127 +445.8 R/F3 10/Times-Italic@0 SF(time)2.506 E F1 .007(\(3\) function, i.\ +e., the number of seconds since 0 hours, 0 minutes, 0 sec-)B +(onds, January 1, 1970, Coordinated Uni)127 457.8 Q -.15(ve)-.25 G +(rsal T).15 E(ime \(UTC\).)-.35 E(${tls_v)102 474 Q(ersion})-.15 E .85 +(The TLS/SSL v)127 486 R .849(ersion used for the connection, e.g., TLS\ +v1.2, TLSv1; de\214ned after ST)-.15 F(AR)-.93 E -.92(T-)-.6 G +(TLS has been used.)127 498 Q(${total_rate})102 514.2 Q 1.373 +(The total number of incoming connections o)127 526.2 R -.15(ve)-.15 G +3.873(rt).15 G 1.373(he time interv)-3.873 F 1.374 +(al speci\214ed by Connection-)-.25 F(RateW)127 538.2 Q(indo)-.4 E +(wSize.)-.25 E(${v)102 554.4 Q(erify})-.15 E 1.141(The result of the v) +127 566.4 R 1.141 (eri\214cation of the presented cert; only de\214ned after ST)-.15 F(AR) --.93 E 1.14(TTLS has been)-.6 F(used \(or attempted\).)127 469.8 Q -(Possible v)5 E(alues are:)-.25 E 48.06(OK v)167 486 R -(eri\214cation succeeded.)-.15 E 48.06(NO no)167 498 R(cert presented.) -2.5 E(NO)167 510 Q 44.85(Tn)-.4 G 2.5(oc)-44.85 G(ert requested.)-2.5 E --.74(FA)167 522 S 41.02(IL cert).74 F(presented b)2.5 E -(ut could not be v)-.2 E(eri\214ed,)-.15 E -(e.g., the signing CA is missing.)232 534 Q 34.73(NONE ST)167 546 R(AR) --.93 E(TTLS has not been performed.)-.6 E 29.72(CLEAR ST)167 558 R(AR) --.93 E(TTLS has been disabled internally for a clear te)-.6 E(xt deli) --.15 E -.15(ve)-.25 G(ry attempt.).15 E 35.83(TEMP temporary)167 570 R -(error occurred.)2.5 E(PR)167 582 Q -1.88 -.4(OT O)-.4 H 10.7(COL some) -.4 F(protocol error occurred)2.5 E(at the ESMTP le)232 594 Q -.15(ve) --.25 G 2.5(l\().15 G(not TLS\).)-2.5 E(SOFTW)167 606 Q 9.81(ARE ST)-1.2 -F(AR)-.93 E(TTLS handshak)-.6 E 2.5(ef)-.1 G(ailed,)-2.6 E(which is a f) -232 618 Q(atal error for this session,)-.1 E(the e-mail will be queued.) -232 630 Q .749(There are three types of dates that can be used.)127 -650.4 R(The)5.749 E F0($a)3.249 E F1(and)3.249 E F0($b)3.249 E F1 .749 -(macros are in RFC 822 for)3.249 F(-)-.2 E(mat;)102 662.4 Q F0($a)3.214 -E F1 .714(is the time as e)3.214 F .713 -(xtracted from the \231Date:\232 line of the message \(if there w)-.15 F -.713(as one\), and)-.1 F F0($b)3.213 E F1(is)3.213 E .056 -(the current date and time \(used for postmarks\).)102 674.4 R .057 -(If no \231Date:\232 line is found in the incoming message,)5.056 F F0 -($a)102 686.4 Q F1 .305(is set to the current time also.)2.805 F(The) -5.305 E F0($d)2.805 E F1 .304(macro is equi)2.805 F -.25(va)-.25 G .304 -(lent to the).25 F F0($b)2.804 E F1 .304(macro in UNIX \(ctime\) for) -2.804 F(-)-.2 E(mat.)102 698.4 Q 0 Cg EP +-.93 E 1.14(TTLS has been)-.6 F(used \(or attempted\).)127 578.4 Q +(Possible v)5 E(alues are:)-.25 E 0 Cg EP %%Page: 54 50 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-54 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .238 -(The macros)127 96 R F0($w)2.738 E F1(,)A F0($j)2.738 E F1 2.738(,a)C -(nd)-2.738 E F0($m)2.738 E F1 .238 +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(TR)167 96 +Q 17.9(USTED v)-.4 F(eri\214cation via D)-.15 E(ANE succeeded.)-.4 E +48.06(OK v)167 108 R(eri\214cation succeeded.)-.15 E 48.06(NO no)167 120 +R(cert presented.)2.5 E(NO)167 132 Q 44.85(Tn)-.4 G 2.5(oc)-44.85 G +(ert requested.)-2.5 E -.74(FA)167 144 S 41.02(IL cert).74 F +(presented b)2.5 E(ut could not be v)-.2 E(eri\214ed,)-.15 E +(e.g., the signing CA is missing.)232 156 Q 34.73(NONE ST)167 168 R(AR) +-.93 E(TTLS has not been performed.)-.6 E 29.72(CLEAR ST)167 180 R(AR) +-.93 E(TTLS has been disabled internally for a clear te)-.6 E(xt deli) +-.15 E -.15(ve)-.25 G(ry attempt.).15 E 35.83(TEMP temporary)167 192 R +(error occurred.)2.5 E(PR)167 204 Q -1.88 -.4(OT O)-.4 H 10.7(COL some) +.4 F(protocol error occurred)2.5 E(at the ESMTP le)232 216 Q -.15(ve) +-.25 G 2.5(l\().15 G(not TLS\).)-2.5 E(SOFTW)167 228 Q 9.81(ARE ST)-1.2 +F(AR)-.93 E(TTLS handshak)-.6 E 2.5(ef)-.1 G(ailed,)-2.6 E(which is a f) +232 240 Q(atal error for this session,)-.1 E(the e-mail will be queued.) +232 252 Q .749(There are three types of dates that can be used.)127 +272.4 R(The)5.749 E F0($a)3.249 E F1(and)3.249 E F0($b)3.249 E F1 .749 +(macros are in RFC 822 for)3.249 F(-)-.2 E(mat;)102 284.4 Q F0($a)3.214 +E F1 .714(is the time as e)3.214 F .713 +(xtracted from the \231Date:\232 line of the message \(if there w)-.15 F +.713(as one\), and)-.1 F F0($b)3.213 E F1(is)3.213 E .056 +(the current date and time \(used for postmarks\).)102 296.4 R .057 +(If no \231Date:\232 line is found in the incoming message,)5.056 F F0 +($a)102 308.4 Q F1 .305(is set to the current time also.)2.805 F(The) +5.305 E F0($d)2.805 E F1 .304(macro is equi)2.805 F -.25(va)-.25 G .304 +(lent to the).25 F F0($b)2.804 E F1 .304(macro in UNIX \(ctime\) for) +2.804 F(-)-.2 E(mat.)102 320.4 Q .238(The macros)127 336.6 R F0($w)2.738 +E F1(,)A F0($j)2.738 E F1 2.738(,a)C(nd)-2.738 E F0($m)2.738 E F1 .238 (are set to the identity of this host.)2.738 F/F2 10/Times-Italic@0 SF (Sendmail)5.239 E F1 .239(tries to \214nd the fully)2.739 F .335(quali\ \214ed name of the host if at all possible; it does this by calling)102 -108 R F2 -.1(ge)2.834 G(thostname).1 E F1 .334(\(2\) to get the current) -B .457(hostname and then passing that to)102 120 R F2 -.1(ge)2.957 G -(thostbyname).1 E F1 .457 +348.6 R F2 -.1(ge)2.834 G(thostname).1 E F1 .334 +(\(2\) to get the current)B .457(hostname and then passing that to)102 +360.6 R F2 -.1(ge)2.957 G(thostbyname).1 E F1 .457 (\(3\) which is supposed to return the canonical v)B(er)-.15 E(-)-.2 E -.279(sion of that host name.)102 134 R/F3 7/Times-Roman@0 SF(17)-4 I F1 -.279(Assuming this is successful,)2.779 4 N F0($j)2.778 E F1 .278 +.279(sion of that host name.)102 374.6 R/F3 7/Times-Roman@0 SF(17)-4 I +F1 .279(Assuming this is successful,)2.779 4 N F0($j)2.778 E F1 .278 (is set to the fully quali\214ed name and)2.778 F F0($m)2.778 E F1(is) -2.778 E .706(set to the domain part of the name \(e)102 146 R -.15(ve) +2.778 E .706(set to the domain part of the name \(e)102 386.6 R -.15(ve) -.25 G .706(rything after the \214rst dot\).).15 F(The)5.706 E F0($w) -3.206 E F1 .706(macro is set to the \214rst)3.206 F -.1(wo)102 158 S +3.206 E F1 .706(macro is set to the \214rst)3.206 F -.1(wo)102 398.6 S .359(rd \(e).1 F -.15(ve)-.25 G .358 (rything before the \214rst dot\) if you ha).15 F .658 -.15(ve a l)-.2 H -2.15 -.25(ev e).15 H 2.858(l5o).25 G 2.858(rh)-2.858 G .358 (igher con\214guration \214le; otherwise, it)-2.858 F .404 -(is set to the same v)102 170 R .405(alue as)-.25 F F0($j)2.905 E F1 +(is set to the same v)102 410.6 R .405(alue as)-.25 F F0($j)2.905 E F1 5.405(.I)C 2.905(ft)-5.405 G .405 (he canoni\214cation is not successful, it is imperati)-2.905 F .705 --.15(ve t)-.25 H .405(hat the con\214g).15 F(\214le set)102 184 Q F0($j) -2.5 E F1(to the fully quali\214ed domain name)2.5 E F3(18)-4 I F1(.)4 I -(The)127 200.2 Q F0($f)2.833 E F1 .333(macro is the id of the sender as\ - originally determined; when mailing to a speci\214c host)2.833 F(the) -102 212.2 Q F0($g)3.224 E F1 .724 +-.15(ve t)-.25 H .405(hat the con\214g).15 F(\214le set)102 424.6 Q F0 +($j)2.5 E F1(to the fully quali\214ed domain name)2.5 E F3(18)-4 I F1(.) +4 I(The)127 440.8 Q F0($f)2.833 E F1 .333(macro is the id of the sender\ + as originally determined; when mailing to a speci\214c host)2.833 F +(the)102 452.8 Q F0($g)3.224 E F1 .724 (macro is set to the address of the sender)3.224 F F2 -.37(re)3.225 G .725(lative to the r).37 F(ecipient.)-.37 E F1 -.15(Fo)5.725 G 3.225(re) .15 G .725(xample, if I send to)-3.375 F(\231bollard@matisse.CS.Berk)102 -224.2 Q(ele)-.1 E -.65(y.)-.15 G .425(EDU\232 from the machine \231v).65 +464.8 Q(ele)-.1 E -.65(y.)-.15 G .425(EDU\232 from the machine \231v).65 F(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G .424(EDU\232 the).65 F -F0($f)2.924 E F1(macro)2.924 E(will be \231eric\232 and the)102 236.2 Q +F0($f)2.924 E F1(macro)2.924 E(will be \231eric\232 and the)102 476.8 Q F0($g)2.5 E F1(macro will be \231eric@v)2.5 E(angogh.CS.Berk)-.25 E(ele) --.1 E -.65(y.)-.15 G(EDU.).65 E<9a>-.7 E(The)127 252.4 Q F0($x)2.562 E -F1 .062(macro is set to the full name of the sender)2.562 F 5.062(.T) --.55 G .062(his can be determined in se)-5.062 F -.15(ve)-.25 G .063 -(ral w).15 F 2.563(ays. It)-.1 F .63(can be passed as \215ag to)102 -264.4 R F2(sendmail)3.13 E F1 5.629(.I)C 3.129(tc)-5.629 G .629 +-.1 E -.65(y.)-.15 G(EDU.).65 E<9a>-.7 E(The)127 493 Q F0($x)2.562 E F1 +.062(macro is set to the full name of the sender)2.562 F 5.062(.T)-.55 G +.062(his can be determined in se)-5.062 F -.15(ve)-.25 G .063(ral w).15 +F 2.563(ays. It)-.1 F .63(can be passed as \215ag to)102 505 R F2 +(sendmail)3.13 E F1 5.629(.I)C 3.129(tc)-5.629 G .629 (an be de\214ned in the)-3.129 F/F4 9/Times-Roman@0 SF -.315(NA)3.129 G (ME).315 E F1(en)3.129 E .629(vironment v)-.4 F 3.129(ariable. The)-.25 -F(third)3.129 E .948(choice is the v)102 276.4 R .948 +F(third)3.129 E .948(choice is the v)102 517 R .948 (alue of the \231Full-Name:\232 line in the header if it e)-.25 F .949 (xists, and the fourth choice is the)-.15 F .526 -(comment \214eld of a \231From:\232 line.)102 288.4 R .526 +(comment \214eld of a \231From:\232 line.)102 529 R .526 (If all of these f)5.526 F .526 (ail, and if the message is being originated locally)-.1 F(,)-.65 E -(the full name is look)102 300.4 Q(ed up in the)-.1 E F2(/etc/passwd)2.5 -E F1(\214le.)2.5 E 1.32(When sending, the)127 316.6 R F0($h)3.82 E F1(,) -A F0($u)3.82 E F1 3.82(,a)C(nd)-3.82 E F0($z)3.82 E F1 1.321 -(macros get set to the host, user)3.82 F 3.821(,a)-.4 G 1.321 -(nd home directory \(if)-3.821 F .517(local\) of the recipient.)102 -328.6 R .517(The \214rst tw)5.517 F 3.016(oa)-.1 G .516(re set from the) --3.016 F F0($@)3.016 E F1(and)3.016 E F0($:)3.016 E F1 .516 -(part of the re)3.016 F .516(writing rules, respec-)-.25 F(ti)102 340.6 -Q -.15(ve)-.25 G(ly).15 E(.)-.65 E(The)127 356.8 Q F0($p)3.806 E F1(and) +(the full name is look)102 541 Q(ed up in the)-.1 E F2(/etc/passwd)2.5 E +F1(\214le.)2.5 E .491(When sending, the)127 557.2 R F0($h)2.991 E F1(,)A +F0($u)2.991 E F1 2.991(,a)C(nd)-2.991 E F0($z)2.991 E F1 .491 +(macros get set to the host, user)2.991 F 2.991(,a)-.4 G .491 +(nd home directory \(if lo-)-2.991 F .926(cal\) of the recipient.)102 +569.2 R .926(The \214rst tw)5.926 F 3.426(oa)-.1 G .926(re set from the) +-3.426 F F0($@)3.426 E F1(and)3.426 E F0($:)3.426 E F1 .925 +(part of the re)3.426 F .925(writing rules, respec-)-.25 F(ti)102 581.2 +Q -.15(ve)-.25 G(ly).15 E(.)-.65 E(The)127 597.4 Q F0($p)3.806 E F1(and) 3.806 E F0($t)3.806 E F1 1.306(macros are used to create unique strings\ - \(e.g., for the \231Message-Id:\232 \214eld\).)3.806 F(The)102 368.8 Q + \(e.g., for the \231Message-Id:\232 \214eld\).)3.806 F(The)102 609.4 Q F0($i)3.252 E F1 .751(macro is set to the queue id on this host; if put\ into the timestamp line it can be e)3.252 F(xtremely)-.15 E .164 -(useful for tracking messages.)102 380.8 R(The)5.164 E F0($v)2.664 E F1 +(useful for tracking messages.)102 621.4 R(The)5.164 E F0($v)2.664 E F1 .164(macro is set to be the v)2.664 F .165(ersion number of)-.15 F F2 (sendmail)2.665 E F1 2.665(;t)C .165(his is nor)-2.665 F(-)-.2 E -(mally put in timestamps and has been pro)102 392.8 Q -.15(ve)-.15 G 2.5 -(ne).15 G(xtremely useful for deb)-2.65 E(ugging.)-.2 E(The)127 409 Q F0 -($c)3.548 E F1 1.048(\214eld is set to the \231hop count,)3.548 F 3.548 -<9a69>-.7 G 1.048(.e., the number of times this message has been pro-) --3.548 F 2.856(cessed. This)102 421 R .356(can be determined by the) -2.856 F F02.856 E F1 .357 -(\215ag on the command line or by counting the timestamps)2.856 F -(in the message.)102 433 Q(The)127 449.2 Q F0($r)2.833 E F1(and)2.833 E -F0($s)2.833 E F1 .333 -(\214elds are set to the protocol used to communicate with)2.833 F F2 -(sendmail)2.833 E F1 .333(and the send-)2.833 F .194(ing hostname.)102 -461.2 R(The)5.194 E 2.694(yc)-.15 G .194(an be set together using the) --2.694 F F02.694 E F1 .194 -(command line \215ag or separately using the)2.694 F F02.695 E F1 -(or)102 473.2 Q F0(\255oM)2.5 E F1(\215ags.)2.5 E(The)127 489.4 Q F0($_) -2.967 E F1 .467(is set to a v)2.967 F .467(alidated sender host name.) --.25 F .466(If the sender is running an RFC 1413 compli-)5.467 F .384 -(ant IDENT serv)102 501.4 R .384(er and the recei)-.15 F -.15(ve)-.25 G -2.884(rh).15 G .384 -(as the IDENT protocol turned on, it will include the user name)-2.884 F -(on that host.)102 513.4 Q(The)127 529.6 Q F0(${client_name})5.98 E F1 -(,)A F0(${client_addr})5.98 E F1 5.98(,a)C(nd)-5.98 E F0(${client_port}) -5.98 E F1 3.48(macros are set to the name,)5.98 F .786 -(address, and port number of the SMTP client who is in)102 541.6 R -.2 -(vo)-.4 G(king).2 E F2(sendmail)3.286 E F1 .786(as a serv)3.286 F(er) --.15 E 5.786(.T)-.55 G .786(hese can be)-5.786 F(used in the)102 553.6 Q -F2 -.15(ch)2.5 G(ec).15 E(k_*)-.2 E F1(rulesets \(using the)2.5 E F0($&) -2.5 E F1(deferred e)2.5 E -.25(va)-.25 G(luation form, of course!\).).25 -E F0 2.5(5.3. C)87 577.6 R(and F \212 De\214ne Classes)2.5 E F1 .66(Cla\ -sses of phrases may be de\214ned to match on the left hand side of re) -127 593.8 R .659(writing rules, where a)-.25 F .464(\231phrase\232 is a\ - sequence of characters that does not contain space characters.)102 -605.8 R -.15(Fo)5.465 G 2.965(re).15 G .465(xample a class of)-3.115 F -.654(all local names for this site might be created so that attempts to\ - send to oneself can be eliminated.)102 617.8 R .041(These can either b\ -e de\214ned directly in the con\214guration \214le or read in from anot\ -her \214le.)102 629.8 R .041(Classes are)5.041 F .649 -(named as a single letter or a w)102 641.8 R .649(ord in {braces}.)-.1 F -.649(Class names be)5.649 F .649(ginning with lo)-.15 F .648 -(wer case letters and)-.25 F .638(special characters are reserv)102 -653.8 R .638(ed for system use.)-.15 F .639 -(Classes de\214ned in con\214g \214les may be gi)5.639 F -.15(ve)-.25 G -3.139(nn).15 G(ames)-3.139 E 1.05 -(from the set of upper case letters for short names or be)102 665.8 R -1.05(ginning with an upper case letter for long)-.15 F .32 LW 76 675.4 -72 675.4 DL 80 675.4 76 675.4 DL 84 675.4 80 675.4 DL 88 675.4 84 675.4 -DL 92 675.4 88 675.4 DL 96 675.4 92 675.4 DL 100 675.4 96 675.4 DL 104 -675.4 100 675.4 DL 108 675.4 104 675.4 DL 112 675.4 108 675.4 DL 116 -675.4 112 675.4 DL 120 675.4 116 675.4 DL 124 675.4 120 675.4 DL 128 -675.4 124 675.4 DL 132 675.4 128 675.4 DL 136 675.4 132 675.4 DL 140 -675.4 136 675.4 DL 144 675.4 140 675.4 DL 148 675.4 144 675.4 DL 152 -675.4 148 675.4 DL 156 675.4 152 675.4 DL 160 675.4 156 675.4 DL 164 -675.4 160 675.4 DL 168 675.4 164 675.4 DL 172 675.4 168 675.4 DL 176 -675.4 172 675.4 DL 180 675.4 176 675.4 DL 184 675.4 180 675.4 DL 188 -675.4 184 675.4 DL 192 675.4 188 675.4 DL 196 675.4 192 675.4 DL 200 -675.4 196 675.4 DL 204 675.4 200 675.4 DL 208 675.4 204 675.4 DL 212 -675.4 208 675.4 DL 216 675.4 212 675.4 DL/F5 5/Times-Roman@0 SF(17)93.6 -685.8 Q/F6 8/Times-Roman@0 SF -.12(Fo)3.2 K 2(re).12 G +(mally put in timestamps and has been pro)102 633.4 Q -.15(ve)-.15 G 2.5 +(ne).15 G(xtremely useful for deb)-2.65 E(ugging.)-.2 E(The)127 649.6 Q +F0($c)3.548 E F1 1.048(\214eld is set to the \231hop count,)3.548 F +3.548<9a69>-.7 G 1.048 +(.e., the number of times this message has been pro-)-3.548 F 2.856 +(cessed. This)102 661.6 R .356(can be determined by the)2.856 F F0 +2.856 E F1 .357 +(\215ag on the command line or by counting the timestamps)2.856 F .32 LW +76 671.2 72 671.2 DL 80 671.2 76 671.2 DL 84 671.2 80 671.2 DL 88 671.2 +84 671.2 DL 92 671.2 88 671.2 DL 96 671.2 92 671.2 DL 100 671.2 96 671.2 +DL 104 671.2 100 671.2 DL 108 671.2 104 671.2 DL 112 671.2 108 671.2 DL +116 671.2 112 671.2 DL 120 671.2 116 671.2 DL 124 671.2 120 671.2 DL 128 +671.2 124 671.2 DL 132 671.2 128 671.2 DL 136 671.2 132 671.2 DL 140 +671.2 136 671.2 DL 144 671.2 140 671.2 DL 148 671.2 144 671.2 DL 152 +671.2 148 671.2 DL 156 671.2 152 671.2 DL 160 671.2 156 671.2 DL 164 +671.2 160 671.2 DL 168 671.2 164 671.2 DL 172 671.2 168 671.2 DL 176 +671.2 172 671.2 DL 180 671.2 176 671.2 DL 184 671.2 180 671.2 DL 188 +671.2 184 671.2 DL 192 671.2 188 671.2 DL 196 671.2 192 671.2 DL 200 +671.2 196 671.2 DL 204 671.2 200 671.2 DL 208 671.2 204 671.2 DL 212 +671.2 208 671.2 DL 216 671.2 212 671.2 DL/F5 5/Times-Roman@0 SF(17)93.6 +681.6 Q/F6 8/Times-Roman@0 SF -.12(Fo)3.2 K 2(re).12 G (xample, on some systems)-2.12 E/F7 8/Times-Italic@0 SF -.08(ge)2 G (thostname).08 E F6(might return \231foo\232 which w)2 E (ould be mapped to \231foo.bar)-.08 E(.com\232 by)-.44 E F7 -.08(ge)2 G -(thostbyname).08 E F6(.)A F5(18)93.6 699.4 Q F6(Older v)3.2 I +(thostbyname).08 E F6(.)A F5(18)93.6 695.2 Q F6(Older v)3.2 I (ersions of sendmail didn')-.12 E 2(tp)-.144 G(re-de\214ne)-2 E/F8 8 /Times-Bold@0 SF($j)2 E F6(at all, so up until 8.6, con\214g \214les)2 E F7(always)2 E F6(had to de\214ne)2 E F8($j)2 E F6(.)A 0 Cg EP @@ -4706,1137 +4763,1176 @@ F7(always)2 E F6(had to de\214ne)2 E F8($j)2 E F6(.)A 0 Cg EP BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-55)195.86 E/F1 10/Times-Roman@0 SF(names.)102 96 Q -(The syntax is:)127 112.2 Q F0(C)142 128.4 Q/F2 10/Times-Italic@0 SF -1.666(cp)C(hr)-1.666 E(ase1 phr)-.15 E(ase2...)-.15 E F0(F)142 140.4 Q -F2 1.666<638c>C(le)-1.666 E F0(F)142 152.4 Q F2 1.666(c|)C(pr)-1.666 E --.1(og)-.45 G -.15(ra).1 G(m).15 E F0(F)142 164.4 Q F2 1.666(c[)C(mapk) --1.666 E -.3(ey)-.1 G(]@mapclass:mapspec).3 E F1 .035 -(The \214rst form de\214nes the class)102 180.6 R F2(c)2.535 E F1 .035 -(to match an)2.535 F 2.535(yo)-.15 G 2.535(ft)-2.535 G .035(he named w) --2.535 F 2.535(ords. If)-.1 F F2(phr)2.536 E(ase1)-.15 E F1(or)2.536 E -F2(phr)2.536 E(ase2)-.15 E F1 .036(is another)2.536 F .747(class, e.g.,) -102 192.6 R F2($=S)3.247 E F1 3.247(,t)C .747(he contents of class) --3.247 F F2(S)3.246 E F1 .746(are added to class)3.246 F F2(c)3.246 E F1 -5.746(.I)C 3.246(ti)-5.746 G 3.246(sp)-3.246 G .746 -(ermissible to split them among)-3.246 F(multiple lines; for e)102 204.6 -Q(xample, the tw)-.15 E 2.5(of)-.1 G(orms:)-2.5 E(CHmonet ucbmonet)142 -220.8 Q(and)102 237 Q(CHmonet)142 253.2 Q(CHucbmonet)142 265.2 Q 1.015 -(are equi)102 281.4 R -.25(va)-.25 G 3.515(lent. The).25 F -.74(``)3.516 -G(F').74 E 3.516('f)-.74 G 1.016(orms read the elements of the class) --3.516 F F2(c)3.516 E F1 1.016(from the named)3.516 F F2(\214le)3.516 E -F1(,)A F2(pr)3.516 E -.1(og)-.45 G -.15(ra).1 G(m).15 E F1 3.516(,o)C(r) --3.516 E F2 .162(map speci\214cation)102 293.4 R F1 5.162(.E)C .161 +(SMM:08-55)195.86 E/F1 10/Times-Roman@0 SF(in the message.)102 96 Q(The) +127 112.2 Q F0($r)2.833 E F1(and)2.833 E F0($s)2.833 E F1 .333 +(\214elds are set to the protocol used to communicate with)2.833 F/F2 10 +/Times-Italic@0 SF(sendmail)2.833 E F1 .333(and the send-)2.833 F .194 +(ing hostname.)102 124.2 R(The)5.194 E 2.694(yc)-.15 G .194 +(an be set together using the)-2.694 F F02.694 E F1 .194 +(command line \215ag or separately using the)2.694 F F02.695 E F1 +(or)102 136.2 Q F0(\255oM)2.5 E F1(\215ags.)2.5 E(The)127 152.4 Q F0($_) +2.967 E F1 .467(is set to a v)2.967 F .467(alidated sender host name.) +-.25 F .466(If the sender is running an RFC 1413 compli-)5.467 F .384 +(ant IDENT serv)102 164.4 R .384(er and the recei)-.15 F -.15(ve)-.25 G +2.884(rh).15 G .384 +(as the IDENT protocol turned on, it will include the user name)-2.884 F +(on that host.)102 176.4 Q(The)127 192.6 Q F0(${client_name})4.276 E F1 +(,)A F0(${client_addr})4.276 E F1 4.276(,a)C(nd)-4.276 E F0 +(${client_port})4.276 E F1 1.775(macros are set to the name, ad-)4.276 F +.109(dress, and port number of the SMTP client who is in)102 204.6 R -.2 +(vo)-.4 G(king).2 E F2(sendmail)2.61 E F1 .11(as a serv)2.61 F(er)-.15 E +5.11(.T)-.55 G .11(hese can be used)-5.11 F(in the)102 216.6 Q F2 -.15 +(ch)2.5 G(ec).15 E(k_*)-.2 E F1(rulesets \(using the)2.5 E F0($&)2.5 E +F1(deferred e)2.5 E -.25(va)-.25 G(luation form, of course!\).).25 E F0 +2.5(5.3. C)87 240.6 R(and F \212 De\214ne Classes)2.5 E F1 .66(Classes \ +of phrases may be de\214ned to match on the left hand side of re)127 +256.8 R .659(writing rules, where a)-.25 F .464(\231phrase\232 is a seq\ +uence of characters that does not contain space characters.)102 268.8 R +-.15(Fo)5.465 G 2.965(re).15 G .465(xample a class of)-3.115 F .654(all\ + local names for this site might be created so that attempts to send to\ + oneself can be eliminated.)102 280.8 R .041(These can either be de\214\ +ned directly in the con\214guration \214le or read in from another \214\ +le.)102 292.8 R .041(Classes are)5.041 F .649 +(named as a single letter or a w)102 304.8 R .649(ord in {braces}.)-.1 F +.649(Class names be)5.649 F .649(ginning with lo)-.15 F .648 +(wer case letters and)-.25 F .638(special characters are reserv)102 +316.8 R .638(ed for system use.)-.15 F .639 +(Classes de\214ned in con\214g \214les may be gi)5.639 F -.15(ve)-.25 G +3.139(nn).15 G(ames)-3.139 E 1.05 +(from the set of upper case letters for short names or be)102 328.8 R +1.05(ginning with an upper case letter for long)-.15 F(names.)102 340.8 +Q(The syntax is:)127 357 Q F0(C)142 373.2 Q F2 1.666(cp)C(hr)-1.666 E +(ase1 phr)-.15 E(ase2...)-.15 E F0(F)142 385.2 Q F2 1.666<638c>C(le) +-1.666 E F0(F)142 397.2 Q F2 1.666(c|)C(pr)-1.666 E -.1(og)-.45 G -.15 +(ra).1 G(m).15 E F0(F)142 409.2 Q F2 1.666(c[)C(mapk)-1.666 E -.3(ey)-.1 +G(]@mapclass:mapspec).3 E F1 .035(The \214rst form de\214nes the class) +102 425.4 R F2(c)2.535 E F1 .035(to match an)2.535 F 2.535(yo)-.15 G +2.535(ft)-2.535 G .035(he named w)-2.535 F 2.535(ords. If)-.1 F F2(phr) +2.536 E(ase1)-.15 E F1(or)2.536 E F2(phr)2.536 E(ase2)-.15 E F1 .036 +(is another)2.536 F .747(class, e.g.,)102 437.4 R F2($=S)3.247 E F1 +3.247(,t)C .747(he contents of class)-3.247 F F2(S)3.246 E F1 .746 +(are added to class)3.246 F F2(c)3.246 E F1 5.746(.I)C 3.246(ti)-5.746 G +3.246(sp)-3.246 G .746(ermissible to split them among)-3.246 F +(multiple lines; for e)102 449.4 Q(xample, the tw)-.15 E 2.5(of)-.1 G +(orms:)-2.5 E(CHmonet ucbmonet)142 465.6 Q(and)102 481.8 Q(CHmonet)142 +498 Q(CHucbmonet)142 510 Q 1.015(are equi)102 526.2 R -.25(va)-.25 G +3.515(lent. The).25 F -.74(``)3.516 G(F').74 E 3.516('f)-.74 G 1.016 +(orms read the elements of the class)-3.516 F F2(c)3.516 E F1 1.016 +(from the named)3.516 F F2(\214le)3.516 E F1(,)A F2(pr)3.516 E -.1(og) +-.45 G -.15(ra).1 G(m).15 E F1 3.516(,o)C(r)-3.516 E F2 .162 +(map speci\214cation)102 538.2 R F1 5.162(.E)C .161 (ach element should be listed on a separate line.)-5.162 F 1.761 -.8 -(To s)5.161 H .161(pecify an optional \214le, use).8 F -.74(``)102 305.4 +(To s)5.161 H .161(pecify an optional \214le, use).8 F -.74(``)102 550.2 S(\255o').74 E 2.5('b)-.74 G (etween the class name and the \214le name, e.g.,)-2.5 E -(Fc \255o /path/to/\214le)142 321.6 Q .396(If the \214le can')102 337.8 +(Fc \255o /path/to/\214le)142 566.4 Q .396(If the \214le can')102 582.6 R 2.896(tb)-.18 G 2.896(eu)-2.896 G(sed,)-2.896 E F2(sendmail)2.896 E F1 .396(will not complain b)2.896 F .396(ut silently ignore it.)-.2 F .396 -(The map form should be)5.396 F .364(an optional map k)102 349.8 R -.15 +(The map form should be)5.396 F .364(an optional map k)102 594.6 R -.15 (ey)-.1 G 2.864(,a)-.5 G 2.864(na)-2.864 G 2.864(ts)-2.864 G .363 (ign, and a map class follo)-2.864 F .363 (wed by the speci\214cation for that map.)-.25 F(Exam-)5.363 E -(ples include:)102 361.8 Q(F{V)142 378 Q(irtHosts}@ldap:\255k \(&\(obje\ -ctClass=virtHosts\)\(host=*\)\) \255v host)-.6 E -(F{MyClass}foo@hash:/etc/mail/classes)142 390 Q .95 -(will \214ll the class)102 406.2 R F0($={V)3.45 E(irtHosts})-.37 E F1 -.951(from an LD)3.45 F .951(AP map lookup and)-.4 F F0($={MyClass})3.451 -E F1 .951(from a hash data-)3.451 F .017(base map lookup of the)102 -418.2 R F0 -.25(fo)2.517 G(o).25 E F1 5.017(.T)C .017(here is also a b) --5.017 F .016(uilt-in schema that can be accessed by only specifying:) --.2 F(F{)142 434.4 Q F2(ClassName)A F1(}@LD)A(AP)-.4 E -(This will tell sendmail to use the def)102 450.6 Q(ault schema:)-.1 E -(\255k \(&\(objectClass=sendmailMT)142 466.8 Q -.4(AC)-.93 G(lass\)).4 E -(\(sendmailMT)154.5 478.8 Q -.4(AC)-.93 G(lassName=).4 E F2(ClassName)A -F1(\))A(\(|\(sendmailMT)154.5 490.8 Q -.4(AC)-.93 G(luster=${sendmailMT) -.4 E -.4(AC)-.93 G(luster}\)).4 E(\(sendmailMT)159.5 502.8 Q -(AHost=$j\)\)\))-.93 E(\255v sendmailMT)142 514.8 Q -.4(AC)-.93 G(lassV) -.4 E(alue)-1.11 E -(Note that the lookup is only done when sendmail is initially started.) -102 531 Q 1.339(Elements of classes can be accessed in rules using)127 -547.2 R F0($=)3.839 E F1(or)3.839 E F0($~)3.839 E F1 6.339(.T)C(he) --6.339 E F0($~)3.839 E F1 1.339(\(match entries not in)3.839 F -(class\) only matches a single w)102 559.2 Q(ord; multi-w)-.1 E -(ord entries in the class are ignored in this conte)-.1 E(xt.)-.15 E -(Some classes ha)127 575.4 Q .3 -.15(ve i)-.2 H(nternal meaning to).15 E -F2(sendmail)2.5 E F1(:)A 18.42($=e contains)102 591.6 R .562 -(the Content-T)3.062 F(ransfer)-.35 E .562(-Encodings that can be 8)-.2 -F/F3 10/Symbol SFA F1 3.062(7b)C .562(it encoded.)-3.062 F .561 -(It is prede\214ned to)5.561 F -(contain \2317bit\232, \2318bit\232, and \231binary\232.)138 603.6 Q -17.86($=k set)102 619.8 R(to be the same as)2.5 E F0($k)2.5 E F1 2.5(,t) -C(hat is, the UUCP node name.)-2.5 E 15.08($=m set)102 636 R -(to the set of domains by which this host is kno)2.5 E -(wn, initially just)-.25 E F0($m)2.5 E F1(.)A 17.86($=n can)102 652.2 R -.58(be set to the set of MIME body types that can ne)3.08 F -.15(ve)-.25 -G 3.081(rb).15 G 3.081(ee)-3.081 G .581(ight to se)-3.081 F -.15(ve)-.25 -G 3.081(nb).15 G .581(it encoded.)-3.081 F(It)5.581 E(def)138 664.2 Q -1.81(aults to \231multipart/signed\232.)-.1 F 1.81 -(Message types \231message/*\232 and \231multipart/*\232 are ne)6.81 F --.15(ve)-.25 G(r).15 E 1.853(encoded directly)138 676.2 R 6.853(.M)-.65 -G 1.853(ultipart messages are al)-6.853 F -.1(wa)-.1 G 1.853 -(ys handled recursi).1 F -.15(ve)-.25 G(ly).15 E 6.853(.T)-.65 G 1.853 -(he handling of)-6.853 F(message/* messages are controlled by class)138 -688.2 Q F0($=s)2.5 E F1(.)A 17.86($=q A)102 704.4 R .712 -(set of Content-T)3.212 F .712(ypes that will ne)-.8 F -.15(ve)-.25 G -3.212(rb).15 G 3.212(ee)-3.212 G .712(ncoded as base64 \(if the)-3.212 F -3.212(yh)-.15 G -2.25 -.2(av e)-3.212 H .711(to be encoded,)3.412 F(the) -138 716.4 Q 3.357(yw)-.15 G .858(ill be encoded as quoted-printable\).) --3.357 F .858(It can ha)5.858 F 1.158 -.15(ve p)-.2 H .858 -(rimary types \(e.g., \231te).15 F .858(xt\232\) or full)-.15 F 0 Cg EP +(ples include:)102 606.6 Q(F{V)142 622.8 Q(irtHosts}@ldap:\255k \(&\(ob\ +jectClass=virtHosts\)\(host=*\)\) \255v host)-.6 E +(F{MyClass}foo@hash:/etc/mail/classes)142 634.8 Q .95 +(will \214ll the class)102 651 R F0($={V)3.45 E(irtHosts})-.37 E F1 .951 +(from an LD)3.45 F .951(AP map lookup and)-.4 F F0($={MyClass})3.451 E +F1 .951(from a hash data-)3.451 F(base map lookup of the)102 663 Q F0 +-.25(fo)2.5 G(o).25 E F1 5(.T)C(here is also a b)-5 E +(uilt-in schema that can be accessed by only specifying:)-.2 E(F{)142 +679.2 Q F2(ClassName)A F1(}@LD)A(AP)-.4 E +(This will tell sendmail to use the def)102 695.4 Q(ault schema:)-.1 E 0 +Cg EP %%Page: 56 52 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-56 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(types \(such as \231te)138 96 Q(xt/plain\232\).)-.15 E 18.97 -($=s contains)102 112.2 R .648 +(\255k \(&\(objectClass=sendmailMT)142 96 Q -.4(AC)-.93 G(lass\)).4 E +(\(sendmailMT)154.5 108 Q -.4(AC)-.93 G(lassName=).4 E/F2 10 +/Times-Italic@0 SF(ClassName)A F1(\))A(\(|\(sendmailMT)154.5 120 Q -.4 +(AC)-.93 G(luster=${sendmailMT).4 E -.4(AC)-.93 G(luster}\)).4 E +(\(sendmailMT)159.5 132 Q(AHost=$j\)\)\))-.93 E(\255v sendmailMT)142 144 +Q -.4(AC)-.93 G(lassV).4 E(alue)-1.11 E +(Note that the lookup is only done when sendmail is initially started.) +102 160.2 Q 1.339(Elements of classes can be accessed in rules using)127 +176.4 R F0($=)3.839 E F1(or)3.839 E F0($~)3.839 E F1 6.339(.T)C(he) +-6.339 E F0($~)3.839 E F1 1.338(\(match entries not in)3.839 F +(class\) only matches a single w)102 188.4 Q(ord; multi-w)-.1 E +(ord entries in the class are ignored in this conte)-.1 E(xt.)-.15 E +(Some classes ha)127 204.6 Q .3 -.15(ve i)-.2 H(nternal meaning to).15 E +F2(sendmail)2.5 E F1(:)A 18.42($=e contains)102 220.8 R .561 +(the Content-T)3.061 F(ransfer)-.35 E .561(-Encodings that can be 8)-.2 +F/F3 10/Symbol SFA F1 3.062(7b)C .562(it encoded.)-3.062 F .562 +(It is prede\214ned to)5.562 F +(contain \2317bit\232, \2318bit\232, and \231binary\232.)138 232.8 Q +17.86($=k set)102 249 R(to be the same as)2.5 E F0($k)2.5 E F1 2.5(,t)C +(hat is, the UUCP node name.)-2.5 E 15.08($=m set)102 265.2 R +(to the set of domains by which this host is kno)2.5 E +(wn, initially just)-.25 E F0($m)2.5 E F1(.)A 17.86($=n can)102 281.4 R +.581(be set to the set of MIME body types that can ne)3.081 F -.15(ve) +-.25 G 3.08(rb).15 G 3.08(ee)-3.08 G .58(ight to se)-3.08 F -.15(ve)-.25 +G 3.08(nb).15 G .58(it encoded.)-3.08 F(It)5.58 E(def)138 293.4 Q .102 +(aults to \231multipart/signed\232.)-.1 F .102 +(Message types \231message/*\232 and \231multipart/*\232 are ne)5.102 F +-.15(ve)-.25 G 2.602(re).15 G(n-)-2.602 E .549(coded directly)138 305.4 +R 5.549(.M)-.65 G .548(ultipart messages are al)-5.549 F -.1(wa)-.1 G +.548(ys handled recursi).1 F -.15(ve)-.25 G(ly).15 E 5.548(.T)-.65 G +.548(he handling of mes-)-5.548 F +(sage/* messages are controlled by class)138 317.4 Q F0($=s)2.5 E F1(.)A +17.86($=q A)102 333.6 R .711(set of Content-T)3.211 F .712 +(ypes that will ne)-.8 F -.15(ve)-.25 G 3.212(rb).15 G 3.212(ee)-3.212 G +.712(ncoded as base64 \(if the)-3.212 F 3.212(yh)-.15 G -2.25 -.2(av e) +-3.212 H .712(to be encoded,)3.412 F(the)138 345.6 Q 3.358(yw)-.15 G +.858(ill be encoded as quoted-printable\).)-3.358 F .858(It can ha)5.858 +F 1.158 -.15(ve p)-.2 H .858(rimary types \(e.g., \231te).15 F .857 +(xt\232\) or full)-.15 F(types \(such as \231te)138 357.6 Q +(xt/plain\232\).)-.15 E 18.97($=s contains)102 373.8 R .648 (the set of subtypes of message that can be treated recursi)3.148 F -.15 (ve)-.25 G(ly).15 E 5.648(.B)-.65 G 3.148(yd)-5.648 G(ef)-3.148 E .648 -(ault it con-)-.1 F .969(tains only \231rfc822\232.)138 124.2 R .969 -(Other \231message/*\232 types cannot be 8)5.969 F/F2 10/Symbol SFA -F1 3.469(7b)C .969(it encoded.)-3.469 F .97(If a message)5.97 F 1.045 -(containing eight bit data is sent to a se)138 136.2 R -.15(ve)-.25 G +(ault it con-)-.1 F .97(tains only \231rfc822\232.)138 385.8 R .969 +(Other \231message/*\232 types cannot be 8)5.97 F F3A F1 3.469(7b)C +.969(it encoded.)-3.469 F .969(If a message)5.969 F 1.045 +(containing eight bit data is sent to a se)138 397.8 R -.15(ve)-.25 G 3.545(nb).15 G 1.045(it host, and that message cannot be encoded)-3.545 -F(into se)138 148.2 Q -.15(ve)-.25 G 2.5(nb).15 G -(its, it will be stripped to 7 bits.)-2.5 E 20.08($=t set)102 164.4 R -.372(to the set of trusted users by the)2.872 F F0(T)2.872 E F1 .372 -(con\214guration line.)2.872 F .372(If you w)5.372 F .373 -(ant to read trusted users)-.1 F(from a \214le, use)138 176.4 Q F0(Ft) -2.5 E/F3 10/Times-Italic@0 SF(/\214le/name)A F1(.)A 15.64($=w set)102 -192.6 R .513(to be the set of all names this host is kno)3.013 F .513 -(wn by)-.25 F 5.513(.T)-.65 G .513(his can be used to match local host-) --5.513 F(names.)138 204.6 Q($={persistentMacros})102 220.8 Q 1.712 -(set to the macros that should be sa)138 232.8 R -.15(ve)-.2 G 4.212(da) +F(into se)138 409.8 Q -.15(ve)-.25 G 2.5(nb).15 G +(its, it will be stripped to 7 bits.)-2.5 E 20.08($=t set)102 426 R .372 +(to the set of trusted users by the)2.873 F F0(T)2.872 E F1 .372 +(con\214guration line.)2.872 F .372(If you w)5.372 F .372 +(ant to read trusted users)-.1 F(from a \214le, use)138 438 Q F0(Ft)2.5 +E F2(/\214le/name)A F1(.)A 15.64($=w set)102 454.2 R .513 +(to be the set of all names this host is kno)3.013 F .513(wn by)-.25 F +5.513(.T)-.65 G .513(his can be used to match local host-)-5.513 F +(names.)138 466.2 Q($={persistentMacros})102 482.4 Q 1.712 +(set to the macros that should be sa)138 494.4 R -.15(ve)-.2 G 4.212(da) .15 G 1.712(cross queue runs.)-4.212 F 1.712(Care should be tak)6.712 F -1.712(en when)-.1 F(adding macro names to this class.)138 244.8 Q F3 -(Sendmail)127 261 Q F1 .183(can be compiled to allo)2.683 F 2.683(wa) --.25 G F3(scanf)-.001 E F1 .182(\(3\) string on the)B F0(F)2.682 E F1 -2.682(line. This)2.682 F .182(lets you do simplistic)2.682 F .554 -(parsing of te)102 273 R .554(xt \214les.)-.15 F -.15(Fo)5.554 G 3.054 -(re).15 G .554(xample, to read all the user names in your system)-3.204 -F F3(/etc/passwd)3.055 E F1 .555(\214le into a)3.055 F(class, use)102 -285 Q(FL/etc/passwd %[^:])142 301.2 Q(which reads e)102 317.4 Q -.15(ve) --.25 G(ry line up to the \214rst colon.).15 E F0 2.5(5.4. M)87 341.4 R -2.5<8a44>2.5 G(e\214ne Mailer)-2.5 E F1(Programs and interf)127 357.6 Q +1.712(en when)-.1 F(adding macro names to this class.)138 506.4 Q F2 +(Sendmail)127 522.6 Q F1 .182(can be compiled to allo)2.682 F 2.682(wa) +-.25 G F2(scanf)A F1 .182(\(3\) string on the)B F0(F)2.682 E F1 2.683 +(line. This)2.683 F .183(lets you do simplistic)2.683 F .555 +(parsing of te)102 534.6 R .555(xt \214les.)-.15 F -.15(Fo)5.555 G 3.055 +(re).15 G .554(xample, to read all the user names in your system)-3.205 +F F2(/etc/passwd)3.054 E F1 .554(\214le into a)3.054 F(class, use)102 +546.6 Q(FL/etc/passwd %[^:])142 562.8 Q(which reads e)102 579 Q -.15(ve) +-.25 G(ry line up to the \214rst colon.).15 E F0 2.5(5.4. M)87 603 R 2.5 +<8a44>2.5 G(e\214ne Mailer)-2.5 E F1(Programs and interf)127 619.2 Q (aces to mailers are de\214ned in this line.)-.1 E(The format is:)5 E F0 -(M)142 373.8 Q F3(name)A F1 2.5(,{)C F3(\214eld)-2.5 E F1(=)A F3(value)A -F1(}*)1.666 E(where)102 390 Q F3(name)4.244 E F1 1.744(is the name of t\ -he mailer \(used internally only\) and the \231\214eld=name\232 pairs d\ -e\214ne)4.244 F(attrib)102 402 Q(utes of the mailer)-.2 E 5(.F)-.55 G -(ields are:)-5 E -.15(Pa)142 418.2 S 51.87(th The).15 F -(pathname of the mailer)2.5 E 47.83(Flags Special)142 430.2 R -(\215ags for this mailer)2.5 E 41.73(Sender Re)142 442.2 R -(writing set\(s\) for sender addresses)-.25 E 31.17(Recipient Re)142 -454.2 R(writing set\(s\) for recipient addresses)-.25 E 30.62 -(recipients Maximum)142 466.2 R(number of recipients per connection)2.5 -E(Ar)142 478.2 Q 49.13(gv An)-.18 F(ar)2.5 E(gument v)-.18 E -(ector to pass to this mailer)-.15 E 55.61(Eol The)142 490.2 R -(end-of-line string for this mailer)2.5 E 35.62(Maxsize The)142 502.2 R -(maximum message length to this mailer)2.5 E 14.51(maxmessages The)142 -514.2 R(maximum message deli)2.5 E -.15(ve)-.25 G(ries per connection) -.15 E 32.27(Linelimit The)142 526.2 R -(maximum line length in the message body)2.5 E 31.18(Directory The)142 -538.2 R -.1(wo)2.5 G(rking directory for the mailer).1 E 42.84 -(Userid The)142 550.2 R(def)2.5 E(ault user and group id to run as)-.1 E -50.62(Nice The)142 562.2 R(nice\(2\) increment for the mailer)2.5 E -38.95(Charset The)142 574.2 R(def)2.5 E -(ault character set for 8-bit characters)-.1 E -.8(Ty)142 586.2 S 49.75 -(pe T).8 F(ype information for DSN diagnostics)-.8 E -.8(Wa)142 598.2 S -50.86(it The).8 F(maximum time to w)2.5 E(ait for the mailer)-.1 E -(Queue)142 610.2 Q 20.22(group The)-.15 F(def)2.5 E -(ault queue group for the mailer)-.1 E 69.22(/T)142 622.2 S -(he root directory for the mailer)-69.22 E -(Only the \214rst character of the \214eld name is check)102 638.4 Q -(ed \(it')-.1 E 2.5(sc)-.55 G(ase-sensiti)-2.5 E -.15(ve)-.25 G(\).).15 -E .396(The follo)127 654.6 R .396 -(wing \215ags may be set in the mailer description.)-.25 F(An)5.396 E -2.896(yo)-.15 G .397(ther \215ags may be used freely)-2.896 F .075(to c\ -onditionally assign headers to messages destined for particular mailers\ -.)102 666.6 R .075(Flags mark)5.075 F .075(ed with \207 are)-.1 F 1.192 -(not interpreted by the)102 678.6 R F3(sendmail)3.692 E F1 1.193 -(binary; these are the con)3.692 F -.15(ve)-.4 G 1.193 -(ntionally used to correlate to the \215ags).15 F .738(portion of the) -102 690.6 R F0(H)3.238 E F1 3.237(line. Flags)3.238 F(mark)3.237 E .737 -(ed with \210 apply to the mailers for the sender address rather than) --.1 F(the usual recipient mailers.)102 702.6 Q 0 Cg EP +(M)142 635.4 Q F2(name)A F1 2.5(,{)C F2(\214eld)-2.5 E F1(=)A F2(value)A +F1(}*)1.666 E(where)102 651.6 Q F2(name)3.319 E F1 .819(is the name of \ +the mailer \(used internally only\) and the \231\214eld=name\232 pairs \ +de\214ne at-)3.319 F(trib)102 663.6 Q(utes of the mailer)-.2 E 5(.F)-.55 +G(ields are:)-5 E 0 Cg EP %%Page: 57 53 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-57)195.86 E/F1 10/Times-Roman@0 SF 15.56(aR)102 96 S .987(un Ex\ -tended SMTP \(ESMTP\) protocol \(de\214ned in RFCs 1869, 1652, and 1870\ -\).)-15.56 F .987(This \215ag)5.987 F(def)122 108 Q +(SMM:08-57)195.86 E/F1 10/Times-Roman@0 SF -.15(Pa)142 96 S 51.87 +(th The).15 F(pathname of the mailer)2.5 E 47.83(Flags Special)142 108 R +(\215ags for this mailer)2.5 E 41.73(Sender Re)142 120 R +(writing set\(s\) for sender addresses)-.25 E 31.17(Recipient Re)142 132 +R(writing set\(s\) for recipient addresses)-.25 E 30.62 +(recipients Maximum)142 144 R(number of recipients per connection)2.5 E +(Ar)142 156 Q 49.13(gv An)-.18 F(ar)2.5 E(gument v)-.18 E +(ector to pass to this mailer)-.15 E 55.61(Eol The)142 168 R +(end-of-line string for this mailer)2.5 E 35.62(Maxsize The)142 180 R +(maximum message length to this mailer)2.5 E 14.51(maxmessages The)142 +192 R(maximum message deli)2.5 E -.15(ve)-.25 G(ries per connection).15 +E 32.27(Linelimit The)142 204 R(maximum line length in the message body) +2.5 E 31.18(Directory The)142 216 R -.1(wo)2.5 G +(rking directory for the mailer).1 E 42.84(Userid The)142 228 R(def)2.5 +E(ault user and group id to run as)-.1 E 50.62(Nice The)142 240 R +(nice\(2\) increment for the mailer)2.5 E 38.95(Charset The)142 252 R +(def)2.5 E(ault character set for 8-bit characters)-.1 E -.8(Ty)142 264 +S 49.75(pe T).8 F(ype information for DSN diagnostics)-.8 E -.8(Wa)142 +276 S 50.86(it The).8 F(maximum time to w)2.5 E(ait for the mailer)-.1 E +(Queue)142 288 Q 20.22(group The)-.15 F(def)2.5 E +(ault queue group for the mailer)-.1 E 69.22(/T)142 300 S +(he root directory for the mailer)-69.22 E +(Only the \214rst character of the \214eld name is check)102 316.2 Q +(ed \(it')-.1 E 2.5(sc)-.55 G(ase-sensiti)-2.5 E -.15(ve)-.25 G(\).).15 +E .397(The follo)127 332.4 R .396 +(wing \215ags may be set in the mailer description.)-.25 F(An)5.396 E +2.896(yo)-.15 G .396(ther \215ags may be used freely)-2.896 F .075(to c\ +onditionally assign headers to messages destined for particular mailers\ +.)102 344.4 R .075(Flags mark)5.075 F .075(ed with \207 are)-.1 F 1.193 +(not interpreted by the)102 356.4 R/F2 10/Times-Italic@0 SF(sendmail) +3.693 E F1 1.193(binary; these are the con)3.693 F -.15(ve)-.4 G 1.192 +(ntionally used to correlate to the \215ags).15 F .737(portion of the) +102 368.4 R F0(H)3.237 E F1 3.237(line. Flags)3.237 F(mark)3.237 E .737 +(ed with \210 apply to the mailers for the sender address rather than) +-.1 F(the usual recipient mailers.)102 380.4 Q 15.56(aR)102 396.6 S .987 +(un Extended SMTP \(ESMTP\) protocol \(de\214ned in RFCs 1869, 1652, an\ +d 1870\).)-15.56 F .986(This \215ag)5.987 F(def)122 408.6 Q (aults on if the SMTP greeting message includes the w)-.1 E -(ord \231ESMTP\232.)-.1 E 12.78(AL)102 124.2 S .852 +(ord \231ESMTP\232.)-.1 E 12.78(AL)102 424.8 S .852 (ook up the user \(address\) part of the resolv)-12.78 F .852 (ed mailer triple, in the alias database.)-.15 F(Normally)5.852 E -(this is only set for local mailers.)122 136.2 Q 15(bF)102 152.4 S .456 +(this is only set for local mailers.)122 436.8 Q 15(bF)102 453 S .456 (orce a blank line on the end of a message.)-15.15 F .456 (This is intended to w)5.456 F .456(ork around some stupid v)-.1 F(er) --.15 E(-)-.2 E .362(sions of /bin/mail that require a blank line, b)122 -164.4 R .362(ut do not pro)-.2 F .362(vide it themselv)-.15 F 2.861 -(es. It)-.15 F -.1(wo)2.861 G .361(uld not nor).1 F(-)-.2 E -(mally be used on netw)122 176.4 Q(ork mail.)-.1 E 13.33(BS)102 192.6 S -.142(trip leading backslashes \(\\\) of)-13.33 F 2.643(fo)-.25 G 2.643 -(ft)-2.643 G .143 -(he address; this is a subset of the functionality of the)-2.643 F F0(s) -2.643 E F1(\215ag.)2.643 E 15.56(cD)102 208.8 S 2.663(on)-15.56 G .163 +-.15 E(-)-.2 E .361(sions of /bin/mail that require a blank line, b)122 +465 R .362(ut do not pro)-.2 F .362(vide it themselv)-.15 F 2.862 +(es. It)-.15 F -.1(wo)2.862 G .362(uld not nor).1 F(-)-.2 E +(mally be used on netw)122 477 Q(ork mail.)-.1 E 13.33(BS)102 493.2 S +(trip leading backslashes \(\\\) of)-13.33 E 2.5(fo)-.25 G 2.5(ft)-2.5 G +(he address; this is a subset of the functionality of the)-2.5 E F0(s) +2.5 E F1(\215ag.)2.5 E 15.56(cD)102 509.4 S 2.663(on)-15.56 G .163 (ot include comments in addresses.)-2.663 F .163 (This should only be used if you ha)5.163 F .463 -.15(ve t)-.2 H 2.663 -(ow).15 G .163(ork around a)-2.763 F 1.846 -(remote mailer that gets confused by comments.)122 220.8 R 1.846 -(This strips addresses of the form \231Phrase)6.846 F -(
\232 or \231address \(Comment\)\232 do)122 232.8 Q -(wn to just \231address\232.)-.25 E 5.83(C\210 If)102 249 R .214 -(mail is)2.714 F/F2 10/Times-Italic@0 SF -.37(re)2.714 G(ceived).37 E F1 -.213(from a mailer with this \215ag set, an)2.713 F 2.713(ya)-.15 G .213 +(ow).15 G .163(ork around a)-2.763 F .22 +(remote mailer that gets confused by comments.)122 521.4 R .221 +(This strips addresses of the form \231Phrase \232 or \231address \(Comment\)\232 do)122 533.4 Q +(wn to just \231address\232.)-.25 E 5.83(C\210 If)102 549.6 R .214 +(mail is)2.714 F F2 -.37(re)2.714 G(ceived).37 E F1 .213 +(from a mailer with this \215ag set, an)2.713 F 2.713(ya)-.15 G .213 (ddresses in the header that do not ha)-2.713 F -.15(ve)-.2 G .97 -(an at sign \(\231@\232\) after being re)122 261 R .97 +(an at sign \(\231@\232\) after being re)122 561.6 R .97 (written by ruleset three will ha)-.25 F 1.27 -.15(ve t)-.2 H .97 -(he \231@domain\232 clause from).15 F(the sender en)122 273 Q -.15(ve) +(he \231@domain\232 clause from).15 F(the sender en)122 573.6 Q -.15(ve) -.4 G(lope address tack).15 E(ed on.)-.1 E(This allo)5 E -(ws mail with headers of the form:)-.25 E(From: usera@hosta)162 289.2 Q --.8(To)162 301.2 S 2.5(:u).8 G(serb@hostb, userc)-2.5 E(to be re)122 -317.4 Q(written as:)-.25 E(From: usera@hosta)162 333.6 Q -.8(To)162 -345.6 S 2.5(:u).8 G(serb@hostb, userc@hosta)-2.5 E(automatically)122 -361.8 Q 5(.H)-.65 G -.25(ow)-5 G -2.15 -.25(ev e).25 H .8 -.4(r, i).25 H -2.5(td).4 G(oesn')-2.5 E 2.5(tr)-.18 G(eally w)-2.5 E(ork reliably)-.1 E -(.)-.65 E 15(dD)102 378 S 2.56(on)-15 G .06(ot include angle brack)-2.56 -F .06(ets around route-address syntax addresses.)-.1 F .06 +(ws mail with headers of the form:)-.25 E(From: usera@hosta)162 589.8 Q +-.8(To)162 601.8 S 2.5(:u).8 G(serb@hostb, userc)-2.5 E(to be re)122 618 +Q(written as:)-.25 E(From: usera@hosta)162 634.2 Q -.8(To)162 646.2 S +2.5(:u).8 G(serb@hostb, userc@hosta)-2.5 E(automatically)122 662.4 Q 5 +(.H)-.65 G -.25(ow)-5 G -2.15 -.25(ev e).25 H .8 -.4(r, i).25 H 2.5(td) +.4 G(oesn')-2.5 E 2.5(tr)-.18 G(eally w)-2.5 E(ork reliably)-.1 E(.)-.65 +E 15(dD)102 678.6 S 2.56(on)-15 G .06(ot include angle brack)-2.56 F .06 +(ets around route-address syntax addresses.)-.1 F .06 (This is useful on mailers)5.06 F .187(that are going to pass addresses\ - to a shell that might interpret angle brack)122 390 R .188 -(ets as I/O redirection.)-.1 F(Ho)122 402 Q(we)-.25 E -.15(ve)-.25 G + to a shell that might interpret angle brack)122 690.6 R .188 +(ets as I/O redirection.)-.1 F(Ho)122 702.6 Q(we)-.25 E -.15(ve)-.25 G 1.621 -.4(r, i).15 H 3.321(td).4 G .821(oes not protect ag)-3.321 F .821 (ainst other shell metacharacters.)-.05 F .821 (Therefore, passing addresses)5.821 F -(to a shell should not be considered secure.)122 414 Q 5.28(D\207 This) -102 430.2 R(mailer w)2.5 E(ants a \231Date:\232 header line.)-.1 E 15.56 -(eT)102 446.4 S .173(his mailer is e)-15.56 F(xpensi)-.15 E .473 -.15 -(ve t)-.25 H 2.673(oc).15 G .173(onnect to, so try to a)-2.673 F -.2(vo) --.2 G .174(id connecting normally; an).2 F 2.674(yn)-.15 G .174 -(ecessary con-)-2.674 F(nection will occur during a queue run.)122 458.4 -Q(See also option)5 E F0(HoldExpensi)2.5 E -.1(ve)-.1 G F1(.).1 E 13.89 -(EE)102 474.6 S(scape lines be)-13.89 E(ginning with \231From)-.15 E 2.5 -<9a69>5 G 2.5(nt)-2.5 G(he message with a `>' sign.)-2.5 E 16.67(fT)102 -490.8 S .19(he mailer w)-16.67 F .19(ants a)-.1 F F02.69 E F2(fr) -2.69 E(om)-.45 E F1 .19(\215ag, b)2.69 F .19(ut only if this is a netw) --.2 F .19(ork forw)-.1 F .19(ard operation \(i.e., the mailer)-.1 F -(will gi)122 502.8 Q .3 -.15(ve a)-.25 H 2.5(ne).15 G(rror if the e)-2.5 -E -.15(xe)-.15 G(cuting user does not ha).15 E .3 -.15(ve s)-.2 H -(pecial permissions\).).15 E 6.94(F\207 This)102 519 R(mailer w)2.5 E -(ants a \231From:\232 header line.)-.1 E 15(gN)102 535.2 S(ormally)-15 E -(,)-.65 E F2(sendmail)4.892 E F1 2.393(sends internally generated email\ - \(e.g., error messages\) using the null)4.892 F 1.327 -(return address as required by RFC 1123.)122 547.2 R(Ho)6.327 E(we)-.25 -E -.15(ve)-.25 G 2.127 -.4(r, s).15 H 1.327(ome mailers don').4 F 3.827 -(ta)-.18 G 1.327(ccept a null return)-3.827 F 3.31(address. If)122 559.2 -R(necessary)3.31 E 3.31(,y)-.65 G .81(ou can set the)-3.31 F F0(g)3.311 -E F1 .811(\215ag to pre)3.311 F -.15(ve)-.25 G(nt).15 E F2(sendmail) -3.311 E F1 .811(from obe)3.311 F .811(ying the standards;)-.15 F 1.57 -(error messages will be sent as from the MAILER-D)122 571.2 R 1.57 -(AEMON \(actually)-.4 F 4.07(,t)-.65 G 1.57(he v)-4.07 F 1.57 -(alue of the)-.25 F F0($n)4.07 E F1(macro\).)122 583.2 Q 15(hU)102 599.4 -S 1.006(pper case should be preserv)-15 F 1.007 -(ed in host names \(the $@ portion of the mailer triplet resolv)-.15 F -(ed)-.15 E(from ruleset 0\) for this mailer)122 611.4 Q(.)-.55 E 17.22 -(iD)102 627.6 S 2.5(oU)-17.22 G(ser Database re)-2.5 E(writing on en) --.25 E -.15(ve)-.4 G(lope sender address.).15 E 16.67(IT)102 643.8 S .54 -(his \215ag is deprecated and will be remo)-16.67 F -.15(ve)-.15 G 3.039 -(df).15 G .539(rom a future v)-3.039 F 3.039(ersion. This)-.15 F .539 -(mailer will be speak-)3.039 F .161(ing SMTP to another)122 655.8 R F2 -(sendmail)2.662 E F1 2.662<8a61>2.662 G 2.662(ss)-2.662 G .162 -(uch it can use special protocol features.)-2.662 F .162 -(This \215ag should)5.162 F(not be used e)122 667.8 Q(xcept for deb)-.15 -E(ugging purposes because it uses)-.2 E F0(VERB)2.5 E F1 -(as SMTP command.)2.5 E 17.22(jD)102 684 S 2.5(oU)-17.22 G -(ser Database re)-2.5 E(writing on recipients as well as senders.)-.25 E -15(kN)102 700.2 S 1.03(ormally when)-15 F F2(sendmail)3.53 E F1 1.03 -(connects to a host via SMTP)3.53 F 3.529(,i)-1.11 G 3.529(tc)-3.529 G -1.029(hecks to mak)-3.529 F 3.529(es)-.1 G 1.029(ure that this isn') --3.529 F(t)-.18 E .08 -(accidentally the same host name as might happen if)122 712.2 R F2 -(sendmail)2.581 E F1 .081(is miscon\214gured or if a long-haul)2.581 F -(netw)122 724.2 Q 1.074(ork interf)-.1 F 1.074 -(ace is set in loopback mode.)-.1 F 1.073 -(This \215ag disables the loopback check.)6.074 F 1.073(It should)6.073 -F 0 Cg EP +(to a shell should not be considered secure.)122 714.6 Q 0 Cg EP %%Page: 58 54 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-58 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(only be used under v)122 96 Q(ery unusual circumstances.)-.15 E 12.78 -(KC)102 112.2 S(urrently unimplemented.)-12.78 E(Reserv)5 E -(ed for chunking.)-.15 E 17.22(lT)102 128.4 S +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 5.28 +(D\207 This)102 96 R(mailer w)2.5 E(ants a \231Date:\232 header line.) +-.1 E 15.56(eT)102 112.2 S .173(his mailer is e)-15.56 F(xpensi)-.15 E +.473 -.15(ve t)-.25 H 2.673(oc).15 G .173(onnect to, so try to a)-2.673 +F -.2(vo)-.2 G .174(id connecting normally; an).2 F 2.674(yn)-.15 G .174 +(ecessary con-)-2.674 F(nection will occur during a queue run.)122 124.2 +Q(See also option)5 E F0(HoldExpensi)2.5 E -.1(ve)-.1 G F1(.).1 E 13.89 +(EE)102 140.4 S(scape lines be)-13.89 E(ginning with \231From)-.15 E 2.5 +<9a69>5 G 2.5(nt)-2.5 G(he message with a `>' sign.)-2.5 E 16.67(fT)102 +156.6 S .19(he mailer w)-16.67 F .19(ants a)-.1 F F02.69 E/F2 10 +/Times-Italic@0 SF(fr)2.69 E(om)-.45 E F1 .19(\215ag, b)2.69 F .19 +(ut only if this is a netw)-.2 F .19(ork forw)-.1 F .19 +(ard operation \(i.e., the mailer)-.1 F(will gi)122 168.6 Q .3 -.15 +(ve a)-.25 H 2.5(ne).15 G(rror if the e)-2.5 E -.15(xe)-.15 G +(cuting user does not ha).15 E .3 -.15(ve s)-.2 H(pecial permissions\).) +.15 E 6.94(F\207 This)102 184.8 R(mailer w)2.5 E +(ants a \231From:\232 header line.)-.1 E 15(gN)102 201 S(ormally)-15 E +(,)-.65 E F2(sendmail)3.56 E F1 1.06(sends internally generated email \ +\(e.g., error messages\) using the null re-)3.56 F .739 +(turn address as required by RFC 1123.)122 213 R(Ho)5.739 E(we)-.25 E +-.15(ve)-.25 G 1.539 -.4(r, s).15 H .739(ome mailers don').4 F 3.238(ta) +-.18 G .738(ccept a null return ad-)-3.238 F 3.012(dress. If)122 225 R +(necessary)3.012 E 3.012(,y)-.65 G .512(ou can set the)-3.012 F F0(g) +3.012 E F1 .513(\215ag to pre)3.012 F -.15(ve)-.25 G(nt).15 E F2 +(sendmail)3.013 E F1 .513(from obe)3.013 F .513(ying the standards; er) +-.15 F(-)-.2 E 2.125(ror messages will be sent as from the MAILER-D)122 +237 R 2.125(AEMON \(actually)-.4 F 4.625(,t)-.65 G 2.125(he v)-4.625 F +2.125(alue of the)-.25 F F0($n)4.625 E F1(macro\).)122 249 Q 15(hU)102 +265.2 S 1.006(pper case should be preserv)-15 F 1.007 +(ed in host names \(the $@ portion of the mailer triplet resolv)-.15 F +(ed)-.15 E(from ruleset 0\) for this mailer)122 277.2 Q(.)-.55 E 17.22 +(iD)102 293.4 S 2.5(oU)-17.22 G(ser Database re)-2.5 E(writing on en) +-.25 E -.15(ve)-.4 G(lope sender address.).15 E 16.67(IT)102 309.6 S .54 +(his \215ag is deprecated and will be remo)-16.67 F -.15(ve)-.15 G 3.039 +(df).15 G .539(rom a future v)-3.039 F 3.039(ersion. This)-.15 F .539 +(mailer will be speak-)3.039 F .161(ing SMTP to another)122 321.6 R F2 +(sendmail)2.662 E F1 2.662<8a61>2.662 G 2.662(ss)-2.662 G .162 +(uch it can use special protocol features.)-2.662 F .162 +(This \215ag should)5.162 F(not be used e)122 333.6 Q(xcept for deb)-.15 +E(ugging purposes because it uses)-.2 E F0(VERB)2.5 E F1 +(as SMTP command.)2.5 E 17.22(jD)102 349.8 S 2.5(oU)-17.22 G +(ser Database re)-2.5 E(writing on recipients as well as senders.)-.25 E +15(kN)102 366 S .104(ormally when)-15 F F2(sendmail)2.604 E F1 .104 +(connects to a host via SMTP)2.604 F 2.604(,i)-1.11 G 2.603(tc)-2.604 G +.103(hecks to mak)-2.603 F 2.603(es)-.1 G .103(ure that this isn')-2.603 +F 2.603(ta)-.18 G(c-)-2.603 E .672 +(cidentally the same host name as might happen if)122 378 R F2(sendmail) +3.173 E F1 .673(is miscon\214gured or if a long-haul)3.173 F(netw)122 +390 Q 1.074(ork interf)-.1 F 1.074(ace is set in loopback mode.)-.1 F +1.073(This \215ag disables the loopback check.)6.074 F 1.073(It should) +6.073 F(only be used under v)122 402 Q(ery unusual circumstances.)-.15 E +12.78(KC)102 418.2 S(urrently unimplemented.)-12.78 E(Reserv)5 E +(ed for chunking.)-.15 E 17.22(lT)102 434.4 S (his mailer is local \(i.e., \214nal deli)-17.22 E -.15(ve)-.25 G -(ry will be performed\).).15 E 13.89(LL)102 144.6 S .598 +(ry will be performed\).).15 E 13.89(LL)102 450.6 S .598 (imit the line lengths as speci\214ed in RFC 821.)-13.89 F .598 -(This deprecated option should be replaced by)5.598 F(the)122 156.6 Q F0 +(This deprecated option should be replaced by)5.598 F(the)122 462.6 Q F0 (L=)2.5 E F1(mail declaration.)2.5 E -.15(Fo)5 G 2.5(rh).15 G (istoric reasons, the)-2.5 E F0(L)2.5 E F1(\215ag also sets the)2.5 E F0 -(7)2.5 E F1(\215ag.)2.5 E 12.22(mT)102 172.8 S .464(his mailer can send\ +(7)2.5 E F1(\215ag.)2.5 E 12.22(mT)102 478.8 S .464(his mailer can send\ to multiple users on the same host in one transaction.)-12.22 F .463 (When a)5.463 F F0($u)2.963 E F1(macro)2.963 E .731(occurs in the)122 -184.8 R/F2 10/Times-Italic@0 SF(ar)3.231 E(gv)-.37 E F1 .732(part of th\ -e mailer de\214nition, that \214eld will be repeated as necessary for a\ -ll)3.231 F .317(qualifying users.)122 196.8 R(Remo)5.317 E .316(ving th\ -is \215ag can defeat duplicate suppression on a remote site as each)-.15 -F(recipient is sent in a separate transaction.)122 208.8 Q 3.61 -(M\207 This)102 225 R(mailer w)2.5 E -(ants a \231Message-Id:\232 header line.)-.1 E 15(nD)102 241.2 S 2.5(on) +490.8 R F2(ar)3.231 E(gv)-.37 E F1 .732(part of the mailer de\214nition\ +, that \214eld will be repeated as necessary for all)3.231 F .317 +(qualifying users.)122 502.8 R(Remo)5.317 E .316(ving this \215ag can d\ +efeat duplicate suppression on a remote site as each)-.15 F +(recipient is sent in a separate transaction.)122 514.8 Q 3.61 +(M\207 This)102 531 R(mailer w)2.5 E +(ants a \231Message-Id:\232 header line.)-.1 E 15(nD)102 547.2 S 2.5(on) -15 G (ot insert a UNIX-style \231From\232 line on the front of the message.) --2.5 E 15(oA)102 257.4 S -.1(lwa)-15 G .816(ys run as the o).1 F .816 +-2.5 E 15(oA)102 563.4 S -.1(lwa)-15 G .816(ys run as the o).1 F .816 (wner of the recipient mailbox.)-.25 F(Normally)5.816 E F2(sendmail) 3.316 E F1 .816(runs as the sender for)3.316 F .198 -(locally generated mail or as \231daemon\232 \(actually)122 269.4 R +(locally generated mail or as \231daemon\232 \(actually)122 575.4 R 2.698(,t)-.65 G .198(he user speci\214ed in the)-2.698 F F0(u)2.698 E F1 -.198(option\) when deli)2.698 F(v-)-.25 E 1.337(ering netw)122 281.4 R -1.337(ork mail.)-.1 F 1.338(The normal beha)6.338 F 1.338 -(vior is required by most local mailers, which will not)-.2 F(allo)122 -293.4 Q 2.521(wt)-.25 G .021(he en)-2.521 F -.15(ve)-.4 G .021 +.198(option\) when deli)2.698 F(v-)-.25 E .378(ering netw)122 587.4 R +.378(ork mail.)-.1 F .378(The normal beha)5.378 F .379 +(vior is required by most local mailers, which will not al-)-.2 F(lo)122 +599.4 Q 2.946(wt)-.25 G .446(he en)-2.946 F -.15(ve)-.4 G .445 (lope sender address to be set unless the mailer is running as daemon.) -.15 F .02(This \215ag is)5.02 F(ignored if the)122 305.4 Q F0(S)2.5 E F1 -(\215ag is set.)2.5 E 15(pU)102 321.6 S .497(se the route-addr style re) --15 F -.15(ve)-.25 G .498(rse-path in the SMTP \231MAIL FR).15 F .498 -(OM:\232 command rather than just)-.4 F .205(the return address; althou\ -gh this is required in RFC 821 section 3.1, man)122 333.6 R 2.705(yh) --.15 G .205(osts do not process)-2.705 F(re)122 345.6 Q -.15(ve)-.25 G -(rse-paths properly).15 E 5(.R)-.65 G -2.15 -.25(ev e)-5 H -(rse-paths are of).25 E(\214cially discouraged by RFC 1123.)-.25 E 6.94 -(P\207 This)102 361.8 R(mailer w)2.5 E(ants a \231Return-P)-.1 E -(ath:\232 line.)-.15 E 15(qW)102 378 S .068(hen an address that resolv) +.15 F .445(This \215ag is)5.445 F(ignored if the)122 611.4 Q F0(S)2.5 E +F1(\215ag is set.)2.5 E 15(pU)102 627.6 S .76 +(se the route-addr style re)-15 F -.15(ve)-.25 G .76 +(rse-path in the SMTP).15 F/F3 9/Times-Roman@0 SF .761(SMTP MAIL)3.261 F +F1 .761(command rather than just the)3.261 F .275 +(return address; although this is required in RFC 821 section 3.1, man) +122 639.6 R 2.775(yh)-.15 G .275(osts do not process re-)-2.775 F -.15 +(ve)122 651.6 S(rse-paths properly).15 E 5(.R)-.65 G -2.15 -.25(ev e)-5 +H(rse-paths are of).25 E(\214cially discouraged by RFC 1123.)-.25 E 6.94 +(P\207 This)102 667.8 R(mailer w)2.5 E(ants a \231Return-P)-.1 E +(ath:\232 line.)-.15 E 15(qW)102 684 S .068(hen an address that resolv) -15 F .069(es to this mailer is v)-.15 F .069 (eri\214ed \(SMTP VRFY command\), generate 250)-.15 F -(responses instead of 252 responses.)122 390 Q -(This will imply that the address is local.)5 E 16.67(rS)102 406.2 S +(responses instead of 252 responses.)122 696 Q +(This will imply that the address is local.)5 E 16.67(rS)102 712.2 S (ame as)-16.67 E F0(f)2.5 E F1 2.5(,b)C(ut sends a)-2.7 E F02.5 E -F1(\215ag.)2.5 E 13.33(RO)102 422.4 S .67 -(pen SMTP connections from a \231secure\232 port.)-13.33 F .669 -(Secure ports aren')5.669 F 3.169(t\()-.18 G .669(secure, that is\) e) --3.169 F .669(xcept on)-.15 F .639 -(UNIX machines, so it is unclear that this adds an)122 434.4 R(ything.) --.15 E F2(sendmail)5.639 E F1 .64(must be running as root to)3.14 F -(be able to use this \215ag.)122 446.4 Q 16.11(sS)102 462.6 S -(trip quote characters \(" and \\\) of)-16.11 E 2.5(fo)-.25 G 2.5(ft) --2.5 G(he address before calling the mailer)-2.5 E(.)-.55 E 14.44(SD)102 -478.8 S(on')-14.44 E 3.332(tr)-.18 G .832 -(eset the userid before calling the mailer)-3.332 F 5.831(.T)-.55 G .831 -(his w)-5.831 F .831(ould be used in a secure en)-.1 F(vironment)-.4 E -(where)122 490.8 Q F2(sendmail)3.317 E F1 .817(ran as root.)3.317 F .817 -(This could be used to a)5.817 F -.2(vo)-.2 G .817(id for).2 F .817 -(ged addresses.)-.18 F .817(If the)5.817 F F0(U=)3.317 E F1 .818 -(\214eld is)3.317 F(also speci\214ed, this \215ag causes the ef)122 -502.8 Q(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id to be set to that user) -.15 E(.)-.55 E 15(uU)102 519 S .726(pper case should be preserv)-15 F -.725(ed in user names for this mailer)-.15 F 5.725(.S)-.55 G .725 -(tandards require preserv)-5.725 F(ation)-.25 E .748 -(of case in the local part of addresses, e)122 531 R .748 -(xcept for those address for which your system accepts)-.15 F -(responsibility)122 543 Q 5.151(.R)-.65 G .151(FC 2142 pro)-5.151 F .151 -(vides a long list of addresses which should be case insensiti)-.15 F --.15(ve)-.25 G 5.15(.I).15 G(f)-5.15 E .359 -(you use this \215ag, you may be violating RFC 2142.)122 555 R .36 -(Note that postmaster is al)5.359 F -.1(wa)-.1 G .36(ys treated as a).1 -F(case insensiti)122 567 Q .3 -.15(ve a)-.25 H(ddress re).15 E -.05(ga) --.15 G(rdless of this \215ag.).05 E 12.78(UT)102 583.2 S(his mailer w) --12.78 E(ants UUCP-style \231From\232 lines with the ugly \231remote fr\ -om \232 on the end.)-.1 E 12.78(wT)102 599.4 S .607 -(he user must ha)-12.78 F .907 -.15(ve a v)-.2 H .606 -(alid account on this machine, i.e.,)-.1 F F2 -.1(ge)3.106 G(tpwnam).1 E -F1 .606(must succeed.)3.106 F .606(If not, the)5.606 F 1.233 -(mail is bounced.)122 611.4 R 1.233(See also the)6.233 F F0 -(MailBoxDatabase)3.733 E F1 3.733(option. This)3.733 F 1.233 -(is required to get \231.forw)3.733 F(ard\232)-.1 E(capability)122 623.4 -Q(.)-.65 E 10.56(WI)102 639.6 S(gnore long term host status information\ - \(see Section "Persistent Host Status Information"\).)-10.56 E 7.5 -(x\207 This)102 655.8 R(mailer w)2.5 E -(ants a \231Full-Name:\232 header line.)-.1 E 12.78(XT)102 672 S .512 -(his mailer w)-12.78 F .512(ants to use the hidden dot algorithm as spe\ -ci\214ed in RFC 821; basically)-.1 F 3.011(,a)-.65 G .811 -.15(ny l) --3.011 H(ine).15 E(be)122 684 Q .796(ginning with a dot will ha)-.15 F -1.096 -.15(ve a)-.2 H 3.296(ne).15 G .797 -(xtra dot prepended \(to be stripped at the other end\).)-3.446 F(This) -5.797 E(insures that lines in the message containing a dot will not ter\ -minate the message prematurely)122 696 Q(.)-.65 E 15.56(zR)102 712.2 S -.965(un Local Mail T)-15.56 F .965(ransfer Protocol \(LMTP\) between) --.35 F F2(sendmail)3.465 E F1 .965(and the local mailer)3.465 F 5.965 -(.T)-.55 G .965(his is a)-5.965 F -.25(va)122 724.2 S 1.752(riant on SM\ -TP de\214ned in RFC 2033 that is speci\214cally designed for deli).25 F --.15(ve)-.25 G 1.752(ry to a local).15 F 0 Cg EP +F1(\215ag.)2.5 E 0 Cg EP %%Page: 59 55 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-59)195.86 E/F1 10/Times-Roman@0 SF(mailbox.)122 96 Q 13.89(ZA) -102 112.2 S(pply DialDelay \(if set\) to this mailer)-13.89 E(.)-.55 E -15(0D)102 128.4 S(on')-15 E 3.607(tl)-.18 G 1.106 -(ook up MX records for hosts sent via SMTP/LMTP)-3.607 F 6.106(.D)-1.11 -G 3.606(on)-6.106 G 1.106(ot apply)-3.606 F F0 -.25(Fa)3.606 G -(llbackMXhost).25 E F1(either)122 140.4 Q(.)-.55 E 15(1D)102 156.6 S -(on')-15 E 2.5(ts)-.18 G(end null characters \('\\0'\) to this mailer) --2.5 E(.)-.55 E 15(2D)102 172.8 S(on')-15 E 3.032(tu)-.18 G .532 -(se ESMTP e)-3.032 F -.15(ve)-.25 G 3.032(ni).15 G 3.032(fo)-3.032 G --.25(ff)-3.032 G .532(ered; this is useful for brok).25 F .533 -(en systems that of)-.1 F .533(fer ESMTP b)-.25 F .533(ut f)-.2 F(ail) --.1 E(on EHLO \(without reco)122 184.8 Q -.15(ve)-.15 G -(ring when HELO is tried ne).15 E(xt\).)-.15 E 15(3E)102 201 S .002 -(xtend the list of characters con)-15 F -.15(ve)-.4 G .001 -(rted to =XX notation when con).15 F -.15(ve)-.4 G .001 -(rting to Quoted-Printable to).15 F .977(include those that don')122 213 -R 3.478(tm)-.18 G .978(ap cleanly between ASCII and EBCDIC.)-3.478 F -.978(Useful if you ha)5.978 F 1.278 -.15(ve I)-.2 H(BM).15 E -(mainframes on site.)122 225 Q 15(5I)102 241.2 S 2.717(fn)-15 G 2.717 +(SMM:08-59)195.86 E/F1 10/Times-Roman@0 SF 13.33(RO)102 96 S .67 +(pen SMTP connections from a \231secure\232 port.)-13.33 F .669 +(Secure ports aren')5.669 F 3.169(t\()-.18 G .669(secure, that is\) e) +-3.169 F .669(xcept on)-.15 F .639 +(UNIX machines, so it is unclear that this adds an)122 108 R(ything.) +-.15 E/F2 10/Times-Italic@0 SF(sendmail)5.639 E F1 .64 +(must be running as root to)3.14 F(be able to use this \215ag.)122 120 Q +16.11(sS)102 136.2 S(trip quote characters \(" and \\\) of)-16.11 E 2.5 +(fo)-.25 G 2.5(ft)-2.5 G(he address before calling the mailer)-2.5 E(.) +-.55 E 14.44(SD)102 152.4 S(on')-14.44 E 3.332(tr)-.18 G .832 +(eset the userid before calling the mailer)-3.332 F 5.831(.T)-.55 G .831 +(his w)-5.831 F .831(ould be used in a secure en)-.1 F(vironment)-.4 E +(where)122 164.4 Q F2(sendmail)3.317 E F1 .817(ran as root.)3.317 F .817 +(This could be used to a)5.817 F -.2(vo)-.2 G .817(id for).2 F .817 +(ged addresses.)-.18 F .817(If the)5.817 F F0(U=)3.317 E F1 .818 +(\214eld is)3.317 F(also speci\214ed, this \215ag causes the ef)122 +176.4 Q(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id to be set to that user) +.15 E(.)-.55 E 15(uU)102 192.6 S .726(pper case should be preserv)-15 F +.725(ed in user names for this mailer)-.15 F 5.725(.S)-.55 G .725 +(tandards require preserv)-5.725 F(ation)-.25 E .748 +(of case in the local part of addresses, e)122 204.6 R .748 +(xcept for those address for which your system accepts)-.15 F +(responsibility)122 216.6 Q 5.151(.R)-.65 G .151(FC 2142 pro)-5.151 F +.151(vides a long list of addresses which should be case insensiti)-.15 +F -.15(ve)-.25 G 5.15(.I).15 G(f)-5.15 E .359 +(you use this \215ag, you may be violating RFC 2142.)122 228.6 R .36 +(Note that postmaster is al)5.359 F -.1(wa)-.1 G .36(ys treated as a).1 +F(case insensiti)122 240.6 Q .3 -.15(ve a)-.25 H(ddress re).15 E -.05 +(ga)-.15 G(rdless of this \215ag.).05 E 12.78(UT)102 256.8 S +(his mailer w)-12.78 E(ants UUCP-style \231From\232 lines with the ugly\ + \231remote from \232 on the end.)-.1 E 12.78(wT)102 273 S .607 +(he user must ha)-12.78 F .907 -.15(ve a v)-.2 H .606 +(alid account on this machine, i.e.,)-.1 F F2 -.1(ge)3.106 G(tpwnam).1 E +F1 .606(must succeed.)3.106 F .606(If not, the)5.606 F .173 +(mail is bounced.)122 285 R .173(See also the)5.173 F F0 +(MailboxDatabase)2.673 E F1 2.674(option. This)2.674 F .174 +(is required to get \231.forw)2.674 F .174(ard\232 ca-)-.1 F(pability) +122 297 Q(.)-.65 E 10.56(WI)102 313.2 S(gnore long term host status inf\ +ormation \(see Section "Persistent Host Status Information"\).)-10.56 E +7.5(x\207 This)102 329.4 R(mailer w)2.5 E +(ants a \231Full-Name:\232 header line.)-.1 E 12.78(XT)102 345.6 S .512 +(his mailer w)-12.78 F .512(ants to use the hidden dot algorithm as spe\ +ci\214ed in RFC 821; basically)-.1 F 3.011(,a)-.65 G .811 -.15(ny l) +-3.011 H(ine).15 E(be)122 357.6 Q .796(ginning with a dot will ha)-.15 F +1.096 -.15(ve a)-.2 H 3.296(ne).15 G .797 +(xtra dot prepended \(to be stripped at the other end\).)-3.446 F(This) +5.797 E(insures that lines in the message containing a dot will not ter\ +minate the message prematurely)122 369.6 Q(.)-.65 E 15.56(zR)102 385.8 S +.965(un Local Mail T)-15.56 F .965(ransfer Protocol \(LMTP\) between) +-.35 F F2(sendmail)3.465 E F1 .965(and the local mailer)3.465 F 5.965 +(.T)-.55 G .965(his is a)-5.965 F -.25(va)122 397.8 S .167(riant on SMT\ +P de\214ned in RFC 2033 that is speci\214cally designed for deli).25 F +-.15(ve)-.25 G .167(ry to a local mail-).15 F(box.)122 409.8 Q 13.89(ZA) +102 426 S(pply DialDelay \(if set\) to this mailer)-13.89 E(.)-.55 E 15 +(0D)102 442.2 S(on')-15 E 2.595(tl)-.18 G .095 +(ook up MX records for hosts sent via SMTP/LMTP)-2.595 F 5.095(.D)-1.11 +G 2.595(on)-5.095 G .095(ot apply)-2.595 F F0 -.25(Fa)2.595 G +(llbackMXhost).25 E F1(ei-)2.595 E(ther)122 454.2 Q(.)-.55 E 15(1D)102 +470.4 S(on')-15 E 2.5(ts)-.18 G +(end null characters \('\\0'\) to this mailer)-2.5 E(.)-.55 E 15(2D)102 +486.6 S(on')-15 E 3.032(tu)-.18 G .532(se ESMTP e)-3.032 F -.15(ve)-.25 +G 3.032(ni).15 G 3.032(fo)-3.032 G -.25(ff)-3.032 G .532 +(ered; this is useful for brok).25 F .533(en systems that of)-.1 F .533 +(fer ESMTP b)-.25 F .533(ut f)-.2 F(ail)-.1 E(on EHLO \(without reco)122 +498.6 Q -.15(ve)-.15 G(ring when HELO is tried ne).15 E(xt\).)-.15 E 15 +(3E)102 514.8 S .002(xtend the list of characters con)-15 F -.15(ve)-.4 +G .001(rted to =XX notation when con).15 F -.15(ve)-.4 G .001 +(rting to Quoted-Printable to).15 F .977(include those that don')122 +526.8 R 3.478(tm)-.18 G .978(ap cleanly between ASCII and EBCDIC.)-3.478 +F .978(Useful if you ha)5.978 F 1.278 -.15(ve I)-.2 H(BM).15 E +(mainframes on site.)122 538.8 Q 15(5I)102 555 S 2.717(fn)-15 G 2.717 (oa)-2.717 G .217(liases are found for this address, pass the address t\ hrough ruleset 5 for possible alternate)-2.717 F 2.5(resolution. This) -122 253.2 R(is intended to forw)2.5 E(ard the mail to an alternate deli) --.1 E -.15(ve)-.25 G(ry spot.).15 E 15(6S)102 269.4 S +122 567 R(is intended to forw)2.5 E(ard the mail to an alternate deli) +-.1 E -.15(ve)-.25 G(ry spot.).15 E 15(6S)102 583.2 S (trip headers to se)-15 E -.15(ve)-.25 G 2.5(nb).15 G(its.)-2.5 E 15(7S) -102 285.6 S 1.14(trip all output to se)-15 F -.15(ve)-.25 G 3.64(nb).15 -G 3.64(its. This)-3.64 F 1.14(is the def)3.64 F 1.141(ault if the)-.1 F -F0(L)3.641 E F1 1.141(\215ag is set.)3.641 F 1.141 -(Note that clearing this)6.141 F .295(option is not suf)122 297.6 R .295 -(\214cient to get full eight bit data passed through)-.25 F/F2 10 -/Times-Italic@0 SF(sendmail)2.795 E F1 5.295(.I)C 2.795(ft)-5.295 G(he) --2.795 E F0(7)2.795 E F1 .295(option is set,)2.795 F .716 -(this is essentially al)122 309.6 R -.1(wa)-.1 G .717 -(ys set, since the eighth bit w).1 F .717(as stripped on input.)-.1 F -.717(Note that this option)5.717 F(will only impact messages that didn') -122 321.6 Q 2.5(th)-.18 G -2.25 -.2(av e)-2.5 H(8)2.7 E/F3 10/Symbol SF -A F1 2.5(7b)C(it MIME con)-2.5 E -.15(ve)-.4 G(rsions performed.).15 -E 15(8I)102 337.8 S 3.783(fs)-15 G 1.283(et, it is acceptable to send e\ -ight bit data to this mailer; the usual attempt to do 8)-3.783 F F3A -F1 3.782(7b)C(it)-3.782 E(MIME con)122 349.8 Q -.15(ve)-.4 G -(rsions will be bypassed.).15 E 15(9I)102 366 S 2.704(fs)-15 G .204 -(et, do)-2.704 F F2(limited)2.704 E F1(7)2.704 E F3A F1 2.704(8b)C -.204(it MIME con)-2.704 F -.15(ve)-.4 G 2.704(rsions. These).15 F(con) -2.704 E -.15(ve)-.4 G .205(rsions are limited to te).15 F .205 -(xt/plain data.)-.15 F 17.22(:C)102 382.2 S .982 +102 599.4 S .292(trip all output to se)-15 F -.15(ve)-.25 G 2.792(nb).15 +G 2.792(its. This)-2.792 F .292(is the def)2.792 F .292(ault if the)-.1 +F F0(L)2.792 E F1 .292(\215ag is set.)2.792 F .292 +(Note that clearing this op-)5.292 F .851(tion is not suf)122 611.4 R +.851(\214cient to get full eight bit data passed through)-.25 F F2 +(sendmail)3.35 E F1 5.85(.I)C 3.35(ft)-5.85 G(he)-3.35 E F0(7)3.35 E F1 +.85(option is set,)3.35 F .716(this is essentially al)122 623.4 R -.1 +(wa)-.1 G .717(ys set, since the eighth bit w).1 F .717 +(as stripped on input.)-.1 F .717(Note that this option)5.717 F +(will only impact messages that didn')122 635.4 Q 2.5(th)-.18 G -2.25 +-.2(av e)-2.5 H(8)2.7 E/F3 10/Symbol SFA F1 2.5(7b)C(it MIME con) +-2.5 E -.15(ve)-.4 G(rsions performed.).15 E 15(8I)102 651.6 S 3.783(fs) +-15 G 1.283(et, it is acceptable to send eight bit data to this mailer;\ + the usual attempt to do 8)-3.783 F F3A F1 3.782(7b)C(it)-3.782 E +(MIME con)122 663.6 Q -.15(ve)-.4 G(rsions will be bypassed.).15 E 15 +(9I)102 679.8 S 2.5(fs)-15 G(et, do)-2.5 E F2(limited)2.5 E F1(7)2.5 E +F3A F1 2.5(8b)C(it MIME con)-2.5 E -.15(ve)-.4 G 2.5(rsions. These) +.15 F(con)2.5 E -.15(ve)-.4 G(rsions are limited to te).15 E +(xt/plain data.)-.15 E 17.22(:C)102 696 S .982 (heck addresses to see if the)-17.22 F 3.482(yb)-.15 G -.15(eg)-3.482 G .982(in \231:include:\232; if the).15 F 3.482(yd)-.15 G .982(o, con) -3.482 F -.15(ve)-.4 G .982(rt them to the \231*include*\232).15 F -(mailer)122 394.2 Q(.)-.55 E 18(|C)102 410.4 S -(heck addresses to see if the)-18 E 2.5(yb)-.15 G -.15(eg)-2.5 G -(in with a `|'; if the).15 E 2.5(yd)-.15 G(o, con)-2.5 E -.15(ve)-.4 G -(rt them to the \231prog\232 mailer).15 E(.)-.55 E 17.22(/C)102 426.6 S -(heck addresses to see if the)-17.22 E 2.5(yb)-.15 G -.15(eg)-2.5 G -(in with a `/'; if the).15 E 2.5(yd)-.15 G(o, con)-2.5 E -.15(ve)-.4 G -(rt them to the \231*\214le*\232 mailer).15 E(.)-.55 E 10.79(@L)102 -442.8 S(ook up addresses in the user database.)-10.79 E 11.67(%D)102 459 -S 3.868(on)-11.67 G 1.368(ot attempt deli)-3.868 F -.15(ve)-.25 G 1.369 -(ry on initial receipt of a message or on queue runs unless the queued) -.15 F(message is selected using one of the -qI/-qR/-qS queue run modi\ -\214ers or an ETRN request.)122 471 Q 16.67(!D)102 487.2 S 1.29 -(isable an MH hack that drops an e)-16.67 F 1.289 -(xplicit From: header if it is the same as what sendmail)-.15 F -.1(wo) -122 499.2 S(uld generate.).1 E .267(Con\214guration \214les prior to le) -127 515.4 R -.15(ve)-.25 G 2.768(l6a).15 G .268(ssume the `)-2.768 F --1.11(A')-.8 G 2.768(,`)1.11 G .268 -(w', `5', `:', `|', `/', and `@' options on the)-2.768 F -(mailer named \231local\232.)102 527.4 Q .306(The mailer with the speci\ -al name \231error\232 can be used to generate a user error)127 543.6 R -5.305(.T)-.55 G .305(he \(optional\))-5.305 F .323(host \214eld is an e) -102 555.6 R .323(xit status to be returned, and the user \214eld is a m\ -essage to be printed.)-.15 F .324(The e)5.324 F .324(xit sta-)-.15 F -.891(tus may be numeric or one of the v)102 567.6 R .891(alues USA)-.25 -F .891(GE, NOUSER, NOHOST)-.4 F 3.39(,U)-.74 G -.35(NA)-3.39 G -1.35(VA) --1 G .89(ILABLE, SOFT)1.35 F(-)-.92 E -1.2(WA)102 579.6 S 1.141 -(RE, TEMPF)1.2 F 1.141(AIL, PR)-.74 F -1.88 -.4(OT O)-.4 H 1.141 -(COL, or CONFIG to return the corresponding EX_ e).4 F 1.142 -(xit code, or an)-.15 F .288 -(enhanced error code as described in RFC 1893,)102 591.6 R F2 .288 -(Enhanced Mail System Status Codes.)2.788 F F1 -.15(Fo)5.287 G 2.787(re) -.15 G(xample,)-2.937 E(the entry:)102 603.6 Q -($#error $@ NOHOST $: Host unkno)142 619.8 Q(wn in this domain)-.25 E -.145(on the RHS of a rule will cause the speci\214ed error to be genera\ -ted and the \231Host unkno)102 636 R .146(wn\232 e)-.25 F .146(xit sta-) --.15 F .491(tus to be returned if the LHS matches.)102 648 R .491 -(This mailer is only functional in rulesets 0, 5, or one of the)5.491 F -1.81(check_* rulesets.)102 660 R 1.81 -(The host \214eld can also contain the special tok)6.81 F(en)-.1 E F0 -(quarantine)4.31 E F1 1.81(which instructs)4.31 F -(sendmail to quarantine the current message.)102 672 Q .257 -(The mailer with the special name \231discard\232 causes an)127 688.2 R -2.756(ym)-.15 G .256(ail sent to it to be discarded b)-2.756 F .256 -(ut oth-)-.2 F 1.313(erwise treated as though it were successfully deli) -102 700.2 R -.15(ve)-.25 G 3.813(red. This).15 F 1.314 -(mailer cannot be used in ruleset 0,)3.813 F(only in the v)102 712.2 Q -(arious address checking rulesets.)-.25 E 0 Cg EP +(mailer)122 708 Q(.)-.55 E 0 Cg EP %%Page: 60 56 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-60 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .468 -(The mailer named \231local\232)127 96 R/F2 10/Times-Italic@0 SF(must) -2.968 E F1 .468(be de\214ned in e)2.968 F -.15(ve)-.25 G .468 +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 18(|C)102 +96 S(heck addresses to see if the)-18 E 2.5(yb)-.15 G -.15(eg)-2.5 G +(in with a `|'; if the).15 E 2.5(yd)-.15 G(o, con)-2.5 E -.15(ve)-.4 G +(rt them to the \231prog\232 mailer).15 E(.)-.55 E 17.22(/C)102 112.2 S +(heck addresses to see if the)-17.22 E 2.5(yb)-.15 G -.15(eg)-2.5 G +(in with a `/'; if the).15 E 2.5(yd)-.15 G(o, con)-2.5 E -.15(ve)-.4 G +(rt them to the \231*\214le*\232 mailer).15 E(.)-.55 E 10.79(@L)102 +128.4 S(ook up addresses in the user database.)-10.79 E 11.67(%D)102 +144.6 S 3.869(on)-11.67 G 1.369(ot attempt deli)-3.869 F -.15(ve)-.25 G +1.369 +(ry on initial receipt of a message or on queue runs unless the queued) +.15 F(message is selected using one of the -qI/-qR/-qS queue run modi\ +\214ers or an ETRN request.)122 156.6 Q 16.67(!D)102 172.8 S 1.289 +(isable an MH hack that drops an e)-16.67 F 1.29 +(xplicit From: header if it is the same as what sendmail)-.15 F -.1(wo) +122 184.8 S(uld generate.).1 E .268(Con\214guration \214les prior to le) +127 201 R -.15(ve)-.25 G 2.768(l6a).15 G .268(ssume the `)-2.768 F -1.11 +(A')-.8 G 2.768(,`)1.11 G .268 +(w', `5', `:', `|', `/', and `@' options on the)-2.768 F +(mailer named \231local\232.)102 213 Q .306(The mailer with the special\ + name \231error\232 can be used to generate a user error)127 229.2 R +5.306(.T)-.55 G .306(he \(optional\))-5.306 F .324(host \214eld is an e) +102 241.2 R .323(xit status to be returned, and the user \214eld is a m\ +essage to be printed.)-.15 F .323(The e)5.323 F .323(xit sta-)-.15 F +.891(tus may be numeric or one of the v)102 253.2 R .891(alues USA)-.25 +F .891(GE, NOUSER, NOHOST)-.4 F 3.391(,U)-.74 G -.35(NA)-3.391 G -1.35 +(VA)-1 G .891(ILABLE, SOFT)1.35 F(-)-.92 E -1.2(WA)102 265.2 S 1.142 +(RE, TEMPF)1.2 F 1.142(AIL, PR)-.74 F -1.88 -.4(OT O)-.4 H 1.142 +(COL, or CONFIG to return the corresponding EX_ e).4 F 1.141 +(xit code, or an)-.15 F .288 +(enhanced error code as described in RFC 1893,)102 277.2 R/F2 10 +/Times-Italic@0 SF .288(Enhanced Mail System Status Codes.)2.788 F F1 +-.15(Fo)5.288 G 2.788(re).15 G(xample,)-2.938 E(the entry:)102 289.2 Q +($#error $@ NOHOST $: Host unkno)142 305.4 Q(wn in this domain)-.25 E +.145(on the RHS of a rule will cause the speci\214ed error to be genera\ +ted and the \231Host unkno)102 321.6 R .145(wn\232 e)-.25 F .145 +(xit sta-)-.15 F .491(tus to be returned if the LHS matches.)102 333.6 R +.491(This mailer is only functional in rulesets 0, 5, or one of the) +5.491 F 1.81(check_* rulesets.)102 345.6 R 1.81 +(The host \214eld can also contain the special tok)6.81 F(en)-.1 E F0 +(quarantine)4.31 E F1 1.81(which instructs)4.31 F +(sendmail to quarantine the current message.)102 357.6 Q .256 +(The mailer with the special name \231discard\232 causes an)127 373.8 R +2.756(ym)-.15 G .257(ail sent to it to be discarded b)-2.756 F .257 +(ut oth-)-.2 F 1.314(erwise treated as though it were successfully deli) +102 385.8 R -.15(ve)-.25 G 3.813(red. This).15 F 1.313 +(mailer cannot be used in ruleset 0,)3.813 F(only in the v)102 397.8 Q +(arious address checking rulesets.)-.25 E .468 +(The mailer named \231local\232)127 414 R F2(must)2.968 E F1 .468 +(be de\214ned in e)2.968 F -.15(ve)-.25 G .468 (ry con\214guration \214le.).15 F .468(This is used to deli)5.468 F -.15 (ve)-.25 G(r).15 E .25(local mail, and is treated specially in se)102 -108 R -.15(ve)-.25 G .25(ral w).15 F 2.75(ays. Additionally)-.1 F 2.75 +426 R -.15(ve)-.25 G .25(ral w).15 F 2.75(ays. Additionally)-.1 F 2.75 (,t)-.65 G .25(hree other mailers named \231prog\232,)-2.75 F .942(\231\ *\214le*\232, and \231*include*\232 may be de\214ned to tune the deli) -102 120 R -.15(ve)-.25 G .942(ry of messages to programs, \214les, and) -.15 F(:include: lists respecti)102 132 Q -.15(ve)-.25 G(ly).15 E 5(.T) +102 438 R -.15(ve)-.25 G .942(ry of messages to programs, \214les, and) +.15 F(:include: lists respecti)102 450 Q -.15(ve)-.25 G(ly).15 E 5(.T) -.65 G(he)-5 E 2.5(yd)-.15 G(ef)-2.5 E(ault to:)-.1 E (Mprog, P=/bin/sh, F=lsoDq9, T=DNS/RFC822/X-Unix, A=sh \255c $u)142 -148.2 Q +466.2 Q (M*\214le*, P=[FILE], F=lsDFMPEouq9, T=DNS/RFC822/X-Unix, A=FILE $u)142 -160.2 Q(M*include*, P=/de)142 172.2 Q(v/null, F=su, A=INCLUDE $u)-.25 E +478.2 Q(M*include*, P=/de)142 490.2 Q(v/null, F=su, A=INCLUDE $u)-.25 E .466 (Builtin pathnames are [FILE] and [IPC], the former is used for deli)127 -192.6 R -.15(ve)-.25 G .467(ry to \214les, the latter for).15 F(deli)102 -204.6 Q -.15(ve)-.25 G .12(ry via interprocess communication.).15 F -.15 +510.6 R -.15(ve)-.25 G .466(ry to \214les, the latter for).15 F(deli)102 +522.6 Q -.15(ve)-.25 G .12(ry via interprocess communication.).15 F -.15 (Fo)5.12 G 2.62(rm).15 G .12(ailers that use [IPC] as pathname the ar) -2.62 F .12(gument v)-.18 F(ec-)-.15 E .761 -(tor \(A=\) must start with TCP or FILE for deli)102 216.6 R -.15(ve) +(tor \(A=\) must start with TCP or FILE for deli)102 534.6 R -.15(ve) -.25 G .761(ry via a TCP or a Unix domain sock).15 F 3.261(et. If)-.1 F -.761(TCP is)3.261 F .11(used, the second ar)102 228.6 R .109 -(gument must be the name of the host to contact.)-.18 F .109 -(Optionally a third ar)5.109 F .109(gument can)-.18 F .575 -(be used to specify a port, the def)102 240.6 R .576 +.761(TCP is)3.261 F .109(used, the second ar)102 546.6 R .109 +(gument must be the name of the host to contact.)-.18 F .11 +(Optionally a third ar)5.11 F .11(gument can)-.18 F .576 +(be used to specify a port, the def)102 558.6 R .576 (ault is smtp \(port 25\).)-.1 F .576(If FILE is used, the second ar) -5.576 F .576(gument must)-.18 F(be the name of the Unix domain sock)102 -252.6 Q(et.)-.1 E .669(If the ar)127 268.8 R .669(gument v)-.18 F .669 -(ector does not contain $u then)-.15 F F2(sendmail)3.169 E F1 .668 +5.576 F .575(gument must)-.18 F(be the name of the Unix domain sock)102 +570.6 Q(et.)-.1 E .668(If the ar)127 586.8 R .668(gument v)-.18 F .669 +(ector does not contain $u then)-.15 F F2(sendmail)3.169 E F1 .669 (will speak SMTP \(or LMTP if the)3.169 F -(mailer \215ag z is speci\214ed\) to the mailer)102 280.8 Q(.)-.55 E -(If no Eol \214eld is de\214ned, then the def)127 297 Q -(ault is "\\r\\n" for SMTP mailers and "\\n" of others.)-.1 E .615 -(The Sender and Recipient re)127 313.2 R .615 +(mailer \215ag z is speci\214ed\) to the mailer)102 598.8 Q(.)-.55 E +(If no Eol \214eld is de\214ned, then the def)127 615 Q +(ault is "\\r\\n" for SMTP mailers and "\\n" of others.)-.1 E .616 +(The Sender and Recipient re)127 631.2 R .615 (writing sets may either be a simple ruleset id or may be tw)-.25 F -3.116(oi)-.1 G(ds)-3.116 E .576 -(separated by a slash; if so, the \214rst re)102 325.2 R .575 -(writing set is applied to en)-.25 F -.15(ve)-.4 G .575 -(lope addresses and the second is).15 F(applied to headers.)102 337.2 Q +3.115(oi)-.1 G(ds)-3.115 E .575 +(separated by a slash; if so, the \214rst re)102 643.2 R .576 +(writing set is applied to en)-.25 F -.15(ve)-.4 G .576 +(lope addresses and the second is).15 F(applied to headers.)102 655.2 Q (Setting an)5 E 2.5(yv)-.15 G (alue to zero disables corresponding mailer)-2.75 E(-speci\214c re)-.2 E -(writing.)-.25 E .196 +(writing.)-.25 E .197 (The Directory is actually a colon-separated path of directories to try) -127 353.4 R 5.197(.F)-.65 G .197(or e)-5.347 F .197 +127 671.4 R 5.196(.F)-.65 G .196(or e)-5.346 F .196 (xample, the de\214ni-)-.15 F .104 -(tion \231D=$z:/\232 \214rst tries to e)102 365.4 R -.15(xe)-.15 G .104 +(tion \231D=$z:/\232 \214rst tries to e)102 683.4 R -.15(xe)-.15 G .104 (cute in the recipient').15 F 2.604(sh)-.55 G .104 -(ome directory; if that is not a)-2.604 F -.25(va)-.2 G .103 -(ilable, it tries to).25 F -.15(exe)102 377.4 S .816 +(ome directory; if that is not a)-2.604 F -.25(va)-.2 G .104 +(ilable, it tries to).25 F -.15(exe)102 695.4 S .816 (cute in the root of the \214lesystem.).15 F .816 (This is intended to be used only on the \231prog\232 mailer)5.816 F -3.317(,s)-.4 G(ince)-3.317 E .009(some shells \(such as)102 389.4 R F2 +3.316(,s)-.4 G(ince)-3.316 E .008(some shells \(such as)102 707.4 R F2 (csh)2.509 E F1 2.509(\)r)C .009(efuse to e)-2.509 F -.15(xe)-.15 G .009 (cute if the).15 F 2.509(yc)-.15 G .009 -(annot read the current directory)-2.509 F 5.008(.S)-.65 G .008 -(ince the queue)-5.008 F(directory is not normally readable by unpri)102 -401.4 Q(vile)-.25 E(ged users)-.15 E F2(csh)2.5 E F1 -(scripts as recipients can f)2.5 E(ail.)-.1 E 1.862 -(The Userid speci\214es the def)127 417.6 R 1.863 -(ault user and group id to run as, o)-.1 F -.15(ve)-.15 G 1.863 -(rriding the).15 F F0(DefaultUser)4.363 E F1 .098(option \(q.v)102 429.6 -R 2.598(.\). If)-.65 F(the)2.598 E F0(S)2.598 E F1 .098(mailer \215ag i\ -s also speci\214ed, this user and group will be set as the ef)2.598 F -(fecti)-.25 E .398 -.15(ve u)-.25 H(id).15 E .693 -(and gid for the process.)102 441.6 R .694(This may be gi)5.693 F -.15 -(ve)-.25 G 3.194(na).15 G(s)-3.194 E F2(user:gr)3.194 E(oup)-.45 E F1 -.694(to set both the user and group id; either)3.194 F .127 -(may be an inte)102 453.6 R .127(ger or a symbolic name to be look)-.15 -F .127(ed up in the)-.1 F F2(passwd)2.627 E F1(and)2.627 E F2(gr)2.627 E -(oup)-.45 E F1 .126(\214les respecti)2.626 F -.15(ve)-.25 G(ly).15 E -5.126(.I)-.65 G(f)-5.126 E .782 -(only a symbolic user name is speci\214ed, the group id in the)102 465.6 -R F2(passwd)3.282 E F1 .782(\214le for that user is used as the)3.282 F -(group id.)102 477.6 Q .545(The Charset \214eld is used when con)127 -493.8 R -.15(ve)-.4 G .545 -(rting a message to MIME; this is the character set used).15 F .465 -(in the Content-T)102 505.8 R .465(ype: header)-.8 F 5.465(.I)-.55 G -2.965(ft)-5.465 G .465(his is not set, the)-2.965 F F0(DefaultCharset) -2.966 E F1 .466(option is used, and if that is not)2.966 F .258 -(set, the v)102 517.8 R .258(alue \231unkno)-.25 F .258 -(wn-8bit\232 is used.)-.25 F F0 -1.2(WA)5.257 G(RNING:)1.2 E F1 .257 -(this \214eld applies to the sender')2.757 F 2.757(sm)-.55 G(ailer) --2.757 E 2.757(,n)-.4 G .257(ot the)-2.757 F(recipient')102 529.8 Q -2.701(sm)-.55 G(ailer)-2.701 E 5.201(.F)-.55 G .201(or e)-5.351 F .201 -(xample, if the en)-.15 F -.15(ve)-.4 G .202 -(lope sender address lists an address on the local netw).15 F(ork)-.1 E -.48(and the recipient is on an e)102 541.8 R .48(xternal netw)-.15 F .48 -(ork, the character set will be set from the Charset= \214eld for)-.1 F -(the local netw)102 553.8 Q(ork mailer)-.1 E 2.5(,n)-.4 G -(ot that of the e)-2.5 E(xternal netw)-.15 E(ork mailer)-.1 E(.)-.55 E -.794(The T)127 570 R .795(ype= \214eld sets the type information used i\ -n MIME error messages as de\214ned by RFC)-.8 F 2.805(1894. It)102 582 R -.305(is actually three v)2.805 F .305 -(alues separated by slashes: the MT)-.25 F .305 -(A-type \(that is, the description of ho)-.93 F(w)-.25 E .083(hosts are\ - named\), the address type \(the description of e-mail addresses\), and\ - the diagnostic type \(the)102 594 R .143 -(description of error diagnostic codes\).)102 606 R .143 -(Each of these must be a re)5.143 F .142(gistered v)-.15 F .142 -(alue or be)-.25 F .142(gin with \231X\255\232.)-.15 F(The def)102 618 Q -(ault is \231dns/rfc822/smtp\232.)-.1 E 1.175(The m= \214eld speci\214e\ -s the maximum number of messages to attempt to deli)127 634.2 R -.15(ve) --.25 G 3.675(ro).15 G 3.675(nas)-3.675 G(ingle)-3.675 E -(SMTP or LMTP connection.)102 646.2 Q(The def)5 E(ault is in\214nite.) --.1 E 1.545(The r= \214eld speci\214es the maximum number of recipients\ - to attempt to deli)127 662.4 R -.15(ve)-.25 G 4.045(ri).15 G 4.045(nas) --4.045 G(ingle)-4.045 E(en)102 674.4 Q -.15(ve)-.4 G 2.5(lope. It).15 F -(def)2.5 E(aults to 100.)-.1 E 1.052(The /= \214eld speci\214es a ne)127 -690.6 R 3.552(wr)-.25 G 1.052(oot directory for the mailer)-3.552 F -6.052(.T)-.55 G 1.052(he path is macro e)-6.052 F 1.052(xpanded and)-.15 -F .512(then passed to the \231chroot\232 system call.)102 702.6 R .512 -(The root directory is changed before the Directory \214eld is)5.512 F -(consulted or the uid is changed.)102 714.6 Q 0 Cg EP +(annot read the current directory)-2.509 F 5.009(.S)-.65 G .009 +(ince the queue)-5.009 F(directory is not normally readable by unpri)102 +719.4 Q(vile)-.25 E(ged users)-.15 E F2(csh)2.5 E F1 +(scripts as recipients can f)2.5 E(ail.)-.1 E 0 Cg EP %%Page: 61 57 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-61)195.86 E/F1 10/Times-Roman@0 SF .56(The W)127 96 R .56 -(ait= \214eld speci\214es the maximum time to w)-.8 F .561 +(SMM:08-61)195.86 E/F1 10/Times-Roman@0 SF .684 +(The Userid speci\214es the def)127 96 R .683 +(ault user and group id to run as, o)-.1 F -.15(ve)-.15 G .683 +(rriding the).15 F F0(DefaultUser)3.183 E F1(op-)3.183 E .598 +(tion \(q.v)102 108 R 3.098(.\). If)-.65 F(the)3.098 E F0(S)3.098 E F1 +.598(mailer \215ag is also speci\214ed, this user and group will be set\ + as the ef)3.098 F(fecti)-.25 E .898 -.15(ve u)-.25 H(id).15 E .694 +(and gid for the process.)102 120 R .694(This may be gi)5.694 F -.15(ve) +-.25 G 3.194(na).15 G(s)-3.194 E/F2 10/Times-Italic@0 SF(user:gr)3.194 E +(oup)-.45 E F1 .693(to set both the user and group id; either)3.194 F +.126(may be an inte)102 132 R .127(ger or a symbolic name to be look) +-.15 F .127(ed up in the)-.1 F F2(passwd)2.627 E F1(and)2.627 E F2(gr) +2.627 E(oup)-.45 E F1 .127(\214les respecti)2.627 F -.15(ve)-.25 G(ly) +.15 E 5.127(.I)-.65 G(f)-5.127 E .782 +(only a symbolic user name is speci\214ed, the group id in the)102 144 R +F2(passwd)3.282 E F1 .782(\214le for that user is used as the)3.282 F +(group id.)102 156 Q .545(The Charset \214eld is used when con)127 172.2 +R -.15(ve)-.4 G .545 +(rting a message to MIME; this is the character set used).15 F .373 +(in the Content-T)102 184.2 R .373(ype: header)-.8 F 5.373(.I)-.55 G +2.873(ft)-5.373 G .373(his is not set, the)-2.873 F F0(DefaultCharSet) +2.873 E F1 .372(option is used, and if that is not)2.873 F .257 +(set, the v)102 196.2 R .257(alue \231unkno)-.25 F .257 +(wn-8bit\232 is used.)-.25 F F0 -1.2(WA)5.257 G(RNING:)1.2 E F1 .257 +(this \214eld applies to the sender')2.757 F 2.758(sm)-.55 G(ailer) +-2.758 E 2.758(,n)-.4 G .258(ot the)-2.758 F(recipient')102 208.2 Q +2.702(sm)-.55 G(ailer)-2.702 E 5.202(.F)-.55 G .202(or e)-5.352 F .202 +(xample, if the en)-.15 F -.15(ve)-.4 G .201 +(lope sender address lists an address on the local netw).15 F(ork)-.1 E +.48(and the recipient is on an e)102 220.2 R .48(xternal netw)-.15 F .48 +(ork, the character set will be set from the Charset= \214eld for)-.1 F +(the local netw)102 232.2 Q(ork mailer)-.1 E 2.5(,n)-.4 G +(ot that of the e)-2.5 E(xternal netw)-.15 E(ork mailer)-.1 E(.)-.55 E +.795(The T)127 248.4 R .795(ype= \214eld sets the type information used\ + in MIME error messages as de\214ned by RFC)-.8 F 2.805(1894. It)102 +260.4 R .305(is actually three v)2.805 F .305 +(alues separated by slashes: the MT)-.25 F .305 +(A-type \(that is, the description of ho)-.93 F(w)-.25 E .083(hosts are\ + named\), the address type \(the description of e-mail addresses\), and\ + the diagnostic type \(the)102 272.4 R .142 +(description of error diagnostic codes\).)102 284.4 R .142 +(Each of these must be a re)5.142 F .143(gistered v)-.15 F .143 +(alue or be)-.25 F .143(gin with \231X\255\232.)-.15 F(The def)102 296.4 +Q(ault is \231dns/rfc822/smtp\232.)-.1 E 1.175(The m= \214eld speci\214\ +es the maximum number of messages to attempt to deli)127 312.6 R -.15 +(ve)-.25 G 3.674(ro).15 G 3.674(nas)-3.674 G(ingle)-3.674 E +(SMTP or LMTP connection.)102 324.6 Q(The def)5 E(ault is in\214nite.) +-.1 E .494(The r= \214eld speci\214es the maximum number of recipients \ +to attempt to deli)127 340.8 R -.15(ve)-.25 G 2.995(ri).15 G 2.995(nas) +-2.995 G .495(ingle en-)-2.995 F -.15(ve)102 352.8 S 2.5(lope. It).15 F +(def)2.5 E(aults to 100.)-.1 E 1.052(The /= \214eld speci\214es a ne)127 +369 R 3.552(wr)-.25 G 1.052(oot directory for the mailer)-3.552 F 6.052 +(.T)-.55 G 1.052(he path is macro e)-6.052 F 1.051(xpanded and)-.15 F +.512(then passed to the \231chroot\232 system call.)102 381 R .512 +(The root directory is changed before the Directory \214eld is)5.512 F +(consulted or the uid is changed.)102 393 Q .561(The W)127 409.2 R .561 +(ait= \214eld speci\214es the maximum time to w)-.8 F .56 (ait for the mailer to return after sending all)-.1 F(data to it.)102 -108 Q(This applies to mailers that ha)5 E .3 -.15(ve b)-.2 H(een fork) -.15 E(ed by)-.1 E/F2 10/Times-Italic@0 SF(sendmail)2.5 E F1(.)A 1.164 -(The Queue)127 124.2 R 1.164(group= \214eld speci\214es the def)-.15 F -1.164(ault queue group in which recei)-.1 F -.15(ve)-.25 G 3.664(dm).15 -G 1.163(ail should be)-3.664 F 2.848(queued. This)102 136.2 R .348 -(can be o)2.848 F -.15(ve)-.15 G .349(rridden by other means as e).15 F -.349(xplained in section `)-.15 F .349(`Queue Groups and Queue)-.74 F -(Directories')102 148.2 Q('.)-.74 E F0 2.5(5.5. H)87 172.2 R 2.5<8a44> -2.5 G(e\214ne Header)-2.5 E F1 1.136 -(The format of the header lines that)127 188.4 R F2(sendmail)3.636 E F1 -1.135(inserts into the message are de\214ned by the)3.636 F F0(H)3.635 E -F1 2.5(line. The)102 200.4 R(syntax of this line is one of the follo)2.5 -E(wing:)-.25 E F0(H)142 216.6 Q F2(hname)A F0(:)A F2(htemplate)2.5 E F0 -(H)142 237 Q F1([)A F0(?)A F2(m\215a)A(gs)-.1 E F0(?])A F2(hname)A F0(:) -A F2(htemplate)2.5 E F0(H)142 257.4 Q F1([)A F0(?$)A F2({macr)A(o})-.45 -E F0(?])A F2(hname)A F0(:)A F2(htemplate)2.5 E F1 1.058(Continuation li\ -nes in this spec are re\215ected directly into the outgoing message.)102 -273.6 R(The)6.058 E F2(htemplate)3.558 E F1(is)3.558 E(macro-e)102 285.6 -Q 1.12(xpanded before insertion into the message.)-.15 F 1.12(If the) -6.12 F F2(m\215a)3.62 E(gs)-.1 E F1 1.12 +421.2 Q(This applies to mailers that ha)5 E .3 -.15(ve b)-.2 H(een fork) +.15 E(ed by)-.1 E F2(sendmail)2.5 E F1(.)A 1.163(The Queue)127 437.4 R +1.164(group= \214eld speci\214es the def)-.15 F 1.164 +(ault queue group in which recei)-.1 F -.15(ve)-.25 G 3.664(dm).15 G +1.164(ail should be)-3.664 F 2.849(queued. This)102 449.4 R .349 +(can be o)2.849 F -.15(ve)-.15 G .349(rridden by other means as e).15 F +.348(xplained in section `)-.15 F .348(`Queue Groups and Queue)-.74 F +(Directories')102 461.4 Q('.)-.74 E F0 2.5(5.5. H)87 485.4 R 2.5<8a44> +2.5 G(e\214ne Header)-2.5 E F1 1.135 +(The format of the header lines that)127 501.6 R F2(sendmail)3.636 E F1 +1.136(inserts into the message are de\214ned by the)3.636 F F0(H)3.636 E +F1 2.5(line. The)102 513.6 R(syntax of this line is one of the follo)2.5 +E(wing:)-.25 E F0(H)142 529.8 Q F2(hname)A F0(:)A F2(htemplate)2.5 E F0 +(H)142 550.2 Q F1([)A F0(?)A F2(m\215a)A(gs)-.1 E F0(?])A F2(hname)A F0 +(:)A F2(htemplate)2.5 E F0(H)142 570.6 Q F1([)A F0(?$)A F2({macr)A(o}) +-.45 E F0(?])A F2(hname)A F0(:)A F2(htemplate)2.5 E F1 1.058(Continuati\ +on lines in this spec are re\215ected directly into the outgoing messag\ +e.)102 586.8 R(The)6.058 E F2(htemplate)3.557 E F1(is)3.557 E(macro-e) +102 598.8 Q 1.12(xpanded before insertion into the message.)-.15 F 1.12 +(If the)6.12 F F2(m\215a)3.62 E(gs)-.1 E F1 1.12 (\(surrounded by question marks\))3.62 F .161(are speci\214ed, at least\ one of the speci\214ed \215ags must be stated in the mailer de\214niti\ -on for this header)102 297.6 R .858(to be automatically output.)102 -309.6 R .858(If a)5.858 F F2(${macr)3.358 E(o})-.45 E F1 .858 +on for this header)102 610.8 R .857(to be automatically output.)102 +622.8 R .858(If a)5.858 F F2(${macr)3.358 E(o})-.45 E F1 .858 (\(surrounded by question marks\) is speci\214ed, the header)3.358 F -1.264(will be automatically output if the macro is set.)102 321.6 R -1.264(The macro may be set using an)6.264 F 3.764(yo)-.15 G 3.764(ft) --3.764 G 1.264(he normal)-3.764 F .233(methods, including using the)102 -333.6 R F0(macr)2.733 E(o)-.18 E F1 .232(storage map in a ruleset.)2.732 -F .232(If one of these headers is in the input)5.232 F .124 -(it is re\215ected to the output re)102 345.6 R -.05(ga)-.15 G .124 -(rdless of these \215ags or macros.).05 F .125(Notice: If a)5.125 F F2 -(${macr)2.625 E(o})-.45 E F1 .125(is used to set a)2.625 F(header)102 -357.6 Q 4.309(,t)-.4 G 1.809 -(hen it is useful to add that macro to class)-4.309 F F2($={per)4.308 E -(sistentMacr)-.1 E(os})-.45 E F1 1.808(which consists of the)4.308 F -(macros that should be sa)102 369.6 Q -.15(ve)-.2 G 2.5(da).15 G -(cross queue runs.)-2.5 E(Some headers ha)127 385.8 Q .3 -.15(ve s)-.2 H -(pecial semantics that will be described later).15 E(.)-.55 E 2.71(As) -127 402 S .21(econdary syntax allo)-2.71 F .21(ws v)-.25 F .211 -(alidation of headers as the)-.25 F 2.711(ya)-.15 G .211(re being read.) --2.711 F 1.811 -.8(To e)5.211 H .211(nable v).8 F(alidation,)-.25 E -(use:)102 414 Q F0(H)142 430.2 Q F2(Header)A F0 2.5(:$)C(>)-2.5 E F2 -(Ruleset)A F0(H)142 442.2 Q F2(Header)A F0 2.5(:$)C(>+)-2.5 E F2 -(Ruleset)A F1 .265(The indicated)102 458.4 R F2(Ruleset)2.765 E F1 .265 -(is called for the speci\214ed)2.765 F F2(Header)2.765 E F1 2.765(,a)C -.265(nd can return)-2.765 F F0($#err)2.765 E(or)-.18 E F1 .265 -(to reject or quaran-)2.765 F 1.304(tine the message or)102 470.4 R F0 -($#discard)3.804 E F1 1.304(to discard the message \(as with the other) -3.804 F F0(check_)3.804 E F1 3.804(*r)C 3.804(ulesets\). The)-3.804 F -3.176(ruleset recei)102 482.4 R -.15(ve)-.25 G 5.676(st).15 G 3.176 -(he header \214eld-body as ar)-5.676 F 3.175 -(gument, i.e., not the header \214eld-name; see also)-.18 F .629 -(${hdr_name} and ${currHeader}.)102 494.4 R .629 -(The header is treated as a structured \214eld, that is, te)5.629 F .63 -(xt in paren-)-.15 F .337 -(theses is deleted before processing, unless the second form)102 506.4 R -F0($>+)2.837 E F1 .337(is used.)2.837 F .337(Note: only one ruleset can) -5.337 F(be associated with a header;)102 518.4 Q F2(sendmail)2.5 E F1 -(will silently ignore multiple entries.)2.5 E -.15(Fo)127 534.6 S 2.5 -(re).15 G(xample, the con\214guration lines:)-2.65 E -(HMessage-Id: $>CheckMessageId)142 550.8 Q(SCheckMessageId)142 574.8 Q -(R< $+ @ $+)142 586.8 Q 11.06(>$)5 G 2.5(@O)-11.06 G(K)-2.5 E 52.83 -(R$* $#error)142 598.8 R($: Ille)2.5 E -.05(ga)-.15 G 2.5(lM).05 G -(essage-Id header)-2.5 E -.1(wo)102 615 S(uld refuse an).1 E 2.5(ym)-.15 -G(essage that had a Message-Id: header of an)-2.5 E 2.5(yo)-.15 G 2.5 -(ft)-2.5 G(he follo)-2.5 E(wing forms:)-.25 E(Message-Id: <>)142 631.2 Q -(Message-Id: some te)142 643.2 Q(xt)-.15 E(Message-Id: e).15 E(xtra crud) --.15 E 3.068(Ad)102 671.4 S(ef)-3.068 E .569 -(ault ruleset that is called for headers which don')-.1 F 3.069(th)-.18 -G -2.25 -.2(av e)-3.069 H 3.069(as)3.269 G .569 -(peci\214c ruleset de\214ned for them can)-3.069 F(be speci\214ed by:) -102 683.4 Q F0(H)142 699.6 Q F2(*)A F0 2.5(:$)C(>)-2.5 E F2(Ruleset)A F1 -(or)102 715.8 Q 0 Cg EP +1.264(will be automatically output if the macro is set.)102 634.8 R +1.264(The macro may be set using an)6.264 F 3.764(yo)-.15 G 3.763(ft) +-3.764 G 1.263(he normal)-3.763 F .232(methods, including using the)102 +646.8 R F0(macr)2.732 E(o)-.18 E F1 .232(storage map in a ruleset.)2.732 +F .232(If one of these headers is in the input)5.232 F .125 +(it is re\215ected to the output re)102 658.8 R -.05(ga)-.15 G .125 +(rdless of these \215ags or macros.).05 F .124(Notice: If a)5.124 F F2 +(${macr)2.624 E(o})-.45 E F1 .124(is used to set a)2.624 F(header)102 +670.8 Q 4.308(,t)-.4 G 1.809 +(hen it is useful to add that macro to class)-4.308 F F2($={per)4.309 E +(sistentMacr)-.1 E(os})-.45 E F1 1.809(which consists of the)4.309 F +(macros that should be sa)102 682.8 Q -.15(ve)-.2 G 2.5(da).15 G +(cross queue runs.)-2.5 E(Some headers ha)127 699 Q .3 -.15(ve s)-.2 H +(pecial semantics that will be described later).15 E(.)-.55 E 0 Cg EP %%Page: 62 58 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-62 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E(H)142 96 Q/F1 10/Times-Italic@0 -SF(*)A F0 2.5(:$)C(>+)-2.5 E F1(Ruleset)A F0 2.5(5.6. O)87 124.2 R 2.5 -<8a53>2.5 G(et Option)-2.5 E/F2 10/Times-Roman@0 SF .963(There are a nu\ -mber of global options that can be set from a con\214guration \214le.) -127 140.4 R .962(Options are)5.962 F .86(represented by full w)102 152.4 -R .86(ords; some are also representable as single characters for back c\ -ompatibility)-.1 F(.)-.65 E(The syntax of this line is:)102 164.4 Q F0 -(O)142 180.6 Q F1(option)7.5 E F0(=)A F1(value)A F2 .563 -(This sets option)102 196.8 R F1(option)3.062 E F2 .562(to be)3.062 F F1 -(value)3.062 E F2 5.562(.N)C .562(ote that there)-5.562 F F1(must)3.062 -E F2 .562(be a space between the letter `O' and the)3.062 F -(name of the option.)102 208.8 Q(An older v)5 E(ersion is:)-.15 E F0(O) -142 225 Q F1 1.666(ov)C(alue)-1.666 E F2 .13(where the option)102 241.2 -R F1(o)2.63 E F2 .13(is a single character)2.63 F 5.13(.D)-.55 G .13 -(epending on the option,)-5.13 F F1(value)2.63 E F2 .13 -(may be a string, an inte)2.63 F(ger)-.15 E(,)-.4 E 2.5(ab)102 253.2 S +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.711(As) +127 96 S .211(econdary syntax allo)-2.711 F .211(ws v)-.25 F .211 +(alidation of headers as the)-.25 F 2.711(ya)-.15 G .211(re being read.) +-2.711 F 1.81 -.8(To e)5.21 H .21(nable v).8 F(alidation,)-.25 E(use:) +102 108 Q F0(H)142 124.2 Q/F2 10/Times-Italic@0 SF(Header)A F0 2.5(:$)C +(>)-2.5 E F2(Ruleset)A F0(H)142 136.2 Q F2(Header)A F0 2.5(:$)C(>+)-2.5 +E F2(Ruleset)A F1 .265(The indicated)102 152.4 R F2(Ruleset)2.765 E F1 +.265(is called for the speci\214ed)2.765 F F2(Header)2.765 E F1 2.765 +(,a)C .265(nd can return)-2.765 F F0($#err)2.765 E(or)-.18 E F1 .265 +(to reject or quaran-)2.765 F 1.304(tine the message or)102 164.4 R F0 +($#discard)3.804 E F1 1.304(to discard the message \(as with the other) +3.804 F F0(check_)3.804 E F1 3.804(*r)C 3.804(ulesets\). The)-3.804 F +3.175(ruleset recei)102 176.4 R -.15(ve)-.25 G 5.675(st).15 G 3.175 +(he header \214eld-body as ar)-5.675 F 3.176 +(gument, i.e., not the header \214eld-name; see also)-.18 F .63 +(${hdr_name} and ${currHeader}.)102 188.4 R .629 +(The header is treated as a structured \214eld, that is, te)5.63 F .629 +(xt in paren-)-.15 F .337 +(theses is deleted before processing, unless the second form)102 200.4 R +F0($>+)2.837 E F1 .337(is used.)2.837 F .337(Note: only one ruleset can) +5.337 F(be associated with a header;)102 212.4 Q F2(sendmail)2.5 E F1 +(will silently ignore multiple entries.)2.5 E -.15(Fo)127 228.6 S 2.5 +(re).15 G(xample, the con\214guration lines:)-2.65 E +(HMessage-Id: $>CheckMessageId)142 244.8 Q(SCheckMessageId)142 268.8 Q +(R< $+ @ $+)142 280.8 Q 11.06(>$)5 G 2.5(@O)-11.06 G(K)-2.5 E 52.83 +(R$* $#error)142 292.8 R($: Ille)2.5 E -.05(ga)-.15 G 2.5(lM).05 G +(essage-Id header)-2.5 E -.1(wo)102 309 S(uld refuse an).1 E 2.5(ym)-.15 +G(essage that had a Message-Id: header of an)-2.5 E 2.5(yo)-.15 G 2.5 +(ft)-2.5 G(he follo)-2.5 E(wing forms:)-.25 E(Message-Id: <>)142 325.2 Q +(Message-Id: some te)142 337.2 Q(xt)-.15 E(Message-Id: e).15 E(xtra crud) +-.15 E 3.069(Ad)102 365.4 S(ef)-3.069 E .569 +(ault ruleset that is called for headers which don')-.1 F 3.069(th)-.18 +G -2.25 -.2(av e)-3.069 H 3.069(as)3.269 G .568 +(peci\214c ruleset de\214ned for them can)-3.069 F(be speci\214ed by:) +102 377.4 Q F0(H)142 393.6 Q F2(*)A F0 2.5(:$)C(>)-2.5 E F2(Ruleset)A F1 +(or)102 409.8 Q F0(H)142 426 Q F2(*)A F0 2.5(:$)C(>+)-2.5 E F2(Ruleset)A +F0 2.5(5.6. O)87 454.2 R 2.5<8a53>2.5 G(et Option)-2.5 E F1 .962(There \ +are a number of global options that can be set from a con\214guration \ +\214le.)127 470.4 R .963(Options are)5.963 F .86(represented by full w) +102 482.4 R .86(ords; some are also representable as single characters \ +for back compatibility)-.1 F(.)-.65 E(The syntax of this line is:)102 +494.4 Q F0(O)142 510.6 Q F2(option)7.5 E F0(=)A F2(value)A F1 .562 +(This sets option)102 526.8 R F2(option)3.062 E F1 .562(to be)3.062 F F2 +(value)3.062 E F1 5.562(.N)C .562(ote that there)-5.562 F F2(must)3.062 +E F1 .562(be a space between the letter `O' and the)3.062 F +(name of the option.)102 538.8 Q(An older v)5 E(ersion is:)-.15 E F0(O) +142 555 Q F2 1.666(ov)C(alue)-1.666 E F1 .13(where the option)102 571.2 +R F2(o)2.63 E F1 .13(is a single character)2.63 F 5.13(.D)-.55 G .13 +(epending on the option,)-5.13 F F2(value)2.63 E F1 .13 +(may be a string, an inte)2.63 F(ger)-.15 E(,)-.4 E 2.5(ab)102 583.2 S (oolean \(with le)-2.5 E -.05(ga)-.15 G 2.5(lv).05 G (alues \231t\232, \231T\232, \231f\232, or \231F\232; the def)-2.75 E (ault is TR)-.1 E(UE\), or a time interv)-.4 E(al.)-.25 E 1.164(All \ \214lenames used in options should be absolute paths, i.e., starting wi\ -th '/'.)127 269.4 R(Relati)6.164 E 1.464 -.15(ve \214)-.25 H(le-).15 E -(names most lik)102 281.4 Q +th '/'.)127 599.4 R(Relati)6.165 E 1.465 -.15(ve \214)-.25 H(le-).15 E +(names most lik)102 611.4 Q (ely cause surprises during operation \(unless otherwise noted\).)-.1 E (The options supported \(with the old, one character names in brack)127 -297.6 Q(ets\) are:)-.1 E(AliasFile=)102 313.8 Q F1(spec, spec, ...)A F2 -.182([A] Specify possible alias \214le\(s\).)174 325.8 R(Each)5.182 E F1 -(spec)2.682 E F2 .183(should be in the format `)2.682 F(`)-.74 E F1 -(class)A F0(:)A F1(info)2.683 E F2 -.74('')C(where)174 337.8 Q F1(class) -3.031 E F0(:)A F2 .531(is optional and def)3.031 F .531(aults to `)-.1 F -(`implicit')-.74 E 3.031('. Note)-.74 F(that)3.031 E F1(info)3.031 E F2 -.53(is required for)3.03 F(all)174 349.8 Q F1(class)3.524 E F2 1.024 -(es e)B 1.024(xcept \231ldap\232.)-.15 F -.15(Fo)6.024 G 3.524(rt).15 G -1.024(he \231ldap\232 class, if)-3.524 F F1(info)3.524 E F2 1.025 -(is not speci\214ed, a def)3.524 F(ault)-.1 E F1(info)174 361.8 Q F2 --.25(va)2.5 G(lue is used as follo).25 E(ws:)-.25 E -(\255k \(&\(objectClass=sendmailMT)214 378 Q(AAliasObject\))-.93 E -(\(sendmailMT)226.5 390 Q(AAliasName=aliases\))-.93 E(\(|\(sendmailMT) -226.5 402 Q -.4(AC)-.93 G(luster=${sendmailMT).4 E -.4(AC)-.93 G -(luster}\)).4 E(\(sendmailMT)231.5 414 Q(AHost=$j\)\))-.93 E -(\(sendmailMT)226.5 426 Q(AK)-.93 E -.15(ey)-.25 G(=%0\)\)).15 E -(\255v sendmailMT)214 438 Q(AAliasV)-.93 E(alue)-1.11 E 2.305 -(Depending on ho)174 454.2 R(w)-.25 E F1(sendmail)4.805 E F2 2.305 -(is compiled, v)4.805 F 2.305 -(alid classes are \231implicit\232 \(search)-.25 F 1.207(through a comp\ -iled-in list of alias \214le types, for back compatibility\), \231hash\ -\232 \(if)174 466.2 R/F3 9/Times-Roman@0 SF(NEWDB)174 478.2 Q F2 .496 -(is speci\214ed\), \231btree\232 \(if)2.996 F F3(NEWDB)2.996 E F2 .496 -(is speci\214ed\), \231dbm\232 \(if)2.996 F F3(NDBM)2.996 E F2 .496 -(is speci-)2.996 F 1.1(\214ed\), \231cdb\232 \(if)174 490.2 R F3(CDB)3.6 -E F2 1.101(is speci\214ed\), \231stab\232 \(internal symbol table \212 \ -not normally)3.6 F 1.079(used unless you ha)174 502.2 R 1.379 -.15(ve n) --.2 H 3.578(oo).15 G 1.078 -(ther database lookup\), \231sequence\232 \(use a sequence of)-3.578 F -.958(maps pre)174 514.2 R .958(viously declared\), \231ldap\232 \(if) --.25 F F3(LD)3.458 E(APMAP)-.36 E F2 .958 -(is speci\214ed\), or \231nis\232 \(if)3.458 F F3(NIS)3.459 E F2(is) -3.459 E 2.5(speci\214ed\). If)174 526.2 R 2.5(al)2.5 G(ist of)-2.5 E F1 -(spec)2.5 E F2 2.5(sa)C(re pro)-2.5 E(vided,)-.15 E F1(sendmail)2.5 E F2 -(searches them in order)2.5 E(.)-.55 E(AliasW)102 542.4 Q(ait=)-.8 E F1 -(timeout)A F2 .141([a] If set, w)174 554.4 R .141(ait up to)-.1 F F1 -(timeout)2.641 E F2 .141(\(units def)2.641 F .14 -(ault to minutes\) for an \231@:@\232 entry to e)-.1 F(xist)-.15 E .517 -(in the alias database before starting up.)174 566.4 R .517 -(If it does not appear in the)5.517 F F1(timeout)3.018 E F2(inter)3.018 -E(-)-.2 E -.25(va)174 578.4 S 2.5(li).25 G(ssue a w)-2.5 E(arning.)-.1 E -(Allo)102 594.6 Q(wBogusHELO)-.25 E 1.104([no short name] If set, allo) -174 606.6 R 3.604(wH)-.25 G 1.104(ELO SMTP commands that don')-3.604 F -3.604(ti)-.18 G 1.103(nclude a host)-3.604 F 2.881(name. Setting)174 -618.6 R .382(this violates RFC 1123 section 5.2.5, b)2.881 F .382 -(ut is necessary to interoper)-.2 F(-)-.2 E .061(ate with se)174 630.6 R --.15(ve)-.25 G .061(ral SMTP clients.).15 F .061(If there is a v)5.061 F -.06(alue, it is still check)-.25 F .06(ed for le)-.1 F(gitimac)-.15 E --.65(y.)-.15 G(AuthMaxBits=)102 646.8 Q F1(N)A F2 .697([no short name] \ -Limit the maximum encryption strength for the security layer in)5.24 F -1.318(SMTP A)174 658.8 R 1.318(UTH \(SASL\). Def)-.55 F 1.317 -(ault is essentially unlimited.)-.1 F 1.317(This allo)6.317 F 1.317 -(ws to turn of)-.25 F(f)-.25 E .377(additional encryption in SASL if ST) -174 670.8 R(AR)-.93 E .377(TTLS is already encrypting the communi-)-.6 F -.179(cation, because the e)174 682.8 R .179 -(xisting encryption strength is tak)-.15 F .179 -(en into account when choos-)-.1 F .997 -(ing an algorithm for the security layer)174 694.8 R 5.998(.F)-.55 G -.998(or e)-6.148 F .998(xample, if ST)-.15 F(AR)-.93 E .998 -(TTLS is used and)-.6 F .437 -(the symmetric cipher is 3DES, then the the k)174 706.8 R -.15(ey)-.1 G -.437(length \(in bits\) is 168.).15 F .437(Hence set-)5.437 F(ting)174 -718.8 Q F0 -.5(Au)2.5 G(thMaxBits).5 E F2(to 168 will disable an)2.5 E -2.5(ye)-.15 G(ncryption in SASL.)-2.5 E 0 Cg EP +627.6 Q(ets\) are:)-.1 E(AliasFile=)102 643.8 Q F2(spec, spec, ...)A F1 +.183([A] Specify possible alias \214le\(s\).)174 655.8 R(Each)5.182 E F2 +(spec)2.682 E F1 .182(should be in the format `)2.682 F(`)-.74 E F2 +(class)A F0(:)A F2(info)2.682 E F1 -.74('')C(where)174 667.8 Q F2(class) +3.03 E F0(:)A F1 .531(is optional and def)3.03 F .531(aults to `)-.1 F +(`implicit')-.74 E 3.031('. Note)-.74 F(that)3.031 E F2(info)3.031 E F1 +.531(is required for)3.031 F(all)174 679.8 Q F2(class)3.525 E F1 1.025 +(es e)B 1.025(xcept \231ldap\232.)-.15 F -.15(Fo)6.025 G 3.524(rt).15 G +1.024(he \231ldap\232 class, if)-3.524 F F2(info)3.524 E F1 1.024 +(is not speci\214ed, a def)3.524 F(ault)-.1 E F2(info)174 691.8 Q F1 +-.25(va)2.5 G(lue is used as follo).25 E(ws:)-.25 E 0 Cg EP %%Page: 63 59 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-63)195.86 E/F1 10/Times-Roman@0 SF -1.05(AuthMechanisms [no)102 -96 R .687(short name] List of authentication mechanisms for A)3.187 F -.688(UTH \(separated by spa-)-.55 F 3.049(ces\). The)174 108 R(adv)3.049 -E .548 +(SMM:08-63)195.86 E/F1 10/Times-Roman@0 SF +(\255k \(&\(objectClass=sendmailMT)214 96 Q(AAliasObject\))-.93 E +(\(sendmailMT)226.5 108 Q(AAliasName=aliases\))-.93 E(\(|\(sendmailMT) +226.5 120 Q -.4(AC)-.93 G(luster=${sendmailMT).4 E -.4(AC)-.93 G +(luster}\)).4 E(\(sendmailMT)231.5 132 Q(AHost=$j\)\))-.93 E +(\(sendmailMT)226.5 144 Q(AK)-.93 E -.15(ey)-.25 G(=%0\)\)).15 E +(\255v sendmailMT)214 156 Q(AAliasV)-.93 E(alue)-1.11 E 2.305 +(Depending on ho)174 172.2 R(w)-.25 E/F2 10/Times-Italic@0 SF(sendmail) +4.805 E F1 2.305(is compiled, v)4.805 F 2.305 +(alid classes are \231implicit\232 \(search)-.25 F 1.207(through a comp\ +iled-in list of alias \214le types, for back compatibility\), \231hash\ +\232 \(if)174 184.2 R/F3 9/Times-Roman@0 SF(NEWDB)174 196.2 Q F1 .496 +(is speci\214ed\), \231btree\232 \(if)2.996 F F3(NEWDB)2.996 E F1 .496 +(is speci\214ed\), \231dbm\232 \(if)2.996 F F3(NDBM)2.996 E F1 .496 +(is speci-)2.996 F 1.101(\214ed\), \231cdb\232 \(if)174 208.2 R F3(CDB) +3.601 E F1 1.1(is speci\214ed\), \231stab\232 \(internal symbol table \ +\212 not normally)3.601 F 1.078(used unless you ha)174 220.2 R 1.378 +-.15(ve n)-.2 H 3.578(oo).15 G 1.079 +(ther database lookup\), \231sequence\232 \(use a sequence of)-3.578 F +.959(maps pre)174 232.2 R .959(viously declared\), \231ldap\232 \(if) +-.25 F F3(LD)3.458 E(APMAP)-.36 E F1 .958 +(is speci\214ed\), or \231nis\232 \(if)3.458 F F3(NIS)3.458 E F1(is) +3.458 E 2.5(speci\214ed\). If)174 244.2 R 2.5(al)2.5 G(ist of)-2.5 E F2 +(spec)2.5 E F1 2.5(sa)C(re pro)-2.5 E(vided,)-.15 E F2(sendmail)2.5 E F1 +(searches them in order)2.5 E(.)-.55 E(AliasW)102 260.4 Q(ait=)-.8 E F2 +(timeout)A F1 .14([a] If set, w)174 272.4 R .14(ait up to)-.1 F F2 +(timeout)2.64 E F1 .141(\(units def)2.641 F .141 +(ault to minutes\) for an \231@:@\232 entry to e)-.1 F(xist)-.15 E .518 +(in the alias database before starting up.)174 284.4 R .517 +(If it does not appear in the)5.517 F F2(timeout)3.017 E F1(inter)3.017 +E(-)-.2 E -.25(va)174 296.4 S 2.5(li).25 G(ssue a w)-2.5 E(arning.)-.1 E +(Allo)102 312.6 Q(wBogusHELO)-.25 E 1.104([no short name] If set, allo) +174 324.6 R 3.604(wH)-.25 G 1.104(ELO SMTP commands that don')-3.604 F +3.604(ti)-.18 G 1.104(nclude a host)-3.604 F 2.882(name. Setting)174 +336.6 R .382(this violates RFC 1123 section 5.2.5, b)2.882 F .381 +(ut is necessary to interoper)-.2 F(-)-.2 E(ate with se)174 348.6 Q -.15 +(ve)-.25 G(ral SMTP clients.).15 E(If there is a v)5 E +(alue, it is still check)-.25 E(ed for le)-.1 E(gitimac)-.15 E -.65(y.) +-.15 G(AuthMaxBits=)102 364.8 Q F2(N)A F1 .697([no short name] Limit th\ +e maximum encryption strength for the security layer in)5.24 F 1.318 +(SMTP A)174 376.8 R 1.318(UTH \(SASL\). Def)-.55 F 1.317 +(ault is essentially unlimited.)-.1 F 1.317(This allo)6.317 F 1.317 +(ws to turn of)-.25 F(f)-.25 E .377(additional encryption in SASL if ST) +174 388.8 R(AR)-.93 E .377(TTLS is already encrypting the communi-)-.6 F +.179(cation, because the e)174 400.8 R .179 +(xisting encryption strength is tak)-.15 F .179 +(en into account when choos-)-.1 F .997 +(ing an algorithm for the security layer)174 412.8 R 5.998(.F)-.55 G +.998(or e)-6.148 F .998(xample, if ST)-.15 F(AR)-.93 E .998 +(TTLS is used and)-.6 F .663(the symmetric cipher is 3DES, then the k) +174 424.8 R -.15(ey)-.1 G .662(length \(in bits\) is 168.).15 F .662 +(Hence setting)5.662 F F0 -.5(Au)174 436.8 S(thMaxBits).5 E F1 +(to 168 will disable an)2.5 E 2.5(ye)-.15 G(ncryption in SASL.)-2.5 E +-1.05(AuthMechanisms [no)102 453 R .687 +(short name] List of authentication mechanisms for A)3.187 F .688 +(UTH \(separated by spa-)-.55 F 3.049(ces\). The)174 465 R(adv)3.049 E +.548 (ertised list of authentication mechanisms will be the intersection of) --.15 F 1.125(this list and the list of a)174 120 R -.25(va)-.2 G 1.126 -(ilable mechanisms as determined by the Cyrus SASL).25 F(library)174 132 -Q 6.167(.I)-.65 G 3.667(fS)-6.167 G -.93(TA)-3.667 G -.6(RT).93 G 1.167 -(TLS is acti).6 F -.15(ve)-.25 G 3.667(,E).15 G(XTERN)-3.667 E 1.167 -(AL will be added to this list.)-.35 F 1.166(In that)6.167 F -(case, the v)174 144 Q +-.15 F .231(this list and the list of a)174 477 R -.25(va)-.2 G .232 +(ilable mechanisms as determined by the Cyrus SASL li-).25 F(brary)174 +489 Q 6.595(.I)-.65 G 4.095(fS)-6.595 G -.93(TA)-4.095 G -.6(RT).93 G +1.595(TLS is acti).6 F -.15(ve)-.25 G 4.095(,E).15 G(XTERN)-4.095 E +1.595(AL will be added to this list.)-.35 F 1.594(In that)6.594 F +(case, the v)174 501 Q (alue of {cert_subject} is used as authentication id.)-.25 E 17.83 -(AuthOptions [no)102 160.2 R .836 +(AuthOptions [no)102 517.2 R .836 (short name] List of options for SMTP A)3.335 F .836 -(UTH consisting of single characters)-.55 F(with interv)174 172.2 Q -(ening white space or commas.)-.15 E 12.78(AU)214 188.4 S(se the A) --12.78 E(UTH= parameter for the MAIL FR)-.55 E(OM)-.4 E -(command only when authentication succeeded.)234 200.4 Q -(This can be used as a w)234 212.4 Q(orkaround for brok)-.1 E(en)-.1 E -(MT)234 224.4 Q(As that do not implement RFC 2554 correctly)-.93 E(.) --.65 E 15.56(ap)214 236.4 S(rotection from acti)-15.56 E .3 -.15(ve \() --.25 H(non-dictionary\) attacks).15 E(during authentication e)234 248.4 -Q(xchange.)-.15 E 15.56(cr)214 260.4 S -(equire mechanisms which pass client credentials,)-15.56 E(and allo)234 -272.4 Q 2.5(wm)-.25 G(echanisms which can pass credentials)-2.5 E -(to do so.)234 284.4 Q 15(dd)214 296.4 S(on')-15 E 2.5(tp)-.18 G -(ermit mechanisms susceptible to passi)-2.5 E -.15(ve)-.25 G -(dictionary attack.)234 308.4 Q 16.67(fr)214 320.4 S(equire forw)-16.67 -E(ard secrec)-.1 E 2.5(yb)-.15 G(etween sessions)-2.5 E -(\(breaking one w)234 332.4 Q(on')-.1 E 2.5(th)-.18 G(elp break ne)-2.5 -E(xt\).)-.15 E 12.22(mr)214 344.4 S(equire mechanisms which pro)-12.22 E -(vide mutual authentication)-.15 E(\(only a)234 356.4 Q -.25(va)-.2 G -(ilable if using Cyrus SASL v2 or later\).).25 E 15(pd)214 368.4 S(on') --15 E 2.5(tp)-.18 G(ermit mechanisms susceptible to simple)-2.5 E(passi) -234 380.4 Q .3 -.15(ve a)-.25 H(ttack \(e.g., PLAIN, LOGIN\), unless a) -.15 E(security layer is acti)234 392.4 Q -.15(ve)-.25 G(.).15 E 15(yd) -214 404.4 S(on')-15 E 2.5(tp)-.18 G(ermit mechanisms that allo)-2.5 E -2.5(wa)-.25 G(non)-2.5 E(ymous login.)-.15 E(The \214rst option applies\ - to sendmail as a client, the others to a serv)174 420.6 Q(er)-.15 E 5 -(.E)-.55 G(xample:)-5 E 2.5(OA)214 436.8 S(uthOptions=p,y)-2.5 E -.1(wo) -174 453 S 1.347(uld disallo).1 F 3.847(wA)-.25 G 1.347(NONYMOUS as A) --3.847 F 1.347(UTH mechanism and w)-.55 F 1.346(ould allo)-.1 F 3.846 -(wP)-.25 G(LAIN)-3.846 E 1.788 -(and LOGIN only if a security layer \(e.g., pro)174 465 R 1.789 -(vided by ST)-.15 F(AR)-.93 E 1.789(TTLS\) is already)-.6 F(acti)174 477 -Q -.15(ve)-.25 G 5.364(.T).15 G .364(he options 'a', 'c', ')-5.364 F -.364(d', 'f)-.5 F .364 -(', 'p', and 'y' refer to properties of the selected).55 F 1.089 -(SASL mechanisms.)174 489 R 1.089 -(Explanations of these properties can be found in the Cyrus)6.089 F -(SASL documentation.)174 501 Q 23.39(AuthRealm [no)102 517.2 R 2.502 -(short name] The authentication realm that is passed to the Cyrus SASL) -5.003 F(library)174 529.2 Q 5(.I)-.65 G 2.5(fn)-5 G 2.5(or)-2.5 G -(ealm is speci\214ed,)-2.5 E F0($j)2.5 E F1(is used.)2.5 E(See also KNO) -5 E(WNB)-.35 E(UGS.)-.1 E(BadRcptThrottle=)102 545.4 Q/F2 10 -/Times-Italic@0 SF(N)A F1 1.194([no short name] If set and the speci\ -\214ed number of recipients in a single SMTP)174 557.4 R .596 -(transaction ha)174 569.4 R .896 -.15(ve b)-.2 H .595 -(een rejected, sleep for one second after each subsequent RCPT).15 F -(command in that transaction.)174 581.4 Q(BlankSub=)102 597.6 Q F2(c)A -F1 1.255([B] Set the blank substitution character to)22.47 F F2(c)3.755 -E F1 6.255(.U)C 1.255(nquoted spaces in addresses are)-6.255 F -(replaced by this character)174 609.6 Q 5(.D)-.55 G(ef)-5 E -(aults to space \(i.e., no change is made\).)-.1 E(CA)102 625.8 Q(CertP) --.4 E 21.16(ath [no)-.15 F .897(short name] P)3.397 F .897 -(ath to directory with certi\214cates of CAs.)-.15 F .896 -(This directory direc-)5.896 F 1.234(tory must contain the hashes of ea\ -ch CA certi\214cate as \214lenames \(or as links to)174 637.8 R(them\).) -174 649.8 Q(CA)102 666 Q 23.23(CertFile [no)-.4 F 1.439(short name] Fil\ -e containing one or more CA certi\214cates; see section about)3.94 F(ST) -174 678 Q(AR)-.93 E(TTLS for more information.)-.6 E -(CertFingerprintAlgorithm)102 694.2 Q 1.949(Specify the \214ngerprint a\ -lgorithm \(digest\) to use for the presented cert.)174 706.2 R 1.95 -(If the)6.95 F 2.346(option is not set, md5 is used and the macro)174 -718.2 R F0(${cert_md5})4.845 E F1 2.345(contains the cert)4.845 F 0 Cg -EP +(UTH consisting of single characters)-.55 F(with interv)174 529.2 Q +(ening white space or commas.)-.15 E 0 Cg EP %%Page: 64 60 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-64 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 3.764 -(\214ngerprint. If)174 96 R 1.264(the option is e)3.764 F 1.264 -(xplicitly set, the speci\214ed algorithm \(e.g., sha1\) is)-.15 F -(used and the macro)174 108 Q F0(${cert_fp})2.5 E F1 -(contains the cert \214ngerprint.)2.5 E 26.72(CipherList Specify)102 -124.2 R 1.06(cipher list for ST)3.56 F(AR)-.93 E 1.06 -(TTLS \(does not apply to TLSv1.3\).)-.6 F(See)6.06 E/F2 10 -/Times-Italic@0 SF(cipher)3.56 E(s)-.1 E F1(\(1\))A(for possible v)174 -136.2 Q(alues.)-.25 E 14.51(CheckAliases [n])102 152.4 R -1.11(Va)2.5 G +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 12.78(AU) +214 96 S(se the A)-12.78 E(UTH= parameter for the MAIL)-.55 E +(command only when authentication succeeded.)234 108 Q +(This can be used as a w)234 120 Q(orkaround for brok)-.1 E(en)-.1 E(MT) +234 132 Q(As that do not implement RFC 2554 correctly)-.93 E(.)-.65 E +15.56(ap)214 144 S(rotection from acti)-15.56 E .3 -.15(ve \()-.25 H +(non-dictionary\) attacks).15 E(during authentication e)234 156 Q +(xchange.)-.15 E 15.56(cr)214 168 S +(equire mechanisms which pass client credentials,)-15.56 E(and allo)234 +180 Q 2.5(wm)-.25 G(echanisms which can pass credentials)-2.5 E +(to do so.)234 192 Q 15(dd)214 204 S(on')-15 E 2.5(tp)-.18 G +(ermit mechanisms susceptible to passi)-2.5 E -.15(ve)-.25 G +(dictionary attack.)234 216 Q 16.67(fr)214 228 S(equire forw)-16.67 E +(ard secrec)-.1 E 2.5(yb)-.15 G(etween sessions)-2.5 E(\(breaking one w) +234 240 Q(on')-.1 E 2.5(th)-.18 G(elp break ne)-2.5 E(xt\).)-.15 E 12.22 +(mr)214 252 S(equire mechanisms which pro)-12.22 E +(vide mutual authentication)-.15 E(\(only a)234 264 Q -.25(va)-.2 G +(ilable if using Cyrus SASL v2 or later\).).25 E 15(pd)214 276 S(on')-15 +E 2.5(tp)-.18 G(ermit mechanisms susceptible to simple)-2.5 E(passi)234 +288 Q .3 -.15(ve a)-.25 H(ttack \(e.g., PLAIN, LOGIN\), unless a).15 E +(security layer is acti)234 300 Q -.15(ve)-.25 G(.).15 E 15(yd)214 312 S +(on')-15 E 2.5(tp)-.18 G(ermit mechanisms that allo)-2.5 E 2.5(wa)-.25 G +(non)-2.5 E(ymous login.)-.15 E(The \214rst option applies to sendmail \ +as a client, the others to a serv)174 328.2 Q(er)-.15 E 5(.E)-.55 G +(xample:)-5 E 2.5(OA)214 344.4 S(uthOptions=p,y)-2.5 E -.1(wo)174 360.6 +S 1.347(uld disallo).1 F 3.847(wA)-.25 G 1.347(NONYMOUS as A)-3.847 F +1.347(UTH mechanism and w)-.55 F 1.346(ould allo)-.1 F 3.846(wP)-.25 G +(LAIN)-3.846 E .519(and LOGIN only if a security layer \(e.g., pro)174 +372.6 R .519(vided by ST)-.15 F(AR)-.93 E .52(TTLS\) is already ac-)-.6 +F(ti)174 384.6 Q -.15(ve)-.25 G 5.956(.T).15 G .956 +(he options 'a', 'c', ')-5.956 F .956(d', 'f)-.5 F .956 +(', 'p', and 'y' refer to properties of the selected).55 F 1.089 +(SASL mechanisms.)174 396.6 R 1.089 +(Explanations of these properties can be found in the Cyrus)6.089 F +(SASL documentation.)174 408.6 Q 23.39(AuthRealm [no)102 424.8 R 1.434(\ +short name] The authentication realm that is passed to the Cyrus SASL l\ +i-)3.934 F(brary)174 436.8 Q 5(.I)-.65 G 2.5(fn)-5 G 2.5(or)-2.5 G +(ealm is speci\214ed,)-2.5 E F0($j)2.5 E F1(is used.)2.5 E(See also KNO) +5 E(WNB)-.35 E(UGS.)-.1 E(BadRcptThrottle=)102 453 Q/F2 10 +/Times-Italic@0 SF(N)A F1 1.194([no short name] If set and the speci\ +\214ed number of recipients in a single SMTP)174 465 R .596 +(transaction ha)174 477 R .896 -.15(ve b)-.2 H .595 +(een rejected, sleep for one second after each subsequent RCPT).15 F +(command in that transaction.)174 489 Q(BlankSub=)102 505.2 Q F2(c)A F1 +.112([B] Set the blank substitution character to)22.47 F F2(c)2.612 E F1 +5.112(.U)C .113(nquoted spaces in addresses are re-)-5.112 F +(placed by this character)174 517.2 Q 5(.D)-.55 G(ef)-5 E +(aults to space \(i.e., no change is made\).)-.1 E(CA)102 533.4 Q(CertP) +-.4 E 21.16(ath [no)-.15 F .897(short name] P)3.397 F .897 +(ath to directory with certi\214cates of CAs.)-.15 F .896 +(This directory direc-)5.896 F 1.234(tory must contain the hashes of ea\ +ch CA certi\214cate as \214lenames \(or as links to)174 545.4 R(them\).) +174 557.4 Q(CA)102 573.6 Q 23.23(CertFile [no)-.4 F 1.439(short name] F\ +ile containing one or more CA certi\214cates; see section about)3.94 F +(ST)174 585.6 Q(AR)-.93 E(TTLS for more information.)-.6 E +(CertFingerprintAlgorithm)102 601.8 Q .581(Specify the \214ngerprint al\ +gorithm \(digest\) to use for the presented cert.)174 613.8 R .582 +(If the op-)5.582 F .824(tion is not set, md5 is used and the macro)174 +625.8 R F0(${cert_md5})3.323 E F1 .823(contains the cert \214nger)3.323 +F(-)-.2 E 2.552(print. If)174 637.8 R .052(the option is e)2.552 F .052 +(xplicitly set, the speci\214ed algorithm \(e.g., sha1\) is used and) +-.15 F(the macro)174 649.8 Q F0(${cert_fp})2.5 E F1 +(contains the cert \214ngerprint.)2.5 E 26.72(CipherList Specify)102 666 +R 1.06(cipher list for ST)3.56 F(AR)-.93 E 1.06 +(TTLS \(does not apply to TLSv1.3\).)-.6 F(See)6.06 E F2(cipher)3.56 E +(s)-.1 E F1(\(1\))A(for possible v)174 678 Q(alues.)-.25 E 14.51 +(CheckAliases [n])102 694.2 R -1.11(Va)2.5 G (lidate the RHS of aliases when reb)1.11 E(uilding the alias database.) --.2 E(CheckpointInterv)102 168.6 Q(al=)-.25 E F2(N)A F1 1.296 -([C] Checkpoints the queue e)174 180.6 R -.15(ve)-.25 G(ry).15 E F2(N) +-.2 E(CheckpointInterv)102 710.4 Q(al=)-.25 E F2(N)A F1 1.296 +([C] Checkpoints the queue e)174 722.4 R -.15(ve)-.25 G(ry).15 E F2(N) 3.797 E F1(\(def)3.797 E 1.297(ault 10\) addresses sent.)-.1 F 1.297 -(If your system)6.297 F .747(crashes during deli)174 192.6 R -.15(ve) --.25 G .746(ry to a lar).15 F .746(ge list, this pre)-.18 F -.15(ve)-.25 -G .746(nts retransmission to an).15 F 3.246(yb)-.15 G .746(ut the)-3.446 -F(last)174 204.6 Q F2(N)2.5 E F1(recipients.)2.5 E(ClassF)102 220.8 Q -(actor=)-.15 E F2(fact)A F1 1.624([z] The indicated)4.29 F F2(fact)4.124 -E F1 1.624(or is multiplied by the message class \(determined by the)B -.719(Precedence: \214eld in the user header and the)174 232.8 R F0(P) -3.219 E F1 .718(lines in the con\214guration \214le\) and)3.218 F 2.637 -(subtracted from the priority)174 244.8 R 7.637(.T)-.65 G 2.637 -(hus, messages with a higher Priority: will be)-7.637 F -.1(fa)174 256.8 -S -.2(vo)-.1 G 2.5(red. Def).2 F(aults to 1800.)-.1 E 12.27 -(ClientCertFile [no)102 273 R .708(short name] File containing the cert\ -i\214cate of the client, i.e., this certi\214cate is)3.209 F(used when) -174 285 Q F2(sendmail)2.5 E F1(acts as client \(for ST)2.5 E(AR)-.93 E -(TTLS\).)-.6 E(ClientK)102 301.2 Q -.15(ey)-.25 G 13.23(File [no).15 F -.714(short name] File containing the pri)3.214 F -.25(va)-.25 G .714 -(te k).25 F 1.014 -.15(ey b)-.1 H .714 -(elonging to the client certi\214cate).15 F(\(for ST)174 313.2 Q(AR)-.93 -E(TTLS if)-.6 E F2(sendmail)2.5 E F1(runs as client\).)2.5 E -(ClientPortOptions=)102 329.4 Q F2(options)A F1 .355 -([O] Set client SMTP options.)174 341.4 R .355(The options are)5.355 F -F2 -.1(ke)2.855 G(y=value)-.2 E F1 .355(pairs separated by com-)2.855 F -2.5(mas. Kno)174 353.4 R(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G(re:)-2.5 -E 52.83(Port Name/number)214 369.6 R -(of source port for connection \(def)2.5 E(aults to an)-.1 E 2.5(yf)-.15 -G(ree port\))-2.5 E 48.95(Addr Address)214 381.6 R(mask \(def)2.5 E -(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)214 393.6 S 41.31 -(mily Address).15 F -.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E -21.72(SndBufSize Size)214 405.6 R(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 -E 21.17(RcvBufSize Size)214 417.6 R(of TCP recei)2.5 E .3 -.15(ve b)-.25 -H(uf)-.05 E(fer)-.25 E 34.5(Modi\214er Options)214 429.6 R -(\(\215ags\) for the client)2.5 E(The)174 445.8 Q F2(Addr)3.256 E F1 -.756 -(ess mask may be a numeric address in IPv4 dot notation or IPv6 colon)B -1.149(notation or a netw)174 457.8 R 1.149(ork name.)-.1 F 1.149 -(Note that if a netw)6.149 F 1.148(ork name is speci\214ed, only the)-.1 -F .383(\214rst IP address returned for it will be used.)174 469.8 R .383 -(This may cause indeterminate beha)5.383 F(v-)-.2 E 1.485(ior for netw) -174 481.8 R 1.485(ork names that resolv)-.1 F 3.985(et)-.15 G 3.985(om) --3.985 G 1.485(ultiple addresses.)-3.985 F 1.485(Therefore, use of an) -6.485 F(address is recommended.)174 493.8 Q F2(Modi\214er)5 E F1 -(can be the follo)2.5 E(wing character:)-.25 E 67(hu)214 510 S -(se name of interf)-67 E(ace for HELO command)-.1 E 64.78(Ad)214 522 S -(on')-64.78 E 2.5(tu)-.18 G(se A)-2.5 E(UTH when sending e-mail)-.55 E -66.44(Sd)214 534 S(on')-66.44 E 2.5(tu)-.18 G(se ST)-2.5 E(AR)-.93 E -(TTLS when sending e-mail)-.6 E .763(If `)174 550.2 R(`h')-.74 E 3.263 -('i)-.74 G 3.263(ss)-3.263 G .763 -(et, the name corresponding to the outgoing interf)-3.263 F .764 -(ace address \(whether)-.1 F .431 -(chosen via the Connection parameter or the def)174 562.2 R .431 -(ault\) is used for the HELO/EHLO)-.1 F 3.617(command. Ho)174 574.2 R -(we)-.25 E -.15(ve)-.25 G 1.917 -.4(r, t).15 H 1.118 -(he name must not start with a square brack).4 F 1.118(et and it must) --.1 F 1.842(contain at least one dot.)174 586.2 R 1.842 -(This is a simple test whether the name is not an IP)6.842 F .712 -(address \(in square brack)174 598.2 R .713(ets\) b)-.1 F .713 -(ut a quali\214ed hostname.)-.2 F .713(Note that multiple Client-)5.713 -F .344(PortOptions settings are allo)174 610.2 R .343 -(wed in order to gi)-.25 F .643 -.15(ve s)-.25 H .343 -(ettings for each protocol f).15 F(amily)-.1 E .315(\(e.g., one for F) -174 622.2 R .316(amily=inet and one for F)-.15 F 2.816(amily=inet6\). A) --.15 F .316(restriction placed on one)2.816 F -.1(fa)174 634.2 S -(mily only af).1 E(fects outgoing connections on that particular f)-.25 -E(amily)-.1 E(.)-.65 E(ClientSSLOptions)102 650.4 Q 3.496(As)174 662.4 S -.996(pace or comma separated list of SSL related options for the client\ - side.)-3.496 F(See)5.995 E F2(SSL_CTX_set_options)174 674.4 Q F1 .961 -(\(3\) for a list; the a)B -.25(va)-.2 G .961(ilable v).25 F .961 -(alues depend on the OpenSSL)-.25 F -.15(ve)174 686.4 S 5.629(rsion ag) -.15 F 5.629(ainst which)-.05 F F2(sendmail)8.129 E F1 5.629 -(is compiled.)8.129 F 5.628(By def)10.629 F(ault,)-.1 E F2(SSL_OP_ALL) -8.128 E 3.91(SSL_OP_NO_SSLv2 SSL_OP_NO_TICKET -SSL_OP_TLSEXT_P)174 698.4 -R(ADDING)-.9 E F1(are)6.41 E 1.016(used \(if those options are a)174 -710.4 R -.25(va)-.2 G 3.516(ilable\). Options).25 F 1.016 -(can be cleared by preceding them)3.516 F(with a minus sign.)174 722.4 Q -(It is also possible to specify numerical v)5 E(alues, e.g.,)-.25 E F0 -(-0x0010)2.5 E F1(.)A 0 Cg EP +(If your system)6.297 F 0 Cg EP %%Page: 65 61 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-65)195.86 E/F1 10/Times-Roman@0 SF 3.95(ColonOkInAddr [no)102 96 -R 4.679 +(SMM:08-65)195.86 E/F1 10/Times-Roman@0 SF .747(crashes during deli)174 +96 R -.15(ve)-.25 G .746(ry to a lar).15 F .746(ge list, this pre)-.18 F +-.15(ve)-.25 G .746(nts retransmission to an).15 F 3.246(yb)-.15 G .746 +(ut the)-3.446 F(last)174 108 Q/F2 10/Times-Italic@0 SF(N)2.5 E F1 +(recipients.)2.5 E(ClassF)102 124.2 Q(actor=)-.15 E F2(fact)A F1 1.624 +([z] The indicated)4.29 F F2(fact)4.124 E F1 1.624 +(or is multiplied by the message class \(determined by the)B .719 +(Precedence: \214eld in the user header and the)174 136.2 R F0(P)3.219 E +F1 .718(lines in the con\214guration \214le\) and)3.218 F 1.292 +(subtracted from the priority)174 148.2 R 6.292(.T)-.65 G 1.293 +(hus, messages with a higher Priority: will be f)-6.292 F(a-)-.1 E -.2 +(vo)174 160.2 S 2.5(red. Def).2 F(aults to 1800.)-.1 E 12.27 +(ClientCertFile [no)102 176.4 R .708(short name] File containing the ce\ +rti\214cate of the client, i.e., this certi\214cate is)3.209 F +(used when)174 188.4 Q F2(sendmail)2.5 E F1(acts as client \(for ST)2.5 +E(AR)-.93 E(TTLS\).)-.6 E(ClientK)102 204.6 Q -.15(ey)-.25 G 13.23 +(File [no).15 F .714(short name] File containing the pri)3.214 F -.25 +(va)-.25 G .714(te k).25 F 1.014 -.15(ey b)-.1 H .714 +(elonging to the client certi\214cate).15 F(\(for ST)174 216.6 Q(AR)-.93 +E(TTLS if)-.6 E F2(sendmail)2.5 E F1(runs as client\).)2.5 E +(ClientPortOptions=)102 232.8 Q F2(options)A F1 .586 +([no short name] Set client SMTP options.)174 244.8 R .586 +(The options are)5.586 F F2 -.1(ke)3.086 G(y=value)-.2 E F1 .585 +(pairs sepa-)3.085 F(rated by commas.)174 256.8 Q(Kno)5 E(wn k)-.25 E +-.15(ey)-.1 G 2.5(sa).15 G(re:)-2.5 E 52.83(Port Name/number)214 273 R +(of source port for connection \(def)2.5 E(aults to an)-.1 E 2.5(yf)-.15 +G(ree port\))-2.5 E 48.95(Addr Address)214 285 R(mask \(def)2.5 E +(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)214 297 S 41.31(mily Address) +.15 F -.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E 21.72 +(SndBufSize Size)214 309 R(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 E 21.17 +(RcvBufSize Size)214 321 R(of TCP recei)2.5 E .3 -.15(ve b)-.25 H(uf) +-.05 E(fer)-.25 E 34.5(Modi\214er Options)214 333 R +(\(\215ags\) for the client)2.5 E(The)174 349.2 Q F2(Addr)3.256 E F1 +.756 +(ess mask may be a numeric address in IPv4 dot notation or IPv6 colon)B +1.149(notation or a netw)174 361.2 R 1.149(ork name.)-.1 F 1.149 +(Note that if a netw)6.149 F 1.148(ork name is speci\214ed, only the)-.1 +F .383(\214rst IP address returned for it will be used.)174 373.2 R .383 +(This may cause indeterminate beha)5.383 F(v-)-.2 E .197(ior for netw) +174 385.2 R .196(ork names that resolv)-.1 F 2.696(et)-.15 G 2.696(om) +-2.696 G .196(ultiple addresses.)-2.696 F .196(Therefore, use of an ad-) +5.196 F(dress is recommended.)174 397.2 Q F2(Modi\214er)5 E F1 +(can be the follo)2.5 E(wing character:)-.25 E 67(hu)214 413.4 S +(se name of interf)-67 E(ace for HELO command)-.1 E 64.78(Ad)214 425.4 S +(on')-64.78 E 2.5(tu)-.18 G(se A)-2.5 E(UTH when sending e-mail)-.55 E +66.44(Sd)214 437.4 S(on')-66.44 E 2.5(tu)-.18 G(se ST)-2.5 E(AR)-.93 E +(TTLS when sending e-mail)-.6 E .763(If `)174 453.6 R(`h')-.74 E 3.263 +('i)-.74 G 3.263(ss)-3.263 G .763 +(et, the name corresponding to the outgoing interf)-3.263 F .764 +(ace address \(whether)-.1 F .431 +(chosen via the Connection parameter or the def)174 465.6 R .431 +(ault\) is used for the HELO/EHLO)-.1 F 3.617(command. Ho)174 477.6 R +(we)-.25 E -.15(ve)-.25 G 1.917 -.4(r, t).15 H 1.118 +(he name must not start with a square brack).4 F 1.118(et and it must) +-.1 F .836(contain at least one dot.)174 489.6 R .835 +(This is a simple test whether the name is not an IP ad-)5.836 F .326 +(dress \(in square brack)174 501.6 R .326(ets\) b)-.1 F .326 +(ut a quali\214ed hostname.)-.2 F .327(Note that multiple ClientPor) +5.327 F(-)-.2 E 1.501(tOptions settings are allo)174 513.6 R 1.501 +(wed in order to gi)-.25 F 1.801 -.15(ve s)-.25 H 1.501 +(ettings for each protocol f).15 F(amily)-.1 E .315(\(e.g., one for F) +174 525.6 R .316(amily=inet and one for F)-.15 F 2.816(amily=inet6\). A) +-.15 F .316(restriction placed on one)2.816 F -.1(fa)174 537.6 S +(mily only af).1 E(fects outgoing connections on that particular f)-.25 +E(amily)-.1 E(.)-.65 E(ClientSSLOptions)102 553.8 Q 3.496(As)174 565.8 S +.996(pace or comma separated list of SSL related options for the client\ + side.)-3.496 F(See)5.995 E F2(SSL_CTX_set_options)174 577.8 Q F1 .961 +(\(3\) for a list; the a)B -.25(va)-.2 G .961(ilable v).25 F .961 +(alues depend on the OpenSSL)-.25 F -.15(ve)174 589.8 S 5.629(rsion ag) +.15 F 5.629(ainst which)-.05 F F2(sendmail)8.129 E F1 5.629 +(is compiled.)8.129 F 5.628(By def)10.629 F(ault,)-.1 E F2(SSL_OP_ALL) +8.128 E 3.91(SSL_OP_NO_SSLv2 SSL_OP_NO_TICKET -SSL_OP_TLSEXT_P)174 601.8 +R(ADDING)-.9 E F1(are)6.41 E 1.016(used \(if those options are a)174 +613.8 R -.25(va)-.2 G 3.516(ilable\). Options).25 F 1.016 +(can be cleared by preceding them)3.516 F(with a minus sign.)174 625.8 Q +(It is also possible to specify numerical v)5 E(alues, e.g.,)-.25 E F0 +(-0x0010)2.5 E F1(.)A 3.95(ColonOkInAddr [no)102 642 R 4.679 (short name] If set, colons are acceptable in e-mail addresses \(e.g.,) -7.179 F 3.54(\231host:user\232\). If)174 108 R 1.04 +7.179 F 3.54(\231host:user\232\). If)174 654 R 1.04 (not set, colons indicate the be)3.54 F 1.04 -(ginning of a RFC 822 group con-)-.15 F 1.987 -(struct \(\231groupname: member1, member2, ... memberN;\232\).)174 120 R -1.988(Doubled colons are)6.988 F(al)174 132 Q -.1(wa)-.1 G 2.215(ys acc\ -eptable \(\231nodename::user\232\) and proper route-addr nesting is und\ -er).1 F(-)-.2 E 1.036(stood \(\231<@relay:user@host>\232\).)174 144 R -1.037(Furthermore, this option def)6.036 F 1.037(aults on if the con-) --.1 F .854(\214guration v)174 156 R .854(ersion le)-.15 F -.15(ve)-.25 G -3.354(li).15 G 3.354(sl)-3.354 G .853 -(ess than 6 \(for back compatibility\).)-3.354 F(Ho)5.853 E(we)-.25 E --.15(ve)-.25 G 1.653 -.4(r, i).15 H 3.353(tm).4 G(ust)-3.353 E(be of)174 -168 Q 2.5(ff)-.25 G(or full compatibility with RFC 822.)-2.5 E -(ConnectionCacheSize=)102 184.2 Q/F2 10/Times-Italic@0 SF(N)A F1 .242([\ -k] The maximum number of open connections that will be cached at a time\ -.)174 196.2 R(The)5.243 E(def)174 208.2 Q .386(ault is one.)-.1 F .386 -(This delays closing the current connection until either this in)5.386 F --.2(vo)-.4 G(ca-).2 E 1.191(tion of)174 220.2 R F2(sendmail)3.691 E F1 -1.191(needs to connect to another host or it terminates.)3.691 F 1.192 -(Setting it to)6.192 F 2.047(zero def)174 232.2 R 2.047 -(aults to the old beha)-.1 F(vior)-.2 E 4.546(,t)-.4 G 2.046 -(hat is, connections are closed immediately)-4.546 F(.)-.65 E .266(Sinc\ -e this consumes \214le descriptors, the connection cache should be k)174 -244.2 R .266(ept small: 4)-.1 F(is probably a practical maximum.)174 -256.2 Q(ConnectionCacheT)102 272.4 Q(imeout=)-.35 E F2(timeout)A F1 .708 -([K] The maximum amount of time a cached connection will be permitted t\ -o idle)174 284.4 R 1.082(without acti)174 296.4 R(vity)-.25 E 6.082(.I) --.65 G 3.582(ft)-6.082 G 1.083(his time is e)-3.582 F 1.083 -(xceeded, the connection is immediately closed.)-.15 F .418(This v)174 -308.4 R .418(alue should be small \(on the order of ten minutes\).)-.25 -F(Before)5.418 E F2(sendmail)2.918 E F1 .417(uses a)2.917 F .507 -(cached connection, it al)174 320.4 R -.1(wa)-.1 G .508 -(ys sends a RSET command to check the connection; if).1 F .402(this f) -174 332.4 R .402(ails, it reopens the connection.)-.1 F .401(This k) -5.402 F .401(eeps your end from f)-.1 F .401(ailing if the other)-.1 F -1.544(end times out.)174 344.4 R 1.545 -(The point of this option is to be a good netw)6.544 F 1.545 -(ork neighbor and)-.1 F -.2(avo)174 356.4 S(id using up e).2 E(xcessi) --.15 E .3 -.15(ve r)-.25 H(esources on the other end.).15 E(The def)5 E -(ault is \214v)-.1 E 2.5(em)-.15 G(inutes.)-2.5 E(ConnectOnlyT)102 372.6 -Q(o=)-.8 E F2(addr)A(ess)-.37 E F1 .862 -([no short name] This can be used to o)174 384.6 R -.15(ve)-.15 G .861 -(rride the connection address \(for testing).15 F(purposes\).)174 396.6 -Q(ConnectionRateThrottle=)102 412.8 Q F2(N)A F1 .211 -([no short name] If set to a positi)174 424.8 R .511 -.15(ve v)-.25 H -.211(alue, allo)-.1 F 2.711(wn)-.25 G 2.712(om)-2.711 G .212(ore than) --2.712 F F2(N)2.712 E F1 .212(incoming connec-)2.712 F .132 -(tions in a one second period per daemon.)174 436.8 R .132 -(This is intended to \215atten out peaks and)5.132 F(allo)174 448.8 Q -2.5(wt)-.25 G(he load a)-2.5 E -.15(ve)-.2 G(rage checking to cut in.) -.15 E(Def)5 E(aults to zero \(no limits\).)-.1 E(ConnectionRateW)102 465 -Q(indo)-.4 E(wSize=)-.25 E F2(N)A F1 .458 -([no short name] De\214ne the length of the interv)174 477 R .459 -(al for which the number of incom-)-.25 F -(ing connections is maintained.)174 489 Q(The def)5 E -(ault is 60 seconds.)-.1 E(ControlSock)102 505.2 Q(etName=)-.1 E F2 -(name)A F1 .477([no short name] Name of the control sock)174 517.2 R -.476(et for daemon management.)-.1 F 2.976(Ar)5.476 G(unning)-2.976 E F2 -(sendmail)174 529.2 Q F1 1.225 -(daemon can be controlled through this named sock)3.725 F 3.725(et. A) --.1 F -.25(va)-.74 G 1.225(ilable com-).25 F 2.926(mands are:)174 541.2 -R F2 2.926(help, mstat, r)5.426 F 2.926(estart, shutdown,)-.37 F F1(and) -5.426 E F2(status.)5.426 E F1(The)7.926 E F2(status)5.426 E F1(command) -5.426 E .46(returns the current number of daemon children, the maximum \ -number of daemon)174 553.2 R .449 -(children, the free disk space \(in blocks\) of the queue directory)174 -565.2 R 2.949(,a)-.65 G .449(nd the load a)-2.949 F -.15(ve)-.2 G -.2 -(r-).15 G .882(age of the machine e)174 577.2 R .883 -(xpressed as an inte)-.15 F(ger)-.15 E 5.883(.I)-.55 G 3.383(fn)-5.883 G -.883(ot set, no control sock)-3.383 F .883(et will be)-.1 F -.2(av)174 -589.2 S 5.03(ailable. Solaris)-.05 F 2.529(and pre-4.4BSD k)5.029 F -2.529(ernel users should see the note in send-)-.1 F(mail/README .)174 -601.2 Q(CRLFile=)102 617.4 Q F2(name)A F1 .482 -([no short name] Name of \214le that contains certi\214cate re)9.69 F --.2(vo)-.25 G .483(cation status, useful for).2 F .944 -(X.509v3 authentication.)174 629.4 R .943 -(Note: if a CRLFile is speci\214ed b)5.944 F .943 -(ut the \214le is unusable,)-.2 F(ST)174 641.4 Q(AR)-.93 E -(TTLS is disabled.)-.6 E(CRLP)102 657.6 Q(ath=)-.15 E F2(name)A F1 1.848 -([no short name] Name of directory that contains hashes pointing to cer\ -ti\214cate)7.62 F(re)174 669.6 Q -.2(vo)-.25 G 1.161 -(cation status \214les.).2 F 1.161 -(Symbolic links can be generated with the follo)6.161 F 1.16(wing tw) --.25 F(o)-.1 E(\(Bourne\) shell commands:)174 681.6 Q(C=FileName_of_CRL) -214 697.8 Q(ln -s $C `openssl crl -noout -hash < $C`.r0)214 709.8 Q 0 Cg -EP +(ginning of a RFC 822 group con-)-.15 F .316 +(struct \(\231groupname: member1, member2, ... memberN;\232\).)174 666 R +.317(Doubled colons are al-)5.317 F -.1(wa)174 678 S .788(ys acceptable\ + \(\231nodename::user\232\) and proper route-addr nesting is understood) +.1 F 3.771(\(\231<@relay:user@host>\232\). Furthermore,)174 690 R 1.271 +(this option def)3.771 F 1.271(aults on if the con\214gura-)-.1 F .552 +(tion v)174 702 R .552(ersion le)-.15 F -.15(ve)-.25 G 3.052(li).15 G +3.052(sl)-3.052 G .551(ess than 6 \(for back compatibility\).)-3.052 F +(Ho)5.551 E(we)-.25 E -.15(ve)-.25 G 1.351 -.4(r, i).15 H 3.051(tm).4 G +.551(ust be of)-3.051 F(f)-.25 E(for full compatibility with RFC 822.) +174 714 Q 0 Cg EP %%Page: 66 62 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-66 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(DHP)102 -96 Q 10.78(arameters This)-.15 F(option applies to the serv)2.5 E -(er side only)-.15 E 5(.P)-.65 G(ossible v)-5 E(alues are:)-.25 E 139 -(5u)214 112.2 S(se precomputed 512 bit prime.)-139 E 139(1g)214 124.2 S -(enerate 1024 bit prime)-139 E 139(2g)214 136.2 S -(enerate 2048 bit prime.)-139 E 141.22(iu)214 148.2 S -(se included precomputed 2048 bit prime \(def)-141.22 E(ault\).)-.1 E -122.06(none do)214 160.2 R(not use Dif)2.5 E(\214e-Hellman.)-.25 E 95.38 -(/path/to/\214le load)214 172.2 R(prime from \214le.)2.5 E .63 -(This is only required if a ciphersuite containing DSA/DH is used.)174 -188.4 R .63(The def)5.63 F .63(ault is)-.1 F -.74(``)174 200.4 S(i').74 -E 3.407('w)-.74 G .907(hich selects a precomputed, \214x)-3.407 F .907 -(ed 2048 bit prime.)-.15 F .907(If `)5.907 F(`5')-.74 E 3.407('i)-.74 G -3.407(ss)-3.407 G .906(elected, then)-3.407 F .408(precomputed, \214x) -174 212.4 R .408(ed primes are used.)-.15 F .409 -(Note: this option should not be used \(unless)5.408 F .275 -(necessary for compatibility with old implementations\).)174 224.4 R -.274(If `)5.275 F(`1')-.74 E 2.774('o)-.74 G 2.774(r`)-2.774 G(`2') --3.514 E 2.774('i)-.74 G 2.774(ss)-2.774 G(elected,)-2.774 E 1.237 -(then prime v)174 236.4 R 1.237(alues are computed during startup.)-.25 -F 1.238(Note: this operation can tak)6.238 F 3.738(ea)-.1 G 1.649 -(signi\214cant amount of time on a slo)174 248.4 R 4.148(wm)-.25 G 1.648 -(achine \(se)-4.148 F -.15(ve)-.25 G 1.648(ral seconds\), b).15 F 1.648 -(ut it is only)-.2 F 1.857(done once at startup.)174 260.4 R 1.857(If `) -6.857 F(`none')-.74 E 4.357('i)-.74 G 4.357(ss)-4.357 G 1.858 -(elected, then TLS ciphersuites containing)-4.357 F .798 -(DSA/DH cannot be used.)174 272.4 R .797 -(If a \214le name is speci\214ed \(which must be an absolute)5.797 F -.449(path\), then the primes are read from it.)174 284.4 R .45 -(It is recommended to generate such a \214le)5.449 F -(using a command lik)174 296.4 Q 2.5(et)-.1 G(his:)-2.5 E -(openssl dhparam -out /etc/mail/dhparams.pem 2048)358 312.6 Q .054 -(If the \214le is not readable or contains unusable data, the def)174 -328.8 R .054(ault `)-.1 F(`i')-.74 E 2.554('i)-.74 G 2.554(su)-2.554 G -.054(sed instead.)-2.554 F(DaemonPortOptions=)102 345 Q/F2 10 -/Times-Italic@0 SF(options)A F1 .363([O] Set serv)174 357 R .363 -(er SMTP options.)-.15 F .364(Each instance of)5.364 F F0(DaemonP)2.864 -E(ortOptions)-.2 E F1 .364(leads to an)2.864 F(additional incoming sock) -174 369 Q 2.5(et. The)-.1 F(options are)2.5 E F2 -.1(ke)2.5 G(y=value) --.2 E F1 2.5(pairs. Kno)2.5 F(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G -(re:)-2.5 E 45.62(Name User)214 385.2 R -(-de\214nable name for the daemon \(def)-.2 E(aults to "Daemon#"\))-.1 E -52.83(Port Name/number)214 397.2 R(of listening port \(def)2.5 E -(aults to "smtp"\))-.1 E 48.95(Addr Address)214 409.2 R(mask \(def)2.5 E -(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)214 421.2 S 41.31 -(mily Address).15 F -.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E -3.94(InputMailFilters List)214 433.2 R -(of input mail \214lters for the daemon)2.5 E 44.5(Listen Size)214 445.2 -R(of listen queue \(def)2.5 E(aults to 10\))-.1 E 34.5 -(Modi\214er Options)214 457.2 R(\(\215ags\) for the daemon)2.5 E 21.72 -(SndBufSize Size)214 469.2 R(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 E -21.17(RcvBufSize Size)214 481.2 R(of TCP recei)2.5 E .3 -.15(ve b)-.25 H -(uf)-.05 E(fer)-.25 E 36.73(children maximum)214 493.2 R -(number of children per daemon, see)2.5 E F0(MaxDaemonChildr)2.5 E(en) --.18 E F1(.)A(Deli)214 505.2 Q -.15(ve)-.25 G 11.58(ryMode Deli).15 F --.15(ve)-.25 G(ry mode per daemon, see).15 E F0(Deli)2.5 E -.1(ve)-.1 G -(ryMode).1 E F1(.)A 31.74(refuseLA RefuseLA)214 517.2 R(per daemon)2.5 E -34.51(delayLA DelayLA)214 529.2 R(per daemon)2.5 E 32.29 -(queueLA QueueLA)214 541.2 R(per daemon)2.5 E(The)174 557.4 Q F2(Name) -2.681 E F1 -.1(ke)2.681 G 2.681(yi)-.05 G 2.681(su)-2.681 G .181 -(sed for error messages and logging.)-2.681 F(The)5.181 E F2(Addr)2.68 E -F1 .18(ess mask may be)B 2.589(an)174 569.4 S .089 -(umeric address in IPv4 dot notation or IPv6 colon notation, or a netw) --2.589 F .09(ork name,)-.1 F .342(or a path to a local sock)174 581.4 R -2.841(et. Note)-.1 F .341(that if a netw)2.841 F .341 -(ork name is speci\214ed, only the \214rst)-.1 F .084 -(IP address returned for it will be used.)174 593.4 R .085 -(This may cause indeterminate beha)5.085 F .085(vior for)-.2 F(netw)174 -605.4 Q .328(ork names that resolv)-.1 F 2.828(et)-.15 G 2.828(om)-2.828 -G .328(ultiple addresses.)-2.828 F .327(Therefore, use of an address is) -5.327 F 2.92(recommended. The)174 617.4 R F2 -.75(Fa)2.92 G(mily).75 E -F1 -.1(ke)2.92 G 2.92(yd)-.05 G(ef)-2.92 E .42(aults to INET \(IPv4\).) --.1 F .42(IPv6 users who wish to)5.42 F 1.611 -(also accept IPv6 connections should add additional F)174 629.4 R -(amily=inet6)-.15 E F0(DaemonP)4.111 E(or)-.2 E(-)-.37 E(tOptions)174 -641.4 Q F1 2.889(lines. F)2.889 F .389(or a local sock)-.15 F .389 -(et, use F)-.1 F .389(amily=local or F)-.15 F 2.889(amily=unix. The)-.15 -F F2(Input-)2.89 E(MailF)174 653.4 Q(ilter)-.45 E(s)-.1 E F1 -.1(ke)3.34 -G 3.34(yo)-.05 G -.15(ve)-3.49 G .84(rrides the def).15 F .84 -(ault list of input mail \214lters listed in the)-.1 F F0(Input-)3.34 E -(MailFilters)174 665.4 Q F1 2.955(option. If)2.955 F .455 -(multiple input mail \214lters are required, the)2.955 F 2.955(ym)-.15 G -.455(ust be sepa-)-2.955 F 2.065(rated by semicolons \(not commas\).)174 -677.4 R F2(Modi\214er)7.065 E F1 2.064(can be a sequence \(without an) -4.565 F(y)-.15 E(delimiters\) of the follo)174 689.4 Q(wing characters:) --.25 E 0 Cg EP +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(ConnectionCacheSize=)102 96 Q/F2 10/Times-Italic@0 SF(N)A F1 .242([k] \ +The maximum number of open connections that will be cached at a time.) +174 108 R(The)5.243 E(def)174 120 Q .386(ault is one.)-.1 F .386 +(This delays closing the current connection until either this in)5.386 F +-.2(vo)-.4 G(ca-).2 E 1.191(tion of)174 132 R F2(sendmail)3.691 E F1 +1.191(needs to connect to another host or it terminates.)3.691 F 1.192 +(Setting it to)6.192 F 2.047(zero def)174 144 R 2.047 +(aults to the old beha)-.1 F(vior)-.2 E 4.546(,t)-.4 G 2.046 +(hat is, connections are closed immediately)-4.546 F(.)-.65 E .266(Sinc\ +e this consumes \214le descriptors, the connection cache should be k)174 +156 R .266(ept small: 4)-.1 F(is probably a practical maximum.)174 168 Q +(ConnectionCacheT)102 184.2 Q(imeout=)-.35 E F2(timeout)A F1 .708([K] T\ +he maximum amount of time a cached connection will be permitted to idle) +174 196.2 R 1.082(without acti)174 208.2 R(vity)-.25 E 6.082(.I)-.65 G +3.582(ft)-6.082 G 1.083(his time is e)-3.582 F 1.083 +(xceeded, the connection is immediately closed.)-.15 F .418(This v)174 +220.2 R .418(alue should be small \(on the order of ten minutes\).)-.25 +F(Before)5.418 E F2(sendmail)2.918 E F1 .417(uses a)2.917 F .507 +(cached connection, it al)174 232.2 R -.1(wa)-.1 G .508 +(ys sends a RSET command to check the connection; if).1 F .402(this f) +174 244.2 R .402(ails, it reopens the connection.)-.1 F .401(This k) +5.402 F .401(eeps your end from f)-.1 F .401(ailing if the other)-.1 F +1.544(end times out.)174 256.2 R 1.545 +(The point of this option is to be a good netw)6.544 F 1.545 +(ork neighbor and)-.1 F -.2(avo)174 268.2 S(id using up e).2 E(xcessi) +-.15 E .3 -.15(ve r)-.25 H(esources on the other end.).15 E(The def)5 E +(ault is \214v)-.1 E 2.5(em)-.15 G(inutes.)-2.5 E(ConnectOnlyT)102 284.4 +Q(o=)-.8 E F2(addr)A(ess)-.37 E F1 .862 +([no short name] This can be used to o)174 296.4 R -.15(ve)-.15 G .861 +(rride the connection address \(for testing).15 F(purposes\).)174 308.4 +Q(ConnectionRateThrottle=)102 324.6 Q F2(N)A F1 .211 +([no short name] If set to a positi)174 336.6 R .511 -.15(ve v)-.25 H +.211(alue, allo)-.1 F 2.711(wn)-.25 G 2.712(om)-2.711 G .212(ore than) +-2.712 F F2(N)2.712 E F1 .212(incoming connec-)2.712 F .132 +(tions in a one second period per daemon.)174 348.6 R .132 +(This is intended to \215atten out peaks and)5.132 F(allo)174 360.6 Q +2.5(wt)-.25 G(he load a)-2.5 E -.15(ve)-.2 G(rage checking to cut in.) +.15 E(Def)5 E(aults to zero \(no limits\).)-.1 E(ConnectionRateW)102 +376.8 Q(indo)-.4 E(wSize=)-.25 E F2(N)A F1 .458 +([no short name] De\214ne the length of the interv)174 388.8 R .459 +(al for which the number of incom-)-.25 F +(ing connections is maintained.)174 400.8 Q(The def)5 E +(ault is 60 seconds.)-.1 E(ControlSock)102 417 Q(etName=)-.1 E F2(name)A +F1 .477([no short name] Name of the control sock)174 429 R .476 +(et for daemon management.)-.1 F 2.976(Ar)5.476 G(unning)-2.976 E F2 +(sendmail)174 441 Q F1 1.225 +(daemon can be controlled through this named sock)3.725 F 3.725(et. A) +-.1 F -.25(va)-.74 G 1.225(ilable com-).25 F 1.424(mands are:)174 453 R +F2 1.424(help, mstat, r)3.924 F 1.424(estart, shutdown,)-.37 F F1(and) +3.924 E F2(status.)3.924 E F1(The)6.423 E F2(status)3.923 E F1 1.423 +(command re-)3.923 F 1.166(turns the current number of daemon children,\ + the maximum number of daemon)174 465 R .449 +(children, the free disk space \(in blocks\) of the queue directory)174 +477 R 2.949(,a)-.65 G .449(nd the load a)-2.949 F -.15(ve)-.2 G -.2(r-) +.15 G .882(age of the machine e)174 489 R .883(xpressed as an inte)-.15 +F(ger)-.15 E 5.883(.I)-.55 G 3.383(fn)-5.883 G .883 +(ot set, no control sock)-3.383 F .883(et will be)-.1 F -.2(av)174 501 S +5.03(ailable. Solaris)-.05 F 2.529(and pre-4.4BSD k)5.029 F 2.529 +(ernel users should see the note in send-)-.1 F(mail/README .)174 513 Q +(CRLFile=)102 529.2 Q F2(name)A F1 .482 +([no short name] Name of \214le that contains certi\214cate re)9.69 F +-.2(vo)-.25 G .483(cation status, useful for).2 F .944 +(X.509v3 authentication.)174 541.2 R .943 +(Note: if a CRLFile is speci\214ed b)5.944 F .943 +(ut the \214le is unusable,)-.2 F(ST)174 553.2 Q(AR)-.93 E +(TTLS is disabled.)-.6 E(CRLP)102 569.4 Q(ath=)-.15 E F2(name)A F1 .561 +([no short name] Name of directory that contains hashes pointing to cer\ +ti\214cate re-)7.62 F -.2(vo)174 581.4 S 1.845(cation status \214les.).2 +F 1.844(Symbolic links can be generated with the follo)6.845 F 1.844 +(wing tw)-.25 F(o)-.1 E(\(Bourne\) shell commands:)174 593.4 Q +(C=FileName_of_CRL)214 609.6 Q +(ln -s $C `openssl crl -noout -hash < $C`.r0)214 621.6 Q(DHP)102 642 Q +10.78(arameters This)-.15 F(option applies to the serv)2.5 E +(er side only)-.15 E 5(.P)-.65 G(ossible v)-5 E(alues are:)-.25 E 0 Cg +EP %%Page: 67 63 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-67)195.86 E/F1 10/Times-Roman@0 SF 67.56(aa)214 96 S -.1(lwa) --67.56 G(ys require A).1 E(UTH)-.55 E 67(bb)214 108 S(ind to interf)-67 -E(ace through which mail has been recei)-.1 E -.15(ve)-.25 G(d).15 E -67.56(cp)214 120 S(erform hostname canoni\214cation \(.cf\))-67.56 E -68.67(fr)214 132 S(equire fully quali\214ed hostname \(.cf\))-68.67 E -68.11(sR)214 144 S(un smtps \(SMTP o)-68.11 E -.15(ve)-.15 G 2.5(rS).15 -G(SL\) instead of smtp)-2.5 E 67(ua)214 156 S(llo)-67 E 2.5(wu)-.25 G +(SMM:08-67)195.86 E/F1 10/Times-Roman@0 SF 139(5u)214 96 S +(se precomputed 512 bit prime.)-139 E 139(1g)214 108 S +(enerate 1024 bit prime)-139 E 139(2g)214 120 S(enerate 2048 bit prime.) +-139 E 141.22(iu)214 132 S(se included precomputed 2048 bit prime \(def) +-141.22 E(ault\).)-.1 E 122.06(none do)214 144 R(not use Dif)2.5 E +(\214e-Hellman.)-.25 E 95.38(/path/to/\214le load)214 156 R +(prime from \214le.)2.5 E .63 +(This is only required if a ciphersuite containing DSA/DH is used.)174 +172.2 R .63(The def)5.63 F .63(ault is)-.1 F -.74(``)174 184.2 S(i').74 +E 3.407('w)-.74 G .907(hich selects a precomputed, \214x)-3.407 F .907 +(ed 2048 bit prime.)-.15 F .907(If `)5.907 F(`5')-.74 E 3.407('i)-.74 G +3.407(ss)-3.407 G .906(elected, then)-3.407 F .408(precomputed, \214x) +174 196.2 R .408(ed primes are used.)-.15 F .409 +(Note: this option should not be used \(unless)5.408 F .275 +(necessary for compatibility with old implementations\).)174 208.2 R +.274(If `)5.275 F(`1')-.74 E 2.774('o)-.74 G 2.774(r`)-2.774 G(`2') +-3.514 E 2.774('i)-.74 G 2.774(ss)-2.774 G(elected,)-2.774 E 1.237 +(then prime v)174 220.2 R 1.237(alues are computed during startup.)-.25 +F 1.238(Note: this operation can tak)6.238 F 3.738(ea)-.1 G 1.649 +(signi\214cant amount of time on a slo)174 232.2 R 4.148(wm)-.25 G 1.648 +(achine \(se)-4.148 F -.15(ve)-.25 G 1.648(ral seconds\), b).15 F 1.648 +(ut it is only)-.2 F 1.857(done once at startup.)174 244.2 R 1.857(If `) +6.857 F(`none')-.74 E 4.357('i)-.74 G 4.357(ss)-4.357 G 1.858 +(elected, then TLS ciphersuites containing)-4.357 F .798 +(DSA/DH cannot be used.)174 256.2 R .797 +(If a \214le name is speci\214ed \(which must be an absolute)5.797 F +.449(path\), then the primes are read from it.)174 268.2 R .45 +(It is recommended to generate such a \214le)5.449 F +(using a command lik)174 280.2 Q 2.5(et)-.1 G(his:)-2.5 E +(openssl dhparam -out /etc/mail/dhparams.pem 2048)358 296.4 Q +(If the \214le is not readable or contains unusable data, the def)174 +312.6 Q(ault `)-.1 E(`i')-.74 E 2.5('i)-.74 G 2.5(su)-2.5 G +(sed instead.)-2.5 E(DaemonPortOptions=)102 328.8 Q/F2 10/Times-Italic@0 +SF(options)A F1 .364([O] Set serv)174 340.8 R .364(er SMTP options.)-.15 +F .364(Each instance of)5.364 F F0(DaemonP)2.863 E(ortOptions)-.2 E F1 +.363(leads to an)2.863 F(additional incoming sock)174 352.8 Q 2.5 +(et. The)-.1 F(options are)2.5 E F2 -.1(ke)2.5 G(y=value)-.2 E F1 2.5 +(pairs. Kno)2.5 F(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G(re:)-2.5 E +45.62(Name User)214 369 R(-de\214nable name for the daemon \(def)-.2 E +(aults to "Daemon#"\))-.1 E 52.83(Port Name/number)214 381 R +(of listening port \(def)2.5 E(aults to "smtp"\))-.1 E 48.95 +(Addr Address)214 393 R(mask \(def)2.5 E(aults IN)-.1 E(ADDR_ANY\))-.35 +E -.15(Fa)214 405 S 41.31(mily Address).15 F -.1(fa)2.5 G(mily \(def).1 +E(aults to INET\))-.1 E 3.94(InputMailFilters List)214 417 R +(of input mail \214lters for the daemon)2.5 E 44.5(Listen Size)214 429 R +(of listen queue \(def)2.5 E(aults to 10\))-.1 E 34.5 +(Modi\214er Options)214 441 R(\(\215ags\) for the daemon)2.5 E 21.72 +(SndBufSize Size)214 453 R(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 E 21.17 +(RcvBufSize Size)214 465 R(of TCP recei)2.5 E .3 -.15(ve b)-.25 H(uf) +-.05 E(fer)-.25 E 36.73(children maximum)214 477 R +(number of children per daemon, see)2.5 E F0(MaxDaemonChildr)2.5 E(en) +-.18 E F1(.)A(Deli)214 489 Q -.15(ve)-.25 G 11.58(ryMode Deli).15 F -.15 +(ve)-.25 G(ry mode per daemon, see).15 E F0(Deli)2.5 E -.1(ve)-.1 G +(ryMode).1 E F1(.)A 31.74(refuseLA RefuseLA)214 501 R(per daemon)2.5 E +34.51(delayLA DelayLA)214 513 R(per daemon)2.5 E 32.29(queueLA QueueLA) +214 525 R(per daemon)2.5 E(The)174 541.2 Q F2(Name)2.68 E F1 -.1(ke)2.68 +G 2.68(yi)-.05 G 2.68(su)-2.68 G .181 +(sed for error messages and logging.)-2.68 F(The)5.181 E F2(Addr)2.681 E +F1 .181(ess mask may be)B 2.59(an)174 553.2 S .089 +(umeric address in IPv4 dot notation or IPv6 colon notation, or a netw) +-2.59 F .089(ork name,)-.1 F .341(or a path to a local sock)174 565.2 R +2.841(et. Note)-.1 F .341(that if a netw)2.841 F .341 +(ork name is speci\214ed, only the \214rst)-.1 F .085 +(IP address returned for it will be used.)174 577.2 R .084 +(This may cause indeterminate beha)5.085 F .084(vior for)-.2 F(netw)174 +589.2 Q .327(ork names that resolv)-.1 F 2.827(et)-.15 G 2.827(om)-2.827 +G .327(ultiple addresses.)-2.827 F .328(Therefore, use of an address is) +5.328 F 2.92(recommended. The)174 601.2 R F2 -.75(Fa)2.92 G(mily).75 E +F1 -.1(ke)2.92 G 2.92(yd)-.05 G(ef)-2.92 E .42(aults to INET \(IPv4\).) +-.1 F .42(IPv6 users who wish to)5.42 F 1.611 +(also accept IPv6 connections should add additional F)174 613.2 R +(amily=inet6)-.15 E F0(DaemonP)4.112 E(or)-.2 E(-)-.37 E(tOptions)174 +625.2 Q F1 2.889(lines. F)2.89 F .389(or a local sock)-.15 F .389 +(et, use F)-.1 F .389(amily=local or F)-.15 F 2.889(amily=unix. The)-.15 +F F2(Input-)2.889 E(MailF)174 637.2 Q(ilter)-.45 E(s)-.1 E F1 -.1(ke) +3.34 G 3.34(yo)-.05 G -.15(ve)-3.49 G .84(rrides the def).15 F .84 +(ault list of input mail \214lters listed in the)-.1 F F0(Input-)3.34 E +(MailFilters)174 649.2 Q F1 2.955(option. If)2.955 F .455 +(multiple input mail \214lters are required, the)2.955 F 2.955(ym)-.15 G +.455(ust be sepa-)-2.955 F .62(rated by semicolons \(not commas\).)174 +661.2 R F2(Modi\214er)5.62 E F1 .62(can be a sequence \(without an)3.12 +F 3.12(yd)-.15 G(e-)-3.12 E(limiters\) of the follo)174 673.2 Q +(wing characters:)-.25 E 0 Cg EP +%%Page: 68 64 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-68 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 67.56(aa) +214 96 S -.1(lwa)-67.56 G(ys require A).1 E(UTH)-.55 E 67(bb)214 108 S +(ind to interf)-67 E(ace through which mail has been recei)-.1 E -.15 +(ve)-.25 G(d).15 E 67.56(cp)214 120 S +(erform hostname canoni\214cation \(.cf\))-67.56 E 68.67(fr)214 132 S +(equire fully quali\214ed hostname \(.cf\))-68.67 E 68.11(sR)214 144 S +(un smtps \(SMTP o)-68.11 E -.15(ve)-.15 G 2.5(rS).15 G +(SL\) instead of smtp)-2.5 E 67(ua)214 156 S(llo)-67 E 2.5(wu)-.25 G (nquali\214ed addresses \(.cf\))-2.5 E 64.78(Ad)214 168 S(isable A) -64.78 E(UTH \(o)-.55 E -.15(ve)-.15 G(rrides 'a' modi\214er\)).15 E 65.33(Cd)214 180 S(on')-65.33 E 2.5(tp)-.18 G @@ -5844,338 +5940,335 @@ G(SL\) instead of smtp)-2.5 E 67(ua)214 156 S(llo)-67 E 2.5(wu)-.25 G -65.89 E 2.5(wE)-.25 G(TRN \(see RFC 2476\))-2.5 E 64.78(Oo)214 204 S (ptional; if opening the sock)-64.78 E(et f)-.1 E(ails ignore it)-.1 E 66.44(Sd)214 216 S(on')-66.44 E 2.5(to)-.18 G -.25(ff)-2.5 G(er ST).25 E -(AR)-.93 E(TTLS)-.6 E 2.412(That is, one w)174 232.2 R 2.413 +(AR)-.93 E(TTLS)-.6 E 1.181(That is, one w)174 232.2 R 1.181 (ay to specify a message submission agent \(MSA\) that al)-.1 F -.1(wa) --.1 G(ys).1 E(requires A)174 244.2 Q(UTH is:)-.55 E 2.5(OD)214 260.4 S -(aemonPortOptions=Name=MSA, Port=587, M=Ea)-2.5 E .244 +-.1 G 1.18(ys re-).1 F(quires A)174 244.2 Q(UTH is:)-.55 E 2.5(OD)214 +260.4 S(aemonPortOptions=Name=MSA, Port=587, M=Ea)-2.5 E .243 (The modi\214ers that are mark)174 276.6 R .244(ed with "\(.cf\)" ha)-.1 F .544 -.15(ve o)-.2 H .244(nly ef).15 F .244 (fect in the standard con\214g-)-.25 F .16(uration \214le, in which the) 174 288.6 R 2.66(ya)-.15 G .16(re a)-2.66 F -.25(va)-.2 G .16 (ilable via).25 F F0(${daemon_\215ags})2.66 E F1 5.16(.N)C .16 -(otice: Do)-5.16 F F0(not)2.66 E F1(use)2.66 E .461(the `)174 300.6 R -(`a')-.74 E 2.961('m)-.74 G .461(odi\214er on a public accessible MT) --2.961 F 2.961(A! It)-.93 F .46(should only be used for a MSA)2.961 F -2.553(that is accessed by authorized users for initial mail submission.) -174 312.6 R 2.553(Users must)7.553 F 1.141 -(authenticate to use a MSA which has this option turned on.)174 324.6 R -1.14(The \215ags `)6.14 F(`c')-.74 E 3.64('a)-.74 G(nd)-3.64 E -.74(``) -174 336.6 S(C').74 E 3.785('c)-.74 G 1.285(an change the def)-3.785 F -1.286(ault for hostname canoni\214cation in the)-.1 F/F2 10 -/Times-Italic@0 SF(sendmail.cf)3.786 E F1(\214le.)3.786 E .765 -(See the rele)174 348.6 R -.25(va)-.25 G .765(nt documentation for).25 F -/F3 9/Times-Roman@0 SF(FEA)3.265 E(TURE\(nocanonify\))-.999 E F1 5.765 -(.T)C .765(he modi\214er `)-5.765 F -1.95(`f ')-.74 F 3.264('d)-.74 G -(is-)-3.264 E(allo)174 360.6 Q .794(ws addresses of the form)-.25 F F0 -(user@host)3.294 E F1 .795(unless the)3.295 F 3.295(ya)-.15 G .795 -(re submitted directly)-3.295 F 5.795(.T)-.65 G(he)-5.795 E 2.127 -(\215ag `)174 372.6 R(`u')-.74 E 4.627('a)-.74 G(llo)-4.627 E 2.127 +(otice: Do)-5.16 F F0(not)2.66 E F1(use)2.66 E .46(the `)174 300.6 R +(`a')-.74 E 2.96('m)-.74 G .46(odi\214er on a public accessible MT)-2.96 +F 2.961(A! It)-.93 F .461(should only be used for a MSA)2.961 F 1.068 +(that is accessed by authorized users for initial mail submission.)174 +312.6 R 1.067(Users must au-)6.067 F .293 +(thenticate to use a MSA which has this option turned on.)174 324.6 R +.294(The \215ags `)5.294 F(`c')-.74 E 2.794('a)-.74 G .294(nd `)-2.794 F +(`C')-.74 E(')-.74 E .083(can change the def)174 336.6 R .083 +(ault for hostname canoni\214cation in the)-.1 F/F2 10/Times-Italic@0 SF +(sendmail.cf)2.582 E F1 2.582(\214le. See)2.582 F(the)2.582 E(rele)174 +348.6 Q -.25(va)-.25 G .093(nt documentation for).25 F/F3 9 +/Times-Roman@0 SF(FEA)2.593 E(TURE\(nocanonify\))-.999 E F1 5.093(.T)C +.093(he modi\214er `)-5.093 F -1.95(`f ')-.74 F 2.593('d)-.74 G(isallo) +-2.593 E .093(ws ad-)-.25 F .809(dresses of the form)174 360.6 R F0 +(user@host)3.309 E F1 .808(unless the)3.308 F 3.308(ya)-.15 G .808 +(re submitted directly)-3.308 F 5.808(.T)-.65 G .808(he \215ag `)-5.808 +F(`u')-.74 E(')-.74 E(allo)174 372.6 Q .702 (ws unquali\214ed sender addresses, i.e., those without @host.)-.25 F --.74(``)7.127 G(b').74 E(')-.74 E 2.791 -(forces sendmail to bind to the interf)174 384.6 R 2.791 -(ace through which the e-mail has been)-.1 F(recei)174 396.6 Q -.15(ve) --.25 G 4.369(df).15 G 1.869(or the outgoing connection.)-4.369 F F0 -1.2 -(WA)6.869 G(RNING:)1.2 E F1 1.869(Use `)4.369 F(`b')-.74 E 4.369('o)-.74 -G 1.869(nly if outgoing)-4.369 F .517 -(mail can be routed through the incoming connection')174 408.6 R 3.017 -(si)-.55 G(nterf)-3.017 E .518(ace to its destination.)-.1 F .119(No at\ -tempt is made to catch problems due to a miscon\214guration of this par\ -ameter)174 420.6 R(,)-.4 E 1.177 -(use it only for virtual hosting where each virtual interf)174 432.6 R -1.177(ace can connect to e)-.1 F -.15(ve)-.25 G(ry).15 E 2.002 -(possible location.)174 444.6 R 2.001(This will also o)7.001 F -.15(ve) --.15 G 2.001(rride possible settings via).15 F F0(ClientP)4.501 E -(ortOp-)-.2 E(tions.)174 456.6 Q F1(Note,)5.248 E F2(sendmail)2.748 E F1 -.248(will listen on a ne)2.748 F 2.749(ws)-.25 G(ock)-2.749 E .249 -(et for each occurrence of the)-.1 F F0(Dae-)2.749 E(monP)174 468.6 Q -(ortOptions)-.2 E F1 .838(option in a con\214guration \214le.)3.338 F -.838(The modi\214er `)5.838 F(`O')-.74 E 3.338('c)-.74 G .838 -(auses send-)-3.338 F 1.417(mail to ignore a sock)174 480.6 R 1.417 -(et if it can')-.1 F 3.917(tb)-.18 G 3.917(eo)-3.917 G 3.917 -(pened. This)-3.917 F 1.418(applies to f)3.918 F 1.418(ailures from the) --.1 F(sock)174 492.6 Q(et\(2\) and bind\(2\) calls.)-.1 E(Def)102 508.8 -Q 2.95(aultAuthInfo [no)-.1 F .181 -(short name] Filename that contains def)2.681 F .181 -(ault authentication information for out-)-.1 F 1.737(going connections\ -. This \214le must contain the user id, the authorization id, the)174 -520.8 R(passw)174 532.8 Q 1.562(ord \(plain te)-.1 F 1.561 +-.74(``)5.702 G(b').74 E 3.202('f)-.74 G .702(orces send-)-3.202 F .993 +(mail to bind to the interf)174 384.6 R .993 +(ace through which the e-mail has been recei)-.1 F -.15(ve)-.25 G 3.492 +(df).15 G .992(or the)-3.492 F .626(outgoing connection.)174 396.6 R F0 +-1.2(WA)5.626 G(RNING:)1.2 E F1 .626(Use `)3.126 F(`b')-.74 E 3.126('o) +-.74 G .627(nly if outgoing mail can be routed)-3.126 F .163 +(through the incoming connection')174 408.6 R 2.663(si)-.55 G(nterf) +-2.663 E .163(ace to its destination. No attempt is made)-.1 F .502 +(to catch problems due to a miscon\214guration of this parameter)174 +420.6 R 3.002(,u)-.4 G .502(se it only for vir)-3.002 F(-)-.2 E 1.113 +(tual hosting where each virtual interf)174 432.6 R 1.113 +(ace can connect to e)-.1 F -.15(ve)-.25 G 1.112(ry possible location.) +.15 F .859(This will also o)174 444.6 R -.15(ve)-.15 G .859 +(rride possible settings via).15 F F0(ClientP)3.359 E(ortOptions.)-.2 E +F1(Note,)5.859 E F2(sendmail)3.359 E F1 .885(will listen on a ne)174 +456.6 R 3.385(ws)-.25 G(ock)-3.385 E .885(et for each occurrence of the) +-.1 F F0(DaemonP)3.385 E(ortOptions)-.2 E F1(op-)3.385 E .36 +(tion in a con\214guration \214le.)174 468.6 R .36(The modi\214er `)5.36 +F(`O')-.74 E 2.86('c)-.74 G .36(auses sendmail to ignore a sock)-2.86 F +(et)-.1 E(if it can')174 480.6 Q 2.5(tb)-.18 G 2.5(eo)-2.5 G 2.5 +(pened. This)-2.5 F(applies to f)2.5 E(ailures from the sock)-.1 E +(et\(2\) and bind\(2\) calls.)-.1 E(Def)102 496.8 Q 2.95 +(aultAuthInfo [no)-.1 F .181(short name] Filename that contains def) +2.681 F .181(ault authentication information for out-)-.1 F 1.737(going\ + connections. This \214le must contain the user id, the authorization i\ +d, the)174 508.8 R(passw)174 520.8 Q 1.562(ord \(plain te)-.1 F 1.561 (xt\), the realm and the list of mechanisms to use on separate)-.15 F .287(lines and must be readable by root \(or the trusted user\) only)174 -544.8 R 5.288(.I)-.65 G 2.788(fn)-5.288 G 2.788(or)-2.788 G .288 -(ealm is speci-)-2.788 F(\214ed,)174 556.8 Q F0($j)3.705 E F1 1.205 +532.8 R 5.288(.I)-.65 G 2.788(fn)-5.288 G 2.788(or)-2.788 G .288 +(ealm is speci-)-2.788 F(\214ed,)174 544.8 Q F0($j)3.705 E F1 1.205 (is used.)3.705 F 1.205(If no mechanisms are speci\214ed, the list gi) 6.205 F -.15(ve)-.25 G 3.704(nb).15 G(y)-3.704 E F0 -.5(Au)3.704 G -(thMecha-).5 E(nisms)174 568.8 Q F1 1.371(is used.)3.871 F 1.372 +(thMecha-).5 E(nisms)174 556.8 Q F1 1.371(is used.)3.871 F 1.372 (Notice: this option is deprecated and will be remo)6.371 F -.15(ve)-.15 -G 3.872(di).15 G 3.872(nf)-3.872 G(uture)-3.872 E -.15(ve)174 580.8 S +G 3.872(di).15 G 3.872(nf)-3.872 G(uture)-3.872 E -.15(ve)174 568.8 S 3.411(rsions. Moreo).15 F -.15(ve)-.15 G 1.711 -.4(r, i).15 H 3.411(td) .4 G(oesn')-3.411 E 3.411(tw)-.18 G .911(ork for the MSP since it can') -3.511 F 3.41(tr)-.18 G .91(ead the \214le \(the)-3.41 F .014 -(\214le must not be group/w)174 592.8 R .014(orld-readable otherwise)-.1 +(\214le must not be group/w)174 580.8 R .014(orld-readable otherwise)-.1 F F2(sendmail)2.514 E F1 .014(will complain\).)2.514 F .014(Use the) -5.014 F 1.2(authinfo ruleset instead which pro)174 604.8 R 1.2 +5.014 F 1.2(authinfo ruleset instead which pro)174 592.8 R 1.2 (vides more control o)-.15 F -.15(ve)-.15 G 3.7(rt).15 G 1.2 -(he usage of the data)-3.7 F(an)174 616.8 Q(yw)-.15 E(ay)-.1 E(.)-.65 E -(Def)102 633 Q(aultCharSet=)-.1 E F2 -.15(ch)C(ar).15 E(set)-.1 E F1 .16 -([no short name] When a message that has 8-bit characters b)174 645 R -.161(ut is not in MIME for)-.2 F(-)-.2 E .495(mat is con)174 657 R -.15 +(he usage of the data)-3.7 F(an)174 604.8 Q(yw)-.15 E(ay)-.1 E(.)-.65 E +(Def)102 621 Q(aultCharSet=)-.1 E F2 -.15(ch)C(ar).15 E(set)-.1 E F1 .16 +([no short name] When a message that has 8-bit characters b)174 633 R +.161(ut is not in MIME for)-.2 F(-)-.2 E .495(mat is con)174 645 R -.15 (ve)-.4 G .495 (rted to MIME \(see the EightBitMode option\) a character set must be) -.15 F .487(included in the Content-T)174 669 R .487(ype: header)-.8 F +.15 F .487(included in the Content-T)174 657 R .487(ype: header)-.8 F 5.487(.T)-.55 G .488(his character set is normally set from the)-5.487 F -.133(Charset= \214eld of the mailer descriptor)174 681 R 5.133(.I)-.55 G +.133(Charset= \214eld of the mailer descriptor)174 669 R 5.133(.I)-.55 G 2.633(ft)-5.133 G .133(hat is not set, the v)-2.633 F .133 -(alue of this option is)-.25 F 2.5(used. If)174 693 R +(alue of this option is)-.25 F 2.5(used. If)174 681 R (this option is not set, the v)2.5 E(alue \231unkno)-.25 E -(wn-8bit\232 is used.)-.25 E(DataFileBuf)102 709.2 Q(ferSize=)-.25 E F2 -(thr)A(eshold)-.37 E F1 .011([no short name] Set the)174 721.2 R F2(thr) +(wn-8bit\232 is used.)-.25 E(DataFileBuf)102 697.2 Q(ferSize=)-.25 E F2 +(thr)A(eshold)-.37 E F1 .011([no short name] Set the)174 709.2 R F2(thr) 2.511 E(eshold)-.37 E F1 2.511(,i)C 2.512(nb)-2.511 G .012 -(ytes, before a memory-based queue data \214le)-2.512 F 0 Cg EP -%%Page: 68 64 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-68 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(becomes disk-based.)174 96 Q(The def)5 E(ault is 4096 bytes.)-.1 E -(DeadLetterDrop=)102 112.2 Q/F2 10/Times-Italic@0 SF(\214le)A F1 .535([\ -no short name] De\214nes the location of the system-wide dead.letter \ -\214le, formerly)174 124.2 R .743(hardcoded to /usr/tmp/dead.letter)174 -136.2 R 5.743(.I)-.55 G 3.243(ft)-5.743 G .744 -(his option is not set \(the def)-3.243 F .744(ault\), sendmail)-.1 F -1.465(will not attempt to sa)174 148.2 R 1.764 -.15(ve t)-.2 H 3.964 -(oas).15 G 1.464(ystem-wide dead.letter \214le in the e)-3.964 F -.15 -(ve)-.25 G 1.464(nt it cannot).15 F .575 -(bounce the mail to the user or postmaster)174 160.2 R 5.575(.I)-.55 G -.575(nstead, it will rename the qf \214le as it)-5.575 F -(has in the past when the dead.letter \214le could not be opened.)174 -172.2 Q(Def)102 188.4 Q(aultUser=)-.1 E F2(user:gr)A(oup)-.45 E F1 .014 -([u] Set the def)174 200.4 R .014(ault userid for mailers to)-.1 F F2 -(user:gr)2.513 E(oup)-.45 E F1 5.013(.I)C(f)-5.013 E F2(gr)2.513 E(oup) --.45 E F1 .013(is omitted and)2.513 F F2(user)2.513 E F1(is)2.513 E -4.306(au)174 212.4 S 1.807 -(ser name \(as opposed to a numeric user id\) the def)-4.306 F 1.807 -(ault group listed in the)-.1 F 1.153 -(/etc/passwd \214le for that user is used as the def)174 224.4 R 1.153 -(ault group.)-.1 F(Both)6.153 E F2(user)3.653 E F1(and)3.652 E F2(gr) -3.652 E(oup)-.45 E F1 1.152(may be numeric.)174 236.4 R 1.152 -(Mailers without the)6.152 F F2(S)3.652 E F1 1.152 -(\215ag in the mailer de\214nition will run as)3.652 F .142(this user) -174 250.4 R 5.142(.D)-.55 G(ef)-5.142 E .142(aults to 1:1.)-.1 F .142 -(The v)5.142 F .142(alue can also be gi)-.25 F -.15(ve)-.25 G 2.642(na) -.15 G 2.642(sas)-2.642 G .142(ymbolic user name.)-2.642 F/F3 7 -/Times-Roman@0 SF(19)-4 I F1(DelayLA=)102 266.6 Q F2(LA)A F1 .996 -([no short name] When the system load a)17.48 F -.15(ve)-.2 G .996 -(rage e).15 F(xceeds)-.15 E F2(LA)3.496 E F1(,)A F2(sendmail)3.496 E F1 -.996(will sleep)3.496 F -(for one second on most SMTP commands and before accepting connections.) -174 278.6 Q(Deli)102 294.8 Q -.15(ve)-.25 G(rByMin=).15 E F2(time)A F1 -.203([0] Set minimum time for Deli)174 306.8 R -.15(ve)-.25 G 2.702(rB) -.15 G 2.702(yS)-2.702 G .202(MTP Service Extension \(RFC 2852\).)-2.702 -F .202(If 0,)5.202 F .486(no time is listed, if less than 0, the e)174 -318.8 R .487(xtension is not of)-.15 F .487 -(fered, if greater than 0, it is)-.25 F -(listed as minimum time for the EHLO k)174 330.8 Q -.15(ey)-.1 G -.1(wo) -.15 G(rd DELIVERBY).1 E(.)-1.29 E(Deli)102 347 Q -.15(ve)-.25 G(ryMode=) -.15 E F2(x)A F1([d] Deli)4 E -.15(ve)-.25 G 2.5(ri).15 G 2.5(nm)-2.5 G -(ode)-2.5 E F2(x)2.5 E F1 5(.L)C -2.25 -.15(eg a)-5 H 2.5(lm).15 G -(odes are:)-2.5 E 17.22(iD)214 363.2 S(eli)-17.22 E -.15(ve)-.25 G 2.5 -(ri).15 G(nteracti)-2.5 E -.15(ve)-.25 G(ly \(synchronously\)).15 E 15 -(bD)214 375.2 S(eli)-15 E -.15(ve)-.25 G 2.5(ri).15 G 2.5(nb)-2.5 G -(ackground \(asynchronously\))-2.5 E 15(qJ)214 387.2 S -(ust queue the message \(deli)-15 E -.15(ve)-.25 G 2.5(rd).15 G -(uring queue run\))-2.5 E 15(dD)214 399.2 S(efer deli)-15 E -.15(ve)-.25 -G(ry and all map lookups \(deli).15 E -.15(ve)-.25 G 2.5(rd).15 G -(uring queue run\))-2.5 E(Def)174 415.4 Q .712(aults to `)-.1 F(`b')-.74 -E 3.212('i)-.74 G 3.212(fn)-3.212 G 3.211(oo)-3.212 G .711 -(ption is speci\214ed, `)-3.211 F(`i')-.74 E 3.211('i)-.74 G 3.211(fi) --3.211 G 3.211(ti)-3.211 G 3.211(ss)-3.211 G .711(peci\214ed b)-3.211 F -.711(ut gi)-.2 F -.15(ve)-.25 G 3.211(nn).15 G 3.211(oa)-3.211 G -.18 -(rg)-3.211 G(u-).18 E .094(ment \(i.e., `)174 427.4 R(`Od')-.74 E 2.594 -('i)-.74 G 2.594(se)-2.594 G(qui)-2.594 E -.25(va)-.25 G .094(lent to `) -.25 F(`Odi')-.74 E 2.594('\). The)-.74 F F02.594 E F1 .094 -(command line \215ag sets this to)2.594 F F0(i)2.594 E F1(.)A 1.527 -(Note: for internal reasons, `)174 439.4 R(`i')-.74 E 4.027('d)-.74 G -1.527(oes not w)-4.027 F 1.526(ork if a milter is enabled which can)-.1 -F(reject or delete recipients.)174 451.4 Q -(In that case the mode will be changed to `)5 E(`b')-.74 E('.)-.74 E -(DialDelay=)102 467.6 Q F2(sleeptime)A F1 .798 -([no short name] Dial-on-demand netw)174 479.6 R .798 -(ork connections can see timeouts if a con-)-.1 F .665 -(nection is opened before the call is set up.)174 491.6 R .665 -(If this is set to an interv)5.665 F .665(al and a con-)-.25 F .742 -(nection times out on the \214rst connection being attempted)174 503.6 R -F2(sendmail)3.243 E F1 .743(will sleep for)3.243 F .31 -(this amount of time and try ag)174 515.6 R 2.81(ain. This)-.05 F .31 -(should gi)2.81 F .61 -.15(ve y)-.25 H .31(our system time to establish) -.15 F 1.542(the connection to your service pro)174 527.6 R(vider)-.15 E -6.543(.U)-.55 G 1.543(nits def)-6.543 F 1.543 -(ault to seconds, so \231DialDe-)-.1 F 1.799(lay=5\232 uses a \214v)174 -539.6 R 4.299(es)-.15 G 1.799(econd delay)-4.299 F 6.799(.D)-.65 G(ef) --6.799 E 1.798(aults to zero \(no retry\).)-.1 F 1.798(This delay only) -6.798 F(applies to mailers which ha)174 551.6 Q .3 -.15(ve t)-.2 H -(he Z \215ag set.).15 E(DirectSubmissionModi\214ers=)102 567.8 Q F2 -(modi\214er)A(s)-.1 E F1(De\214nes)174 579.8 Q F0(${daemon_\215ags}) -5.083 E F1 2.583(for direct \(command line\) submissions.)5.083 F 2.584 -(If not set,)7.584 F F0(${daemon_\215ags})174 591.8 Q F1 1.417 -(is either "CC f" if the option)3.917 F F03.916 E F1 1.416 -(is used or "c u" otherwise.)3.916 F -(Note that only the the "CC", "c", "f", and "u" \215ags are check)174 -603.8 Q(ed.)-.1 E(DontBlameSendmail=)102 620 Q F2(option,option,...)A F1 -.064([no short name] In order to a)174 632 R -.2(vo)-.2 G .065 -(id possible cracking attempts caused by w).2 F .065(orld- and)-.1 F -.255(group-writable \214les and directories,)174 644 R F2(sendmail)2.755 -E F1 .254(does paranoid checking when open-)2.754 F .297 -(ing most of its support \214les.)174 656 R .298 -(If for some reason you absolutely must run with, for)5.297 F -.15(ex) -174 668 S .177(ample, a group-writable).15 F F2(/etc)2.677 E F1 -(directory)2.677 E 2.677(,t)-.65 G .177(hen you will ha)-2.677 F .477 --.15(ve t)-.2 H 2.677(ot).15 G .177(urn of)-2.677 F 2.677(ft)-.25 G .176 -(his check-)-2.677 F .794 -(ing \(at the cost of making your system more vulnerable to attack\).) -174 680 R .794(The possible)5.794 F .32 LW 76 689.6 72 689.6 DL 80 689.6 -76 689.6 DL 84 689.6 80 689.6 DL 88 689.6 84 689.6 DL 92 689.6 88 689.6 -DL 96 689.6 92 689.6 DL 100 689.6 96 689.6 DL 104 689.6 100 689.6 DL 108 -689.6 104 689.6 DL 112 689.6 108 689.6 DL 116 689.6 112 689.6 DL 120 -689.6 116 689.6 DL 124 689.6 120 689.6 DL 128 689.6 124 689.6 DL 132 -689.6 128 689.6 DL 136 689.6 132 689.6 DL 140 689.6 136 689.6 DL 144 -689.6 140 689.6 DL 148 689.6 144 689.6 DL 152 689.6 148 689.6 DL 156 -689.6 152 689.6 DL 160 689.6 156 689.6 DL 164 689.6 160 689.6 DL 168 -689.6 164 689.6 DL 172 689.6 168 689.6 DL 176 689.6 172 689.6 DL 180 -689.6 176 689.6 DL 184 689.6 180 689.6 DL 188 689.6 184 689.6 DL 192 -689.6 188 689.6 DL 196 689.6 192 689.6 DL 200 689.6 196 689.6 DL 204 -689.6 200 689.6 DL 208 689.6 204 689.6 DL 212 689.6 208 689.6 DL 216 -689.6 212 689.6 DL/F4 5/Times-Roman@0 SF(19)93.6 700 Q/F5 8 -/Times-Roman@0 SF(The old)3.2 I/F6 8/Times-Bold@0 SF(g)2 E F5 -(option has been combined into the)2 E F6(DefaultUser)2 E F5(option.)2 E -0 Cg EP +(ytes, before a memory-based queue data \214le)-2.512 F +(becomes disk-based.)174 721.2 Q(The def)5 E(ault is 4096 bytes.)-.1 E 0 +Cg EP %%Page: 69 65 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-69)195.86 E/F1 10/Times-Roman@0 SF(ar)174 96 Q 1.395(guments ha) --.18 F 1.695 -.15(ve b)-.2 H 1.395(een described earlier).15 F 6.395(.T) --.55 G 1.394(he details of these \215ags are described)-6.395 F(abo)174 -108 Q -.15(ve)-.15 G(.).15 E F0(Use of this option is not r)5 E -(ecommended.)-.18 E F1(DontExpandCnames)102 124.2 Q .559([no short name\ -] The standards say that all host addresses used in a mail message)174 -136.2 R 1.408(must be fully canonical.)174 148.2 R -.15(Fo)6.407 G 3.907 -(re).15 G 1.407(xample, if your host is named \231Cruft.F)-4.057 F -(oo.ORG\232)-.15 E 1.462(and also has an alias of \231FTP)174 160.2 R -(.F)-1.11 E 1.462(oo.ORG\232, the former name must be used at all)-.15 F -2.631(times. This)174 172.2 R .131 -(is enforced during host name canoni\214cation \($[ ... $] lookups\).) -2.631 F .13(If this)5.13 F .661(option is set, the protocols are ignore\ -d and the \231wrong\232 thing is done.)174 184.2 R(Ho)5.662 E(we)-.25 E --.15(ve)-.25 G -.4(r,).15 G .872(the IETF is mo)174 196.2 R .872 -(ving to)-.15 F -.1(wa)-.25 G .872 -(rd changing this standard, so the beha).1 F .871(vior may become)-.2 F -3.009(acceptable. Please)174 208.2 R .509(note that hosts do)3.009 F -.509(wnstream may still re)-.25 F .509(write the address to be)-.25 F -(the true canonical name ho)174 220.2 Q(we)-.25 E -.15(ve)-.25 G -.55 -(r.).15 G 6.17(DontInitGroups [no)102 236.4 R .25(short name] If set,) -2.75 F/F2 10/Times-Italic@0 SF(sendmail)2.75 E F1 .25(will a)2.75 F -.2 -(vo)-.2 G .25(id using the initgroups\(3\) call.).2 F .25(If you are) -5.25 F .583(running NIS, this causes a sequential scan of the groups.by\ -name map, which can)174 248.4 R .436(cause your NIS serv)174 260.4 R -.436(er to be badly o)-.15 F -.15(ve)-.15 G .435(rloaded in a lar).15 F -.435(ge domain.)-.18 F .435(The cost of this)5.435 F .697(is that the o\ -nly group found for users will be their primary group \(the one in the) -174 272.4 R(passw)174 284.4 Q 1.189(ord \214le\), which will mak)-.1 F -3.689<658c>-.1 G 1.189(le access permissions some)-3.689 F 1.189 -(what more restric-)-.25 F(ti)174 296.4 Q -.15(ve)-.25 G 5(.H).15 G -(as no ef)-5 E(fect on systems that don')-.25 E 2.5(th)-.18 G -2.25 -.2 -(av e)-2.5 H(group lists.)2.7 E(DontProbeInterf)102 312.6 Q(aces)-.1 E -1.712([no short name])174 324.6 R F2(Sendmail)4.212 E F1 1.713 -(normally \214nds the names of all interf)4.212 F 1.713(aces acti)-.1 F -2.013 -.15(ve o)-.25 H(n).15 E 1.103 -(your machine when it starts up and adds their name to the)174 336.6 R -F0($=w)3.602 E F1 1.102(class of kno)3.602 F(wn)-.25 E 1.835 -(host aliases.)174 348.6 R 1.835(If you ha)6.835 F 2.136 -.15(ve a l)-.2 -H(ar).15 E 1.836(ge number of virtual interf)-.18 F 1.836 -(aces or if your DNS)-.1 F(in)174 360.6 Q -.15(ve)-.4 G .959 -(rse lookups are slo).15 F 3.459(wt)-.25 G .959 -(his can be time consuming.)-3.459 F .958(This option turns of)5.958 F -3.458(ft)-.25 G(hat)-3.458 E 2.973(probing. Ho)174 372.6 R(we)-.25 E --.15(ve)-.25 G 1.273 -.4(r, y).15 H .474 -(ou will need to be certain to include all v).4 F .474 -(ariant names in the)-.25 F F0($=w)174 384.6 Q F1 1.868 -(class by some other mechanism.)4.369 F 1.868(If set to)6.868 F F0 -(loopback)4.368 E F1 4.368(,l)C 1.868(oopback interf)-4.368 F(aces)-.1 E -(\(e.g., lo0\) will not be probed.)174 396.6 Q -1.61 -(DontPruneRoutes [R])102 412.8 R(Normally)3.905 E(,)-.65 E F2(sendmail) -3.905 E F1 1.405(tries to eliminate an)3.905 F 3.905(yu)-.15 G 1.405 -(nnecessary e)-3.905 F 1.405(xplicit routes when)-.15 F .155 -(sending an error message \(as discussed in RFC 1123 \247 5.2.6\).)174 -424.8 R -.15(Fo)5.154 G 2.654(re).15 G .154(xample, when)-2.804 F -(sending an error message to)174 436.8 Q(<@kno)214 453 Q(wn1,@kno)-.25 E -(wn2,@kno)-.25 E(wn3:user@unkno)-.25 E(wn>)-.25 E F2(sendmail)174 469.2 -Q F1 1.155(will strip of)3.655 F 3.655(ft)-.25 G 1.155(he \231@kno) --3.655 F(wn1,@kno)-.25 E 1.155(wn2\232 in order to mak)-.25 F 3.655(et) --.1 G 1.155(he route as)-3.655 F .813(direct as possible.)174 481.2 R -(Ho)5.813 E(we)-.25 E -.15(ve)-.25 G 1.613 -.4(r, i).15 H 3.313(ft).4 G -(he)-3.313 E F0(R)3.313 E F1 .812 -(option is set, this will be disabled, and the)3.313 F .009 -(mail will be sent to the \214rst address in the route, e)174 493.2 R --.15(ve)-.25 G 2.51(ni).15 G 2.51(fl)-2.51 G .01(ater addresses are kno) --2.51 F(wn.)-.25 E(This may be useful if you are caught behind a \214re) -174 505.2 Q -.1(wa)-.25 G(ll.).1 E(DoubleBounceAddress=)102 521.4 Q F2 -(err)A(or)-.45 E(-addr)-.2 E(ess)-.37 E F1 .504([no short name] If an e\ -rror occurs when sending an error message, send the error)174 533.4 R -1.999(report \(termed a \231double bounce\232 because it is an error \ -\231bounce\232 that occurs)174 545.4 R .053(when trying to send another\ - error \231bounce\232\) to the indicated address.)174 557.4 R .053 -(The address)5.053 F .474(is macro e)174 569.4 R .474 -(xpanded at the time of deli)-.15 F -.15(ve)-.25 G(ry).15 E 5.474(.I) --.65 G 2.974(fn)-5.474 G .474(ot set, def)-2.974 F .475 -(aults to \231postmaster\232.)-.1 F(If)5.475 E -(set to an empty string, double bounces are dropped.)174 581.4 Q -(EightBitMode=)102 597.6 Q F2(action)A F1 1.956 -([8] Set handling of eight-bit data.)174 609.6 R 1.955(There are tw) -6.955 F 4.455(ok)-.1 G 1.955(inds of eight-bit data: that)-4.455 F 3.334 -(declared as such using the)174 621.6 R F0(BOD)5.834 E(Y=8BITMIME)-.4 E -F1 3.335(ESMTP declaration or the)5.835 F F0(\255B8BITMIME)174 633.6 Q -F1 .948 -(command line \215ag, and undeclared 8-bit data, that is, input that) -3.449 F 1.18(just happens to be eight bits.)174 645.6 R 1.18 -(There are three basic operations that can happen:)6.18 F .996 -(undeclared 8-bit data can be automatically con)174 657.6 R -.15(ve)-.4 -G .995(rted to 8BITMIME, undeclared).15 F .887 -(8-bit data can be passed as-is without con)174 669.6 R -.15(ve)-.4 G -.887(rsion to MIME \(`).15 F .887(`just send 8')-.74 F .887('\), and) --.74 F 1.794(declared 8-bit data can be con)174 681.6 R -.15(ve)-.4 G -1.794(rted to 7-bits for transmission to a non-8BIT).15 F(-)-.92 E -(MIME mailer)174 693.6 Q 5(.T)-.55 G(he possible)-5 E F2(action)2.5 E F1 -2.5(sa)C(re:)-2.5 E 0 Cg EP +(SMM:08-69)195.86 E/F1 10/Times-Roman@0 SF(DeadLetterDrop=)102 96 Q/F2 +10/Times-Italic@0 SF(\214le)A F1 .535([no short name] De\214nes the loc\ +ation of the system-wide dead.letter \214le, formerly)174 108 R .743 +(hardcoded to /usr/tmp/dead.letter)174 120 R 5.743(.I)-.55 G 3.243(ft) +-5.743 G .744(his option is not set \(the def)-3.243 F .744 +(ault\), sendmail)-.1 F 1.465(will not attempt to sa)174 132 R 1.764 +-.15(ve t)-.2 H 3.964(oas).15 G 1.464 +(ystem-wide dead.letter \214le in the e)-3.964 F -.15(ve)-.25 G 1.464 +(nt it cannot).15 F .575(bounce the mail to the user or postmaster)174 +144 R 5.575(.I)-.55 G .575(nstead, it will rename the qf \214le as it) +-5.575 F +(has in the past when the dead.letter \214le could not be opened.)174 +156 Q(Def)102 172.2 Q(aultUser=)-.1 E F2(user:gr)A(oup)-.45 E F1 .014 +([u] Set the def)174 184.2 R .014(ault userid for mailers to)-.1 F F2 +(user:gr)2.513 E(oup)-.45 E F1 5.013(.I)C(f)-5.013 E F2(gr)2.513 E(oup) +-.45 E F1 .013(is omitted and)2.513 F F2(user)2.513 E F1(is)2.513 E +4.306(au)174 196.2 S 1.807 +(ser name \(as opposed to a numeric user id\) the def)-4.306 F 1.807 +(ault group listed in the)-.1 F 1.153 +(/etc/passwd \214le for that user is used as the def)174 208.2 R 1.153 +(ault group.)-.1 F(Both)6.153 E F2(user)3.653 E F1(and)3.652 E F2(gr) +3.652 E(oup)-.45 E F1 1.152(may be numeric.)174 220.2 R 1.152 +(Mailers without the)6.152 F F2(S)3.652 E F1 1.152 +(\215ag in the mailer de\214nition will run as)3.652 F(this user)174 +234.2 Q 5(.D)-.55 G(ef)-5 E(aults to 1:1.)-.1 E(The v)5 E +(alue can also be gi)-.25 E -.15(ve)-.25 G 2.5(na).15 G 2.5(sas)-2.5 G +(ymbolic user name.)-2.5 E/F3 7/Times-Roman@0 SF(19)-4 I F1(DelayLA=)102 +250.4 Q F2(LA)A F1 .996([no short name] When the system load a)17.48 F +-.15(ve)-.2 G .996(rage e).15 F(xceeds)-.15 E F2(LA)3.496 E F1(,)A F2 +(sendmail)3.496 E F1 .995(will sleep)3.495 F +(for one second on most SMTP commands and before accepting connections.) +174 262.4 Q(Deli)102 278.6 Q -.15(ve)-.25 G(rByMin=).15 E F2(time)A F1 +.08([no short name] Set minimum time for Deli)174 290.6 R -.15(ve)-.25 G +2.58(rB).15 G 2.58(yS)-2.58 G .08(MTP Service Extension \(RFC)-2.58 F +2.837(2852\). If)174 302.6 R .337 +(0, no time is listed, if less than 0, the e)2.837 F .336 +(xtension is not of)-.15 F .336(fered, if greater)-.25 F +(than 0, it is listed as minimum time for the EHLO k)174 314.6 Q -.15 +(ey)-.1 G -.1(wo).15 G(rd DELIVERBY).1 E(.)-1.29 E(Deli)102 330.8 Q -.15 +(ve)-.25 G(ryMode=).15 E F2(x)A F1([d] Deli)4 E -.15(ve)-.25 G 2.5(ri) +.15 G 2.5(nm)-2.5 G(ode)-2.5 E F2(x)2.5 E F1 5(.L)C -2.25 -.15(eg a)-5 H +2.5(lm).15 G(odes are:)-2.5 E 17.22(iD)214 347 S(eli)-17.22 E -.15(ve) +-.25 G 2.5(ri).15 G(nteracti)-2.5 E -.15(ve)-.25 G(ly \(synchronously\)) +.15 E 15(bD)214 359 S(eli)-15 E -.15(ve)-.25 G 2.5(ri).15 G 2.5(nb)-2.5 +G(ackground \(asynchronously\))-2.5 E 15(qJ)214 371 S +(ust queue the message \(deli)-15 E -.15(ve)-.25 G 2.5(rd).15 G +(uring queue run\))-2.5 E 15(dD)214 383 S(efer deli)-15 E -.15(ve)-.25 G +(ry and all map lookups \(deli).15 E -.15(ve)-.25 G 2.5(rd).15 G +(uring queue run\))-2.5 E(Def)174 399.2 Q .711(aults to `)-.1 F(`b')-.74 +E 3.211('i)-.74 G 3.211(fn)-3.211 G 3.211(oo)-3.211 G .711 +(ption is speci\214ed, `)-3.211 F(`i')-.74 E 3.211('i)-.74 G 3.211(fi) +-3.211 G 3.211(ti)-3.211 G 3.211(ss)-3.211 G .712(peci\214ed b)-3.211 F +.712(ut gi)-.2 F -.15(ve)-.25 G 3.212(nn).15 G 3.212(oa)-3.212 G -.18 +(rg)-3.212 G(u-).18 E .094(ment \(i.e., `)174 411.2 R(`Od')-.74 E 2.594 +('i)-.74 G 2.594(se)-2.594 G(qui)-2.594 E -.25(va)-.25 G .094(lent to `) +.25 F(`Odi')-.74 E 2.594('\). The)-.74 F F02.594 E F1 .094 +(command line \215ag sets this to)2.594 F F0(i)2.594 E F1(.)A .518 +(Note: for internal reasons, `)174 423.2 R(`i')-.74 E 3.018('d)-.74 G +.518(oes not w)-3.018 F .518(ork if a milter is enabled which can re-) +-.1 F(ject or delete recipients.)174 435.2 Q +(In that case the mode will be changed to `)5 E(`b')-.74 E('.)-.74 E +(DialDelay=)102 451.4 Q F2(sleeptime)A F1 .799 +([no short name] Dial-on-demand netw)174 463.4 R .798 +(ork connections can see timeouts if a con-)-.1 F .665 +(nection is opened before the call is set up.)174 475.4 R .665 +(If this is set to an interv)5.665 F .665(al and a con-)-.25 F .743 +(nection times out on the \214rst connection being attempted)174 487.4 R +F2(sendmail)3.242 E F1 .742(will sleep for)3.242 F .31 +(this amount of time and try ag)174 499.4 R 2.81(ain. This)-.05 F .31 +(should gi)2.81 F .61 -.15(ve y)-.25 H .31(our system time to establish) +.15 F 1.543(the connection to your service pro)174 511.4 R(vider)-.15 E +6.543(.U)-.55 G 1.543(nits def)-6.543 F 1.542 +(ault to seconds, so \231DialDe-)-.1 F .579(lay=5\232 uses a \214v)174 +523.4 R 3.079(es)-.15 G .579(econd delay)-3.079 F 5.579(.D)-.65 G(ef) +-5.579 E .579(aults to zero \(no retry\).)-.1 F .58(This delay only ap-) +5.58 F(plies to mailers which ha)174 535.4 Q .3 -.15(ve t)-.2 H +(he Z \215ag set.).15 E(DirectSubmissionModi\214ers=)102 551.6 Q F2 +(modi\214er)A(s)-.1 E F1(De\214nes)174 563.6 Q F0(${daemon_\215ags}) +5.084 E F1 2.583(for direct \(command line\) submissions.)5.084 F 2.583 +(If not set,)7.583 F F0(${daemon_\215ags})174 575.6 Q F1 1.416 +(is either "CC f" if the option)3.916 F F03.916 E F1 1.417 +(is used or "c u" otherwise.)3.917 F +(Note that only the "CC", "c", "f", and "u" \215ags are check)174 587.6 +Q(ed.)-.1 E(DontBlameSendmail=)102 603.8 Q F2(option,option,...)A F1 +.065([no short name] In order to a)174 615.8 R -.2(vo)-.2 G .064 +(id possible cracking attempts caused by w).2 F .064(orld- and)-.1 F +.254(group-writable \214les and directories,)174 627.8 R F2(sendmail) +2.754 E F1 .255(does paranoid checking when open-)2.754 F .298 +(ing most of its support \214les.)174 639.8 R .297 +(If for some reason you absolutely must run with, for)5.297 F -.15(ex) +174 651.8 S .176(ample, a group-writable).15 F F2(/etc)2.677 E F1 +(directory)2.677 E 2.677(,t)-.65 G .177(hen you will ha)-2.677 F .477 +-.15(ve t)-.2 H 2.677(ot).15 G .177(urn of)-2.677 F 2.677(ft)-.25 G .177 +(his check-)-2.677 F .794 +(ing \(at the cost of making your system more vulnerable to attack\).) +174 663.8 R .793(The possible)5.793 F(ar)174 675.8 Q 1.394(guments ha) +-.18 F 1.694 -.15(ve b)-.2 H 1.394(een described earlier).15 F 6.394(.T) +-.55 G 1.395(he details of these \215ags are described)-6.394 F .32 LW +76 685.4 72 685.4 DL 80 685.4 76 685.4 DL 84 685.4 80 685.4 DL 88 685.4 +84 685.4 DL 92 685.4 88 685.4 DL 96 685.4 92 685.4 DL 100 685.4 96 685.4 +DL 104 685.4 100 685.4 DL 108 685.4 104 685.4 DL 112 685.4 108 685.4 DL +116 685.4 112 685.4 DL 120 685.4 116 685.4 DL 124 685.4 120 685.4 DL 128 +685.4 124 685.4 DL 132 685.4 128 685.4 DL 136 685.4 132 685.4 DL 140 +685.4 136 685.4 DL 144 685.4 140 685.4 DL 148 685.4 144 685.4 DL 152 +685.4 148 685.4 DL 156 685.4 152 685.4 DL 160 685.4 156 685.4 DL 164 +685.4 160 685.4 DL 168 685.4 164 685.4 DL 172 685.4 168 685.4 DL 176 +685.4 172 685.4 DL 180 685.4 176 685.4 DL 184 685.4 180 685.4 DL 188 +685.4 184 685.4 DL 192 685.4 188 685.4 DL 196 685.4 192 685.4 DL 200 +685.4 196 685.4 DL 204 685.4 200 685.4 DL 208 685.4 204 685.4 DL 212 +685.4 208 685.4 DL 216 685.4 212 685.4 DL/F4 5/Times-Roman@0 SF(19)93.6 +695.8 Q/F5 8/Times-Roman@0 SF(The old)3.2 I/F6 8/Times-Bold@0 SF(g)2 E +F5(option has been combined into the)2 E F6(DefaultUser)2 E F5(option.)2 +E 0 Cg EP %%Page: 70 66 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-70 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 11.11(sR) -219 96 S(eject undeclared 8-bit data \(`)-11.11 E(`strict')-.74 E('\)) --.74 E 7.22(mC)219 108 S(on)-7.22 E -.15(ve)-.4 G +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(abo)174 +96 Q -.15(ve)-.15 G(.).15 E F0(Use of this option is not r)5 E +(ecommended.)-.18 E F1(DontExpandCnames)102 112.2 Q .559([no short name\ +] The standards say that all host addresses used in a mail message)174 +124.2 R 1.407(must be fully canonical.)174 136.2 R -.15(Fo)6.407 G 3.907 +(re).15 G 1.407(xample, if your host is named \231Cruft.F)-4.057 F +(oo.ORG\232)-.15 E 1.462(and also has an alias of \231FTP)174 148.2 R +(.F)-1.11 E 1.462(oo.ORG\232, the former name must be used at all)-.15 F +2.63(times. This)174 160.2 R .131 +(is enforced during host name canoni\214cation \($[ ... $] lookups\).) +2.63 F .131(If this)5.131 F .662(option is set, the protocols are ignor\ +ed and the \231wrong\232 thing is done.)174 172.2 R(Ho)5.661 E(we)-.25 E +-.15(ve)-.25 G -.4(r,).15 G .871(the IETF is mo)174 184.2 R .871 +(ving to)-.15 F -.1(wa)-.25 G .872 +(rd changing this standard, so the beha).1 F .872(vior may become)-.2 F +3.01(acceptable. Please)174 196.2 R .509(note that hosts do)3.01 F .509 +(wnstream may still re)-.25 F .509(write the address to be)-.25 F +(the true canonical name ho)174 208.2 Q(we)-.25 E -.15(ve)-.25 G -.55 +(r.).15 G 6.17(DontInitGroups [no)102 224.4 R .25(short name] If set,) +2.75 F/F2 10/Times-Italic@0 SF(sendmail)2.75 E F1 .25(will a)2.75 F -.2 +(vo)-.2 G .25(id using the initgroups\(3\) call.).2 F .25(If you are) +5.25 F .583(running NIS, this causes a sequential scan of the groups.by\ +name map, which can)174 236.4 R .435(cause your NIS serv)174 248.4 R +.435(er to be badly o)-.15 F -.15(ve)-.15 G .435(rloaded in a lar).15 F +.436(ge domain.)-.18 F .436(The cost of this)5.436 F .697(is that the o\ +nly group found for users will be their primary group \(the one in the) +174 260.4 R(passw)174 272.4 Q 1.189(ord \214le\), which will mak)-.1 F +3.689<658c>-.1 G 1.189(le access permissions some)-3.689 F 1.189 +(what more restric-)-.25 F(ti)174 284.4 Q -.15(ve)-.25 G 5(.H).15 G +(as no ef)-5 E(fect on systems that don')-.25 E 2.5(th)-.18 G -2.25 -.2 +(av e)-2.5 H(group lists.)2.7 E(DontProbeInterf)102 300.6 Q(aces)-.1 E +1.713([no short name])174 312.6 R F2(Sendmail)4.213 E F1 1.712 +(normally \214nds the names of all interf)4.213 F 1.712(aces acti)-.1 F +2.012 -.15(ve o)-.25 H(n).15 E 1.103 +(your machine when it starts up and adds their name to the)174 324.6 R +F0($=w)3.603 E F1 1.103(class of kno)3.603 F(wn)-.25 E .806 +(host aliases.)174 336.6 R .806(If you ha)5.806 F 1.106 -.15(ve a l)-.2 +H(ar).15 E .806(ge number of virtual interf)-.18 F .806 +(aces or if your DNS in-)-.1 F -.15(ve)174 348.6 S 1.526 +(rse lookups are slo).15 F 4.026(wt)-.25 G 1.526 +(his can be time consuming.)-4.026 F 1.526(This option turns of)6.526 F +4.027(ft)-.25 G(hat)-4.027 E 2.974(probing. Ho)174 360.6 R(we)-.25 E +-.15(ve)-.25 G 1.274 -.4(r, y).15 H .474 +(ou will need to be certain to include all v).4 F .473 +(ariant names in the)-.25 F F0($=w)174 372.6 Q F1 1.868 +(class by some other mechanism.)4.368 F 1.868(If set to)6.868 F F0 +(loopback)4.368 E F1 4.369(,l)C 1.869(oopback interf)-4.369 F(aces)-.1 E +(\(e.g., lo0\) will not be probed.)174 384.6 Q -1.61 +(DontPruneRoutes [R])102 400.8 R(Normally)3.905 E(,)-.65 E F2(sendmail) +3.905 E F1 1.405(tries to eliminate an)3.905 F 3.905(yu)-.15 G 1.405 +(nnecessary e)-3.905 F 1.405(xplicit routes when)-.15 F .154 +(sending an error message \(as discussed in RFC 1123 \247 5.2.6\).)174 +412.8 R -.15(Fo)5.155 G 2.655(re).15 G .155(xample, when)-2.805 F +(sending an error message to)174 424.8 Q(<@kno)214 441 Q(wn1,@kno)-.25 E +(wn2,@kno)-.25 E(wn3:user@unkno)-.25 E(wn>)-.25 E F2(sendmail)174 457.2 +Q F1 .02(will strip of)2.52 F 2.519(ft)-.25 G .019(he \231@kno)-2.519 F +(wn1,@kno)-.25 E .019(wn2\232 in order to mak)-.25 F 2.519(et)-.1 G .019 +(he route as di-)-2.519 F 1.331(rect as possible.)174 469.2 R(Ho)6.331 E +(we)-.25 E -.15(ve)-.25 G 2.131 -.4(r, i).15 H 3.831(ft).4 G(he)-3.831 E +F0(R)3.831 E F1 1.332(option is set, this will be disabled, and the) +3.831 F .01(mail will be sent to the \214rst address in the route, e)174 +481.2 R -.15(ve)-.25 G 2.509(ni).15 G 2.509(fl)-2.509 G .009 +(ater addresses are kno)-2.509 F(wn.)-.25 E +(This may be useful if you are caught behind a \214re)174 493.2 Q -.1 +(wa)-.25 G(ll.).1 E(DoubleBounceAddress=)102 509.4 Q F2(err)A(or)-.45 E +(-addr)-.2 E(ess)-.37 E F1 .504([no short name] If an error occurs when\ + sending an error message, send the error)174 521.4 R 1.999(report \(te\ +rmed a \231double bounce\232 because it is an error \231bounce\232 that\ + occurs)174 533.4 R .053(when trying to send another error \231bounce\ +\232\) to the indicated address.)174 545.4 R .054(The address)5.054 F +.475(is macro e)174 557.4 R .474(xpanded at the time of deli)-.15 F -.15 +(ve)-.25 G(ry).15 E 5.474(.I)-.65 G 2.974(fn)-5.474 G .474(ot set, def) +-2.974 F .474(aults to \231postmaster\232.)-.1 F(If)5.474 E +(set to an empty string, double bounces are dropped.)174 569.4 Q +(EightBitMode=)102 585.6 Q F2(action)A F1 .725 +([8] Set handling of eight-bit data.)174 597.6 R .725(There are tw)5.725 +F 3.225(ok)-.1 G .725(inds of eight-bit data: that de-)-3.225 F 4.384 +(clared as such using the)174 609.6 R F0(BOD)6.883 E(Y=8BITMIME)-.4 E F1 +4.383(ESMTP declaration or the)6.883 F F0(\255B8BITMIME)174 621.6 Q F1 +.948 +(command line \215ag, and undeclared 8-bit data, that is, input that) +3.448 F 1.18(just happens to be eight bits.)174 633.6 R 1.18 +(There are three basic operations that can happen:)6.18 F .995 +(undeclared 8-bit data can be automatically con)174 645.6 R -.15(ve)-.4 +G .996(rted to 8BITMIME, undeclared).15 F .887 +(8-bit data can be passed as-is without con)174 657.6 R -.15(ve)-.4 G +.887(rsion to MIME \(`).15 F .887(`just send 8')-.74 F .886('\), and) +-.74 F 1.794(declared 8-bit data can be con)174 669.6 R -.15(ve)-.4 G +1.794(rted to 7-bits for transmission to a non-8BIT).15 F(-)-.92 E +(MIME mailer)174 681.6 Q 5(.T)-.55 G(he possible)-5 E F2(action)2.5 E F1 +2.5(sa)C(re:)-2.5 E 0 Cg EP +%%Page: 71 67 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-71)195.86 E/F1 10/Times-Roman@0 SF 11.11(sR)219 96 S +(eject undeclared 8-bit data \(`)-11.11 E(`strict')-.74 E('\))-.74 E +7.22(mC)219 108 S(on)-7.22 E -.15(ve)-.4 G (rt undeclared 8-bit data to MIME \(`).15 E(`mime')-.74 E('\))-.74 E 10 (pP)219 120 S(ass undeclared 8-bit data \(`)-10.15 E(`pass')-.74 E('\)) --.74 E 2.227(In all cases properly declared 8BITMIME data will be con) -174 136.2 R -.15(ve)-.4 G 2.228(rted to 7BIT as).15 F 2.92 +-.74 E 2.228(In all cases properly declared 8BITMIME data will be con) +174 136.2 R -.15(ve)-.4 G 2.227(rted to 7BIT as).15 F 2.92 (needed. Note:)174 148.2 R .42(if an automatic con)2.92 F -.15(ve)-.4 G .42(rsion is performed, a header with the follo).15 F(w-)-.25 E (ing format will be added:)174 160.2 Q(X-MIME-Autocon)214 176.4 Q -.15 -(ve)-.4 G(rted: from OLD to NEW by $j id $i).15 E 2.027 +(ve)-.4 G(rted: from OLD to NEW by $j id $i).15 E .725 (where OLD and NEW describe the original format and the con)174 192.6 R --.15(ve)-.4 G 2.028(rted format,).15 F(respecti)174 204.6 Q -.15(ve)-.25 -G(ly).15 E(.)-.65 E(ErrorHeader=)102 220.8 Q/F2 10/Times-Italic@0 SF -(\214le-or)A(-messa)-.2 E -.1(ge)-.1 G F1 .486 +-.15(ve)-.4 G .725(rted format, re-).15 F(specti)174 204.6 Q -.15(ve) +-.25 G(ly).15 E(.)-.65 E(ErrorHeader=)102 220.8 Q/F2 10/Times-Italic@0 +SF(\214le-or)A(-messa)-.2 E -.1(ge)-.1 G F1 .486 ([E] Prepend error messages with the indicated message.)174 232.8 R .486 -(If it be)5.486 F .486(gins with a slash,)-.15 F .246(it is assumed to \ +(If it be)5.486 F .487(gins with a slash,)-.15 F .246(it is assumed to \ be the pathname of a \214le containing a message \(this is the recom-) 174 244.8 R .86(mended setting\).)174 256.8 R .86 (Otherwise, it is a literal message.)5.86 F .86 (The error \214le might contain)5.86 F 1.116(the name, email address, a\ nd/or phone number of a local postmaster who could)174 268.8 R(pro)174 -280.8 Q .827(vide assistance to end users.)-.15 F .827 +280.8 Q .826(vide assistance to end users.)-.15 F .827 (If the option is missing or null, or if it names a)5.827 F (\214le which does not e)174 292.8 Q (xist or which is not readable, no message is printed.)-.15 E @@ -6188,47 +6281,47 @@ F2(x)2.5 E F1 5(.T)C(he v)-5 E(alues for)-.25 E F2(x)2.5 E F1(are:)2.5 E 15.56(eM)214 373.2 S(ail back errors \(when applicable\) and gi)-15.56 E .3 -.15(ve z)-.25 H(ero e).15 E(xit stat al)-.15 E -.1(wa)-.1 G(ys).1 E 1.314(Note that the last mode, \231e\232, is for Berknet error processi\ -ng and should not be)174 389.4 R 1.324(used in normal circumstances.)174 +ng and should not be)174 389.4 R 1.323(used in normal circumstances.)174 401.4 R 1.323(Note, too, that mode \231q\232, only applies to errors) -6.324 F(recognized before sendmail forks for background deli)174 413.4 Q +6.323 F(recognized before sendmail forks for background deli)174 413.4 Q -.15(ve)-.25 G(ry).15 E(.)-.65 E -.15(Fa)102 429.6 S(llbackMXhost=).15 E -F2(fallbac)A(khost)-.2 E F1 .796([V] If speci\214ed, the)174 441.6 R F2 -(fallbac)3.296 E(khost)-.2 E F1 .796(acts lik)3.296 F 3.296(eav)-.1 G -.797(ery lo)-3.446 F 3.297(wp)-.25 G .797(riority MX on e)-3.297 F -.15 -(ve)-.25 G .797(ry host.).15 F 1.538(MX records will be look)174 453.6 R -1.537(ed up for this host, unless the name is surrounded by)-.1 F .016 +F2(fallbac)A(khost)-.2 E F1 .797([V] If speci\214ed, the)174 441.6 R F2 +(fallbac)3.297 E(khost)-.2 E F1 .797(acts lik)3.297 F 3.296(eav)-.1 G +.796(ery lo)-3.446 F 3.296(wp)-.25 G .796(riority MX on e)-3.296 F -.15 +(ve)-.25 G .796(ry host.).15 F 1.537(MX records will be look)174 453.6 R +1.537(ed up for this host, unless the name is surrounded by)-.1 F .017 (square brack)174 465.6 R 2.517(ets. This)-.1 F .017 -(is intended to be used by sites with poor netw)2.517 F .017 +(is intended to be used by sites with poor netw)2.517 F .016 (ork connecti)-.1 F(v-)-.25 E(ity)174 477.6 Q 6.706(.M)-.65 G 1.706 (essages which are undeli)-6.706 F -.15(ve)-.25 G 1.706 (rable due to temporary address f).15 F 1.706(ailures \(e.g.,)-.1 F (DNS f)174 489.6 Q(ailure\) also go to the F)-.1 E(allbackMXhost.)-.15 E --.15(Fa)102 505.8 S(llBackSmartHost=).15 E F2(hostname)A F1 1.655 +-.15(Fa)102 505.8 S(llBackSmartHost=).15 E F2(hostname)A F1 1.656 (If speci\214ed, the)174 517.8 R F2 -.75(Fa)4.156 G(llBac).75 E -(kSmartHost)-.2 E F1 1.656(will be used in a last-ditch ef)4.156 F 1.656 +(kSmartHost)-.2 E F1 1.656(will be used in a last-ditch ef)4.156 F 1.655 (fort for each)-.25 F 3.212(host. This)174 529.8 R .712 (is intended to be used by sites with "f)3.212 F(ak)-.1 E 3.212(ei)-.1 G .712(nternal DNS", e.g., a com-)-3.212 F(pan)174 541.8 Q 3.19(yw)-.15 G .69(hose DNS accurately re\215ects the w)-3.19 F .69 (orld inside that compan)-.1 F(y')-.15 E 3.19(sd)-.55 G .69(omain b) -3.19 F(ut)-.2 E(not outside.)174 553.8 Q -.15(Fa)102 570 S 34.08 -(stSplit [no).15 F 1.572(short name] If set to a v)4.072 F 1.572 +(stSplit [no).15 F 1.572(short name] If set to a v)4.071 F 1.572 (alue greater than zero \(the def)-.25 F 1.572(ault is one\), it sup-) -.1 F .977(presses the MX lookups on addresses when the)174 582 R 3.477 -(ya)-.15 G .977(re initially sorted, i.e., for the)-3.477 F 1.031 +(ya)-.15 G .977(re initially sorted, i.e., for the)-3.477 F 1.03 (\214rst deli)174 594 R -.15(ve)-.25 G 1.031(ry attempt.).15 F 1.031 (This usually results in f)6.031 F 1.031(aster en)-.1 F -.15(ve)-.4 G 1.031(lope splitting unless the).15 F .423(MX records are readily a)174 606 R -.25(va)-.2 G .423(ilable in a local DNS cache.).25 F 2.023 -.8 -(To e)5.423 H .423(nforce initial sorting).8 F .338 +(To e)5.423 H .423(nforce initial sorting).8 F .337 (based on MX records set)174 618 R F0 -.25(Fa)2.838 G(stSplit).25 E F1 .338(to zero.)2.838 F .338(If the mail is submitted directly from)5.338 -F 1.078(the command line, then the v)174 630 R 1.079 +F 1.079(the command line, then the v)174 630 R 1.078 (alue also limits the number of processes to deli)-.25 F -.15(ve)-.25 G -(r).15 E .294(the en)174 642 R -.15(ve)-.4 G .294(lopes; if more en).15 -F -.15(ve)-.4 G .294(lopes are created the).15 F 2.794(ya)-.15 G .293 -(re only queued up and must be)-2.794 F(tak)174 654 Q .691 -(en care of by a queue run.)-.1 F .691(Since the def)5.691 F .692 +(r).15 E .293(the en)174 642 R -.15(ve)-.4 G .293(lopes; if more en).15 +F -.15(ve)-.4 G .293(lopes are created the).15 F 2.794(ya)-.15 G .294 +(re only queued up and must be)-2.794 F(tak)174 654 Q .692 +(en care of by a queue run.)-.1 F .691(Since the def)5.691 F .691 (ault submission method is via SMTP)-.1 F 1.284(\(either from a MU)174 666 R 3.784(Ao)-.4 G 3.784(rv)-3.784 G 1.284(ia the MSP\), the v)-3.784 F 1.284(alue of)-.25 F F0 -.25(Fa)3.784 G(stSplit).25 E F1 1.284 @@ -6240,1563 +6333,1570 @@ Q -.15(ve)-.25 G 2.5(rt).15 G(he en)-2.5 E -.15(ve)-.4 G(lopes.).15 E (Fo)102 710.4 S(rw).15 E(ardP)-.1 E(ath=)-.15 E F2(path)A F1 4.675 ([J] Set the path for searching for users' .forw)174 722.4 R 4.675 (ard \214les.)-.1 F 4.675(The def)9.675 F 4.675(ault is)-.1 F 0 Cg EP -%%Page: 71 67 +%%Page: 72 68 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-71)195.86 E/F1 10/Times-Roman@0 SF(\231$z/.forw)174 96 Q 3.231 -(ard\232. Some)-.1 F .731 -(sites that use the automounter may prefer to change this to)3.231 F -(\231/v)174 108 Q(ar/forw)-.25 E 1.696(ard/$u\232 to search a \214le wi\ -th the same name as the user in a system)-.1 F(directory)174 120 Q 5.488 -(.I)-.65 G 2.988(tc)-5.488 G .488 -(an also be set to a sequence of paths separated by colons;)-2.988 F/F2 -10/Times-Italic@0 SF(sendmail)2.987 E F1 .831 +/F0 10/Times-Bold@0 SF 193.36(SMM:08-72 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(\231$z/.forw)174 96 Q 3.23(ard\232. Some)-.1 F .731 +(sites that use the automounter may prefer to change this to)3.23 F +(\231/v)174 108 Q(ar/forw)-.25 E .676(ard/$u\232 to search a \214le wit\ +h the same name as the user in a system di-)-.1 F(rectory)174 120 Q +6.043(.I)-.65 G 3.543(tc)-6.043 G 1.044 +(an also be set to a sequence of paths separated by colons;)-3.543 F/F2 +10/Times-Italic@0 SF(sendmail)3.544 E F1 .831 (stops at the \214rst \214le it can successfully and safely open.)174 -132 R -.15(Fo)5.831 G 3.331(re).15 G .831(xample, \231/v)-3.481 F -(ar/for)-.25 E(-)-.2 E -.1(wa)174 144 S(rd/$u:$z/.forw).1 E .277 +132 R -.15(Fo)5.83 G 3.33(re).15 G .83(xample, \231/v)-3.48 F(ar/for) +-.25 E(-)-.2 E -.1(wa)174 144 S(rd/$u:$z/.forw).1 E .276 (ard\232 will search \214rst in /v)-.1 F(ar/forw)-.25 E(ard/)-.1 E F2 -(username)A F1 .276(and then in)2.777 F F2(~user)2.776 E(-)-.2 E(name) +(username)A F1 .277(and then in)2.777 F F2(~user)2.777 E(-)-.2 E(name) 174 156 Q F1(/.forw)A(ard \(b)-.1 E (ut only if the \214rst \214le does not e)-.2 E(xist\).)-.15 E (HeloName=)102 172.2 Q F2(name)A F1([no short name] Set the name to be \ used for HELO/EHLO \(instead of $j\).)1.38 E(HelpFile=)102 188.4 Q F2 (\214le)A F1 .18([H] Specify the help \214le for SMTP)19.14 F 5.18(.I) -1.11 G 2.68(fn)-5.18 G 2.68<6f8c>-2.68 G .18 -(le name is speci\214ed, "help\214le" is used.)-2.68 F(HoldExpensi)102 -204.6 Q 8.54 -.15(ve [)-.25 H 1.394(c] If an outgoing mailer is mark).15 -F 1.393(ed as being e)-.1 F(xpensi)-.15 E -.15(ve)-.25 G 3.893(,d).15 G -(on')-3.893 E 3.893(tc)-.18 G 1.393(onnect immedi-)-3.893 F(ately)174 -216.6 Q(.)-.65 E(HostsFile=)102 232.8 Q F2(path)A F1 .026([no short nam\ -e] The path to the hosts database, normally \231/etc/hosts\232.)10.24 F -.026(This option)5.026 F 1.417(is only consulted when sendmail is canon\ -ifying addresses, and then only when)174 244.8 R .783 -(\231\214les\232 is in the \231hosts\232 service switch entry)174 256.8 -R 5.784(.I)-.65 G 3.284(np)-5.784 G(articular)-3.284 E 3.284(,t)-.4 G -.784(his \214le is)-3.284 F F2(ne)3.284 E(ver)-.15 E F1(used)3.284 E +(le name is speci\214ed, "help\214le" is used.)-2.68 F .365 +(If the help \214le does not e)174 200.4 R .365 +(xist \(cannot be opened for reading\))-.15 F F2(sendmail)2.866 E F1 +.366(will print a)2.866 F .728(note including its v)174 212.4 R .728 +(ersion in response to a)-.15 F F0(HELP)3.227 E F1 3.227(command. T) +3.227 F 3.227(oa)-.8 G -.2(vo)-3.427 G .727(id pro).2 F(viding)-.15 E +(this information to a client specify an empty \214le.)174 224.4 Q +(HoldExpensi)102 240.6 Q 8.54 -.15(ve [)-.25 H 1.393 +(c] If an outgoing mailer is mark).15 F 1.393(ed as being e)-.1 F +(xpensi)-.15 E -.15(ve)-.25 G 3.894(,d).15 G(on')-3.894 E 3.894(tc)-.18 +G 1.394(onnect immedi-)-3.894 F(ately)174 252.6 Q(.)-.65 E(HostsFile=) +102 268.8 Q F2(path)A F1 .026([no short name] The path to the hosts dat\ +abase, normally \231/etc/hosts\232.)10.24 F .025(This option)5.025 F +1.417(is only consulted when sendmail is canonifying addresses, and the\ +n only when)174 280.8 R .784 +(\231\214les\232 is in the \231hosts\232 service switch entry)174 292.8 +R 5.784(.I)-.65 G 3.283(np)-5.784 G(articular)-3.283 E 3.283(,t)-.4 G +.783(his \214le is)-3.283 F F2(ne)3.283 E(ver)-.15 E F1(used)3.283 E .202(when looking up host addresses; that is under the control of the s\ -ystem)174 268.8 R F2 -.1(ge)2.702 G(thostby-).1 E(name)174 280.8 Q F1 -(\(3\) routine.)A(HostStatusDirectory=)102 297 Q F2(path)A F1 .43 +ystem)174 304.8 R F2 -.1(ge)2.703 G(thostby-).1 E(name)174 316.8 Q F1 +(\(3\) routine.)A(HostStatusDirectory=)102 333 Q F2(path)A F1 .43 ([no short name] The location of the long term host status information.) -174 309 R .43(When set,)5.43 F 1.39 -(information about the status of hosts \(e.g., host do)174 321 R 1.39 -(wn or not accepting connec-)-.25 F .162 -(tions\) will be shared between all)174 333 R F2(sendmail)2.663 E F1 -.163(processes; normally)2.663 F 2.663(,t)-.65 G .163 -(his information is)-2.663 F .123(only held within a single queue run.) -174 345 R .123(This option requires a connection cache of at)5.123 F -.688(least 1 to function.)174 357 R .688(If the option be)5.688 F .688 +174 345 R .43(When set,)5.43 F 1.39 +(information about the status of hosts \(e.g., host do)174 357 R 1.39 +(wn or not accepting connec-)-.25 F .163 +(tions\) will be shared between all)174 369 R F2(sendmail)2.663 E F1 +.163(processes; normally)2.663 F 2.662(,t)-.65 G .162 +(his information is)-2.662 F .123(only held within a single queue run.) +174 381 R .123(This option requires a connection cache of at)5.123 F +.689(least 1 to function.)174 393 R .688(If the option be)5.688 F .688 (gins with a leading `/', it is an absolute path-)-.15 F .617 -(name; otherwise, it is relati)174 369 R .917 -.15(ve t)-.25 H 3.117(ot) +(name; otherwise, it is relati)174 405 R .917 -.15(ve t)-.25 H 3.117(ot) .15 G .617(he mail queue directory)-3.117 F 5.617(.A)-.65 G .617 -(suggested v)-2.5 F .616(alue for)-.25 F .558(sites desiring persistent\ +(suggested v)-2.5 F .617(alue for)-.25 F .558(sites desiring persistent\ host status is \231.hoststat\232 \(i.e., a subdirectory of the queue) -174 381 R(directory\).)174 393 Q 24.51(IgnoreDots [i])102 409.2 R 1.172 -(Ignore dots in incoming messages.)3.672 F 1.172(This is al)6.172 F -.1 -(wa)-.1 G 1.171(ys disabled \(that is, dots are).1 F(al)174 421.2 Q -.1 -(wa)-.1 G(ys accepted\) when reading SMTP mail.).1 E(InputMailFilters=) -102 437.4 Q F2(name)A(,name)-.1 E(,...)-.1 E F1 3.621(Ac)174 449.4 S -1.122(omma separated list of \214lters which determines which \214lters\ - \(see the "X \212)-3.621 F 1.768 -(Mail Filter \(Milter\) De\214nitions" section\) and the in)174 461.4 R --.2(vo)-.4 G 1.768(cation sequence are con-).2 F .367 -(tacted for incoming SMTP messages.)174 473.4 R .367 -(If none are set, no \214lters will be contacted.)5.367 F(LD)102 489.6 Q +174 417 R(directory\).)174 429 Q 24.51(IgnoreDots [i])102 445.2 R .155 +(Ignore dots in incoming messages.)2.655 F .156(This is al)5.156 F -.1 +(wa)-.1 G .156(ys disabled \(that is, dots are al-).1 F -.1(wa)174 457.2 +S(ys accepted\) when reading SMTP mail.).1 E(InputMailFilters=)102 473.4 +Q F2(name)A(,name)-.1 E(,...)-.1 E F1 3.622(Ac)174 485.4 S 1.122(omma s\ +eparated list of \214lters which determines which \214lters \(see the "\ +X \212)-3.622 F 1.768 +(Mail Filter \(Milter\) De\214nitions" section\) and the in)174 497.4 R +-.2(vo)-.4 G 1.768(cation sequence are con-).2 F +(tacted for incoming SMTP messages.)174 509.4 Q +(If none are set, no \214lters will be contacted.)5 E(LD)102 525.6 Q (APDef)-.4 E(aultSpec=)-.1 E F2(spec)A F1 2.058 -([no short name] Sets a def)174 501.6 R 2.057 +([no short name] Sets a def)174 537.6 R 2.057 (ault map speci\214cation for LD)-.1 F 2.057(AP maps.)-.4 F 2.057(The v) -7.057 F(alue)-.25 E .673(should only contain LD)174 513.6 R .674 +7.057 F(alue)-.25 E .673(should only contain LD)174 549.6 R .674 (AP speci\214c settings such as \231-h host -p port -d bindDN\232.)-.4 F -.501(The settings will be used for all LD)174 525.6 R .501 -(AP maps unless the indi)-.4 F .5(vidual map speci\214ca-)-.25 F 1.5 -(tion o)174 537.6 R -.15(ve)-.15 G 1.5(rrides a setting.).15 F 1.5 -(This option should be set before an)6.5 F 4(yL)-.15 G -.4(DA)-4 G 4(Pm) -.4 G 1.5(aps are)-4 F(de\214ned.)174 549.6 Q(LogLe)102 565.8 Q -.15(ve) --.25 G(l=).15 E F2(n)A F1([L] Set the log le)22.88 E -.15(ve)-.25 G 2.5 -(lt).15 G(o)-2.5 E F2(n)2.5 E F1 5(.D)C(ef)-5 E(aults to 9.)-.1 E(M)102 -582 Q F2 1.666(xv)C(alue)-1.666 E F1 .255([no long v)35.344 F .255 -(ersion] Set the macro)-.15 F F2(x)2.755 E F1(to)2.755 E F2(value)2.755 -E F1 5.255(.T)C .255(his is intended only for use from the)-5.255 F -(command line.)174 594 Q(The)5 E F02.5 E F1(\215ag is preferred.) -2.5 E -1.04(MailboxDatabase [no)102 610.2 R 2.967(short name] T)5.467 F -2.967(ype of lookup to \214nd information about local mailbox)-.8 F(es,) --.15 E(def)174 622.2 Q .145(aults to `)-.1 F(`pw')-.74 E 2.645('w)-.74 G -.145(hich uses)-2.645 F F2 -.1(ge)2.645 G(tpwnam).1 E F1 5.145(.O)C .145 -(ther types can be introduced by adding)-5.145 F -(them to the source code, see libsm/mbdb)174 634.2 Q(.c for details.)-.4 -E 33.94(UseMSP [no)102 650.4 R .163 +.501(The settings will be used for all LD)174 561.6 R .501 +(AP maps unless the indi)-.4 F .5(vidual map speci\214ca-)-.25 F .302 +(tion o)174 573.6 R -.15(ve)-.15 G .302(rrides a setting.).15 F .302 +(This option should be set before an)5.302 F 2.802(yL)-.15 G -.4(DA) +-2.802 G 2.802(Pm).4 G .303(aps are de-)-2.802 F(\214ned.)174 585.6 Q +(LogLe)102 601.8 Q -.15(ve)-.25 G(l=).15 E F2(n)A F1([L] Set the log le) +22.88 E -.15(ve)-.25 G 2.5(lt).15 G(o)-2.5 E F2(n)2.5 E F1 5(.D)C(ef)-5 +E(aults to 9.)-.1 E(M)102 618 Q F2 1.666(xv)C(alue)-1.666 E F1 .255 +([no long v)35.344 F .255(ersion] Set the macro)-.15 F F2(x)2.755 E F1 +(to)2.755 E F2(value)2.755 E F1 5.255(.T)C .255 +(his is intended only for use from the)-5.255 F(command line.)174 630 Q +(The)5 E F02.5 E F1(\215ag is preferred.)2.5 E -1.04 +(MailboxDatabase [no)102 646.2 R 1.447(short name] T)3.947 F 1.448 +(ype of lookup to \214nd information about local mailbox)-.8 F 1.448 +(es, de-)-.15 F -.1(fa)174 658.2 S .932(ults to `).1 F(`pw')-.74 E 3.432 +('w)-.74 G .932(hich uses)-3.432 F F2 -.1(ge)3.432 G(tpwnam).1 E F1 +5.932(.O)C .931(ther types can be introduced by adding)-5.932 F +(them to the source code, see libsm/mbdb)174 670.2 Q(.c for details.)-.4 +E 33.94(UseMSP [no)102 686.4 R .163 (short name] Use as mail submission program, i.e., allo)2.663 F 2.664 (wg)-.25 G .164(roup writable queue)-2.664 F .954(\214les if the group \ -is the same as that of a set-group-ID sendmail binary)174 662.4 R 5.954 -(.S)-.65 G .954(ee the)-5.954 F(\214le)174 674.4 Q F0(sendmail/SECURITY) -2.5 E F1(in the distrib)2.5 E(ution tarball.)-.2 E 11.17(MatchGECOS [G]) -102 690.6 R(Allo)3.333 E 3.333(wf)-.25 G .833 -(uzzy matching on the GECOS \214eld.)-3.333 F .834 -(If this \215ag is set, and the usual)5.833 F .868(user name lookups f) -174 702.6 R .867(ail \(that is, there is no alias with this name and a) --.1 F F2 -.1(ge)3.367 G(tpwnam).1 E F1 -.1(fa)174 714.6 S 1.155 -(ils\), sequentially search the passw).1 F 1.155 -(ord \214le for a matching entry in the GECOS)-.1 F 0 Cg EP -%%Page: 72 68 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-72 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 3.696 -(\214eld. This)174 96 R 1.196(also requires that MA)3.696 F 1.196 -(TCHGECOS be turned on during compilation.)-1.11 F -(This option is not recommended.)174 108 Q(MaxAliasRecursion=)102 124.2 -Q/F2 10/Times-Italic@0 SF(N)A F1 -([no short name] The maximum depth of alias recursion \(def)174 136.2 Q -(ault: 10\).)-.1 E(MaxDaemonChildren=)102 152.4 Q F2(N)A F1 .539 -([no short name] If set,)174 164.4 R F2(sendmail)3.039 E F1 .539 -(will refuse connections when it has more than)3.039 F F2(N)3.04 E F1 -.886(children processing incoming mail or automatic queue runs.)174 -176.4 R .885(This does not limit)5.885 F .812 -(the number of outgoing connections.)174 188.4 R .812(If the def)5.812 F -(ault)-.1 E F0(Deli)3.313 E -.1(ve)-.1 G(ryMode).1 E F1(\(background\)) -3.313 E 3.135(is used, then)174 200.4 R F2(sendmail)5.635 E F1 3.134 -(may create an almost unlimited number of children)5.635 F .294 -(\(depending on the number of transactions and the relati)174 212.4 R -.594 -.15(ve exe)-.25 H .295(cution times of mail).15 F 1.236 -(receiption and mail deli)174 224.4 R -.15(ve)-.25 G 3.736(ry\). If).15 -F 1.236(the limit should be enforced, then a)3.736 F F0(Deli)3.735 E -.1 -(ve)-.1 G(ry-).1 E(Mode)174 236.4 Q F1 1.483 -(other than background must be used.)3.983 F 1.484 -(If not set, there is no limit to the)6.483 F -(number of children -- that is, the system load a)174 248.4 Q -.15(ve) --.2 G(rage controls this.).15 E(MaxHeadersLength=)102 264.6 Q F2(N)A F1 -.188([no short name] If set to a v)174 276.6 R .187 -(alue greater than zero it speci\214es the maximum length)-.25 F .637 -(of the sum of all headers.)174 288.6 R .638(This can be used to pre) -5.637 F -.15(ve)-.25 G .638(nt a denial of service attack.).15 F -(The def)174 300.6 Q(ault is 32K.)-.1 E(MaxHopCount=)102 316.8 Q F2(N)A -F1 1.238([h] The maximum hop count.)174 328.8 R 1.238(Messages that ha) -6.238 F 1.537 -.15(ve b)-.2 H 1.237(een processed more than).15 F F2(N) -3.737 E F1(times are assumed to be in a loop and are rejected.)174 340.8 -Q(Def)5 E(aults to 25.)-.1 E(MaxMessageSize=)102 357 Q F2(N)A F1 2.562 -([no short name] Specify the maximum message size to be adv)174 369 R -2.563(ertised in the)-.15 F 1.023(ESMTP EHLO response.)174 381 R 1.023 -(Messages lar)6.023 F 1.022(ger than this will be rejected.)-.18 F 1.022 -(If set to a)6.022 F -.25(va)174 393 S .834 -(lue greater than zero, that v).25 F .834 -(alue will be listed in the SIZE response, otherwise)-.25 F(SIZE is adv) -174 405 Q(ertised in the ESMTP EHLO response without a parameter)-.15 E -(.)-.55 E(MaxMimeHeaderLength=)102 421.2 Q F2(N[/M])A F1 .343([no short\ - name] Sets the maximum length of certain MIME header \214eld v)174 -433.2 R .343(alues to)-.25 F F2(N)174 445.2 Q F1 3.618 -(characters. These)3.618 F 1.118 -(MIME header \214elds are determined by being a member of)3.618 F .895 -(class {checkMIMET)174 457.2 R -.15(ex)-.7 G .895 -(tHeaders}, which currently contains only the header Con-).15 F 2.559 -(tent-Description. F)174 469.2 R .059 -(or some of these headers which tak)-.15 F 2.559(ep)-.1 G .059 -(arameters, the maximum)-2.559 F .102 -(length of each parameter is set to)174 481.2 R F2(M)2.602 E F1 .102 -(if speci\214ed.)2.602 F(If)5.102 E F2(/M)2.602 E F1 .101 -(is not speci\214ed, one half of)2.602 F F2(N)174 493.2 Q F1 1.775 -(will be used.)4.275 F 1.775(By def)6.775 F 1.775(ault, these v)-.1 F -1.776(alues are 2048 and 1024, respecti)-.25 F -.15(ve)-.25 G(ly).15 E -6.776(.T)-.65 G(o)-7.576 E(allo)174 505.2 Q 2.5(wa)-.25 G .3 -.15(ny l) --2.5 H(ength, a v).15 E(alue of 0 can be speci\214ed.)-.25 E -(MaxNOOPCommands=)102 521.4 Q F2(N)A F1(Ov)174 533.4 Q 2.104 -(erride the def)-.15 F 2.104(ault of)-.1 F F0(MAXNOOPCOMMANDS)4.603 E F1 -2.103(for the number of)4.603 F F2(useless)4.603 E F1 -(commands, see Section "Measures ag)174 545.4 Q -(ainst Denial of Service Attacks".)-.05 E(MaxQueueChildren=)102 561.6 Q -F2(N)A F1 .304([no short name] When set, this limits the number of conc\ -urrent queue runner pro-)174 573.6 R .202(cesses to)174 585.6 R F2(N.) -2.702 E F1 .201 -(This helps to control the amount of system resources used when pro-) -5.202 F 1.255(cessing the queue.)174 597.6 R 1.255 -(When there are multiple queue groups de\214ned and the total)6.255 F -1.2(number of queue runners for these queue groups w)174 609.6 R 1.2 -(ould e)-.1 F(xceed)-.15 E F2(MaxQueueChil-)3.7 E(dr)174 621.6 Q(en)-.37 -E F1 .472(then the queue groups will not all run concurrently)2.972 F -2.972(.T)-.65 G .472(hat is, some portion of)-2.972 F .871 -(the queue groups will run concurrently such that)174 633.6 R F2 -(MaxQueueChildr)3.371 E(en)-.37 E F1 .871(will not be)3.371 F -.15(ex) -174 645.6 S 1.892(ceeded, while the remaining queue groups will be run \ -later \(in round robin).15 F 1.3(order\). See also)174 657.6 R F2 -(MaxRunner)3.8 E(sP)-.1 E(erQueue)-.8 E F1 1.3(and the section)3.8 F F0 -1.3(Queue Gr)3.8 F 1.3(oup Declara-)-.18 F(tion)174 669.6 Q F1 5.756(.N) -C(otice:)-5.756 E F2(sendmail)3.256 E F1 .757(does not count indi)3.256 -F .757(vidual queue runners, b)-.25 F .757(ut only sets of)-.2 F 1.451 -(processes that act on a w)174 681.6 R 3.951(orkgroup. Hence)-.1 F 1.451 -(the actual number of queue runners)3.951 F 1.414(may be lo)174 693.6 R -1.414(wer than the limit imposed by)-.25 F F2(MaxQueueChildr)3.914 E(en) --.37 E F1 6.414(.T)C 1.414(his discrepanc)-6.414 F(y)-.15 E 1.424 -(can be lar)174 705.6 R 1.424(ge if some queue runners ha)-.18 F 1.724 --.15(ve t)-.2 H 3.924(ow).15 G 1.424(ait for a slo)-4.024 F 3.923(ws) --.25 G(erv)-3.923 E 1.423(er and if short)-.15 F(interv)174 717.6 Q -(als are used.)-.25 E 0 Cg EP +is the same as that of a set-group-ID sendmail binary)174 698.4 R 5.954 +(.S)-.65 G .954(ee the)-5.954 F(\214le)174 710.4 Q F0(sendmail/SECURITY) +2.5 E F1(in the distrib)2.5 E(ution tarball.)-.2 E 0 Cg EP %%Page: 73 69 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-73)195.86 E/F1 10/Times-Roman@0 SF(MaxQueueRunSize=)102 96 Q/F2 -10/Times-Italic@0 SF(N)A F1 .677([no short name] The maximum number of \ -jobs that will be processed in a single)174 108 R .502(queue run.)174 -120 R .501(If not set, there is no limit on the size.)5.502 F .501 -(If you ha)5.501 F .801 -.15(ve ve)-.2 H .501(ry lar).15 F .501 -(ge queues)-.18 F .445(or a v)174 132 R .445(ery short queue run interv) --.15 F .445(al this could be unstable.)-.25 F(Ho)5.445 E(we)-.25 E -.15 -(ve)-.25 G 1.245 -.4(r, s).15 H .445(ince the \214rst).4 F F2(N)174 144 -Q F1 1.115(jobs in queue directory order are run \(rather than the)3.615 -F F2(N)3.615 E F1 1.115(highest priority jobs\))3.615 F .136 -(this should be set as high as possible to a)174 156 R -.2(vo)-.2 G .136 -(id \231losing\232 jobs that happen to f).2 F .137(all late)-.1 F 2.326 -(in the queue directory)174 168 R 7.326(.N)-.65 G 2.326 -(ote: this option also restricts the number of entries)-7.326 F 1.442 -(printed by)174 180 R F2(mailq)3.942 E F1 6.443(.T)C 1.443(hat is, if) --6.443 F F2(MaxQueueRunSize)3.943 E F1 1.443(is set to a v)3.943 F(alue) --.25 E F0(N)3.943 E F1(lar)3.943 E 1.443(ger than)-.18 F -(zero, then only)174 192 Q F0(N)2.5 E F1 -(entries are printed per queue group.)2.5 E(MaxRecipientsPerMessage=)102 -208.2 Q F2(N)A F1 1.672([no short name] The maximum number of recipient\ -s that will be accepted per)174 220.2 R 1.458 -(message in an SMTP transaction.)174 232.2 R 1.458 -(Note: setting this too lo)6.458 F 3.959(wc)-.25 G 1.459 -(an interfere with)-3.959 F .049(sending mail from MU)174 244.2 R .049 -(As that use SMTP for initial submission.)-.4 F .048 -(If not set, there is)5.048 F -(no limit on the number of recipients per en)174 256.2 Q -.15(ve)-.4 G -(lope.).15 E(MaxRunnersPerQueue=)102 272.4 Q F2(N)A F1 2.003 -([no short name] This sets the def)174 284.4 R 2.004 -(ault maximum number of queue runners for)-.1 F 1.162(queue groups.)174 -296.4 R 1.162(Up to)6.162 F F2(N)3.662 E F1 1.161(queue runners will w) -3.662 F 1.161(ork in parallel on a queue group')-.1 F(s)-.55 E 3.465 -(messages. This)174 308.4 R .965 -(is useful where the processing of a message in the queue might)3.465 F -.945(delay the processing of subsequent messages. Such a delay may be t\ -he result of)174 320.4 R .116(non-erroneous situations such as a lo)174 -332.4 R 2.616(wb)-.25 G .116(andwidth connection.)-2.616 F .116 -(May be o)5.116 F -.15(ve)-.15 G(rridden).15 E .645 -(on a per queue group basis by setting the)174 344.4 R F2(Runner)3.144 E -(s)-.1 E F1 .644(option; see the section)3.144 F F0(Queue)3.144 E(Gr)174 -356.4 Q(oup Declaration)-.18 E F1 5(.T)C(he def)-5 E -(ault is 1 when not set.)-.1 E(MeT)102 372.6 Q 40.86(oo [m])-.8 F .367 -(Send to me too, e)2.866 F -.15(ve)-.25 G 2.867(ni).15 G 2.867(fIa) --2.867 G 2.867(mi)-2.867 G 2.867(na)-2.867 G 2.867(na)-2.867 G .367 -(lias e)-2.867 F 2.867(xpansion. This)-.15 F .367(option is deprecated) -2.867 F(and will be remo)174 384.6 Q -.15(ve)-.15 G 2.5(df).15 G -(rom a future v)-2.5 E(ersion.)-.15 E 44.5(Milter [no)102 400.8 R .778 -(short name] This option has se)3.278 F -.15(ve)-.25 G .777 -(ral sub\(sub\)options.).15 F .777(The names of the sub-)5.777 F 1.134 -(options are separated by dots.)174 412.8 R 1.135(At the \214rst le) -6.134 F -.15(ve)-.25 G 3.635(lt).15 G 1.135(he follo)-3.635 F 1.135 -(wing options are a)-.25 F -.25(va)-.2 G(il-).25 E(able:)174 424.8 Q -(LogLe)214 441 Q -.15(ve)-.25 G 15(lL).15 G(og le)-15 E -.15(ve)-.25 G -2.5(lf).15 G(or input mail \214lter actions, def)-2.5 E(aults to LogLe) --.1 E -.15(ve)-.25 G(l.).15 E 22.1(macros Speci\214es)214 453 R -(list of macro to transmit to \214lters.)2.5 E(See list belo)267.48 465 -Q -.65(w.)-.25 G 2.459(The `)174 481.2 R(`macros')-.74 E 4.959('o)-.74 G -2.458(ption has the follo)-4.959 F 2.458 -(wing suboptions which specify the list of)-.25 F -(macro to transmit to milters after a certain e)174 493.2 Q -.15(ve)-.25 -G(nt occurred.).15 E 14.88(connect After)214 509.4 R -(session connection start)2.5 E 28.76(helo After)214 521.4 R -(EHLO/HELO command)2.5 E(en)214 533.4 Q 12.5(vfrom After)-.4 F -(MAIL From command)2.5 E(en)214 545.4 Q 16.39(vrcpt After)-.4 F(RCPT T) -2.5 E 2.5(oc)-.8 G(ommand)-2.5 E 29.32(data After)214 557.4 R -.4(DA)2.5 -G 1.86 -.93(TA c)-.71 H(ommand.).93 E 31.54(eoh After)214 569.4 R -.4 -(DA)2.5 G 1.86 -.93(TA c)-.71 H(ommand and header).93 E 28.76(eom After) -214 581.4 R -.4(DA)2.5 G 1.86 -.93(TA c)-.71 H(ommand and terminating `) -.93 E(`.)-.74 E -.74('')-.7 G(By def)174 597.6 Q -(ault the lists of macros are empty)-.1 E 5(.E)-.65 G(xample:)-5 E 2.5 -(OM)214 613.8 S(ilter)-2.5 E(.LogLe)-.55 E -.15(ve)-.25 G(l=12).15 E 2.5 -(OM)214 625.8 S(ilter)-2.5 E(.macros.connect=j, _, {daemon_name})-.55 E -(MinFreeBlocks=)102 646.2 Q F2(N)A F1 1.538([b] Insist on at least)174 -658.2 R F2(N)4.038 E F1 1.539 -(blocks free on the \214lesystem that holds the queue \214les)4.039 F -.846(before accepting email via SMTP)174 670.2 R 5.846(.I)-1.11 G 3.346 -(ft)-5.846 G .846(here is insuf)-3.346 F .846(\214cient space)-.25 F F2 -(sendmail)3.346 E F1(gi)3.345 E -.15(ve)-.25 G 3.345(sa).15 G -(452 response to the MAIL command.)174 682.2 Q(This in)5 E -(vites the sender to try ag)-.4 E(ain later)-.05 E(.)-.55 E -(MaxQueueAge=)102 698.4 Q F2 -.1(age)C F1 .345 -([no short name] If this is set to a v)174 710.4 R .346 -(alue greater than zero, entries in the queue will)-.25 F 1.094 -(be retried during a queue run only if the indi)174 722.4 R 1.094 -(vidual retry time has been reached)-.25 F 0 Cg EP +(SMM:08-73)195.86 E/F1 10/Times-Roman@0 SF 11.17(MatchGECOS [G])102 96 R +(Allo)3.333 E 3.333(wf)-.25 G .833(uzzy matching on the GECOS \214eld.) +-3.333 F .834(If this \215ag is set, and the usual)5.833 F .868 +(user name lookups f)174 108 R .867 +(ail \(that is, there is no alias with this name and a)-.1 F/F2 10 +/Times-Italic@0 SF -.1(ge)3.367 G(tpwnam).1 E F1 -.1(fa)174 120 S 1.155 +(ils\), sequentially search the passw).1 F 1.155 +(ord \214le for a matching entry in the GECOS)-.1 F 3.696(\214eld. This) +174 132 R 1.196(also requires that MA)3.696 F 1.196 +(TCHGECOS be turned on during compilation.)-1.11 F +(This option is not recommended.)174 144 Q(MaxAliasRecursion=)102 160.2 +Q F2(N)A F1([no short name] The maximum depth of alias recursion \(def) +174 172.2 Q(ault: 10\).)-.1 E(MaxDaemonChildren=)102 188.4 Q F2(N)A F1 +.539([no short name] If set,)174 200.4 R F2(sendmail)3.039 E F1 .539 +(will refuse connections when it has more than)3.039 F F2(N)3.04 E F1 +.886(children processing incoming mail or automatic queue runs.)174 +212.4 R .885(This does not limit)5.885 F .812 +(the number of outgoing connections.)174 224.4 R .812(If the def)5.812 F +(ault)-.1 E F0(Deli)3.313 E -.1(ve)-.1 G(ryMode).1 E F1(\(background\)) +3.313 E 1.324(is used, then)174 236.4 R F2(sendmail)3.824 E F1 1.323 +(may create an almost unlimited number of children \(de-)3.824 F .207 +(pending on the number of transactions and the relati)174 248.4 R .508 +-.15(ve exe)-.25 H .208(cution times of mail re-).15 F .125 +(ceiption and mail deli)174 260.4 R -.15(ve)-.25 G 2.624(ry\). If).15 F +.124(the limit should be enforced, then a)2.624 F F0(Deli)2.624 E -.1 +(ve)-.1 G(ryMode).1 E F1 .332(other than background must be used.)174 +272.4 R .332(If not set, there is no limit to the number of)5.332 F +(children -- that is, the system load a)174 284.4 Q -.15(ve)-.2 G +(rage controls this.).15 E(MaxHeadersLength=)102 300.6 Q F2(N)A F1 .188 +([no short name] If set to a v)174 312.6 R .187 +(alue greater than zero it speci\214es the maximum length)-.25 F .637 +(of the sum of all headers.)174 324.6 R .638(This can be used to pre) +5.637 F -.15(ve)-.25 G .638(nt a denial of service attack.).15 F +(The def)174 336.6 Q(ault is 32K.)-.1 E(MaxHopCount=)102 352.8 Q F2(N)A +F1 1.238([h] The maximum hop count.)174 364.8 R 1.238(Messages that ha) +6.238 F 1.537 -.15(ve b)-.2 H 1.237(een processed more than).15 F F2(N) +3.737 E F1(times are assumed to be in a loop and are rejected.)174 376.8 +Q(Def)5 E(aults to 25.)-.1 E(MaxMessageSize=)102 393 Q F2(N)A F1 2.562 +([no short name] Specify the maximum message size to be adv)174 405 R +2.563(ertised in the)-.15 F 1.023(ESMTP EHLO response.)174 417 R 1.023 +(Messages lar)6.023 F 1.022(ger than this will be rejected.)-.18 F 1.022 +(If set to a)6.022 F -.25(va)174 429 S .834 +(lue greater than zero, that v).25 F .834 +(alue will be listed in the SIZE response, otherwise)-.25 F(SIZE is adv) +174 441 Q(ertised in the ESMTP EHLO response without a parameter)-.15 E +(.)-.55 E(MaxMimeHeaderLength=)102 457.2 Q F2(N[/M])A F1 .343([no short\ + name] Sets the maximum length of certain MIME header \214eld v)174 +469.2 R .343(alues to)-.25 F F2(N)174 481.2 Q F1 3.618 +(characters. These)3.618 F 1.118 +(MIME header \214elds are determined by being a member of)3.618 F .895 +(class {checkMIMET)174 493.2 R -.15(ex)-.7 G .895 +(tHeaders}, which currently contains only the header Con-).15 F 2.559 +(tent-Description. F)174 505.2 R .059 +(or some of these headers which tak)-.15 F 2.559(ep)-.1 G .059 +(arameters, the maximum)-2.559 F .102 +(length of each parameter is set to)174 517.2 R F2(M)2.602 E F1 .102 +(if speci\214ed.)2.602 F(If)5.102 E F2(/M)2.602 E F1 .101 +(is not speci\214ed, one half of)2.602 F F2(N)174 529.2 Q F1 .716 +(will be used.)3.216 F .716(By def)5.716 F .716(ault, these v)-.1 F .717 +(alues are 2048 and 1024, respecti)-.25 F -.15(ve)-.25 G(ly).15 E 5.717 +(.T)-.65 G 3.217(oa)-6.517 G(l-)-3.217 E(lo)174 541.2 Q 2.5(wa)-.25 G .3 +-.15(ny l)-2.5 H(ength, a v).15 E(alue of 0 can be speci\214ed.)-.25 E +(MaxNOOPCommands=)102 557.4 Q F2(N)A F1(Ov)174 569.4 Q 2.104 +(erride the def)-.15 F 2.104(ault of)-.1 F F0(MAXNOOPCOMMANDS)4.603 E F1 +2.103(for the number of)4.603 F F2(useless)4.603 E F1 +(commands, see Section "Measures ag)174 581.4 Q +(ainst Denial of Service Attacks".)-.05 E(MaxQueueChildren=)102 597.6 Q +F2(N)A F1 .304([no short name] When set, this limits the number of conc\ +urrent queue runner pro-)174 609.6 R .202(cesses to)174 621.6 R F2(N.) +2.702 E F1 .201 +(This helps to control the amount of system resources used when pro-) +5.202 F 1.255(cessing the queue.)174 633.6 R 1.255 +(When there are multiple queue groups de\214ned and the total)6.255 F +1.2(number of queue runners for these queue groups w)174 645.6 R 1.2 +(ould e)-.1 F(xceed)-.15 E F2(MaxQueueChil-)3.7 E(dr)174 657.6 Q(en)-.37 +E F1 .472(then the queue groups will not all run concurrently)2.972 F +2.972(.T)-.65 G .472(hat is, some portion of)-2.972 F .871 +(the queue groups will run concurrently such that)174 669.6 R F2 +(MaxQueueChildr)3.371 E(en)-.37 E F1 .871(will not be)3.371 F -.15(ex) +174 681.6 S .673(ceeded, while the remaining queue groups will be run l\ +ater \(in round robin or).15 F(-)-.2 E .466(der\). See also)174 693.6 R +F2(MaxRunner)2.966 E(sP)-.1 E(erQueue)-.8 E F1 .466(and the section) +2.966 F F0 .465(Queue Gr)2.965 F .465(oup Declaration)-.18 F F1(.)A +(Notice:)174 705.6 Q F2(sendmail)3.674 E F1 1.174(does not count indi) +3.674 F 1.174(vidual queue runners, b)-.25 F 1.174(ut only sets of pro-) +-.2 F .848(cesses that act on a w)174 717.6 R 3.348(orkgroup. Hence)-.1 +F .847(the actual number of queue runners may)3.348 F 0 Cg EP %%Page: 74 70 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-74 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.476 -(which is doubled for each attempt.)174 96 R 1.476 -(The maximum retry time is limited by the)6.476 F(speci\214ed v)174 108 -Q(alue.)-.25 E(MinQueueAge=)102 124.2 Q/F2 10/Times-Italic@0 SF -.1(age) -C F1 .887([no short name] Don')174 136.2 R 3.387(tp)-.18 G .887 -(rocess an)-3.387 F 3.387(yq)-.15 G .886(ueued jobs that ha)-3.387 F -1.186 -.15(ve b)-.2 H .886(een in the queue less).15 F 1.899 -(than the indicated time interv)174 148.2 R 4.399(al. This)-.25 F 1.899 -(is intended to allo)4.399 F 4.399(wy)-.25 G 1.9(ou to get respon-) --4.399 F(si)174 160.2 Q -.15(ve)-.25 G .665 -(ness by processing the queue f).15 F .665 -(airly frequently without thrashing your system)-.1 F 1.91 -(by trying jobs too often.)174 172.2 R 1.91(The def)6.91 F 1.91 -(ault units are minutes.)-.1 F 1.91(Note: This option is)6.91 F 8.212 -(ignored for queue runs that select a subset of the queue, i.e.,)174 -184.2 R(\231\255q[!][I|R|S|Q][string]\232)174 196.2 Q(MustQuoteChars=) -102 212.4 Q F2(s)A F1 1.252([no short name] Sets the list of characters\ - that must be quoted if used in a full)174 224.4 R 1.217 -(name that is in the phrase part of a `)174 236.4 R 1.217 -(`phrase
')-.74 F 3.717('s)-.74 G 3.717(yntax. The)-3.717 F -(def)3.717 E 1.217(ault is)-.1 F -.74(``)174 248.4 S.74 E -.74('') --.7 G 6.605(.T).74 G 1.605(he characters `)-6.605 F(`@,;:\\\(\)[]')-.74 -E 4.106('a)-.74 G 1.606(re al)-4.106 F -.1(wa)-.1 G 1.606 -(ys added to this list.).1 F 1.606(Note: T)6.606 F 4.106(oa)-.8 G -.2 -(vo)-4.306 G(id).2 E -(potential breakage of DKIM signatures it is useful to set)174 260.4 Q -2.5(OM)214 276.6 S(ustQuoteChars=.)-2.5 E(Moreo)174 292.8 Q -.15(ve)-.15 -G .8 -.4(r, r).15 H(elax).4 E -(ed header signing should be used for DKIM signatures.)-.15 E 7.85 -(NiceQueueRun [no)102 309 R 2.156 -(short name] The priority of queue runners \(nice\(3\)\).)4.656 F 2.156 -(This v)7.156 F 2.155(alue must be)-.25 F(greater or equal zero.)174 321 -Q(NoRecipientAction)102 337.2 Q .554([no short name] The action to tak) -174 349.2 R 3.055(ew)-.1 G .555(hen you recei)-3.055 F .855 -.15(ve a m) --.25 H .555(essage that has no v).15 F(alid)-.25 E .625 -(recipient headers \(T)174 361.2 R .625(o:, Cc:, Bcc:, or Apparently-T) --.8 F .625(o: \212 the last included for back)-.8 F .108 -(compatibility with old)174 373.2 R F2(sendmail)2.608 E F1 2.608 -(s\). It)B .108(can be)2.608 F F0(None)2.608 E F1 .109 -(to pass the message on unmod-)2.609 F .297 -(i\214ed, which violates the protocol,)174 385.2 R F0(Add-T)2.796 E(o) --.92 E F1 .296(to add a T)2.796 F .296(o: header with an)-.8 F 2.796(yr) --.15 G(ecipients)-2.796 E 1.638(it can \214nd in the en)174 397.2 R -.15 -(ve)-.4 G 1.638(lope \(which might e).15 F 1.638 -(xpose Bcc: recipients\),)-.15 F F0(Add-A)4.139 E(ppar)-.25 E(-)-.37 E -(ently-T)174 409.2 Q(o)-.92 E F1 .338(to add an Apparently-T)2.838 F -.337(o: header \(this is only for back-compatibility and)-.8 F .841 -(is of)174 421.2 R .841(\214cially deprecated\),)-.25 F F0(Add-T)3.341 E -(o-Undisclosed)-.92 E F1 .841(to add a header \231T)3.341 F .842 -(o: undisclosed-)-.8 F .398(recipients:;\232 to mak)174 433.2 R 2.898 -(et)-.1 G .397(he header le)-2.898 F -.05(ga)-.15 G 2.897(lw).05 G .397 -(ithout disclosing an)-2.897 F .397(ything, or)-.15 F F0(Add-Bcc)2.897 E -F1(to)2.897 E(add an empty Bcc: header)174 445.2 Q(.)-.55 E 1.18 -(OldStyleHeaders [o])102 461.4 R 1.713(Assume that the headers may be i\ -n old format, i.e., spaces delimit names.)4.213 F 1.069 -(This actually turns on an adapti)174 473.4 R 1.368 -.15(ve a)-.25 H -1.068(lgorithm: if an).15 F 3.568(yr)-.15 G 1.068 -(ecipient address contains a)-3.568 F 1.681 -(comma, parenthesis, or angle brack)174 485.4 R 1.681 -(et, it will be assumed that commas already)-.1 F -.15(ex)174 497.4 S -2.825(ist. If).15 F .325 -(this \215ag is not on, only commas delimit names.)2.825 F .325 -(Headers are al)5.325 F -.1(wa)-.1 G .325(ys out-).1 F -(put with commas between the names.)174 509.4 Q(Def)5 E(aults to of)-.1 -E(f.)-.25 E(OperatorChars=)102 525.6 Q F2 -.15(ch)C(arlist).15 E F1 -1.438([$o macro] The list of characters that are considered to be \231o\ -perators\232, that is,)174 537.6 R .82(characters that delimit tok)174 -549.6 R 3.32(ens. All)-.1 F .82(operator characters are tok)3.32 F .82 -(ens by themselv)-.1 F(es;)-.15 E .078 -(sequences of non-operator characters are also tok)174 561.6 R 2.578 -(ens. White)-.1 F .078(space characters sep-)2.578 F .27(arate tok)174 -573.6 R .27(ens b)-.1 F .269(ut are not tok)-.2 F .269(ens themselv)-.1 -F .269(es \212 for e)-.15 F .269(xample, \231)-.15 F .269 -(AAA.BBB\232 has three)-.8 F(tok)174 585.6 Q .433(ens, b)-.1 F .433 -(ut \231)-.2 F .433(AAA BBB\232 has tw)-.8 F 2.933(o. If)-.1 F .433 -(not set, OperatorChars def)2.933 F .433(aults to \231.)-.1 F 1.666 -(:@[])1.666 G<9a3b>-1.666 E(additionally)174 597.6 Q 3.566(,t)-.65 G -1.066(he characters \231\()-3.566 F 1.666(\)<>,;)1.666 G 3.566<9a61> --1.666 G 1.066(re al)-3.566 F -.1(wa)-.1 G 1.065(ys operators.).1 F -1.065(Note that Operator)6.065 F(-)-.2 E -(Chars must be set in the con\214guration \214le before an)174 609.6 Q -2.5(yr)-.15 G(ulesets.)-2.5 E(PidFile=)102 625.8 Q F2(\214lename)A F1 -1.3([no short name] Filename of the pid \214le.)3.58 F(\(def)6.3 E 1.3 -(ault is _P)-.1 F -1.11(AT)-.92 G(H_SENDMAILPID\).)1.11 E(The)174 637.8 -Q F2(\214lename)2.832 E F1 .332(is macro-e)2.832 F .332 -(xpanded before it is opened, and unlink)-.15 F .331(ed when)-.1 F F2 -(sendmail)2.831 E F1 -.15(ex)174 649.8 S(its.).15 E(PostmasterCop)102 -666 Q(y=)-.1 E F2(postmaster)A F1 .003 -([P] If set, copies of error messages will be sent to the named)174 678 -R F2(postmaster)2.504 E F1 5.004(.O)C .004(nly the)-5.004 F .687 -(header of the f)174 690 R .687(ailed message is sent.)-.1 F .687 -(Errors resulting from messages with a ne)5.687 F(g-)-.15 E(ati)174 702 -Q 1.83 -.15(ve p)-.25 H 1.53(recedence will not be sent.).15 F 1.531 -(Since most errors are user problems, this is)6.531 F .453 -(probably not a good idea on lar)174 714 R .453(ge sites, and ar)-.18 F -.453(guably contains all sorts of pri)-.18 F -.25(va)-.25 G -.15(cy).25 -G 0 Cg EP +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .503 +(be lo)174 96 R .503(wer than the limit imposed by)-.25 F/F2 10 +/Times-Italic@0 SF(MaxQueueChildr)3.004 E(en)-.37 E F1 5.504(.T)C .504 +(his discrepanc)-5.504 F 3.004(yc)-.15 G .504(an be)-3.004 F(lar)174 108 +Q .961(ge if some queue runners ha)-.18 F 1.261 -.15(ve t)-.2 H 3.461 +(ow).15 G .961(ait for a slo)-3.561 F 3.46(ws)-.25 G(erv)-3.46 E .96 +(er and if short interv)-.15 F(als)-.25 E(are used.)174 120 Q +(MaxQueueRunSize=)102 136.2 Q F2(N)A F1 .677([no short name] The maximu\ +m number of jobs that will be processed in a single)174 148.2 R .502 +(queue run.)174 160.2 R .501(If not set, there is no limit on the size.) +5.502 F .501(If you ha)5.501 F .801 -.15(ve ve)-.2 H .501(ry lar).15 F +.501(ge queues)-.18 F .445(or a v)174 172.2 R .445 +(ery short queue run interv)-.15 F .445(al this could be unstable.)-.25 +F(Ho)5.445 E(we)-.25 E -.15(ve)-.25 G 1.245 -.4(r, s).15 H .445 +(ince the \214rst).4 F F2(N)174 184.2 Q F1 1.115 +(jobs in queue directory order are run \(rather than the)3.615 F F2(N) +3.615 E F1 1.115(highest priority jobs\))3.615 F .136 +(this should be set as high as possible to a)174 196.2 R -.2(vo)-.2 G +.136(id \231losing\232 jobs that happen to f).2 F .137(all late)-.1 F +2.326(in the queue directory)174 208.2 R 7.326(.N)-.65 G 2.326 +(ote: this option also restricts the number of entries)-7.326 F 1.442 +(printed by)174 220.2 R F2(mailq)3.942 E F1 6.443(.T)C 1.443(hat is, if) +-6.443 F F2(MaxQueueRunSize)3.943 E F1 1.443(is set to a v)3.943 F(alue) +-.25 E F0(N)3.943 E F1(lar)3.943 E 1.443(ger than)-.18 F +(zero, then only)174 232.2 Q F0(N)2.5 E F1 +(entries are printed per queue group.)2.5 E(MaxRecipientsPerMessage=)102 +248.4 Q F2(N)A F1 1.672([no short name] The maximum number of recipient\ +s that will be accepted per)174 260.4 R 1.458 +(message in an SMTP transaction.)174 272.4 R 1.458 +(Note: setting this too lo)6.458 F 3.959(wc)-.25 G 1.459 +(an interfere with)-3.959 F .049(sending mail from MU)174 284.4 R .049 +(As that use SMTP for initial submission.)-.4 F .048 +(If not set, there is)5.048 F +(no limit on the number of recipients per en)174 296.4 Q -.15(ve)-.4 G +(lope.).15 E(MaxRunnersPerQueue=)102 312.6 Q F2(N)A F1 2.003 +([no short name] This sets the def)174 324.6 R 2.004 +(ault maximum number of queue runners for)-.1 F 1.162(queue groups.)174 +336.6 R 1.162(Up to)6.162 F F2(N)3.662 E F1 1.161(queue runners will w) +3.662 F 1.161(ork in parallel on a queue group')-.1 F(s)-.55 E 3.465 +(messages. This)174 348.6 R .965 +(is useful where the processing of a message in the queue might)3.465 F +.945(delay the processing of subsequent messages. Such a delay may be t\ +he result of)174 360.6 R .116(non-erroneous situations such as a lo)174 +372.6 R 2.616(wb)-.25 G .116(andwidth connection.)-2.616 F .116 +(May be o)5.116 F -.15(ve)-.15 G(rridden).15 E .645 +(on a per queue group basis by setting the)174 384.6 R F2(Runner)3.144 E +(s)-.1 E F1 .644(option; see the section)3.144 F F0(Queue)3.144 E(Gr)174 +396.6 Q(oup Declaration)-.18 E F1 5(.T)C(he def)-5 E +(ault is 1 when not set.)-.1 E(MeT)102 412.8 Q 40.86(oo [m])-.8 F .367 +(Send to me too, e)2.866 F -.15(ve)-.25 G 2.867(ni).15 G 2.867(fIa) +-2.867 G 2.867(mi)-2.867 G 2.867(na)-2.867 G 2.867(na)-2.867 G .367 +(lias e)-2.867 F 2.867(xpansion. This)-.15 F .367(option is deprecated) +2.867 F(and will be remo)174 424.8 Q -.15(ve)-.15 G 2.5(df).15 G +(rom a future v)-2.5 E(ersion.)-.15 E 44.5(Milter [no)102 441 R .778 +(short name] This option has se)3.278 F -.15(ve)-.25 G .777 +(ral sub\(sub\)options.).15 F .777(The names of the sub-)5.777 F 1.134 +(options are separated by dots.)174 453 R 1.135(At the \214rst le)6.134 +F -.15(ve)-.25 G 3.635(lt).15 G 1.135(he follo)-3.635 F 1.135 +(wing options are a)-.25 F -.25(va)-.2 G(il-).25 E(able:)174 465 Q +(LogLe)214 481.2 Q -.15(ve)-.25 G 15(lL).15 G(og le)-15 E -.15(ve)-.25 G +2.5(lf).15 G(or input mail \214lter actions, def)-2.5 E(aults to LogLe) +-.1 E -.15(ve)-.25 G(l.).15 E 22.1(macros Speci\214es)214 493.2 R +(list of macro to transmit to \214lters.)2.5 E(See list belo)267.48 +505.2 Q -.65(w.)-.25 G 2.459(The `)174 521.4 R(`macros')-.74 E 4.959('o) +-.74 G 2.458(ption has the follo)-4.959 F 2.458 +(wing suboptions which specify the list of)-.25 F +(macro to transmit to milters after a certain e)174 533.4 Q -.15(ve)-.25 +G(nt occurred.).15 E 14.88(connect After)214 549.6 R +(session connection start)2.5 E 28.76(helo After)214 561.6 R +(EHLO/HELO command)2.5 E(en)214 573.6 Q 12.5(vfrom After)-.4 F +(MAIL command)2.5 E(en)214 585.6 Q 16.39(vrcpt After)-.4 F(RCPT command) +2.5 E 29.32(data After)214 597.6 R -.4(DA)2.5 G 1.86 -.93(TA c)-.71 H +(ommand.).93 E 31.54(eoh After)214 609.6 R -.4(DA)2.5 G 1.86 -.93(TA c) +-.71 H(ommand and header).93 E 28.76(eom After)214 621.6 R -.4(DA)2.5 G +1.86 -.93(TA c)-.71 H(ommand and terminating `).93 E(`.)-.74 E -.74('') +-.7 G(By def)174 637.8 Q(ault the lists of macros are empty)-.1 E 5(.E) +-.65 G(xample:)-5 E 2.5(OM)214 654 S(ilter)-2.5 E(.LogLe)-.55 E -.15(ve) +-.25 G(l=12).15 E 2.5(OM)214 666 S(ilter)-2.5 E +(.macros.connect=j, _, {daemon_name})-.55 E(MinFreeBlocks=)102 686.4 Q +F2(N)A F1 .488([b] Insist on at least)174 698.4 R F2(N)2.988 E F1 .488 +(blocks free on the \214lesystem that holds the queue \214les be-)2.988 +F .161(fore accepting email via SMTP)174 710.4 R 5.161(.I)-1.11 G 2.661 +(ft)-5.161 G .161(here is insuf)-2.661 F .161(\214cient space)-.25 F F2 +(sendmail)2.661 E F1(gi)2.66 E -.15(ve)-.25 G 2.66(sa4).15 G(52)-2.66 E +(response to the MAIL command.)174 722.4 Q(This in)5 E +(vites the sender to try ag)-.4 E(ain later)-.05 E(.)-.55 E 0 Cg EP %%Page: 75 71 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-75)195.86 E/F1 10/Times-Roman@0 SF .1(violations, b)174 96 R -.101(ut it seems to be popular with certain operating systems v)-.2 F -2.601(endors. The)-.15 F 1.919(address is macro e)174 108 R 1.918 -(xpanded at the time of deli)-.15 F -.15(ve)-.25 G(ry).15 E 6.918(.D) --.65 G(ef)-6.918 E 1.918(aults to no postmaster)-.1 F(copies.)174 120 Q -(Pri)102 136.2 Q -.25(va)-.25 G -.15(cy).25 G(Options=).15 E/F2 10 -/Times-Italic@0 SF(opt,opt,...)1.666 E F1 1.191([p] Set the pri)174 -148.2 R -.25(va)-.25 G -.15(cy).25 G F2(opt)3.841 E F1 3.691(ions. `)B -(`Pri)-.74 E -.25(va)-.25 G -.15(cy).25 G 2.671 -.74('' i).15 H 3.692 -(sr).74 G 1.192(eally a misnomer; man)-3.692 F 3.692(yo)-.15 G 3.692(ft) --3.692 G 1.192(hese are)-3.692 F .929(just a w)174 160.2 R .928 -(ay of insisting on stricter adherence to the SMTP protocol.)-.1 F(The) -5.928 E F2(opt)3.428 E F1(ions)A(can be selected from:)174 172.2 Q 56.37 -(public Allo)214 188.4 R 2.5(wo)-.25 G(pen access)-2.5 E 27.49 -(needmailhelo Insist)214 200.4 R(on HELO or EHLO command before MAIL)2.5 -E(neede)214 212.4 Q 25.98(xpnhelo Insist)-.15 F -(on HELO or EHLO command before EXPN)2.5 E(noe)214 224.4 Q 52.08 -(xpn Disallo)-.15 F 2.5(wE)-.25 G(XPN entirely)-2.5 E 2.5(,i)-.65 G -(mplies no)-2.5 E -.15(ve)-.15 G(rb).15 E(.)-.4 E 28.61 -(needvrfyhelo Insist)214 236.4 R(on HELO or EHLO command before VRFY)2.5 -E(no)214 248.4 Q 54.86(vrfy Disallo)-.15 F 2.5(wV)-.25 G(RFY entirely) --2.5 E 55.82(noetrn Disallo)214 260.4 R 2.5(wE)-.25 G(TRN entirely)-2.5 -E(no)214 272.4 Q -.15(ve)-.15 G 53.9(rb Disallo).15 F 2.5(wV)-.25 G -(ERB entirely)-2.5 E 30.82(restrictmailq Restrict)214 284.4 R -(mailq command)2.5 E 35.27(restrictqrun Restrict)214 296.4 R -(\255q command line \215ag)2.5 E(restricte)214 308.4 Q 24.87 -(xpand Restrict)-.15 F2.5 E 2.5(va)-.15 G -(nd \255v command line \215ags)-2.5 E 40.27(noreceipts Don')214 322.4 R -2.5(tr)-.18 G(eturn success DSNs)-2.5 E/F3 7/Times-Roman@0 SF(20)-4 I F1 -27.49(nobodyreturn Don')214 334.4 R 2.5(tr)-.18 G -(eturn the body of a message with DSNs)-2.5 E(goa)214 346.4 Q -.1(wa) --.15 G 53.02(yD).1 G(isallo)-53.02 E 2.5(we)-.25 G -(ssentially all SMTP status queries)-2.5 E(authw)214 358.4 Q 27.59 -(arnings Put)-.1 F(X-Authentication-W)2.5 E(arning: headers in messages) --.8 E(and log w)297.87 370.4 Q(arnings)-.1 E 12.5 -(noactualrecipient Don')214 382.4 R 2.5(tp)-.18 G -(ut X-Actual-Recipient lines in DSNs)-2.5 E(which re)297.87 394.4 Q -.15 -(ve)-.25 G(al the actual account that addresses map to.).15 E 2.976 -(The \231goa)174 410.6 R -.1(wa)-.15 G 2.976 -(y\232 pseudo-\215ag sets all \215ags e).1 F 2.977 -(xcept \231noreceipts\232, \231restrictmailq\232,)-.15 F 4.558 -(\231restrictqrun\232, \231restricte)174 422.6 R 4.557 -(xpand\232, \231noetrn\232, and \231nobodyreturn\232.)-.15 F 4.557 -(If mailq is)9.557 F 1.842(restricted, only people in the same group as\ - the queue directory can print the)174 434.6 R 2.545(queue. If)174 446.6 -R .044(queue runs are restricted, only root and the o)2.545 F .044 -(wner of the queue directory)-.25 F 1.299(can run the queue.)174 458.6 R -1.299(The \231restricte)6.299 F 1.299(xpand\232 pseudo-\215ag instructs) --.15 F F2(sendmail)3.799 E F1 1.299(to drop)3.799 F(pri)174 470.6 Q -(vile)-.25 E 1.608(ges when the)-.15 F F04.108 E(v)-.15 E F1 1.608 -(option is gi)4.108 F -.15(ve)-.25 G 4.108(nb).15 G 4.108(yu)-4.108 G -1.608(sers who are neither root nor the)-4.108 F -.35(Tr)174 482.6 S -1.33(ustedUser so users cannot read pri).35 F -.25(va)-.25 G 1.33 -(te aliases, forw).25 F 1.33(ards, or :include: \214les.)-.1 F(It)6.33 E -.634(will add the \231NonRootSafeAddr\232 to the \231DontBlameSendmail\ -\232 option to pre)174 494.6 R -.15(ve)-.25 G(nt).15 E .436 -(misleading unsafe address w)174 506.6 R 2.936(arnings. It)-.1 F .436 -(also o)2.936 F -.15(ve)-.15 G .436(rrides the).15 F F02.936 E F1 -(\(v)2.936 E .436(erbose\) command)-.15 F 1.293(line option to pre)174 -518.6 R -.15(ve)-.25 G 1.292(nt information leakage.).15 F 1.292 -(Authentication W)6.292 F 1.292(arnings add w)-.8 F(arn-)-.1 E .183 -(ings about v)174 530.6 R .183 -(arious conditions that may indicate attempts to spoof the mail system,) --.25 F(such as using a non-standard queue directory)174 542.6 Q(.)-.65 E -(ProcessT)102 558.8 Q(itlePre\214x=)-.35 E F2(string)A F1 1.196 -([no short name] Pre\214x the process title sho)174 570.8 R 1.195 -(wn on 'ps' listings with)-.25 F F2(string)3.695 E F1 6.195(.T)C(he) --6.195 E F2(string)174 582.8 Q F1(will be macro processed.)2.5 E -(QueueDirectory=)102 599 Q F2(dir)A F1 .583 -([Q] The QueueDirectory option serv)174 611 R .584(es tw)-.15 F 3.084 -(op)-.1 G 3.084(urposes. First,)-3.084 F .584(it speci\214es the direc-) -3.084 F .483(tory or set of directories that comprise the def)174 623 R -.482(ault queue group.)-.1 F .482(Second, it speci-)5.482 F .104(\214es\ - the directory D which is the ancestor of all queue directories, and wh\ -ich send-)174 635 R .721(mail uses as its current w)174 647 R .721 -(orking directory)-.1 F 5.721(.W)-.65 G .721 -(hen sendmail dumps core, it lea)-5.721 F -.15(ve)-.2 G(s).15 E 2.872 -(its core \214les in D.)174 659 R 2.873(There are tw)7.872 F 5.373(oc) --.1 G 5.373(ases. If)-5.373 F F2(dir)5.373 E F1 2.873 -(ends with an asterisk \(e)5.373 F(g,)-.15 E F2(/var/spool/mqueue/qd*) -174 671 Q F1 .253 -(\), then all of the directories or symbolic links to directories)B .32 -LW 76 680.6 72 680.6 DL 80 680.6 76 680.6 DL 84 680.6 80 680.6 DL 88 -680.6 84 680.6 DL 92 680.6 88 680.6 DL 96 680.6 92 680.6 DL 100 680.6 96 -680.6 DL 104 680.6 100 680.6 DL 108 680.6 104 680.6 DL 112 680.6 108 -680.6 DL 116 680.6 112 680.6 DL 120 680.6 116 680.6 DL 124 680.6 120 -680.6 DL 128 680.6 124 680.6 DL 132 680.6 128 680.6 DL 136 680.6 132 -680.6 DL 140 680.6 136 680.6 DL 144 680.6 140 680.6 DL 148 680.6 144 -680.6 DL 152 680.6 148 680.6 DL 156 680.6 152 680.6 DL 160 680.6 156 -680.6 DL 164 680.6 160 680.6 DL 168 680.6 164 680.6 DL 172 680.6 168 -680.6 DL 176 680.6 172 680.6 DL 180 680.6 176 680.6 DL 184 680.6 180 -680.6 DL 188 680.6 184 680.6 DL 192 680.6 188 680.6 DL 196 680.6 192 -680.6 DL 200 680.6 196 680.6 DL 204 680.6 200 680.6 DL 208 680.6 204 -680.6 DL 212 680.6 208 680.6 DL 216 680.6 212 680.6 DL/F4 5 -/Times-Roman@0 SF(20)93.6 691 Q/F5 8/Times-Roman@0 SF(N.B.: the)3.2 I/F6 -8/Times-Bold@0 SF(nor)2 E(eceipts)-.144 E F5(\215ag turns of)2 E 2(fs) --.2 G(upport for RFC 1891 \(Deli)-2 E -.12(ve)-.2 G -(ry Status Noti\214cation\).).12 E 0 Cg EP +(SMM:08-75)195.86 E/F1 10/Times-Roman@0 SF(MaxQueueAge=)102 96 Q/F2 10 +/Times-Italic@0 SF -.1(age)C F1 .345 +([no short name] If this is set to a v)174 108 R .346 +(alue greater than zero, entries in the queue will)-.25 F 1.094 +(be retried during a queue run only if the indi)174 120 R 1.094 +(vidual retry time has been reached)-.25 F 1.476 +(which is doubled for each attempt.)174 132 R 1.476 +(The maximum retry time is limited by the)6.476 F(speci\214ed v)174 144 +Q(alue.)-.25 E(MinQueueAge=)102 160.2 Q F2 -.1(age)C F1 .887 +([no short name] Don')174 172.2 R 3.387(tp)-.18 G .887(rocess an)-3.387 +F 3.387(yq)-.15 G .886(ueued jobs that ha)-3.387 F 1.186 -.15(ve b)-.2 H +.886(een in the queue less).15 F .69(than the indicated time interv)174 +184.2 R 3.191(al. This)-.25 F .691(is intended to allo)3.191 F 3.191(wy) +-.25 G .691(ou to get responsi)-3.191 F -.15(ve)-.25 G(-).15 E .897 +(ness by processing the queue f)174 196.2 R .896 +(airly frequently without thrashing your system by)-.1 F .329 +(trying jobs too often.)174 208.2 R .329(The def)5.329 F .329 +(ault units are minutes.)-.1 F .33(Note: This option is ignored)5.329 F +(for queue runs that select a subset of the queue, i.e., \231\255q[!][I\ +|R|S|Q][string]\232)174 220.2 Q(MustQuoteChars=)102 236.4 Q F2(s)A F1 +1.253([no short name] Sets the list of characters that must be quoted i\ +f used in a full)174 248.4 R 1.217 +(name that is in the phrase part of a `)174 260.4 R 1.217 +(`phrase
')-.74 F 3.717('s)-.74 G 3.717(yntax. The)-3.717 F +(def)3.718 E 1.218(ault is)-.1 F -.74(``)174 272.4 S.74 E -.74('') +-.7 G 5.265(.T).74 G .265(he characters `)-5.265 F(`@,;:\\\(\)[]')-.74 E +2.765('a)-.74 G .265(re al)-2.765 F -.1(wa)-.1 G .265 +(ys added to this list.).1 F .264(Note: T)5.264 F 2.764(oa)-.8 G -.2(vo) +-2.964 G .264(id po-).2 F +(tential breakage of DKIM signatures it is useful to set)174 284.4 Q 2.5 +(OM)214 300.6 S(ustQuoteChars=.)-2.5 E(Moreo)174 316.8 Q -.15(ve)-.15 G +.8 -.4(r, r).15 H(elax).4 E +(ed header signing should be used for DKIM signatures.)-.15 E 7.85 +(NiceQueueRun [no)102 333 R 2.156 +(short name] The priority of queue runners \(nice\(3\)\).)4.655 F 2.156 +(This v)7.156 F 2.156(alue must be)-.25 F(greater or equal zero.)174 345 +Q(NoRecipientAction)102 361.2 Q .555([no short name] The action to tak) +174 373.2 R 3.055(ew)-.1 G .555(hen you recei)-3.055 F .855 -.15(ve a m) +-.25 H .554(essage that has no v).15 F(alid)-.25 E .625 +(recipient headers \(T)174 385.2 R .625(o:, Cc:, Bcc:, or Apparently-T) +-.8 F .625(o: \212 the last included for back)-.8 F .109 +(compatibility with old)174 397.2 R F2(sendmail)2.609 E F1 2.609 +(s\). It)B .109(can be)2.609 F F0(None)2.608 E F1 .108 +(to pass the message on unmod-)2.608 F .296 +(i\214ed, which violates the protocol,)174 409.2 R F0(Add-T)2.796 E(o) +-.92 E F1 .296(to add a T)2.796 F .296(o: header with an)-.8 F 2.797(yr) +-.15 G(ecipients)-2.797 E 1.638(it can \214nd in the en)174 421.2 R -.15 +(ve)-.4 G 1.638(lope \(which might e).15 F 1.638 +(xpose Bcc: recipients\),)-.15 F F0(Add-A)4.138 E(ppar)-.25 E(-)-.37 E +(ently-T)174 433.2 Q(o)-.92 E F1 .337(to add an Apparently-T)2.837 F +.337(o: header \(this is only for back-compatibility and)-.8 F .842 +(is of)174 445.2 R .841(\214cially deprecated\),)-.25 F F0(Add-T)3.341 E +(o-Undisclosed)-.92 E F1 .841(to add a header \231T)3.341 F .841 +(o: undisclosed-)-.8 F .397(recipients:;\232 to mak)174 457.2 R 2.897 +(et)-.1 G .397(he header le)-2.897 F -.05(ga)-.15 G 2.897(lw).05 G .397 +(ithout disclosing an)-2.897 F .398(ything, or)-.15 F F0(Add-Bcc)2.898 E +F1(to)2.898 E(add an empty Bcc: header)174 469.2 Q(.)-.55 E 1.18 +(OldStyleHeaders [o])102 485.4 R 1.713(Assume that the headers may be i\ +n old format, i.e., spaces delimit names.)4.214 F 1.068 +(This actually turns on an adapti)174 497.4 R 1.368 -.15(ve a)-.25 H +1.068(lgorithm: if an).15 F 3.569(yr)-.15 G 1.069 +(ecipient address contains a)-3.569 F .281 +(comma, parenthesis, or angle brack)174 509.4 R .281 +(et, it will be assumed that commas already e)-.1 F(x-)-.15 E 2.813 +(ist. If)174 521.4 R .313 +(this \215ag is not on, only commas delimit names.)2.813 F .314 +(Headers are al)5.314 F -.1(wa)-.1 G .314(ys output).1 F +(with commas between the names.)174 533.4 Q(Def)5 E(aults to of)-.1 E +(f.)-.25 E(OperatorChars=)102 549.6 Q F2 -.15(ch)C(arlist).15 E F1 1.438 +([$o macro] The list of characters that are considered to be \231operat\ +ors\232, that is,)174 561.6 R .82(characters that delimit tok)174 573.6 +R 3.32(ens. All)-.1 F .82(operator characters are tok)3.32 F .82 +(ens by themselv)-.1 F(es;)-.15 E .078 +(sequences of non-operator characters are also tok)174 585.6 R 2.578 +(ens. White)-.1 F .078(space characters sep-)2.578 F .269(arate tok)174 +597.6 R .269(ens b)-.1 F .269(ut are not tok)-.2 F .269(ens themselv)-.1 +F .269(es \212 for e)-.15 F .269(xample, \231)-.15 F .27 +(AAA.BBB\232 has three)-.8 F(tok)174 609.6 Q .433(ens, b)-.1 F .433 +(ut \231)-.2 F .433(AAA BBB\232 has tw)-.8 F 2.933(o. If)-.1 F .433 +(not set, OperatorChars def)2.933 F .433(aults to \231.)-.1 F 1.666 +(:@[])1.666 G<9a3b>-1.666 E(additionally)174 621.6 Q 3.565(,t)-.65 G +1.065(he characters \231\()-3.565 F 1.666(\)<>,;)1.666 G 3.565<9a61> +-1.666 G 1.066(re al)-3.565 F -.1(wa)-.1 G 1.066(ys operators.).1 F +1.066(Note that Operator)6.066 F(-)-.2 E +(Chars must be set in the con\214guration \214le before an)174 633.6 Q +2.5(yr)-.15 G(ulesets.)-2.5 E(PidFile=)102 649.8 Q F2(\214lename)A F1 +1.3([no short name] Filename of the pid \214le.)3.58 F(\(def)6.3 E 1.3 +(ault is _P)-.1 F -1.11(AT)-.92 G(H_SENDMAILPID\).)1.11 E(The)174 661.8 +Q F2(\214lename)2.831 E F1 .332(is macro-e)2.831 F .332 +(xpanded before it is opened, and unlink)-.15 F .332(ed when)-.1 F F2 +(sendmail)2.832 E F1 -.15(ex)174 673.8 S(its.).15 E(PostmasterCop)102 +690 Q(y=)-.1 E F2(postmaster)A F1 .003 +([P] If set, copies of error messages will be sent to the named)174 702 +R F2(postmaster)2.503 E F1 5.003(.O)C .003(nly the)-5.003 F 2.42 +(header of the f)174 714 R 2.421(ailed message is sent.)-.1 F 2.421 +(Errors resulting from messages with a)7.421 F 0 Cg EP %%Page: 76 72 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-76 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(be)174 96 -Q .432(ginning with `qd' in)-.15 F/F2 10/Times-Italic@0 SF -(/var/spool/mqueue)2.932 E F1 .433 -(will be used as queue directories of the)2.932 F(def)174 108 Q .276 -(ault queue group, and)-.1 F F2(/var/spool/mqueue)2.776 E F1 .275 -(will be used as the w)2.776 F .275(orking directory)-.1 F 2.82 -(D. Otherwise,)174 120 R F2(dir)2.82 E F1 .32 -(must name a directory \(usually)2.82 F F2(/var/spool/mqueue)2.82 E F1 -.32(\): the def)B(ault)-.1 E .545 -(queue group consists of the single queue directory)174 132 R F2(dir) -3.045 E F1 3.045(,a)C .545(nd the w)-3.045 F .545(orking directory)-.1 F -2.5(Di)174 144 S 2.5(ss)-2.5 G(et to)-2.5 E F2(dir)2.5 E F1 5.001(.T)C -2.501(od)-5.801 G .001 -(e\214ne additional groups of queue directories, use the con\214gura-) --2.501 F .746(tion \214le `Q' command.)174 156 R .746 -(Do not change the queue directory structure while send-)5.746 F -(mail is running.)174 168 Q(QueueF)102 184.2 Q(actor=)-.15 E F2(factor)A -F1 .613([q] Use)174 196.2 R F2(factor)3.113 E F1 .613 -(as the multiplier in the map function to decide when to just queue) -3.113 F .415(up jobs rather than run them.)174 208.2 R .415(This v)5.415 -F .415(alue is di)-.25 F .415(vided by the dif)-.25 F .415 -(ference between the)-.25 F 1.003(current load a)174 220.2 R -.15(ve)-.2 -G 1.003(rage and the load a).15 F -.15(ve)-.2 G 1.004(rage limit \().15 -F F0(QueueLA)A F1 1.004(option\) to determine)3.504 F -(the maximum message priority that will be sent.)174 232.2 Q(Def)5 E -(aults to 600000.)-.1 E(QueueLA=)102 248.4 Q F2(LA)A F1 1.087 -([x] When the system load a)15.26 F -.15(ve)-.2 G 1.087(rage e).15 F -(xceeds)-.15 E F2(LA)3.587 E F1 1.086(and the)3.587 F F0(QueueF)3.586 E -(actor)-.25 E F1(\()3.586 E F0(q)A F1 3.586(\)o)C(ption)-3.586 E(di)174 -260.4 Q 1.465(vided by the dif)-.25 F 1.465 -(ference in the current load a)-.25 F -.15(ve)-.2 G 1.465(rage and the) -.15 F F0(QueueLA)3.965 E F1(option)3.965 E .769(plus one is less than t\ -he priority of the message, just queue messages \(i.e., don')174 272.4 R -(t)-.18 E .247(try to send them\).)174 284.4 R(Def)5.247 E .247 -(aults to 8 multiplied by the number of processors online on)-.1 F -(the system \(if that can be determined\).)174 296.4 Q(QueueFileMode=) -102 312.6 Q F2(mode)A F1 .962([no short name] Def)174 324.6 R .962 -(ault permissions for queue \214les \(octal\).)-.1 F .961 -(If not set, sendmail)5.961 F .212(uses 0600 unless its real and ef)174 -336.6 R(fecti)-.25 E .513 -.15(ve u)-.25 H .213(id are dif).15 F .213 -(ferent in which case it uses 0644.)-.25 F(QueueSortOrder=)102 352.8 Q -F2(algorithm)A F1 .097([no short name] Sets the)174 364.8 R F2 -(algorithm)2.597 E F1 .096(used for sorting the queue.)2.597 F .096 -(Only the \214rst char)5.096 F(-)-.2 E 1.021(acter of the v)174 376.8 R -1.021(alue is used.)-.25 F(Le)6.021 E -.05(ga)-.15 G 3.521(lv).05 G -1.021(alues are \231host\232 \(to order by the name of the)-3.771 F 1.73 -(\214rst host name of the \214rst recipient\), \231\214lename\232 \(to \ -order by the name of the)174 388.8 R .283(queue \214le name\), \231time\ -\232 \(to order by the submission/creation time\), \231random\232 \(to) -174 400.8 R .906(order randomly\), \231modi\214cation\232 \(to order by\ - the modi\214cation time of the qf \214le)174 412.8 R 1.349(\(older ent\ -ries \214rst\)\), \231none\232 \(to not order\), and \231priority\232 \ -\(to order by message)174 424.8 R 2.528(priority\). Host)174 436.8 R -.028(ordering mak)2.528 F .028(es better use of the connection cache, b) --.1 F .027(ut may tend to)-.2 F .322(process lo)174 448.8 R 2.822(wp) --.25 G .322(riority messages that go to a single host o)-2.822 F -.15 -(ve)-.15 G 2.823(rh).15 G .323(igh priority messages)-2.823 F 1.825 -(that go to se)174 460.8 R -.15(ve)-.25 G 1.825 -(ral hosts; it probably shouldn').15 F 4.325(tb)-.18 G 4.324(eu)-4.325 G -1.824(sed on slo)-4.324 F 4.324(wn)-.25 G(etw)-4.324 E 1.824(ork links.) --.1 F .614(Filename and modi\214cation time ordering sa)174 472.8 R -.15 -(ve)-.2 G 3.114(st).15 G .614(he o)-3.114 F -.15(ve)-.15 G .614 -(rhead of reading all of the).15 F .671 -(queued items before starting the queue run.)174 484.8 R .671 -(Creation \(submission\) time ordering)5.671 F 1.854(is almost al)174 -496.8 R -.1(wa)-.1 G 1.854(ys a bad idea, since it allo).1 F 1.854 -(ws lar)-.25 F 1.854(ge, b)-.18 F 1.854(ulk mail to go out before)-.2 F -(smaller)174 508.8 Q 3.714(,p)-.4 G 1.214(ersonal mail, b)-3.714 F 1.214 -(ut may ha)-.2 F 1.513 -.15(ve a)-.2 H 1.213 -(pplicability on some hosts with v).15 F 1.213(ery f)-.15 F(ast)-.1 E -2.631(connections. Random)174 520.8 R .131(is useful if se)2.631 F -.15 -(ve)-.25 G .132(ral queue runners are started by hand which).15 F .39 -(try to drain the same queue since odds are the)174 532.8 R 2.889(yw) --.15 G .389(ill be w)-2.889 F .389(orking on dif)-.1 F .389 -(ferent parts)-.25 F(of the queue at the same time.)174 544.8 Q -(Priority ordering is the def)5 E(ault.)-.1 E(QueueT)102 561 Q(imeout=) --.35 E F2(timeout)A F1 .355([T] A synon)174 573 R .355(ym for \231T)-.15 -F 2.855(imeout.queuereturn\232. Use)-.35 F .356 -(that form instead of the \231Queue-)2.855 F -.35(Ti)174 585 S -(meout\232 form.).35 E 32.83(RandFile [no)102 601.2 R 1.036(short name]\ - Name of \214le containing random data or the name of the UNIX)3.537 F -(sock)174 613.2 Q 1.63(et if EGD is used.)-.1 F 4.131(A\()6.631 G 1.631 -(required\) pre\214x "e)-4.131 F 1.631 -(gd:" or "\214le:" speci\214es the type.)-.15 F(ST)174 625.2 Q(AR)-.93 E -1.561 -(TTLS requires this \214lename if the compile \215ag HASURANDOMDEV is) --.6 F(not set \(see sendmail/README\).)174 637.2 Q(Resolv)102 653.4 Q -(erOptions=)-.15 E F2(options)A F1 .127([I] Set resolv)174 665.4 R .127 -(er options.)-.15 F -1.11(Va)5.127 G .127(lues can be set using)1.11 F -F0(+)2.627 E F2<8d61>A(g)-.1 E F1 .127(and cleared using)2.627 F F0 -2.628 E F2<8d61>A(g)-.1 E F1 2.628(;t)C(he)-2.628 E F2<8d61>174 677.4 Q -(g)-.1 E F1 5.014(sc)C 2.514(an be \231deb)-5.014 F 2.513 -(ug\232, \231aaonly\232, \231use)-.2 F 2.513 -(vc\232, \231primary\232, \231igntc\232, \231recurse\232, \231def-)-.25 -F 2.688 -(names\232, \231stayopen\232, \231use_inet6\232, or \231dnsrch\232.)174 -689.4 R 2.689(The string \231HasW)7.689 F(ildcardMX\232)-.4 E .283 -(\(without a)174 701.4 R F0(+)2.783 E F1(or)2.783 E F02.783 E F1 -2.783(\)c)C .283(an be speci\214ed to turn of)-2.783 F 2.782(fm)-.25 G -.282(atching ag)-2.782 F .282(ainst MX records when)-.05 F .89 -(doing name canoni\214cations.)174 713.4 R .89(The string \231W)5.89 F -(orkAroundBrok)-.8 E .89(enAAAA\232 \(without a)-.1 F F0(+)174 725.4 Q -F1(or)3.473 E F03.473 E F1 3.473(\)c)C .972(an be speci\214ed to w) --3.473 F .972(ork around some brok)-.1 F .972(en nameserv)-.1 F .972 -(ers which return)-.15 F 0 Cg EP +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(ne)174 96 +Q -.05(ga)-.15 G(ti).05 E .736 -.15(ve p)-.25 H .436 +(recedence will not be sent.).15 F .435 +(Since most errors are user problems, this is)5.435 F .453 +(probably not a good idea on lar)174 108 R .453(ge sites, and ar)-.18 F +.453(guably contains all sorts of pri)-.18 F -.25(va)-.25 G -.15(cy).25 +G .101(violations, b)174 120 R .101 +(ut it seems to be popular with certain operating systems v)-.2 F 2.6 +(endors. The)-.15 F 1.918(address is macro e)174 132 R 1.918 +(xpanded at the time of deli)-.15 F -.15(ve)-.25 G(ry).15 E 6.919(.D) +-.65 G(ef)-6.919 E 1.919(aults to no postmaster)-.1 F(copies.)174 144 Q +(Pri)102 160.2 Q -.25(va)-.25 G -.15(cy).25 G(Options=).15 E/F2 10 +/Times-Italic@0 SF(opt,opt,...)1.666 E F1 1.192([p] Set the pri)174 +172.2 R -.25(va)-.25 G -.15(cy).25 G F2(opt)3.842 E F1 3.692(ions. `)B +(`Pri)-.74 E -.25(va)-.25 G -.15(cy).25 G 2.672 -.74('' i).15 H 3.692 +(sr).74 G 1.191(eally a misnomer; man)-3.692 F 3.691(yo)-.15 G 3.691(ft) +-3.691 G 1.191(hese are)-3.691 F .928(just a w)174 184.2 R .928 +(ay of insisting on stricter adherence to the SMTP protocol.)-.1 F(The) +5.929 E F2(opt)3.429 E F1(ions)A(can be selected from:)174 196.2 Q 56.37 +(public Allo)214 212.4 R 2.5(wo)-.25 G(pen access)-2.5 E 27.49 +(needmailhelo Insist)214 224.4 R(on HELO or EHLO command before MAIL)2.5 +E(neede)214 236.4 Q 25.98(xpnhelo Insist)-.15 F +(on HELO or EHLO command before EXPN)2.5 E(noe)214 248.4 Q 52.08 +(xpn Disallo)-.15 F 2.5(wE)-.25 G(XPN entirely)-2.5 E 2.5(,i)-.65 G +(mplies no)-2.5 E -.15(ve)-.15 G(rb).15 E(.)-.4 E 28.61 +(needvrfyhelo Insist)214 260.4 R(on HELO or EHLO command before VRFY)2.5 +E(no)214 272.4 Q 54.86(vrfy Disallo)-.15 F 2.5(wV)-.25 G(RFY entirely) +-2.5 E 55.82(noetrn Disallo)214 284.4 R 2.5(wE)-.25 G(TRN entirely)-2.5 +E(no)214 296.4 Q -.15(ve)-.15 G 53.9(rb Disallo).15 F 2.5(wV)-.25 G +(ERB entirely)-2.5 E 30.82(restrictmailq Restrict)214 308.4 R +(mailq command)2.5 E 35.27(restrictqrun Restrict)214 320.4 R +(\255q command line \215ag)2.5 E(restricte)214 332.4 Q 24.87 +(xpand Restrict)-.15 F2.5 E 2.5(va)-.15 G +(nd \255v command line \215ags)-2.5 E 40.27(noreceipts Don')214 346.4 R +2.5(tr)-.18 G(eturn success DSNs)-2.5 E/F3 7/Times-Roman@0 SF(20)-4 I F1 +27.49(nobodyreturn Don')214 358.4 R 2.5(tr)-.18 G +(eturn the body of a message with DSNs)-2.5 E(goa)214 370.4 Q -.1(wa) +-.15 G 53.02(yD).1 G(isallo)-53.02 E 2.5(we)-.25 G +(ssentially all SMTP status queries)-2.5 E(authw)214 382.4 Q 27.59 +(arnings Put)-.1 F(X-Authentication-W)2.5 E(arning: headers in messages) +-.8 E(and log w)297.87 394.4 Q(arnings)-.1 E 12.5 +(noactualrecipient Don')214 406.4 R 2.5(tp)-.18 G +(ut X-Actual-Recipient lines in DSNs)-2.5 E(which re)297.87 418.4 Q -.15 +(ve)-.25 G(al the actual account that addresses map to.).15 E .642 +(The \231goa)174 434.6 R -.1(wa)-.15 G .641 +(y\232 pseudo-\215ag sets all \215ags e).1 F .641 +(xcept \231noreceipts\232, \231restrictmailq\232, \231re-)-.15 F .237 +(strictqrun\232, \231restricte)174 446.6 R .237 +(xpand\232, \231noetrn\232, and \231nobodyreturn\232.)-.15 F .238 +(If mailq is restricted,)5.238 F 1.83(only people in the same group as \ +the queue directory can print the queue.)174 458.6 R(If)6.83 E .639 +(queue runs are restricted, only root and the o)174 470.6 R .64 +(wner of the queue directory can run)-.25 F .407(the queue.)174 482.6 R +.407(The \231restricte)5.407 F .407(xpand\232 pseudo-\215ag instructs) +-.15 F F2(sendmail)2.907 E F1 .406(to drop pri)2.906 F(vile)-.25 E(ges) +-.15 E .072(when the)174 494.6 R F02.572 E(v)-.15 E F1 .072 +(option is gi)2.572 F -.15(ve)-.25 G 2.572(nb).15 G 2.572(yu)-2.572 G +.072(sers who are neither root nor the T)-2.572 F .072(rustedUser so) +-.35 F .03(users cannot read pri)174 506.6 R -.25(va)-.25 G .03 +(te aliases, forw).25 F .03(ards, or :include: \214les.)-.1 F .03 +(It will add the \231Non-)5.03 F .262 +(RootSafeAddr\232 to the \231DontBlameSendmail\232 option to pre)174 +518.6 R -.15(ve)-.25 G .263(nt misleading unsafe).15 F .41(address w)174 +530.6 R 2.91(arnings. It)-.1 F .409(also o)2.909 F -.15(ve)-.15 G .409 +(rrides the).15 F F02.909 E F1(\(v)2.909 E .409 +(erbose\) command line option to pre-)-.15 F -.15(ve)174 542.6 S 1.28 +(nt information leakage.).15 F 1.28(Authentication W)6.28 F 1.28 +(arnings add w)-.8 F 1.28(arnings about v)-.1 F(arious)-.25 E 1.155(con\ +ditions that may indicate attempts to spoof the mail system, such as us\ +ing a)174 554.6 R(non-standard queue directory)174 566.6 Q(.)-.65 E +(ProcessT)102 582.8 Q(itlePre\214x=)-.35 E F2(string)A F1 1.195 +([no short name] Pre\214x the process title sho)174 594.8 R 1.196 +(wn on 'ps' listings with)-.25 F F2(string)3.696 E F1 6.196(.T)C(he) +-6.196 E F2(string)174 606.8 Q F1(will be macro processed.)2.5 E +(QueueDirectory=)102 623 Q F2(dir)A F1 .584 +([Q] The QueueDirectory option serv)174 635 R .584(es tw)-.15 F 3.084 +(op)-.1 G 3.084(urposes. First,)-3.084 F .583(it speci\214es the direc-) +3.083 F .482(tory or set of directories that comprise the def)174 647 R +.482(ault queue group.)-.1 F .483(Second, it speci-)5.483 F .104(\214es\ + the directory D which is the ancestor of all queue directories, and wh\ +ich send-)174 659 R .721(mail uses as its current w)174 671 R .721 +(orking directory)-.1 F 5.721(.W)-.65 G .721 +(hen sendmail dumps core, it lea)-5.721 F -.15(ve)-.2 G(s).15 E .32 LW +76 680.6 72 680.6 DL 80 680.6 76 680.6 DL 84 680.6 80 680.6 DL 88 680.6 +84 680.6 DL 92 680.6 88 680.6 DL 96 680.6 92 680.6 DL 100 680.6 96 680.6 +DL 104 680.6 100 680.6 DL 108 680.6 104 680.6 DL 112 680.6 108 680.6 DL +116 680.6 112 680.6 DL 120 680.6 116 680.6 DL 124 680.6 120 680.6 DL 128 +680.6 124 680.6 DL 132 680.6 128 680.6 DL 136 680.6 132 680.6 DL 140 +680.6 136 680.6 DL 144 680.6 140 680.6 DL 148 680.6 144 680.6 DL 152 +680.6 148 680.6 DL 156 680.6 152 680.6 DL 160 680.6 156 680.6 DL 164 +680.6 160 680.6 DL 168 680.6 164 680.6 DL 172 680.6 168 680.6 DL 176 +680.6 172 680.6 DL 180 680.6 176 680.6 DL 184 680.6 180 680.6 DL 188 +680.6 184 680.6 DL 192 680.6 188 680.6 DL 196 680.6 192 680.6 DL 200 +680.6 196 680.6 DL 204 680.6 200 680.6 DL 208 680.6 204 680.6 DL 212 +680.6 208 680.6 DL 216 680.6 212 680.6 DL/F4 5/Times-Roman@0 SF(20)93.6 +691 Q/F5 8/Times-Roman@0 SF(N.B.: the)3.2 I/F6 8/Times-Bold@0 SF(nor)2 E +(eceipts)-.144 E F5(\215ag turns of)2 E 2(fs)-.2 G +(upport for RFC 1891 \(Deli)-2 E -.12(ve)-.2 G +(ry Status Noti\214cation\).).12 E 0 Cg EP %%Page: 77 73 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-77)195.86 E/F1 10/Times-Roman@0 SF(SER)174 96 Q(VF)-.8 E 1.001 -(AIL \(a temporary f)-.74 F 1.001(ailure\) on T_AAAA \(IPv6\) lookups.) --.1 F 1.001(Notice: it might)6.001 F -(be necessary to apply the same \(or similar\) options to)174 108 Q/F2 -10/Times-Italic@0 SF(submit.cf)2.5 E F1(too.)2.5 E -1.04 -(RequiresDirfsync [no)102 124.2 R 2.782 -(short name] This option can be used to o)5.283 F -.15(ve)-.15 G 2.782 -(rride the compile time \215ag).15 F F0(REQ)174 136.2 Q(UIRES_DIR_FSYNC) --.1 E F1 .871(at runtime by setting it to)3.371 F/F3 9/Times-Roman@0 SF --.09(fa)3.372 G(lse).09 E F1 5.872(.I)C 3.372(ft)-5.872 G .872 -(he compile time)-3.372 F .018 -(\215ag is not set, the option is ignored.)174 148.2 R .017 -(The \215ag turns on support for \214le systems that)5.018 F .209 -(require to call)174 160.2 R F2(fsync\(\))2.709 E F1 .209 -(for a directory if the meta-data in it has been changed.)2.709 F(This) -5.21 E .075(should be turned on at least for older v)174 172.2 R .074 -(ersions of ReiserFS; it is enabled by def)-.15 F(ault)-.1 E 1.45 -(for Linux.)174 184.2 R 1.451 -(According to some information this \215ag is not needed an)6.45 F 1.451 -(ymore for)-.15 F -.1(ke)174 196.2 S(rnel 2.4.16 and ne).1 E(wer)-.25 E -(.)-.55 E 10.61(RrtImpliesDsn [R])102 212.4 R 1.52 -(If this option is set, a \231Return-Receipt-T)4.02 F 1.52 -(o:\232 header causes the request of a)-.8 F 1.02 -(DSN, which is sent to the en)174 224.4 R -.15(ve)-.4 G 1.02 -(lope sender as required by RFC 1891, not to the).15 F(address gi)174 -236.4 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(nt)-2.5 G(he header)-2.5 E(.) --.55 E(RunAsUser=)102 252.6 Q F2(user)A F1 3.753([no short name] The) -2.48 F F2(user)6.253 E F1 3.752(parameter may be a user name \(look) -6.252 F 3.752(ed up in)-.1 F F2(/etc/passwd)174 264.6 Q F1 3.045(\)o)C --5.544 3.045(ra n)-3.045 H .546(umeric user id; either form can ha) --3.045 F .846 -.15(ve \231)-.2 H .546(:group\232 attached \(where).15 F -.966(group can be numeric or symbolic\).)174 276.6 R .965 -(If set to a non-zero \(non-root\) v)5.965 F(alue,)-.25 E F2(send-)3.465 -E(mail)174 290.6 Q F1 .483 -(will change to this user id shortly after startup)2.983 F/F4 7 -/Times-Roman@0 SF(21)-4 I F1 5.484(.T)4 K .484(his a)-5.484 F -.2(vo)-.2 -G .484(ids a certain class).2 F 1.844(of security problems.)174 302.6 R -(Ho)6.844 E(we)-.25 E -.15(ve)-.25 G 2.644 -.4(r, t).15 H 1.844 -(his means that all \231.forw).4 F 1.844(ard\232 and \231:include:\232) --.1 F 1.428(\214les must be readable by the indicated)174 314.6 R F2 -(user)3.928 E F1 1.428(and all \214les to be written must be)3.928 F -.043(writable by)174 326.6 R F2(user)2.543 E F1 .042 -(Also, all \214le and program deli)2.543 F -.15(ve)-.25 G .042 -(ries will be mark).15 F .042(ed unsafe unless)-.1 F 2.101(the option) -174 338.6 R F0(DontBlameSendmail=NonRootSafeAddr)4.601 E F1 2.101 -(is set, in which case the)4.601 F(deli)174 350.6 Q -.15(ve)-.25 G .778 -(ry will be done as).15 F F2(user)3.278 E F1 5.778(.I)C 3.277(ti)-5.778 -G 3.277(sa)-3.277 G .777(lso incompatible with the)-3.277 F F0 -(SafeFileEn)3.277 E(vir)-.4 E(on-)-.18 E(ment)174 362.6 Q F1 2.62 -(option. In)2.62 F .12(other w)2.62 F .121 -(ords, it may not actually add much to security on an a)-.1 F -.15(ve) --.2 G -.2(r-).15 G .593(age system, and may in f)174 374.6 R .592 -(act detract from security \(because other \214le permissions)-.1 F -1.579(must be loosened\).)174 386.6 R(Ho)6.579 E(we)-.25 E -.15(ve)-.25 -G 2.379 -.4(r, i).15 H 4.079(ts).4 G 1.579(hould be useful on \214re) --4.079 F -.1(wa)-.25 G 1.58(lls and other places).1 F(where users don') -174 398.6 Q 2.5(th)-.18 G -2.25 -.2(av e)-2.5 H -(accounts and the aliases \214le is well constrained.)2.7 E(RecipientF) -102 414.8 Q(actor=)-.15 E F2(fact)A F1 .638([y] The indicated)174 426.8 -R F2(fact)3.137 E F1 .637(or is added to the priority \(thus)B F2 -(lowering)3.137 E F1 .637(the priority of the)3.137 F .23 -(job\) for each recipient, i.e., this v)174 438.8 R .231 -(alue penalizes jobs with lar)-.25 F .231(ge numbers of recipi-)-.18 F -2.5(ents. Def)174 450.8 R(aults to 30000.)-.1 E(RefuseLA=)102 467 Q F2 -(LA)A F1 1.012([X] When the system load a)13.59 F -.15(ve)-.2 G 1.012 -(rage e).15 F(xceeds)-.15 E F2(LA)3.512 E F1 3.512(,r)C 1.011 -(efuse incoming SMTP connec-)-3.512 F 2.658(tions. Def)174 479 R .158(a\ -ults to 12 multiplied by the number of processors online on the system) --.1 F(\(if that can be determined\).)174 491 Q(RejectLogInterv)102 507.2 -Q(al=)-.25 E F2(timeout)A F1 1.628([no short name] Log interv)174 519.2 -R 1.627(al when refusing connections for this long \(def)-.25 F(ault:) --.1 E(3h\).)174 531.2 Q(RetryF)102 547.4 Q(actor=)-.15 E F2(fact)A F1 -.771([Z] The)3.74 F F2(fact)3.271 E F1 .771 -(or is added to the priority e)B -.15(ve)-.25 G .772 -(ry time a job is processed.).15 F .772(Thus, each)5.772 F .994(time a \ -job is processed, its priority will be decreased by the indicated v)174 -559.4 R 3.493(alue. In)-.25 F 1.107(most en)174 571.4 R 1.107 -(vironments this should be positi)-.4 F -.15(ve)-.25 G 3.608(,s).15 G -1.108(ince hosts that are do)-3.608 F 1.108(wn are all too)-.25 F -(often do)174 583.4 Q(wn for a long time.)-.25 E(Def)5 E -(aults to 90000.)-.1 E(SafeFileEn)102 599.6 Q(vironment=)-.4 E F2(dir)A -F1 .022([no short name] If this option is set,)174 611.6 R F2(sendmail) -2.521 E F1 .021(will do a)2.521 F F2 -.15(ch)2.521 G -.45(ro).15 G(ot) -.45 E F1 .021(\(2\) call into the indi-)B(cated)174 623.6 Q F2(dir)2.832 -E F1 .333(ectory before doing an)B 2.833<798c>-.15 G .333(le writes.) --2.833 F .333(If the \214le name speci\214ed by the user)5.333 F(be)174 -635.6 Q .588(gins with)-.15 F F2(dir)3.088 E F1 3.087(,t)C .587 -(hat partial path name will be stripped of)-3.087 F 3.087(fb)-.25 G .587 -(efore writing, so \(for)-3.087 F -.15(ex)174 647.6 S 2.224 -(ample\) if the SafeFileEn).15 F 2.224(vironment v)-.4 F 2.225 -(ariable is set to \231/safe\232 then aliases of)-.25 F 1.557(\231/safe\ -/logs/\214le\232 and \231/logs/\214le\232 actually indicate the same \ -\214le.)174 659.6 R(Additionally)6.556 E 4.056(,i)-.65 G(f)-4.056 E -(this option is set,)174 671.6 Q F2(sendmail)2.5 E F1(refuses to deli) -2.5 E -.15(ve)-.25 G 2.5(rt).15 G 2.5(os)-2.5 G(ymbolic links.)-2.5 E -.32 LW 76 681.2 72 681.2 DL 80 681.2 76 681.2 DL 84 681.2 80 681.2 DL 88 -681.2 84 681.2 DL 92 681.2 88 681.2 DL 96 681.2 92 681.2 DL 100 681.2 96 -681.2 DL 104 681.2 100 681.2 DL 108 681.2 104 681.2 DL 112 681.2 108 -681.2 DL 116 681.2 112 681.2 DL 120 681.2 116 681.2 DL 124 681.2 120 -681.2 DL 128 681.2 124 681.2 DL 132 681.2 128 681.2 DL 136 681.2 132 -681.2 DL 140 681.2 136 681.2 DL 144 681.2 140 681.2 DL 148 681.2 144 -681.2 DL 152 681.2 148 681.2 DL 156 681.2 152 681.2 DL 160 681.2 156 -681.2 DL 164 681.2 160 681.2 DL 168 681.2 164 681.2 DL 172 681.2 168 -681.2 DL 176 681.2 172 681.2 DL 180 681.2 176 681.2 DL 184 681.2 180 -681.2 DL 188 681.2 184 681.2 DL 192 681.2 188 681.2 DL 196 681.2 192 -681.2 DL 200 681.2 196 681.2 DL 204 681.2 200 681.2 DL 208 681.2 204 -681.2 DL 212 681.2 208 681.2 DL 216 681.2 212 681.2 DL/F5 5 -/Times-Roman@0 SF(21)93.6 691.6 Q/F6 8/Times-Roman@0 SF(When running as\ - a daemon, it changes to this user after accepting a connection b)3.2 I -(ut before reading an)-.16 E(y)-.12 E F4(SMTP)2 E F6(commands.)2 E 0 Cg -EP +(SMM:08-77)195.86 E/F1 10/Times-Roman@0 SF 2.873(its core \214les in D.) +174 96 R 2.873(There are tw)7.873 F 5.373(oc)-.1 G 5.373(ases. If)-5.373 +F/F2 10/Times-Italic@0 SF(dir)5.373 E F1 2.872 +(ends with an asterisk \(e)5.372 F(g,)-.15 E F2(/var/spool/mqueue/qd*) +174 108 Q F1 .253 +(\), then all of the directories or symbolic links to directories)B(be) +174 120 Q .433(ginning with `qd' in)-.15 F F2(/var/spool/mqueue)2.933 E +F1 .432(will be used as queue directories of the)2.933 F(def)174 132 Q +.275(ault queue group, and)-.1 F F2(/var/spool/mqueue)2.775 E F1 .276 +(will be used as the w)2.775 F .276(orking directory)-.1 F 2.82 +(D. Otherwise,)174 144 R F2(dir)2.82 E F1 .32 +(must name a directory \(usually)2.82 F F2(/var/spool/mqueue)2.82 E F1 +.32(\): the def)B(ault)-.1 E .545 +(queue group consists of the single queue directory)174 156 R F2(dir) +3.045 E F1 3.045(,a)C .545(nd the w)-3.045 F .545(orking directory)-.1 F +2.501(Di)174 168 S 2.501(ss)-2.501 G .001(et to)-2.501 F F2(dir)2.501 E +F1 5.001(.T)C 2.501(od)-5.801 G .001 +(e\214ne additional groups of queue directories, use the con\214gura-) +-2.501 F .745(tion \214le `Q' command.)174 180 R .746 +(Do not change the queue directory structure while send-)5.746 F +(mail is running.)174 192 Q(QueueF)102 208.2 Q(actor=)-.15 E F2(factor)A +F1 .614([q] Use)174 220.2 R F2(factor)3.114 E F1 .613 +(as the multiplier in the map function to decide when to just queue) +3.114 F .415(up jobs rather than run them.)174 232.2 R .415(This v)5.415 +F .415(alue is di)-.25 F .415(vided by the dif)-.25 F .415 +(ference between the)-.25 F 1.004(current load a)174 244.2 R -.15(ve)-.2 +G 1.004(rage and the load a).15 F -.15(ve)-.2 G 1.004(rage limit \().15 +F F0(QueueLA)A F1 1.003(option\) to determine)3.503 F +(the maximum message priority that will be sent.)174 256.2 Q(Def)5 E +(aults to 600000.)-.1 E(QueueLA=)102 272.4 Q F2(LA)A F1 1.086 +([x] When the system load a)15.26 F -.15(ve)-.2 G 1.087(rage e).15 F +(xceeds)-.15 E F2(LA)3.587 E F1 1.087(and the)3.587 F F0(QueueF)3.587 E +(actor)-.25 E F1(\()3.587 E F0(q)A F1 3.587(\)o)C(ption)-3.587 E(di)174 +284.4 Q 1.465(vided by the dif)-.25 F 1.465 +(ference in the current load a)-.25 F -.15(ve)-.2 G 1.465(rage and the) +.15 F F0(QueueLA)3.965 E F1(option)3.965 E .769(plus one is less than t\ +he priority of the message, just queue messages \(i.e., don')174 296.4 R +(t)-.18 E .248(try to send them\).)174 308.4 R(Def)5.247 E .247 +(aults to 8 multiplied by the number of processors online on)-.1 F +(the system \(if that can be determined\).)174 320.4 Q(QueueFileMode=) +102 336.6 Q F2(mode)A F1 .961([no short name] Def)174 348.6 R .962 +(ault permissions for queue \214les \(octal\).)-.1 F .962 +(If not set, sendmail)5.962 F(uses 0600 unless its real and ef)174 360.6 +Q(fecti)-.25 E .3 -.15(ve u)-.25 H(id are dif).15 E +(ferent in which case it uses 0644.)-.25 E(QueueSortOrder=)102 376.8 Q +F2(algorithm)A F1 .097([no short name] Sets the)174 388.8 R F2 +(algorithm)2.597 E F1 .096(used for sorting the queue.)2.597 F .096 +(Only the \214rst char)5.096 F(-)-.2 E 1.021(acter of the v)174 400.8 R +1.021(alue is used.)-.25 F(Le)6.021 E -.05(ga)-.15 G 3.521(lv).05 G +1.021(alues are \231host\232 \(to order by the name of the)-3.771 F 1.73 +(\214rst host name of the \214rst recipient\), \231\214lename\232 \(to \ +order by the name of the)174 412.8 R .283(queue \214le name\), \231time\ +\232 \(to order by the submission/creation time\), \231random\232 \(to) +174 424.8 R .906(order randomly\), \231modi\214cation\232 \(to order by\ + the modi\214cation time of the qf \214le)174 436.8 R 1.349(\(older ent\ +ries \214rst\)\), \231none\232 \(to not order\), and \231priority\232 \ +\(to order by message)174 448.8 R 2.528(priority\). Host)174 460.8 R +.028(ordering mak)2.528 F .028(es better use of the connection cache, b) +-.1 F .027(ut may tend to)-.2 F .322(process lo)174 472.8 R 2.822(wp) +-.25 G .322(riority messages that go to a single host o)-2.822 F -.15 +(ve)-.15 G 2.823(rh).15 G .323(igh priority messages)-2.823 F 1.825 +(that go to se)174 484.8 R -.15(ve)-.25 G 1.825 +(ral hosts; it probably shouldn').15 F 4.325(tb)-.18 G 4.324(eu)-4.325 G +1.824(sed on slo)-4.324 F 4.324(wn)-.25 G(etw)-4.324 E 1.824(ork links.) +-.1 F .614(Filename and modi\214cation time ordering sa)174 496.8 R -.15 +(ve)-.2 G 3.114(st).15 G .614(he o)-3.114 F -.15(ve)-.15 G .614 +(rhead of reading all of the).15 F .671 +(queued items before starting the queue run.)174 508.8 R .671 +(Creation \(submission\) time ordering)5.671 F 1.854(is almost al)174 +520.8 R -.1(wa)-.1 G 1.854(ys a bad idea, since it allo).1 F 1.854 +(ws lar)-.25 F 1.854(ge, b)-.18 F 1.854(ulk mail to go out before)-.2 F +(smaller)174 532.8 Q 3.714(,p)-.4 G 1.214(ersonal mail, b)-3.714 F 1.214 +(ut may ha)-.2 F 1.513 -.15(ve a)-.2 H 1.213 +(pplicability on some hosts with v).15 F 1.213(ery f)-.15 F(ast)-.1 E +2.631(connections. Random)174 544.8 R .131(is useful if se)2.631 F -.15 +(ve)-.25 G .132(ral queue runners are started by hand which).15 F .39 +(try to drain the same queue since odds are the)174 556.8 R 2.889(yw) +-.15 G .389(ill be w)-2.889 F .389(orking on dif)-.1 F .389 +(ferent parts)-.25 F(of the queue at the same time.)174 568.8 Q +(Priority ordering is the def)5 E(ault.)-.1 E(QueueT)102 585 Q(imeout=) +-.35 E F2(timeout)A F1 .355([T] A synon)174 597 R .355(ym for \231T)-.15 +F 2.855(imeout.queuereturn\232. Use)-.35 F .356 +(that form instead of the \231Queue-)2.855 F -.35(Ti)174 609 S +(meout\232 form.).35 E 32.83(RandFile [no)102 625.2 R 1.036(short name]\ + Name of \214le containing random data or the name of the UNIX)3.537 F +(sock)174 637.2 Q 1.63(et if EGD is used.)-.1 F 4.131(A\()6.631 G 1.631 +(required\) pre\214x "e)-4.131 F 1.631 +(gd:" or "\214le:" speci\214es the type.)-.15 F(ST)174 649.2 Q(AR)-.93 E +1.561 +(TTLS requires this \214lename if the compile \215ag HASURANDOMDEV is) +-.6 F(not set \(see sendmail/README\).)174 661.2 Q(Resolv)102 677.4 Q +(erOptions=)-.15 E F2(options)A F1 .127([I] Set resolv)174 689.4 R .127 +(er options.)-.15 F -1.11(Va)5.127 G .127(lues can be set using)1.11 F +F0(+)2.627 E F2<8d61>A(g)-.1 E F1 .127(and cleared using)2.627 F F0 +2.628 E F2<8d61>A(g)-.1 E F1 2.628(;t)C(he)-2.628 E F2<8d61>174 701.4 Q +(g)-.1 E F1 5.014(sc)C 2.514(an be \231deb)-5.014 F 2.513 +(ug\232, \231aaonly\232, \231use)-.2 F 2.513 +(vc\232, \231primary\232, \231igntc\232, \231recurse\232, \231def-)-.25 +F 2.688 +(names\232, \231stayopen\232, \231use_inet6\232, or \231dnsrch\232.)174 +713.4 R 2.689(The string \231HasW)7.689 F(ildcardMX\232)-.4 E .283 +(\(without a)174 725.4 R F0(+)2.783 E F1(or)2.783 E F02.783 E F1 +2.783(\)c)C .283(an be speci\214ed to turn of)-2.783 F 2.782(fm)-.25 G +.282(atching ag)-2.782 F .282(ainst MX records when)-.05 F 0 Cg EP %%Page: 78 74 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-78 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(Sa)102 96 -Q -.15(ve)-.2 G 10.41(FromLine [f]).15 F(Sa)4.492 E 2.292 -.15(ve U)-.2 -H 1.992(NIX-style \231From\232 lines at the front of headers.).15 F -1.993(Normally the)6.993 F 4.493(ya)-.15 G(re)-4.493 E -(assumed redundant and discarded.)174 108 Q .62(SendMimeErrors [j])102 -124.2 R .373(If set, send error messages in MIME format \(see RFC 2045 \ -and RFC 1344 for)2.874 F 2.914(details\). If)174 136.2 R(disabled,)2.914 -E/F2 10/Times-Italic@0 SF(sendmail)2.914 E F1 .415 -(will not return the DSN k)2.914 F -.15(ey)-.1 G -.1(wo).15 G .415 -(rd in response to an).1 F 1.731(EHLO and will not do Deli)174 148.2 R --.15(ve)-.25 G 1.731 -(ry Status Noti\214cation processing as described in).15 F(RFC 1891.)174 -160.2 Q(Serv)102 176.4 Q 10.77(erCertFile [no)-.15 F .581 -(short name] File containing the certi\214cate of the serv)3.08 F(er) --.15 E 3.081(,i)-.4 G .581(.e., this certi\214cate is)-3.081 F -(used when sendmail acts as serv)174 188.4 Q(er \(used for ST)-.15 E(AR) --.93 E(TTLS\).)-.6 E(Serv)102 204.6 Q(erK)-.15 E -.15(ey)-.25 G 11.73 -(File [no).15 F .543(short name] File containing the pri)3.043 F -.25 -(va)-.25 G .542(te k).25 F .842 -.15(ey b)-.1 H .542 -(elonging to the serv).15 F .542(er certi\214cate)-.15 F(\(used for ST) -174 216.6 Q(AR)-.93 E(TTLS\).)-.6 E(Serv)102 232.8 Q(erSSLOptions)-.15 E -3.348(As)174 244.8 S .849 -(pace or comma separated list of SSL related options for the serv)-3.348 -F .849(er side.)-.15 F(See)5.849 E F2(SSL_CTX_set_options)174 256.8 Q F1 -.961(\(3\) for a list; the a)B -.25(va)-.2 G .961(ilable v).25 F .961 -(alues depend on the OpenSSL)-.25 F -.15(ve)174 268.8 S 5.628(rsion ag) -.15 F 5.628(ainst which)-.05 F F2(sendmail)8.129 E F1 5.629 -(is compiled.)8.129 F 5.629(By def)10.629 F(ault,)-.1 E F2(SSL_OP_ALL) -8.129 E(-SSL_OP_TLSEXT_P)174 280.8 Q(ADDING)-.9 E F1 .938 -(are used \(if those options are a)3.438 F -.25(va)-.2 G 3.437 -(ilable\). Options).25 F .28 -(can be cleared by preceding them with a minus sign.)174 292.8 R .281 -(It is also possible to specify)5.281 F(numerical v)174 304.8 Q -(alues, e.g.,)-.25 E F0(-0x0010)2.5 E F1(.)A(ServiceSwitchFile=)102 321 -Q F2(\214lename)A F1 1.533([no short name] If your host operating syste\ -m has a service switch abstraction)174 333 R .003(\(e.g., /etc/nsswitch\ -.conf on Solaris or /etc/svc.conf on Ultrix and DEC OSF/1\) that)174 345 -R .814(service will be consulted and this option is ignored.)174 357 R -.814(Otherwise, this is the name)5.814 F 1.082(of a \214le that pro)174 -369 R 1.082 -(vides the list of methods used to implement particular services.)-.15 F -1.069(The syntax is a series of lines, each of which is a sequence of w) -174 381 R 3.569(ords. The)-.1 F(\214rst)3.569 E -.1(wo)174 393 S 1.363 -(rd is the service name, and follo).1 F 1.363(wing w)-.25 F 1.364 -(ords are service types.)-.1 F 1.364(The services)6.364 F(that)174 405 Q -F2(sendmail)4.11 E F1 1.61 -(consults directly are \231aliases\232 and \231hosts.)4.11 F 6.61<9a53> --.7 G 1.61(ervice types can be)-6.61 F 1.754(\231dns\232, \231nis\232, \ -\231nisplus\232, or \231\214les\232 \(with the ca)174 417 R -.15(ve)-.2 -G 1.755(at that the appropriate support).15 F .791 -(must be compiled in before the service can be referenced\).)174 429 R -.79(If ServiceSwitchFile)5.791 F .925(is not speci\214ed, it def)174 441 -R .925(aults to /etc/mail/service.switch.)-.1 F .925 -(If that \214le does not e)5.925 F(xist,)-.15 E(the def)174 453 Q -(ault switch is:)-.1 E 54.71(aliases \214les)214 469.2 R 60.81 -(hosts dns)214 481.2 R(nis \214les)2.5 E(The def)174 497.4 Q -(ault \214le is \231/etc/mail/service.switch\232.)-.1 E(Se)102 513.6 Q --.15(ve)-.25 G 12.12(nBitInput [7]).15 F .322(Strip input to se)2.822 F --.15(ve)-.25 G 2.822(nb).15 G .321 -(its for compatibility with old systems.)-2.822 F .321(This shouldn') -5.321 F 2.821(tb)-.18 G(e)-2.821 E(necessary)174 525.6 Q(.)-.65 E -(SharedMemoryK)102 541.8 Q -.15(ey)-.25 G .744([no short name] K)174 -553.8 R 1.044 -.15(ey t)-.25 H 3.244(ou).15 G .745 -(se for shared memory se)-3.244 F .745 -(gment; if not set \(or 0\), shared)-.15 F 1.16 -(memory will not be used.)174 565.8 R 1.159(If set to -1)6.16 F F2 -(sendmail)3.659 E F1 1.159(can select a k)3.659 F 1.459 -.15(ey i)-.1 H -1.159(tself pro).15 F(vided)-.15 E .658(that also)174 577.8 R F0(Shar) -3.158 E(edMemoryK)-.18 E(eyFile)-.25 E F1 .658(is set.)3.158 F .658 -(Requires support for shared memory to)5.658 F 1.413(be compiled into) -174 589.8 R F2(sendmail)3.913 E F1 6.413(.I)C 3.912(ft)-6.413 G 1.412 -(his option is set,)-3.912 F F2(sendmail)3.912 E F1 1.412 -(can share some data)3.912 F .307(between dif)174 601.8 R .307 -(ferent instances.)-.25 F -.15(Fo)5.307 G 2.807(re).15 G .308 -(xample, the number of entries in a queue direc-)-2.957 F .033 -(tory or the a)174 613.8 R -.25(va)-.2 G .032 -(ilable space in a \214le system.).25 F .032(This allo)5.032 F .032 -(ws for more ef)-.25 F .032(\214cient program)-.25 F -.15(exe)174 625.8 -S .09(cution, since only one process needs to update the data instead o\ -f each indi).15 F(vid-)-.25 E(ual process g)174 637.8 Q -(athering the data each time it is required.)-.05 E(SharedMemoryK)102 -654 Q -.15(ey)-.25 G(File).15 E .087([no short name] If)174 666 R F0 -(Shar)2.587 E(edMemoryK)-.18 E(ey)-.25 E F1 .086 -(is set to -1 then the automatically selected)2.587 F(shared memory k) -174 678 Q .3 -.15(ey w)-.1 H(ill be stored in the speci\214ed \214le.) -.15 E(SingleLineFromHeader)102 694.2 Q .958 -([no short name] If set, From: lines that ha)174 706.2 R 1.259 -.15 -(ve e)-.2 H .959(mbedded ne).15 F .959(wlines are unwrapped)-.25 F .243 -(onto one line.)174 718.2 R .243 -(This is to get around a botch in Lotus Notes that apparently cannot) -5.243 F 0 Cg EP +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .89 +(doing name canoni\214cations.)174 96 R .89(The string \231W)5.89 F +(orkAroundBrok)-.8 E .89(enAAAA\232 \(without a)-.1 F F0(+)174 108 Q F1 +(or)3.473 E F03.473 E F1 3.473(\)c)C .972(an be speci\214ed to w) +-3.473 F .972(ork around some brok)-.1 F .972(en nameserv)-.1 F .972 +(ers which return)-.15 F(SER)174 120 Q(VF)-.8 E 1.001 +(AIL \(a temporary f)-.74 F 1.001(ailure\) on T_AAAA \(IPv6\) lookups.) +-.1 F 1.001(Notice: it might)6.001 F +(be necessary to apply the same \(or similar\) options to)174 132 Q/F2 +10/Times-Italic@0 SF(submit.cf)2.5 E F1(too.)2.5 E -1.04 +(RequiresDirfsync [no)102 148.2 R 1.175 +(short name] This option can be used to o)3.675 F -.15(ve)-.15 G 1.175 +(rride the compile time \215ag).15 F F0(RE-)3.675 E -.1(QU)174 160.2 S +(IRES_DIR_FSYNC).1 E F1 .498(at runtime by setting it to)2.998 F/F3 9 +/Times-Roman@0 SF -.09(fa)2.998 G(lse).09 E F1 5.498(.I)C 2.998(ft) +-5.498 G .499(he compile time \215ag)-2.998 F .262 +(is not set, the option is ignored.)174 172.2 R .261 +(The \215ag turns on support for \214le systems that re-)5.261 F .727 +(quire to call)174 184.2 R F2(fsync\(\))3.227 E F1 .727 +(for a directory if the meta-data in it has been changed.)3.227 F(This) +5.728 E .075(should be turned on at least for older v)174 196.2 R .074 +(ersions of ReiserFS; it is enabled by def)-.15 F(ault)-.1 E 1.45 +(for Linux.)174 208.2 R 1.451 +(According to some information this \215ag is not needed an)6.45 F 1.451 +(ymore for)-.15 F -.1(ke)174 220.2 S(rnel 2.4.16 and ne).1 E(wer)-.25 E +(.)-.55 E 10.61(RrtImpliesDsn [no)102 236.4 R .409 +(short name] If this option is set, a \231Return-Receipt-T)2.91 F .409 +(o:\232 header causes the re-)-.8 F .946 +(quest of a DSN, which is sent to the en)174 248.4 R -.15(ve)-.4 G .947 +(lope sender as required by RFC 1891,).15 F(not to the address gi)174 +260.4 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(nt)-2.5 G(he header)-2.5 E(.) +-.55 E(RunAsUser=)102 276.6 Q F2(user)A F1 3.753([no short name] The) +2.48 F F2(user)6.253 E F1 3.752(parameter may be a user name \(look) +6.252 F 3.752(ed up in)-.1 F F2(/etc/passwd)174 288.6 Q F1 3.045(\)o)C +-5.544 3.045(ra n)-3.045 H .546(umeric user id; either form can ha) +-3.045 F .846 -.15(ve \231)-.2 H .546(:group\232 attached \(where).15 F +.966(group can be numeric or symbolic\).)174 300.6 R .965 +(If set to a non-zero \(non-root\) v)5.965 F(alue,)-.25 E F2(send-)3.465 +E(mail)174 314.6 Q F1 .483 +(will change to this user id shortly after startup)2.983 F/F4 7 +/Times-Roman@0 SF(21)-4 I F1 5.484(.T)4 K .484(his a)-5.484 F -.2(vo)-.2 +G .484(ids a certain class).2 F 1.844(of security problems.)174 326.6 R +(Ho)6.844 E(we)-.25 E -.15(ve)-.25 G 2.644 -.4(r, t).15 H 1.844 +(his means that all \231.forw).4 F 1.844(ard\232 and \231:include:\232) +-.1 F 1.428(\214les must be readable by the indicated)174 338.6 R F2 +(user)3.928 E F1 1.428(and all \214les to be written must be)3.928 F +.043(writable by)174 350.6 R F2(user)2.543 E F1 .042 +(Also, all \214le and program deli)2.543 F -.15(ve)-.25 G .042 +(ries will be mark).15 F .042(ed unsafe unless)-.1 F .171(the option)174 +362.6 R F0(DontBlameSendmail=NonRootSafeAddr)2.671 E F1 .171 +(is set, in which case the de-)2.671 F(li)174 374.6 Q -.15(ve)-.25 G +.037(ry will be done as).15 F F2(user)2.537 E F1 5.037(.I)C 2.537(ti) +-5.037 G 2.537(sa)-2.537 G .036(lso incompatible with the)-2.537 F F0 +(SafeFileEn)2.536 E(vir)-.4 E(onment)-.18 E F1 3.587(option. In)174 +386.6 R 1.087(other w)3.587 F 1.087 +(ords, it may not actually add much to security on an a)-.1 F -.15(ve) +-.2 G(rage).15 E .129(system, and may in f)174 398.6 R .128 +(act detract from security \(because other \214le permissions must)-.1 F +1.164(be loosened\).)174 410.6 R(Ho)6.164 E(we)-.25 E -.15(ve)-.25 G +1.964 -.4(r, i).15 H 3.664(ts).4 G 1.164(hould be useful on \214re) +-3.664 F -.1(wa)-.25 G 1.164(lls and other places where).1 F(users don') +174 422.6 Q 2.5(th)-.18 G -2.25 -.2(av e)-2.5 H +(accounts and the aliases \214le is well constrained.)2.7 E(RecipientF) +102 438.8 Q(actor=)-.15 E F2(fact)A F1 .638([y] The indicated)174 450.8 +R F2(fact)3.137 E F1 .637(or is added to the priority \(thus)B F2 +(lowering)3.137 E F1 .637(the priority of the)3.137 F .23 +(job\) for each recipient, i.e., this v)174 462.8 R .231 +(alue penalizes jobs with lar)-.25 F .231(ge numbers of recipi-)-.18 F +2.5(ents. Def)174 474.8 R(aults to 30000.)-.1 E(RefuseLA=)102 491 Q F2 +(LA)A F1 1.012([X] When the system load a)13.59 F -.15(ve)-.2 G 1.012 +(rage e).15 F(xceeds)-.15 E F2(LA)3.512 E F1 3.512(,r)C 1.011 +(efuse incoming SMTP connec-)-3.512 F 2.658(tions. Def)174 503 R .158(a\ +ults to 12 multiplied by the number of processors online on the system) +-.1 F(\(if that can be determined\).)174 515 Q(RejectLogInterv)102 531.2 +Q(al=)-.25 E F2(timeout)A F1 1.628([no short name] Log interv)174 543.2 +R 1.627(al when refusing connections for this long \(def)-.25 F(ault:) +-.1 E(3h\).)174 555.2 Q(RetryF)102 571.4 Q(actor=)-.15 E F2(fact)A F1 +.771([Z] The)3.74 F F2(fact)3.271 E F1 .771 +(or is added to the priority e)B -.15(ve)-.25 G .772 +(ry time a job is processed.).15 F .772(Thus, each)5.772 F .994(time a \ +job is processed, its priority will be decreased by the indicated v)174 +583.4 R 3.493(alue. In)-.25 F .017(most en)174 595.4 R .017 +(vironments this should be positi)-.4 F -.15(ve)-.25 G 2.517(,s).15 G +.017(ince hosts that are do)-2.517 F .017(wn are all too of-)-.25 F +(ten do)174 607.4 Q(wn for a long time.)-.25 E(Def)5 E(aults to 90000.) +-.1 E(SafeFileEn)102 623.6 Q(vironment=)-.4 E F2(dir)A F1 .022 +([no short name] If this option is set,)174 635.6 R F2(sendmail)2.521 E +F1 .021(will do a)2.521 F F2 -.15(ch)2.521 G -.45(ro).15 G(ot).45 E F1 +.021(\(2\) call into the indi-)B(cated)174 647.6 Q F2(dir)2.832 E F1 +.333(ectory before doing an)B 2.833<798c>-.15 G .333(le writes.)-2.833 F +.333(If the \214le name speci\214ed by the user)5.333 F(be)174 659.6 Q +.588(gins with)-.15 F F2(dir)3.088 E F1 3.087(,t)C .587 +(hat partial path name will be stripped of)-3.087 F 3.087(fb)-.25 G .587 +(efore writing, so \(for)-3.087 F -.15(ex)174 671.6 S 2.224 +(ample\) if the SafeFileEn).15 F 2.224(vironment v)-.4 F 2.225 +(ariable is set to \231/safe\232 then aliases of)-.25 F .32 LW 76 681.2 +72 681.2 DL 80 681.2 76 681.2 DL 84 681.2 80 681.2 DL 88 681.2 84 681.2 +DL 92 681.2 88 681.2 DL 96 681.2 92 681.2 DL 100 681.2 96 681.2 DL 104 +681.2 100 681.2 DL 108 681.2 104 681.2 DL 112 681.2 108 681.2 DL 116 +681.2 112 681.2 DL 120 681.2 116 681.2 DL 124 681.2 120 681.2 DL 128 +681.2 124 681.2 DL 132 681.2 128 681.2 DL 136 681.2 132 681.2 DL 140 +681.2 136 681.2 DL 144 681.2 140 681.2 DL 148 681.2 144 681.2 DL 152 +681.2 148 681.2 DL 156 681.2 152 681.2 DL 160 681.2 156 681.2 DL 164 +681.2 160 681.2 DL 168 681.2 164 681.2 DL 172 681.2 168 681.2 DL 176 +681.2 172 681.2 DL 180 681.2 176 681.2 DL 184 681.2 180 681.2 DL 188 +681.2 184 681.2 DL 192 681.2 188 681.2 DL 196 681.2 192 681.2 DL 200 +681.2 196 681.2 DL 204 681.2 200 681.2 DL 208 681.2 204 681.2 DL 212 +681.2 208 681.2 DL 216 681.2 212 681.2 DL/F5 5/Times-Roman@0 SF(21)93.6 +691.6 Q/F6 8/Times-Roman@0 SF(When running as a daemon, it changes to t\ +his user after accepting a connection b)3.2 I(ut before reading an)-.16 +E(y)-.12 E F4(SMTP)2 E F6(commands.)2 E 0 Cg EP %%Page: 79 75 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-79)195.86 E/F1 10/Times-Roman@0 SF(understand le)174 96 Q -.05 -(ga)-.15 G(lly wrapped RFC 822 headers.).05 E(SingleThreadDeli)102 112.2 -Q -.15(ve)-.25 G(ry).15 E .333 -([no short name] If set, a client machine will ne)174 124.2 R -.15(ve) --.25 G 2.833(rt).15 G .334(ry to open tw)-2.833 F 2.834(oS)-.1 G .334 -(MTP connec-)-2.834 F 1.712(tions to a single serv)174 136.2 R 1.712 -(er machine at the same time, e)-.15 F -.15(ve)-.25 G 4.211(ni).15 G -4.211(nd)-4.211 G(if)-4.211 E 1.711(ferent processes.)-.25 F .952 -(That is, if another)174 148.2 R/F2 10/Times-Italic@0 SF(sendmail)3.452 -E F1 .952(is already talking to some host a ne)3.452 F(w)-.25 E F2 -(sendmail)3.453 E F1(will)3.453 E 2.388(not open another connection.)174 -160.2 R 2.387(This property is of mix)7.387 F 2.387(ed v)-.15 F 2.387 -(alue; although this)-.25 F .386(reduces the load on the other machine,\ - it can cause mail to be delayed \(for e)174 172.2 R(xam-)-.15 E .719 -(ple, if one)174 184.2 R F2(sendmail)3.219 E F1 .719(is deli)3.219 F --.15(ve)-.25 G .718(ring a huge message, other).15 F F2(sendmail)3.218 E -F1 3.218(sw)C(on')-3.318 E 3.218(tb)-.18 G 3.218(ea)-3.218 G(ble)-3.218 -E 1.542(to send e)174 196.2 R -.15(ve)-.25 G 4.042(ns).15 G 1.542 -(mall messages\).)-4.042 F 1.543 -(Also, it requires another \214le descriptor \(for the)6.542 F .997 -(lock \214le\) per connection, so you may ha)174 208.2 R 1.296 -.15 -(ve t)-.2 H 3.496(or).15 G .996(educe the)-3.496 F F0 -(ConnectionCacheSize)3.496 E F1 .234(option to a)174 220.2 R -.2(vo)-.2 -G .234(id running out of per).2 F .235(-process \214le descriptors.)-.2 -F .235(Requires the)5.235 F F0(HostSta-)2.735 E(tusDir)174 232.2 Q -(ectory)-.18 E F1(option.)2.5 E(SmtpGreetingMessage=)102 248.4 Q F2 -(messa)A -.1(ge)-.1 G F1 .345 -([$e macro] The message printed when the SMTP serv)174 260.4 R .344 -(er starts up.)-.15 F(Def)5.344 E .344(aults to \231$j)-.1 F -(Sendmail $v ready at $b\232.)174 272.4 Q 22.28(SoftBounce If)102 288.6 -R .092(set, issue temporary errors \(4xy\) instead of permanent errors \ -\(5xy\).)2.592 F .093(This can be)5.093 F .127 -(useful during testing of a ne)174 300.6 R 2.627(wc)-.25 G .127 -(on\214guration to a)-2.627 F -.2(vo)-.2 G .126 -(id erroneous bouncing of mails.).2 F 23.94(SSLEngine Name)102 316.8 R -1.004(of SSL engine to use.)3.503 F 1.004(The a)6.004 F -.25(va)-.2 G -1.004(ilable v).25 F 1.004(alues depend on the OpenSSL v)-.25 F(er)-.15 -E(-)-.2 E(sion ag)174 328.8 Q(ainst which)-.05 E F2(sendmail)2.5 E F1 -(is compiled, see)2.5 E(openssl engine -v)214 345 Q -(for some information.)174 361.2 Q(SSLEngineP)102 377.4 Q 6.31(ath P) --.15 F .632(ath to dynamic library for SSL engine.)-.15 F .631 -(This option is only useful if)5.632 F F2(SSLEngine)3.131 E F1 .484 -(is set.)174 389.4 R .484(If both are set, the engine will be loaded dy\ -namically at runtime using the)5.484 F .164 -(concatenation of the path, a slash "/", the string "lib", the v)174 -401.4 R .164(alue of)-.25 F F2(SSLEngine)2.664 E F1 2.664(,a)C(nd)-2.664 -E .874(the string ".so".)174 413.4 R .874(If only)5.874 F F2(SSLEngine) -3.374 E F1 .875(is set then the static v)3.375 F .875 -(ersion of the engine is)-.15 F(used.)174 425.4 Q(StatusFile=)102 441.6 -Q F2(\214le)A F1 .524([S] Log summary statistics in the named)14.13 F F2 -(\214le)3.024 E F1 5.524(.I)C 3.023(fn)-5.524 G 3.023<6f8c>-3.023 G .523 -(le name is speci\214ed, "statis-)-3.023 F .547(tics" is used.)174 453.6 -R .547(If not set, no summary statistics are sa)5.547 F -.15(ve)-.2 G -3.048(d. This).15 F .548(\214le does not gro)3.048 F(w)-.25 E(in size.) -174 465.6 Q(It can be printed using the)5 E F2(mailstats)2.5 E F1 -(\(8\) program.)A 28.4(SuperSafe [s])102 481.8 R .364 -(This option can be set to T)2.864 F .364(rue, F)-.35 F .364 -(alse, Interacti)-.15 F -.15(ve)-.25 G 2.864(,o).15 G 2.864(rP)-2.864 G -(ostMilter)-2.864 E 5.364(.I)-.55 G 2.864(fs)-5.364 G .364(et to T) --2.864 F(rue,)-.35 E F2(sendmail)174 493.8 Q F1 .116(will be super)2.616 -F .116(-safe when running things, i.e., al)-.2 F -.1(wa)-.1 G .117 -(ys instantiate the queue).1 F .118(\214le, e)174 505.8 R -.15(ve)-.25 G -2.618(ni).15 G 2.618(fy)-2.618 G .118 -(ou are going to attempt immediate deli)-2.618 F -.15(ve)-.25 G(ry).15 E -(.)-.65 E F2(Sendmail)5.117 E F1(al)2.617 E -.1(wa)-.1 G .117 -(ys instan-).1 F .087(tiates the queue \214le before returning control \ -to the client under an)174 517.8 R 2.588(yc)-.15 G(ircumstances.)-2.588 -E 1.3(This should really)174 529.8 R F2(always)3.8 E F1 1.299 -(be set to T)3.799 F 3.799(rue. The)-.35 F(Interacti)3.799 E 1.599 -.15 -(ve v)-.25 H 1.299(alue has been intro-)-.1 F .221 -(duced in 8.12 and can be used together with)174 541.8 R F0(Deli)2.722 E --.1(ve)-.1 G(ryMode=i).1 E F1 5.222(.I)C 2.722(ts)-5.222 G .222 -(kips some syn-)-2.722 F 1.533(chronization calls which are ef)174 553.8 -R(fecti)-.25 E -.15(ve)-.25 G 1.533(ly doubled in the code e).15 F -.15 -(xe)-.15 G 1.532(cution path for).15 F .335(this mode.)174 565.8 R .336 -(If set to PostMilter)5.335 F(,)-.4 E F2(sendmail)2.836 E F1 .336 -(defers synchronizing the queue \214le until)2.836 F(an)174 577.8 Q -3.788(ym)-.15 G 1.288(ilters ha)-3.788 F 1.588 -.15(ve s)-.2 H 1.287 -(ignaled acceptance of the message.).15 F 1.287 -(PostMilter is useful only)6.287 F(when)174 589.8 Q F2(sendmail)3.821 E -F1 1.321(is running as an SMTP serv)3.821 F 1.322 -(er; in all other situations it acts the)-.15 F(same as T)174 601.8 Q -(rue.)-.35 E(TLSF)102 618 Q(allbacktoClear)-.15 E .716 -([no short name] If set,)174 630 R F2(sendmail)3.216 E F1 .715 -(immediately tries an outbound connection ag)3.215 F(ain)-.05 E .61 -(without ST)174 642 R(AR)-.93 E .61(TTLS after a TLS handshak)-.6 F 3.11 -(ef)-.1 G 3.11(ailure. Note:)-3.21 F .61(this applies to all con-)3.11 F -2.677(nections e)174 654 R -.15(ve)-.25 G 5.177(ni).15 G 5.177(fT)-5.177 -G 2.676(LS speci\214c requirements are set \(see rulesets)-5.177 F F2 -(tls_r)5.176 E(cpt)-.37 E F1(and)5.176 E F2(tls_client)174 666 Q F1 -4.866(\). Hence)4.866 F 2.367 -(such requirements will cause an error on a retry without)4.866 F(ST)174 -678 Q(AR)-.93 E 3.551(TTLS. Therefore)-.6 F(the)3.551 E 3.551(ys)-.15 G -1.051(hould only trigger a temporary f)-3.551 F 1.051 -(ailure so the con-)-.1 F(nection is later on tried ag)174 690 Q(ain.) --.05 E 6.16(TLSSrvOptions [no)102 706.2 R .238 -(short name] List of options for SMTP ST)2.737 F(AR)-.93 E .238 -(TTLS for the serv)-.6 F .238(er consisting of)-.15 F .18 -(single characters with interv)174 718.2 R .18 -(ening white space or commas.)-.15 F .18(The \215ag `)5.18 F(`V')-.74 E -2.68('d)-.74 G(isables)-2.68 E 0 Cg EP +(SMM:08-79)195.86 E/F1 10/Times-Roman@0 SF 1.557(\231/safe/logs/\214le\ +\232 and \231/logs/\214le\232 actually indicate the same \214le.)174 96 +R(Additionally)6.556 E 4.056(,i)-.65 G(f)-4.056 E(this option is set,) +174 108 Q/F2 10/Times-Italic@0 SF(sendmail)2.5 E F1(refuses to deli)2.5 +E -.15(ve)-.25 G 2.5(rt).15 G 2.5(os)-2.5 G(ymbolic links.)-2.5 E(Sa)102 +124.2 Q -.15(ve)-.2 G 10.41(FromLine [f]).15 F(Sa)3.25 E 1.05 -.15(ve U) +-.2 H .75(NIX-style \231From\232 lines at the front of headers.).15 F +.75(Normally the)5.75 F 3.25(ya)-.15 G .75(re as-)-3.25 F +(sumed redundant and discarded.)174 136.2 Q .62(SendMimeErrors [j])102 +152.4 R .373(If set, send error messages in MIME format \(see RFC 2045 \ +and RFC 1344 for)2.874 F 2.914(details\). If)174 164.4 R(disabled,)2.914 +E F2(sendmail)2.914 E F1 .415(will not return the DSN k)2.914 F -.15(ey) +-.1 G -.1(wo).15 G .415(rd in response to an).1 F 1.731 +(EHLO and will not do Deli)174 176.4 R -.15(ve)-.25 G 1.731 +(ry Status Noti\214cation processing as described in).15 F(RFC 1891.)174 +188.4 Q(Serv)102 204.6 Q 10.77(erCertFile [no)-.15 F .581 +(short name] File containing the certi\214cate of the serv)3.08 F(er) +-.15 E 3.081(,i)-.4 G .581(.e., this certi\214cate is)-3.081 F +(used when sendmail acts as serv)174 216.6 Q(er \(used for ST)-.15 E(AR) +-.93 E(TTLS\).)-.6 E(Serv)102 232.8 Q(erK)-.15 E -.15(ey)-.25 G 11.73 +(File [no).15 F .543(short name] File containing the pri)3.043 F -.25 +(va)-.25 G .542(te k).25 F .842 -.15(ey b)-.1 H .542 +(elonging to the serv).15 F .542(er certi\214cate)-.15 F(\(used for ST) +174 244.8 Q(AR)-.93 E(TTLS\).)-.6 E(Serv)102 261 Q(erSSLOptions)-.15 E +3.348(As)174 273 S .849 +(pace or comma separated list of SSL related options for the serv)-3.348 +F .849(er side.)-.15 F(See)5.849 E F2(SSL_CTX_set_options)174 285 Q F1 +.961(\(3\) for a list; the a)B -.25(va)-.2 G .961(ilable v).25 F .961 +(alues depend on the OpenSSL)-.25 F -.15(ve)174 297 S 5.628(rsion ag).15 +F 5.628(ainst which)-.05 F F2(sendmail)8.129 E F1 5.629(is compiled.) +8.129 F 5.629(By def)10.629 F(ault,)-.1 E F2(SSL_OP_ALL)8.129 E +(-SSL_OP_TLSEXT_P)174 309 Q(ADDING)-.9 E F1 .938 +(are used \(if those options are a)3.438 F -.25(va)-.2 G 3.437 +(ilable\). Options).25 F .28 +(can be cleared by preceding them with a minus sign.)174 321 R .281 +(It is also possible to specify)5.281 F(numerical v)174 333 Q +(alues, e.g.,)-.25 E F0(-0x0010)2.5 E F1(.)A(ServiceSwitchFile=)102 +349.2 Q F2(\214lename)A F1 1.533([no short name] If your host operating\ + system has a service switch abstraction)174 361.2 R .003(\(e.g., /etc/\ +nsswitch.conf on Solaris or /etc/svc.conf on Ultrix and DEC OSF/1\) tha\ +t)174 373.2 R .814 +(service will be consulted and this option is ignored.)174 385.2 R .814 +(Otherwise, this is the name)5.814 F 1.082(of a \214le that pro)174 +397.2 R 1.082 +(vides the list of methods used to implement particular services.)-.15 F +1.069(The syntax is a series of lines, each of which is a sequence of w) +174 409.2 R 3.569(ords. The)-.1 F(\214rst)3.569 E -.1(wo)174 421.2 S +1.363(rd is the service name, and follo).1 F 1.363(wing w)-.25 F 1.364 +(ords are service types.)-.1 F 1.364(The services)6.364 F(that)174 433.2 +Q F2(sendmail)4.11 E F1 1.61 +(consults directly are \231aliases\232 and \231hosts.)4.11 F 6.61<9a53> +-.7 G 1.61(ervice types can be)-6.61 F 1.754(\231dns\232, \231nis\232, \ +\231nisplus\232, or \231\214les\232 \(with the ca)174 445.2 R -.15(ve) +-.2 G 1.755(at that the appropriate support).15 F .791 +(must be compiled in before the service can be referenced\).)174 457.2 R +.79(If ServiceSwitchFile)5.791 F .925(is not speci\214ed, it def)174 +469.2 R .925(aults to /etc/mail/service.switch.)-.1 F .925 +(If that \214le does not e)5.925 F(xist,)-.15 E(the def)174 481.2 Q +(ault switch is:)-.1 E 54.71(aliases \214les)214 497.4 R 60.81 +(hosts dns)214 509.4 R(nis \214les)2.5 E(The def)174 525.6 Q +(ault \214le is \231/etc/mail/service.switch\232.)-.1 E(Se)102 541.8 Q +-.15(ve)-.25 G 12.12(nBitInput [7]).15 F .322(Strip input to se)2.822 F +-.15(ve)-.25 G 2.822(nb).15 G .321 +(its for compatibility with old systems.)-2.822 F .321(This shouldn') +5.321 F 2.821(tb)-.18 G(e)-2.821 E(necessary)174 553.8 Q(.)-.65 E +(SharedMemoryK)102 570 Q -.15(ey)-.25 G .744([no short name] K)174 582 R +1.044 -.15(ey t)-.25 H 3.244(ou).15 G .745(se for shared memory se) +-3.244 F .745(gment; if not set \(or 0\), shared)-.15 F 1.16 +(memory will not be used.)174 594 R 1.159(If set to -1)6.16 F F2 +(sendmail)3.659 E F1 1.159(can select a k)3.659 F 1.459 -.15(ey i)-.1 H +1.159(tself pro).15 F(vided)-.15 E .658(that also)174 606 R F0(Shar) +3.158 E(edMemoryK)-.18 E(eyFile)-.25 E F1 .658(is set.)3.158 F .658 +(Requires support for shared memory to)5.658 F .221(be compiled into)174 +618 R F2(sendmail)2.721 E F1 5.221(.I)C 2.721(ft)-5.221 G .221 +(his option is set,)-2.721 F F2(sendmail)2.721 E F1 .22 +(can share some data be-)2.721 F .029(tween dif)174 630 R .029 +(ferent instances.)-.25 F -.15(Fo)5.029 G 2.529(re).15 G .029 +(xample, the number of entries in a queue directory)-2.679 F .282 +(or the a)174 642 R -.25(va)-.2 G .282(ilable space in a \214le system.) +.25 F .281(This allo)5.281 F .281(ws for more ef)-.25 F .281 +(\214cient program e)-.25 F(x-)-.15 E .109(ecution, since only one proc\ +ess needs to update the data instead of each indi)174 654 R(vidual)-.25 +E(process g)174 666 Q(athering the data each time it is required.)-.05 E +(SharedMemoryK)102 682.2 Q -.15(ey)-.25 G(File).15 E .087 +([no short name] If)174 694.2 R F0(Shar)2.587 E(edMemoryK)-.18 E(ey)-.25 +E F1 .086(is set to -1 then the automatically selected)2.587 F +(shared memory k)174 706.2 Q .3 -.15(ey w)-.1 H +(ill be stored in the speci\214ed \214le.).15 E 0 Cg EP %%Page: 80 76 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-80 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .51 -(client v)174 96 R .511(eri\214cation, and hence it is not possible to \ -use a client certi\214cate for relay-)-.15 F 3.919(ing. The)174 108 R -1.419(\215ag `)3.919 F(`C')-.74 E 3.919('r)-.74 G(emo)-3.919 E -.15(ve) --.15 G 3.919(st).15 G 1.419(he requirement for the TLS serv)-3.919 F -1.418(er to ha)-.15 F 1.718 -.15(ve a c)-.2 H(ert.).15 E .386 -(This only w)174 120 R .386(orks under v)-.1 F .386 -(ery speci\214c circumstances and should only be used if the)-.15 F -(consequences are understood, e.g., clients may not w)174 132 Q -(ork with a serv)-.1 E(er using this.)-.15 E -.7(Te)102 148.2 S -(mpFileMode=).7 E/F2 10/Times-Italic@0 SF(mode)A F1 .062 -([F] The \214le mode for transcript \214les, \214les to which)174 160.2 -R F2(sendmail)2.561 E F1(deli)2.561 E -.15(ve)-.25 G .061(rs directly) -.15 F 2.561<2c8c>-.65 G(les)-2.561 E .61(in the)174 172.2 R F0 -(HostStatusDir)3.11 E(ectory)-.18 E F1 3.11(,a)C(nd)-3.11 E F0 -(StatusFile)3.11 E F1 5.61(.I)C 3.11(ti)-5.61 G 3.11(si)-3.11 G .61 -(nterpreted in octal by def)-3.11 F(ault.)-.1 E(Def)174 184.2 Q -(aults to 0600.)-.1 E -.35(Ti)102 200.4 S(meout.).35 E F2(type)A F1(=)A -F2(timeout)1.666 E F1 .417 -([r; subsumes old T option as well] Set timeout v)174 212.4 R 2.917 -(alues. F)-.25 F .417(or more information, see)-.15 F(section 4.1.)174 -224.4 Q -.35(Ti)102 240.6 S(meZoneSpec=).35 E F2(tzinfo)A F1 .218 -([t] Set the local time zone info to)174 252.6 R F2(tzinfo)2.718 E F1 -2.718<8a66>2.718 G .218(or e)-2.718 F .218(xample, \231PST8PDT\232.)-.15 -F(Actually)5.218 E 2.718(,i)-.65 G(f)-2.718 E 1.346 -(this is not set, the TZ en)174 264.6 R 1.346(vironment v)-.4 F 1.346 -(ariable is cleared \(so the system def)-.25 F 1.345(ault is)-.1 F .208 -(used\); if set b)174 276.6 R .208(ut null, the user')-.2 F 2.708(sT) --.55 G 2.708(Zv)-2.708 G .208 -(ariable is used, and if set and non-null the TZ)-2.958 F -.25(va)174 -288.6 S(riable is set to this v).25 E(alue.)-.25 E -.35(Tr)102 304.8 S -(ustedUser=).35 E F2(user)A F1 3.753([no short name] The).06 F F2(user) -6.253 E F1 3.752(parameter may be a user name \(look)6.252 F 3.752 -(ed up in)-.1 F F2(/etc/passwd)174 316.8 Q F1 2.742(\)o)C 2.742(ran) --2.742 G .242(umeric user id.)-2.742 F -.35(Tr)5.242 G .242 -(usted user for \214le o).35 F .243(wnership and starting the)-.25 F -3.78(daemon. If)174 328.8 R 1.279 -(set, generated alias databases and the control sock)3.779 F 1.279 -(et \(if con\214gured\))-.1 F(will automatically be o)174 340.8 Q -(wned by this user)-.25 E(.)-.55 E -.35(Tr)102 357 S 5.96 -(yNullMXList [w]).35 F .114 -(If this system is the \231best\232 \(that is, lo)2.613 F .114 -(west preference\) MX for a gi)-.25 F -.15(ve)-.25 G 2.614(nh).15 G .114 -(ost, its)-2.614 F 1.168(con\214guration rules should normally detect t\ -his situation and treat that condition)174 369 R .257(specially by forw) -174 381 R .258 -(arding the mail to a UUCP feed, treating it as local, or whate)-.1 F --.15(ve)-.25 G -.55(r.).15 G(Ho)174 393 Q(we)-.25 E -.15(ve)-.25 G 1.686 --.4(r, i).15 H 3.386(ns).4 G .886(ome cases \(such as Internet \214re) --3.386 F -.1(wa)-.25 G .886(lls\) you may w).1 F .885 -(ant to try to con-)-.1 F .07 -(nect directly to that host as though it had no MX records at all.)174 -405 R .07(Setting this option)5.07 F(causes)174 417 Q F2(sendmail)3.014 -E F1 .514(to try this.)3.014 F .514(The do)5.514 F .514 -(wnside is that errors in your con\214guration are)-.25 F(lik)174 429 Q -2.116(ely to be diagnosed as \231host unkno)-.1 F 2.116 -(wn\232 or \231message timed out\232 instead of)-.25 F -(something more meaningful.)174 441 Q(This option is disrecommended.)5 E -(UnixFromLine=)102 457.2 Q F2(fr)A(omline)-.45 E F1 .236 -([$l macro] De\214nes the format used when)174 469.2 R F2(sendmail)2.736 -E F1 .236(must add a UNIX-style From_)2.736 F 1.324 -(line \(that is, a line be)174 481.2 R 1.325 -(ginning \231Fromuser\232\).)-.15 F(Def)6.325 E 1.325 -(aults to \231From $g)-.1 F($d\232.)6.325 E(Don')174 493.2 Q 2.646(tc) --.18 G .146(hange this unless your system uses a dif)-2.646 F .146 -(ferent UNIX mailbox format \(v)-.25 F(ery)-.15 E(unlik)174 505.2 Q -(ely\).)-.1 E(UnsafeGroupWrites)102 521.4 Q .085 -([no short name] If set \(def)174 533.4 R .085 -(ault\), :include: and .forw)-.1 F .086 -(ard \214les that are group writable)-.1 F .655 -(are considered \231unsafe\232, that is, the)174 545.4 R 3.155(yc)-.15 G -.654(annot reference programs or write directly)-3.155 F .536 -(to \214les.)174 557.4 R -.8(Wo)5.536 G .536 -(rld writable :include: and .forw).8 F .537(ard \214les are al)-.1 F -.1 -(wa)-.1 G .537(ys unsafe.).1 F .537(Note: use)5.537 F F0 -(DontBlameSendmail)174 569.4 Q F1(instead; this option is deprecated.) -2.5 E(UseCompressedIPv6Addresses)102 585.6 Q .09([no short name] If set\ -, the compressed format of IPv6 addresses, such as IPV6:::1,)174 597.6 R -(will be used, instead of the uncompressed format, such as IPv6:0:0:0:0\ -:0:0:0:1.)174 609.6 Q(UseErrorsT)102 625.8 Q 21.15(o[)-.8 G .826 -(l] If there is an \231Errors-T)-21.15 F .826(o:\232 header)-.8 F 3.326 -(,s)-.4 G .826(end error messages to the addresses listed)-3.326 F 3.135 -(there. The)174 637.8 R 3.135(yn)-.15 G .635(ormally go to the en)-3.135 -F -.15(ve)-.4 G .635(lope sender).15 F 5.635(.U)-.55 G .634 -(se of this option causes)-5.635 F F2(send-)3.134 E(mail)174 649.8 Q F1 -(to violate RFC 1123.)2.5 E -(This option is disrecommended and deprecated.)5 E(UserDatabaseSpec=)102 -666 Q F2(udbspec)A F1([U] The user database speci\214cation.)174 678 Q --1.11(Ve)102 694.2 S 37.29(rbose [v])1.11 F .56(Run in v)3.06 F .561 -(erbose mode.)-.15 F .561(If this is set,)5.561 F F2(sendmail)3.061 E F1 -.561(adjusts options)3.061 F F0(HoldExpensi)3.061 E -.1(ve)-.1 G F1 -(\(old)174 706.2 Q F0(c)2.636 E F1 2.636(\)a)C(nd)-2.636 E F0(Deli)2.636 -E -.1(ve)-.1 G(ryMode).1 E F1(\(old)2.636 E F0(d)2.636 E F1 2.635(\)s)C -2.635(ot)-2.635 G .135(hat all mail is deli)-2.635 F -.15(ve)-.25 G .135 -(red completely in a sin-).15 F 1.244 -(gle job so that you can see the entire deli)174 718.2 R -.15(ve)-.25 G -1.244(ry process.).15 F(Option)6.244 E F0 -1(Ve)3.744 G(rbose)1 E F1 -(should)3.744 E 0 Cg EP +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(SingleLineFromHeader)102 96 Q .958 +([no short name] If set, From: lines that ha)174 108 R 1.259 -.15(ve e) +-.2 H .959(mbedded ne).15 F .959(wlines are unwrapped)-.25 F .243 +(onto one line.)174 120 R .243 +(This is to get around a botch in Lotus Notes that apparently cannot) +5.243 F(understand le)174 132 Q -.05(ga)-.15 G +(lly wrapped RFC 822 headers.).05 E(SingleThreadDeli)102 148.2 Q -.15 +(ve)-.25 G(ry).15 E .333 +([no short name] If set, a client machine will ne)174 160.2 R -.15(ve) +-.25 G 2.833(rt).15 G .334(ry to open tw)-2.833 F 2.834(oS)-.1 G .334 +(MTP connec-)-2.834 F 1.712(tions to a single serv)174 172.2 R 1.712 +(er machine at the same time, e)-.15 F -.15(ve)-.25 G 4.211(ni).15 G +4.211(nd)-4.211 G(if)-4.211 E 1.711(ferent processes.)-.25 F .952 +(That is, if another)174 184.2 R/F2 10/Times-Italic@0 SF(sendmail)3.452 +E F1 .952(is already talking to some host a ne)3.452 F(w)-.25 E F2 +(sendmail)3.453 E F1(will)3.453 E 1.055(not open another connection.)174 +196.2 R 1.055(This property is of mix)6.055 F 1.055(ed v)-.15 F 1.055 +(alue; although this re-)-.25 F .145(duces the load on the other machin\ +e, it can cause mail to be delayed \(for e)174 208.2 R(xample,)-.15 E +1.253(if one)174 220.2 R F2(sendmail)3.753 E F1 1.253(is deli)3.753 F +-.15(ve)-.25 G 1.252(ring a huge message, other).15 F F2(sendmail)3.752 +E F1 3.752(sw)C(on')-3.852 E 3.752(tb)-.18 G 3.752(ea)-3.752 G 1.252 +(ble to)-3.752 F .755(send e)174 232.2 R -.15(ve)-.25 G 3.255(ns).15 G +.756(mall messages\).)-3.255 F .756 +(Also, it requires another \214le descriptor \(for the lock)5.756 F .238 +(\214le\) per connection, so you may ha)174 244.2 R .538 -.15(ve t)-.2 H +2.738(or).15 G .238(educe the)-2.738 F F0(ConnectionCacheSize)2.738 E F1 +(option)2.738 E .786(to a)174 256.2 R -.2(vo)-.2 G .786 +(id running out of per).2 F .786(-process \214le descriptors.)-.2 F .786 +(Requires the)5.786 F F0(HostStatusDi-)3.286 E -.18(re)174 268.2 S +(ctory).18 E F1(option.)2.5 E(SmtpGreetingMessage=)102 284.4 Q F2(messa) +A -.1(ge)-.1 G F1 .345 +([$e macro] The message printed when the SMTP serv)174 296.4 R .344 +(er starts up.)-.15 F(Def)5.344 E .344(aults to \231$j)-.1 F +(Sendmail $v ready at $b\232.)174 308.4 Q 19.49(SMTPUTF8 Enable)102 +324.6 R(runtime support for SMTPUTF8.)2.5 E 22.28(SoftBounce If)102 +340.8 R .092(set, issue temporary errors \(4xy\) instead of permanent e\ +rrors \(5xy\).)2.592 F .093(This can be)5.093 F +(useful during testing of a ne)174 352.8 Q 2.5(wc)-.25 G +(on\214guration to a)-2.5 E -.2(vo)-.2 G +(id erroneous bouncing of mails.).2 E 23.94(SSLEngine Name)102 369 R +1.004(of SSL engine to use.)3.504 F 1.004(The a)6.004 F -.25(va)-.2 G +1.004(ilable v).25 F 1.004(alues depend on the OpenSSL v)-.25 F(er)-.15 +E(-)-.2 E(sion ag)174 381 Q(ainst which)-.05 E F2(sendmail)2.5 E F1 +(is compiled, see)2.5 E(openssl engine -v)214 397.2 Q +(for some information.)174 413.4 Q(SSLEngineP)102 429.6 Q 6.31(ath P) +-.15 F .631(ath to dynamic library for SSL engine.)-.15 F .632 +(This option is only useful if)5.632 F F2(SSLEngine)3.132 E F1 .484 +(is set.)174 441.6 R .484(If both are set, the engine will be loaded dy\ +namically at runtime using the)5.484 F .164 +(concatenation of the path, a slash "/", the string "lib", the v)174 +453.6 R .165(alue of)-.25 F F2(SSLEngine)2.665 E F1 2.665(,a)C(nd)-2.665 +E .875(the string ".so".)174 465.6 R .875(If only)5.875 F F2(SSLEngine) +3.375 E F1 .875(is set then the static v)3.375 F .874 +(ersion of the engine is)-.15 F(used.)174 477.6 Q(StatusFile=)102 493.8 +Q F2(\214le)A F1 .523([S] Log summary statistics in the named)14.13 F F2 +(\214le)3.024 E F1 5.524(.I)C 3.024(fn)-5.524 G 3.024<6f8c>-3.024 G .524 +(le name is speci\214ed, "statis-)-3.024 F .548(tics" is used.)174 505.8 +R .547(If not set, no summary statistics are sa)5.548 F -.15(ve)-.2 G +3.047(d. This).15 F .547(\214le does not gro)3.047 F(w)-.25 E(in size.) +174 517.8 Q(It can be printed using the)5 E F2(mailstats)2.5 E F1 +(\(8\) program.)A 28.4(SuperSafe [s])102 534 R .364 +(This option can be set to T)2.864 F .364(rue, F)-.35 F .364 +(alse, Interacti)-.15 F -.15(ve)-.25 G 2.864(,o).15 G 2.864(rP)-2.864 G +(ostMilter)-2.864 E 5.364(.I)-.55 G 2.864(fs)-5.364 G .364(et to T) +-2.864 F(rue,)-.35 E F2(sendmail)174 546 Q F1 .117(will be super)2.617 F +.116(-safe when running things, i.e., al)-.2 F -.1(wa)-.1 G .116 +(ys instantiate the queue).1 F .117(\214le, e)174 558 R -.15(ve)-.25 G +2.617(ni).15 G 2.617(fy)-2.617 G .117 +(ou are going to attempt immediate deli)-2.617 F -.15(ve)-.25 G(ry).15 E +(.)-.65 E F2(Sendmail)5.118 E F1(al)2.618 E -.1(wa)-.1 G .118 +(ys instan-).1 F .088(tiates the queue \214le before returning control \ +to the client under an)174 570 R 2.587(yc)-.15 G(ircumstances.)-2.587 E +1.299(This should really)174 582 R F2(always)3.799 E F1 1.299 +(be set to T)3.799 F 3.799(rue. The)-.35 F(Interacti)3.799 E 1.599 -.15 +(ve v)-.25 H 1.3(alue has been intro-)-.1 F .222 +(duced in 8.12 and can be used together with)174 594 R F0(Deli)2.721 E +-.1(ve)-.1 G(ryMode=i).1 E F1 5.221(.I)C 2.721(ts)-5.221 G .221 +(kips some syn-)-2.721 F 1.532(chronization calls which are ef)174 606 R +(fecti)-.25 E -.15(ve)-.25 G 1.533(ly doubled in the code e).15 F -.15 +(xe)-.15 G 1.533(cution path for).15 F .336(this mode.)174 618 R .336 +(If set to PostMilter)5.336 F(,)-.4 E F2(sendmail)2.836 E F1 .336 +(defers synchronizing the queue \214le until)2.836 F(an)174 630 Q 3.787 +(ym)-.15 G 1.287(ilters ha)-3.787 F 1.587 -.15(ve s)-.2 H 1.287 +(ignaled acceptance of the message.).15 F 1.288 +(PostMilter is useful only)6.287 F(when)174 642 Q F2(sendmail)3.822 E F1 +1.322(is running as an SMTP serv)3.822 F 1.321 +(er; in all other situations it acts the)-.15 F(same as T)174 654 Q +(rue.)-.35 E(TLSF)102 670.2 Q(allbacktoClear)-.15 E .715 +([no short name] If set,)174 682.2 R F2(sendmail)3.215 E F1 .716 +(immediately tries an outbound connection ag)3.215 F(ain)-.05 E .61 +(without ST)174 694.2 R(AR)-.93 E .61(TTLS after a TLS handshak)-.6 F +3.11(ef)-.1 G 3.11(ailure. Note:)-3.21 F .61(this applies to all con-) +3.11 F 2.676(nections e)174 706.2 R -.15(ve)-.25 G 5.176(ni).15 G 5.176 +(fT)-5.176 G 2.676(LS speci\214c requirements are set \(see rulesets) +-5.176 F F2(tls_r)5.177 E(cpt)-.37 E F1(and)5.177 E F2(tls_client)174 +718.2 Q F1 4.867(\). Hence)4.867 F 2.367 +(such requirements will cause an error on a retry without)4.867 F 0 Cg +EP %%Page: 81 77 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-81)195.86 E/F1 10/Times-Italic@0 SF(ne)174 96 Q(ver)-.15 E/F2 10 -/Times-Roman@0 SF 1.269(be set in the con\214guration \214le; it is int\ -ended for command line use only)3.77 F(.)-.65 E .435 -(Note that the use of option)174 108 R F0 -1(Ve)2.935 G(rbose)1 E F2 -.435(can cause authentication information to leak,)2.935 F .015 -(if you use a sendmail client to authenticate to a serv)174 120 R(er) --.15 E 5.015(.I)-.55 G 2.515(ft)-5.015 G .015(he authentication mech-) --2.515 F .935(anism uses plain te)174 132 R .936(xt passw)-.15 F .936 -(ords \(as with LOGIN or PLAIN\), then the passw)-.1 F(ord)-.1 E 1.418 -(could be compromised.)174 144 R 3.017 -.8(To a)6.418 H -.2(vo).6 G -1.417(id this, do not install sendmail set-user).2 F 1.417(-ID root,)-.2 -F(and disable the)174 156 Q F0(VERB)2.5 E F2 -(SMTP command with a suitable)2.5 E F0(Pri)2.5 E -.1(va)-.1 G(cyOptions) -.1 E F2(setting.)2.5 E(XscriptFileBuf)102 172.2 Q(ferSize=)-.25 E F1 -(thr)A(eshold)-.37 E F2 1.1([no short name] Set the)174 184.2 R F1(thr) -3.601 E(eshold)-.37 E F2 3.601(,i)C 3.601(nb)-3.601 G 1.101 -(ytes, before a memory-based queue tran-)-3.601 F -(script \214le becomes disk-based.)174 196.2 Q(The def)5 E -(ault is 4096 bytes.)-.1 E .109(All options can be speci\214ed on the c\ -ommand line using the \255O or \255o \215ag, b)102 212.4 R .108 -(ut most will cause)-.2 F F1(send-)2.608 E(mail)102 224.4 Q F2 .663 -(to relinquish its set-user)3.163 F .663(-ID permissions.)-.2 F .664 -(The options that will not cause this are Se)5.663 F -.15(ve)-.25 G -(nBitIn-).15 E 1.319 -(put [7], EightBitMode [8], MinFreeBlocks [b], CheckpointInterv)102 -236.4 R 1.319(al [C], Deli)-.25 F -.15(ve)-.25 G 1.319 -(ryMode [d], Error).15 F(-)-.2 E .042 -(Mode [e], IgnoreDots [i], SendMimeErrors [j], LogLe)102 248.4 R -.15 -(ve)-.25 G 2.543(l[).15 G .043(L], MeT)-2.543 F .043 -(oo [m], OldStyleHeaders [o], Pri-)-.8 F -.25(va)102 260.4 S -.15(cy).25 -G .303(Options [p], SuperSafe [s], V).15 F .302 -(erbose [v], QueueSortOrder)-1.11 F 2.802(,M)-.4 G .302(inQueueAge, Def) --2.802 F .302(aultCharSet, Dial)-.1 F(Delay)102 272.4 Q 7.312(,N)-.65 G -4.812(oRecipientAction, ColonOkInAddr)-7.312 F 7.312(,M)-.4 G 4.812 -(axQueueRunSize, SingleLineFromHeader)-7.312 F 7.312(,a)-.4 G(nd)-7.312 -E(Allo)102 284.4 Q 3.921(wBogusHELO. Actually)-.25 F 3.921(,P)-.65 G(ri) --3.921 E -.25(va)-.25 G -.15(cy).25 G 1.421(Options [p] gi).15 F -.15 -(ve)-.25 G 3.921(no).15 G 3.921(nt)-3.921 G 1.421 -(he command line are added to those)-3.921 F 1.697 -(already speci\214ed in the)102 296.4 R F1(sendmail.cf)4.197 E F2 1.697 -(\214le, i.e., the)4.197 F 4.197(yc)-.15 G(an')-4.197 E 4.197(tb)-.18 G -4.197(er)-4.197 G 4.198(eset. Also,)-4.197 F 4.198(M\()4.198 G 1.698 -(de\214ne macro\) when)-4.198 F -(de\214ning the r or s macros is also considered \231safe\232.)102 308.4 -Q F0 2.5(5.7. P)87 332.4 R 2.5<8a50>2.5 G -.18(re)-2.5 G -(cedence De\214nitions).18 E F2 -1.11(Va)127 348.6 S .164 -(lues for the \231Precedence:\232 \214eld may be de\214ned using the) -1.11 F F0(P)2.664 E F2 .164(control line.)2.664 F .163 -(The syntax of this)5.163 F(\214eld is:)102 360.6 Q F0(P)142 376.8 Q F1 -(name)A F0(=)A F1(num)A F2 .383(When the)102 393 R F1(name)2.883 E F2 -.384 -(is found in a \231Precedence:\232 \214eld, the message class is set to) -2.883 F F1(num)2.884 E F2 5.384(.H)C .384(igher numbers)-5.384 F .85 -(mean higher precedence.)102 405 R .85(Numbers less than zero ha)5.85 F -1.15 -.15(ve t)-.2 H .85(he special property that if an error occurs).15 -F 1.551(during processing the body of the message will not be returned;\ - this is e)102 417 R 1.552(xpected to be used for)-.15 F<9962>102 429 Q -.462(ulk\232 mail such as through mailing lists.)-.2 F .461(The def) -5.461 F .461(ault precedence is zero.)-.1 F -.15(Fo)5.461 G 2.961(re).15 -G .461(xample, our list of)-3.111 F(precedences is:)102 441 Q -(P\214rst-class=0)142 457.2 Q(Pspecial-deli)142 469.2 Q -.15(ve)-.25 G -(ry=100).15 E(Plist=\25530)142 481.2 Q(Pb)142 493.2 Q(ulk=\25560)-.2 E -(Pjunk=\255100)142 505.2 Q 1.058(People writing mailing list e)102 521.4 -R 1.058(xploders are encouraged to use \231Precedence: list\232.)-.15 F -1.059(Older v)6.059 F 1.059(ersions of)-.15 F F1(sendmail)102 533.4 Q F2 -1.19(\(which discarded all error returns for ne)3.69 F -.05(ga)-.15 G -(ti).05 E 1.49 -.15(ve p)-.25 H 1.19(recedences\) didn').15 F 3.69(tr) --.18 G 1.19(ecognize this name,)-3.69 F(gi)102 545.4 Q .598 -(ving it a def)-.25 F .598(ault precedence of zero.)-.1 F .598 -(This allo)5.598 F .598 -(ws list maintainers to see error returns on both old)-.25 F(and ne)102 -557.4 Q 2.5(wv)-.25 G(ersions of)-2.65 E F1(sendmail)2.5 E F2(.)A F0 2.5 -(5.8. V)87 581.4 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E(ersion Le)-1 E --.1(ve)-.15 G(l).1 E F2 3.182 -.8(To p)127 597.6 T(ro).8 E 1.582 -(vide compatibility with old con\214guration \214les, the)-.15 F F0(V) -4.081 E F2 1.581(line has been added to de\214ne)4.081 F 1.11(some v)102 -609.6 R 1.11(ery basic semantics of the con\214guration \214le.)-.15 F -1.11(These are not intended to be long term sup-)6.11 F .034 -(ports; rather)102 621.6 R 2.533(,t)-.4 G(he)-2.533 E 2.533(yd)-.15 G -.033(escribe compatibility features which will probably be remo)-2.533 F --.15(ve)-.15 G 2.533(di).15 G 2.533(nf)-2.533 G .033(uture releases.) --2.533 F F0(N.B.:)127 637.8 Q F2 .196(these v)2.696 F(ersion)-.15 E F1 -(le)2.696 E(vels)-.15 E F2(ha)2.696 E .496 -.15(ve n)-.2 H .196 -(othing to do with the v).15 F(ersion)-.15 E F1(number)2.696 E F2 .197 -(on the \214les.)2.696 F -.15(Fo)5.197 G 2.697(re).15 G(xam-)-2.847 E -(ple, as of this writing v)102 649.8 Q -(ersion 10 con\214g \214les \(speci\214cally)-.15 E 2.5(,8)-.65 G -(.10\) used v)-2.5 E(ersion le)-.15 E -.15(ve)-.25 G 2.5(l9c).15 G -(on\214gurations.)-2.5 E 1.102 -(\231Old\232 con\214guration \214les are de\214ned as v)127 666 R 1.102 -(ersion le)-.15 F -.15(ve)-.25 G 3.602(lo).15 G 3.602(ne. V)-3.602 F -1.102(ersion le)-1.11 F -.15(ve)-.25 G 3.602(lt).15 G 1.302 -.1(wo \214) --3.602 H 1.102(les mak).1 F 3.602(et)-.1 G(he)-3.602 E(follo)102 678 Q -(wing changes:)-.25 E 12.5(\(1\) Host)107 694.2 R .727(name canoni\214c\ -ation \($[ ... $]\) appends a dot if the name is recognized; this gi) -3.226 F -.15(ve)-.25 G 3.227(st).15 G(he)-3.227 E 1.975 -(con\214g \214le a w)133.66 706.2 R 1.974(ay of \214nding out if an)-.1 -F 1.974(ything matched.)-.15 F(\(Actually)6.974 E 4.474(,t)-.65 G 1.974 -(his just initializes the)-4.474 F .738 -(\231host\232 map with the \231\255a.)133.66 718.2 R 5.739<9a8d>-.7 G -.739(ag \212 you can reset it to an)-5.739 F .739 -(ything you prefer by declaring the)-.15 F 0 Cg EP +(SMM:08-81)195.86 E/F1 10/Times-Roman@0 SF(ST)174 96 Q(AR)-.93 E 3.55 +(TTLS. Therefore)-.6 F(the)3.551 E 3.551(ys)-.15 G 1.051 +(hould only trigger a temporary f)-3.551 F 1.051(ailure so the con-)-.1 +F(nection is later on tried ag)174 108 Q(ain.)-.05 E 6.16 +(TLSSrvOptions [no)102 124.2 R .238 +(short name] List of options for SMTP ST)2.738 F(AR)-.93 E .237 +(TTLS for the serv)-.6 F .237(er consisting of)-.15 F .18 +(single characters with interv)174 136.2 R .18 +(ening white space or commas.)-.15 F .18(The \215ag `)5.18 F(`V')-.74 E +2.68('d)-.74 G(isables)-2.68 E .511(client v)174 148.2 R .511(eri\214ca\ +tion, and hence it is not possible to use a client certi\214cate for re\ +lay-)-.15 F 3.918(ing. The)174 160.2 R 1.418(\215ag `)3.918 F(`C')-.74 E +3.918('r)-.74 G(emo)-3.918 E -.15(ve)-.15 G 3.918(st).15 G 1.419 +(he requirement for the TLS serv)-3.918 F 1.419(er to ha)-.15 F 1.719 +-.15(ve a c)-.2 H(ert.).15 E .387(This only w)174 172.2 R .386 +(orks under v)-.1 F .386 +(ery speci\214c circumstances and should only be used if the)-.15 F +(consequences are understood, e.g., clients may not w)174 184.2 Q +(ork with a serv)-.1 E(er using this.)-.15 E -.7(Te)102 200.4 S +(mpFileMode=).7 E/F2 10/Times-Italic@0 SF(mode)A F1 .061 +([F] The \214le mode for transcript \214les, \214les to which)174 212.4 +R F2(sendmail)2.562 E F1(deli)2.562 E -.15(ve)-.25 G .062(rs directly) +.15 F 2.562<2c8c>-.65 G(les)-2.562 E .61(in the)174 224.4 R F0 +(HostStatusDir)3.11 E(ectory)-.18 E F1 3.11(,a)C(nd)-3.11 E F0 +(StatusFile)3.11 E F1 5.61(.I)C 3.11(ti)-5.61 G 3.11(si)-3.11 G .61 +(nterpreted in octal by def)-3.11 F(ault.)-.1 E(Def)174 236.4 Q +(aults to 0600.)-.1 E -.35(Ti)102 252.6 S(meout.).35 E F2(type)A F1(=)A +F2(timeout)1.666 E F1 .417 +([r; subsumes old T option as well] Set timeout v)174 264.6 R 2.917 +(alues. F)-.25 F .417(or more information, see)-.15 F(section 4.1.)174 +276.6 Q -.35(Ti)102 292.8 S(meZoneSpec=).35 E F2(tzinfo)A F1 .218 +([t] Set the local time zone info to)174 304.8 R F2(tzinfo)2.718 E F1 +2.718<8a66>2.718 G .218(or e)-2.718 F .218(xample, \231PST8PDT\232.)-.15 +F(Actually)5.217 E 2.717(,i)-.65 G(f)-2.717 E 1.345 +(this is not set, the TZ en)174 316.8 R 1.346(vironment v)-.4 F 1.346 +(ariable is cleared \(so the system def)-.25 F 1.346(ault is)-.1 F .209 +(used\); if set b)174 328.8 R .208(ut null, the user')-.2 F 2.708(sT) +-.55 G 2.708(Zv)-2.708 G .208 +(ariable is used, and if set and non-null the TZ)-2.958 F -.25(va)174 +340.8 S(riable is set to this v).25 E(alue.)-.25 E -.35(Tr)102 357 S +(ustedUser=).35 E F2(user)A F1 3.752([no short name] The).06 F F2(user) +6.252 E F1 3.752(parameter may be a user name \(look)6.252 F 3.753 +(ed up in)-.1 F F2(/etc/passwd)174 369 Q F1 2.743(\)o)C 2.743(ran)-2.743 +G .243(umeric user id.)-2.743 F -.35(Tr)5.242 G .242 +(usted user for \214le o).35 F .242(wnership and starting the)-.25 F +3.779(daemon. If)174 381 R 1.279 +(set, generated alias databases and the control sock)3.779 F 1.279 +(et \(if con\214gured\))-.1 F(will automatically be o)174 393 Q +(wned by this user)-.25 E(.)-.55 E -.35(Tr)102 409.2 S 5.96 +(yNullMXList [w]).35 F .114 +(If this system is the \231best\232 \(that is, lo)2.614 F .114 +(west preference\) MX for a gi)-.25 F -.15(ve)-.25 G 2.613(nh).15 G .113 +(ost, its)-2.613 F 1.168(con\214guration rules should normally detect t\ +his situation and treat that condition)174 421.2 R .258 +(specially by forw)174 433.2 R .258 +(arding the mail to a UUCP feed, treating it as local, or whate)-.1 F +-.15(ve)-.25 G -.55(r.).15 G(Ho)174 445.2 Q(we)-.25 E -.15(ve)-.25 G +1.685 -.4(r, i).15 H 3.385(ns).4 G .886 +(ome cases \(such as Internet \214re)-3.385 F -.1(wa)-.25 G .886 +(lls\) you may w).1 F .886(ant to try to con-)-.1 F .07 +(nect directly to that host as though it had no MX records at all.)174 +457.2 R .07(Setting this option)5.07 F(causes)174 469.2 Q F2(sendmail) +3.013 E F1 .514(to try this.)3.013 F .514(The do)5.514 F .514 +(wnside is that errors in your con\214guration are)-.25 F(lik)174 481.2 +Q 2.116(ely to be diagnosed as \231host unkno)-.1 F 2.116 +(wn\232 or \231message timed out\232 instead of)-.25 F +(something more meaningful.)174 493.2 Q(This option is disrecommended.)5 +E(UnixFromLine=)102 509.4 Q F2(fr)A(omline)-.45 E F1 .236 +([$l macro] De\214nes the format used when)174 521.4 R F2(sendmail)2.736 +E F1 .236(must add a UNIX-style From_)2.736 F 1.325 +(line \(that is, a line be)174 533.4 R 1.325 +(ginning \231Fromuser\232\).)-.15 F(Def)6.324 E 1.324 +(aults to \231From $g)-.1 F($d\232.)6.324 E(Don')174 545.4 Q 2.645(tc) +-.18 G .146(hange this unless your system uses a dif)-2.645 F .146 +(ferent UNIX mailbox format \(v)-.25 F(ery)-.15 E(unlik)174 557.4 Q +(ely\).)-.1 E(UnsafeGroupWrites)102 573.6 Q .086 +([no short name] If set \(def)174 585.6 R .085 +(ault\), :include: and .forw)-.1 F .085 +(ard \214les that are group writable)-.1 F .654 +(are considered \231unsafe\232, that is, the)174 597.6 R 3.155(yc)-.15 G +.655(annot reference programs or write directly)-3.155 F .537 +(to \214les.)174 609.6 R -.8(Wo)5.537 G .537 +(rld writable :include: and .forw).8 F .537(ard \214les are al)-.1 F -.1 +(wa)-.1 G .536(ys unsafe.).1 F .536(Note: use)5.536 F F0 +(DontBlameSendmail)174 621.6 Q F1(instead; this option is deprecated.) +2.5 E(UseCompressedIPv6Addresses)102 637.8 Q .09([no short name] If set\ +, the compressed format of IPv6 addresses, such as IPV6:::1,)174 649.8 R +(will be used, instead of the uncompressed format, such as IPv6:0:0:0:0\ +:0:0:0:1.)174 661.8 Q(UseErrorsT)102 678 Q 21.15(o[)-.8 G .826 +(l] If there is an \231Errors-T)-21.15 F .826(o:\232 header)-.8 F 3.326 +(,s)-.4 G .826(end error messages to the addresses listed)-3.326 F 3.134 +(there. The)174 690 R 3.134(yn)-.15 G .634(ormally go to the en)-3.134 F +-.15(ve)-.4 G .635(lope sender).15 F 5.635(.U)-.55 G .635 +(se of this option causes)-5.635 F F2(send-)3.135 E(mail)174 702 Q F1 +(to violate RFC 1123.)2.5 E +(This option is disrecommended and deprecated.)5 E 0 Cg EP %%Page: 82 78 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-82 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(map e) -133.66 96 Q(xplicitly)-.15 E(.\))-.65 E 12.5(\(2\) Def)107 112.2 R .385 -(ault host name e)-.1 F .385 -(xtension is consistent throughout processing; v)-.15 F .384(ersion le) --.15 F -.15(ve)-.25 G 2.884(lo).15 G .384(ne con\214gu-)-2.884 F .83 -(rations turned of)133.66 124.2 R 3.33(fd)-.25 G .83(omain e)-3.33 F .83 -(xtension \(that is, adding the local domain name\) during certain)-.15 -F .4(points in processing.)133.66 136.2 R -1.11(Ve)5.4 G .4(rsion le) -1.11 F -.15(ve)-.25 G 2.9(lt).15 G .6 -.1(wo c)-2.9 H .4 -(on\214gurations are e).1 F .4(xpected to include a trailing dot)-.15 F -(to indicate that the name is already canonical.)133.66 148.2 Q 12.5 -(\(3\) Local)107 164.4 R .072 -(names that are not aliases are passed through a ne)2.572 F 2.572(wd) --.25 G .072(istinguished ruleset \214v)-2.572 F .072(e; this can)-.15 F -.14(be used to append a local relay)133.66 176.4 R 5.139(.T)-.65 G .139 -(his beha)-5.139 F .139(vior can be pre)-.2 F -.15(ve)-.25 G .139 -(nted by resolving the local name).15 F .993(with an initial `@'.)133.66 -188.4 R .993(That is, something that resolv)5.993 F .993 -(es to a local mailer and a user name of)-.15 F .602 -(\231vikki\232 will be passed through ruleset \214v)133.66 200.4 R .601 -(e, b)-.15 F .601(ut a user name of \231@vikki\232 will ha)-.2 F .901 --.15(ve t)-.2 H .601(he `@').15 F .919 -(stripped, will not be passed through ruleset \214v)133.66 212.4 R .919 -(e, b)-.15 F .92(ut will otherwise be treated the same as)-.2 F .63 -(the prior e)133.66 224.4 R 3.13(xample. The)-.15 F -.15(ex)3.13 G .629 -(pectation is that this might be used to implement a polic).15 F 3.129 -(yw)-.15 G(here)-3.129 E .734(mail sent to \231vikki\232 w)133.66 236.4 -R .734(as handled by a central hub, b)-.1 F .734 -(ut mail sent to \231vikki@localhost\232 w)-.2 F(as)-.1 E(deli)133.66 -248.4 Q -.15(ve)-.25 G(red directly).15 E(.)-.65 E -1.11(Ve)127 264.6 S -1.383(rsion le)1.11 F -.15(ve)-.25 G 3.883(lt).15 G 1.383 -(hree \214les allo)-3.883 F 3.882(w#i)-.25 G 1.382 -(nitiated comments on all lines.)-3.882 F 1.382 -(Exceptions are backslash)6.382 F(escaped # marks and the $# syntax.)102 -276.6 Q -1.11(Ve)127 292.8 S 1.207(rsion le)1.11 F -.15(ve)-.25 G 3.707 -(lf).15 G 1.207(our con\214gurations are completely equi)-3.707 F -.25 -(va)-.25 G 1.208(lent to le).25 F -.15(ve)-.25 G 3.708(lt).15 G 1.208 -(hree for historical rea-)-3.708 F(sons.)102 304.8 Q -1.11(Ve)127 321 S -1.234(rsion le)1.11 F -.15(ve)-.25 G 3.734<6c8c>.15 G 1.534 -.15(ve c) --3.734 H 1.234(on\214guration \214les change the def).15 F 1.234 -(ault de\214nition of)-.1 F F0($w)3.734 E F1 1.234 -(to be just the \214rst)3.734 F(component of the hostname.)102 333 Q --1.11(Ve)127 349.2 S 1.588(rsion le)1.11 F -.15(ve)-.25 G 4.088(ls).15 G -1.588(ix con\214guration \214les change man)-4.088 F 4.088(yo)-.15 G -4.089(ft)-4.088 G 1.589(he local processing options \(such as)-4.089 F -.481(aliasing and matching the be)102 361.2 R .481(ginning of the addre\ -ss for `|' characters\) to be mailer \215ags; this allo)-.15 F(ws)-.25 E -1.344(\214ne-grained control o)102 373.2 R -.15(ve)-.15 G 3.844(rt).15 G -1.344(he special local processing.)-3.844 F(Le)6.345 E -.15(ve)-.25 G -3.845(ls).15 G 1.345(ix con\214guration \214les may also use)-3.845 F -1.222(long option names.)102 385.2 R(The)6.222 E F0(ColonOkInAddr)3.722 -E F1 1.222(option \(to allo)3.722 F 3.721(wc)-.25 G 1.221 -(olons in the local-part of addresses\))-3.721 F(def)102 397.2 Q(aults) --.1 E F0(on)3.44 E F1 .94(for lo)3.44 F .94(wer numbered con\214guratio\ -n \214les; the con\214guration \214le requires some additional)-.25 F -(intelligence to properly handle the RFC 822 group construct.)102 409.2 -Q -1.11(Ve)127 425.4 S 1.97(rsion le)1.11 F -.15(ve)-.25 G 4.47(ls).15 G --2.15 -.25(ev e)-4.47 H 4.47(nc).25 G 1.97 -(on\214guration \214les used ne)-4.47 F 4.47(wo)-.25 G 1.97 -(ption names to replace old macros \()-4.47 F F0($e)A F1(became)102 -437.4 Q F0(SmtpGr)5.547 E(eetingMessage)-.18 E F1(,)A F0($l)5.547 E F1 -(became)5.547 E F0(UnixFr)5.547 E(omLine)-.18 E F1 5.548(,a)C(nd)-5.548 -E F0($o)5.548 E F1(became)5.548 E F0(OperatorChars)5.548 E F1(.)A .087 -(Also, prior to v)102 449.4 R .087(ersion se)-.15 F -.15(ve)-.25 G .087 -(n, the).15 F F0(F=q)2.587 E F1 .087 -(\215ag \(use 250 instead of 252 return v)2.587 F .086(alue for)-.25 F -/F2 9/Times-Roman@0 SF .086(SMTP VRFY)2.586 F F1(com-)2.586 E(mands\) w) -102 461.4 Q(as assumed.)-.1 E -1.11(Ve)127 477.6 S(rsion le)1.11 E -.15 -(ve)-.25 G 2.5(le).15 G(ight con\214guration \214les allo)-2.5 E(w)-.25 -E F0($#)2.5 E F1(on the left hand side of ruleset lines.)2.5 E -1.11(Ve) -127 493.8 S .422(rsion le)1.11 F -.15(ve)-.25 G 2.922(ln).15 G .423 -(ine con\214guration \214les allo)-2.922 F 2.923(wp)-.25 G .423 -(arentheses in rulesets, i.e. the)-2.923 F 2.923(ya)-.15 G .423 -(re not treated as)-2.923 F(comments and hence remo)102 505.8 Q -.15(ve) --.15 G(d.).15 E -1.11(Ve)127 522 S(rsion le)1.11 E -.15(ve)-.25 G 2.5 -(lt).15 G(en con\214guration \214les allo)-2.5 E 2.5(wq)-.25 G -(ueue group de\214nitions.)-2.5 E(The)127 538.2 Q F0(V)2.678 E F1 .178 -(line may ha)2.678 F .478 -.15(ve a)-.2 H 2.677(no).15 G(ptional)-2.677 -E F0(/)2.677 E/F3 10/Times-Italic@0 SF(vendor)A F1 .177 -(to indicate that this con\214guration \214le uses modi\214ca-)2.677 F -.866(tions speci\214c to a particular v)102 552.2 R(endor)-.15 E/F4 7 -/Times-Roman@0 SF(22)-4 I F1 5.866(.Y)4 K .866(ou may use \231/Berk) --6.966 F(ele)-.1 E .865(y\232 to emphasize that this con\214gura-)-.15 F -(tion \214le uses the Berk)102 564.2 Q(ele)-.1 E 2.5(yd)-.15 G -(ialect of)-2.5 E F3(sendmail)2.5 E F1(.)A F0 2.5(5.9. K)87 588.2 R 2.5 -<8a4b>2.5 G(ey File Declaration)-2.75 E F1 -(Special maps can be de\214ned using the line:)127 604.4 Q -(Kmapname mapclass ar)142 620.6 Q(guments)-.18 E(The)102 636.8 Q F3 -(mapname)2.75 E F1 .251 -(is the handle by which this map is referenced in the re)2.75 F .251 -(writing rules.)-.25 F(The)5.251 E F3(mapclass)2.751 E F1(is)2.751 E -1.889(the name of a type of map; these are compiled in to)102 648.8 R F3 -(sendmail)4.389 E F1 6.888(.T)C(he)-6.888 E F3(ar)4.388 E(guments)-.37 E -F1 1.888(are interpreted)4.388 F .79(depending on the class; typically) -102 660.8 R 3.29(,t)-.65 G .791(here w)-3.29 F .791(ould be a single ar) --.1 F .791(gument naming the \214le containing the)-.18 F .32 LW 76 -670.4 72 670.4 DL 80 670.4 76 670.4 DL 84 670.4 80 670.4 DL 88 670.4 84 -670.4 DL 92 670.4 88 670.4 DL 96 670.4 92 670.4 DL 100 670.4 96 670.4 DL -104 670.4 100 670.4 DL 108 670.4 104 670.4 DL 112 670.4 108 670.4 DL 116 -670.4 112 670.4 DL 120 670.4 116 670.4 DL 124 670.4 120 670.4 DL 128 -670.4 124 670.4 DL 132 670.4 128 670.4 DL 136 670.4 132 670.4 DL 140 -670.4 136 670.4 DL 144 670.4 140 670.4 DL 148 670.4 144 670.4 DL 152 -670.4 148 670.4 DL 156 670.4 152 670.4 DL 160 670.4 156 670.4 DL 164 -670.4 160 670.4 DL 168 670.4 164 670.4 DL 172 670.4 168 670.4 DL 176 -670.4 172 670.4 DL 180 670.4 176 670.4 DL 184 670.4 180 670.4 DL 188 -670.4 184 670.4 DL 192 670.4 188 670.4 DL 196 670.4 192 670.4 DL 200 -670.4 196 670.4 DL 204 670.4 200 670.4 DL 208 670.4 204 670.4 DL 212 -670.4 208 670.4 DL 216 670.4 212 670.4 DL/F5 5/Times-Roman@0 SF(22)93.6 -680.8 Q/F6 8/Times-Roman@0 SF .214(And of course, v)3.2 J .214 -(endors are encouraged to add themselv)-.12 F .214 -(es to the list of recognized v)-.12 F .214 -(endors by editing the routine)-.12 F/F7 8/Times-Italic@0 SF(setvendor) -2.214 E F6(in)2.214 E F7(conf)72 693.6 Q(.c)-.12 E F6 4(.P)C -(lease send e-mail to sendmail@Sendmail.ORG to re)-4 E(gister your v) --.12 E(endor dialect.)-.12 E 0 Cg EP +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(UserDatabaseSpec=)102 96 Q/F2 10/Times-Italic@0 SF(udbspec)A F1 +([U] The user database speci\214cation.)174 108 Q -1.11(Ve)102 124.2 S +37.29(rbose [v])1.11 F .561(Run in v)3.061 F .561(erbose mode.)-.15 F +.561(If this is set,)5.561 F F2(sendmail)3.061 E F1 .56(adjusts options) +3.061 F F0(HoldExpensi)3.06 E -.1(ve)-.1 G F1(\(old)174 136.2 Q F0(c) +2.635 E F1 2.635(\)a)C(nd)-2.635 E F0(Deli)2.635 E -.1(ve)-.1 G(ryMode) +.1 E F1(\(old)2.635 E F0(d)2.635 E F1 2.635(\)s)C 2.635(ot)-2.635 G .135 +(hat all mail is deli)-2.635 F -.15(ve)-.25 G .136 +(red completely in a sin-).15 F 1.244 +(gle job so that you can see the entire deli)174 148.2 R -.15(ve)-.25 G +1.244(ry process.).15 F(Option)6.244 E F0 -1(Ve)3.743 G(rbose)1 E F1 +(should)3.743 E F2(ne)174 160.2 Q(ver)-.15 E F1 1.269(be set in the con\ +\214guration \214le; it is intended for command line use only)3.769 F(.) +-.65 E .435(Note that the use of option)174 172.2 R F0 -1(Ve)2.935 G +(rbose)1 E F1 .435(can cause authentication information to leak,)2.935 F +.015(if you use a sendmail client to authenticate to a serv)174 184.2 R +(er)-.15 E 5.015(.I)-.55 G 2.515(ft)-5.015 G .015 +(he authentication mech-)-2.515 F .936(anism uses plain te)174 196.2 R +.936(xt passw)-.15 F .936 +(ords \(as with LOGIN or PLAIN\), then the passw)-.1 F(ord)-.1 E 1.417 +(could be compromised.)174 208.2 R 3.017 -.8(To a)6.417 H -.2(vo).6 G +1.417(id this, do not install sendmail set-user).2 F 1.418(-ID root,)-.2 +F(and disable the)174 220.2 Q F0(VERB)2.5 E F1 +(SMTP command with a suitable)2.5 E F0(Pri)2.5 E -.1(va)-.1 G(cyOptions) +.1 E F1(setting.)2.5 E(XscriptFileBuf)102 236.4 Q(ferSize=)-.25 E F2 +(thr)A(eshold)-.37 E F1 1.101([no short name] Set the)174 248.4 R F2 +(thr)3.601 E(eshold)-.37 E F1 3.601(,i)C 3.601(nb)-3.601 G 1.101 +(ytes, before a memory-based queue tran-)-3.601 F +(script \214le becomes disk-based.)174 260.4 Q(The def)5 E +(ault is 4096 bytes.)-.1 E .108(All options can be speci\214ed on the c\ +ommand line using the \255O or \255o \215ag, b)102 276.6 R .109 +(ut most will cause)-.2 F F2(send-)2.609 E(mail)102 288.6 Q F1 .664 +(to relinquish its set-user)3.164 F .664(-ID permissions.)-.2 F .663 +(The options that will not cause this are Se)5.664 F -.15(ve)-.25 G +(nBitIn-).15 E 1.319 +(put [7], EightBitMode [8], MinFreeBlocks [b], CheckpointInterv)102 +300.6 R 1.319(al [C], Deli)-.25 F -.15(ve)-.25 G 1.319 +(ryMode [d], Error).15 F(-)-.2 E .043 +(Mode [e], IgnoreDots [i], SendMimeErrors [j], LogLe)102 312.6 R -.15 +(ve)-.25 G 2.542(l[).15 G .042(L], MeT)-2.542 F .042 +(oo [m], OldStyleHeaders [o], Pri-)-.8 F -.25(va)102 324.6 S -.15(cy).25 +G .302(Options [p], SuperSafe [s], V).15 F .302 +(erbose [v], QueueSortOrder)-1.11 F 2.802(,M)-.4 G .303(inQueueAge, Def) +-2.802 F .303(aultCharSet, Dial)-.1 F(Delay)102 336.6 Q 3.872(,N)-.65 G +1.372(oRecipientAction, ColonOkInAddr)-3.872 F 3.872(,M)-.4 G 1.372 +(axQueueRunSize, SingleLineFromHeader)-3.872 F 3.871(,a)-.4 G 1.371 +(nd Al-)-3.871 F(lo)102 348.6 Q 3.576(wBogusHELO. Actually)-.25 F 3.577 +(,P)-.65 G(ri)-3.577 E -.25(va)-.25 G -.15(cy).25 G 1.077 +(Options [p] gi).15 F -.15(ve)-.25 G 3.577(no).15 G 3.577(nt)-3.577 G +1.077(he command line are added to those al-)-3.577 F .429 +(ready speci\214ed in the)102 360.6 R F2(sendmail.cf)2.928 E F1 .428 +(\214le, i.e., the)2.928 F 2.928(yc)-.15 G(an')-2.928 E 2.928(tb)-.18 G +2.928(er)-2.928 G 2.928(eset. Also,)-2.928 F 2.928(M\()2.928 G .428 +(de\214ne macro\) when de\214n-)-2.928 F +(ing the r or s macros is also considered \231safe\232.)102 372.6 Q F0 +2.5(5.7. P)87 396.6 R 2.5<8a50>2.5 G -.18(re)-2.5 G +(cedence De\214nitions).18 E F1 -1.11(Va)127 412.8 S .164 +(lues for the \231Precedence:\232 \214eld may be de\214ned using the) +1.11 F F0(P)2.664 E F1 .164(control line.)2.664 F .164 +(The syntax of this)5.164 F(\214eld is:)102 424.8 Q F0(P)142 441 Q F2 +(name)A F0(=)A F2(num)A F1 .384(When the)102 457.2 R F2(name)2.884 E F1 +.384 +(is found in a \231Precedence:\232 \214eld, the message class is set to) +2.884 F F2(num)2.883 E F1 5.383(.H)C .383(igher numbers)-5.383 F .85 +(mean higher precedence.)102 469.2 R .85(Numbers less than zero ha)5.85 +F 1.15 -.15(ve t)-.2 H .85(he special property that if an error occurs) +.15 F 1.551(during processing the body of the message will not be retur\ +ned; this is e)102 481.2 R 1.551(xpected to be used for)-.15 F<9962>102 +493.2 Q .461(ulk\232 mail such as through mailing lists.)-.2 F .461 +(The def)5.461 F .461(ault precedence is zero.)-.1 F -.15(Fo)5.461 G +2.962(re).15 G .462(xample, our list of)-3.112 F(precedences is:)102 +505.2 Q(P\214rst-class=0)142 521.4 Q(Pspecial-deli)142 533.4 Q -.15(ve) +-.25 G(ry=100).15 E(Plist=\25530)142 545.4 Q(Pb)142 557.4 Q(ulk=\25560) +-.2 E(Pjunk=\255100)142 569.4 Q 1.059(People writing mailing list e)102 +585.6 R 1.058(xploders are encouraged to use \231Precedence: list\232.) +-.15 F 1.058(Older v)6.058 F 1.058(ersions of)-.15 F F2(sendmail)102 +597.6 Q F1 1.19(\(which discarded all error returns for ne)3.69 F -.05 +(ga)-.15 G(ti).05 E 1.49 -.15(ve p)-.25 H 1.19(recedences\) didn').15 F +3.69(tr)-.18 G 1.19(ecognize this name,)-3.69 F(gi)102 609.6 Q .599 +(ving it a def)-.25 F .598(ault precedence of zero.)-.1 F .598 +(This allo)5.598 F .598 +(ws list maintainers to see error returns on both old)-.25 F(and ne)102 +621.6 Q 2.5(wv)-.25 G(ersions of)-2.65 E F2(sendmail)2.5 E F1(.)A F0 2.5 +(5.8. V)87 645.6 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E(ersion Le)-1 E +-.1(ve)-.15 G(l).1 E F1 3.181 -.8(To p)127 661.8 T(ro).8 E 1.581 +(vide compatibility with old con\214guration \214les, the)-.15 F F0(V) +4.081 E F1 1.582(line has been added to de\214ne)4.082 F 1.11(some v)102 +673.8 R 1.11(ery basic semantics of the con\214guration \214le.)-.15 F +1.11(These are not intended to be long term sup-)6.11 F(ports; rather) +102 685.8 Q 2.5(,t)-.4 G(he)-2.5 E 2.5(yd)-.15 G +(escribe compatibility features which will probably be remo)-2.5 E -.15 +(ve)-.15 G 2.5(di).15 G 2.5(nf)-2.5 G(uture releases.)-2.5 E F0(N.B.:) +127 702 Q F1 .196(these v)2.696 F(ersion)-.15 E F2(le)2.696 E(vels)-.15 +E F1(ha)2.696 E .496 -.15(ve n)-.2 H .196(othing to do with the v).15 F +(ersion)-.15 E F2(number)2.696 E F1 .197(on the \214les.)2.696 F -.15 +(Fo)5.197 G 2.697(re).15 G(xam-)-2.847 E(ple, as of this writing v)102 +714 Q(ersion 10 con\214g \214les \(speci\214cally)-.15 E 2.5(,8)-.65 G +(.10\) used v)-2.5 E(ersion le)-.15 E -.15(ve)-.25 G 2.5(l9c).15 G +(on\214gurations.)-2.5 E 0 Cg EP %%Page: 83 79 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-83)195.86 E/F1 10/Times-Roman@0 SF(map.)102 96 Q -(Maps are referenced using the syntax:)127 112.2 Q($\()142 128.4 Q/F2 10 -/Times-Italic@0 SF(map k)2.5 E -.3(ey)-.1 G F1($@)2.8 E F2(ar)2.5 E -(guments)-.37 E F1($:)2.5 E F2(default)2.5 E F1($\))2.5 E .641 -(where either or both of the)102 144.6 R F2(ar)3.141 E(guments)-.37 E F1 -(or)3.141 E F2(default)3.141 E F1 .64(portion may be omitted.)3.141 F -(The)5.64 E F2 .64($@ ar)3.14 F(guments)-.37 E F1(may)3.14 E 1.276 -(appear more than once.)102 156.6 R 1.276(The indicated)6.276 F F2 -.1 -(ke)3.776 G(y)-.2 E F1(and)3.776 E F2(ar)3.776 E(guments)-.37 E F1 1.277 -(are passed to the appropriate mapping)3.777 F 3.253(function. If)102 -168.6 R .753(it returns a v)3.253 F .753(alue, it replaces the input.) --.25 F .753(If it does not return a v)5.753 F .753(alue and the)-.25 F -F2(default)3.253 E F1(is)3.253 E(speci\214ed, the)102 180.6 Q F2 -(default)2.5 E F1(replaces the input.)2.5 E -(Otherwise, the input is unchanged.)5 E(The)127 196.8 Q F2(ar)4.063 E -(guments)-.37 E F1 1.563(are passed to the map for arbitrary use.)4.063 -F 1.564(Most map classes can interpolate)6.564 F .883(these ar)102 208.8 -R .883(guments into their v)-.18 F .883(alues using the syntax \231%) --.25 F F2(n)A F1 3.382<9a28>C(where)-3.382 E F2(n)3.382 E F1 .882 -(is a digit\) to indicate the corre-)3.382 F(sponding)102 220.8 Q F2(ar) -2.5 E(gument)-.37 E F1 5(.A)C -.18(rg)-5 G -(ument \231%0\232 indicates the database k).18 E -.15(ey)-.1 G 5(.F)-.5 -G(or e)-5.15 E(xample, the rule)-.15 E(R$\255 ! $+)142 237 Q -($: $\(uucp $1 $@ $2 $: $2 @ $1 . UUCP $\))71.72 E 1.269(Looks up the U\ -UCP name in a \(user de\214ned\) UUCP map; if not found it turns it int\ -o \231.UUCP\232)102 253.2 R 2.5(form. The)102 265.2 R -(database might contain records lik)2.5 E(e:)-.1 E(decv)142 281.4 Q -77.43(ax %1@%0.DEC.COM)-.25 F 72.19(research %1@%0.A)142 293.4 R(TT) --1.11 E(.COM)-.74 E(Note that)102 309.6 Q F2(default)2.5 E F1 -(clauses ne)2.5 E -.15(ve)-.25 G 2.5(rd).15 G 2.5(ot)-2.5 G -(his mapping.)-2.5 E .735(The b)127 325.8 R .735(uilt-in map with both \ -name and class \231host\232 is the host name canonicalization lookup.) --.2 F(Thus, the syntax:)102 337.8 Q($\(host)142 354 Q F2(hostname)2.5 E -F1($\))A(is equi)102 370.2 Q -.25(va)-.25 G(lent to:).25 E($[)142 386.4 -Q F2(hostname)A F1($])A(There are man)127 406.8 Q 2.5(yd)-.15 G -(e\214ned classes.)-2.5 E 55.06(cdb Database)102 423 R .087 -(lookups using the cdb\(3\) library)2.587 F(.)-.65 E F2(Sendmail)5.087 E -F1 .088(must be compiled with)2.587 F F0(CDB)2.588 E F1(de\214ned.)174 -435 Q 51.72(dbm Database)102 451.2 R 1.623 -(lookups using the ndbm\(3\) library)4.123 F(.)-.65 E F2(Sendmail)6.623 -E F1 1.623(must be compiled with)4.123 F F0(NDBM)174 463.2 Q F1 -(de\214ned.)2.5 E 49.51(btree Database)102 479.4 R .677 -(lookups using the btree interf)3.177 F .677(ace to the Berk)-.1 F(ele) --.1 E 3.178(yD)-.15 G 3.178(Bl)-3.178 G(ibrary)-3.178 E(.)-.65 E F2 -(Sendmail)5.678 E F1(must be compiled with)174 491.4 Q F0(NEWDB)2.5 E F1 -(de\214ned.)2.5 E 51.17(hash Database)102 507.6 R .828 -(lookups using the hash interf)3.329 F .828(ace to the Berk)-.1 F(ele) --.1 E 3.328(yD)-.15 G 3.328(Bl)-3.328 G(ibrary)-3.328 E(.)-.65 E F2 -(Sendmail)5.828 E F1(must be compiled with)174 519.6 Q F0(NEWDB)2.5 E F1 -(de\214ned.)2.5 E 57.83(nis NIS)102 535.8 R(lookups.)2.5 E F2(Sendmail)5 -E F1(must be compiled with)2.5 E F0(NIS)2.5 E F1(de\214ned.)2.5 E 41.16 -(nisplus NIS+)102 552 R(lookups.)3.733 E F2(Sendmail)6.233 E F1 1.233 -(must be compiled with)3.733 F F0(NISPLUS)3.733 E F1 3.733 -(de\214ned. The)3.733 F(ar)3.733 E(gu-)-.18 E .495 -(ment is the name of the table to use for lookups, and the)174 564 R F0 -2.995 E F1(and)2.995 E F02.995 E F1 .495(\215ags may be) -2.995 F(used to set the k)174 576 Q .3 -.15(ey a)-.1 H(nd v).15 E -(alue columns respecti)-.25 E -.15(ve)-.25 G(ly).15 E(.)-.65 E 43.39 -(hesiod Hesiod)102 592.2 R(lookups.)2.5 E F2(Sendmail)5 E F1 -(must be compiled with)2.5 E F0(HESIOD)2.5 E F1(de\214ned.)2.5 E 52.28 -(ldap LD)102 608.4 R 1.783(AP X500 directory lookups.)-.4 F F2(Sendmail) -6.783 E F1 1.784(must be compiled with)4.283 F F0(LD)4.284 E(APMAP)-.35 -E F1 2.966(de\214ned. The)174 620.4 R .466 -(map supports most of the standard ar)2.966 F .465 -(guments and most of the com-)-.18 F .3(mand line ar)174 632.4 R .3 -(guments of the)-.18 F F2(ldapsear)2.8 E -.15(ch)-.37 G F1 2.8 -(program. Note)2.95 F .3(that, by def)2.8 F .3(ault, if a single)-.1 F -.629(query matches multiple v)174 644.4 R .629 -(alues, only the \214rst v)-.25 F .628(alue will be returned unless the) --.25 F F03.128 E F1(\(v)174 656.4 Q 1.22 -(alue separator\) map option is set.)-.25 F 1.22(Also, the)6.22 F F0 -3.72 E F1 1.22(map \215ag will treat a multiple)3.72 F -.25(va)174 -668.4 S(lue return as if there were no matches.).25 E 41.17 -(netinfo NeXT)102 684.6 R(NetInfo lookups.)2.5 E F2(Sendmail)5 E F1 -(must be compiled with)2.5 E F0(NETINFO)2.5 E F1(de\214ned.)2.5 E(te)102 -700.8 Q 54.65(xt T)-.15 F -.15(ex)-.7 G 2.918<748c>.15 G .418 -(le lookups.)-2.918 F .418(The format of the te)5.418 F .417 -(xt \214le is de\214ned by the)-.15 F F02.917 E F1(\(k)2.917 E -.717 -.15(ey \214)-.1 H .417(eld num-).15 F(ber\),)174 712.8 Q F0 -2.5 E F1(\(v)2.5 E(alue \214eld number\), and)-.25 E F02.5 E F1 -(\(\214eld delimiter\) options.)2.5 E 0 Cg EP +(SMM:08-83)195.86 E/F1 10/Times-Roman@0 SF 1.102 +(\231Old\232 con\214guration \214les are de\214ned as v)127 96 R 1.102 +(ersion le)-.15 F -.15(ve)-.25 G 3.602(lo).15 G 3.602(ne. V)-3.602 F +1.102(ersion le)-1.11 F -.15(ve)-.25 G 3.602(lt).15 G 1.302 -.1(wo \214) +-3.602 H 1.102(les mak).1 F 3.602(et)-.1 G(he)-3.602 E(follo)102 108 Q +(wing changes:)-.25 E 12.5(\(1\) Host)107 124.2 R .727(name canoni\214c\ +ation \($[ ... $]\) appends a dot if the name is recognized; this gi) +3.226 F -.15(ve)-.25 G 3.227(st).15 G(he)-3.227 E 1.975 +(con\214g \214le a w)133.66 136.2 R 1.974(ay of \214nding out if an)-.1 +F 1.974(ything matched.)-.15 F(\(Actually)6.974 E 4.474(,t)-.65 G 1.974 +(his just initializes the)-4.474 F .738 +(\231host\232 map with the \231\255a.)133.66 148.2 R 5.739<9a8d>-.7 G +.739(ag \212 you can reset it to an)-5.739 F .739 +(ything you prefer by declaring the)-.15 F(map e)133.66 160.2 Q +(xplicitly)-.15 E(.\))-.65 E 12.5(\(2\) Def)107 176.4 R .385 +(ault host name e)-.1 F .385 +(xtension is consistent throughout processing; v)-.15 F .384(ersion le) +-.15 F -.15(ve)-.25 G 2.884(lo).15 G .384(ne con\214gu-)-2.884 F .83 +(rations turned of)133.66 188.4 R 3.33(fd)-.25 G .83(omain e)-3.33 F .83 +(xtension \(that is, adding the local domain name\) during certain)-.15 +F .4(points in processing.)133.66 200.4 R -1.11(Ve)5.4 G .4(rsion le) +1.11 F -.15(ve)-.25 G 2.9(lt).15 G .6 -.1(wo c)-2.9 H .4 +(on\214gurations are e).1 F .4(xpected to include a trailing dot)-.15 F +(to indicate that the name is already canonical.)133.66 212.4 Q 12.5 +(\(3\) Local)107 228.6 R .072 +(names that are not aliases are passed through a ne)2.572 F 2.572(wd) +-.25 G .072(istinguished ruleset \214v)-2.572 F .072(e; this can)-.15 F +.14(be used to append a local relay)133.66 240.6 R 5.139(.T)-.65 G .139 +(his beha)-5.139 F .139(vior can be pre)-.2 F -.15(ve)-.25 G .139 +(nted by resolving the local name).15 F .993(with an initial `@'.)133.66 +252.6 R .993(That is, something that resolv)5.993 F .993 +(es to a local mailer and a user name of)-.15 F .602 +(\231vikki\232 will be passed through ruleset \214v)133.66 264.6 R .601 +(e, b)-.15 F .601(ut a user name of \231@vikki\232 will ha)-.2 F .901 +-.15(ve t)-.2 H .601(he `@').15 F .919 +(stripped, will not be passed through ruleset \214v)133.66 276.6 R .919 +(e, b)-.15 F .92(ut will otherwise be treated the same as)-.2 F .63 +(the prior e)133.66 288.6 R 3.13(xample. The)-.15 F -.15(ex)3.13 G .629 +(pectation is that this might be used to implement a polic).15 F 3.129 +(yw)-.15 G(here)-3.129 E .734(mail sent to \231vikki\232 w)133.66 300.6 +R .734(as handled by a central hub, b)-.1 F .734 +(ut mail sent to \231vikki@localhost\232 w)-.2 F(as)-.1 E(deli)133.66 +312.6 Q -.15(ve)-.25 G(red directly).15 E(.)-.65 E -1.11(Ve)127 328.8 S +.273(rsion le)1.11 F -.15(ve)-.25 G 2.773(lt).15 G .272 +(hree \214les allo)-2.773 F 2.772(w#i)-.25 G .272 +(nitiated comments on all lines.)-2.772 F .272 +(Exceptions are backslash es-)5.272 F(caped # marks and the $# syntax.) +102 340.8 Q -1.11(Ve)127 357 S 1.207(rsion le)1.11 F -.15(ve)-.25 G +3.707(lf).15 G 1.207(our con\214gurations are completely equi)-3.707 F +-.25(va)-.25 G 1.208(lent to le).25 F -.15(ve)-.25 G 3.708(lt).15 G +1.208(hree for historical rea-)-3.708 F(sons.)102 369 Q -1.11(Ve)127 +385.2 S 1.234(rsion le)1.11 F -.15(ve)-.25 G 3.734<6c8c>.15 G 1.534 -.15 +(ve c)-3.734 H 1.234(on\214guration \214les change the def).15 F 1.234 +(ault de\214nition of)-.1 F F0($w)3.734 E F1 1.234 +(to be just the \214rst)3.734 F(component of the hostname.)102 397.2 Q +-1.11(Ve)127 413.4 S 1.588(rsion le)1.11 F -.15(ve)-.25 G 4.088(ls).15 G +1.588(ix con\214guration \214les change man)-4.088 F 4.088(yo)-.15 G +4.089(ft)-4.088 G 1.589(he local processing options \(such as)-4.089 F +.481(aliasing and matching the be)102 425.4 R .481(ginning of the addre\ +ss for `|' characters\) to be mailer \215ags; this allo)-.15 F(ws)-.25 E +1.344(\214ne-grained control o)102 437.4 R -.15(ve)-.15 G 3.844(rt).15 G +1.344(he special local processing.)-3.844 F(Le)6.345 E -.15(ve)-.25 G +3.845(ls).15 G 1.345(ix con\214guration \214les may also use)-3.845 F +.044(long option names.)102 449.4 R(The)5.044 E F0(ColonOkInAddr)2.544 E +F1 .044(option \(to allo)2.544 F 2.544(wc)-.25 G .043 +(olons in the local-part of addresses\) de-)-2.544 F -.1(fa)102 461.4 S +(ults).1 E F0(on)3.046 E F1 .547(for lo)3.047 F .547(wer numbered con\ +\214guration \214les; the con\214guration \214le requires some addition\ +al in-)-.25 F +(telligence to properly handle the RFC 822 group construct.)102 473.4 Q +-1.11(Ve)127 489.6 S .739(rsion le)1.11 F -.15(ve)-.25 G 3.239(ls).15 G +-2.15 -.25(ev e)-3.239 H 3.239(nc).25 G .739 +(on\214guration \214les used ne)-3.239 F 3.239(wo)-.25 G .738 +(ption names to replace old macros \()-3.239 F F0($e)A F1(be-)3.238 E +(came)102 501.6 Q F0(SmtpGr)3.325 E(eetingMessage)-.18 E F1(,)A F0($l) +3.325 E F1(became)3.325 E F0(UnixFr)3.325 E(omLine)-.18 E F1 3.326(,a)C +(nd)-3.326 E F0($o)3.326 E F1(became)3.326 E F0(OperatorChars)3.326 E F1 +5.826(.A)C(lso,)-5.826 E 1.497(prior to v)102 513.6 R 1.497(ersion se) +-.15 F -.15(ve)-.25 G 1.497(n, the).15 F F0(F=q)3.997 E F1 1.497 +(\215ag \(use 250 instead of 252 return v)3.997 F 1.497(alue for)-.25 F +/F2 9/Times-Roman@0 SF 1.497(SMTP VRFY)3.997 F F1(com-)3.997 E +(mands\) w)102 525.6 Q(as assumed.)-.1 E -1.11(Ve)127 541.8 S(rsion le) +1.11 E -.15(ve)-.25 G 2.5(le).15 G(ight con\214guration \214les allo) +-2.5 E(w)-.25 E F0($#)2.5 E F1(on the left hand side of ruleset lines.) +2.5 E -1.11(Ve)127 558 S .422(rsion le)1.11 F -.15(ve)-.25 G 2.922(ln) +.15 G .423(ine con\214guration \214les allo)-2.922 F 2.923(wp)-.25 G +.423(arentheses in rulesets, i.e. the)-2.923 F 2.923(ya)-.15 G .423 +(re not treated as)-2.923 F(comments and hence remo)102 570 Q -.15(ve) +-.15 G(d.).15 E -1.11(Ve)127 586.2 S(rsion le)1.11 E -.15(ve)-.25 G 2.5 +(lt).15 G(en con\214guration \214les allo)-2.5 E 2.5(wq)-.25 G +(ueue group de\214nitions.)-2.5 E(The)127 602.4 Q F0(V)2.678 E F1 .178 +(line may ha)2.678 F .478 -.15(ve a)-.2 H 2.677(no).15 G(ptional)-2.677 +E F0(/)2.677 E/F3 10/Times-Italic@0 SF(vendor)A F1 .177 +(to indicate that this con\214guration \214le uses modi\214ca-)2.677 F +.866(tions speci\214c to a particular v)102 616.4 R(endor)-.15 E/F4 7 +/Times-Roman@0 SF(22)-4 I F1 5.866(.Y)4 K .866(ou may use \231/Berk) +-6.966 F(ele)-.1 E .865(y\232 to emphasize that this con\214gura-)-.15 F +(tion \214le uses the Berk)102 628.4 Q(ele)-.1 E 2.5(yd)-.15 G +(ialect of)-2.5 E F3(sendmail)2.5 E F1(.)A .32 LW 76 669.2 72 669.2 DL +80 669.2 76 669.2 DL 84 669.2 80 669.2 DL 88 669.2 84 669.2 DL 92 669.2 +88 669.2 DL 96 669.2 92 669.2 DL 100 669.2 96 669.2 DL 104 669.2 100 +669.2 DL 108 669.2 104 669.2 DL 112 669.2 108 669.2 DL 116 669.2 112 +669.2 DL 120 669.2 116 669.2 DL 124 669.2 120 669.2 DL 128 669.2 124 +669.2 DL 132 669.2 128 669.2 DL 136 669.2 132 669.2 DL 140 669.2 136 +669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2 DL 152 669.2 148 +669.2 DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 669.2 160 +669.2 DL 168 669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 669.2 172 +669.2 DL 180 669.2 176 669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 +669.2 DL 192 669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 669.2 196 +669.2 DL 204 669.2 200 669.2 DL 208 669.2 204 669.2 DL 212 669.2 208 +669.2 DL 216 669.2 212 669.2 DL/F5 5/Times-Roman@0 SF(22)93.6 679.6 Q/F6 +8/Times-Roman@0 SF .214(And of course, v)3.2 J .214 +(endors are encouraged to add themselv)-.12 F .214 +(es to the list of recognized v)-.12 F .214 +(endors by editing the routine)-.12 F/F7 8/Times-Italic@0 SF(setvendor) +2.214 E F6(in)2.214 E F7(conf)72 692.4 Q(.c)-.12 E F6 4(.P)C +(lease send e-mail to sendmail@Sendmail.ORG to re)-4 E(gister your v) +-.12 E(endor dialect.)-.12 E 0 Cg EP %%Page: 84 80 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-84 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 59.5 -(ph PH)102 96 R(query map.)2.5 E(Contrib)5 E -(uted and supported by Mark Roth, roth@uiuc.edu.)-.2 E 55.61(nsd nsd)102 -112.2 R 1.599(map for IRIX 6.5 and later)4.099 F 6.599(.C)-.55 G(ontrib) --6.599 E 1.599(uted and supported by Bob Mende of)-.2 F -(SGI, mende@sgi.com.)174 124.2 Q 53.39(stab Internal)102 140.4 R -(symbol table lookups.)2.5 E(Used internally for aliasing.)5 E 38.38 -(implicit Sequentially)102 156.6 R .132(try a list of a)2.632 F -.25(va) --.2 G .131(ilable map types:).25 F/F2 10/Times-Italic@0 SF(hash)2.631 E -F1(,)A F2(dbm)2.631 E F1 2.631(,a)C(nd)-2.631 E F2(cdb)2.631 E F1 5.131 -(.I)C 2.631(ti)-5.131 G 2.631(st)-2.631 G .131(he def)-2.631 F(ault)-.1 -E .206(for alias \214les if no class is speci\214ed.)174 168.6 R .207 -(If is no matching map type is found, the te)5.206 F(xt)-.15 E -.15(ve) -174 180.6 S(rsion is used for the alias \214le, b).15 E(ut other maps f) --.2 E(ail to open.)-.1 E 52.84(user Looks)102 196.8 R .477 -(up users using)2.977 F F2 -.1(ge)2.977 G(tpwnam).1 E F1 2.977 -(\(3\). The)B F02.977 E F1 .476 -(\215ag can be used to specify the name)2.976 F .142(of the \214eld to \ -return \(although this is normally used only to check the e)174 208.8 R -.142(xistence of)-.15 F 2.5(au)174 220.8 S(ser\).)-2.5 E 52.83 -(host Canoni\214es)102 237 R .2(host domain names.)2.7 F(Gi)5.2 E -.15 -(ve)-.25 G 2.7(nah).15 G .2(ost name it calls the name serv)-2.7 F .2 -(er to \214nd)-.15 F(the canonical name for that host.)174 249 Q 40.61 -(bestmx Returns)102 265.2 R 2.478(the best MX record for a host name gi) -4.978 F -.15(ve)-.25 G 4.979(na).15 G 4.979(st)-4.979 G 2.479(he k) --4.979 F -.15(ey)-.1 G 7.479(.T)-.5 G 2.479(he current)-7.479 F .722 -(machine is al)174 277.2 R -.1(wa)-.1 G .721 -(ys preferred \212 that is, if the current machine is one of the hosts) -.1 F .218(listed as a lo)174 289.2 R .219 -(west-preference MX record, then it will be guaranteed to be returned.) --.25 F .961(This can be used to \214nd out if this machine is the tar) -174 301.2 R .961(get for an MX record, and)-.18 F .592 -(mail can be accepted on that basis.)174 313.2 R .592(If the)5.592 F F0 -3.092 E F1 .592(option is gi)3.092 F -.15(ve)-.25 G .592 -(n, then all MX names).15 F .361(are returned, separated by the gi)174 -325.2 R -.15(ve)-.25 G 2.861(nd).15 G(elimiter)-2.861 E 5.361(.N)-.55 G -.361(ote: the return v)-5.361 F .36(alue is determin-)-.25 F 1.698 -(istic, i.e., e)174 337.2 R -.15(ve)-.25 G 4.198(ni).15 G 4.198(fm) --4.198 G 1.698(ultiple MX records ha)-4.198 F 1.999 -.15(ve t)-.2 H -1.699(he same preference, the).15 F 4.199(yw)-.15 G 1.699(ill be)-4.199 -F(returned in the same order)174 349.2 Q(.)-.55 E 55.61(dns This)102 -365.4 R 2.248 -(map requires the option -R to specify the DNS resource record type to) -4.748 F 3.479(lookup. The)174 377.4 R(follo)3.479 E .979 -(wing types are supported: A, AAAA, AFSDB, CN)-.25 F .979(AME, MX,)-.35 -F .107(NS, PTR, SR)174 389.4 R 2.687 -1.29(V, a)-.8 H .107(nd TXT)1.29 F -5.107(.A)-.74 G .107(map lookup will return only one record unless the) --2.5 F F02.606 E F1(\(v)174 401.4 Q .11 -(alue separator\) option is set.)-.25 F .111 -(Hence for some types, e.g., MX records, the return)5.111 F -.25(va)174 -413.4 S 1.052(lue might be a random element of the results due to rando\ -mizing in the DNS).25 F(resolv)174 425.4 Q(er)-.15 E 2.5(,i)-.4 G 2.5 -(fo)-2.5 G(nly one element is returned.)-2.5 E 52.29(arpa Returns)102 -441.6 R .723(the `)3.223 F(`re)-.74 E -.15(ve)-.25 G(rse').15 E 3.223 -('f)-.74 G .723(or the gi)-3.223 F -.15(ve)-.25 G 3.223(nI).15 G 3.224 -(P\()-3.223 G .724(IPv4 or IPv6\) address, i.e., the string for)-3.224 F -.431(the PTR lookup, b)174 453.6 R .431(ut without trailing)-.2 F F0 -(ip6.ar)2.931 E(pa)-.1 E F1(or)2.931 E F0(in-addr)2.931 E(.ar)-1 E(pa) --.1 E F1 5.431(.F)C .431(or e)-5.581 F .43(xample, the)-.15 F(follo)174 -465.6 Q(wing con\214guration lines:)-.25 E(Karpa arpa)214 481.8 Q(SArpa) -214 493.8 Q 88.19(R$+ $:)214 505.8 R($\(arpa $1 $\))2.5 E -.1(wo)174 522 -S(rk lik).1 E 2.5(et)-.1 G(his in test mode:)-2.5 E(sendmail -bt)214 -538.2 Q(ADDRESS TEST MODE \(ruleset 3 NO)214 550.2 Q 2.5(Ta)-.4 G -(utomatically in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G(d\)).1 E -(Enter
)214 562.2 Q 2.5(>A)214 574.2 S -(rpa IPv6:1:2:dead:beef:9876:0:0:1)-2.5 E 35(Arpa input:)214 586.2 R -(IPv6 : 1 : 2 : dead : beef : 9876 : 0 : 0 : 1)2.5 E 30(Arpa returns:) -214 598.2 R 2.5 -(1.0.0.0.0.0.0.0.0.0.0.0.6.7.8.9.f.e.e.b.d.a.e.d.2.0.0.0.1.0.0.0)2.5 G -2.5(>A)214 610.2 S(rpa 1.2.3.4)-2.5 E 35(Arpa input:)214 622.2 R 2.5 -(1.2.3.4)2.5 G 30(Arpa returns:)214 634.2 R 2.5(4.3.2.1)2.5 G 32.85 -(sequence The)102 654.6 R(ar)3.349 E .849(guments on the `K' line are a\ - list of maps; the resulting map searches the)-.18 F(ar)174 666.6 Q .439 -(gument maps in order until it \214nds a match for the indicated k)-.18 -F -.15(ey)-.1 G 5.438(.F)-.5 G .438(or e)-5.588 F(xample,)-.15 E -(if the k)174 678.6 Q .3 -.15(ey d)-.1 H(e\214nition is:).15 E 0 Cg EP +(Installation and Operation Guide)2.5 E 2.5(5.9. K)87 96 R 2.5<8a4b>2.5 +G(ey File Declaration)-2.75 E/F1 10/Times-Roman@0 SF +(Special maps can be de\214ned using the line:)127 112.2 Q +(Kmapname mapclass ar)142 128.4 Q(guments)-.18 E(The)102 144.6 Q/F2 10 +/Times-Italic@0 SF(mapname)2.75 E F1 .251 +(is the handle by which this map is referenced in the re)2.75 F .251 +(writing rules.)-.25 F(The)5.251 E F2(mapclass)2.751 E F1(is)2.751 E .88 +(the name of a type of map; these are compiled in to)102 156.6 R F2 +(sendmail)3.379 E F1 5.879(.T)C(he)-5.879 E F2(ar)3.379 E(guments)-.37 E +F1 .879(are interpreted de-)3.379 F 1.42 +(pending on the class; typically)102 168.6 R 3.92(,t)-.65 G 1.42(here w) +-3.92 F 1.42(ould be a single ar)-.1 F 1.42 +(gument naming the \214le containing the)-.18 F(map.)102 180.6 Q +(Maps are referenced using the syntax:)127 196.8 Q($\()142 213 Q F2 +(map k)2.5 E -.3(ey)-.1 G F1($@)2.8 E F2(ar)2.5 E(guments)-.37 E F1($:) +2.5 E F2(default)2.5 E F1($\))2.5 E .641(where either or both of the)102 +229.2 R F2(ar)3.141 E(guments)-.37 E F1(or)3.141 E F2(default)3.141 E F1 +.64(portion may be omitted.)3.141 F(The)5.64 E F2 .64($@ ar)3.14 F +(guments)-.37 E F1(may)3.14 E 1.276(appear more than once.)102 241.2 R +1.276(The indicated)6.276 F F2 -.1(ke)3.776 G(y)-.2 E F1(and)3.776 E F2 +(ar)3.776 E(guments)-.37 E F1 1.277 +(are passed to the appropriate mapping)3.777 F 3.253(function. If)102 +253.2 R .753(it returns a v)3.253 F .753(alue, it replaces the input.) +-.25 F .753(If it does not return a v)5.753 F .753(alue and the)-.25 F +F2(default)3.253 E F1(is)3.253 E(speci\214ed, the)102 265.2 Q F2 +(default)2.5 E F1(replaces the input.)2.5 E +(Otherwise, the input is unchanged.)5 E(The)127 281.4 Q F2(ar)4.063 E +(guments)-.37 E F1 1.563(are passed to the map for arbitrary use.)4.063 +F 1.564(Most map classes can interpolate)6.564 F .883(these ar)102 293.4 +R .883(guments into their v)-.18 F .883(alues using the syntax \231%) +-.25 F F2(n)A F1 3.382<9a28>C(where)-3.382 E F2(n)3.382 E F1 .882 +(is a digit\) to indicate the corre-)3.382 F(sponding)102 305.4 Q F2(ar) +2.5 E(gument)-.37 E F1 5(.A)C -.18(rg)-5 G +(ument \231%0\232 indicates the database k).18 E -.15(ey)-.1 G 5(.F)-.5 +G(or e)-5.15 E(xample, the rule)-.15 E(R$\255 ! $+)142 321.6 Q +($: $\(uucp $1 $@ $2 $: $2 @ $1 . UUCP $\))71.72 E 1.269(Looks up the U\ +UCP name in a \(user de\214ned\) UUCP map; if not found it turns it int\ +o \231.UUCP\232)102 337.8 R 2.5(form. The)102 349.8 R +(database might contain records lik)2.5 E(e:)-.1 E(decv)142 366 Q 77.43 +(ax %1@%0.DEC.COM)-.25 F 72.19(research %1@%0.A)142 378 R(TT)-1.11 E +(.COM)-.74 E(Note that)102 394.2 Q F2(default)2.5 E F1(clauses ne)2.5 E +-.15(ve)-.25 G 2.5(rd).15 G 2.5(ot)-2.5 G(his mapping.)-2.5 E .735 +(The b)127 410.4 R .735(uilt-in map with both name and class \231host\ +\232 is the host name canonicalization lookup.)-.2 F(Thus, the syntax:) +102 422.4 Q($\(host)142 438.6 Q F2(hostname)2.5 E F1($\))A(is equi)102 +454.8 Q -.25(va)-.25 G(lent to:).25 E($[)142 471 Q F2(hostname)A F1($])A +(There are man)127 491.4 Q 2.5(yd)-.15 G(e\214ned classes.)-2.5 E 55.06 +(cdb Database)102 507.6 R .087(lookups using the cdb\(3\) library)2.587 +F(.)-.65 E F2(Sendmail)5.087 E F1 .088(must be compiled with)2.587 F F0 +(CDB)2.588 E F1(de\214ned.)174 519.6 Q 51.72(dbm Database)102 535.8 R +1.623(lookups using the ndbm\(3\) library)4.123 F(.)-.65 E F2(Sendmail) +6.623 E F1 1.623(must be compiled with)4.123 F F0(NDBM)174 547.8 Q F1 +(de\214ned.)2.5 E 49.51(btree Database)102 564 R .677 +(lookups using the btree interf)3.177 F .677(ace to the Berk)-.1 F(ele) +-.1 E 3.178(yD)-.15 G 3.178(Bl)-3.178 G(ibrary)-3.178 E(.)-.65 E F2 +(Sendmail)5.678 E F1(must be compiled with)174 576 Q F0(NEWDB)2.5 E F1 +(de\214ned.)2.5 E 51.17(hash Database)102 592.2 R .828 +(lookups using the hash interf)3.329 F .828(ace to the Berk)-.1 F(ele) +-.1 E 3.328(yD)-.15 G 3.328(Bl)-3.328 G(ibrary)-3.328 E(.)-.65 E F2 +(Sendmail)5.828 E F1(must be compiled with)174 604.2 Q F0(NEWDB)2.5 E F1 +(de\214ned.)2.5 E 57.83(nis NIS)102 620.4 R(lookups.)2.5 E F2(Sendmail)5 +E F1(must be compiled with)2.5 E F0(NIS)2.5 E F1(de\214ned.)2.5 E 41.16 +(nisplus NIS+)102 636.6 R(lookups.)3.733 E F2(Sendmail)6.233 E F1 1.233 +(must be compiled with)3.733 F F0(NISPLUS)3.733 E F1 3.733 +(de\214ned. The)3.733 F(ar)3.733 E(gu-)-.18 E .495 +(ment is the name of the table to use for lookups, and the)174 648.6 R +F02.995 E F1(and)2.995 E F02.995 E F1 .495(\215ags may be) +2.995 F(used to set the k)174 660.6 Q .3 -.15(ey a)-.1 H(nd v).15 E +(alue columns respecti)-.25 E -.15(ve)-.25 G(ly).15 E(.)-.65 E 43.39 +(hesiod Hesiod)102 676.8 R(lookups.)2.5 E F2(Sendmail)5 E F1 +(must be compiled with)2.5 E F0(HESIOD)2.5 E F1(de\214ned.)2.5 E 52.28 +(ldap LD)102 693 R .078(AP X500 directory lookups.)-.4 F F2(Sendmail) +5.078 E F1 .078(must be compiled with)2.578 F F0(LD)2.578 E(APMAP)-.35 E +F1(de-)2.578 E 3.692(\214ned. The)174 705 R 1.192 +(map supports most of the standard ar)3.692 F 1.191 +(guments and most of the com-)-.18 F .3(mand line ar)174 717 R .3 +(guments of the)-.18 F F2(ldapsear)2.8 E -.15(ch)-.37 G F1 2.8 +(program. Note)2.95 F .3(that, by def)2.8 F .3(ault, if a single)-.1 F 0 +Cg EP %%Page: 85 81 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-85)195.86 E/F1 10/Times-Roman@0 SF(Kmap1 ...)214 96 Q(Kmap2 ...) -214 108 Q(Kseqmap sequence map1 map2)214 120 Q .968(then a lookup ag)174 -136.2 R .968(ainst \231seqmap\232 \214rst does a lookup in map1.)-.05 F -.968(If that is found, it)5.968 F(returns immediately)174 148.2 Q 5(.O) --.65 G(therwise, the same k)-5 E .3 -.15(ey i)-.1 H 2.5(su).15 G -(sed for map2.)-2.5 E 43.94(syslog the)102 164.4 R -.1(ke)2.5 G 2.5(yi) --.05 G 2.5(sl)-2.5 G(ogged via)-2.5 E/F2 10/Times-Italic@0 SF(syslo)2.5 -E(gd)-.1 E F1 2.5(\(8\). The)1.666 F(lookup returns the empty string.) -2.5 E 43.39(switch Much)102 180.6 R(lik)2.801 E 2.801(et)-.1 G .301 -(he \231sequence\232 map e)-2.801 F .301 -(xcept that the order of maps is determined by the)-.15 F .391 -(service switch.)174 192.6 R .391(The ar)5.391 F .391 -(gument is the name of the service to be look)-.18 F .392(ed up; the v) --.1 F(al-)-.25 E 1.492 -(ues from the service switch are appended to the map name to create ne) -174 204.6 R 3.992(wm)-.25 G(ap)-3.992 E 2.5(names. F)174 216.6 R(or e) --.15 E(xample, consider the k)-.15 E .3 -.15(ey d)-.1 H(e\214nition:).15 -E(Kali switch aliases)214 232.8 Q -(together with the service switch entry:)174 249 Q 78.84(aliases nis)214 -265.2 R(\214les)2.5 E 1.633(This causes a query ag)174 281.4 R 1.633 -(ainst the map \231ali\232 to search maps named \231ali.nis\232 and)-.05 -F(\231ali.\214les\232 in that order)174 293.4 Q(.)-.55 E 37.84 -(dequote Strip)102 309.6 R .961(double quotes \("\) from a name.)3.461 F -.96(It does not strip backslashes, and will not)5.961 F .172 -(strip quotes if the resulting string w)174 321.6 R .173 -(ould contain unscannable syntax \(that is, basic)-.1 F .386(errors lik) -174 333.6 R 2.886(eu)-.1 G .386(nbalanced angle brack)-2.886 F .386 -(ets; more sophisticated errors such as unkno)-.1 F(wn)-.25 E .251 -(hosts are not check)174 345.6 R 2.751(ed\). The)-.1 F .251 -(intent is for use when trying to accept mail from sys-)2.751 F -(tems such as DECnet that routinely quote odd syntax such as)174 357.6 Q -("49ers::ubell")214 373.8 Q 2.5(At)174 390 S -(ypical usage is probably something lik)-2.5 E(e:)-.1 E -(Kdequote dequote)214 406.2 Q(...)214 430.2 Q 88.19(R$\255 $:)214 454.2 -R($\(dequote $1 $\))2.5 E(R$\255 $+)214 466.2 Q($: $>3 $1 $2)77.55 E -(Care must be tak)174 482.4 Q(en to pre)-.1 E -.15(ve)-.25 G(nt une).15 -E(xpected results; for e)-.15 E(xample,)-.15 E -("|someprogram < input > output")214 498.6 Q 1.31(will ha)174 514.8 R -1.61 -.15(ve q)-.2 H 1.31(uotes stripped, b).15 F 1.31 -(ut the result is probably not what you had in mind.)-.2 F -.15(Fo)174 -526.8 S(rtunately these cases are rare.).15 E(re)102 543 Q(ge)-.15 E -50.09(xT)-.15 G .488(he map de\214nition on the)-50.09 F F0(K)2.988 E F1 -.489(line contains a re)2.988 F .489(gular e)-.15 F 2.989(xpression. An) --.15 F 2.989(yk)-.15 G .789 -.15(ey i)-3.089 H .489(nput is).15 F 1.454 -(compared to that e)174 555 R 1.454(xpression using the POSIX re)-.15 F -1.454(gular e)-.15 F 1.454(xpressions routines re)-.15 F(g-)-.15 E .29 -(comp\(\), re)174 567 R .291(gerr\(\), and re)-.15 F(ge)-.15 E -.15(xe) --.15 G 2.791(c\(\). Refer).15 F .291 -(to the documentation for those routines for)2.791 F .356 -(more information about the re)174 579 R .356(gular e)-.15 F .355 -(xpression matching.)-.15 F .355(No re)5.355 F .355(writing of the k) --.25 F -.15(ey)-.1 G .074(is done if the)174 591 R F02.574 E F1 -.074(\215ag is used.)2.574 F -.4(Wi)5.074 G .074(thout it, the k).4 F -.375 -.15(ey i)-.1 H 2.575(sd).15 G .075(iscarded or if)-2.575 F F0 -2.575 E F1 .075(if used, it is)2.575 F .905 -(substituted by the substring matches, delimited by)174 603 R F0($|) -3.405 E F1 .905(or the string speci\214ed with)3.405 F(the the)174 615 Q -F02.5 E F1 2.5(option. The)2.5 F(options a)2.5 E -.25(va)-.2 G -(ilable for the map are).25 E 0 Cg EP +(SMM:08-85)195.86 E/F1 10/Times-Roman@0 SF .629 +(query matches multiple v)174 96 R .629(alues, only the \214rst v)-.25 F +.628(alue will be returned unless the)-.25 F F03.128 E F1(\(v)174 +108 Q 1.22(alue separator\) map option is set.)-.25 F 1.22(Also, the) +6.22 F F03.72 E F1 1.22(map \215ag will treat a multiple)3.72 F +-.25(va)174 120 S(lue return as if there were no matches.).25 E 41.17 +(netinfo NeXT)102 136.2 R(NetInfo lookups.)2.5 E/F2 10/Times-Italic@0 SF +(Sendmail)5 E F1(must be compiled with)2.5 E F0(NETINFO)2.5 E F1 +(de\214ned.)2.5 E(te)102 152.4 Q 54.65(xt T)-.15 F -.15(ex)-.7 G 2.918 +<748c>.15 G .418(le lookups.)-2.918 F .418(The format of the te)5.418 F +.417(xt \214le is de\214ned by the)-.15 F F02.917 E F1(\(k)2.917 E +.717 -.15(ey \214)-.1 H .417(eld num-).15 F(ber\),)174 164.4 Q F0 +2.5 E F1(\(v)2.5 E(alue \214eld number\), and)-.25 E F02.5 E F1 +(\(\214eld delimiter\) options.)2.5 E 59.5(ph PH)102 180.6 R(query map.) +2.5 E(Contrib)5 E(uted and supported by Mark Roth, roth@uiuc.edu.)-.2 E +55.61(nsd nsd)102 196.8 R 1.599(map for IRIX 6.5 and later)4.099 F 6.599 +(.C)-.55 G(ontrib)-6.599 E 1.599(uted and supported by Bob Mende of)-.2 +F(SGI, mende@sgi.com.)174 208.8 Q 53.39(stab Internal)102 225 R +(symbol table lookups.)2.5 E(Used internally for aliasing.)5 E 38.38 +(implicit Sequentially)102 241.2 R .132(try a list of a)2.632 F -.25(va) +-.2 G .131(ilable map types:).25 F F2(hash)2.631 E F1(,)A F2(dbm)2.631 E +F1 2.631(,a)C(nd)-2.631 E F2(cdb)2.631 E F1 5.131(.I)C 2.631(ti)-5.131 G +2.631(st)-2.631 G .131(he def)-2.631 F(ault)-.1 E .206 +(for alias \214les if no class is speci\214ed.)174 253.2 R .207 +(If is no matching map type is found, the te)5.206 F(xt)-.15 E -.15(ve) +174 265.2 S(rsion is used for the alias \214le, b).15 E(ut other maps f) +-.2 E(ail to open.)-.1 E 52.84(user Looks)102 281.4 R .477 +(up users using)2.977 F F2 -.1(ge)2.977 G(tpwnam).1 E F1 2.977 +(\(3\). The)B F02.977 E F1 .476 +(\215ag can be used to specify the name)2.976 F .142(of the \214eld to \ +return \(although this is normally used only to check the e)174 293.4 R +.142(xistence of)-.15 F 2.5(au)174 305.4 S(ser\).)-2.5 E 52.83 +(host Canoni\214es)102 321.6 R .2(host domain names.)2.7 F(Gi)5.2 E -.15 +(ve)-.25 G 2.7(nah).15 G .2(ost name it calls the name serv)-2.7 F .2 +(er to \214nd)-.15 F(the canonical name for that host.)174 333.6 Q 40.61 +(bestmx Returns)102 349.8 R 1.11(the best MX record for a host name gi) +3.61 F -.15(ve)-.25 G 3.61(na).15 G 3.61(st)-3.61 G 1.11(he k)-3.61 F +-.15(ey)-.1 G 6.11(.T)-.5 G 1.11(he current ma-)-6.11 F 1.536 +(chine is al)174 361.8 R -.1(wa)-.1 G 1.536 +(ys preferred \212 that is, if the current machine is one of the hosts) +.1 F .218(listed as a lo)174 373.8 R .219 +(west-preference MX record, then it will be guaranteed to be returned.) +-.25 F .961(This can be used to \214nd out if this machine is the tar) +174 385.8 R .961(get for an MX record, and)-.18 F .592 +(mail can be accepted on that basis.)174 397.8 R .592(If the)5.592 F F0 +3.092 E F1 .592(option is gi)3.092 F -.15(ve)-.25 G .592 +(n, then all MX names).15 F .361(are returned, separated by the gi)174 +409.8 R -.15(ve)-.25 G 2.861(nd).15 G(elimiter)-2.861 E 5.361(.N)-.55 G +.361(ote: the return v)-5.361 F .36(alue is determin-)-.25 F .605 +(istic, i.e., e)174 421.8 R -.15(ve)-.25 G 3.105(ni).15 G 3.105(fm) +-3.105 G .606(ultiple MX records ha)-3.105 F .906 -.15(ve t)-.2 H .606 +(he same preference, the).15 F 3.106(yw)-.15 G .606(ill be re-)-3.106 F +(turned in the same order)174 433.8 Q(.)-.55 E 55.61(dns This)102 450 R +2.248 +(map requires the option -R to specify the DNS resource record type to) +4.748 F 3.479(lookup. The)174 462 R(follo)3.479 E .979 +(wing types are supported: A, AAAA, AFSDB, CN)-.25 F .979(AME, MX,)-.35 +F .107(NS, PTR, SR)174 474 R 2.687 -1.29(V, a)-.8 H .107(nd TXT)1.29 F +5.107(.A)-.74 G .107(map lookup will return only one record unless the) +-2.5 F F02.606 E F1(\(v)174 486 Q .11 +(alue separator\) option is set.)-.25 F .111 +(Hence for some types, e.g., MX records, the return)5.111 F -.25(va)174 +498 S .075(lue might be a random element of the results due to randomiz\ +ing in the DNS re-).25 F(solv)174 510 Q(er)-.15 E 2.5(,i)-.4 G 2.5(fo) +-2.5 G(nly one element is returned.)-2.5 E 52.29(arpa Returns)102 526.2 +R .723(the `)3.223 F(`re)-.74 E -.15(ve)-.25 G(rse').15 E 3.223('f)-.74 +G .723(or the gi)-3.223 F -.15(ve)-.25 G 3.223(nI).15 G 3.224(P\()-3.223 +G .724(IPv4 or IPv6\) address, i.e., the string for)-3.224 F .431 +(the PTR lookup, b)174 538.2 R .431(ut without trailing)-.2 F F0(ip6.ar) +2.931 E(pa)-.1 E F1(or)2.931 E F0(in-addr)2.931 E(.ar)-1 E(pa)-.1 E F1 +5.431(.F)C .431(or e)-5.581 F .43(xample, the)-.15 F(follo)174 550.2 Q +(wing con\214guration lines:)-.25 E(Karpa arpa)214 566.4 Q(SArpa)214 +578.4 Q 88.19(R$+ $:)214 590.4 R($\(arpa $1 $\))2.5 E -.1(wo)174 606.6 S +(rk lik).1 E 2.5(et)-.1 G(his in test mode:)-2.5 E 0 Cg EP %%Page: 86 82 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-86 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 9.17 -(-n not)214 96 R 10.84(-f case)214 108 R(sensiti)2.5 E -.15(ve)-.25 G -9.17(-b basic)214 120 R(re)2.5 E(gular e)-.15 E(xpressions \(def)-.15 E -(ault is e)-.1 E(xtended\))-.15 E 10.28(-s substring)214 132 R(match)2.5 -E 9.17(-d set)214 144 R(the delimiter string used for -s)2.5 E 9.73 -(-a append)214 156 R(string to k)2.5 E -.15(ey)-.1 G 6.39(-m match)214 -168 R(only)2.5 E 2.5(,d)-.65 G 2.5(on)-2.5 G(ot replace/discard v)-2.5 E -(alue)-.25 E 6.95(-D perform)214 180 R(no lookup in deferred deli)2.5 E --.15(ve)-.25 G(ry mode.).15 E(The)174 196.2 Q F03.208 E F1 .709(o\ -ption can include an optional parameter which can be used to select the) -3.208 F(substrings in the result of the lookup.)174 208.2 Q -.15(Fo)5 G -2.5(re).15 G(xample,)-2.65 E(-s1,3,4)214 224.4 Q .272 -(The delimiter string speci\214ed via the)174 240.6 R F02.772 E F1 -.271(option is the sequence of characters after)2.772 F F0(d)174 252.6 Q -F1 .412(ending at the \214rst space.)2.912 F .412(Hence it isn')5.412 F -2.912(tp)-.18 G .412(ossible to specify a space as delimiter)-2.912 F(,) --.4 E .641(so if the option is immediately follo)174 264.6 R .641 -(wed by a space the delimiter string is empty)-.25 F(,)-.65 E -(which means the substrings are joined.)174 276.6 Q .696 -(Notes: to match a)174 300.6 R F0($)3.197 E F1 .697 -(in a string, \\$$ must be used.)3.197 F .697 -(If the pattern contains spaces,)5.697 F(the)174 312.6 Q 4.425(ym)-.15 G -1.924(ust be replaced with the blank substitution character)-4.425 F -4.424(,u)-.4 G 1.924(nless it is space)-4.424 F(itself.)174 324.6 Q -35.62(program The)102 340.8 R(ar)2.544 E .044(guments on the)-.18 F F0 -(K)2.544 E F1 .045(line are the pathname to a program and an)2.544 F -2.545(yi)-.15 G .045(nitial param-)-2.545 F .176(eters to be passed.)174 -352.8 R .176(When the map is called, the k)5.176 F .475 -.15(ey i)-.1 H -2.675(sa).15 G .175(dded to the initial parame-)-2.675 F .112 -(ters and the program is in)174 364.8 R -.2(vo)-.4 G -.1(ke).2 G 2.612 -(da).1 G 2.612(st)-2.612 G .112(he def)-2.612 F .112 -(ault user/group id.)-.1 F .112(The \214rst line of stan-)5.112 F .508 -(dard output is returned as the v)174 376.8 R .508(alue of the lookup.) --.25 F .508(This has man)5.508 F 3.007(yp)-.15 G .507(otential secu-) --3.007 F 1.277(rity problems, and has terrible performance; it should b\ -e used only when abso-)174 388.8 R(lutely necessary)174 400.8 Q(.)-.65 E -44.51(macro Set)102 417 R .32(or clear a macro v)2.82 F 2.82(alue. T) --.25 F 2.82(os)-.8 G .32(et a macro, pass the v)-2.82 F .32 -(alue as the \214rst ar)-.25 F .32(gument in)-.18 F .938 -(the map lookup.)174 429 R 2.538 -.8(To c)5.938 H .939 -(lear a macro, do not pass an ar).8 F .939(gument in the map lookup.) --.18 F(The map al)174 441 Q -.1(wa)-.1 G(ys returns the empty string.).1 -E(Example of typical usage include:)5 E(Kstorage macro)214 457.2 Q(...) -214 481.2 Q 2.5(#s)214 505.2 S(et macro ${MyMacro} to the ruleset match) --2.5 E .19(R$+ $:)214 517.2 R($\(storage {MyMacro} $@ $1 $\) $1)2.5 E -2.5(#s)214 529.2 S(et macro ${MyMacro} to an empty string)-2.5 E .83 -(R$* $:)214 541.2 R($\(storage {MyMacro} $@ $\) $1)2.5 E 2.5(#c)214 -553.2 S(lear macro ${MyMacro})-2.5 E .19(R$\255 $:)214 565.2 R -($\(storage {MyMacro} $\) $1)2.5 E 51.17(arith Perform)102 585.6 R .494 -(simple arithmetic operations.)2.994 F .494(The operation is gi)5.494 F --.15(ve)-.25 G 2.993(na).15 G 2.993(sk)-2.993 G -.15(ey)-3.093 G 2.993 -(,c)-.5 G .493(urrently +,)-2.993 F .245(-, *, /, %, |, & \(bitwise OR,\ - AND\), l \(for less than\), =, and r \(for random\) are sup-)174 597.6 -R 3.21(ported. The)174 609.6 R(tw)3.21 E 3.21(oo)-.1 G .71 -(perands are gi)-3.21 F -.15(ve)-.25 G 3.21(na).15 G 3.21(sa)-3.21 G --.18(rg)-3.21 G 3.21(uments. The).18 F .71(lookup returns the result) -3.21 F 1.374(of the computation, i.e.,)174 621.6 R/F2 9/Times-Roman@0 SF -(TR)3.874 E(UE)-.36 E F1(or)3.874 E F2 -.666(FA)3.874 G(LSE).666 E F1 -1.374(for comparisons, inte)3.874 F 1.374(ger v)-.15 F 1.374 -(alues other)-.25 F(-)-.2 E 3.212(wise. The)174 633.6 R 3.212(ro)3.212 G -.712(perator returns a pseudo-random number whose v)-3.212 F .711 -(alue lies between)-.25 F .538(the \214rst and second operand \(which r\ -equires that the \214rst operand is smaller than)174 645.6 R 2.134 -(the second\).)174 657.6 R 2.133 -(All options which are possible for maps are ignored.)7.134 F 4.633(As) -7.133 G(imple)-4.633 E -.15(ex)174 669.6 S(ample is:).15 E 0 Cg EP +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(sendmail -bt)214 96 Q(ADDRESS TEST MODE \(ruleset 3 NO)214 108 Q 2.5 +(Ta)-.4 G(utomatically in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G(d\)).1 E +(Enter
)214 120 Q 2.5(>A)214 132 S +(rpa IPv6:1:2:dead:beef:9876:0:0:1)-2.5 E 35(Arpa input:)214 144 R +(IPv6 : 1 : 2 : dead : beef : 9876 : 0 : 0 : 1)2.5 E 30(Arpa returns:) +214 156 R 2.5 +(1.0.0.0.0.0.0.0.0.0.0.0.6.7.8.9.f.e.e.b.d.a.e.d.2.0.0.0.1.0.0.0)2.5 G +2.5(>A)214 168 S(rpa 1.2.3.4)-2.5 E 35(Arpa input:)214 180 R 2.5 +(1.2.3.4)2.5 G 30(Arpa returns:)214 192 R 2.5(4.3.2.1)2.5 G 32.85 +(sequence The)102 212.4 R(ar)3.349 E .849(guments on the `K' line are a\ + list of maps; the resulting map searches the)-.18 F(ar)174 224.4 Q .439 +(gument maps in order until it \214nds a match for the indicated k)-.18 +F -.15(ey)-.1 G 5.438(.F)-.5 G .438(or e)-5.588 F(xample,)-.15 E +(if the k)174 236.4 Q .3 -.15(ey d)-.1 H(e\214nition is:).15 E +(Kmap1 ...)214 252.6 Q(Kmap2 ...)214 264.6 Q(Kseqmap sequence map1 map2) +214 276.6 Q .057(then a lookup ag)174 292.8 R .057 +(ainst \231seqmap\232 \214rst does a lookup in map1.)-.05 F .058 +(If that is found, it re-)5.058 F(turns immediately)174 304.8 Q 5(.O) +-.65 G(therwise, the same k)-5 E .3 -.15(ey i)-.1 H 2.5(su).15 G +(sed for map2.)-2.5 E 43.94(syslog the)102 321 R -.1(ke)2.5 G 2.5(yi) +-.05 G 2.5(sl)-2.5 G(ogged via)-2.5 E/F2 10/Times-Italic@0 SF(syslo)2.5 +E(gd)-.1 E F1 2.5(\(8\). The)1.666 F(lookup returns the empty string.) +2.5 E 43.39(switch Much)102 337.2 R(lik)2.801 E 2.801(et)-.1 G .301 +(he \231sequence\232 map e)-2.801 F .301 +(xcept that the order of maps is determined by the)-.15 F .391 +(service switch.)174 349.2 R .391(The ar)5.391 F .391 +(gument is the name of the service to be look)-.18 F .392(ed up; the v) +-.1 F(al-)-.25 E 1.492 +(ues from the service switch are appended to the map name to create ne) +174 361.2 R 3.992(wm)-.25 G(ap)-3.992 E 2.5(names. F)174 373.2 R(or e) +-.15 E(xample, consider the k)-.15 E .3 -.15(ey d)-.1 H(e\214nition:).15 +E(Kali switch aliases)214 389.4 Q +(together with the service switch entry:)174 405.6 Q 78.84(aliases nis) +214 421.8 R(\214les)2.5 E 1.633(This causes a query ag)174 438 R 1.633 +(ainst the map \231ali\232 to search maps named \231ali.nis\232 and)-.05 +F(\231ali.\214les\232 in that order)174 450 Q(.)-.55 E 37.84 +(dequote Strip)102 466.2 R .961(double quotes \("\) from a name.)3.461 F +.96(It does not strip backslashes, and will not)5.961 F .172 +(strip quotes if the resulting string w)174 478.2 R .173 +(ould contain unscannable syntax \(that is, basic)-.1 F .386(errors lik) +174 490.2 R 2.886(eu)-.1 G .386(nbalanced angle brack)-2.886 F .386 +(ets; more sophisticated errors such as unkno)-.1 F(wn)-.25 E .251 +(hosts are not check)174 502.2 R 2.751(ed\). The)-.1 F .251 +(intent is for use when trying to accept mail from sys-)2.751 F +(tems such as DECnet that routinely quote odd syntax such as)174 514.2 Q +("49ers::ubell")214 530.4 Q 2.5(At)174 546.6 S +(ypical usage is probably something lik)-2.5 E(e:)-.1 E +(Kdequote dequote)214 562.8 Q(...)214 586.8 Q 88.19(R$\255 $:)214 610.8 +R($\(dequote $1 $\))2.5 E(R$\255 $+)214 622.8 Q($: $>3 $1 $2)77.55 E +(Care must be tak)174 639 Q(en to pre)-.1 E -.15(ve)-.25 G(nt une).15 E +(xpected results; for e)-.15 E(xample,)-.15 E +("|someprogram < input > output")214 655.2 Q 1.31(will ha)174 671.4 R +1.61 -.15(ve q)-.2 H 1.31(uotes stripped, b).15 F 1.31 +(ut the result is probably not what you had in mind.)-.2 F -.15(Fo)174 +683.4 S(rtunately these cases are rare.).15 E(re)102 699.6 Q(ge)-.15 E +50.09(xT)-.15 G .488(he map de\214nition on the)-50.09 F F0(K)2.988 E F1 +.489(line contains a re)2.988 F .489(gular e)-.15 F 2.989(xpression. An) +-.15 F 2.989(yk)-.15 G .789 -.15(ey i)-3.089 H .489(nput is).15 F 1.454 +(compared to that e)174 711.6 R 1.454(xpression using the POSIX re)-.15 +F 1.454(gular e)-.15 F 1.454(xpressions routines re)-.15 F(g-)-.15 E .29 +(comp\(\), re)174 723.6 R .291(gerr\(\), and re)-.15 F(ge)-.15 E -.15 +(xe)-.15 G 2.791(c\(\). Refer).15 F .291 +(to the documentation for those routines for)2.791 F 0 Cg EP %%Page: 87 83 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-87)195.86 E/F1 10/Times-Roman@0 SF(Kcomp arith)214 96 Q(...)214 -120 Q(Scheck_etrn)214 144 Q .83(R$* $:)214 156 R($\(comp l $@ $&{load_a) -2.5 E(vg} $@ 7 $\) $1)-.2 E(RF)214 168 Q(ALSE$# error ...)-.74 E(sock) -102 188.4 Q 44.05(et The)-.1 F(sock)3.231 E .732 -(et map uses a simple request/reply protocol o)-.1 F -.15(ve)-.15 G -3.232(rT).15 G .732(CP or UNIX domain)-3.232 F(sock)174 200.4 Q .753 +(SMM:08-87)195.86 E/F1 10/Times-Roman@0 SF .356 +(more information about the re)174 96 R .356(gular e)-.15 F .355 +(xpression matching.)-.15 F .355(No re)5.355 F .355(writing of the k) +-.25 F -.15(ey)-.1 G .074(is done if the)174 108 R F02.574 E F1 +.074(\215ag is used.)2.574 F -.4(Wi)5.074 G .074(thout it, the k).4 F +.375 -.15(ey i)-.1 H 2.575(sd).15 G .075(iscarded or if)-2.575 F F0 +2.575 E F1 .075(if used, it is)2.575 F .905 +(substituted by the substring matches, delimited by)174 120 R F0($|) +3.405 E F1 .905(or the string speci\214ed with)3.405 F(the)174 132 Q F0 +2.5 E F1 2.5(option. The)2.5 F(options a)2.5 E -.25(va)-.2 G +(ilable for the map are).25 E 9.17(-n not)214 148.2 R 10.84(-f case)214 +160.2 R(sensiti)2.5 E -.15(ve)-.25 G 9.17(-b basic)214 172.2 R(re)2.5 E +(gular e)-.15 E(xpressions \(def)-.15 E(ault is e)-.1 E(xtended\))-.15 E +10.28(-s substring)214 184.2 R(match)2.5 E 9.17(-d set)214 196.2 R +(the delimiter string used for -s)2.5 E 9.73(-a append)214 208.2 R +(string to k)2.5 E -.15(ey)-.1 G 6.39(-m match)214 220.2 R(only)2.5 E +2.5(,d)-.65 G 2.5(on)-2.5 G(ot replace/discard v)-2.5 E(alue)-.25 E 6.95 +(-D perform)214 232.2 R(no lookup in deferred deli)2.5 E -.15(ve)-.25 G +(ry mode.).15 E(The)174 248.4 Q F03.208 E F1 .709(option can incl\ +ude an optional parameter which can be used to select the)3.208 F +(substrings in the result of the lookup.)174 260.4 Q -.15(Fo)5 G 2.5(re) +.15 G(xample,)-2.65 E(-s1,3,4)214 276.6 Q .272 +(The delimiter string speci\214ed via the)174 292.8 R F02.772 E F1 +.271(option is the sequence of characters after)2.772 F F0(d)174 304.8 Q +F1 .412(ending at the \214rst space.)2.912 F .412(Hence it isn')5.412 F +2.912(tp)-.18 G .412(ossible to specify a space as delimiter)-2.912 F(,) +-.4 E .641(so if the option is immediately follo)174 316.8 R .641 +(wed by a space the delimiter string is empty)-.25 F(,)-.65 E +(which means the substrings are joined.)174 328.8 Q .696 +(Notes: to match a)174 352.8 R F0($)3.197 E F1 .697 +(in a string, \\$$ must be used.)3.197 F .697 +(If the pattern contains spaces,)5.697 F(the)174 364.8 Q 3.4(ym)-.15 G +.9(ust be replaced with the blank substitution character)-3.4 F 3.4(,u) +-.4 G .9(nless it is space it-)-3.4 F(self.)174 376.8 Q 35.62 +(program The)102 393 R(ar)2.544 E .044(guments on the)-.18 F F0(K)2.544 +E F1 .045(line are the pathname to a program and an)2.544 F 2.545(yi) +-.15 G .045(nitial param-)-2.545 F .176(eters to be passed.)174 405 R +.176(When the map is called, the k)5.176 F .475 -.15(ey i)-.1 H 2.675 +(sa).15 G .175(dded to the initial parame-)-2.675 F .112 +(ters and the program is in)174 417 R -.2(vo)-.4 G -.1(ke).2 G 2.612(da) +.1 G 2.612(st)-2.612 G .112(he def)-2.612 F .112(ault user/group id.)-.1 +F .112(The \214rst line of stan-)5.112 F .508 +(dard output is returned as the v)174 429 R .508(alue of the lookup.) +-.25 F .508(This has man)5.508 F 3.007(yp)-.15 G .507(otential secu-) +-3.007 F 1.277(rity problems, and has terrible performance; it should b\ +e used only when abso-)174 441 R(lutely necessary)174 453 Q(.)-.65 E +44.51(macro Set)102 469.2 R .32(or clear a macro v)2.82 F 2.82(alue. T) +-.25 F 2.82(os)-.8 G .32(et a macro, pass the v)-2.82 F .32 +(alue as the \214rst ar)-.25 F .32(gument in)-.18 F .938 +(the map lookup.)174 481.2 R 2.538 -.8(To c)5.938 H .939 +(lear a macro, do not pass an ar).8 F .939(gument in the map lookup.) +-.18 F(The map al)174 493.2 Q -.1(wa)-.1 G(ys returns the empty string.) +.1 E(Example of typical usage include:)5 E(Kstorage macro)214 509.4 Q +(...)214 533.4 Q 2.5(#s)214 557.4 S +(et macro ${MyMacro} to the ruleset match)-2.5 E .19(R$+ $:)214 569.4 R +($\(storage {MyMacro} $@ $1 $\) $1)2.5 E 2.5(#s)214 581.4 S +(et macro ${MyMacro} to an empty string)-2.5 E .83(R$* $:)214 593.4 R +($\(storage {MyMacro} $@ $\) $1)2.5 E 2.5(#c)214 605.4 S +(lear macro ${MyMacro})-2.5 E .19(R$\255 $:)214 617.4 R +($\(storage {MyMacro} $\) $1)2.5 E 51.17(arith Perform)102 637.8 R .494 +(simple arithmetic operations.)2.994 F .494(The operation is gi)5.494 F +-.15(ve)-.25 G 2.993(na).15 G 2.993(sk)-2.993 G -.15(ey)-3.093 G 2.993 +(,c)-.5 G .493(urrently +,)-2.993 F .245(-, *, /, %, |, & \(bitwise OR,\ + AND\), l \(for less than\), =, and r \(for random\) are sup-)174 649.8 +R 3.21(ported. The)174 661.8 R(tw)3.21 E 3.21(oo)-.1 G .71 +(perands are gi)-3.21 F -.15(ve)-.25 G 3.21(na).15 G 3.21(sa)-3.21 G +-.18(rg)-3.21 G 3.21(uments. The).18 F .71(lookup returns the result) +3.21 F 1.374(of the computation, i.e.,)174 673.8 R/F2 9/Times-Roman@0 SF +(TR)3.874 E(UE)-.36 E F1(or)3.874 E F2 -.666(FA)3.874 G(LSE).666 E F1 +1.374(for comparisons, inte)3.874 F 1.374(ger v)-.15 F 1.374 +(alues other)-.25 F(-)-.2 E 3.212(wise. The)174 685.8 R 3.212(ro)3.212 G +.712(perator returns a pseudo-random number whose v)-3.212 F .711 +(alue lies between)-.25 F .538(the \214rst and second operand \(which r\ +equires that the \214rst operand is smaller than)174 697.8 R .807 +(the second\).)174 709.8 R .806 +(All options which are possible for maps are ignored.)5.807 F 3.306(As) +5.806 G .806(imple e)-3.306 F(x-)-.15 E(ample is:)174 721.8 Q 0 Cg EP +%%Page: 88 84 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-88 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(Kcomp arith)214 96 Q(...)214 120 Q(Scheck_etrn)214 144 Q .83(R$* $:)214 +156 R($\(comp l $@ $&{load_a)2.5 E(vg} $@ 7 $\) $1)-.2 E(RF)214 168 Q +(ALSE$# error ...)-.74 E(sock)102 188.4 Q 44.05(et The)-.1 F(sock)3.231 +E .732(et map uses a simple request/reply protocol o)-.1 F -.15(ve)-.15 +G 3.232(rT).15 G .732(CP or UNIX domain)-3.232 F(sock)174 200.4 Q .753 (ets to query an e)-.1 F .753(xternal serv)-.15 F(er)-.15 E 5.753(.B) -.55 G .753(oth requests and replies are te)-5.753 F .753(xt based and) -.15 F(encoded as netstrings, i.e., a string "hello there" becomes:)174 @@ -7830,14 +7930,14 @@ G 1.618 -.4(r, t).15 H .818(he e).4 F .818 (as not found, or:).05 E(55:TEMP this te)214 683.4 Q(xt e)-.15 E (xplains that we had a temporary f)-.15 E(ailure,)-.1 E (in case of a temporary map lookup f)174 711.6 Q(ailure.)-.1 E 0 Cg EP -%%Page: 88 84 +%%Page: 89 85 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-88 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.186 -(The sock)174 96 R 1.186(et map uses the same syntax as milters \(see S\ -ection "X \212 Mail Filter)-.1 F +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-89)195.86 E/F1 10/Times-Roman@0 SF 1.186(The sock)174 96 R 1.186 +(et map uses the same syntax as milters \(see Section "X \212 Mail Filt\ +er)-.1 F (\(Milter\) De\214nitions"\) to specify the remote endpoint, e.g.,)174 108 Q(Ksock)214 124.2 Q(et mySock)-.1 E(etMap inet:12345@127.0.0.1)-.1 E .493(If multiple sock)174 152.4 R .492 @@ -7874,13 +7974,13 @@ F03.197 E F1(or)3.197 E F03.197 E F1 .697(are speci\214ed,) F -.15(ve)-.25 G 3.046(rt).15 G .546(ry an)-3.046 F 3.046(ym)-.15 G (atches)-3.046 E(at all \212 that is, e)174 321 Q -.15(ve)-.25 G (rything will appear to f).15 E(ail.)-.1 E102 337.2 Q F2(x)A F1 -1.357(Append the string)57.48 F F2(x)3.857 E F1 1.357 -(on successful matches.)3.857 F -.15(Fo)6.357 G 3.857(re).15 G 1.356 -(xample, the def)-4.007 F(ault)-.1 E F2(host)3.856 E F1(map)3.856 E -(appends a dot on successful matches.)174 349.2 Q102 365.4 Q F2(x) -A F1 .02(Append the string)55.81 F F2(x)2.52 E F1 .021(on temporary f) -2.52 F 2.521(ailures. F)-.1 F .021(or e)-.15 F(xample,)-.15 E F2(x)2.521 -E F1 -.1(wo)2.521 G .021(uld be appended if a).1 F .72 +.078(Append the string)57.48 F F2(x)2.578 E F1 .078 +(on successful matches.)2.578 F -.15(Fo)5.078 G 2.578(re).15 G .078 +(xample, the def)-2.728 F(ault)-.1 E F2(host)2.577 E F1 .077(map ap-) +2.577 F(pends a dot on successful matches.)174 349.2 Q102 365.4 Q +F2(x)A F1 .02(Append the string)55.81 F F2(x)2.52 E F1 .021 +(on temporary f)2.52 F 2.521(ailures. F)-.1 F .021(or e)-.15 F(xample,) +-.15 E F2(x)2.521 E F1 -.1(wo)2.521 G .021(uld be appended if a).1 F .72 (DNS lookup returned \231serv)174 377.4 R .72(er f)-.15 F .72 (ailed\232 or an NIS lookup could not locate a serv)-.1 F(er)-.15 E(.) -.55 E(See also the)174 389.4 Q F02.5 E F1(\215ag.)2.5 E 60.53 @@ -7888,27 +7988,27 @@ E F1 -.1(wo)2.521 G .021(uld be appended if a).1 F .72 (wer case before looking up the k)-.25 E -.15(ey)-.1 G(.)-.5 E 56.08 (\255m Match)102 421.8 R .399(only \(without replacing the v)2.899 F 2.899(alue\). If)-.25 F .399(you only care about the e)2.899 F .4 -(xistence of)-.15 F 7.307(ak)174 433.8 S 5.107 -.15(ey a)-7.407 H 4.807 -(nd not the v).15 F 4.807 -(alue \(as you might when searching the NIS map)-.25 F 1.947 -(\231hosts.byname\232 for e)174 445.8 R 1.947(xample\), this \215ag pre) --.15 F -.15(ve)-.25 G 1.947(nts the map from substituting the).15 F -.25 -(va)174 457.8 S 2.85(lue. Ho).25 F(we)-.25 E -.15(ve)-.25 G 1.15 -.4 -(r, T).15 H .35(he \255a ar).4 F .349 -(gument is still appended on a match, and the def)-.18 F .349(ault is) --.1 F(still tak)174 469.8 Q(en if the match f)-.1 E(ails.)-.1 E102 -486 Q F2 -.1(ke)C(ycol)-.2 E F1 .519(The k)36.22 F .819 -.15(ey c)-.1 H -.519(olumn name \(for NIS+\) or number \(for te).15 F .519 -(xt lookups\).)-.15 F -.15(Fo)5.52 G 3.02(rL).15 G -.4(DA)-3.02 G 3.02 -(Pm).4 G(aps)-3.02 E .973(this is an LD)174 498 R .973(AP \214lter stri\ -ng in which %s is replaced with the literal contents of)-.4 F .248 +(xistence of)-.15 F 3.869(ak)174 433.8 S 1.669 -.15(ey a)-3.969 H 1.369 +(nd not the v).15 F 1.368 +(alue \(as you might when searching the NIS map \231hosts.by-)-.25 F +.253(name\232 for e)174 445.8 R .253(xample\), this \215ag pre)-.15 F +-.15(ve)-.25 G .253(nts the map from substituting the v).15 F 2.754 +(alue. Ho)-.25 F(w-)-.25 E -2.15 -.25(ev e)174 457.8 T .976 -.4(r, T).25 +H .176(he \255a ar).4 F .176 +(gument is still appended on a match, and the def)-.18 F .175 +(ault is still tak)-.1 F .175(en if)-.1 F(the match f)174 469.8 Q(ails.) +-.1 E102 486 Q F2 -.1(ke)C(ycol)-.2 E F1 .519(The k)36.22 F .819 +-.15(ey c)-.1 H .519(olumn name \(for NIS+\) or number \(for te).15 F +.519(xt lookups\).)-.15 F -.15(Fo)5.52 G 3.02(rL).15 G -.4(DA)-3.02 G +3.02(Pm).4 G(aps)-3.02 E .973(this is an LD)174 498 R .973(AP \214lter \ +string in which %s is replaced with the literal contents of)-.4 F .248 (the lookup k)174 510 R .548 -.15(ey a)-.1 H .248 (nd %0 is replaced with the LD).15 F .249 -(AP escaped contents of the lookup)-.4 F -.1(ke)174 522 S 4.176(ya)-.05 -G 1.676(ccording to RFC 2254.)-4.176 F 1.676(If the \215ag)6.676 F F0 -4.176 E F1 1.676(is used, then %1 through %9 are)4.176 F .886 -(replaced with the LD)174 534 R .887(AP escaped contents of the ar)-.4 F -.887(guments speci\214ed in the map)-.18 F(lookup.)174 546 Q102 +(AP escaped contents of the lookup)-.4 F -.1(ke)174 522 S 3.222(ya)-.05 +G .722(ccording to RFC 2254.)-3.222 F .721(If the \215ag)5.721 F F0 +3.221 E F1 .721(is used, then %1 through %9 are re-)3.221 F 1.534 +(placed with the LD)174 534 R 1.534(AP escaped contents of the ar)-.4 F +1.534(guments speci\214ed in the map)-.18 F(lookup.)174 546 Q102 562.2 Q F2(valcol)A F1 1.929(The v)36.92 F 1.928 (alue column name \(for NIS+\) or number \(for te)-.25 F 1.928 (xt lookups\).)-.15 F -.15(Fo)6.928 G 4.428(rL).15 G -.4(DA)-4.428 G(P) @@ -7916,42 +8016,44 @@ G 1.676(ccording to RFC 2254.)-4.176 F 1.676(If the \215ag)6.676 F F0 (utes to be returned; multiple attrib)-.2 F(utes)-.2 E 1.217 (can be separated by commas.)174 586.2 R 1.216 (If not speci\214ed, all attrib)6.216 F 1.216(utes found in the match) --.2 F 1.327(will be returned.)174 598.2 R 1.328(The attrib)6.328 F 1.328 -(utes listed can also include a type and one or more)-.2 F -(objectClass v)174 610.2 Q(alues for matching as described in the LD) --.25 E(AP section.)-.4 E102 626.4 Q F2(delim)A F1 .219 +-.2 F .184(will be returned.)174 598.2 R .184(The attrib)5.184 F .184 +(utes listed can also include a type and one or more ob-)-.2 F +(jectClass v)174 610.2 Q(alues for matching as described in the LD)-.25 +E(AP section.)-.4 E102 626.4 Q F2(delim)A F1 .219 (The column delimiter \(for te)39.7 F .219(xt lookups\).)-.15 F .218 -(It can be a single character or one of the)5.219 F 1.825 -(special strings \231)174 638.4 R 1.825(\\n\232 or \231)1.666 F 1.826 -(\\t\232 to indicate ne)1.666 F 1.826(wline or tab respecti)-.25 F -.15 -(ve)-.25 G(ly).15 E 6.826(.I)-.65 G 4.326(fo)-6.826 G(mitted)-4.326 E -(entirely)174 650.4 Q 4.123(,t)-.65 G 1.623(he column separator is an) --4.123 F 4.123(ys)-.15 G 1.622(equence of white space.)-4.123 F -.15(Fo) -6.622 G 4.122(rL).15 G -.4(DA)-4.122 G 4.122(Pa).4 G(nd)-4.122 E .557 -(some other maps this is the separator character to combine multiple v) -174 662.4 R .557(alues into a)-.25 F .804(single return string.)174 -674.4 R .804(If not set, the LD)5.804 F .803 -(AP lookup will only return the \214rst match)-.4 F 2.57(found. F)174 -686.4 R .07(or DNS maps this is the separator character at which the re\ -sult of a query)-.15 F(is cut of)174 698.4 Q 2.5(fi)-.25 G 2.5(fi)-2.5 G -2.5(st)-2.5 G(oo long.)-2.5 E 0 Cg EP -%%Page: 89 85 +(It can be a single character or one of the)5.219 F .51 +(special strings \231)174 638.4 R .51(\\n\232 or \231)1.666 F .511 +(\\t\232 to indicate ne)1.666 F .511(wline or tab respecti)-.25 F -.15 +(ve)-.25 G(ly).15 E 5.511(.I)-.65 G 3.011(fo)-5.511 G .511(mitted en-) +-3.011 F(tirely)174 650.4 Q 2.908(,t)-.65 G .408 +(he column separator is an)-2.908 F 2.908(ys)-.15 G .408 +(equence of white space.)-2.908 F -.15(Fo)5.407 G 2.907(rL).15 G -.4(DA) +-2.907 G 2.907(Pa).4 G .407(nd some)-2.907 F .343 +(other maps this is the separator character to combine multiple v)174 +662.4 R .343(alues into a single)-.25 F .665(return string.)174 674.4 R +.665(If not set, the LD)5.665 F .665 +(AP lookup will only return the \214rst match found.)-.4 F -.15(Fo)174 +686.4 S 2.999(rD).15 G .499(NS maps this is the separator character at \ +which the result of a query is cut)-2.999 F(of)174 698.4 Q 2.5(fi)-.25 G +2.5(fi)-2.5 G 2.5(st)-2.5 G(oo long.)-2.5 E 0 Cg EP +%%Page: 90 86 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-89)195.86 E/F1 10/Times-Roman@0 SF 61.08(\255t Normally)102 96 R -2.727(,w)-.65 G .227(hen a map attempts to do a lookup and the serv) --2.727 F .226(er f)-.15 F .226(ails \(e.g.,)-.1 F/F2 10/Times-Italic@0 -SF(sendmail)2.726 E F1(couldn')174 108 Q 2.776(tc)-.18 G .276(ontact an) --2.776 F 2.776(yn)-.15 G .276(ame serv)-2.776 F .276(er; this is)-.15 F -F2(not)2.776 E F1 .276(the same as an entry not being found)2.776 F .251 -(in the map\), the message being processed is queued for future process\ -ing.)174 120 R(The)5.25 E F02.75 E F1 2.039(\215ag turns of)174 -132 R 4.539(ft)-.25 G 2.039(his beha)-4.539 F(vior)-.2 E 4.539(,l)-.4 G -2.039(etting the temporary f)-4.539 F 2.039(ailure \(serv)-.1 F 2.039 -(er do)-.15 F 2.04(wn\) act as)-.25 F .676(though it were a permanent f) -174 144 R .675(ailure \(entry not found\).)-.1 F .675 +/F0 10/Times-Bold@0 SF 193.36(SMM:08-90 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 61.08 +(\255t Normally)102 96 R 2.727(,w)-.65 G .227 +(hen a map attempts to do a lookup and the serv)-2.727 F .226(er f)-.15 +F .226(ails \(e.g.,)-.1 F/F2 10/Times-Italic@0 SF(sendmail)2.726 E F1 +(couldn')174 108 Q 2.776(tc)-.18 G .276(ontact an)-2.776 F 2.776(yn)-.15 +G .276(ame serv)-2.776 F .276(er; this is)-.15 F F2(not)2.776 E F1 .276 +(the same as an entry not being found)2.776 F .251(in the map\), the me\ +ssage being processed is queued for future processing.)174 120 R(The) +5.25 E F02.75 E F1 2.039(\215ag turns of)174 132 R 4.539(ft)-.25 G +2.039(his beha)-4.539 F(vior)-.2 E 4.539(,l)-.4 G 2.039 +(etting the temporary f)-4.539 F 2.039(ailure \(serv)-.1 F 2.039(er do) +-.15 F 2.04(wn\) act as)-.25 F .676(though it were a permanent f)174 144 +R .675(ailure \(entry not found\).)-.1 F .675 (It is particularly useful for)5.675 F .772 (DNS lookups, where someone else')174 156 R 3.272(sm)-.55 G .772 (iscon\214gured name serv)-3.272 F .772(er can cause prob-)-.15 F 1.646 @@ -7998,11 +8100,11 @@ E(.)-.65 E(The dns map has another \215ag:)127 478.8 Q 57.19 (specify the timeout \(in seconds\) for communication with the sock) 2.941 F .44(et map)-.1 F(serv)174 539.4 Q(er)-.15 E(.)-.55 E(The follo) 127 555.6 Q(wing additional \215ags are present in the ldap map only:) --.25 E102 571.8 Q F2(timeout)A F1 7.617(Set the LD)31.92 F 7.618 -(AP netw)-.4 F 7.618(ork timeout.)-.1 F 7.618 -(sendmail must be compiled with)12.618 F F0(\255DLD)174 583.8 Q -(AP_OPT_NETW)-.35 E(ORK_TIMEOUT)-.1 E F1(to use this \215ag.)2.5 E 57.19 -(\255R Do)102 600 R .025(not auto chase referrals.)2.525 F .025 +-.25 E102 571.8 Q F2(timeout)A F1 4.314(Set the LD)31.92 F 4.314 +(AP netw)-.4 F 4.314(ork timeout.)-.1 F 4.314 +(sendmail must be compiled with)9.314 F F0(\255DL-)6.814 E -.35(DA)174 +583.8 S(P_OPT_NETW).35 E(ORK_TIMEOUT)-.1 E F1(to use this \215ag.)2.5 E +57.19(\255R Do)102 600 R .025(not auto chase referrals.)2.525 F .025 (sendmail must be compiled with)5.025 F F0(\255DLD)2.525 E(AP_REFER-) -.35 E(RALS)174 612 Q F1(to use this \215ag.)2.5 E 58.86(\255n Retrie) 102 628.2 R .3 -.15(ve a)-.25 H(ttrib).15 E(ute names only)-.2 E(.)-.65 @@ -8020,19 +8122,18 @@ F2(scope)A F1(Set search scope to one of base, one \(one le)39.7 E -.15 2.967(na).65 G .466(ddition, each of the hosts listed can be)-2.967 F (follo)174 717 Q(wed by a colon and a port number to o)-.25 E -.15(ve) -.15 G(rride the def).15 E(ault LD)-.1 E(AP port.)-.4 E 0 Cg EP -%%Page: 90 86 +%%Page: 91 87 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-90 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF102 -96 Q/F2 10/Times-Italic@0 SF(port)A F1(LD)44.69 E(AP service port.)-.4 E -102 112.2 Q F2(LD)2.5 E(APURI)-.35 E F1 1.102 -(Use the speci\214ed LD)15.33 F 1.103 -(AP URI instead of specifying the hostname and port sepa-)-.4 F -(rately with the the)174 124.2 Q F02.5 E F1(and)2.5 E F02.5 -E F1(options sho)2.5 E(wn abo)-.25 E -.15(ve)-.15 G 5(.F).15 G(or e) --5.15 E(xample,)-.15 E(-h serv)214 140.4 Q(er)-.15 E(.e)-.55 E +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-91)195.86 E/F1 10/Times-Roman@0 SF102 96 Q/F2 10 +/Times-Italic@0 SF(port)A F1(LD)44.69 E(AP service port.)-.4 E102 +112.2 Q F2(LD)2.5 E(APURI)-.35 E F1 1.102(Use the speci\214ed LD)15.33 F +1.103(AP URI instead of specifying the hostname and port sepa-)-.4 F +(rately with the)174 124.2 Q F02.5 E F1(and)2.5 E F02.5 E F1 +(options sho)2.5 E(wn abo)-.25 E -.15(ve)-.15 G 5(.F).15 G(or e)-5.15 E +(xample,)-.15 E(-h serv)214 140.4 Q(er)-.15 E(.e)-.55 E (xample.com -p 389 -b dc=e)-.15 E(xample,dc=com)-.15 E(is equi)174 156.6 Q -.25(va)-.25 G(lent to).25 E(-H ldap://serv)214 172.8 Q(er)-.15 E(.e) -.55 E(xample.com:389 -b dc=e)-.15 E(xample,dc=com)-.15 E .757 @@ -8105,16 +8206,16 @@ G 1.168(s; normally).15 F 3.668(,r)-.65 G 1.168(e-inserting an e)-3.668 F 1.168(xisting k)-.15 F 1.469 -.15(ey i)-.1 H 3.669(sa).15 G(n)-3.669 E (error)174 697.2 Q(.)-.55 E 58.86(\255v Print)102 713.4 R (what is happening.)2.5 E 0 Cg EP -%%Page: 91 87 +%%Page: 92 88 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-91)195.86 E/F1 10/Times-Roman@0 SF(The)102 96 Q/F2 10 -/Times-Italic@0 SF(sendmail)3.606 E F1 1.106(daemon does not ha)3.606 F -1.406 -.15(ve t)-.2 H 3.606(ob).15 G 3.606(er)-3.606 G 1.106 -(estarted to read the ne)-3.606 F 3.605(wm)-.25 G 1.105 -(aps as long as you change)-3.605 F +/F0 10/Times-Bold@0 SF 193.36(SMM:08-92 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(The)102 +96 Q/F2 10/Times-Italic@0 SF(sendmail)3.606 E F1 1.106 +(daemon does not ha)3.606 F 1.406 -.15(ve t)-.2 H 3.606(ob).15 G 3.606 +(er)-3.606 G 1.106(estarted to read the ne)-3.606 F 3.605(wm)-.25 G +1.105(aps as long as you change)-3.605 F (them in place; \214le locking is used so that the maps w)102 108 Q(on') -.1 E 2.5(tb)-.18 G 2.5(er)-2.5 G(ead while the)-2.5 E 2.5(ya)-.15 G (re being updated.)-2.5 E(Ne)127 124.2 Q 2.5(wc)-.25 G @@ -8191,17 +8292,17 @@ G 2.605<278d>-1.29 G .105 (ueue runners the option).15 F F0(MaxQueueChildr)102 696 Q(en)-.18 E F1 .055(can be set.)2.555 F .055 (This limits the number of processes used for running the queues to) -5.055 F F0(MaxQueueChildr)102 708 Q(en)-.18 E F1 3.63(,t)C 1.13 -(hough at an)-3.63 F 3.63(yo)-.15 G 1.13(ne time fe)-3.63 F 1.129 -(wer processes may be acti)-.25 F 1.429 -.15(ve a)-.25 H 3.629(sar).15 G -1.129(esult of queue)-3.629 F -(options, completed queue runs, system load, etc.)102 720 Q 0 Cg EP -%%Page: 92 88 +5.055 F F0(MaxQueueChildr)102 708 Q(en)-.18 E F1 2.57(,t)C .07 +(hough at an)-2.57 F 2.57(yo)-.15 G .07(ne time fe)-2.57 F .069 +(wer processes may be acti)-.25 F .369 -.15(ve a)-.25 H 2.569(sar).15 G +.069(esult of queue op-)-2.569 F +(tions, completed queue runs, system load, etc.)102 720 Q 0 Cg EP +%%Page: 93 89 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-92 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .602 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-93)195.86 E/F1 10/Times-Roman@0 SF .602 (The maximum number of queue runners for an indi)127 96 R .602 (vidual queue group can be controlled via)-.25 F(the)102 108 Q F0 (Runners)2.585 E F1 2.585(option. If)2.585 F .084(set to 0, entries in \ @@ -8240,12 +8341,12 @@ to a queue group based on the algorithm described in section).15 F -.74 -2.677 F(The)5.178 E 2.678(ya)-.15 G(re)-2.678 E (declared in the con\214guration \214le as:)102 316.8 Q F0(X)142 333 Q F2(name)A F1({,)2.5 E F2(\214eld)2.5 E F1(=)A F2(value)A F1(}*)1.666 E -(where)102 349.2 Q F2(name)4.688 E F1 2.188(is the name of the \214lter\ - \(used internally only\) and the \231\214eld=name\232 pairs de\214ne) -4.688 F(attrib)102 361.2 Q .491(utes of the \214lter)-.2 F 5.491(.A)-.55 -G .491(lso see the documentation for the)-5.491 F F0(InputMailFilters) -2.992 E F1 .492(option for more infor)2.992 F(-)-.2 E(mation.)102 373.2 -Q(Fields are:)127 389.4 Q(Sock)142 405.6 Q 42.38(et The)-.1 F(sock)2.5 E +(where)102 349.2 Q F2(name)3.736 E F1 1.236(is the name of the \214lter\ + \(used internally only\) and the \231\214eld=name\232 pairs de\214ne a\ +t-)3.736 F(trib)102 361.2 Q .12(utes of the \214lter)-.2 F 5.12(.A)-.55 +G .12(lso see the documentation for the)-5.12 F F0(InputMailFilters)2.62 +E F1 .12(option for more informa-)2.62 F(tion.)102 373.2 Q(Fields are:) +127 389.4 Q(Sock)142 405.6 Q 42.38(et The)-.1 F(sock)2.5 E (et speci\214cation)-.1 E 47.83(Flags Special)142 417.6 R (\215ags for this \214lter)2.5 E -.35(Ti)142 429.6 S 32.07(meouts T).35 F(imeouts for this \214lter)-.35 E @@ -8254,11 +8355,11 @@ F(imeouts for this \214lter)-.35 E E(The sock)127 462 Q(et speci\214cation is one of the follo)-.1 E (wing forms:)-.25 E F0(S=inet:)142 478.2 Q F2(port)2.5 E F0(@)2.5 E F2 (host)2.5 E F0(S=inet6:)142 498.6 Q F2(port)2.5 E F0(@)2.5 E F2(host)2.5 -E F0(S=local:)142 519 Q F2(path)2.5 E F1 1.792(The \214rst tw)102 535.2 -R 4.291(od)-.1 G 1.791(escribe an IPv4 or IPv6 sock)-4.291 F 1.791 -(et listening on a certain)-.1 F F2(port)4.291 E F1 1.791(at a gi)4.291 -F -.15(ve)-.25 G(n).15 E F2(host)4.291 E F1 1.791(or IP)4.291 F 2.5 -(address. The)102 547.2 R(\214nal form describes a named sock)2.5 E +E F0(S=local:)142 519 Q F2(path)2.5 E F1 .938(The \214rst tw)102 535.2 R +3.438(od)-.1 G .938(escribe an IPv4 or IPv6 sock)-3.438 F .938 +(et listening on a certain)-.1 F F2(port)3.438 E F1 .938(at a gi)3.438 F +-.15(ve)-.25 G(n).15 E F2(host)3.438 E F1 .938(or IP ad-)3.438 F 2.5 +(dress. The)102 547.2 R(\214nal form describes a named sock)2.5 E (et on the \214lesystem at the gi)-.1 E -.15(ve)-.25 G(n).15 E F2(path) 2.5 E F1(.)A(The follo)127 563.4 Q (wing \215ags may be set in the \214lter description.)-.25 E 13.33(RR) @@ -8280,12 +8381,12 @@ Q F0(T=)2.5 E F1(equate:)2.5 E 13.33(CT)102 656.4 S (rall timeout between sending end-of-message to \214lter and w).15 F 1.186(aiting for the \214nal ackno)-.1 F(wl-)-.25 E(edgment.)122 717 Q 0 Cg EP -%%Page: 93 89 +%%Page: 94 90 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-93)195.86 E/F1 10/Times-Roman@0 SF 1.402 +/F0 10/Times-Bold@0 SF 193.36(SMM:08-94 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.402 (Note the separator between each timeout \214eld is a)127 96 R F0(';') 3.903 E F1 6.403(.T)C 1.403(he def)-6.403 F 1.403(ault v)-.1 F 1.403 (alues \(if not set\) are:)-.25 F F0(T=C:5m;S:10s;R:10s;E:5m)102 108 Q @@ -8358,19 +8459,19 @@ F1(:)A F2(mail-)3.425 E(dr)117 668.4 Q(op)-.45 E F1(and)2.5 E F2 -.25 F 3.495(,t)-.4 G .995(he user name is passed)-3.495 F .78 (through the alias \214le.)117 720.6 R .781(If no alias is found \(or i\ f the alias points back to the same address\), the)5.78 F 0 Cg EP -%%Page: 94 90 +%%Page: 95 91 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-94 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.778 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-95)195.86 E/F1 10/Times-Roman@0 SF .775 (name \(with \231:maildrop\232 appended\) is then used as a k)117 96 R -2.077 -.15(ey i)-.1 H 4.277(nt).15 G 1.777(he user database.)-4.277 F -1.777(If no match)6.777 F -(occurs \(or if the maildrop points at the same address\), forw)117 108 -Q(arding is tried.)-.1 E .55(If the \214rst tok)142 124.2 R .551(en of \ -the user name returned by ruleset 0 is an \231@\232 sign, the user data\ -base)-.1 F .626(lookup is skipped.)117 136.2 R .625 +1.075 -.15(ey i)-.1 H 3.275(nt).15 G .775(he user database.)-3.275 F +.774(If no match oc-)5.774 F +(curs \(or if the maildrop points at the same address\), forw)117 108 Q +(arding is tried.)-.1 E .55(If the \214rst tok)142 124.2 R .551(en of t\ +he user name returned by ruleset 0 is an \231@\232 sign, the user datab\ +ase)-.1 F .626(lookup is skipped.)117 136.2 R .625 (The intent is that the user database will act as a set of def)5.626 F .625(aults for a cluster)-.1 F 1.533 (\(in our case, the Computer Science Di)117 148.2 R 1.533 @@ -8386,13 +8487,13 @@ base)-.1 F .626(lookup is skipped.)117 136.2 R .625 (ould cause my outgoing mail to be sent as Eric.Allman.)-.1 E .52 (If a \231maildrop\232 is found for the user)142 249 R 3.019(,b)-.4 G .519(ut no corresponding \231mailname\232 record e)-3.219 F .519 -(xists, the)-.15 F 1.127(record \231:def)117 261 R 1.127 -(ault:mailname\232 is consulted.)-.1 F 1.127 -(If present, this is the name of a host to o)6.127 F -.15(ve)-.15 G -1.128(rride the).15 F .625(local host.)117 273 R -.15(Fo)5.625 G 3.125 -(re).15 G .625(xample, in our case we w)-3.275 F .625 -(ould set it to \231CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 3.125 -(EDU\232. The).65 F(ef)3.125 E .625(fect is that)-.25 F(an)117 285 Q +(xists, the)-.15 F .206(record \231:def)117 261 R .206 +(ault:mailname\232 is consulted.)-.1 F .206 +(If present, this is the name of a host to o)5.206 F -.15(ve)-.15 G .207 +(rride the lo-).15 F 1.112(cal host.)117 273 R -.15(Fo)6.112 G 3.612(re) +.15 G 1.111(xample, in our case we w)-3.762 F 1.111 +(ould set it to \231CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 3.611 +(EDU\232. The).65 F(ef)3.611 E 1.111(fect is that)-.25 F(an)117 285 Q .881(yone kno)-.15 F .882(wn in the database gets their outgoing mail s\ tamped as \231user@CS.Berk)-.25 F(ele)-.1 E -.65(y.)-.15 G(EDU\232,).65 E -.2(bu)117 297 S 2.5(tp).2 G @@ -8404,11 +8505,11 @@ E(emap)-.1 E F1 .375(utility \(in the distrib)2.875 F .375(ution in)-.2 F 1.039(the mak)117 351.2 R 1.039(emap subdirectory\).)-.1 F 1.039 (The te)6.039 F 1.038 (xt \214le is a series of lines corresponding to userdb records;)-.15 F -1.588(each line has a k)117 363.2 R 1.889 -.15(ey a)-.1 H 1.589(nd a v) -.15 F 1.589(alue separated by white space.)-.25 F 1.589(The k)6.589 F -1.889 -.15(ey i)-.1 H 4.089(sa).15 G -.1(lwa)-4.089 G 1.589 -(ys in the format).1 F(described abo)117 375.2 Q .3 -.15(ve \212 f)-.15 -H(or e).15 E(xample:)-.15 E(eric:maildrop)157 391.4 Q 3.984 +.701(each line has a k)117 363.2 R 1.001 -.15(ey a)-.1 H .701(nd a v).15 +F .702(alue separated by white space.)-.25 F .702(The k)5.702 F 1.002 +-.15(ey i)-.1 H 3.202(sa).15 G -.1(lwa)-3.202 G .702 +(ys in the format de-).1 F(scribed abo)117 375.2 Q .3 -.15(ve \212 f) +-.15 H(or e).15 E(xample:)-.15 E(eric:maildrop)157 391.4 Q 3.984 (This \214le is normally installed in a system directory; for e)117 407.6 R 3.984(xample, it might be called)-.15 F F3(/etc/mail/user)117 419.6 Q(db)-.37 E F1 5(.T)C 2.5(om)-5.8 G(ak)-2.5 E 2.5(et)-.1 G @@ -8455,15 +8556,15 @@ F .664(ws multiple databases will be)-.25 F 2.822(used. If)174 641 R 2.472(,e)-.52 G .472(.g., virtual)-2.472 F (hosting and mapping local addresses into a generic form as e)72 692.4 Q (xplained in cf/README.)-.12 E 0 Cg EP -%%Page: 95 91 +%%Page: 96 92 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-95)195.86 E/F1 10/Times-Roman@0 SF 39.5(CWDB If)102 96 R -(set, use the cdb \(tin)2.5 E(ycdb\) package.)-.15 E 32.84(NEWDB If)102 -112.2 R .142(set, use the ne)2.642 F 2.642(wd)-.25 G .142 -(atabase package from Berk)-2.642 F(ele)-.1 E 2.641(y\()-.15 G .141 +/F0 10/Times-Bold@0 SF 193.36(SMM:08-96 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 39.5 +(CWDB If)102 96 R(set, use the cdb \(tin)2.5 E(ycdb\) package.)-.15 E +32.84(NEWDB If)102 112.2 R .142(set, use the ne)2.642 F 2.642(wd)-.25 G +.142(atabase package from Berk)-2.642 F(ele)-.1 E 2.641(y\()-.15 G .141 (from 4.4BSD\).)-2.641 F .141(This package)5.141 F .266 (is substantially f)174 124.2 R .267(aster than DBM or NDBM.)-.1 F .267 (If NEWDB and NDBM are both set,)5.267 F/F2 10/Times-Italic@0 SF @@ -8472,17 +8573,17 @@ BP R .12(support for NIS.)2.62 F .119(If set together with)5.119 F F2(both) 2.619 E F1 .119(NEWDB and NDBM,)2.619 F F2(sendmail)2.619 E F1 .947(wil\ l create both DBM and NEWDB \214les if and only if an alias \214le incl\ -udes the)174 164.4 R 3.409(substring \231/yp/\232 in the name.)174 176.4 -R 3.409(This is intended for compatibility with Sun)8.409 F -(Microsystems')174 188.4 Q F2(mkalias)2.5 E F1 +udes the)174 164.4 R 1.667(substring \231/yp/\232 in the name.)174 176.4 +R 1.666(This is intended for compatibility with Sun Mi-)6.667 F +(crosystems')174 188.4 Q F2(mkalias)2.5 E F1 (program used on YP masters.)2.5 E 28.94(NISPLUS Compile)102 204.6 R (in support for NIS+.)2.5 E 26.73(NETINFO Compile)102 220.8 R (in support for NetInfo \(NeXT stations\).)2.5 E(LD)102 237 Q 22.12 (APMAP Compile)-.4 F 1.225(in support for LD)3.725 F 1.225 (AP X500 queries.)-.4 F 1.226(Requires libldap and liblber from)6.226 F -2.799(the Umich LD)174 249 R 2.798(AP 3.2 or 3.3 release or equi)-.4 F --.25(va)-.25 G 2.798(lent libraries for other LD).25 F(AP)-.4 E -(libraries such as OpenLD)174 261 Q(AP)-.4 E(.)-1.11 E 32.84 +1.707(the Umich LD)174 249 R 1.707(AP 3.2 or 3.3 release or equi)-.4 F +-.25(va)-.25 G 1.707(lent libraries for other LD).25 F 1.706(AP li-)-.4 +F(braries such as OpenLD)174 261 Q(AP)-.4 E(.)-1.11 E 32.84 (HESIOD Compile)102 277.2 R(in support for Hesiod.)2.5 E 22.83 (MAP_NSD Compile)102 293.4 R(in support for IRIX NSD lookups.)2.5 E 9.5 (MAP_REGEX Compile)102 309.6 R(in support for re)2.5 E(gular e)-.15 E @@ -8525,14 +8626,13 @@ mpile time options are listed here for rulesets and macros, and in)117 is b)5.951 F(uilt)-.2 E(from source.)117 660 Q (Enabled FFRs in a binary can be listed with)5 E(sendmail -d0.13 < /de) 157 676.2 Q(v/null | grep FFR)-.25 E 0 Cg EP -%%Page: 96 92 +%%Page: 97 93 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-96 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E 2.5(6.2. P)87 96 R -(arameters in sendmail/conf)-.1 E(.h)-.15 E/F1 10/Times-Roman@0 SF -.15 -(Pa)127 112.2 S .895 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-97)195.86 E 2.5(6.2. P)87 96 R(arameters in sendmail/conf)-.1 E +(.h)-.15 E/F1 10/Times-Roman@0 SF -.15(Pa)127 112.2 S .895 (rameters and compilation options are de\214ned in conf.h.).15 F .896 (Most of these need not normally)5.895 F .193(be tweak)102 124.2 R .192 (ed; common parameters are all in sendmail.cf.)-.1 F(Ho)5.192 E(we)-.25 @@ -8580,11 +8680,12 @@ Q(WSETS [200])-.55 E .432(The maximum number of re).01 F .432 -.74 F .492(with a v)2.992 F .491(alue of 200 an)-.25 F (attempt to use `)188.4 421.8 Q(`S99')-.74 E 2.5('w)-.74 G (ill succeed, b)-2.5 E(ut `)-.2 E(`S100')-.74 E 2.5('w)-.74 G(ill f)-2.5 -E(ail.)-.1 E(MAXPRIORITIES [25])102 438 Q 2.481(The maximum number of v) -188.4 450 R 2.482(alues for the \231Precedence:\232 \214eld that may be) --.25 F(de\214ned \(using the)188.4 462 Q F0(P)2.5 E F1 -(line in sendmail.cf\).)2.5 E(MAXUSERENVIR)102 478.2 Q(ON [100])-.4 E -.399(The maximum number of items in the user en)188.4 490.2 R .399 +E(ail.)-.1 E(MAXPRIORITIES [25])102 438 Q 1.002(The maximum number of v) +188.4 450 R 1.003 +(alues for the \231Precedence:\232 \214eld that may be de-)-.25 F +(\214ned \(using the)188.4 462 Q F0(P)2.5 E F1(line in sendmail.cf\).) +2.5 E(MAXUSERENVIR)102 478.2 Q(ON [100])-.4 E .399 +(The maximum number of items in the user en)188.4 490.2 R .399 (vironment that will be passed to)-.4 F(subordinate mailers.)188.4 502.2 Q(MAXMXHOSTS [100])102 518.4 Q (The maximum number of MX records we will accept for an)188.4 530.4 Q @@ -8602,30 +8703,30 @@ art documents; this does not limit the number of compo-)188.4 651 R (AEMONS [10])-.4 E 1.353(The maximum number of sock)188.4 691.2 R 1.353 (ets sendmail will open for accepting connec-)-.1 F(tions on dif)188.4 703.2 Q(ferent ports.)-.25 E 0 Cg EP -%%Page: 97 93 +%%Page: 98 94 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-97)195.86 E/F1 10/Times-Roman@0 SF(MAXMA)102 96 Q(CN)-.4 E -(AMELEN [25])-.35 E(The maximum length of a macro name.)188.4 108 Q -2.851(An)102 124.2 S .351(umber of other compilation options e)-2.851 F -2.851(xist. These)-.15 F .35 -(specify whether or not speci\214c code should be)2.851 F(compiled in.) -102 136.2 Q(Ones mark)5 E(ed with \207 are 0/1 v)-.1 E(alued.)-.25 E -36.69(NETINET\207 If)102 152.4 R .829 +/F0 10/Times-Bold@0 SF 193.36(SMM:08-98 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(MAXMA)102 +96 Q(CN)-.4 E(AMELEN [25])-.35 E(The maximum length of a macro name.) +188.4 108 Q 2.851(An)102 124.2 S .351 +(umber of other compilation options e)-2.851 F 2.851(xist. These)-.15 F +.35(specify whether or not speci\214c code should be)2.851 F +(compiled in.)102 136.2 Q(Ones mark)5 E(ed with \207 are 0/1 v)-.1 E +(alued.)-.25 E 36.69(NETINET\207 If)102 152.4 R .829 (set, support for Internet protocol netw)3.329 F .829 (orking is compiled in.)-.1 F(Pre)5.829 E .83(vious v)-.25 F(er)-.15 E (-)-.2 E .178(sions of)188.4 164.4 R/F2 10/Times-Italic@0 SF(sendmail) 2.678 E F1 .178(referred to this as)2.678 F/F3 9/Times-Roman@0 SF -.36 (DA)2.678 G(EMON).36 E F1 2.677(;t)C .177(his old usage is no)-2.677 F -2.677(wi)-.25 G(ncorrect.)-2.677 E(Def)188.4 176.4 Q 1.87 -(aults on; turn it of)-.1 F 4.37(fi)-.25 G 4.37(nt)-4.37 G 1.87(he Mak) --4.37 F 1.87(e\214le if your system doesn')-.1 F 4.37(ts)-.18 G 1.87 -(upport the)-4.37 F(Internet protocols.)188.4 188.4 Q 31.69 -(NETINET6\207 If)102 204.6 R 2.26(set, support for IPv6 netw)4.76 F 2.26 -(orking is compiled in.)-.1 F 2.26(It must be separately)7.26 F -(enabled by adding)188.4 216.6 Q F0(DaemonP)2.5 E(ortOptions)-.2 E F1 +2.677(wi)-.25 G(ncorrect.)-2.677 E(Def)188.4 176.4 Q .725 +(aults on; turn it of)-.1 F 3.225(fi)-.25 G 3.225(nt)-3.225 G .725 +(he Mak)-3.225 F .725(e\214le if your system doesn')-.1 F 3.225(ts)-.18 +G .725(upport the In-)-3.225 F(ternet protocols.)188.4 188.4 Q 31.69 +(NETINET6\207 If)102 204.6 R .912(set, support for IPv6 netw)3.412 F +.912(orking is compiled in.)-.1 F .911(It must be separately en-)5.911 F +(abled by adding)188.4 216.6 Q F0(DaemonP)2.5 E(ortOptions)-.2 E F1 (settings.)2.5 E 43.35(NETISO\207 If)102 232.8 R .142 (set, support for ISO protocol netw)2.642 F .143 (orking is compiled in \(it may be appropri-)-.1 F @@ -8671,15 +8772,14 @@ are using a non-UNIX mail format, you can set this \215ag to turn of) ature\232 that)-.15 F .83(when it recei)188.4 506.4 R -.15(ve)-.25 G 3.33(sa\231).15 G .83 (host unreachable\232 message it closes all open connections)-3.33 F -1.922(to that host.)188.4 518.4 R 1.922(Since some \214re)6.922 F -.1 -(wa)-.25 G 1.922(ll g).1 F(ate)-.05 E -.1(wa)-.25 G 1.921 -(ys send this error code when you).1 F 2.055(access an unauthorized por\ -t \(such as 113, used by IDENT\), Ultrix cannot)188.4 530.4 R(recei) -188.4 542.4 Q .3 -.15(ve e)-.25 H(mail from such hosts.).15 E 39.45 -(SYSTEM5 Set)102 558.6 R -(all of the compilation parameters appropriate for System V)2.5 E(.) --1.29 E 26.12(HASFLOCK\207 Use)102 574.8 R(Berk)2.845 E(ele)-.1 E -(y-style)-.15 E F0(\215ock)2.845 E F1 .345(instead of System V)2.845 F +.643(to that host.)188.4 518.4 R .643(Since some \214re)5.643 F -.1(wa) +-.25 G .642(ll g).1 F(ate)-.05 E -.1(wa)-.25 G .642 +(ys send this error code when you ac-).1 F .043(cess an unauthorized po\ +rt \(such as 113, used by IDENT\), Ultrix cannot recei)188.4 530.4 R +-.15(ve)-.25 G(email from such hosts.)188.4 542.4 Q 39.45(SYSTEM5 Set) +102 558.6 R(all of the compilation parameters appropriate for System V) +2.5 E(.)-1.29 E 26.12(HASFLOCK\207 Use)102 574.8 R(Berk)2.845 E(ele)-.1 +E(y-style)-.15 E F0(\215ock)2.845 E F1 .345(instead of System V)2.845 F F0(lockf)2.845 E F1 .344(to do \214le locking.)2.845 F .344(Due to)5.344 F .184(the highly unusual semantics of locks across forks in)188.4 586.8 R F0(lockf)2.684 E F1 2.684(,t)C .185(his should al)-2.684 F -.1(wa)-.1 @@ -8697,15 +8797,15 @@ F1 1.917(de\214ned or if you are on)4.417 F(HPUX.)188.4 639 Q(HASUN)102 -.2 H(he).15 E F2 -.1(ge)2.5 G(tdtablesize).1 E F1(\(2\) system call.)A (HASW)102 711.6 Q 22.89(AITPID Set)-1.2 F(this if you ha)2.5 E .3 -.15 (ve t)-.2 H(he).15 E F2(haswaitpid)2.5 E F1(\(2\) system call.)A 0 Cg EP -%%Page: 98 94 +%%Page: 99 95 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-98 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -.74(FA) -102 96 S(ST_PID_RECYCLE).74 E .542(Set this if your system can possibly\ - reuse the same pid in the same second of)188.4 108 R(time.)188.4 120 Q -37.22(SFS_TYPE The)102 136.2 R .517 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-99)195.86 E/F1 10/Times-Roman@0 SF -.74(FA)102 96 S +(ST_PID_RECYCLE).74 E .542(Set this if your system can possibly reuse t\ +he same pid in the same second of)188.4 108 R(time.)188.4 120 Q 37.22 +(SFS_TYPE The)102 136.2 R .517 (mechanism that can be used to get \214le system capacity information.) 3.017 F(The)5.516 E -.25(va)188.4 148.2 S .214 (lues can be one of SFS_UST).25 F 2.435 -1.11(AT \()-.93 H .215 @@ -8792,16 +8892,17 @@ F 2.941(am)203.4 594.6 S(ailer)-2.941 E(,)-.4 E F2(sendmail)2.941 E F1 (xisted. This)-.15 F -.1(wo)3.12 G .62(uld nor).1 F(-)-.2 E (mally be used to stamp the message by e)203.4 723 Q -.15(ve)-.25 G (ryone who handled it.).15 E 0 Cg EP -%%Page: 99 95 +%%Page: 100 96 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-99)195.86 E/F1 10/Times-Roman@0 SF(H_TRA)117 96 Q 39.3(CE If)-.4 -F 1.044(set, this is a timestamp \(trace\) \214eld.)3.544 F 1.043 -(If the number of trace \214elds in a)6.043 F .705(message e)203.4 108 R -.705(xceeds a preset amount the message is returned on the assump-)-.15 -F(tion that it has an aliasing loop.)203.4 120 Q 46.67(H_RCPT If)117 +/F0 10/Times-Bold@0 SF 188.36(SMM:08-100 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(H_TRA)117 +96 Q 39.3(CE If)-.4 F 1.044(set, this is a timestamp \(trace\) \214eld.) +3.544 F 1.043(If the number of trace \214elds in a)6.043 F .705 +(message e)203.4 108 R .705 +(xceeds a preset amount the message is returned on the assump-)-.15 F +(tion that it has an aliasing loop.)203.4 120 Q 46.67(H_RCPT If)117 136.2 R .332(set, this \214eld contains recipient addresses.)2.833 F .332(This is used by the)5.332 F F02.832 E F1 .332(\215ag to)2.832 F 1.349(determine who to send to when it is collecting recipients from \ @@ -8836,18 +8937,18 @@ R(OM,)-.4 E 86.16("from", H_FR)177 369.6 R(OM,)-.4 E 66.72 Q -.15(ve)-.25 G 72.13(d", H_TRA).15 F -1.667(CE | H_FORCE,)-.4 F (/* miscellaneous \214elds */)189.5 525.6 Q("content-transfer)177 537.6 Q 2.5(-encoding", H_CTE,)-.2 F 55.61("content-type", H_CTYPE,)177 549.6 -R 87.1(NULL, 0,)177 573.6 R(};)157 585.6 Q 2.435 -(This structure indicates that the \231T)117 601.8 R 2.435 -(o:\232, \231Resent-T)-.8 F 2.435 -(o:\232, and \231Cc:\232 \214elds all specify recipient)-.8 F 3.161 -(addresses. An)117 613.8 R 3.161<7999>-.15 G .662(Full-Name:\232 \214el\ -d will be deleted unless the required mailer \215ag \(indicated in) --3.161 F .246(the con\214guration \214le\) is speci\214ed.)117 625.8 R -.245(The \231Message:\232 and \231T)5.246 F -.15(ex)-.7 G .245 -(t:\232 \214elds will terminate the header;).15 F 1.936 -(these are used by random dissenters around the netw)117 637.8 R 1.936 -(ork w)-.1 F 4.436(orld. The)-.1 F(\231Recei)4.436 E -.15(ve)-.25 G -1.937(d:\232 \214eld will).15 F(al)117 649.8 Q -.1(wa)-.1 G +R 87.1(NULL, 0,)177 573.6 R(};)157 585.6 Q 1.073 +(This structure indicates that the \231T)117 601.8 R 1.073 +(o:\232, \231Resent-T)-.8 F 1.073 +(o:\232, and \231Cc:\232 \214elds all specify recipient ad-)-.8 F 2.737 +(dresses. An)117 613.8 R 2.737<7999>-.15 G .237(Full-Name:\232 \214eld \ +will be deleted unless the required mailer \215ag \(indicated in the) +-2.737 F 1.493(con\214guration \214le\) is speci\214ed.)117 625.8 R +1.493(The \231Message:\232 and \231T)6.493 F -.15(ex)-.7 G 1.492 +(t:\232 \214elds will terminate the header;).15 F .865 +(these are used by random dissenters around the netw)117 637.8 R .866 +(ork w)-.1 F 3.366(orld. The)-.1 F(\231Recei)3.366 E -.15(ve)-.25 G .866 +(d:\232 \214eld will al-).15 F -.1(wa)117 649.8 S (ys be added, and can be used to trace messages.).1 E .446 (There are a number of important points here.)142 666 R .445 (First, header \214elds are not added automati-)5.446 F .656 @@ -8863,18 +8964,17 @@ E .74(ault processing performed; that is, the)-.1 F 3.24(ya)-.15 G(re) (ere in the message already)-3.875 F 6.375(.S)-.65 G 1.374(econd, the) -6.375 F F2(HdrInfo)3.874 E F1 1.374(structure only speci\214es)3.874 F 0 Cg EP -%%Page: 100 96 +%%Page: 101 97 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-100 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .324(cli\ -ched processing; certain headers are processed specially by ad hoc code\ - re)117 96 R -.05(ga)-.15 G .325(rdless of the sta-).05 F .481 -(tus speci\214ed in)117 108 R/F2 10/Times-Italic@0 SF(HdrInfo)2.981 E F1 -5.481(.F)C .481(or e)-5.631 F .481 -(xample, the \231Sender:\232 and \231From:\232 \214elds are al)-.15 F --.1(wa)-.1 G .48(ys scanned on).1 F(ARP)117 122 Q .751 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-101)190.86 E/F1 10/Times-Roman@0 SF .324(cliched processing; ce\ +rtain headers are processed specially by ad hoc code re)117 96 R -.05 +(ga)-.15 G .325(rdless of the sta-).05 F .481(tus speci\214ed in)117 108 +R/F2 10/Times-Italic@0 SF(HdrInfo)2.981 E F1 5.481(.F)C .481(or e)-5.631 +F .481(xample, the \231Sender:\232 and \231From:\232 \214elds are al) +-.15 F -.1(wa)-.1 G .48(ys scanned on).1 F(ARP)117 122 Q .751 (ANET mail to determine the sender)-.92 F/F3 7/Times-Roman@0 SF(24)-4 I F1 3.251(;t)4 K .75 (his is used to perform the \231return to sender\232 func-)-3.251 F @@ -8955,12 +9055,12 @@ F1(_map_init\(MAP *map, char *ar)A(gs\))-.18 E(The)117 641 Q F2(map) -2.631 F -.12(ve)-.32 G 2.632(lope. The).12 F .632(older ARP)2.632 F .632(ANET protocols did)-.736 F(not completely distinguish en)72 697.8 Q -.12(ve)-.32 G(lope from header).12 E(.)-.44 E 0 Cg EP -%%Page: 101 97 +%%Page: 102 98 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-101)190.86 E/F1 10/Times-Roman@0 SF +/F0 10/Times-Bold@0 SF 188.36(SMM:08-102 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF (The lookup function is called as)142 96 Q/F2 10/Times-Italic@0 SF(xxx) 157 112.2 Q F1(_map_lookup\(MAP *map, char b)A(uf[], char **a)-.2 E 1.3 -.65(v, i)-.2 H(nt *statp\)).65 E(The)117 128.4 Q F2(map)2.772 E F1 .272 @@ -8980,117 +9080,116 @@ E F1 .151(is a list of ar)2.652 F .151(guments passed in from the re) 2.5(lc).15 G(ode.)-2.5 E F0 2.5(6.3.4. Queueing)102 200.4 R(Function)2.5 E F1 .782(The routine)142 216.6 R F2(shouldqueue)3.282 E F1 .783 (is called to decide if a message should be queued or processed)3.283 F -(immediately)117 228.6 Q 6.619(.T)-.65 G 1.618 -(ypically this compares the message priority to the current load a) --7.419 F -.15(ve)-.2 G 4.118(rage. The).15 F(def)117 240.6 Q -(ault de\214nition is:)-.1 E(bool)157 256.8 Q(shouldqueue\(pri, ctime\)) +(immediately)117 228.6 Q 5.32(.T)-.65 G .319 +(ypically this compares the message priority to the current load a)-6.12 +F -.15(ve)-.2 G 2.819(rage. The).15 F(de-)2.819 E -.1(fa)117 240.6 S +(ult de\214nition is:).1 E(bool)157 256.8 Q(shouldqueue\(pri, ctime\)) 157 268.8 Q(long pri;)175 280.8 Q(time_t ctime;)175 292.8 Q({)157 304.8 Q(if \(CurrentLA < QueueLA\))175 316.8 Q(return f)193 328.8 Q(alse;)-.1 E(return \(pri > \(QueueF)175 340.8 Q (actor / \(CurrentLA \255 QueueLA + 1\)\)\);)-.15 E(})157 352.8 Q 2.062 (If the current load a)117 369 R -.15(ve)-.2 G 2.062(rage \(global v).15 F(ariable)-.25 E F2(Curr)4.562 E(entLA)-.37 E F1 4.562(,w)C 2.062 -(hich is set before this function is)-4.562 F 1.058 -(called\) is less than the lo)117 381 R 3.558(wt)-.25 G 1.058 -(hreshold load a)-3.558 F -.15(ve)-.2 G 1.058(rage \(option).15 F F0(x) -3.557 E F1 3.557(,v)C(ariable)-3.807 E F2(QueueLA)3.557 E F1(\),)A F2 -(shouldqueue)3.557 E F1(returns)117 393 Q F3 -.09(fa)3.248 G(lse).09 E -F1 .748(immediately \(that is, it should)3.248 F F2(not)3.248 E F1 3.249 -(queue\). If)3.249 F .749(the current load a)3.249 F -.15(ve)-.2 G .749 -(rage e).15 F .749(xceeds the)-.15 F 1.419(high threshold load a)117 405 -R -.15(ve)-.2 G 1.419(rage \(option).15 F F0(X)3.919 E F1 3.919(,v)C -(ariable)-4.169 E F2(RefuseLA)3.919 E F1(\),)A F2(shouldqueue)3.918 E F1 -(returns)3.918 E F3(true)3.918 E F1(immedi-)3.918 E(ately)117 417 Q -7.125(.O)-.65 G 2.125 -(therwise, it computes the function based on the message priority)-7.125 -F 4.626(,t)-.65 G 2.126(he queue f)-4.626 F(actor)-.1 E(\(option)117 429 -Q F0(q)2.5 E F1 2.5(,g)C(lobal v)-2.5 E(ariable)-.25 E F2(QueueF)2.5 E -(actor)-.75 E F1(\), and the current and threshold load a)A -.15(ve)-.2 -G(rages.).15 E 1.067(An implementation wishing to tak)142 445.2 R 3.567 -(et)-.1 G 1.066(he actual age of the message into account can also) --3.567 F 1.41(use the)117 457.2 R F2(ctime)3.91 E F1(parameter)3.91 E -3.91(,w)-.4 G 1.41(hich is the time that the message w)-3.91 F 1.41 +(hich is set before this function is)-4.562 F .011 +(called\) is less than the lo)117 381 R 2.511(wt)-.25 G .011 +(hreshold load a)-2.511 F -.15(ve)-.2 G .011(rage \(option).15 F F0(x) +2.511 E F1 2.51(,v)C(ariable)-2.76 E F2(QueueLA)2.51 E F1(\),)A F2 +(shouldqueue)2.51 E F1(re-)2.51 E(turns)117 393 Q F3 -.09(fa)3.766 G +(lse).09 E F1 1.266(immediately \(that is, it should)3.766 F F2(not) +3.766 E F1 3.767(queue\). If)3.767 F 1.267(the current load a)3.767 F +-.15(ve)-.2 G 1.267(rage e).15 F 1.267(xceeds the)-.15 F 1.419 +(high threshold load a)117 405 R -.15(ve)-.2 G 1.419(rage \(option).15 F +F0(X)3.919 E F1 3.919(,v)C(ariable)-4.169 E F2(RefuseLA)3.919 E F1(\),)A +F2(shouldqueue)3.918 E F1(returns)3.918 E F3(true)3.918 E F1(immedi-) +3.918 E(ately)117 417 Q 5.605(.O)-.65 G .605 +(therwise, it computes the function based on the message priority)-5.605 +F 3.105(,t)-.65 G .605(he queue f)-3.105 F .605(actor \(op-)-.1 F(tion) +117 429 Q F0(q)2.5 E F1 2.5(,g)C(lobal v)-2.5 E(ariable)-.25 E F2 +(QueueF)2.5 E(actor)-.75 E F1(\), and the current and threshold load a)A +-.15(ve)-.2 G(rages.).15 E 1.067(An implementation wishing to tak)142 +445.2 R 3.567(et)-.1 G 1.066 +(he actual age of the message into account can also)-3.567 F 1.41 +(use the)117 457.2 R F2(ctime)3.91 E F1(parameter)3.91 E 3.91(,w)-.4 G +1.41(hich is the time that the message w)-3.91 F 1.41 (as \214rst submitted to)-.1 F F2(sendmail)3.91 E F1(.)A .929 (Note that the)117 469.2 R F2(pri)3.428 E F1 .928(parameter is already \ weighted by the number of times the message has been)3.428 F .395 (tried \(although this tends to lo)117 481.2 R .395 (wer the priority of the message with time\); the e)-.25 F .395 -(xpectation is that)-.15 F(the)117 493.2 Q F2(ctime)2.674 E F1 -.1(wo) -2.674 G .174 -(uld be used as an \231escape clause\232 to ensure that messages are e) -.1 F -.15(ve)-.25 G .174(ntually processed.).15 F F0 2.5 -(6.3.5. Refusing)102 517.2 R(Incoming SMTP Connections)2.5 E F1 2.062 -(The function)142 533.4 R F2 -.37(re)4.562 G(fuseconnections).37 E F1 -(returns)4.562 E F3(true)4.562 E F1 2.063 -(if incoming SMTP connections should be)4.562 F 3.564(refused. The)117 -545.4 R 1.063(current implementation is based e)3.563 F(xclusi)-.15 E --.15(ve)-.25 G 1.063(ly on the current load a).15 F -.15(ve)-.2 G 1.063 -(rage and the).15 F(refuse load a)117 557.4 Q -.15(ve)-.2 G -(rage option \(option).15 E F0(X)2.5 E F1 2.5(,g)C(lobal v)-2.5 E +(xpectation is that)-.15 F(the)117 493.2 Q F2(ctime)2.5 E F1 -.1(wo)2.5 +G(uld be used as an \231escape clause\232 to ensure that messages are e) +.1 E -.15(ve)-.25 G(ntually processed.).15 E F0 2.5(6.3.5. Refusing)102 +517.2 R(Incoming SMTP Connections)2.5 E F1 .639(The function)142 533.4 R +F2 -.37(re)3.139 G(fuseconnections).37 E F1(returns)3.139 E F3(true) +3.139 E F1 .638(if incoming SMTP connections should be re-)3.139 F 4.16 +(fused. The)117 545.4 R 1.661(current implementation is based e)4.16 F +(xclusi)-.15 E -.15(ve)-.25 G 1.661(ly on the current load a).15 F -.15 +(ve)-.2 G 1.661(rage and the).15 F(refuse load a)117 557.4 Q -.15(ve)-.2 +G(rage option \(option).15 E F0(X)2.5 E F1 2.5(,g)C(lobal v)-2.5 E (ariable)-.25 E F2(RefuseLA)2.5 E F1(\):)A(bool)157 573.6 Q (refuseconnections\(\))157 585.6 Q({)157 597.6 Q (return \(RefuseLA > 0 && CurrentLA >= RefuseLA\);)175 609.6 Q(})157 621.6 Q 2.5(Am)117 637.8 S(ore cle)-2.5 E -.15(ve)-.25 G 2.5(ri).15 G (mplementation could look at more system resources.)-2.5 E F0 2.5 -(6.3.6. Load)102 661.8 R -.6 -1(Av e)2.5 H(rage Computation)1 E F1 .243 +(6.3.6. Load)102 661.8 R -.6 -1(Av e)2.5 H(rage Computation)1 E F1 .244 (The routine)142 678 R F2 -.1(ge)2.743 G(tla).1 E F1 .243 (returns the current load a)2.743 F -.15(ve)-.2 G .243 -(rage \(as a rounded inte).15 F 2.743(ger\). The)-.15 F(distrib)2.744 E -(ution)-.2 E 1.157(includes se)117 690 R -.15(ve)-.25 G 1.157 +(rage \(as a rounded inte).15 F 2.743(ger\). The)-.15 F(distrib)2.743 E +(ution)-.2 E 1.156(includes se)117 690 R -.15(ve)-.25 G 1.157 (ral possible implementations.).15 F 1.157(If you are porting to a ne) 6.157 F 3.657(we)-.25 G -.4(nv)-3.657 G 1.157(ironment you may).4 F 0 Cg EP -%%Page: 102 98 +%%Page: 103 99 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-102 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(need to add some ne)117 98 Q 2.5(wt)-.25 G(weaks.)-2.5 E/F2 7 -/Times-Roman@0 SF(25)-4 I F0 2.5(6.4. Con\214guration)87 122 R -(in sendmail/daemon.c)2.5 E F1 .127(The \214le)127 138.2 R/F3 10 -/Times-Italic@0 SF(sendmail/daemon.c)2.627 E F1 .128 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-103)190.86 E/F1 10/Times-Roman@0 SF(need to add some ne)117 98 Q +2.5(wt)-.25 G(weaks.)-2.5 E/F2 7/Times-Roman@0 SF(25)-4 I F0 2.5 +(6.4. Con\214guration)87 122 R(in sendmail/daemon.c)2.5 E F1 .128 +(The \214le)127 138.2 R/F3 10/Times-Italic@0 SF(sendmail/daemon.c)2.628 +E F1 .128 (contains a number of routines that are dependent on the local net-) 2.628 F -.1(wo)102 150.2 S(rking en).1 E 2.5(vironment. The)-.4 F -.15 (ve)2.5 G(rsion supplied assumes you ha).15 E .3 -.15(ve B)-.2 H (SD style sock).15 E(ets.)-.1 E 2.16(In pre)127 166.4 R 2.16 (vious releases, we recommended that you modify the routine)-.25 F F3 -(maphostname)4.66 E F1 2.16(if you)4.66 F -.1(wa)102 178.4 S 1.918 -(nted to generalize).1 F F0($[)4.418 E F1(...)4.418 E F0($])4.418 E F1 -4.418(lookups. W)4.418 F 4.418(en)-.8 G 2.418 -.25(ow r)-4.418 H 1.918 -(ecommend that you create a ne).25 F 4.419(wk)-.25 G -.15(ey)-4.519 G -1.919(ed map).15 F(instead.)102 190.4 Q F0 2.5(6.5. LD)87 214.4 R(AP) +(maphostname)4.66 E F1 2.16(if you)4.66 F -.1(wa)102 178.4 S 1.005 +(nted to generalize).1 F F0($[)3.505 E F1(...)3.505 E F0($])3.505 E F1 +3.505(lookups. W)3.505 F 3.505(en)-.8 G 1.505 -.25(ow r)-3.505 H 1.005 +(ecommend that you create a ne).25 F 3.504(wk)-.25 G -.15(ey)-3.604 G +1.004(ed map in-).15 F(stead.)102 190.4 Q F0 2.5(6.5. LD)87 214.4 R(AP) -.35 E F1(In this section we assume that)127 230.6 Q F3(sendmail)2.5 E F1(has been compiled with support for LD)2.5 E(AP)-.4 E(.)-1.11 E F0 2.5 -(6.5.1. LD)102 254.6 R(AP Recursion)-.35 E F1(LD)142 270.8 Q .35 +(6.5.1. LD)102 254.6 R(AP Recursion)-.35 E F1(LD)142 270.8 Q .349 (AP Recursion allo)-.4 F .349(ws you to add types to the search attrib) --.25 F .349(utes on an LD)-.2 F .349(AP map speci-)-.4 F 2.5 +-.25 F .35(utes on an LD)-.2 F .35(AP map speci-)-.4 F 2.5 (\214cation. The)117 282.8 R(syntax is:)2.5 E117 299 Q F3 -.37(AT) 2.5 G(TRIB).37 E(UTE)-.1 E F1([:)A F3(TYPE)A F1([:)A F3(OBJECTCLASS)A F1 ([|)A F3(OBJECTCLASS)A F1(|...]]])A(The ne)142 315.2 Q(w)-.25 E F3(TYPE) -2.5 E F1 2.5(sa)C(re:)-2.5 E 26.17(NORMAL This)117 331.4 R(attrib)3.578 -E 1.078(ute type speci\214es the attrib)-.2 F 1.079 -(ute to add to the results string.)-.2 F 1.079(This is)6.079 F(the def) -189 343.4 Q(ault.)-.1 E 55.06(DN An)117 359.6 R 2.822(ym)-.15 G .322 -(atches for this attrib)-2.822 F .322(ute are e)-.2 F .321 -(xpected to ha)-.15 F .621 -.15(ve a v)-.2 H .321 -(alue of a fully quali\214ed)-.1 F 1.521(distinguished name.)189 371.6 R -F3(sendmail)6.521 E F1 1.521(will lookup that DN and apply the attrib) -4.021 F(utes)-.2 E(requested to the returned DN record.)189 383.6 Q(FIL) -117 399.8 Q 36.53(TER An)-.92 F 2.653(ym)-.15 G .153 -(atches for this attrib)-2.653 F .153(ute are e)-.2 F .153 +2.5 E F1 2.5(sa)C(re:)-2.5 E 26.17(NORMAL This)117 331.4 R(attrib)3.579 +E 1.079(ute type speci\214es the attrib)-.2 F 1.078 +(ute to add to the results string.)-.2 F 1.078(This is)6.078 F(the def) +189 343.4 Q(ault.)-.1 E 55.06(DN An)117 359.6 R 2.821(ym)-.15 G .321 +(atches for this attrib)-2.821 F .321(ute are e)-.2 F .321 +(xpected to ha)-.15 F .622 -.15(ve a v)-.2 H .322 +(alue of a fully quali\214ed)-.1 F .147(distinguished name.)189 371.6 R +F3(sendmail)5.147 E F1 .146(will lookup that DN and apply the attrib) +2.647 F .146(utes re-)-.2 F(quested to the returned DN record.)189 383.6 +Q(FIL)117 399.8 Q 36.53(TER An)-.92 F 2.652(ym)-.15 G .153 +(atches for this attrib)-2.652 F .153(ute are e)-.2 F .153 (xpected to ha)-.15 F .453 -.15(ve a v)-.2 H .153(alue of an LD)-.1 F -.152(AP search)-.4 F(\214lter)189 411.8 Q(.)-.55 E F3(sendmail)5.697 E -F1 .698(will perform a lookup with the same parameters as the origi-) -3.197 F(nal search b)189 423.8 Q +.153(AP search)-.4 F(\214lter)189 411.8 Q(.)-.55 E F3(sendmail)5.698 E +F1 .697(will perform a lookup with the same parameters as the origi-) +3.198 F(nal search b)189 423.8 Q (ut replaces the search \214lter with the one speci\214ed here.)-.2 E 49.5(URL An)117 440 R 2.87(ym)-.15 G .37(atches for this attrib)-2.87 F .37(ute are e)-.2 F .37(xpected to ha)-.15 F .67 -.15(ve a v)-.2 H .37 -(alue of an LD)-.1 F .37(AP URL.)-.4 F F3(sendmail)189 452 Q F1 1.947 -(will perform a lookup of that URL and use the results from the)4.446 F -(attrib)189 464 Q .39(utes named in that URL.)-.2 F .389(Note ho)5.389 F -(we)-.25 E -.15(ve)-.25 G 2.889(rt).15 G .389 -(hat the search is done using the)-2.889 F 2.622(current LD)189 476 R +(alue of an LD)-.1 F .37(AP URL.)-.4 F F3(sendmail)189 452 Q F1 .876 +(will perform a lookup of that URL and use the results from the at-) +3.376 F(trib)189 464 Q .944(utes named in that URL.)-.2 F .945(Note ho) +5.944 F(we)-.25 E -.15(ve)-.25 G 3.445(rt).15 G .945 +(hat the search is done using the)-3.445 F 2.622(current LD)189 476 R 2.622(AP connection, re)-.4 F -.05(ga)-.15 G 2.622 (rdless of what is speci\214ed as the scheme,).05 F(LD)189 488 Q (AP host, and LD)-.4 E(AP port in the LD)-.4 E(AP URL.)-.4 E(An)117 @@ -9099,17 +9198,17 @@ F1 .698(will perform a lookup with the same parameters as the origi-) -.2 E -.15(ve)-.15 G(.).15 E .91(The optional)142 520.4 R F3 (OBJECTCLASS)3.41 E F1 .91 (\(| separated\) list contains the objectClass v)3.41 F .91 -(alues for which)-.25 F 1.398(that attrib)117 532.4 R 1.398 -(ute applies.)-.2 F 1.399(If the list is gi)6.398 F -.15(ve)-.25 G 1.399 +(alues for which)-.25 F 1.399(that attrib)117 532.4 R 1.399 +(ute applies.)-.2 F 1.399(If the list is gi)6.399 F -.15(ve)-.25 G 1.399 (n, the attrib).15 F 1.399(ute named will only be used if the LD)-.2 F (AP)-.4 E 1.111(record being returned is a member of that object class.) -117 544.4 R 1.111(Note that if these ne)6.111 F 3.611(wv)-.25 G 1.111 -(alue attrib)-3.861 F(ute)-.2 E F3(TYPE)117 556.4 Q F1 2.936(sa)C .436(\ +117 544.4 R 1.111(Note that if these ne)6.111 F 3.612(wv)-.25 G 1.112 +(alue attrib)-3.862 F(ute)-.2 E F3(TYPE)117 556.4 Q F1 2.937(sa)C .436(\ re used in an AliasFile option setting, it will need to be double quote\ -d to pre)-2.936 F -.15(ve)-.25 G(nt).15 E F3(send-)2.937 E(mail)117 -568.4 Q F1(from misparsing the colons.)2.5 E .258(Note that LD)142 584.6 +d to pre)-2.937 F -.15(ve)-.25 G(nt).15 E F3(send-)2.936 E(mail)117 +568.4 Q F1(from misparsing the colons.)2.5 E .257(Note that LD)142 584.6 R .257(AP recursion attrib)-.4 F .257 -(utes which do not ultimately point to an LD)-.2 F .257(AP record are) +(utes which do not ultimately point to an LD)-.2 F .258(AP record are) -.4 F(not considered an error)117 596.6 Q(.)-.55 E F0 2.5 (6.5.1.1. Example)117 620.6 R F1 .218(Since e)157 636.8 R .218 (xamples usually help clarify)-.15 F 2.718(,h)-.65 G .218(ere is an e) @@ -9128,38 +9227,39 @@ R .257(AP recursion attrib)-.4 F .257 688.4 DL 208 688.4 204 688.4 DL 212 688.4 208 688.4 DL 216 688.4 212 688.4 DL/F5 5/Times-Roman@0 SF(25)93.6 698.8 Q/F6 8/Times-Roman@0 SF (If you do, please send updates to sendmail@Sendmail.ORG.)3.2 I 0 Cg EP -%%Page: 103 99 +%%Page: 104 100 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-103)190.86 E/F1 10/Times-Roman@0 SF 2.5(OL)172 96 S -.4(DA)-2.5 -G(PDef).4 E(aultSpec=-h ldap.e)-.1 E(xample.com -b dc=e)-.15 E -(xample,dc=com)-.15 E -2.15 -.25(Ke x)172 120 T(ample ldap).25 E(-z,) -194.5 132 Q(-k \(&\(objectClass=sendmailMT)194.5 144 Q -(AAliasObject\)\(sendmailMT)-.93 E(AK)-.93 E -.15(ey)-.25 G(=%0\)\)).15 -E(-v sendmailMT)194.5 156 Q(AAliasV)-.93 E(alue,mail:NORMAL:inetOr)-1.11 -E(gPerson,)-.18 E(uniqueMember:DN:groupOfUniqueNames,)202 168 Q -(sendmailMT)202 180 Q(AAliasSearch:FIL)-.93 E(TER:sendmailMT)-.92 E -(AAliasObject,)-.93 E(sendmailMT)202 192 Q(AAliasURL:URL:sendmailMT)-.93 -E(AAliasObject)-.93 E(That de\214nition speci\214es that:)157 212.4 Q 5 -<8341>137 228.6 S .952 -.15(ny v)-5 H .652(alue in a)-.1 F/F2 9 -/Times-Roman@0 SF(sendmailMT)3.152 E(AAliasV)-.837 E(alue)-.999 E F1 -(attrib)3.152 E .651(ute will be added to the result string re)-.2 F --.05(ga)-.15 G(rd-).05 E(less of object class.)145.5 240.6 Q 5<8354>137 -252.6 S(he)-5 E F2(mail)2.551 E F1(attrib)2.551 E .051 -(ute will be added to the result string if the LD)-.2 F .052 +/F0 10/Times-Bold@0 SF 188.36(SMM:08-104 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5(OL) +172 96 S -.4(DA)-2.5 G(PDef).4 E(aultSpec=-h ldap.e)-.1 E +(xample.com -b dc=e)-.15 E(xample,dc=com)-.15 E -2.15 -.25(Ke x)172 120 +T(ample ldap).25 E(-z,)194.5 132 Q(-k \(&\(objectClass=sendmailMT)194.5 +144 Q(AAliasObject\)\(sendmailMT)-.93 E(AK)-.93 E -.15(ey)-.25 G +(=%0\)\)).15 E(-v sendmailMT)194.5 156 Q(AAliasV)-.93 E +(alue,mail:NORMAL:inetOr)-1.11 E(gPerson,)-.18 E +(uniqueMember:DN:groupOfUniqueNames,)202 168 Q(sendmailMT)202 180 Q +(AAliasSearch:FIL)-.93 E(TER:sendmailMT)-.92 E(AAliasObject,)-.93 E +(sendmailMT)202 192 Q(AAliasURL:URL:sendmailMT)-.93 E(AAliasObject)-.93 +E(That de\214nition speci\214es that:)157 212.4 Q 5<8341>137 228.6 S +.951 -.15(ny v)-5 H .651(alue in a)-.1 F/F2 9/Times-Roman@0 SF +(sendmailMT)3.151 E(AAliasV)-.837 E(alue)-.999 E F1(attrib)3.151 E .652 +(ute will be added to the result string re)-.2 F -.05(ga)-.15 G(rd-).05 +E(less of object class.)145.5 240.6 Q 5<8354>137 252.6 S(he)-5 E F2 +(mail)2.552 E F1(attrib)2.552 E .052 +(ute will be added to the result string if the LD)-.2 F .051 (AP record is a member of the)-.4 F F2(inetOr)145.5 264.6 Q(gPerson) -.162 E F1(object class.)2.5 E 5<8354>137 276.6 S(he)-5 E F2 -(uniqueMember)4.597 E F1(attrib)4.597 E 2.097(ute is a recursi)-.2 F +(uniqueMember)4.596 E F1(attrib)4.597 E 2.097(ute is a recursi)-.2 F 2.397 -.15(ve a)-.25 H(ttrib).15 E 2.097(ute, used only in)-.2 F F2 -(groupOfUniqueNames)4.596 E F1 .549(records, and should contain an LD) -145.5 288.6 R .549(AP DN pointing to another LD)-.4 F .55(AP record.)-.4 -F .55(The desire)5.55 F(here is to return the)145.5 300.6 Q F2(mail)2.5 -E F1(attrib)2.5 E(ute from those DNs.)-.2 E 5<8354>137 312.6 S(he)-5 E -F2(sendmailMT)4.374 E(AAliasSearch)-.837 E F1(attrib)4.374 E 1.874 -(ute and)-.2 F F2(sendmailMT)4.374 E(AAliasURL)-.837 E F1 1.873 -(are both used only if)4.374 F 2.083(referenced in a)145.5 324.6 R F2 +(groupOfUniqueNames)4.597 E F1 .55(records, and should contain an LD) +145.5 288.6 R .549(AP DN pointing to another LD)-.4 F .549(AP record.) +-.4 F .549(The desire)5.549 F(here is to return the)145.5 300.6 Q F2 +(mail)2.5 E F1(attrib)2.5 E(ute from those DNs.)-.2 E 5<8354>137 312.6 S +(he)-5 E F2(sendmailMT)4.373 E(AAliasSearch)-.837 E F1(attrib)4.373 E +1.873(ute and)-.2 F F2(sendmailMT)4.374 E(AAliasURL)-.837 E F1 1.874 +(are both used only if)4.374 F 2.084(referenced in a)145.5 324.6 R F2 (sendmailMT)4.584 E(AAliasObject)-.837 E F1 7.084(.T)C(he)-7.084 E 4.584 (ya)-.15 G 2.084(re both recursi)-4.584 F -.15(ve)-.25 G 4.584(,t).15 G 2.084(he \214rst for a ne)-4.584 F(w)-.25 E(LD)145.5 336.6 Q @@ -9167,139 +9267,139 @@ F2(sendmailMT)4.374 E(AAliasSearch)-.837 E F1(attrib)4.374 E 1.874 (6.6. ST)87 360.6 R(AR)-.9 E(TTLS)-.4 E F1 .47 (In this section we assume that)127 376.8 R/F3 10/Times-Italic@0 SF (sendmail)2.97 E F1 .47(has been compiled with support for ST)2.97 F(AR) --.93 E 2.97(TTLS. T)-.6 F(o)-.8 E .608 +-.93 E 2.97(TTLS. T)-.6 F(o)-.8 E .609 (properly understand the use of ST)102 388.8 R(AR)-.93 E .609(TTLS in) -.6 F F3(sendmail)3.109 E F1 3.109(,i)C 3.109(ti)-3.109 G 3.109(sn) --3.109 G .609(ecessary to understand at least some)-3.109 F 1.856 +-3.109 G .608(ecessary to understand at least some)-3.109 F 1.855 (basics about X.509 certi\214cates and public k)102 400.8 R 2.155 -.15 -(ey c)-.1 H(ryptograph).15 E 5.655 -.65(y. T)-.05 H 1.855 +(ey c)-.1 H(ryptograph).15 E 5.655 -.65(y. T)-.05 H 1.856 (his information can be found in).65 F (books about SSL/TLS or on WWW sites, e.g., \231https://www)102 412.8 Q (.OpenSSL.or)-.65 E(g/\232.)-.18 E F0 2.5(6.6.1. Certi\214cates)102 436.8 R -.25(fo)2.5 G 2.5(rS).25 G -.9(TA)-2.5 G -.4(RT).9 G(TLS).4 E F1 -.437(When acting as a serv)142 453 R(er)-.15 E(,)-.4 E F3(sendmail)2.937 -E F1 .438(requires X.509 certi\214cates to support ST)2.937 F(AR)-.93 E -.438(TTLS: one)-.6 F 1.45(as certi\214cate for the serv)117 465 R 1.45 +.438(When acting as a serv)142 453 R(er)-.15 E(,)-.4 E F3(sendmail)2.938 +E F1 .437(requires X.509 certi\214cates to support ST)2.938 F(AR)-.93 E +.437(TTLS: one)-.6 F 1.45(as certi\214cate for the serv)117 465 R 1.45 (er \(Serv)-.15 F 1.45(erCertFile and corresponding pri)-.15 F -.25(va) -.25 G 1.45(te Serv).25 F(erK)-.15 E -.15(ey)-.25 G 1.45 -(File\) at least).15 F .244(one root CA \(CA)117 477 R .245(CertFile\),\ +(File\) at least).15 F .245(one root CA \(CA)117 477 R .244(CertFile\),\ i.e., a certi\214cate that is used to sign other certi\214cates, and a\ path to a)-.4 F .766 (directory which contains \(zero or more\) other CAs \(CA)117 489 R -(CertP)-.4 E 3.266(ath\). The)-.15 F .766(\214le speci\214ed via CA) -3.266 F(C-)-.4 E 1.554(ertFile can contain se)117 501 R -.15(ve)-.25 G -1.554(ral certi\214cates of CAs.).15 F 1.555 -(The DNs of these certi\214cates are sent to the)6.555 F .034 -(client during the TLS handshak)117 513 R 2.534(e\()-.1 G .033 +(CertP)-.4 E 3.266(ath\). The)-.15 F .767(\214le speci\214ed via CA) +3.266 F(C-)-.4 E 1.555(ertFile can contain se)117 501 R -.15(ve)-.25 G +1.555(ral certi\214cates of CAs.).15 F 1.554 +(The DNs of these certi\214cates are sent to the)6.555 F .033 +(client during the TLS handshak)117 513 R 2.533(e\()-.1 G .033 (as part of the Certi\214cateRequest\) as the list of acceptable CAs.) --2.534 F(Ho)117 525 Q(we)-.25 E -.15(ve)-.25 G .8 -.4(r, d).15 H 2.5(on) +-2.533 F(Ho)117 525 Q(we)-.25 E -.15(ve)-.25 G .8 -.4(r, d).15 H 2.5(on) .4 G(ot list too man)-2.5 E 2.5(yr)-.15 G (oot CAs in that \214le, otherwise the TLS handshak)-2.5 E 2.5(em)-.1 G (ay f)-2.5 E(ail; e.g.,)-.1 E (error:14094417:SSL routines:SSL3_READ_BYTES:)157 541.2 Q (sslv3 alert ille)157 553.2 Q -.05(ga)-.15 G 2.5(lp).05 G (arameter:s3_pkt.c:964:SSL alert number 47)-2.5 E -1.1(Yo)117 569.4 S -3.073(us)1.1 G .574(hould probably put only the CA cert into that \214l\ -e that signed your o)-3.073 F .574(wn cert\(s\), or at least)-.25 F .543 +3.074(us)1.1 G .574(hould probably put only the CA cert into that \214l\ +e that signed your o)-3.074 F .574(wn cert\(s\), or at least)-.25 F .542 (only those you trust.)117 581.4 R .543(The CA)5.543 F(CertP)-.4 E .543 (ath directory must contain the hashes of each CA certi\214cate)-.15 F -1.584(as \214lenames \(or as links to them\).)117 593.4 R 1.585 -(Symbolic links can be generated with the follo)6.585 F 1.585(wing tw) +1.585(as \214lenames \(or as links to them\).)117 593.4 R 1.584 +(Symbolic links can be generated with the follo)6.585 F 1.584(wing tw) -.25 F(o)-.1 E(\(Bourne\) shell commands:)117 605.4 Q (C=FileName_of_CA_Certi\214cate)157 621.6 Q -(ln -s $C `openssl x509 -noout -hash < $C`.0)157 633.6 Q 2.67(Ab)117 -649.8 S .17(etter w)-2.67 F .17(ay to do this is to use the)-.1 F F0 -(c_r)2.669 E(ehash)-.18 E F1 .169 -(command that is part of the OpenSSL distrib)2.669 F(ution)-.2 E .801(b\ -ecause it handles subject hash collisions by incrementing the number in\ - the suf)117 661.8 R .801(\214x of the \214le-)-.25 F 1.133 -(name of the symbolic link, e.g.,)117 673.8 R F0(.0)3.632 E F1(to)3.632 -E F0(.1)3.632 E F1 3.632(,a)C 1.132(nd so on.)-3.632 F 1.132 -(An X.509 certi\214cate is also required for)6.132 F 1.527 -(authentication in client mode \(ClientCertFile and corresponding pri) -117 685.8 R -.25(va)-.25 G 1.527(te ClientK).25 F -.15(ey)-.25 G 1.527 -(File\), ho).15 F(w-)-.25 E -2.15 -.25(ev e)117 697.8 T -.4(r,).25 G F3 -(sendmail)3.222 E F1 .322(will al)2.822 F -.1(wa)-.1 G .322(ys use ST).1 -F(AR)-.93 E .321(TTLS when of)-.6 F .321(fered by a serv)-.25 F(er)-.15 -E 5.321(.T)-.55 G .321(he client and serv)-5.321 F .321(er cer)-.15 F(-) --.2 E .03(ti\214cates can be identical.)117 709.8 R .03(Certi\214cates \ -can be obtained from a certi\214cate authority or created with)5.03 F -.869(the help of OpenSSL.)117 721.8 R .869 -(The required format for certi\214cates and pri)5.869 F -.25(va)-.25 G -.868(te k).25 F -.15(ey)-.1 G 3.368(si).15 G 3.368(sP)-3.368 G 3.368 -(EM. T)-3.368 F 3.368(oa)-.8 G(llo)-3.368 E(w)-.25 E 0 Cg EP -%%Page: 104 100 +(ln -s $C `openssl x509 -noout -hash < $C`.0)157 633.6 Q 2.669(Ab)117 +649.8 S .169(etter w)-2.669 F .169(ay to do this is to use the)-.1 F F0 +(c_r)2.669 E(ehash)-.18 E F1 .17 +(command that is part of the OpenSSL distrib)2.67 F(ution)-.2 E .801(be\ +cause it handles subject hash collisions by incrementing the number in \ +the suf)117 661.8 R .8(\214x of the \214le-)-.25 F .269 +(name of the symbolic link, e.g.,)117 673.8 R F0(.0)2.769 E F1(to)2.769 +E F0(.1)2.769 E F1 2.769(,a)C .269(nd so on.)-2.769 F .269 +(An X.509 certi\214cate is also required for au-)5.269 F .845 +(thentication in client mode \(ClientCertFile and corresponding pri)117 +685.8 R -.25(va)-.25 G .844(te ClientK).25 F -.15(ey)-.25 G .844 +(File\), ho).15 F(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F3(sendmail)117 +697.8 Q F1 1.065(will al)3.565 F -.1(wa)-.1 G 1.065(ys use ST).1 F(AR) +-.93 E 1.065(TTLS when of)-.6 F 1.065(fered by a serv)-.25 F(er)-.15 E +6.065(.T)-.55 G 1.065(he client and serv)-6.065 F 1.065(er certi\214-) +-.15 F .825(cates can be identical.)117 709.8 R .824(Certi\214cates can\ + be obtained from a certi\214cate authority or created with)5.825 F .868 +(the help of OpenSSL.)117 721.8 R .869 +(The required format for certi\214cates and pri)5.868 F -.25(va)-.25 G +.869(te k).25 F -.15(ey)-.1 G 3.369(si).15 G 3.369(sP)-3.369 G 3.369 +(EM. T)-3.369 F 3.369(oa)-.8 G(llo)-3.369 E(w)-.25 E 0 Cg EP +%%Page: 105 101 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-104 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.123 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-105)190.86 E/F1 10/Times-Roman@0 SF 1.124 (for automatic startup of sendmail, pri)117 96 R -.25(va)-.25 G 1.124 (te k).25 F -.15(ey)-.1 G 3.624(s\().15 G(Serv)-3.624 E(erK)-.15 E -.15 -(ey)-.25 G 1.124(File, ClientK).15 F -.15(ey)-.25 G 1.124 +(ey)-.25 G 1.123(File, ClientK).15 F -.15(ey)-.25 G 1.123 (File\) must be stored).15 F 3.04(unencrypted. The)117 108 R -.1(ke)3.04 G .54(ys are only protected by the permissions of the \214le system.) -.05 F(Ne)5.54 E -.15(ve)-.25 G 3.04(rm).15 G(ak)-3.04 E 3.04(ea)-.1 G (pri)117 120 Q -.25(va)-.25 G(te k).25 E .3 -.15(ey a)-.1 H -.25(va)-.05 -G(ilable to a third party).25 E(.)-.65 E .953(The options)142 136.2 R/F2 -10/Times-Italic@0 SF(ClientCertF)3.453 E(ile)-.45 E F1(,)A F2(ClientK) -3.453 E -.3(ey)-.35 G -.45(Fi).3 G(le).45 E F1(,)A F2(ServerCertF)3.453 +G(ilable to a third party).25 E(.)-.65 E .954(The options)142 136.2 R/F2 +10/Times-Italic@0 SF(ClientCertF)3.454 E(ile)-.45 E F1(,)A F2(ClientK) +3.454 E -.3(ey)-.35 G -.45(Fi).3 G(le).45 E F1(,)A F2(ServerCertF)3.453 E(ile)-.45 E F1 3.453(,a)C(nd)-3.453 E F2(ServerK)3.453 E -.3(ey)-.35 G --.45(Fi).3 G(le).45 E F1 .954(can tak)3.454 F 3.454(ea)-.1 G .946(secon\ +-.45(Fi).3 G(le).45 E F1 .953(can tak)3.453 F 3.453(ea)-.1 G .946(secon\ d \214le name, which must be separated from the \214rst with a comma \(\ -note: do not use an)117 148.2 R(y)-.15 E .657 +note: do not use an)117 148.2 R(y)-.15 E .658 (spaces\) to set up a second cert/k)117 160.2 R .957 -.15(ey p)-.1 H (air).15 E 5.657(.T)-.55 G .657(his can be used to ha)-5.657 F .957 -.15 -(ve c)-.2 H .658(erts of dif).15 F .658(ferent types, e.g.,)-.25 F +(ve c)-.2 H .657(erts of dif).15 F .657(ferent types, e.g.,)-.25 F (RSA and DSA.)117 172.2 Q F0 2.5(6.6.2. PRNG)102 196.2 R -.25(fo)2.5 G 2.5(rS).25 G -.9(TA)-2.5 G -.4(RT).9 G(TLS).4 E F1(ST)142 212.4 Q(AR) -.93 E .504(TTLS requires a strong pseudo random number generator \(PRN\ -G\) to operate prop-)-.6 F(erly)117 224.4 Q 5.055(.D)-.65 G .056 -(epending on the TLS library you use, it may be required to e)-5.055 F -.056(xplicitly initialize the PRNG)-.15 F 1.155(with random data.)117 +G\) to operate prop-)-.6 F(erly)117 224.4 Q 5.056(.D)-.65 G .056 +(epending on the TLS library you use, it may be required to e)-5.056 F +.055(xplicitly initialize the PRNG)-.15 F 1.154(with random data.)117 236.4 R 1.154(OpenSSL mak)6.154 F 1.154(es use of)-.1 F F0(/de)3.654 E -(v/urandom\(4\))-.15 E F1 1.154(if a)3.654 F -.25(va)-.2 G 1.154 -(ilable \(this corresponds to).25 F 1.442 -(the compile \215ag HASURANDOMDEV\).)117 248.4 R 1.443 -(On systems which lack this support, a random \214le)6.442 F .224 +(v/urandom\(4\))-.15 E F1 1.154(if a)3.654 F -.25(va)-.2 G 1.155 +(ilable \(this corresponds to).25 F 1.443 +(the compile \215ag HASURANDOMDEV\).)117 248.4 R 1.442 +(On systems which lack this support, a random \214le)6.443 F .223 (must be speci\214ed in the)117 260.4 R F2(sendmail.cf)2.723 E F1 .223 (\214le using the option RandFile.)2.723 F .223(It is)5.223 F F0(str) -2.723 E(ongly)-.18 E F1 .223(advised to use)2.723 F .872(the "Entrop)117 -272.4 R 3.372(yG)-.1 G .872(athering Daemon" EGD from Brian W)-3.372 F -.873(arner on those systems to pro)-.8 F .873(vide useful)-.15 F 1.414 -(random data.)117 284.4 R 1.414(In this case,)6.414 F F2(sendmail)3.914 -E F1 1.413(must be compiled with the \215ag EGD, and the RandFile)3.913 -F .731(option must point to the EGD sock)117 296.4 R 3.231(et. If)-.1 F -(neither)3.231 E F0(/de)3.232 E(v/urandom\(4\))-.15 E F1 .732 -(nor EGD are a)3.232 F -.25(va)-.2 G .732(ilable, you).25 F(ha)117 308.4 -Q .474 -.15(ve t)-.2 H 2.674(om).15 G(ak)-2.674 E 2.674(es)-.1 G .174 -(ure that useful random data is a)-2.674 F -.25(va)-.2 G .174 -(ilable all the time in RandFile.).25 F .173(If the \214le hasn')5.174 F +2.723 E(ongly)-.18 E F1 .224(advised to use)2.723 F .873(the "Entrop)117 +272.4 R 3.373(yG)-.1 G .872(athering Daemon" EGD from Brian W)-3.373 F +.872(arner on those systems to pro)-.8 F .872(vide useful)-.15 F .335 +(random data.)117 284.4 R .335(In this case,)5.335 F F2(sendmail)2.835 E +F1 .336(must be compiled with the \215ag EGD, and the RandFile op-)2.835 +F 1.446(tion must point to the EGD sock)117 296.4 R 3.946(et. If)-.1 F +(neither)3.946 E F0(/de)3.946 E(v/urandom\(4\))-.15 E F1 1.445 +(nor EGD are a)3.946 F -.25(va)-.2 G 1.445(ilable, you).25 F(ha)117 +308.4 Q .473 -.15(ve t)-.2 H 2.673(om).15 G(ak)-2.673 E 2.674(es)-.1 G +.174(ure that useful random data is a)-2.674 F -.25(va)-.2 G .174 +(ilable all the time in RandFile.).25 F .174(If the \214le hasn')5.174 F (t)-.18 E .39(been modi\214ed in the last 10 minutes before it is suppo\ sed to be used by)117 320.4 R F2(sendmail)2.89 E F1 .39(the content is) 2.89 F(considered obsolete.)117 332.4 Q (One method for generating this \214le is:)5 E (openssl rand -out /etc/mail/rand\214le -rand)157 348.6 Q F2 -(/path/to/\214le:...)2.5 E F1(256)A .321 -(See the OpenSSL documentation for more information.)117 364.8 R .32 -(In this case, the PRNG for TLS is only)5.321 F .956 +(/path/to/\214le:...)2.5 E F1(256)A .32 +(See the OpenSSL documentation for more information.)117 364.8 R .321 +(In this case, the PRNG for TLS is only)5.321 F .957 (seeded with other random data if the)117 376.8 R F0(DontBlameSendmail) -3.456 E F1(option)3.457 E F0(Insuf\214cientEntr)3.457 E(opy)-.18 E F1 -.957(is set.)3.457 F(This is most lik)117 388.8 Q(ely not suf)-.1 E +3.456 E F1(option)3.456 E F0(Insuf\214cientEntr)3.456 E(opy)-.18 E F1 +.956(is set.)3.456 F(This is most lik)117 388.8 Q(ely not suf)-.1 E (\214cient for certain actions, e.g., generation of \(temporary\) k)-.25 E -.15(ey)-.1 G(s.).15 E .051(Please see the OpenSSL documentation or o\ ther sources for further information about cer)142 405 R(-)-.2 E 1.064(\ ti\214cates, their creation and their usage, the importance of a good P\ RNG, and other aspects of)117 417 R(TLS.)117 429 Q F0 2.5(6.7. Encoding) 87 453 R(of ST)2.5 E(AR)-.9 E(TTLS and A)-.4 E(UTH r)-.5 E(elated Macr) --.18 E(os)-.18 E F1 .693(Macros that contain ST)127 469.2 R(AR)-.93 E -.693(TTLS and A)-.6 F .692 +-.18 E(os)-.18 E F1 .692(Macros that contain ST)127 469.2 R(AR)-.93 E +.692(TTLS and A)-.6 F .693 (UTH related data which comes from outside sources,)-.55 F .809(e.g., a\ ll macros containing information from certi\214cates, are encoded to a) -102 481.2 R -.2(vo)-.2 G .81(id problems with non-).2 F .193 -(printable or special characters.)102 493.2 R .193 -(The latter are '\\', '<', '>', '\(', '\)', '"', '+', and ' '.)5.193 F -.192(All of these char)5.192 F(-)-.2 E(acters are replaced by their v) +102 481.2 R -.2(vo)-.2 G .809(id problems with non-).2 F .192 +(printable or special characters.)102 493.2 R .192 +(The latter are '\\', '<', '>', '\(', '\)', '"', '+', and ' '.)5.192 F +.193(All of these char)5.193 F(-)-.2 E(acters are replaced by their v) 102 505.2 Q(alue in he)-.25 E(xadecimal with a leading '+'.)-.15 E -.15 (Fo)5 G 2.5(re).15 G(xample:)-2.65 E(/C=US/ST=California/O=endmail.or) 142 521.4 Q(g/OU=pri)-.18 E -.25(va)-.25 G(te/CN=Darth Mail \(Cert\)/) @@ -9307,129 +9407,178 @@ ll macros containing information from certi\214cates, are encoded to a) 102 549.6 Q(/C=US/ST=California/O=endmail.or)142 565.8 Q(g/OU=pri)-.18 E -.25(va)-.25 G(te/).25 E (CN=Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.or)142 577.8 Q -(g)-.18 E .515(\(line breaks ha)102 594 R .815 -.15(ve b)-.2 H .515 -(een inserted for readability\).).15 F .516 -(The macros which are subject to this encoding are)5.515 F 6.828({cert_\ -subject}, {cert_issuer}, {cn_subject}, {cn_issuer}, as well as {auth_au\ -then} and)102 606 R({auth_author}.)102 618 Q F0 2.5(6.8. D)87 642 R(ANE) --.35 E F1 .525(Initial support for D)127 658.2 R .525 +(g)-.18 E .516(\(line breaks ha)102 594 R .816 -.15(ve b)-.2 H .516 +(een inserted for readability\).).15 F .515 +(The macros which are subject to this encoding are)5.515 F 1.37({cert_s\ +ubject}, {cert_issuer}, {cn_subject}, {cn_issuer}, as well as {auth_aut\ +hen} and {auth_au-)102 606 R(thor}.)102 618 Q F0 2.5(6.8. D)87 642 R +(ANE)-.35 E F1 .526(Initial support for D)127 658.2 R .526 (ANE \(see RFC 7672 et.al.\))-.4 F .525(is a)5.525 F -.25(va)-.2 G .525 -(ilable if).25 F F2(sendmail)3.026 E F1 .526(is compiled with the)3.026 +(ilable if).25 F F2(sendmail)3.025 E F1 .525(is compiled with the)3.025 F(option)102 670.2 Q F0 -.35(DA)2.5 G(NE).35 E F1 5(.O)C (nly TLSA RR 3-1-x \(D)-5 E(ANE-EE\) is currently implemented.)-.4 E (The option)5 E 2.5(OD)142 686.4 S(ANE=true)-2.9 E (enables this feature at run time and it automatically adds)102 702.6 Q F0(use_dnssec)2.5 E F1(and)2.5 E F0(use_edns0)2.5 E F1(to)2.5 E 0 Cg EP -%%Page: 105 101 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-105)190.86 E/F1 10/Times-Roman@0 SF 2.5(OR)142 96 S(esolv)-2.5 E -(erOptions)-.15 E(This requires a \(preferrably local\) v)102 112.2 Q -(alidating DNS resolv)-.25 E(er which supports those options.)-.15 E -2.621(If the client \214nds a usable TLSA RR and the check succeeds the\ - macro)102 136.2 R F0(${v)5.121 E(erify})-.1 E F1 2.621(is set to)5.121 -F F0(TR)102 148.2 Q(USTED)-.3 E F1 5.833(.A)C .834 -(ll non-DNS maps are considered)-5.833 F/F2 10/Times-Italic@0 SF(secur) -3.334 E(e)-.37 E F1 .834(just lik)3.334 F 3.334(eD)-.1 G .834 -(NS lookups with DNSSEC.)-3.334 F(Be)5.834 E -2.3 -.15(aw a)102 160.2 T -.023(re that the implementation might not handle all error conditions a\ -s required by the RFCs.).15 F(More-)5.023 E -.15(ove)102 172.2 S .8 -.4 -(r, T).15 H(LSA RRs are not look).4 E(ed up for some features, e.g.,)-.1 -E F2 -.75(Fa)2.5 G(llBac).75 E(kSmartHost)-.2 E F1(.)A F0 2.5(7. A)72 -196.2 R(CKNO)-.55 E(WLEDGEMENTS)-.5 E F1(I')112 212.4 Q 2.036 -.15(ve w) --.5 H(ork).05 E 1.737(ed on)-.1 F F2(sendmail)4.237 E F1 1.737(for man) -4.237 F 4.237(yy)-.15 G 1.737(ears, and man)-4.237 F 4.237(ye)-.15 G -(mplo)-4.237 E 1.737(yers ha)-.1 F 2.037 -.15(ve b)-.2 H 1.737 -(een remarkably patient).15 F .404(about letting me w)87 224.4 R .404 -(ork on a lar)-.1 F .404(ge project that w)-.18 F .403 -(as not part of my of)-.1 F .403(\214cial job)-.25 F 5.403(.T)-.4 G .403 -(his includes time on the)-5.403 F .281(INGRES Project at the Uni)87 -236.4 R -.15(ve)-.25 G .282(rsity of California at Berk).15 F(ele)-.1 E -1.582 -.65(y, a)-.15 H 2.782(tB).65 G .282(ritton Lee, and ag)-2.782 F -.282(ain on the Mammoth)-.05 F(and T)87 248.4 Q(itan Projects at Berk) --.35 E(ele)-.1 E -.65(y.)-.15 G .79(Much of the second w)112 264.6 R --2.25 -.2(av e)-.1 H .789(of impro)3.49 F -.15(ve)-.15 G .789 -(ments resulting in v).15 F .789(ersion 8.1 should be credited to Bryan) --.15 F .545(Costales of the International Computer Science Institute.)87 -276.6 R .545(As he passed me drafts of his book on)5.545 F F2(send-) -3.045 E(mail)87 288.6 Q F1 2.5(Iw)2.5 G(as inspired to start w)-2.6 E -(orking on things ag)-.1 E 2.5(ain. Bryan)-.05 F -.1(wa)2.5 G 2.5(sa).1 -G(lso a)-2.5 E -.25(va)-.2 G(ilable to bounce ideas of).25 E 2.5(fo)-.25 -G(f.)-2.5 E(Gre)112 304.8 Q .168(gory Neil Shapiro of W)-.15 F .168(orc\ -ester Polytechnic Institute has become instrumental in all phases of)-.8 -F F2(sendmail)87 316.8 Q F1 .34(support and de)2.84 F -.15(ve)-.25 G .34 -(lopment, and w).15 F .34(as lar)-.1 F .34 -(gely responsible for getting v)-.18 F .34(ersions 8.8 and 8.9 out the) --.15 F(door)87 328.8 Q(.)-.55 E(Man)112 345 Q 2.857 -.65(y, m)-.15 H(an) -.65 E 4.057(yp)-.15 G 1.557(eople contrib)-4.057 F 1.556 -(uted chunks of code and ideas to)-.2 F F2(sendmail)4.056 E F1 6.556(.I) -C 4.056(th)-6.556 G 1.556(as pro)-4.056 F -.15(ve)-.15 G 4.056(nt).15 G -4.056(ob)-4.056 G 4.056(ea)-4.056 G .405(group netw)87 357 R .405 -(ork ef)-.1 F 2.905(fort. V)-.25 F .405(ersion 8 in particular w)-1.11 F -.405(as a group project.)-.1 F .406(The follo)5.406 F .406 -(wing people and or)-.25 F -.05(ga)-.18 G(niza-).05 E -(tions made notable contrib)87 369 Q(utions:)-.2 E(Claus Assmann)127 -385.2 Q(John Beck, He)127 397.2 Q(wlett-P)-.25 E -(ackard & Sun Microsystems)-.15 E -.25(Ke)127 409.2 S -(ith Bostic, CSRG, Uni).25 E -.15(ve)-.25 G(rsity of California, Berk) -.15 E(ele)-.1 E(y)-.15 E(Andre)127 421.2 Q 2.5(wC)-.25 G -(heng, Sun Microsystems)-2.5 E(Michael J. Corrig)127 433.2 Q(an, Uni) --.05 E -.15(ve)-.25 G(rsity of California, San Die).15 E(go)-.15 E -(Bryan Costales, International Computer Science Institute & InfoBeat)127 -445.2 Q -.15(Pa)127 457.2 S -.5(..)-4.402 -6 O 2.5(r\().552 6 O -(Pell\) Emanuelsson)-2.5 E(Craig Ev)127 469.2 Q(erhart, T)-.15 E -(ransarc Corporation)-.35 E(Per Hedeland, Ericsson)127 481.2 Q -.8(To) -127 493.2 S 2.5(mI).8 G -.25(va)-2.5 G 2.5(rH).25 G(elbekkmo, Norwe)-2.5 -E(gian School of Economics)-.15 E -(Kari Hurtta, Finnish Meteorological Institute)127 505.2 Q -(Allan E. Johannesen, WPI)127 517.2 Q(Jonathan Kamens, OpenV)127 529.2 Q -(ision T)-.6 E(echnologies, Inc.)-.7 E -.8(Ta)127 541.2 S -(kahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.).8 E -(Brian Kantor)127 553.2 Q 2.5(,U)-.4 G(ni)-2.5 E -.15(ve)-.25 G -(rsity of California, San Die).15 E(go)-.15 E(John K)127 565.2 Q(ennedy) --.25 E 2.5(,C)-.65 G(al State Uni)-2.5 E -.15(ve)-.25 G(rsity).15 E 2.5 -(,C)-.65 G(hico)-2.5 E(Murray S. K)127 577.2 Q(uchera)-.15 E(wy)-.15 E -2.5(,H)-.65 G(ookUp Communication Corp.)-2.5 E(Bruce Lilly)127 589.2 Q -2.5(,S)-.65 G(on)-2.5 E 2.5(yU)-.15 G(.S.)-2.5 E(Karl London)127 601.2 Q -(Motonori Nakamura, Ritsumeikan Uni)127 613.2 Q -.15(ve)-.25 G -(rsity & K).15 E(yoto Uni)-.25 E -.15(ve)-.25 G(rsity).15 E -(John Gardiner Myers, Carne)127 625.2 Q(gie Mellon Uni)-.15 E -.15(ve) --.25 G(rsity).15 E(Neil Rick)127 637.2 Q(ert, Northern Illinois Uni)-.1 -E -.15(ve)-.25 G(rsity).15 E(Gre)127 649.2 Q(gory Neil Shapiro, WPI)-.15 -E(Eric Schnoebelen, Con)127 661.2 Q .3 -.15(vex C)-.4 H(omputer Corp.) -.15 E(Eric W)127 673.2 Q(assenaar)-.8 E 2.5(,N)-.4 G -(ational Institute for Nuclear and High Ener)-2.5 E(gy Ph)-.18 E -(ysics, Amsterdam)-.05 E(Randall W)127 685.2 Q(inchester)-.4 E 2.5(,U) --.4 G(ni)-2.5 E -.15(ve)-.25 G(rsity of Maryland).15 E(Christophe W)127 -697.2 Q(olfhugel, P)-.8 E(asteur Institute & Herv)-.15 E 2.5(eS)-.15 G -(chauer Consultants \(P)-2.5 E(aris\))-.15 E(Exactis.com, Inc.)127 709.2 -Q 3.22(Ia)87 725.4 S .72(pologize for an)-3.22 F .72(yone I ha)-.15 F -1.019 -.15(ve o)-.2 H .719(mitted, misspelled, misattrib).15 F .719 -(uted, or otherwise missed.)-.2 F .719(At this point, I)5.719 F 0 Cg EP %%Page: 106 102 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 188.36(SMM:08-106 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.092 -(suspect that at least a hundred people ha)87 96 R 1.393 -.15(ve c)-.2 H -(ontrib).15 E 1.093(uted code, and man)-.2 F 3.593(ym)-.15 G 1.093 +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5(OR) +142 96 S(esolv)-2.5 E(erOptions)-.15 E +(This requires a \(preferrably local\) v)102 112.2 Q +(alidating DNS resolv)-.25 E(er which supports those options.)-.15 E +2.621(If the client \214nds a usable TLSA RR and the check succeeds the\ + macro)102 136.2 R F0(${v)5.121 E(erify})-.1 E F1 2.622(is set to)5.122 +F F0(TR)102 148.2 Q(USTED)-.3 E F1 5.834(.A)C .834 +(ll non-DNS maps are considered)-5.834 F/F2 10/Times-Italic@0 SF(secur) +3.334 E(e)-.37 E F1 .834(just lik)3.334 F 3.334(eD)-.1 G .834 +(NS lookups with DNSSEC.)-3.334 F(Be)5.833 E -2.3 -.15(aw a)102 160.2 T +.023(re that the implementation might not handle all error conditions a\ +s required by the RFCs.).15 F(More-)5.024 E -.15(ove)102 172.2 S .8 -.4 +(r, T).15 H(LSA RRs are not look).4 E(ed up for some features, e.g.,)-.1 +E F2 -.75(Fa)2.5 G(llBac).75 E(kSmartHost)-.2 E F1(.)A F0 2.5(6.9. EAI) +87 196.2 R F1 .323 +(Experimental support for SMTPUTF8 \(EAI, see RFC 6530-6533\) is a)127 +212.4 R -.25(va)-.2 G .323(ilable when the com-).25 F 2.413 +(pile time option)102 224.4 R F0(USE_EAI,)4.913 E F1 2.413(\(see also) +4.913 F F2(de)4.913 E(vtools/Site/site)-.15 E(.con\214g)-.15 E +(.m4.sample)-.15 E F1 2.413(for other settings that)4.913 F .594 +(might be needed\), and the cf option)102 236.4 R F2(SMTPUTF8)3.094 E F1 +.594(are used.)3.094 F .593(This allo)5.593 F .593 +(ws the use of UTF-8 for en)-.25 F -.15(ve)-.4 G(-).15 E .164 +(lope addresses as well as the entire message.)102 248.4 R .165 +(DNS lookups are done using the A-label format \(Pun-)5.164 F .131 +(ycode\) as required by the RFCs.)102 260.4 R -.15(Fo)5.131 G 2.631(ra) +.15 G .131(ll other interactions with e)-2.631 F .13 +(xternal programs and maps, the ac-)-.15 F .803(tual v)102 272.4 R .803 +(alue are used, i.e., no con)-.25 F -.15(ve)-.4 G .803 +(rsions between UTF-8 and ASCII encodings are made.).15 F .804(This ap-) +5.804 F .049(plies to the k)102 284.4 R -.15(ey)-.1 G 2.549(si).15 G +2.549(nm)-2.549 G .048 +(ap lookups, which might require to specify both v)-2.549 F .048 +(ersions in a map; the data e)-.15 F(x-)-.15 E .913 +(changed with a milter)102 296.4 R 3.413(,i)-.4 G .913 +(.e., each milter must be "8 bit clean"; mail deli)-3.413 F -.15(ve)-.25 +G .913(ry agents which must be).15 F .838 +(able to handle 8 bit addresses.)102 308.4 R .838(Some v)5.838 F .838 +(alues must be ASCII as those are used before SMTPUTF8)-.25 F +(support can be requested, e.g., the macros)102 320.4 Q F0($j)2.5 E F1 +(and)2.5 E F0($m.)2.5 E F1(Please test and pro)5 E(vide feedback.)-.15 E +F0 2.5(6.10. MT)87 344.4 R(A-STS)-.9 E F1 .097 +(Experimental support for SMTP MT)127 360.6 R 2.597(AS)-.93 G .097 +(trict T)-2.597 F .098(ransport Security \(MT)-.35 F .098 +(A-STS, see RFC 8461\) is)-.93 F -.2(av)102 372.6 S 2.249 +(ailable when using the compile time option _FFR_MT)-.05 F 2.248 +(A_STS \(as well as some others, e.g.,)-.93 F(_FFR_TLS_AL)102 384.6 Q +(TN)-.92 E .611(AMES and ob)-.35 F .611(viously ST)-.15 F(AR)-.93 E .611 +(TTLS\), FEA)-.6 F .611(TURE\(sts\) \(which implicitly sets the cf)-1.11 +F 1.244(option StrictT)102 396.6 R 1.244 +(ransportSecurity\), and post\214x-mta-sts-resolv)-.35 F 1.244 +(er \(see https://github)-.15 F(.com/Sna)-.4 E -.1(wo)-.15 G(ot/post-).1 +E(\214x-mta-sts-resolv)102 408.6 Q(er)-.15 E(.git\).)-.55 E 1.394 +(Note: this implementation uses a sock)127 424.8 R 1.394 +(et map to communicate with post\214x-mta-sts-resolv)-.1 F(er)-.15 E +(and handles only the v)102 436.8 Q +(alues returned by that program, which might not fully implement MT)-.25 +E(A-STS.)-.93 E .938(If both D)127 453 R .937(ANE and MT)-.4 F .937 +(A-STS are enabled and a)-.93 F -.25(va)-.2 G .937(ilable for the recei) +.25 F .937(ving domain, D)-.25 F .937(ANE is)-.4 F(used because it of) +102 465 Q(fers a much higher le)-.25 E -.15(ve)-.25 G 2.5(lo).15 G 2.5 +(fs)-2.5 G(ecurity)-2.5 E(.)-.65 E F0 2.5(7. A)72 489 R(CKNO)-.55 E +(WLEDGEMENTS)-.5 E F1(I')112 505.2 Q 2.036 -.15(ve w)-.5 H(ork).05 E +1.737(ed on)-.1 F F2(sendmail)4.237 E F1 1.737(for man)4.237 F 4.237(yy) +-.15 G 1.737(ears, and man)-4.237 F 4.237(ye)-.15 G(mplo)-4.237 E 1.737 +(yers ha)-.1 F 2.037 -.15(ve b)-.2 H 1.737(een remarkably patient).15 F +.404(about letting me w)87 517.2 R .404(ork on a lar)-.1 F .404 +(ge project that w)-.18 F .403(as not part of my of)-.1 F .403 +(\214cial job)-.25 F 5.403(.T)-.4 G .403(his includes time on the)-5.403 +F .281(INGRES Project at the Uni)87 529.2 R -.15(ve)-.25 G .282 +(rsity of California at Berk).15 F(ele)-.1 E 1.582 -.65(y, a)-.15 H +2.782(tB).65 G .282(ritton Lee, and ag)-2.782 F .282(ain on the Mammoth) +-.05 F(and T)87 541.2 Q(itan Projects at Berk)-.35 E(ele)-.1 E -.65(y.) +-.15 G .79(Much of the second w)112 557.4 R -2.25 -.2(av e)-.1 H .789 +(of impro)3.49 F -.15(ve)-.15 G .789(ments resulting in v).15 F .789 +(ersion 8.1 should be credited to Bryan)-.15 F .545 +(Costales of the International Computer Science Institute.)87 569.4 R +.545(As he passed me drafts of his book on)5.545 F F2(send-)3.045 E +(mail)87 581.4 Q F1 2.5(Iw)2.5 G(as inspired to start w)-2.6 E +(orking on things ag)-.1 E 2.5(ain. Bryan)-.05 F -.1(wa)2.5 G 2.5(sa).1 +G(lso a)-2.5 E -.25(va)-.2 G(ilable to bounce ideas of).25 E 2.5(fo)-.25 +G(f.)-2.5 E(Gre)112 597.6 Q .168(gory Neil Shapiro of W)-.15 F .168(orc\ +ester Polytechnic Institute has become instrumental in all phases of)-.8 +F F2(sendmail)87 609.6 Q F1 .34(support and de)2.84 F -.15(ve)-.25 G .34 +(lopment, and w).15 F .34(as lar)-.1 F .34 +(gely responsible for getting v)-.18 F .34(ersions 8.8 and 8.9 out the) +-.15 F(door)87 621.6 Q(.)-.55 E(Man)112 637.8 Q 2.857 -.65(y, m)-.15 H +(an).65 E 4.057(yp)-.15 G 1.557(eople contrib)-4.057 F 1.556 +(uted chunks of code and ideas to)-.2 F F2(sendmail)4.056 E F1 6.556(.I) +C 4.056(th)-6.556 G 1.556(as pro)-4.056 F -.15(ve)-.15 G 4.056(nt).15 G +4.056(ob)-4.056 G 4.056(ea)-4.056 G .405(group netw)87 649.8 R .405 +(ork ef)-.1 F 2.905(fort. V)-.25 F .405(ersion 8 in particular w)-1.11 F +.405(as a group project.)-.1 F .406(The follo)5.406 F .406 +(wing people and or)-.25 F -.05(ga)-.18 G(niza-).05 E +(tions made notable contrib)87 661.8 Q(utions:)-.2 E(Claus Assmann)127 +678 Q(John Beck, He)127 690 Q(wlett-P)-.25 E(ackard & Sun Microsystems) +-.15 E -.25(Ke)127 702 S(ith Bostic, CSRG, Uni).25 E -.15(ve)-.25 G +(rsity of California, Berk).15 E(ele)-.1 E(y)-.15 E(Andre)127 714 Q 2.5 +(wC)-.25 G(heng, Sun Microsystems)-2.5 E 0 Cg EP +%%Page: 107 103 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-107)190.86 E/F1 10/Times-Roman@0 SF(Michael J. Corrig)127 96 Q +(an, Uni)-.05 E -.15(ve)-.25 G(rsity of California, San Die).15 E(go) +-.15 E +(Bryan Costales, International Computer Science Institute & InfoBeat)127 +108 Q -.15(Pa)127 120 S -.5(..)-4.402 -6 O 2.5(r\().552 6 O +(Pell\) Emanuelsson)-2.5 E(Craig Ev)127 132 Q(erhart, T)-.15 E +(ransarc Corporation)-.35 E(Per Hedeland, Ericsson)127 144 Q -.8(To)127 +156 S 2.5(mI).8 G -.25(va)-2.5 G 2.5(rH).25 G(elbekkmo, Norwe)-2.5 E +(gian School of Economics)-.15 E +(Kari Hurtta, Finnish Meteorological Institute)127 168 Q +(Allan E. Johannesen, WPI)127 180 Q(Jonathan Kamens, OpenV)127 192 Q +(ision T)-.6 E(echnologies, Inc.)-.7 E -.8(Ta)127 204 S +(kahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.).8 E +(Brian Kantor)127 216 Q 2.5(,U)-.4 G(ni)-2.5 E -.15(ve)-.25 G +(rsity of California, San Die).15 E(go)-.15 E(John K)127 228 Q(ennedy) +-.25 E 2.5(,C)-.65 G(al State Uni)-2.5 E -.15(ve)-.25 G(rsity).15 E 2.5 +(,C)-.65 G(hico)-2.5 E(Murray S. K)127 240 Q(uchera)-.15 E(wy)-.15 E 2.5 +(,H)-.65 G(ookUp Communication Corp.)-2.5 E(Bruce Lilly)127 252 Q 2.5 +(,S)-.65 G(on)-2.5 E 2.5(yU)-.15 G(.S.)-2.5 E(Karl London)127 264 Q +(Motonori Nakamura, Ritsumeikan Uni)127 276 Q -.15(ve)-.25 G(rsity & K) +.15 E(yoto Uni)-.25 E -.15(ve)-.25 G(rsity).15 E +(John Gardiner Myers, Carne)127 288 Q(gie Mellon Uni)-.15 E -.15(ve)-.25 +G(rsity).15 E(Neil Rick)127 300 Q(ert, Northern Illinois Uni)-.1 E -.15 +(ve)-.25 G(rsity).15 E(Gre)127 312 Q(gory Neil Shapiro, WPI)-.15 E +(Eric Schnoebelen, Con)127 324 Q .3 -.15(vex C)-.4 H(omputer Corp.).15 E +(Eric W)127 336 Q(assenaar)-.8 E 2.5(,N)-.4 G +(ational Institute for Nuclear and High Ener)-2.5 E(gy Ph)-.18 E +(ysics, Amsterdam)-.05 E(Randall W)127 348 Q(inchester)-.4 E 2.5(,U)-.4 +G(ni)-2.5 E -.15(ve)-.25 G(rsity of Maryland).15 E(Christophe W)127 360 +Q(olfhugel, P)-.8 E(asteur Institute & Herv)-.15 E 2.5(eS)-.15 G +(chauer Consultants \(P)-2.5 E(aris\))-.15 E(Exactis.com, Inc.)127 372 Q +3.22(Ia)87 388.2 S .72(pologize for an)-3.22 F .72(yone I ha)-.15 F +1.019 -.15(ve o)-.2 H .719(mitted, misspelled, misattrib).15 F .719 +(uted, or otherwise missed.)-.2 F .719(At this point, I)5.719 F 1.092 +(suspect that at least a hundred people ha)87 400.2 R 1.393 -.15(ve c) +-.2 H(ontrib).15 E 1.093(uted code, and man)-.2 F 3.593(ym)-.15 G 1.093 (ore ha)-3.593 F 1.393 -.15(ve c)-.2 H(ontrib).15 E 1.093(uted ideas,) --.2 F 1.534(comments, and encouragement.)87 108 R(I')6.534 E 1.834 -.15 -(ve t)-.5 H 1.534(ried to list them in the RELEASE_NO).15 F 1.533 -(TES in the distrib)-.4 F(ution)-.2 E(directory)87 120 Q 5(.I)-.65 G -(appreciate their contrib)-2.5 E(ution as well.)-.2 E .742 -(Special thanks are reserv)112 136.2 R .742(ed for Michael Corrig)-.15 F +-.2 F .453(comments, and encouragement.)87 412.2 R(I')5.452 E .752 -.15 +(ve t)-.5 H .452(ried to list them in the RELEASE_NO).15 F .452 +(TES in the distrib)-.4 F .452(ution di-)-.2 F(rectory)87 424.2 Q 5(.I) +-.65 G(appreciate their contrib)-2.5 E(ution as well.)-.2 E .742 +(Special thanks are reserv)112 440.4 R .742(ed for Michael Corrig)-.15 F .743(an and Christophe W)-.05 F .743(olfhugel, who besides being)-.8 F --.1(wo)87 148.2 S 2.1(nderful guinea pigs and contrib).1 F 2.1(utors ha) +-.1(wo)87 452.4 S 2.1(nderful guinea pigs and contrib).1 F 2.1(utors ha) -.2 F 2.4 -.15(ve a)-.2 H 2.1(lso consented to be added to the `).15 F -(`sendmail@Send-)-.74 E(mail.ORG')87 160.2 Q 3.61('l)-.74 G 1.11 +(`sendmail@Send-)-.74 E(mail.ORG')87 464.4 Q 3.61('l)-.74 G 1.11 (ist and, by answering the b)-3.61 F 1.111 (ulk of the questions sent to that list, ha)-.2 F 1.411 -.15(ve f)-.2 H -1.111(reed me up to do).15 F(other w)87 172.2 Q(ork.)-.1 E 0 Cg EP -%%Page: 107 103 +1.111(reed me up to do).15 F(other w)87 476.4 Q(ork.)-.1 E 0 Cg EP +%%Page: 108 104 %%BeginPageSetup BP %%EndPageSetup @@ -9484,11 +9633,11 @@ F2(lo)2.5 E(g\214le)-.1 E F1(instead of stdout.)2.5 E72 498.6 Q F2 (\255G When)72 583.2 R 1.176 (accepting messages via the command line, indicate that the)3.677 F 3.676(ya)-.15 G 1.176(re for relay \(g)-3.676 F(ate-)-.05 E -.1(wa)144 -595.2 S 2.215(y\) submission.).1 F 2.216 -(sendmail may complain about syntactically in)7.215 F -.25(va)-.4 G -2.216(lid messages, e.g.,).25 F .037(unquali\214ed host names, rather t\ -han \214xing them when this \215ag is set.)144 607.2 R .037 -(sendmail will not do)5.037 F(an)144 619.2 Q 2.5(yc)-.15 G +595.2 S .411(y\) submission.).1 F .411 +(sendmail may complain about syntactically in)5.411 F -.25(va)-.4 G .411 +(lid messages, e.g., un-).25 F .704(quali\214ed host names, rather than\ + \214xing them when this \215ag is set.)144 607.2 R .704 +(sendmail will not do)5.704 F(an)144 619.2 Q 2.5(yc)-.15 G (anonicalization in this mode.)-2.5 E72 635.4 Q F2(cnt)2.5 E F1 .725(Sets the \231hop count\232 to)46.64 F F2(cnt)3.225 E F1 5.725(.T)C .726(his represents the number of times this message has been)-5.725 F @@ -9507,16 +9656,16 @@ DL 160 681 156 681 DL 164 681 160 681 DL 168 681 164 681 DL 172 681 168 681 DL 176 681 172 681 DL 180 681 176 681 DL 184 681 180 681 DL 188 681 184 681 DL 192 681 188 681 DL 196 681 192 681 DL 200 681 196 681 DL 204 681 200 681 DL 208 681 204 681 DL 212 681 208 681 DL 216 681 212 681 DL -/F4 8/Times-Roman@0 SF(\207Deprecated.)93.6 693 Q F3 -(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-107)190.86 E -0 Cg EP -%%Page: 108 104 +/F4 8/Times-Roman@0 SF(\207Deprecated.)93.6 693 Q F3 188.36 +(SMM:08-108 Sendmail)72 756 R(Installation and Operation Guide)2.5 E 0 +Cg EP +%%Page: 109 105 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-108 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF72 -96 Q/F2 10/Times-Italic@0 SF(ta)2.5 E(g)-.1 E F1 1.483 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-109)190.86 E/F1 10/Times-Roman@0 SF72 96 Q/F2 10 +/Times-Italic@0 SF(ta)2.5 E(g)-.1 E F1 1.483 (Sets the identi\214er used for syslog.)45.07 F 1.482 (Note that this identi\214er is set as early as possible.)6.483 F(Ho)144 108 Q(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F2(sendmail)2.915 E F1 .015 @@ -9536,13 +9685,13 @@ E(Y\232.)-1.05 E72 204.6 Q F2(addr)2.5 E F1(An obsolete form of) 41.64 E F02.5 E F1(.)A72 220.8 Q F2 1.666(xv)C(alue)-1.666 E F1(Set option)33.594 E F2(x)2.5 E F1(to the speci\214ed)2.5 E F2(value) 2.5 E F1 5(.T)C(hese options are described in Section 5.6.)-5 E72 -237 Q F2(option)A F0(=)A F2(value)A F1(Set)6.22 E F2(option)5.173 E F1 -2.674(to the speci\214ed)5.173 F F2(value)5.174 E F1 2.674 -(\(for long form option names\).)5.174 F 2.674(These options are)7.674 F -(described in Section 5.6.)144 249 Q72 265.2 Q F2 1.666(xv)C(alue) --1.666 E F1(Set macro)29.704 E F2(x)2.5 E F1(to the speci\214ed)2.5 E F2 -(value)2.5 E F1(.)A72 281.4 Q F2(pr)A(otocol)-.45 E F1 .401 -(Set the sending protocol.)27.92 F .401 +237 Q F2(option)A F0(=)A F2(value)A F1(Set)6.22 E F2(option)3.892 E F1 +1.392(to the speci\214ed)3.892 F F2(value)3.892 E F1 1.392 +(\(for long form option names\).)3.892 F 1.393(These options are de-) +6.392 F(scribed in Section 5.6.)144 249 Q72 265.2 Q F2 1.666(xv)C +(alue)-1.666 E F1(Set macro)29.704 E F2(x)2.5 E F1(to the speci\214ed) +2.5 E F2(value)2.5 E F1(.)A72 281.4 Q F2(pr)A(otocol)-.45 E F1 +.401(Set the sending protocol.)27.92 F .401 (Programs are encouraged to set this.)5.401 F .4 (The protocol \214eld can be)5.401 F .114(in the form)144 293.4 R F2(pr) 2.614 E(otocol)-.45 E F0(:)A F2(host)A F1 .114 @@ -9567,36 +9716,36 @@ ets the sending protocol to UUCP and the sending host to uunet.)144 393.6 R .522(orkgroups help man-)-.1 F 1.268 (age the use of system resources by sendmail.)144 405.6 R 1.268(Each w) 6.268 F 1.268(orkgroup may ha)-.1 F 1.568 -.15(ve o)-.2 H 1.268 -(ne or more).15 F .357 +(ne or more).15 F (children concurrently processing queues depending on the setting of)144 -417.6 R F2(MaxQueueChildr)2.856 E(en)-.37 E F1(.)A(\255qp)72 433.8 Q F2 -(time)A F1 1.174(Similar to \255q with a time ar)39.14 F 1.175 -(gument, e)-.18 F 1.175 +417.6 Q F2(MaxQueueChildr)2.5 E(en)-.37 E F1(.)A(\255qp)72 433.8 Q F2 +(time)A F1 1.175(Similar to \255q with a time ar)39.14 F 1.175 +(gument, e)-.18 F 1.174 (xcept that instead of periodically starting WGP')-.15 F(s)-.55 E .7 (sendmail starts persistent WGP')144 445.8 R 3.2(st)-.55 G .7 (hat alternate between processing queues and sleeping.)-3.2 F 1.123 (The sleep time is speci\214ed by the time ar)144 457.8 R 1.123 -(gument; it def)-.18 F 1.123(aults to 1 second, e)-.1 F 1.124 -(xcept that a)-.15 F 1.294(WGP al)144 469.8 R -.1(wa)-.1 G 1.293 +(gument; it def)-.18 F 1.123(aults to 1 second, e)-.1 F 1.123 +(xcept that a)-.15 F 1.293(WGP al)144 469.8 R -.1(wa)-.1 G 1.293 (ys sleeps at least 5 seconds if their queues were empty in the pre).1 F -1.293(vious run.)-.25 F .138 +1.294(vious run.)-.25 F .139 (Persistent processes are managed by a queue control process \(QCP\).) -144 481.8 R .139(The QCP is the par)5.139 F(-)-.2 E .18 +144 481.8 R .138(The QCP is the par)5.138 F(-)-.2 E .179 (ent process of the WGP')144 493.8 R 2.679(s. T)-.55 F .179 (ypically the QCP will be the sendmail daemon \(when started)-.8 F .424 (with \255bd or \255bD\) or a special process \(named Queue control\) \ -\(when started without \255bd)144 505.8 R .72(or \255bD\).)144 517.8 R -.72(If a persistent WGP ceases to be acti)5.72 F 1.019 -.15(ve f)-.25 H -.719(or some reason another WGP will be).15 F .862 +\(when started without \255bd)144 505.8 R .719(or \255bD\).)144 517.8 R +.719(If a persistent WGP ceases to be acti)5.719 F 1.019 -.15(ve f)-.25 +H .72(or some reason another WGP will be).15 F .862 (started by the QCP for the same w)144 529.8 R .862 -(orkgroup in most cases. When a persistent WGP has)-.1 F 1.008 -(core dumped, the deb)144 541.8 R 1.008(ug \215ag)-.2 F F2(no_per)3.508 -E(sistent_r)-.1 E(estart)-.37 E F1 1.007 -(is set or the speci\214c persistent WGP)3.508 F .676 +(orkgroup in most cases. When a persistent WGP has)-.1 F 1.007 +(core dumped, the deb)144 541.8 R 1.007(ug \215ag)-.2 F F2(no_per)3.507 +E(sistent_r)-.1 E(estart)-.37 E F1 1.008 +(is set or the speci\214c persistent WGP)3.507 F .677 (has been restarted too man)144 553.8 R 3.176(yt)-.15 G .676 -(imes already then the WGP will not be started ag)-3.176 F .677 -(ain and a)-.05 F .876(message will be logged to this ef)144 565.8 R -3.375(fect. T)-.25 F 3.375(os)-.8 G .875 +(imes already then the WGP will not be started ag)-3.176 F .676 +(ain and a)-.05 F .875(message will be logged to this ef)144 565.8 R +3.375(fect. T)-.25 F 3.375(os)-.8 G .876 (top \(SIGTERM\) or restart \(SIGHUP\) persis-)-3.375 F .116(tent WGP') 144 577.8 R 2.616(st)-.55 G .116 (he appropriate signal should be sent to the QCP)-2.616 F 2.616(.T)-1.11 @@ -9604,84 +9753,90 @@ G .116(he QCP will propag)-2.616 F .116(ate the)-.05 F (signal to all of the WGP')144 589.8 Q 2.5(sa)-.55 G (nd if appropriate restart the persistent WGP')-2.5 E(s.)-.55 E72 606 Q F2(Gname)A F1(Run the jobs in the queue group)32.48 E F2(name)2.5 -E F1(once.)2.5 E(\255q[!])72 622.2 Q F2(Xstring)A F1 .313 +E F1(once.)2.5 E(\255q[!])72 622.2 Q F2(Xstring)A F1 .312 (Run the queue once, limiting the jobs to those matching)21.92 F F2 -(Xstring)2.812 E F1 5.312(.T)C .312(he k)-5.312 F .612 -.15(ey l)-.1 H -(etter).15 E F2(X)2.812 E F1 .312(can be)2.812 F F0(I)144 634.2 Q F1 -1.347(to limit based on queue identi\214er)3.847 F(,)-.4 E F0(R)3.847 E +(Xstring)2.813 E F1 5.313(.T)C .313(he k)-5.313 F .613 -.15(ey l)-.1 H +(etter).15 E F2(X)2.813 E F1 .313(can be)2.813 F F0(I)144 634.2 Q F1 +1.347(to limit based on queue identi\214er)3.848 F(,)-.4 E F0(R)3.847 E F1 1.347(to limit based on recipient,)3.847 F F0(S)3.847 E F1 1.347 -(to limit based on)3.847 F(sender)144 646.2 Q 4.758(,o)-.4 G(r)-4.758 E -F0(Q)4.758 E F1 2.258 -(to limit based on quarantine reason for quarantined jobs.)4.758 F 4.757 -(Ap)7.257 G(articular)-4.757 E .062 +(to limit based on)3.847 F(sender)144 646.2 Q 4.757(,o)-.4 G(r)-4.757 E +F0(Q)4.757 E F1 2.258 +(to limit based on quarantine reason for quarantined jobs.)4.757 F 4.758 +(Ap)7.258 G(articular)-4.758 E .062 (queued job is accepted if one of the corresponding attrib)144 658.2 R -.063(utes contains the indicated)-.2 F F2(string)2.563 E F1(.)A .779 +.062(utes contains the indicated)-.2 F F2(string)2.562 E F1(.)A .778 (The optional ! character ne)144 670.2 R -.05(ga)-.15 G .778 -(tes the condition tested.).05 F(Multiple)5.778 E F2(\255qX)3.278 E F1 -.778(\215ags are permitted,)3.278 F .622(with items with the same k)144 +(tes the condition tested.).05 F(Multiple)5.778 E F2(\255qX)3.279 E F1 +.779(\215ags are permitted,)3.279 F .622(with items with the same k)144 682.2 R .922 -.15(ey l)-.1 H .622(etter \231or'ed\232 together).15 F -3.122(,a)-.4 G .622(nd items with dif)-3.122 F .623(ferent k)-.25 F .923 +3.122(,a)-.4 G .622(nd items with dif)-3.122 F .622(ferent k)-.25 F .922 -.15(ey l)-.1 H(etters).15 E(\231and'ed\232 together)144 694.2 Q(.)-.55 E 23.88(\255Q[reason] Quarantine)72 710.4 R .422 -(normal queue items with the gi)2.922 F -.15(ve)-.25 G 2.922(nr).15 G +(normal queue items with the gi)2.921 F -.15(ve)-.25 G 2.922(nr).15 G .422(eason or unquarantine quarantined queue)-2.922 F .963 (items if no reason is gi)144 722.4 R -.15(ve)-.25 G 3.463(n. This).15 F .963(should only be used with some sort of item matching)3.463 F 0 Cg EP -%%Page: 109 105 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-109)190.86 E/F1 10/Times-Roman@0 SF(using)144 96 Q F0(\255q[!]) -2.5 E/F2 10/Times-Italic@0 SF(Xstring)A F1(as described abo)2.5 E -.15 -(ve)-.15 G(.).15 E(\255R ret)72 112.2 Q 1.687(What information you w) -46.64 F 1.687(ant returned if the message bounces;)-.1 F F2 -.37(re) -4.187 G(t).37 E F1 1.687(can be \231HDRS\232 for)4.187 F .877 -(headers only or \231FULL\232 for headers plus body)144 124.2 R 5.877 -(.T)-.65 G .878(his is a request only; the other end is)-5.877 F 1.309 -(not required to honor the parameter)144 136.2 R 6.309(.I)-.55 G 3.808 -<6699>-6.309 G 1.308(HDRS\232 is speci\214ed local bounces also return) --3.808 F(only the headers.)144 148.2 Q 61.08(\255t Read)72 164.4 R .752 -(the header for \231T)3.252 F .752 -(o:\232, \231Cc:\232, and \231Bcc:\232 lines, and send to e)-.8 F -.15 -(ve)-.25 G .752(ryone listed in those).15 F 2.54(lists. The)144 176.4 R -.039(\231Bcc:\232 line will be deleted before sending.)2.54 F(An)5.039 E -2.539(ya)-.15 G .039(ddresses in the ar)-2.539 F .039(gument v)-.18 F -(ec-)-.15 E(tor will be deleted from the send list.)144 188.4 Q -(\255V en)72 204.6 Q 32.32(vid The)-.4 F(indicated)3.179 E F2(en)3.179 E -(vid)-.4 E F1 .679(is passed with the en)3.179 F -.15(ve)-.4 G .68 -(lope of the message and returned if the mes-).15 F(sage bounces.)144 -216.6 Q72 232.8 Q F2(lo)2.5 E(g\214le)-.1 E F1 .725(Log all traf) -31.74 F .725(\214c in and out of)-.25 F F2(sendmail)3.225 E F1 .725 -(in the indicated)3.225 F F2(lo)3.224 E(g\214le)-.1 E F1 .724(for deb) -3.224 F .724(ugging mailer prob-)-.2 F 2.5(lems. This)144 244.8 R -(produces a lot of data v)2.5 E -(ery quickly and should be used sparingly)-.15 E(.)-.65 E .637 -(There are a number of options that may be speci\214ed as primiti)97 261 -R .938 -.15(ve \215)-.25 H 3.138(ags. These).15 F .638 -(are the e, i, m, and v)3.138 F 3.785(options. Also,)72 273 R 1.285 -(the f option may be speci\214ed as the)3.785 F F03.784 E F1 3.784 -(\215ag. The)3.784 F 1.284 -(DSN related options \231\255N\232, \231\255R\232, and)3.784 F -<99ad569a206861>72 285 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G -(ects on).25 E F2(sendmail)2.5 E F1(running as daemon.)2.5 E 0 Cg EP %%Page: 110 106 %%BeginPageSetup BP %%EndPageSetup +/F0 10/Times-Bold@0 SF 188.36(SMM:08-110 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(using)144 +96 Q F0(\255q[!])2.5 E/F2 10/Times-Italic@0 SF(Xstring)A F1 +(as described abo)2.5 E -.15(ve)-.15 G(.).15 E(\255R ret)72 112.2 Q +1.687(What information you w)46.64 F 1.687 +(ant returned if the message bounces;)-.1 F F2 -.37(re)4.187 G(t).37 E +F1 1.687(can be \231HDRS\232 for)4.187 F .878 +(headers only or \231FULL\232 for headers plus body)144 124.2 R 5.878 +(.T)-.65 G .877(his is a request only; the other end is)-5.878 F 1.308 +(not required to honor the parameter)144 136.2 R 6.308(.I)-.55 G 3.808 +<6699>-6.308 G 1.309(HDRS\232 is speci\214ed local bounces also return) +-3.808 F(only the headers.)144 148.2 Q 61.08(\255t Read)72 164.4 R .752 +(the header for \231T)3.252 F .752 +(o:\232, \231Cc:\232, and \231Bcc:\232 lines, and send to e)-.8 F -.15 +(ve)-.25 G .752(ryone listed in those).15 F 2.539(lists. The)144 176.4 R +.039(\231Bcc:\232 line will be deleted before sending.)2.539 F(An)5.039 +E 2.539(ya)-.15 G .04(ddresses in the ar)-2.539 F .04(gument v)-.18 F +(ec-)-.15 E(tor will be deleted from the send list.)144 188.4 Q 56.64 +(\255U This)72 204.6 R .72(option is required when sending mail using U\ +TF-8; it sets the \231SMTPUTF8\232 ar)3.22 F(gu-)-.18 E .41 +(ment for \231MAIL\232 command.)144 216.6 R .41(Only a)5.41 F -.25(va) +-.2 G .41(ilable if \231EAI\232 support is enabled, and the \231SMT).25 +F(-)-.92 E(PUTF8\232 option is set.)144 228.6 Q(\255V en)72 244.8 Q +32.32(vid The)-.4 F(indicated)3.18 E F2(en)3.18 E(vid)-.4 E F1 .68 +(is passed with the en)3.18 F -.15(ve)-.4 G .679 +(lope of the message and returned if the mes-).15 F(sage bounces.)144 +256.8 Q72 273 Q F2(lo)2.5 E(g\214le)-.1 E F1 .724(Log all traf) +31.74 F .724(\214c in and out of)-.25 F F2(sendmail)3.225 E F1 .725 +(in the indicated)3.225 F F2(lo)3.225 E(g\214le)-.1 E F1 .725(for deb) +3.225 F .725(ugging mailer prob-)-.2 F 2.5(lems. This)144 285 R +(produces a lot of data v)2.5 E +(ery quickly and should be used sparingly)-.15 E(.)-.65 E .638 +(There are a number of options that may be speci\214ed as primiti)97 +301.2 R .937 -.15(ve \215)-.25 H 3.137(ags. These).15 F .637 +(are the e, i, m, and v)3.137 F 3.784(options. Also,)72 313.2 R 1.284 +(the f option may be speci\214ed as the)3.784 F F03.784 E F1 3.785 +(\215ag. The)3.785 F 1.285 +(DSN related options \231\255N\232, \231\255R\232, and)3.785 F +<99ad569a206861>72 325.2 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 +G(ects on).25 E F2(sendmail)2.5 E F1(running as daemon.)2.5 E 0 Cg EP +%%Page: 111 107 +%%BeginPageSetup +BP +%%EndPageSetup /F0 12/Times-Bold@0 SF 3(APPENDIX B)250.002 98.4 R -.12(QU)220.29 141.6 -S(EUE FILE FORMA).12 E(TS)-1.14 E/F1 10/Times-Roman@0 SF .101 +S(EUE FILE FORMA).12 E(TS)-1.14 E/F1 10/Times-Roman@0 SF .102 (This appendix describes the format of the queue \214les.)97 201 R .102 -(These \214les li)5.102 F .402 -.15(ve i)-.25 H 2.602(naq).15 G .102 -(ueue directory)-2.602 F 5.102(.T)-.65 G .102(he indi-)-5.102 F .331 +(These \214les li)5.102 F .402 -.15(ve i)-.25 H 2.602(na).15 G .101 +(queue directory)-.001 F 5.101(.T)-.65 G .101(he indi-)-5.101 F .331 (vidual qf, hf, Qf, df, and xf \214les may be stored in separate)72 213 R/F2 10/Times-Italic@0 SF(qf/)2.831 E F1(,)A F2(df/)2.831 E F1 2.831(,a) C(nd)-2.831 E F2(xf/)2.831 E F1 .331(subdirectories if the)2.831 F 2.831 -(ya)-.15 G .33(re present)-2.831 F(in the queue directory)72 225 Q(.) --.65 E .923(All queue \214les ha)97 241.2 R 1.223 -.15(ve t)-.2 H .923 -(he name).15 F F2(ttYMDhmsNNppppp)3.423 E F1(where)3.424 E F2 -(YMDhmsNNppppp)3.424 E F1 .924(is the)3.424 F F2(id)3.424 E F1 .924 -(for this mes-)3.424 F(sage and the)72 253.2 Q F2(tt)2.5 E F1 +(ya)-.15 G .331(re present)-2.831 F(in the queue directory)72 225 Q(.) +-.65 E .924(All queue \214les ha)97 241.2 R 1.224 -.15(ve t)-.2 H .924 +(he name).15 F F2(ttYMDhmsNNppppp)3.424 E F1(where)3.424 E F2 +(YMDhmsNNppppp)3.424 E F1 .923(is the)3.423 F F2(id)3.423 E F1 .923 +(for this mes-)3.423 F(sage and the)72 253.2 Q F2(tt)2.5 E F1 (is a type.)2.5 E(The indi)5 E(vidual letters in the)-.25 E F2(id)2.5 E F1(are:)2.5 E 28.78(YE)72 269.4 S(ncoded year)-28.78 E 27.11(ME)72 285.6 S(ncoded month)-27.11 E 28.78(DE)72 301.8 S(ncoded day)-28.78 E 31(hE)72 @@ -9691,66 +9846,66 @@ E -.15(ve)-.4 G(lope number).15 E 8.5(ppppp At)72 382.8 R(least \214v) 2.5 E 2.5(ed)-.15 G(ecimal digits of the process ID)-2.5 E .477 (All \214les with the same id collecti)97 399 R -.15(ve)-.25 G .477 (ly de\214ne one message.).15 F .477(Due to the use of memory-b)5.477 F -(uf)-.2 E .476(fered \214les,)-.25 F(some of these \214les may ne)72 411 +(uf)-.2 E .477(fered \214les,)-.25 F(some of these \214les may ne)72 411 Q -.15(ve)-.25 G 2.5(ra).15 G(ppear on disk.)-2.5 E(The types are:)97 427.2 Q 25.17(qf The)72 443.4 R(queue control \214le.)2.5 E (This \214le contains the information necessary to process the job)5 E (.)-.4 E 25.17(hf The)72 459.6 R(same as a queue control \214le, b)2.5 E (ut for a quarantined queue job)-.2 E(.)-.4 E 25.17(df The)72 475.8 R -.451(data \214le.)2.951 F .452(The message body \(e)5.451 F .452 -(xcluding the header\) is k)-.15 F .452(ept in this \214le.)-.1 F .452 -(Sometimes the df \214le)5.452 F .183(is not stored in the same directo\ +.452(data \214le.)2.952 F .452(The message body \(e)5.452 F .452 +(xcluding the header\) is k)-.15 F .452(ept in this \214le.)-.1 F .451 +(Sometimes the df \214le)5.451 F .183(is not stored in the same directo\ ry as the qf \214le; in this case, the qf \214le contains a `d' record \ which)108 487.8 R (names the queue directory that contains the df \214le.)108 499.8 Q -27.39(tf A)72 516 R .045(temporary \214le.)2.545 F .045 -(This is an image of the)5.045 F/F3 10/Times-Bold@0 SF(qf)2.546 E F1 -.046(\214le when it is being reb)2.546 F 2.546(uilt. It)-.2 F .046 -(should be renamed to a)2.546 F F3(qf)108 528 Q F1(\214le v)2.5 E -(ery quickly)-.15 E(.)-.65 E 25.17(xf A)72 544.2 R .567 -(transcript \214le, e)3.067 F .567 -(xisting during the life of a session sho)-.15 F .566(wing e)-.25 F -.15 -(ve)-.25 G .566(rything that happens during that).15 F 3.121 +27.39(tf A)72 516 R .046(temporary \214le.)2.546 F .046 +(This is an image of the)5.046 F/F3 10/Times-Bold@0 SF(qf)2.546 E F1 +.046(\214le when it is being reb)2.546 F 2.545(uilt. It)-.2 F .045 +(should be renamed to a)2.545 F F3(qf)108 528 Q F1(\214le v)2.5 E +(ery quickly)-.15 E(.)-.65 E 25.17(xf A)72 544.2 R .566 +(transcript \214le, e)3.066 F .567 +(xisting during the life of a session sho)-.15 F .567(wing e)-.25 F -.15 +(ve)-.25 G .567(rything that happens during that).15 F 3.122 (session. Sometimes)108 556.2 R .622(the xf \214le must be generated be\ -fore a queue group has been selected; in this)3.121 F +fore a queue group has been selected; in this)3.122 F (case, the xf \214le will be stored in a directory of the def)108 568.2 -Q(ault queue group.)-.1 E 22.95(Qf A)72 584.4 R -.74(``)3.279 G(lost') -.74 E 3.279('q)-.74 G .779(ueue control \214le.)-3.279 F F2(sendmail) +Q(ault queue group.)-.1 E 22.95(Qf A)72 584.4 R -.74(``)3.278 G(lost') +.74 E 3.278('q)-.74 G .778(ueue control \214le.)-3.278 F F2(sendmail) 5.778 E F1 .778(renames a)3.278 F F3(qf)3.278 E F1 .778(\214le to)3.278 -F F3(Qf)3.278 E F1 .778(if there is a se)3.278 F -.15(ve)-.25 G .778 +F F3(Qf)3.278 E F1 .779(if there is a se)3.278 F -.15(ve)-.25 G .779 (re \(con\214guration\)).15 F .256(problem that cannot be solv)108 596.4 R .256(ed without human interv)-.15 F 2.756(ention. Search)-.15 F .256 -(the log\214le for the queue \214le id)2.756 F .053 +(the log\214le for the queue \214le id)2.756 F .052 (to \214gure out what happened.)108 608.4 R .052(After you resolv)5.052 -F .052(ed the problem, you can rename the)-.15 F F3(Qf)2.552 E F1 .052 -(\214le to)2.552 F F3(qf)2.552 E F1(and)2.552 E(send it ag)108 620.4 Q -(ain.)-.05 E .74 +F .052(ed the problem, you can rename the)-.15 F F3(Qf)2.552 E F1 .053 +(\214le to)2.553 F F3(qf)2.553 E F1(and)2.553 E(send it ag)108 620.4 Q +(ain.)-.05 E .131 (The queue control \214le is structured as a series of lines each be)97 -636.6 R .741(ginning with a code letter)-.15 F 5.741(.T)-.55 G .741 -(he lines)-5.741 F(are as follo)72 648.6 Q(ws:)-.25 E 28.78(VT)72 664.8 -S .82(he v)-28.78 F .82 -(ersion number of the queue \214le format, used to allo)-.15 F 3.319(wn) --.25 G -.25(ew)-3.319 G F2(sendmail)3.569 E F1 .819 -(binaries to read queue)3.319 F .003(\214les created by older v)108 -676.8 R 2.504(ersions. Def)-.15 F .004(aults to v)-.1 F .004 -(ersion zero.)-.15 F .004 -(Must be the \214rst line of the \214le if present.)5.004 F -.15(Fo)108 -688.8 S 2.5(r8).15 G(.12 the v)-2.5 E(ersion number is 6.)-.15 E 28.78 -(AT)72 705 S 1.175(he information gi)-28.78 F -.15(ve)-.25 G 3.675(nb) -.15 G 3.675(yt)-3.675 G 1.175(he A)-3.675 F 1.175 -(UTH= parameter of the \231MAIL FR)-.55 F 1.175 -(OM:\232 command or $f@$j if)-.4 F(sendmail has been called directly)108 -717 Q(.)-.65 E F3 188.36(SMM:08-110 Sendmail)72 756 R -(Installation and Operation Guide)2.5 E 0 Cg EP -%%Page: 111 107 +636.6 R .131(ginning with a code letter; the \214le must)-.15 F +(end with a line containing only a single dot.)72 648.6 Q +(The lines are as follo)5 E(ws:)-.25 E 28.78(VT)72 664.8 S .819(he v) +-28.78 F .819(ersion number of the queue \214le format, used to allo) +-.15 F 3.32(wn)-.25 G -.25(ew)-3.32 G F2(sendmail)3.57 E F1 .82 +(binaries to read queue)3.32 F .004(\214les created by older v)108 676.8 +R 2.504(ersions. Def)-.15 F .004(aults to v)-.1 F .004(ersion zero.)-.15 +F .004(Must be the \214rst line of the \214le if present.)5.004 F -.15 +(Fo)108 688.8 S 2.5(r8).15 G(.13 and later the v)-2.5 E +(ersion number is 8.)-.15 E 28.78(AT)72 705 S .745(he information gi) +-28.78 F -.15(ve)-.25 G 3.245(nb).15 G 3.246(yt)-3.245 G .746(he A) +-3.246 F .746(UTH= parameter of the)-.55 F/F4 9/Times-Roman@0 SF .746 +(SMTP MAIL)3.246 F F1 .746(command or $f@$j if send-)3.246 F +(mail has been called directly)108 717 Q(.)-.65 E F3 +(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-111)190.86 E +0 Cg EP +%%Page: 112 108 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-111)190.86 E/F1 10/Times-Roman@0 SF 28.78(HA)72 96 S .329 -(header de\214nition.)-25.951 F .329(There may be an)5.329 F 2.829(yn) --.15 G .329(umber of these lines.)-2.829 F .33 -(The order is important: the)5.33 F 2.83(yr)-.15 G(epre-)-2.83 E .046 +/F0 10/Times-Bold@0 SF 188.36(SMM:08-112 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 28.78(HA) +72 96 S .33(header de\214nition.)-25.95 F .33(There may be an)5.33 F +2.829(yn)-.15 G .329(umber of these lines.)-2.829 F .329 +(The order is important: the)5.329 F 2.829(yr)-.15 G(epre-)-2.829 E .046 (sent the order in the \214nal message.)108 108 R .046 (These use the same syntax as header de\214nitions in the con\214gu-) 5.046 F(ration \214le.)108 120 Q 29.33(CT)72 136.2 S .575 @@ -9759,56 +9914,56 @@ BP (Recipient addresses follo)5.575 F .575(wing this)-.25 F 2.814 (line will be \215agged so that deli)108 148.2 R -.15(ve)-.25 G 2.814 (ries will be run as the).15 F/F2 10/Times-Italic@0 SF(localuser)5.314 E -F1 2.814(\(a user name from the)5.314 F .561(/etc/passwd \214le\);)108 -160.2 R F2(aliasname)3.061 E F1 .561(is the name of the alias that e) -3.061 F .562(xpanded to this address \(used for print-)-.15 F +F1 2.814(\(a user name from the)5.314 F .562(/etc/passwd \214le\);)108 +160.2 R F2(aliasname)3.062 E F1 .561(is the name of the alias that e) +3.062 F .561(xpanded to this address \(used for print-)-.15 F (ing messages\).)108 172.2 Q 31(qT)72 188.4 S (he quarantine reason for quarantined queue items.)-31 E 28.78(QT)72 -204.6 S .798(he `)-28.78 F .798(`original recipient')-.74 F .798 +204.6 S .797(he `)-28.78 F .797(`original recipient')-.74 F .798 (', speci\214ed by the ORCPT= \214eld in an ESMTP transaction.)-.74 F -.797(Used e)5.797 F(xclu-)-.15 E(si)108 216.6 Q -.15(ve)-.25 G +.798(Used e)5.798 F(xclu-)-.15 E(si)108 216.6 Q -.15(ve)-.25 G (ly for Deli).15 E -.15(ve)-.25 G(ry Status Noti\214cations.).15 E (It applies only to the follo)5 E(wing `R' line.)-.25 E 32.67(rT)72 -232.8 S .782(he `)-32.67 F .782(`\214nal recipient')-.74 F 3.282('u)-.74 +232.8 S .783(he `)-32.67 F .783(`\214nal recipient')-.74 F 3.282('u)-.74 G .782(sed for Deli)-3.282 F -.15(ve)-.25 G .782 (ry Status Noti\214cations.).15 F .782(It applies only to the follo) -5.782 F .783(wing `R')-.25 F(line.)108 244.8 Q 29.33(RA)72 261 S .705 +5.782 F .782(wing `R')-.25 F(line.)108 244.8 Q 29.33(RA)72 261 S .705 (recipient address.)-26.125 F .705 (This will normally be completely aliased, b)5.705 F .705 -(ut is actually realiased when the)-.2 F .492(job is processed.)108 273 -R .492(There will be one line for each recipient.)5.492 F -1.11(Ve)5.492 -G .493(rsion 1 qf \214les also include a lead-)1.11 F .986(ing colon-te\ -rminated list of \215ags, some of which are `S' to return a message on \ -successful \214nal)108 285 R(deli)108 297 Q -.15(ve)-.25 G(ry).15 E -2.825(,`)-.65 G .325(F' to return a message on f)-2.825 F .326 -(ailure, `D' to return a message if the message is delayed, `N')-.1 F -.842(to suppress returning the body)108 309 R 3.342(,a)-.65 G .842 -(nd `P' to declare this as a `)-3.342 F(`primary')-.74 E 3.342('\()-.74 -G .841(command line or SMTP-)-3.342 F(session\) address.)108 321 Q 30.44 -(ST)72 337.2 S(he sender address.)-30.44 E +(ut is actually realiased when the)-.2 F .493(job is processed.)108 273 +R .492(There will be one line for each recipient.)5.493 F -1.11(Ve)5.492 +G .492(rsion 1 qf \214les also include a lead-)1.11 F .03(ing colon-ter\ +minated list of \215ags, some of which are `S' to return a message on s\ +uccessful \214nal de-)108 285 R(li)108 297 Q -.15(ve)-.25 G(ry).15 E +2.765(,`)-.65 G .265(F' to return a message on f)-2.765 F .264 +(ailure, `D' to return a message if the message is delayed, `N' to)-.1 F +.546(suppress returning the body)108 309 R 3.046(,a)-.65 G .547 +(nd `P' to declare this as a `)-3.046 F(`primary')-.74 E 3.047('\()-.74 +G .547(command line or SMTP-ses-)-3.047 F(sion\) address.)108 321 Q +30.44(ST)72 337.2 S(he sender address.)-30.44 E (There may only be one of these lines.)5 E 29.89(TT)72 353.4 S (he job creation time.)-29.89 E (This is used to compute when to time out the job)5 E(.)-.4 E 30.44(PT) -72 369.6 S .113(he current message priority)-30.44 F 5.113(.T)-.65 G -.113(his is used to order the queue.)-5.113 F .114 -(Higher numbers mean lo)5.114 F .114(wer priori-)-.25 F 3.677(ties. The) +72 369.6 S .114(he current message priority)-30.44 F 5.114(.T)-.65 G +.113(his is used to order the queue.)-5.114 F .113 +(Higher numbers mean lo)5.113 F .113(wer priori-)-.25 F 3.676(ties. The) 108 381.6 R 1.176(priority changes as the message sits in the queue.) -3.677 F 1.176(The initial priority depends on the)6.176 F +3.676 F 1.177(The initial priority depends on the)6.176 F (message class and the size of the message.)108 393.6 Q 27.11(MA)72 -409.8 S 2.703(message. This)-24.407 F .203(line is printed by the)2.703 -F F2(mailq)2.703 E F1 .204 +409.8 S 2.704(message. This)-24.406 F .204(line is printed by the)2.704 +F F2(mailq)2.704 E F1 .203 (command, and is generally used to store status infor)2.704 F(-)-.2 E 2.5(mation. It)108 421.8 R(can contain an)2.5 E 2.5(yt)-.15 G -.15(ex) --2.5 G(t.).15 E 30.44(FF)72 438 S .044 +-2.5 G(t.).15 E 30.44(FF)72 438 S .043 (lag bits, represented as one letter per \215ag.)-30.44 F .043 -(De\214ned \215ag bits are)5.043 F F0(r)2.543 E F1 .043 -(indicating that this is a response)2.543 F .142(message and)108 450 R -F0(w)2.642 E F1 .142(indicating that a w)2.642 F .143 +(De\214ned \215ag bits are)5.043 F F0(r)2.543 E F1 .044 +(indicating that this is a response)2.544 F .143(message and)108 450 R +F0(w)2.643 E F1 .143(indicating that a w)2.643 F .142 (arning message has been sent announcing that the mail has been)-.1 F -2.514(delayed. Other)108 462 R .014(\215ag bits are:)2.514 F F0(8)2.514 -E F1 2.514(:t)C .013(he body contains 8bit data,)-2.514 F F0(b)2.513 E -F1 2.513(:aB)C .013(cc: header should be remo)-2.513 F -.15(ve)-.15 G -(d,).15 E F0(d)2.513 E F1(:)A .551 +2.513(delayed. Other)108 462 R .013(\215ag bits are:)2.513 F F0(8)2.513 +E F1 2.513(:t)C .013(he body contains 8bit data,)-2.513 F F0(b)2.513 E +F1 -5.012 2.513(:a B)D .014(cc: header should be remo)-2.513 F -.15(ve) +-.15 G(d,).15 E F0(d)2.514 E F1(:)A .552 (the mail has RET parameters \(see RFC 1894\),)108 474 R F0(n)3.052 E F1 3.052(:t)C .552(he body of the message should not be returned)-3.052 F (in case of an error)108 486 Q(,)-.4 E F0(s)2.5 E F1 2.5(:t)C(he en)-2.5 @@ -9820,38 +9975,38 @@ E -.15(ve)-.4 G(lope has been split.).15 E 28.78(NT)72 502.2 S (he df \214le is in a dif)-3.15 F .65(ferent directory than the qf \214\ le, then a `d' record is present, specifying the)-.25 F (directory in which the df \214le resides.)108 546.6 Q 32.67(IT)72 562.8 -S .724(he i-number of the data \214le; this can be used to reco)-32.67 F --.15(ve)-.15 G 3.225(ry).15 G .725 -(our mail queue after a disastrous disk)-3.225 F(crash.)108 574.8 Q 31 +S .725(he i-number of the data \214le; this can be used to reco)-32.67 F +-.15(ve)-.15 G 3.224(ry).15 G .724 +(our mail queue after a disastrous disk)-3.224 F(crash.)108 574.8 Q 31 ($A)72 591 S(macro de\214nition.)-28.5 E(The v)5 E (alues of certain macros are passed through to the queue run phase.)-.25 -E 29.33(BT)72 607.2 S .925(he body type.)-29.33 F .925 -(The remainder of the line is a te)5.925 F .925 -(xt string de\214ning the body type.)-.15 F .924(If this \214eld is) -5.924 F .009(missing, the body type is assumed to be \231unde\214ned\ -\232 and no special processing is attempted.)108 619.2 R(Le)5.009 E -.05 +E 29.33(BT)72 607.2 S .924(he body type.)-29.33 F .925 +(The remainder of the line is a te)5.924 F .925 +(xt string de\214ning the body type.)-.15 F .925(If this \214eld is) +5.925 F .009(missing, the body type is assumed to be \231unde\214ned\ +\232 and no special processing is attempted.)108 619.2 R(Le)5.008 E -.05 (ga)-.15 G(l).05 E -.25(va)108 631.2 S (lues are \2317BIT\232 and \2318BITMIME\232.).25 E 29.89(ZT)72 647.4 S (he original en)-29.89 E -.15(ve)-.4 G (lope id \(from the ESMTP transaction\).).15 E -.15(Fo)5 G 2.5(rD).15 G (eli)-2.5 E -.15(ve)-.25 G 2.5(rS).15 G(tatus Noti\214cations only)-2.5 -E(.)-.65 E 4.073(As an e)97 663.6 R 4.073(xample, the follo)-.15 F 4.072 +E(.)-.65 E 4.072(As an e)97 663.6 R 4.072(xample, the follo)-.15 F 4.073 (wing is a queue \214le sent to \231eric@mammoth.Berk)-.25 F(ele)-.1 E --.65(y.)-.15 G 4.072(EDU\232 and).65 F 0 Cg EP -%%Page: 112 108 +-.65(y.)-.15 G 4.073(EDU\232 and).65 F 0 Cg EP +%%Page: 113 109 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-112 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(\231bostic@ok)72 98 Q(eef)-.1 E(fe.CS.Berk)-.25 E(ele)-.1 E -.65(y.) --.15 G(EDU\232).65 E/F2 7/Times-Roman@0 SF(1)-4 I F1(:)4 I(V4)112 114.2 -Q(T711358135)112 126.2 Q(K904446490)112 138.2 Q(N0)112 150.2 Q(P2100941) -112 162.2 Q($_eric@localhost)112 174.2 Q(${daemon_\215ags})112 186.2 Q -(Seric)112 198.2 Q(Ceric:100:1000:sendmail@v)112 210.2 Q(angogh.CS.Berk) --.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(RPFD:eric@mammoth.Berk)112 -222.2 Q(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(RPFD:bostic@ok)112 234.2 Q -(eef)-.1 E(fe.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-113)190.86 E/F1 10/Times-Roman@0 SF(\231bostic@ok)72 98 Q(eef) +-.1 E(fe.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU\232).65 E/F2 7 +/Times-Roman@0 SF(1)-4 I F1(:)4 I(V4)112 114.2 Q(T711358135)112 126.2 Q +(K904446490)112 138.2 Q(N0)112 150.2 Q(P2100941)112 162.2 Q +($_eric@localhost)112 174.2 Q(${daemon_\215ags})112 186.2 Q(Seric)112 +198.2 Q(Ceric:100:1000:sendmail@v)112 210.2 Q(angogh.CS.Berk)-.25 E(ele) +-.1 E -.65(y.)-.15 G(EDU).65 E(RPFD:eric@mammoth.Berk)112 222.2 Q(ele) +-.1 E -.65(y.)-.15 G(EDU).65 E(RPFD:bostic@ok)112 234.2 Q(eef)-.1 E +(fe.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E (H?P?Return-path: <^g>)112 246.2 Q(H??Recei)112 258.2 Q -.15(ve)-.25 G (d: by v).15 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G (EDU \(5.108/2.7\) id AAA06703;).65 E(Fri, 17 Jul 1992 00:28:55 -0700) @@ -9869,9 +10024,9 @@ E -.65(y.)-.15 G(EDU \(5.108/2.7\)).65 E (H??Message-id: <9207170931.AA22757@foo.bar)112 378.2 Q(.baz.de>)-.55 E (H??T)112 390.2 Q(o: sendmail@v)-.8 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(H??Subject: this is an e)112 402.2 Q -(xample message)-.15 E .658(This sho)72 418.4 R .658(ws the person who \ -sent the message, the submission time \(in seconds since January 1, 197\ -0\), the)-.25 F(message priority)72 430.4 Q 2.5(,t)-.65 G +(xample message)-.15 E(.)112 414.2 Q .657(This sho)72 430.4 R .658(ws t\ +he person who sent the message, the submission time \(in seconds since \ +January 1, 1970\), the)-.25 F(message priority)72 442.4 Q 2.5(,t)-.65 G (he message class, the recipients, and the headers for the message.)-2.5 E .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 DL 84 678.8 80 678.8 DL 88 678.8 84 678.8 DL 92 678.8 88 678.8 DL 96 678.8 92 678.8 DL 100 678.8 @@ -9885,48 +10040,49 @@ E .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 DL 84 678.8 80 678.8 DL 678.8 DL 188 678.8 184 678.8 DL 192 678.8 188 678.8 DL 196 678.8 192 678.8 DL 200 678.8 196 678.8 DL 204 678.8 200 678.8 DL 208 678.8 204 678.8 DL 212 678.8 208 678.8 DL 216 678.8 212 678.8 DL/F3 5 -/Times-Roman@0 SF(1)93.6 689.2 Q/F4 8/Times-Roman@0 SF .718(This e)3.2 J -.718(xample is contri)-.12 F -.12(ve)-.2 G 2.718(da).12 G .718 -(nd probably inaccurate for your en)-2.718 F 2.719(vironment. Glance) --.32 F -.12(ove)2.719 G 2.719(ri).12 G 2.719(tt)-2.719 G 2.719(og)-2.719 -G .719(et an idea; nothing can replace)-2.719 F(looking at what your o) +/Times-Roman@0 SF(1)93.6 689.2 Q/F4 8/Times-Roman@0 SF .719(This e)3.2 J +.719(xample is contri)-.12 F -.12(ve)-.2 G 2.719(da).12 G .719 +(nd probably inaccurate for your en)-2.719 F 2.719(vironment. Glance) +-.32 F -.12(ove)2.718 G 2.718(ri).12 G 2.718(tt)-2.718 G 2.718(og)-2.718 +G .718(et an idea; nothing can replace)-2.718 F(looking at what your o) 72 702 Q(wn system generates.)-.2 E 0 Cg EP -%%Page: 113 109 +%%Page: 114 110 %%BeginPageSetup BP %%EndPageSetup /F0 12/Times-Bold@0 SF 3(APPENDIX C)249.672 98.4 R(SUMMAR)198.282 141.6 Q 3(YO)-.42 G 3(FS)-3 G(UPPOR)-3 E 3(TF)-.48 G(ILES)-3 E/F1 10 -/Times-Roman@0 SF 1.519(This is a summary of the support \214les that)97 -201 R/F2 10/Times-Italic@0 SF(sendmail)4.019 E F1 1.52 -(creates or generates.)4.019 F(Man)6.52 E 4.02(yo)-.15 G 4.02(ft)-4.02 G -1.52(hese can be)-4.02 F(changed by editing the sendmail.cf \214le; che\ -ck there to \214nd the actual pathnames.)72 213 Q(/usr/sbin/sendmail)72 -229.2 Q(The binary of)144 241.2 Q F2(sendmail)2.5 E F1(.)A(/usr/bin/ne) -72 257.4 Q -.1(wa)-.25 G(liases).1 E 3.735(Al)144 269.4 S 1.235 -(ink to /usr/sbin/sendmail; causes the alias database to be reb)-3.735 F -3.734(uilt. Running)-.2 F 1.234(this pro-)3.734 F +/Times-Roman@0 SF 1.52(This is a summary of the support \214les that)97 +201 R/F2 10/Times-Italic@0 SF(sendmail)4.019 E F1 1.519 +(creates or generates.)4.019 F(Man)6.519 E 4.019(yo)-.15 G 4.019(ft) +-4.019 G 1.519(hese can be)-4.019 F(changed by editing the sendmail.cf \ +\214le; check there to \214nd the actual pathnames.)72 213 Q +(/usr/sbin/sendmail)72 229.2 Q(The binary of)144 241.2 Q F2(sendmail)2.5 +E F1(.)A(/usr/bin/ne)72 257.4 Q -.1(wa)-.25 G(liases).1 E 3.734(Al)144 +269.4 S 1.235 +(ink to /usr/sbin/sendmail; causes the alias database to be reb)-3.734 F +3.735(uilt. Running)-.2 F 1.235(this pro-)3.735 F (gram is completely equi)144 281.4 Q -.25(va)-.25 G(lent to gi).25 E (ving)-.25 E F2(sendmail)2.5 E F1(the)2.5 E/F3 10/Times-Bold@0 SF (\255bi)2.5 E F1(\215ag.)2.5 E 13.38(/usr/bin/mailq Prints)72 297.6 R -3.702(al)3.702 G 1.202(isting of the mail queue.)-3.702 F 1.203 -(This program is equi)6.202 F -.25(va)-.25 G 1.203(lent to using the).25 -F F3(\255bp)3.703 E F1 1.203(\215ag to)3.703 F F2(sendmail)144 309.6 Q +3.703(al)3.703 G 1.203(isting of the mail queue.)-3.703 F 1.202 +(This program is equi)6.203 F -.25(va)-.25 G 1.202(lent to using the).25 +F F3(\255bp)3.702 E F1 1.202(\215ag to)3.702 F F2(sendmail)144 309.6 Q F1(.)A(/etc/mail/sendmail.cf)72 325.8 Q (The con\214guration \214le, in te)144 337.8 Q(xtual form.)-.15 E 1.72 (/etc/mail/help\214le The)72 354 R(SMTP help \214le.)2.5 E (/etc/mail/statistics)72 370.2 Q 2.5(As)144 382.2 S (tatistics \214le; need not be present.)-2.5 E(/etc/mail/sendmail.pid)72 398.4 Q .318(Created in daemon mode; it contains the process id of the \ -current SMTP daemon.)144 410.4 R .318(If you)5.318 F 1.047 -(use this in scripts; use `)144 422.4 R 1.047(`head \2551')-.74 F 3.548 -('t)-.74 G 3.548(og)-3.548 G 1.048 -(et just the \214rst line; the second line contains the)-3.548 F .68 +current SMTP daemon.)144 410.4 R .318(If you)5.318 F 1.048 +(use this in scripts; use `)144 422.4 R 1.048(`head \2551')-.74 F 3.548 +('t)-.74 G 3.548(og)-3.548 G 1.047 +(et just the \214rst line; the second line contains the)-3.548 F .679 (command line used to in)144 434.4 R -.2(vo)-.4 G .879 -.1(ke t).2 H -.679(he daemon, and later v).1 F .679(ersions of)-.15 F F2(sendmail) -3.179 E F1 .679(may add more)3.179 F(information to subsequent lines.) -144 446.4 Q 5.06(/etc/mail/aliases The)72 462.6 R(te)2.5 E(xtual v)-.15 -E(ersion of the alias \214le.)-.15 E(/etc/mail/aliases.db)72 478.8 Q +.679(he daemon, and later v).1 F .679(ersions of)-.15 F F2(sendmail)3.18 +E F1 .68(may add more)3.18 F(information to subsequent lines.)144 446.4 +Q 5.06(/etc/mail/aliases The)72 462.6 R(te)2.5 E(xtual v)-.15 E +(ersion of the alias \214le.)-.15 E(/etc/mail/aliases.db)72 478.8 Q (The alias \214le in)144 490.8 Q F2(hash)2.5 E F1(\(3\) format.)1.666 E (/etc/mail/aliases.{pag,dir})72 507 Q(The alias \214le in)144 519 Q F2 (ndbm)2.5 E F1(\(3\) format.)1.666 E(/v)72 535.2 Q(ar/spool/mqueue)-.25 @@ -9937,18 +10093,8 @@ de.)144 547.2 Q(/v)72 563.4 Q(ar/spool/mqueue/qf*)-.25 E (ar/spool/mqueue/tf*)-.25 E -.7(Te)144 631.8 S(mporary v).7 E (ersions of the qf \214les, used during queue \214le reb)-.15 E(uild.) -.2 E(/v)72 648 Q(ar/spool/mqueue/xf*)-.25 E 2.5(At)144 660 S -(ranscript of the current session.)-2.5 E F3 -(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-113)190.86 E -0 Cg EP -%%Page: 114 110 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-114 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(This page intentionally left blank;)256.225 300 Q -(replace it with a blank sheet for double-sided output.)218.6 312 Q 0 Cg -EP +(ranscript of the current session.)-2.5 E F3 188.36(SMM:08-114 Sendmail) +72 756 R(Installation and Operation Guide)2.5 E 0 Cg EP %%Page: 3 111 %%BeginPageSetup BP @@ -9973,11 +10119,11 @@ E 28.5(................................................................\ ........................ 8)4.6 F 2.5(1.2. Con\214guration)87 211.2 R .99 (Files ................................................................\ ................................................)2.5 F(8)31 E 2.5 -(1.3. Details)87 225.6 R(of Installation Files)2.5 E 23.5(.............\ +(1.3. Details)87 225.6 R(of Installation Files)2.5 E 28.5(.............\ .......................................................................\ -............... 10)4.89 F 2.5(1.3.1. /usr/sbin/sendmail)102 240 R 23.5(\ +............... 9)4.89 F 2.5(1.3.1. /usr/sbin/sendmail)102 240 R 23.5(.\ .......................................................................\ -.................................. 10)2.66 F 2.5 +................................. 10)2.66 F 2.5 (1.3.2. /etc/mail/sendmail.cf)102 254.4 R 23.5(........................\ .......................................................................\ ..... 10)4.34 F 2.5(1.3.3. /etc/mail/submit.cf)102 268.8 R 23.5(.......\ @@ -9989,7 +10135,7 @@ E 28.5(................................................................\ .......................................................................\ ............ 10)4.6 F 2.5(1.3.6. /usr/bin/pur)102 312 R 1.18(gestat ...\ .......................................................................\ -................................)-.18 F(11)26 E 2.5(1.3.7. /v)102 326.4 +................................)-.18 F(10)26 E 2.5(1.3.7. /v)102 326.4 R 1.81(ar/spool/mqueue ................................................\ ........................................................)-.25 F(11)26 E 2.5(1.3.8. /v)102 340.8 R 2.09(ar/spool/clientmqueue ..................\ @@ -10027,7 +10173,7 @@ ststat ................................................................\ .......................................................................\ ................................)2.5 F(15)26 E 2.5(2.3. The)87 542.4 R (Mail Queues)2.5 E 23.5(...............................................\ -.................................................................... 16) +.................................................................... 15) 4.07 F 2.5(2.3.1. Queue)102 556.8 R(Groups and Queue Directories)2.5 E 23.5(..................................................................\ ........ 16)2.99 F 2.5(2.3.2. Queue)102 571.2 R 1.84(Runs .............\ @@ -10190,148 +10336,158 @@ BP ................................... 42)4.63 F 2.5(5.1.4.4. check_data) 117 153.6 R 23.5(......................................................\ ..................................................... 42)3.52 F 2.5 -(5.1.4.5. check_compat)117 168 R 23.5(.................................\ -..................................................................... 4\ -2)3.24 F 2.5(5.1.4.6. check_eoh)117 182.4 R 23.5(......................\ +(5.1.4.5. check_other)117 168 R 23.5(..................................\ .......................................................................\ -............... 42)3.24 F 2.5(5.1.4.7. check_eom)117 196.8 R 23.5(.....\ + 42)4.63 F 2.5(5.1.4.6. check_compat)117 182.4 R 23.5(.................\ .......................................................................\ -............................... 43)2.96 F 2.5(5.1.4.8. check_etrn)117 +.............. 42)3.24 F 2.5(5.1.4.7. check_eoh)117 196.8 R 23.5(......\ +.......................................................................\ +............................... 42)3.24 F 2.5(5.1.4.8. check_eom)117 211.2 R 23.5(..........................................................\ -................................................. 43)4.63 F 2.5 -(5.1.4.9. check_e)117 225.6 R .89(xpn .................................\ +................................................. 43)2.96 F 2.5 +(5.1.4.9. check_etrn)117 225.6 R 23.5(.................................\ .......................................................................\ -..)-.15 F(43)26 E 2.5(5.1.4.10. check_vrfy)117 240 R 23.5(.............\ +... 43)4.63 F 2.5(5.1.4.10. check_e)117 240 R .89(xpn .................\ .......................................................................\ -..................... 43)3.52 F 2.5(5.1.4.11. trust_auth)117 254.4 R +................)-.15 F(43)26 E 2.5(5.1.4.11. check_vrfy)117 254.4 R 23.5(..................................................................\ -......................................... 43)3.5 F 2.5 -(5.1.4.12. tls_client)117 268.8 R 23.5(................................\ +....................................... 43)3.52 F 2.5 +(5.1.4.12. clt_features)117 268.8 R 23.5(..............................\ .......................................................................\ -..... 43)4.33 F 2.5(5.1.4.13. tls_serv)117 283.2 R 2.27(er ............\ +... 43)4.35 F 2.5(5.1.4.13. trust_auth)117 283.2 R 23.5(...............\ .......................................................................\ -........................)-.15 F(44)26 E 2.5(5.1.4.14. tls_rcpt)117 297.6 -R 23.5(................................................................\ -............................................... 44)3.5 F 2.5 -(5.1.4.15. srv_features)117 312 R 23.5(................................\ +..................... 44)3.5 F 2.5(5.1.4.14. tls_client)117 297.6 R 23.5 +(......................................................................\ +...................................... 44)4.33 F 2.5(5.1.4.15. tls_serv) +117 312 R 2.27(er .....................................................\ +......................................................)-.15 F(44)26 E +2.5(5.1.4.16. tls_rcpt)117 326.4 R 23.5(...............................\ .......................................................................\ - 44)4.63 F 2.5(5.1.4.16. try_tls)117 326.4 R 23.5(.....................\ +......... 44)3.5 F 2.5(5.1.4.17. srv_features)117 340.8 R 23.5(........\ .......................................................................\ -..................... 45)2.94 F 2.5(5.1.4.17. tls_srv_features)117 340.8 -R(and tls_clt_features)2.5 E 23.5 +........................ 44)4.63 F 2.5(5.1.4.18. try_tls)117 355.2 R +23.5(..................................................................\ +............................................... 45)2.94 F 2.5 +(5.1.4.19. tls_srv_features)117 369.6 R(and tls_clt_features)2.5 E 23.5 (................................................................. 45) -4.64 F 2.5(5.1.4.18. authinfo)117 355.2 R 23.5(........................\ +4.64 F 2.5(5.1.4.20. authinfo)117 384 R 23.5(..........................\ .......................................................................\ -............... 46)2.67 F 2.5(5.1.4.19. queue)117 369.6 R 1.44(group ..\ +............. 46)2.67 F 2.5(5.1.4.21. queue)117 398.4 R 1.44(group ....\ .......................................................................\ -...............................)-.15 F(46)26 E 2.5 -(5.1.4.20. greet_pause)117 384 R 23.5(.................................\ +.............................)-.15 F(46)26 E 2.5(5.1.4.22. greet_pause) +117 412.8 R 23.5(......................................................\ +.................................................. 47)3.24 F 2.5 +(5.1.5. IPC)102 427.2 R 1(mailers .....................................\ .......................................................................\ - 47)3.24 F 2.5(5.1.5. IPC)102 398.4 R 1(mailers .......................\ -.......................................................................\ -.....................)2.5 F(47)26 E 2.5(5.2. D)87 412.8 R 2.5<8a44>2.5 G +.......)2.5 F(47)26 E 2.5(5.2. D)87 441.6 R 2.5<8a44>2.5 G (e\214ne Macro)-2.5 E 23.5(............................................\ .................................................................... 47) -3.52 F 2.5(5.3. C)87 427.2 R(and F \212 De\214ne Classes)2.5 E 23.5(...\ +3.52 F 2.5(5.3. C)87 456 R(and F \212 De\214ne Classes)2.5 E 23.5(.....\ .......................................................................\ -........................... 54)2.67 F 2.5(5.4. M)87 441.6 R 2.5<8a44>2.5 -G(e\214ne Mailer)-2.5 E 23.5(..........................................\ -..................................................................... 5\ -6)3.79 F 2.5(5.5. H)87 456 R 2.5<8a44>2.5 G(e\214ne Header)-2.5 E 23.5(\ +......................... 55)2.67 F 2.5(5.4. M)87 470.4 R 2.5<8a44>2.5 G +(e\214ne Mailer)-2.5 E 23.5(...........................................\ +.................................................................... 56) +3.79 F 2.5(5.5. H)87 484.8 R 2.5<8a44>2.5 G(e\214ne Header)-2.5 E 23.5(\ .......................................................................\ -........................................ 61)3.25 F 2.5(5.6. O)87 470.4 R +........................................ 61)3.25 F 2.5(5.6. O)87 499.2 R 2.5<8a53>2.5 G(et Option)-2.5 E 23.5(..................................\ .......................................................................\ -............ 62)3.22 F 2.5(5.7. P)87 484.8 R 2.5<8a50>2.5 G +............ 62)3.22 F 2.5(5.7. P)87 513.6 R 2.5<8a50>2.5 G (recedence De\214nitions)-2.5 E 23.5(..................................\ -................................................................ 81)2.96 -F 2.5(5.8. V)87 499.2 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E -(ersion Le)-1.11 E -.15(ve)-.25 G 2.8(l.).15 G 23.5(...................\ -..................................................................... 8\ -1)-2.8 F 2.5(5.9. K)87 513.6 R 2.5<8a4b>2.5 G .3 -.15(ey F)-2.75 H -(ile Declaration).15 E 23.5(...........................................\ -.......................................................... 82)2.81 F 2.5 -(5.10. Q)87 528 R 2.5<8a51>2.5 G(ueue Group Declaration)-2.5 E 23.5(...\ +................................................................ 82)2.96 +F 2.5(5.8. V)87 528 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E(ersion Le) +-1.11 E -.15(ve)-.25 G 2.8(l.).15 G 23.5(..............................\ +.......................................................... 82)-2.8 F 2.5 +(5.9. K)87 542.4 R 2.5<8a4b>2.5 G .3 -.15(ey F)-2.75 H(ile Declaration) +.15 E 23.5(............................................................\ +......................................... 84)2.81 F 2.5(5.10. Q)87 556.8 +R 2.5<8a51>2.5 G(ueue Group Declaration)-2.5 E 23.5(...................\ .......................................................................\ -................. 91)2.98 F 2.5(5.11. X)87 542.4 R 2.5<8a4d>2.5 G +. 92)2.98 F 2.5(5.11. X)87 571.2 R 2.5<8a4d>2.5 G (ail Filter \(Milter\) De\214nitions)-2.5 E 23.5(......................\ -............................................................ 92)4.61 F -2.5(5.12. The)87 556.8 R(User Database)2.5 E 23.5(.....................\ +............................................................ 93)4.61 F +2.5(5.12. The)87 585.6 R(User Database)2.5 E 23.5(.....................\ .......................................................................\ -.................. 93)4.92 F 2.5(5.12.1. Structure)102 571.2 R +.................. 94)4.92 F 2.5(5.12.1. Structure)102 600 R (of the user database)2.5 E 23.5(......................................\ -............................................... 93)2.7 F 2.5 -(5.12.2. User)102 585.6 R(database semantics)2.5 E 23.5(...............\ +............................................... 94)2.7 F 2.5 +(5.12.2. User)102 614.4 R(database semantics)2.5 E 23.5(...............\ .......................................................................\ -....... 93)3.25 F 2.5(5.12.3. Creating)102 602 R(the database)2.5 E/F2 7 -/Times-Roman@0 SF(23)-4 I F1 23.5(.....................................\ -.......................................................... 94)2.91 4 N -2.5(6. O)72 616.4 R(THER CONFIGURA)-.4 E 1.97(TION ....................\ +....... 94)3.25 F 2.5(5.12.3. Creating)102 630.8 R(the database)2.5 E/F2 +7/Times-Roman@0 SF(23)-4 I F1 23.5(....................................\ +........................................................... 95)2.91 4 N +2.5(6. O)72 645.2 R(THER CONFIGURA)-.4 E 1.97(TION ....................\ .......................................................................\ -..............)-1.11 F(94)26 E 2.5(6.1. P)87 630.8 R(arameters in de) +..............)-1.11 F(95)26 E 2.5(6.1. P)87 659.6 R(arameters in de) -.15 E .3(vtools/OS/$oscf .............................................\ -..............................................)-.25 F(94)26 E 2.5 -(6.1.1. F)102 645.2 R(or Future Releases)-.15 E 23.5(..................\ +..............................................)-.25 F(95)26 E 2.5 +(6.1.1. F)102 674 R(or Future Releases)-.15 E 23.5(....................\ .......................................................................\ -............. 95)3.66 F 2.5(6.2. P)87 659.6 R +........... 96)3.66 F 2.5(6.2. P)87 688.4 R (arameters in sendmail/conf.h)-.15 E 23.5(.............................\ -................................................................. 96) -4.78 F 2.5(6.3. Con\214guration)87 674 R(in sendmail/conf.c)2.5 E 23.5(\ -.......................................................................\ -................... 98)4.06 F 2.5(6.3.1. Built-in)102 688.4 R +................................................................. 97) +4.78 F 2.5(6.3. Con\214guration)87 702.8 R(in sendmail/conf.c)2.5 E 23.5 +(......................................................................\ +.................... 99)4.06 F 2.5(6.3.1. Built-in)102 717.2 R (Header Semantics)2.5 E 23.5(..........................................\ -................................................. 98)4.9 F 2.5 -(6.3.2. Restricting)102 702.8 R(Use of Email)2.5 E 18.5(...............\ -.......................................................................\ -........ 100)4.34 F 2.5(6.3.3. Ne)102 717.2 R 2.5(wD)-.25 G -(atabase Map Classes)-2.5 E 18.5(......................................\ -................................................... 100)4.89 F 0 Cg EP +................................................. 99)4.9 F 0 Cg EP %%Page: 6 114 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 198.36(SMM:08-6 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5 -(6.3.4. Queueing)102 96 R 1.56(Function ...............................\ +(6.3.2. Restricting)102 96 R(Use of Email)2.5 E 18.5(..................\ .......................................................................\ -.)2.5 F(101)21 E 2.5(6.3.5. Refusing)102 110.4 R +..... 101)4.34 F 2.5(6.3.3. Ne)102 110.4 R 2.5(wD)-.25 G +(atabase Map Classes)-2.5 E 18.5(......................................\ +................................................... 101)4.89 F 2.5 +(6.3.4. Queueing)102 124.8 R 1.56(Function ............................\ +.......................................................................\ +....)2.5 F(102)21 E 2.5(6.3.5. Refusing)102 139.2 R (Incoming SMTP Connections)2.5 E 18.5(.................................\ -...................................... 101)2.94 F 2.5(6.3.6. Load)102 -124.8 R -1.17 -.74(Av e)2.5 H(rage Computation).74 E 18.5(.............\ +...................................... 102)2.94 F 2.5(6.3.6. Load)102 +153.6 R -1.17 -.74(Av e)2.5 H(rage Computation).74 E 18.5(.............\ .......................................................................\ -...... 101)2.74 F 2.5(6.4. Con\214guration)87 139.2 R +...... 102)2.74 F 2.5(6.4. Con\214guration)87 168 R (in sendmail/daemon.c)2.5 E 18.5(......................................\ -............................................... 102)2.67 F 2.5(6.5. LD) -87 153.6 R .29(AP .....................................................\ +............................................... 103)2.67 F 2.5(6.5. LD) +87 182.4 R .29(AP .....................................................\ .......................................................................\ -.........)-.4 F(102)21 E 2.5(6.5.1. LD)102 168 R(AP Recursion)-.4 E 18.5 -(......................................................................\ -.................................... 102)4.74 F 2.5(6.5.1.1. Example)117 -182.4 R 18.5(..........................................................\ -..................................................... 102)2.95 F 2.5 -(6.6. ST)87 196.8 R(AR)-.93 E .58(TTLS ................................\ +.........)-.4 F(103)21 E 2.5(6.5.1. LD)102 196.8 R(AP Recursion)-.4 E +18.5(..................................................................\ +........................................ 103)4.74 F 2.5 +(6.5.1.1. Example)117 211.2 R 18.5(....................................\ .......................................................................\ -.....................)-.6 F(103)21 E 2.5(6.6.1. Certi\214cates)102 211.2 -R(for ST)2.5 E(AR)-.93 E .87(TTLS .....................................\ -.....................................................)-.6 F(103)21 E 2.5 -(6.6.2. PRNG)102 225.6 R(for ST)2.5 E(AR)-.93 E 2.25(TTLS .............\ +.... 103)2.95 F 2.5(6.6. ST)87 225.6 R(AR)-.93 E .58(TTLS .............\ .......................................................................\ -.............)-.6 F(104)21 E 2.5(6.7. Encoding)87 240 R(of ST)2.5 E(AR) --.93 E(TTLS and A)-.6 E(UTH related Macros)-.55 E 18.5 -(............................................................ 104)2.56 F -2.5(6.8. D)87 254.4 R 1.13(ANE ........................................\ +........................................)-.6 F(104)21 E 2.5 +(6.6.1. Certi\214cates)102 240 R(for ST)2.5 E(AR)-.93 E .87(TTLS ......\ .......................................................................\ -.....................)-.4 F(104)21 E 2.5(7. A)72 268.8 R(CKNO)-.4 E .1(\ -WLEDGEMENTS ...........................................................\ -.................................................)-.35 F(105)21 E -(Appendix A.)72 283.2 Q(COMMAND LINE FLA)5 E 1.97(GS ..................\ +.............)-.6 F(104)21 E 2.5(6.6.2. PRNG)102 254.4 R(for ST)2.5 E +(AR)-.93 E 2.25(TTLS ..................................................\ +...............................................)-.6 F(105)21 E 2.5 +(6.7. Encoding)87 268.8 R(of ST)2.5 E(AR)-.93 E(TTLS and A)-.6 E +(UTH related Macros)-.55 E 18.5 +(............................................................ 105)2.56 F +2.5(6.8. D)87 283.2 R 1.13(ANE ........................................\ +.......................................................................\ +.....................)-.4 F(105)21 E 2.5(6.9. EAI)87 297.6 R 18.5(.....\ +.......................................................................\ +............................................................ 106)4.34 F +2.5(6.10. MT)87 312 R 1.65(A-STS ......................................\ +.......................................................................\ +...............)-.93 F(106)21 E 2.5(7. A)72 326.4 R(CKNO)-.4 E .1(WLEDG\ +EMENTS ................................................................\ +............................................)-.35 F(106)21 E +(Appendix A.)72 340.8 Q(COMMAND LINE FLA)5 E 1.97(GS ..................\ .......................................................................) --.4 F(107)21 E(Appendix B.)72 297.6 Q -.1(QU)5 G(EUE FILE FORMA).1 E +-.4 F(108)21 E(Appendix B.)72 355.2 Q -.1(QU)5 G(EUE FILE FORMA).1 E 1.38(TS ...............................................................\ -.............................)-1.11 F(110)21 E(Appendix C.)72 312 Q +.............................)-1.11 F(111)21 E(Appendix C.)72 369.6 Q (SUMMAR)5 E 2.5(YO)-.65 G 2.5(FS)-2.5 G(UPPOR)-2.5 E 2.5(TF)-.6 G 1.12(\ ILES ..................................................................\ -............)-2.5 F(113)21 E 0 Cg EP +............)-2.5 F(114)21 E 0 Cg EP %%Trailer end %%EOF diff --git a/editmap/editmap.0 b/editmap/editmap.0 index 378dbb49ba1b..50ba04962ebf 100644 --- a/editmap/editmap.0 +++ b/editmap/editmap.0 @@ -1,61 +1,64 @@ -EDITMAP(8) EDITMAP(8) +EDITMAP(8) System Manager's Manual EDITMAP(8) -NAME - editmap - query and edit single records in database maps for sendmail +NNAAMMEE + eeddiittmmaapp - query and edit single records in database maps for sendmail -SYNOPSIS - editmap [-C file] [-N] [-f] [-q|-u|-x] maptype mapname key [ "value +SSYYNNOOPPSSIISS + eeddiittmmaapp [--CC _f_i_l_e] [--NN] [--ff] [--qq||--uu||--xx] maptype mapname key [ "value ..." ] -DESCRIPTION - Editmap queries or edits one record in database maps used by the keyed +DDEESSCCRRIIPPTTIIOONN + EEddiittmmaapp queries or edits one record in database maps used by the keyed map lookups in sendmail(8). Arguments are passed on the command line and output (for queries) is directed to standard output. - Depending on how it is compiled, editmap handles up to three different - database formats, selected using the maptype parameter. They may be + Depending on how it is compiled, eeddiittmmaapp handles different database + formats, selected using the _m_a_p_t_y_p_e parameter. They may be dbm DBM format maps. This requires the ndbm(3) library. - btree B-Tree format maps. This requires the new Berkeley DB library. + btree B-Tree format maps. This requires the new Berkeley DB library. hash Hash format maps. This also requires the Berkeley DB library. - If the TrustedUser option is set in the sendmail configuration file and - editmap is invoked as root, the generated files will be owned by the - specified TrustedUser. + cdb CDB (Constant DataBase) format maps. This requires the tinycdb + library. - Flags - -C Use the specified sendmail configuration file for looking up the + If the _T_r_u_s_t_e_d_U_s_e_r option is set in the sendmail configuration file and + eeddiittmmaapp is invoked as root, the generated files will be owned by the + specified _T_r_u_s_t_e_d_U_s_e_r_. + + FFllaaggss + --CC Use the specified sseennddmmaaiill configuration file for looking up the TrustedUser option. - -N Include the null byte that terminates strings in the map (for + --NN Include the null byte that terminates strings in the map (for alias maps). - -f Normally all upper case letters in the key are folded to lower + --ff Normally all upper case letters in the key are folded to lower case. This flag disables that behaviour. This is intended to - mesh with the -f flag in the K line in sendmail.cf. The value + mesh with the -f flag in the KK line in sendmail.cf. The value is never case folded. - -q Query the map for the specified key. If found, print value to - standard output and exit with 0. If not found then print an - error message to stdout and exit with EX_UNAVAILABLE. + --qq Query the map for the specified key. If found, print value to + standard output and exit with 0. If not found then print an er- + ror message to stdout and exit with EX_UNAVAILABLE. - -u Update the record for key with value or inserts a new record if + --uu Update the record for _k_e_y with _v_a_l_u_e or inserts a new record if one doesn't exist. Exits with 0 on success or EX_IOERR on fail- ure. - -x Deletes the specific key from the map. Exits with 0 on success + --xx Deletes the specific key from the map. Exits with 0 on success or EX_IOERR on failure. - SEE ALSO + SSEEEE AALLSSOO sendmail(8), makemap(8) -HISTORY - The editmap command has no history. +HHIISSTTOORRYY + The eeddiittmmaapp command has no history. diff --git a/editmap/editmap.8 b/editmap/editmap.8 index db72102a2153..d6cb5a9a5a4f 100644 --- a/editmap/editmap.8 +++ b/editmap/editmap.8 @@ -30,27 +30,31 @@ directed to standard output. .PP Depending on how it is compiled, .B editmap -handles up to three different database formats, +handles different database formats, selected using the .I maptype -parameter. +parameter. They may be .TP dbm -DBM format maps. -This requires the -ndbm(3) +DBM format maps. +This requires the +ndbm(3) library. .TP btree -B-Tree format maps. -This requires the new Berkeley DB +B-Tree format maps. +This requires the new Berkeley DB library. .TP hash -Hash format maps. -This also requires the Berkeley DB +Hash format maps. +This also requires the Berkeley DB library. +.TP +cdb +CDB (Constant DataBase) format maps. +This requires the tinycdb library. .PP If the .I TrustedUser diff --git a/editmap/editmap.c b/editmap/editmap.c index c3454cb495ae..37532fc0225f 100644 --- a/editmap/editmap.c +++ b/editmap/editmap.c @@ -38,6 +38,7 @@ SM_UNUSED(static char id[]) = "@(#)$Id: editmap.c,v 1.26 2013-11-22 20:51:26 ca #endif #include #include +#include #include #include #include @@ -194,13 +195,13 @@ main(argc, argv) if (foldcase) { - char *p; + char *lower; - for (p = keyname; *p != '\0'; p++) - { - if (isascii(*p) && isupper(*p)) - *p = tolower(*p); - } + lower = makelower(keyname); + + /* if it is different then it is a static variable */ + if (keyname != lower) + keyname = lower; } diff --git a/include/libmilter/mfapi.h b/include/libmilter/mfapi.h index 2b012d86af2b..3bb4c1d2a1d2 100644 --- a/include/libmilter/mfapi.h +++ b/include/libmilter/mfapi.h @@ -476,7 +476,7 @@ LIBMILTER_API int smfi_insheader __P((SMFICTX *, int, char *, char *)); ** as a result of adding this header. ** ** SMFICTX *ctx; Opaque context structure -** int idx; index into the header list where the insertion should happen +** int idx; index into the header list where the insertion should happen ** char *headerh; Header field name ** char *headerv; Header field value */ diff --git a/include/libsmdb/smdb.h b/include/libsmdb/smdb.h index 427599ce206c..bf102695a77b 100644 --- a/include/libsmdb/smdb.h +++ b/include/libsmdb/smdb.h @@ -357,12 +357,12 @@ extern smdb_open_func smdb_open_database; # if NEWDB extern smdb_open_func smdb_db_open; # else -# define smdb_db_open NULL +# define smdb_db_open NULL # endif # if NDBM extern smdb_open_func smdb_ndbm_open; # else -# define smdb_ndbm_open NULL +# define smdb_ndbm_open NULL # endif extern int smdb_add_extension __P((char *, int, char *, char *)); extern int smdb_setup_file __P((char *, char *, int, long, @@ -380,6 +380,6 @@ extern int smdb_unlock_map __P((SMDB_DATABASE *)); # if CDB extern smdb_open_func smdb_cdb_open; # else -# define smdb_cdb_open NULL +# define smdb_cdb_open NULL # endif #endif /* ! _SMDB_H_ */ diff --git a/include/sendmail/pathnames.h b/include/sendmail/pathnames.h index 67be3a2d0184..2ac15cdd118b 100644 --- a/include/sendmail/pathnames.h +++ b/include/sendmail/pathnames.h @@ -33,7 +33,7 @@ # endif /* ! _PATH_SENDMAILPID */ # ifndef _PATH_SENDMAIL -# define _PATH_SENDMAIL "/usr/lib/sendmail" +# define _PATH_SENDMAIL "/usr/lib/sendmail" # endif # ifndef _PATH_MAILDIR diff --git a/include/sm/bdb.h b/include/sm/bdb.h index 832de252ca65..2c712d9664dc 100644 --- a/include/sm/bdb.h +++ b/include/sm/bdb.h @@ -37,9 +37,9 @@ # define DBTXN # if !HASFLOCK && defined(DB_FCNTL_LOCKING) # define SM_DB_FLAG_ADD(flag) (flag) |= DB_FCNTL_LOCKING -# else /* !HASFLOCK && defined(DB_FCNTL_LOCKING) */ +# else # define SM_DB_FLAG_ADD(flag) ((void) 0) -# endif /* !HASFLOCK && defined(DB_FCNTL_LOCKING) */ +# endif # endif /* (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) || DB_VERSION_MAJOR >= 5 */ #endif /* NEWDB */ diff --git a/include/sm/conf.h b/include/sm/conf.h index 7bb031bb0bc0..be9f027cac33 100644 --- a/include/sm/conf.h +++ b/include/sm/conf.h @@ -997,6 +997,7 @@ extern unsigned int sleepX __P((unsigned int seconds)); # define USESYSCTL 1 /* use sysctl(3) for getting ncpus */ # include # include +# define HAVE_IFC_BUF_VOID 1 /* void *ifc_buf instead of caddr_t */ # endif # if defined(__DragonFly__) # define HASSETLOGIN 1 /* has setlogin(2) */ diff --git a/include/sm/gen.h b/include/sm/gen.h index a66bae54b46c..4f2066fa7447 100644 --- a/include/sm/gen.h +++ b/include/sm/gen.h @@ -77,4 +77,16 @@ typedef int SM_ATOMIC_INT_T; typedef unsigned int SM_ATOMIC_UINT_T; +#if _FFR_EAI && !defined(USE_EAI) +# define USE_EAI 1 +#endif + +#if USE_EAI && !defined(_FFR_LOGASIS) +# define _FFR_LOGASIS 1 +#endif + +#if USE_EAI || _FFR_EIGHT_BIT_ADDR_OK +# define _FFR_8BITENVADDR 1 +#endif + #endif /* SM_GEN_H */ diff --git a/include/sm/ixlen.h b/include/sm/ixlen.h new file mode 100644 index 000000000000..c3090ee07bbe --- /dev/null +++ b/include/sm/ixlen.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2020 Proofpoint, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + */ + +#ifndef _SM_IXLEN_H +# define _SM_IXLEN_H 1 + +#define SM_IS_MQ(ch) (((ch) & 0377) == METAQUOTE) + +#if _FFR_8BITENVADDR +# define XLENDECL bool mq=false; \ + int xlen = 0; +# define XLENRESET mq=false, xlen = 0 +# define XLEN(c) do { \ + if (mq) { ++xlen; mq=false; } \ + else if (SM_IS_MQ(c)) mq=true; \ + else ++xlen; \ + } while (0) + +extern int ilenx __P((const char *)); +extern int xleni __P((const char *)); + +# if USE_EAI +extern bool asciistr __P((const char *)); +extern int uxtext_unquote __P((const char *, char *, int)); +extern char *sm_lowercase __P((const char *)); +extern bool utf8_valid __P((const char *, size_t)); +# endif + +#else /* _FFR_8BITENVADDR */ +# define XLENDECL int xlen = 0; +# define XLENRESET xlen = 0 +# define XLEN(c) ++xlen +# define ilenx(str) strlen(str) +# define xleni(str) strlen(str) +#endif /* _FFR_8BITENVADDR */ + +#endif /* ! _SM_IXLEN_H */ diff --git a/include/sm/notify.h b/include/sm/notify.h index e5c193e09b37..4256ea94e747 100644 --- a/include/sm/notify.h +++ b/include/sm/notify.h @@ -10,10 +10,13 @@ #ifndef SM_NOTIFY_H #define SM_NOTIFY_H +/* microseconds */ +#define SM_MICROS 1000000L + int sm_notify_init __P((int)); int sm_notify_start __P((bool, int)); int sm_notify_stop __P((bool, int)); -int sm_notify_rcv __P((char *, size_t, int)); +int sm_notify_rcv __P((char *, size_t, long)); int sm_notify_snd __P((char *, size_t)); #endif /* ! SM_MSG_H */ diff --git a/include/sm/os/sm_os_freebsd.h b/include/sm/os/sm_os_freebsd.h index 7c52edfe029f..db7dbf2b61cd 100644 --- a/include/sm/os/sm_os_freebsd.h +++ b/include/sm/os/sm_os_freebsd.h @@ -26,17 +26,18 @@ # define SM_CONF_STRL 1 # endif # endif +# if __FreeBSD_version >= 1200059 +# ifndef SM_CONF_SEM +# define SM_CONF_SEM 2 /* union semun is no longer declared by default */ +# endif +# endif #endif #ifndef SM_CONF_SHM # define SM_CONF_SHM 1 #endif #ifndef SM_CONF_SEM -# if __FreeBSD__ > 11 -# define SM_CONF_SEM 2 /* union semun is now longer available by default */ -# else -# define SM_CONF_SEM 1 -# endif +# define SM_CONF_SEM 1 #endif #ifndef SM_CONF_MSG # define SM_CONF_MSG 1 diff --git a/include/sm/os/sm_os_openbsd.h b/include/sm/os/sm_os_openbsd.h index a1d94e949c3f..21e0a1010852 100644 --- a/include/sm/os/sm_os_openbsd.h +++ b/include/sm/os/sm_os_openbsd.h @@ -18,13 +18,27 @@ #define SM_OS_NAME "openbsd" +/* +** Temporary HACK for newer icu4c versions which include stdbool.h: +** pretend that it is already included +** otherwise compilation will break because bool is then +** redefined between the prototype declaration and +** the function definition, e.g., +** lowercase.c: error: conflicting types for 'asciistr' +** ../../include/sm/ixlen.h:29:13: note: previous declaration is here +*/ + +#if USE_EAI && !SM_CONF_STDBOOL_H +# define _STDBOOL_H_ 1 +#endif + #define SM_CONF_SYS_CDEFS_H 1 #ifndef SM_CONF_SHM # define SM_CONF_SHM 1 -#endif /* SM_CONF_SHM */ +#endif #ifndef SM_CONF_SEM # define SM_CONF_SEM 1 -#endif /* SM_CONF_SEM */ +#endif #ifndef SM_CONF_MSG # define SM_CONF_MSG 1 -#endif /* SM_CONF_MSG */ +#endif diff --git a/include/sm/rpool.h b/include/sm/rpool.h index 52f76771321a..833474d9c911 100644 --- a/include/sm/rpool.h +++ b/include/sm/rpool.h @@ -15,7 +15,7 @@ */ #ifndef SM_RPOOL_H -# define SM_RPOOL_H +# define SM_RPOOL_H 1 # include # include @@ -166,7 +166,15 @@ sm_rpool_malloc __P(( # endif /* SM_HEAP_CHECK */ #if DO_NOT_USE_STRCPY + +# if SM_HEAP_CHECK > 2 +extern char *sm_rpool_strdup_tagged_x __P((SM_RPOOL_T *rpool, const char *s, char *, int, int)); +# define sm_rpool_strdup_x(rpool, str) sm_rpool_strdup_tagged_x(rpool, str, "sm_rpool_strdup_x:" __FILE__, __LINE__, SmHeapGroup) +# else extern char *sm_rpool_strdup_x __P((SM_RPOOL_T *rpool, const char *s)); +# define sm_rpool_strdup_tagged_x(rpool, str, tag, line, group) sm_rpool_strdup_x(rpool, str) +# endif + #else # define sm_rpool_strdup_x(rpool, str) \ strcpy(sm_rpool_malloc_x(rpool, strlen(str) + 1), str) diff --git a/include/sm/sem.h b/include/sm/sem.h index f188a15deca3..548ee0858ff4 100644 --- a/include/sm/sem.h +++ b/include/sm/sem.h @@ -47,7 +47,7 @@ extern int sm_sem_stop __P((int)); extern int sm_sem_acq __P((int, int, int)); extern int sm_sem_rel __P((int, int, int)); extern int sm_sem_get __P((int, int)); -extern int sm_semsetowner __P((int, uid_t, gid_t, mode_t)); +extern int sm_semsetowner __P((int, uid_t, gid_t, MODE_T)); # else /* SM_CONF_SEM > 0 */ # define sm_sem_start(key, nsem, semflg, owner) 0 diff --git a/include/sm/sendmail.h b/include/sm/sendmail.h index 56a247f92183..8913b32d4fb4 100644 --- a/include/sm/sendmail.h +++ b/include/sm/sendmail.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006 Proofpoint, Inc. and its suppliers. + * Copyright (c) 2006, 2020 Proofpoint, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -14,11 +14,31 @@ #ifndef _SM_SENDMAIL_H # define _SM_SENDMAIL_H 1 +#include + /* "out of band" indicator */ #define METAQUOTE ((unsigned char)0377) /* quotes the next octet */ +#define SM_MM_QUOTE(ch) (((ch) & 0377) == METAQUOTE || (((ch) & 0340) == 0200)) extern int dequote_internal_chars __P((char *, char *, int)); -extern char *quote_internal_chars __P((char *, char *, int *)); +#if SM_HEAP_CHECK > 2 +extern char *quote_internal_chars_tagged __P((char *, char *, int *, SM_RPOOL_T *, char *, int, int)); +# define quote_internal_chars(ibp, obp, bsp, rpool) quote_internal_chars_tagged(ibp, obp, bsp, rpool, "quote_internal_chars:" __FILE__, __LINE__, SmHeapGroup) +#else +extern char *quote_internal_chars __P((char *, char *, int *, SM_RPOOL_T *)); +# define quote_internal_chars_tagged(ibp, obp, bsp, rpool, file, line, group) quote_internal_chars(ibp, obp, bsp, rpool) +#endif extern char *str2prt __P((char *)); +extern char *makelower __P((char *)); +#if USE_EAI +extern bool sm_strcaseeq __P((const char *, const char *)); +extern bool sm_strncaseeq __P((const char *, const char *, size_t)); +# define SM_STRCASEEQ(a, b) sm_strcaseeq((a), (b)) +# define SM_STRNCASEEQ(a, b, n) sm_strncaseeq((a), (b), (n)) +#else +# define SM_STRCASEEQ(a, b) (sm_strcasecmp((a), (b)) == 0) +# define SM_STRNCASEEQ(a, b, n) (sm_strncasecmp((a), (b), (n)) == 0) +#endif + #endif /* ! _SM_SENDMAIL_H */ diff --git a/include/sm/shm.h b/include/sm/shm.h index f6c5ad56c1c9..2ee0fdbc9387 100644 --- a/include/sm/shm.h +++ b/include/sm/shm.h @@ -28,7 +28,7 @@ extern void *sm_shmstart __P((key_t, int , int , int *, bool)); extern int sm_shmstop __P((void *, int, bool)); -extern int sm_shmsetowner __P((int, uid_t, gid_t, mode_t)); +extern int sm_shmsetowner __P((int, uid_t, gid_t, MODE_T)); /* for those braindead systems... (e.g., SunOS 4) */ diff --git a/include/sm/sysexits.h b/include/sm/sysexits.h index 53767d54e7c4..0505e8a0c3e0 100644 --- a/include/sm/sysexits.h +++ b/include/sm/sysexits.h @@ -74,6 +74,10 @@ ** CANTCREAT, but rather for higher level permissions. */ +# ifdef EX_OK +# undef EX_OK /* for SVr4.2 SMP */ +# endif + # if SM_CONF_SYSEXITS_H # include # else /* SM_CONF_SYSEXITS_H */ diff --git a/include/sm/time.h b/include/sm/time.h index b6d31a4bd292..40134fdb557c 100644 --- a/include/sm/time.h +++ b/include/sm/time.h @@ -13,7 +13,6 @@ # define SM_TIME_H 1 # include - # include /* should be defined in sys/time.h */ @@ -52,5 +51,4 @@ ((tvp)->tv_sec cmp (uvp)->tv_sec)) #endif /* !timercmp */ - #endif /* ! SM_TIME_H */ diff --git a/libmilter/docs/overview.html b/libmilter/docs/overview.html index b88e45136965..5bbdc2f96a85 100644 --- a/libmilter/docs/overview.html +++ b/libmilter/docs/overview.html @@ -75,8 +75,9 @@ MESSAGE:For each message in this connection (sequentially) process recipient (xxfi_envrcpt) } For each filter - { process DATA (xxfi_data) + For each filter + { For each header process header (xxfi_header) process end of headers (xxfi_eoh) diff --git a/libmilter/docs/smfi_setmlreply.html b/libmilter/docs/smfi_setmlreply.html index 3f36e5296430..35ed16b4b891 100644 --- a/libmilter/docs/smfi_setmlreply.html +++ b/libmilter/docs/smfi_setmlreply.html @@ -33,7 +33,8 @@ other than xxfi_connect. Effects Directly set the SMTP error reply code for this connection to the given -lines after the xcode. The list of arguments must be NULL terminated. +lines after the xcode. +The list of arguments must be NULL terminated. This code will be used on subsequent error replies resulting from actions taken by this filter. @@ -48,25 +49,28 @@ taken by this filter. Opaque context structure. rcode - The three-digit (RFC 821/2821) SMTP reply code, as a - null-terminated string. rcode cannot be NULL, and must be a valid - 4XX or 5XX reply code. + The three-digit (RFC 821/2821) SMTP reply code, + as a null-terminated string. + rcode cannot be NULL, and must be a valid 4XX or 5XX reply code. xcode - The extended (RFC 1893/2034) reply code. If xcode is NULL, no - extended code is used. Otherwise, xcode must conform to RFC 1893/2034. + The extended (RFC 1893/2034) reply code. + If xcode is NULL, a generic X.0.0 code is used, + where X is the first digit of rcode. + Otherwise, xcode must conform to RFC 1893/2034. ... - The remainder of the arguments are single lines of text, up to - 32 arguments, which will be used as the text part of the SMTP - reply. The list must be NULL terminated. + The remainder of the arguments are single lines of text, + up to 32 arguments, + which will be used as the text part of the SMTP reply. + The list must be NULL terminated. -RETURN VALUES +EXAMPLE For example, the code:
diff --git a/libmilter/engine.c b/libmilter/engine.c
index 2619395a6eb1..5872c166ce0a 100644
--- a/libmilter/engine.c
+++ b/libmilter/engine.c
@@ -64,28 +64,28 @@ typedef struct cmdfct_t cmdfct;
 #define CI_EOH		6
 #define CI_LAST		CI_EOH
 #if CI_LAST < CI_DATA
-ERROR: do not compile with CI_LAST < CI_DATA
+# ERROR "do not compile with CI_LAST < CI_DATA"
 #endif
 #if CI_LAST < CI_EOM
-ERROR: do not compile with CI_LAST < CI_EOM
+# ERROR "do not compile with CI_LAST < CI_EOM"
 #endif
 #if CI_LAST < CI_EOH
-ERROR: do not compile with CI_LAST < CI_EOH
+# ERROR "do not compile with CI_LAST < CI_EOH"
 #endif
 #if CI_LAST < CI_RCPT
-ERROR: do not compile with CI_LAST < CI_RCPT
+# ERROR "do not compile with CI_LAST < CI_RCPT"
 #endif
 #if CI_LAST < CI_MAIL
-ERROR: do not compile with CI_LAST < CI_MAIL
+# ERROR "do not compile with CI_LAST < CI_MAIL"
 #endif
 #if CI_LAST < CI_HELO
-ERROR: do not compile with CI_LAST < CI_HELO
+# ERROR "do not compile with CI_LAST < CI_HELO"
 #endif
 #if CI_LAST < CI_CONN
-ERROR: do not compile with CI_LAST < CI_CONN
+# ERROR "do not compile with CI_LAST < CI_CONN"
 #endif
 #if CI_LAST >= MAX_MACROS_ENTRIES
-ERROR: do not compile with CI_LAST >= MAX_MACROS_ENTRIES
+# ERROR "do not compile with CI_LAST >= MAX_MACROS_ENTRIES"
 #endif
 
 /* function prototypes */
@@ -1190,7 +1190,7 @@ st_connectinfo(g)
 	s = g->a_buf;
 	i = 0;
 	l = g->a_len;
-	while (i <= l && s[i] != '\0')  
+	while (i <= l && s[i] != '\0')
 		++i;
 	if (i + 1 >= l)
 		return _SMFIS_ABORT;
@@ -1216,7 +1216,7 @@ st_connectinfo(g)
 		/* make sure string is terminated */
 		if (s[l - 1] != '\0')
 			return _SMFIS_ABORT;
-# if NETINET
+#if NETINET
 		if (family == SMFIA_INET)
 		{
 			if (inet_aton(s + i, (struct in_addr *) &sockaddr.sin.sin_addr)
@@ -1233,8 +1233,8 @@ st_connectinfo(g)
 				sockaddr.sin.sin_port = port;
 		}
 		else
-# endif /* NETINET */
-# if NETINET6
+#endif /* NETINET */
+#if NETINET6
 		if (family == SMFIA_INET6)
 		{
 			if (mi_inet_pton(AF_INET6, s + i,
@@ -1251,8 +1251,8 @@ st_connectinfo(g)
 				sockaddr.sin6.sin6_port = port;
 		}
 		else
-# endif /* NETINET6 */
-# if NETUNIX
+#endif /* NETINET6 */
+#if NETUNIX
 		if (family == SMFIA_UNIX)
 		{
 			if (sm_strlcpy(sockaddr.sunix.sun_path, s + i,
@@ -1268,7 +1268,7 @@ st_connectinfo(g)
 			sockaddr.sunix.sun_family = AF_UNIX;
 		}
 		else
-# endif /* NETUNIX */
+#endif /* NETUNIX */
 		{
 			smi_log(SMI_LOG_ERR,
 				"%s: connect[%ld]: unknown family %d",
@@ -1870,21 +1870,21 @@ mi_rd_socket_ready (sd)
 {
 	int n;
 	int nerr = 0;
-#if SM_CONF_POLL
+# if SM_CONF_POLL
 	struct pollfd pfd;
-#else
+# else
 	fd_set	rd_set, exc_set;
-#endif
+# endif
 
 	do
 	{
-#if SM_CONF_POLL
+# if SM_CONF_POLL
 		pfd.fd = sd;
 		pfd.events = POLLIN;
 		pfd.revents = 0;
 
 		n = poll(&pfd, 1, MI_RD_CMD_TO);
-#else /* SM_CONF_POLL */
+# else /* SM_CONF_POLL */
 		struct timeval timeout;
 
 		FD_ZERO(&rd_set);
@@ -1895,7 +1895,7 @@ mi_rd_socket_ready (sd)
 		timeout.tv_sec = MI_RD_CMD_TO / 1000;
 		timeout.tv_usec = 0;
 		n = select(sd + 1, &rd_set, NULL, &exc_set, &timeout);
-#endif /* SM_CONF_POLL */
+# endif /* SM_CONF_POLL */
 
 		if (n < 0)
 		{
@@ -1914,10 +1914,10 @@ mi_rd_socket_ready (sd)
 	if (nerr >= MI_RD_MAX_ERR)
 		return false;
 
-#if SM_CONF_POLL
+# if SM_CONF_POLL
 	return (pfd.revents != 0);
-#else
+# else
 	return FD_ISSET(sd, &rd_set) || FD_ISSET(sd, &exc_set);
-#endif
+# endif
 }
 #endif /* _FFR_WORKERS_POOL */
diff --git a/libmilter/listener.c b/libmilter/listener.c
index 0468a6231cce..25ff895d339e 100644
--- a/libmilter/listener.c
+++ b/libmilter/listener.c
@@ -22,13 +22,13 @@ SM_RCSID("@(#)$Id: listener.c,v 8.127 2013-11-22 20:51:36 ca Exp $")
 #include 
 
 
-# if NETINET || NETINET6
-#  include 
-# endif
-# if SM_CONF_POLL
-#  undef SM_FD_OK_SELECT
-#  define SM_FD_OK_SELECT(fd)		true
-# endif
+#if NETINET || NETINET6
+# include 
+#endif
+#if SM_CONF_POLL
+# undef SM_FD_OK_SELECT
+# define SM_FD_OK_SELECT(fd)		true
+#endif
 
 static smutex_t L_Mutex;
 static int L_family;
@@ -815,9 +815,9 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
 
 		if (ValidSocket(connfd) &&
 		    (clilen == 0 ||
-# ifdef BSD4_4_SOCKADDR
+#ifdef BSD4_4_SOCKADDR
 		     cliaddr.sa.sa_len == 0 ||
-# endif
+#endif
 		     cliaddr.sa.sa_family != L_family))
 		{
 			(void) closesocket(connfd);
@@ -961,7 +961,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
 			tcnt++;
 			smi_log(SMI_LOG_ERR,
 				LOG_CRT_FAIL,
-				smfi->xxfi_name,  r,
+				smfi->xxfi_name, r,
 				tcnt >= MAX_FAILS_T ? "abort" : "try again");
 			MI_SLEEP(tcnt);
 			(void) closesocket(connfd);
@@ -980,8 +980,10 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
 	else
 	{
 		if (mistop != MILTER_CONT)
-			smi_log(SMI_LOG_INFO, "%s: mi_stop=%d",
-				smfi->xxfi_name, mistop);
+			smi_log(SMI_LOG_INFO, "%s=%s",
+				smfi->xxfi_name,
+				MILTER_STOP == mistop ? "terminating"
+							: "aborting");
 		mi_closener();
 	}
 	(void) smutex_destroy(&L_Mutex);
diff --git a/libmilter/sm_gethost.c b/libmilter/sm_gethost.c
index 262edb6c541c..9bbf9b78b848 100644
--- a/libmilter/sm_gethost.c
+++ b/libmilter/sm_gethost.c
@@ -149,9 +149,9 @@ mi_gethostbyname(name, family)
 	/* the function is supposed to return only the requested family */
 	if (h != NULL && h->h_addrtype != family)
 	{
-# if NETINET6
+#if NETINET6
 		freehostent(h);
-# endif
+#endif
 		h = NULL;
 		SM_SET_H_ERRNO(NO_DATA);
 	}
diff --git a/libsm/Makefile.m4 b/libsm/Makefile.m4
index 0dcb2d02b68d..173427970f62 100644
--- a/libsm/Makefile.m4
+++ b/libsm/Makefile.m4
@@ -6,11 +6,12 @@ define(`confREQUIRE_LIBSM', `true')
 define(`confREQUIRE_SM_OS_H', `true')
 PREPENDDEF(`confENVDEF', `confMAPDEF')
 bldPRODUCT_START(`library', `libsm')
-define(`bldSOURCES', ` assert.c debug.c errstring.c exc.c heap.c match.c rpool.c strdup.c strerror.c strl.c clrerr.c fclose.c feof.c ferror.c fflush.c fget.c fpos.c findfp.c flags.c fopen.c fprintf.c fpurge.c fput.c fread.c fscanf.c fseek.c fvwrite.c fwalk.c fwrite.c get.c makebuf.c put.c refill.c rewind.c setvbuf.c smstdio.c snprintf.c sscanf.c stdio.c strio.c ungetc.c vasprintf.c vfprintf.c vfscanf.c vprintf.c vsnprintf.c wbuf.c wsetup.c string.c stringf.c xtrap.c strto.c test.c strcasecmp.c strrevcmp.c signal.c clock.c config.c shm.c sem.c mbdb.c strexit.c cf.c ldap.c niprop.c mpeix.c memstat.c util.c inet6_ntop.c notify.c ')
+define(`bldSOURCES', ` assert.c debug.c errstring.c exc.c heap.c match.c rpool.c strdup.c strerror.c strl.c clrerr.c fclose.c feof.c ferror.c fflush.c fget.c fpos.c findfp.c flags.c fopen.c fprintf.c fpurge.c fput.c fread.c fscanf.c fseek.c fvwrite.c fwalk.c fwrite.c get.c makebuf.c put.c refill.c rewind.c setvbuf.c smstdio.c snprintf.c sscanf.c stdio.c strio.c ungetc.c vasprintf.c vfprintf.c vfscanf.c vprintf.c vsnprintf.c wbuf.c wsetup.c string.c stringf.c xtrap.c strto.c test.c strcasecmp.c strrevcmp.c signal.c clock.c config.c shm.c sem.c mbdb.c strexit.c cf.c ldap.c niprop.c mpeix.c memstat.c util.c inet6_ntop.c notify.c ilenx.c xleni.c utf8_valid.c uxtext_unquote.c lowercase.c strcaseeq.c ')
 bldPRODUCT_END
 dnl msg.c
 dnl syslogio.c
 
+srcdir=${SRCDIR}/libsm
 define(`confCHECK_LIBS',`libsm.a')dnl
 include(confBUILDTOOLSDIR`/M4/'bldM4_TYPE_DIR`/check.m4')
 smcheck(`t-event', `compile-run')
@@ -32,8 +33,6 @@ smcheck(`t-scanf', `compile-run')
 smcheck(`t-shm', `compile-run')
 smcheck(`t-sem', `compile-run')
 smcheck(`t-inet6_ntop', `compile-run')
-smcheck(`t-notify', `compile-run')
-dnl smcheck(`t-msg', `compile-run')
 smcheck(`t-cf')
 smcheck(`b-strcmp')
 dnl SM_CONF_STRL cannot be turned off
@@ -41,6 +40,13 @@ dnl smcheck(`b-strl')
 smcheck(`t-memstat')
 
 smcheck(`t-qic', `compile-run')
+smcheck(`t-str2prt', `compile-run')
+dnl ? smcheck(`t-isprint', `compile-run')
+smcheck(`t-ixlen', `compile')
+smcheck(`t-ixlen.sh', `run')
+smcheck(`t-streq', `compile')
+smcheck(`t-utf8_valid', `compile')
+smcheck(`t-streq.sh', `run')
 divert(bldTARGETS_SECTION)
 divert(0)
 
diff --git a/libsm/cf.c b/libsm/cf.c
index 62ca39728321..5d35ebbfb32e 100644
--- a/libsm/cf.c
+++ b/libsm/cf.c
@@ -18,6 +18,7 @@ SM_RCSID("@(#)$Id: cf.c,v 1.8 2013-11-22 20:51:42 ca Exp $")
 #include 
 #include 
 #include 
+#include 
 
 /*
 **  SM_CF_GETOPT -- look up option values in the sendmail.cf file
@@ -80,7 +81,7 @@ sm_cf_getopt(path, optc, optv)
 
 		for (i = 0; i < optc; ++i)
 		{
-			if (sm_strcasecmp(optv[i].opt_name, id) == 0)
+			if (SM_STRCASEEQ(optv[i].opt_name, id))
 			{
 				optv[i].opt_val = sm_strdup_x(val);
 				break;
diff --git a/libsm/clock.c b/libsm/clock.c
index 6e300b0a5ca4..7bc921fc36cd 100644
--- a/libsm/clock.c
+++ b/libsm/clock.c
@@ -162,7 +162,7 @@ sm_sigsafe_seteventm(intvl, func, arg)
 	LEAVE_CRITICAL();
 
 	(void) sm_signal(SIGALRM, sm_tick);
-# if SM_CONF_SETITIMER
+#if SM_CONF_SETITIMER
 	timersub(&SmEventQueue->ev_time, &now, &itime.it_value);
 	itime.it_interval.tv_sec = 0;
 	itime.it_interval.tv_usec = 0;
@@ -171,10 +171,10 @@ sm_sigsafe_seteventm(intvl, func, arg)
 	if (itime.it_value.tv_sec == 0 && itime.it_value.tv_usec == 0)
 		itime.it_value.tv_usec = 1000;
 	(void) setitimer(ITIMER_REAL, &itime, NULL);
-# else /* SM_CONF_SETITIMER */
+#else /* SM_CONF_SETITIMER */
 	intvl = SmEventQueue->ev_time - now;
 	(void) alarm((unsigned) (intvl < 1 ? 1 : intvl));
-# endif /* SM_CONF_SETITIMER */
+#endif /* SM_CONF_SETITIMER */
 	if (wasblocked == 0)
 		(void) sm_releasesignal(SIGALRM);
 	return ev;
@@ -198,9 +198,9 @@ sm_clrevent(ev)
 {
 	register SM_EVENT **evp;
 	int wasblocked;
-# if SM_CONF_SETITIMER
+#if SM_CONF_SETITIMER
 	struct itimerval clr;
-# endif
+#endif
 
 	if (ev == NULL)
 		return;
@@ -233,15 +233,15 @@ sm_clrevent(ev)
 	else
 	{
 		/* nothing left in event queue, no need for an alarm */
-# if SM_CONF_SETITIMER
+#if SM_CONF_SETITIMER
 		clr.it_interval.tv_sec = 0;
 		clr.it_interval.tv_usec = 0;
 		clr.it_value.tv_sec = 0;
 		clr.it_value.tv_usec = 0;
 		(void) setitimer(ITIMER_REAL, &clr, NULL);
-# else /* SM_CONF_SETITIMER */
+#else /* SM_CONF_SETITIMER */
 		(void) alarm(0);
-# endif /* SM_CONF_SETITIMER */
+#endif /* SM_CONF_SETITIMER */
 	}
 }
 /*
@@ -496,10 +496,10 @@ sm_tick(sig)
 */
 
 
-# if !HAVE_NANOSLEEP
+#if !HAVE_NANOSLEEP
 static void	sm_endsleep __P((int));
 static bool	volatile SmSleepDone;
-# endif
+#endif
 
 #ifndef SLEEP_T
 # define SLEEP_T	unsigned int
@@ -521,70 +521,70 @@ sleep(intvl)
 #else /* HAVE_NANOSLEEP */
 	int was_held;
 	SM_EVENT *ev;
-#if _FFR_SLEEP_USE_SELECT > 0
+# if _FFR_SLEEP_USE_SELECT > 0
 	int r;
-# if _FFR_SLEEP_USE_SELECT > 0
+#  if _FFR_SLEEP_USE_SELECT > 0
 	struct timeval sm_io_to;
-# endif
-#endif /* _FFR_SLEEP_USE_SELECT > 0 */
-#if SM_CONF_SETITIMER
+#  endif
+# endif /* _FFR_SLEEP_USE_SELECT > 0 */
+# if SM_CONF_SETITIMER
 	struct timeval now, begin, diff;
-# if _FFR_SLEEP_USE_SELECT > 0
+#  if _FFR_SLEEP_USE_SELECT > 0
 	struct timeval slpv;
-# endif
-#else /*  SM_CONF_SETITIMER */
+#  endif
+# else /*  SM_CONF_SETITIMER */
 	time_t begin, now;
-#endif /*  SM_CONF_SETITIMER */
+# endif /*  SM_CONF_SETITIMER */
 
 	if (intvl == 0)
 		return (SLEEP_T) 0;
-#if defined(_FFR_MAX_SLEEP_TIME) && _FFR_MAX_SLEEP_TIME > 2
+# if defined(_FFR_MAX_SLEEP_TIME) && _FFR_MAX_SLEEP_TIME > 2
 	if (intvl > _FFR_MAX_SLEEP_TIME)
 	{
 		syslog(LOG_ERR, "sleep: interval=%u exceeds max value %d",
 			intvl, _FFR_MAX_SLEEP_TIME);
-# if 0
+#  if 0
 		SM_ASSERT(intvl < (unsigned int) INT_MAX);
-# endif
+#  endif
 		intvl = _FFR_MAX_SLEEP_TIME;
 	}
-#endif /* defined(_FFR_MAX_SLEEP_TIME) && _FFR_MAX_SLEEP_TIME > 2 */
+# endif /* defined(_FFR_MAX_SLEEP_TIME) && _FFR_MAX_SLEEP_TIME > 2 */
 	SmSleepDone = false;
 
-#if SM_CONF_SETITIMER
-# if _FFR_SLEEP_USE_SELECT > 0
+# if SM_CONF_SETITIMER
+#  if _FFR_SLEEP_USE_SELECT > 0
 	slpv.tv_sec = intvl;
 	slpv.tv_usec = 0;
-# endif
+#  endif
 	(void) gettimeofday(&now, NULL);
 	begin = now;
-#else /*  SM_CONF_SETITIMER */
+# else /*  SM_CONF_SETITIMER */
 	now = begin = time(NULL);
-#endif /*  SM_CONF_SETITIMER */
+# endif /*  SM_CONF_SETITIMER */
 
 	ev = sm_setevent((time_t) intvl, sm_endsleep, 0);
 	if (ev == NULL)
 	{
 		/* COMPLAIN */
-#if 0
+# if 0
 		syslog(LOG_ERR, "sleep: sm_setevent(%u) failed", intvl);
-#endif
+# endif
 		SmSleepDone = true;
 	}
 	was_held = sm_releasesignal(SIGALRM);
 
 	while (!SmSleepDone)
 	{
-#if SM_CONF_SETITIMER
+# if SM_CONF_SETITIMER
 		(void) gettimeofday(&now, NULL);
 		timersub(&now, &begin, &diff);
 		if (diff.tv_sec < 0 ||
 		    (diff.tv_sec == 0 && diff.tv_usec == 0))
 			break;
-# if _FFR_SLEEP_USE_SELECT > 0
+#  if _FFR_SLEEP_USE_SELECT > 0
 		timersub(&slpv, &diff, &sm_io_to);
-# endif
-#else /* SM_CONF_SETITIMER */
+#  endif
+# else /* SM_CONF_SETITIMER */
 		now = time(NULL);
 
 		/*
@@ -595,14 +595,14 @@ sleep(intvl)
 
 		if (!(begin + (time_t) intvl + 1 > now))
 			break;
-# if _FFR_SLEEP_USE_SELECT > 0
+#  if _FFR_SLEEP_USE_SELECT > 0
 		sm_io_to.tv_sec = intvl - (now - begin);
 		if (sm_io_to.tv_sec <= 0)
 			sm_io_to.tv_sec = 1;
 		sm_io_to.tv_usec = 0;
-# endif /* _FFR_SLEEP_USE_SELECT > 0 */
-#endif /* SM_CONF_SETITIMER */
-#if _FFR_SLEEP_USE_SELECT > 0
+#  endif /* _FFR_SLEEP_USE_SELECT > 0 */
+# endif /* SM_CONF_SETITIMER */
+# if _FFR_SLEEP_USE_SELECT > 0
 		if (intvl <= _FFR_SLEEP_USE_SELECT)
 		{
 			r = select(0, NULL, NULL, NULL, &sm_io_to);
@@ -610,7 +610,8 @@ sleep(intvl)
 				break;
 		}
 		else
-#endif /* _FFR_SLEEP_USE_SELECT > 0 */
+# endif /* _FFR_SLEEP_USE_SELECT > 0 */
+		/* "else" in #if code above */
 		(void) pause();
 	}
 
diff --git a/libsm/config.c b/libsm/config.c
index b96a4a0c8aba..cb0c941ff5be 100644
--- a/libsm/config.c
+++ b/libsm/config.c
@@ -219,12 +219,10 @@ char *SmCompileOptions[] =
 	"SM_CONF_STDDEF_H",
 #endif
 
-#if 0
 /* XXX this is always enabled (for now) */
-#if SM_CONF_STRL
+#if SM_CONF_STRL && 0
 	"SM_CONF_STRL",
 #endif
-#endif /* 0 */
 
 #if SM_CONF_SYS_CDEFS_H
 	"SM_CONF_SYS_CDEFS_H",
diff --git a/libsm/heap.c b/libsm/heap.c
index dd5e64b0bfdd..330739acef22 100644
--- a/libsm/heap.c
+++ b/libsm/heap.c
@@ -25,6 +25,13 @@ SM_RCSID("@(#)$Id: heap.c,v 1.52 2013-11-22 20:51:43 ca Exp $")
 #include 
 #include 
 
+#if SM_HEAP_CHECK
+# include 
+# include 
+# include 
+# include 
+#endif
+
 /* undef all macro versions of the "functions" so they can be specified here */
 #undef sm_malloc
 #undef sm_malloc_x
@@ -458,7 +465,7 @@ sm_malloc_tagged_x(size, tag, num, group)
 **	Parameters:
 **		ptr -- pointer to register.
 **		size -- size of requested memory.
-**		tag -- tag for debugging.
+**		tag -- tag for debugging (this is NOT copied!)
 **		num -- additional value for debugging.
 **		group -- heap group for debugging.
 **
@@ -754,6 +761,9 @@ sm_heap_report(stream, verbosity)
 {
 	int i;
 	unsigned long group0total, group1total, otherstotal, grandtotal;
+	static char str[32] = "[1900-00-00/00:00:00] ";
+	struct tm *tmp;
+	time_t currt;
 
 	if (!HEAP_CHECK || verbosity <= 0)
 		return;
@@ -804,11 +814,18 @@ sm_heap_report(stream, verbosity)
 			hi = hi->hi_next;
 		}
 	}
+
+	currt = time((time_t *)0);
+	tmp = localtime(&currt);
+	snprintf(str, sizeof(str), "[%d-%02d-%02d/%02d:%02d:%02d] ",
+		1900 + tmp->tm_year,	/* HACK */
+		tmp->tm_mon + 1,
+		tmp->tm_mday,
+		tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
 	sm_io_fprintf(stream, SM_TIME_DEFAULT,
-		"heap max=%lu, total=%lu, ",
-		(unsigned long) SmHeapMaxTotal, grandtotal);
-	sm_io_fprintf(stream, SM_TIME_DEFAULT,
-		"group 0=%lu, group 1=%lu, others=%lu\n",
+		"pid=%ld time=%s\nheap max=%lu, total=%lu, group 0=%lu, group 1=%lu, others=%lu\n",
+		(long) getpid(), str,
+		(unsigned long) SmHeapMaxTotal, grandtotal,
 		group0total, group1total, otherstotal);
 	if (grandtotal != SmHeapTotal)
 	{
diff --git a/libsm/ilenx.c b/libsm/ilenx.c
new file mode 100644
index 000000000000..ef7e7427929a
--- /dev/null
+++ b/libsm/ilenx.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ */
+
+#include 
+#include 
+#include 
+
+#if _FFR_8BITENVADDR
+/*
+**  ILENX -- determine the e'x'ternal length of a string in 'i'internal format
+**
+**	Parameters:
+**		str -- string [i]
+**
+**	Returns:
+**		e'x'ternal length of a string in 'i'internal format
+*/
+
+int
+ilenx(str)
+	const char *str;
+{
+	char c;
+	int idx;
+	XLENDECL
+
+	if (NULL == str)
+		return -1;
+	for (idx = 0; (c = str[idx]) != '\0'; idx++)
+		XLEN(c);
+	return xlen;
+}
+#endif /* _FFR_8BITENVADDR */
diff --git a/libsm/ldap.c b/libsm/ldap.c
index 116dc8fac343..a78ab4daa567 100644
--- a/libsm/ldap.c
+++ b/libsm/ldap.c
@@ -27,10 +27,8 @@ SM_RCSID("@(#)$Id: ldap.c,v 1.86 2013-11-22 20:51:43 ca Exp $")
 # include 
 # include 
 # include 
-#  ifdef EX_OK
-#   undef EX_OK			/* for SVr4.2 SMP */
-#  endif
 # include 
+# include 
 
 SM_DEBUG_T SmLDAPTrace = SM_DEBUG_INITIALIZER("sm_trace_ldap",
 	"@(#)$Debug: sm_trace_ldap - trace LDAP operations $");
@@ -49,17 +47,17 @@ static SM_LDAP_RECURSE_ENTRY *sm_ldap_add_recurse __P((SM_LDAP_RECURSE_LIST **,
 **
 */
 
-#if _FFR_LDAP_VERSION
-# if defined(LDAP_VERSION_MAX) && _FFR_LDAP_VERSION > LDAP_VERSION_MAX
-    ERROR FFR_LDAP_VERSION > _LDAP_VERSION_MAX
-# endif
-# if defined(LDAP_VERSION_MIN) && _FFR_LDAP_VERSION < LDAP_VERSION_MIN
-    ERROR FFR_LDAP_VERSION < _LDAP_VERSION_MIN
-# endif
-# define SM_LDAP_VERSION_DEFAULT	_FFR_LDAP_VERSION
-#else /* _FFR_LDAP_VERSION */
-# define SM_LDAP_VERSION_DEFAULT	0
-#endif /* _FFR_LDAP_VERSION */
+# if _FFR_LDAP_VERSION
+#  if defined(LDAP_VERSION_MAX) && _FFR_LDAP_VERSION > LDAP_VERSION_MAX
+#   ERROR "_FFR_LDAP_VERSION > LDAP_VERSION_MAX"
+#  endif
+#  if defined(LDAP_VERSION_MIN) && _FFR_LDAP_VERSION < LDAP_VERSION_MIN
+#   ERROR "_FFR_LDAP_VERSION < LDAP_VERSION_MAX"
+#  endif
+#  define SM_LDAP_VERSION_DEFAULT	_FFR_LDAP_VERSION
+# else /* _FFR_LDAP_VERSION */
+#  define SM_LDAP_VERSION_DEFAULT	0
+# endif /* _FFR_LDAP_VERSION */
 
 void
 sm_ldap_clear(lmap)
@@ -100,7 +98,7 @@ sm_ldap_clear(lmap)
 	lmap->ldap_multi_args = false;
 }
 
-#  if _FFR_SM_LDAP_DBG && defined(LBER_OPT_LOG_PRINT_FN)
+# if _FFR_SM_LDAP_DBG && defined(LBER_OPT_LOG_PRINT_FN)
 static void ldap_debug_cb __P((const char *msg));
 
 static void
@@ -110,7 +108,7 @@ ldap_debug_cb(msg)
 	if (sm_debug_active(&SmLDAPTrace, 4))
 		sm_dprintf("%s", msg);
 }
-#  endif /* _FFR_SM_LDAP_DBG && defined(LBER_OPT_LOG_PRINT_FN) */
+# endif /* _FFR_SM_LDAP_DBG && defined(LBER_OPT_LOG_PRINT_FN) */
 
 
 # if LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT)
@@ -298,7 +296,7 @@ do									\
 	if (ev != NULL)							\
 		sm_clrevent(ev);					\
 } while (0)
-#endif /* !USE_LDAP_INIT || !LDAP_NETWORK_TIMEOUT */
+# endif /* !USE_LDAP_INIT || !LDAP_NETWORK_TIMEOUT */
 
 bool
 sm_ldap_start(name, lmap)
@@ -336,7 +334,7 @@ sm_ldap_start(name, lmap)
 
 	if (lmap->ldap_uri != NULL)
 	{
-#if SM_CONF_LDAP_INITIALIZE
+# if SM_CONF_LDAP_INITIALIZE
 		if (sm_debug_active(&SmLDAPTrace, 9))
 			sm_dprintf("ldap_initialize(%s)\n", lmap->ldap_uri);
 		/* LDAP server supports URIs so use them directly */
@@ -345,7 +343,7 @@ sm_ldap_start(name, lmap)
 			sm_dprintf("ldap_initialize(%s)=%d, ld=%p\n", lmap->ldap_uri, save_errno, ld);
 		sm_ldap_setoptsg(lmap);
 
-#else /* SM_CONF_LDAP_INITIALIZE */
+# else /* SM_CONF_LDAP_INITIALIZE */
 		LDAPURLDesc *ludp = NULL;
 
 		/* Blast apart URL and use the ldap_init/ldap_open below */
@@ -365,7 +363,7 @@ sm_ldap_start(name, lmap)
 		}
 		lmap->ldap_port = ludp->lud_port;
 		ldap_free_urldesc(ludp);
-#endif /* SM_CONF_LDAP_INITIALIZE */
+# endif /* SM_CONF_LDAP_INITIALIZE */
 	}
 
 	if (ld == NULL)
@@ -537,9 +535,9 @@ sm_ldap_search_m(lmap, argv)
 
 		if (lmap->ldap_multi_args)
 		{
-#if SM_LDAP_ARGS < 10
-# ERROR _SM_LDAP_ARGS must be 10
-#endif /* SM_LDAP_ARGS < 10 */
+# if SM_LDAP_ARGS < 10
+#  ERROR _SM_LDAP_ARGS must be 10
+# endif
 			if (q[1] == 's')
 				key = argv[0];
 			else if (q[1] >= '0' && q[1] <= '9')
@@ -549,9 +547,9 @@ sm_ldap_search_m(lmap, argv)
 				{
 # if SM_LDAP_ERROR_ON_MISSING_ARGS
 					return SM_LDAP_ERR_ARG_MISS;
-# else /* SM_LDAP_ERROR_ON_MISSING_ARGS */
+# else
 					key = "";
-# endif /* SM_LDAP_ERROR_ON_MISSING_ARGS */
+# endif
 				}
 			}
 			else
@@ -907,7 +905,7 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
 				continue;
 			}
 
-#if _FFR_LDAP_SINGLEDN
+# if _FFR_LDAP_SINGLEDN
 			if (bitset(SM_LDAP_SINGLEDN, flags) && *result != NULL)
 			{
 				/* only wanted one match */
@@ -915,7 +913,7 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
 				errno = ENOENT;
 				return EX_NOTFOUND;
 			}
-#endif /* _FFR_LDAP_SINGLEDN */
+# endif /* _FFR_LDAP_SINGLEDN */
 
 			/* record completed DN's to prevent loops */
 			dn = ldap_get_dn(lmap->ldap_ld, entry);
@@ -970,8 +968,8 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
 				type = SM_LDAP_ATTR_NONE;
 				for (i = 0; lmap->ldap_attr[i] != NULL; i++)
 				{
-					if (sm_strcasecmp(lmap->ldap_attr[i],
-							  attr) == 0)
+					if (SM_STRCASEEQ(lmap->ldap_attr[i],
+							 attr))
 					{
 						type = lmap->ldap_attr_type[i];
 						needobjclass = lmap->ldap_attr_needobjclass[i];
@@ -1342,9 +1340,9 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
 		statp = EX_TEMPFAIL;
 		switch (save_errno)
 		{
-#ifdef LDAP_SERVER_DOWN
+# ifdef LDAP_SERVER_DOWN
 		  case LDAP_SERVER_DOWN:
-#endif /* LDAP_SERVER_DOWN */
+# endif
 		  case LDAP_TIMEOUT:
 		  case ETIMEDOUT:
 		  case LDAP_UNAVAILABLE:
@@ -1504,9 +1502,9 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
 				statp = EX_TEMPFAIL;
 				switch (save_errno)
 				{
-#ifdef LDAP_SERVER_DOWN
+# ifdef LDAP_SERVER_DOWN
 				  case LDAP_SERVER_DOWN:
-#endif /* LDAP_SERVER_DOWN */
+# endif
 				  case LDAP_TIMEOUT:
 				  case ETIMEDOUT:
 				  case LDAP_UNAVAILABLE:
@@ -1616,4 +1614,4 @@ sm_ldap_geterrno(ld)
 # endif /* defined(LDAP_VERSION_MAX) && LDAP_VERSION_MAX >= 3 */
 	return err;
 }
-# endif /* LDAPMAP */
+#endif /* LDAPMAP */
diff --git a/libsm/lowercase.c b/libsm/lowercase.c
new file mode 100644
index 000000000000..8448eee5ad40
--- /dev/null
+++ b/libsm/lowercase.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ */
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#if USE_EAI
+# include 
+# include 
+# include 
+# include 
+
+/*
+**  ASCIISTR -- check whether a string is printable ASCII
+**
+**	Parameters:
+**		str -- string
+**
+**	Returns:
+**		TRUE iff printable ASCII
+*/
+
+bool
+asciistr(str)
+	const char *str;
+{
+	unsigned char ch;
+
+	if  (str == NULL)
+		return true;
+	while ((ch = (unsigned char)*str) != '\0' && ch >= 32 && ch < 127)
+		str++;
+	return ch == '\0';
+}
+#endif /* USE_EAI */
+
+/*
+**  MAKELOWER -- Translate a line into lower case
+**
+**	Parameters:
+**		p -- string to translate (modified in place if possible). [A]
+**
+**	Returns:
+**		lower cased string
+**
+**	Side Effects:
+**		String p is translated to lower case if possible.
+*/
+
+char *
+makelower(p)
+	char *p;
+{
+	char c;
+	char *orig;
+
+	if (p == NULL)
+		return p;
+	orig = p;
+#if USE_EAI
+	if (!asciistr(p))
+		return (char *)sm_lowercase(p);
+#endif
+	for (; (c = *p) != '\0'; p++)
+		if (isascii(c) && isupper(c))
+			*p = tolower(c);
+	return orig;
+}
+
+#if USE_EAI
+/*
+**  SM_LOWERCASE -- lower case a UTF-8 string
+**	Note: this should ONLY be applied to a UTF-8 string,
+**	i.e., the caller should check first if it isn't an ASCII string.
+**
+**	Parameters:
+**		str -- original string
+**
+**	Returns:
+**		lower case version of string [S]
+**
+**	How to return an error description due to failed unicode calls?
+**	However, is that even relevant?
+*/
+
+char *
+sm_lowercase(str)
+	const char *str;
+{
+	int olen, ilen;
+	UErrorCode error;
+	ssize_t req;
+	int n;
+	static UCaseMap *csm = NULL;
+	static char *out = NULL;
+	static int outlen = 0;
+
+# if SM_CHECK_REQUIRE
+	if (sm_debug_active(&SmExpensiveRequire, 3))
+		SM_REQUIRE(!asciistr(str));
+# endif
+	/* an empty string is always ASCII */
+	SM_REQUIRE(NULL != str && '\0' != *str);
+
+	if (NULL == csm)
+	{
+		error = U_ZERO_ERROR;
+		csm = ucasemap_open("en_US", U_FOLD_CASE_DEFAULT, &error);
+		if (U_SUCCESS(error) == 0)
+		{
+			/* syserr("ucasemap_open error: %s", u_errorName(error)); */
+			return NULL;
+		}
+	}
+
+	ilen = strlen(str);
+	olen = ilen + 1;
+	if (olen > outlen)
+	{
+		outlen = olen;
+		out = sm_realloc_x(out, outlen);
+	}
+
+	for (n = 0; n < 3; n++)
+	{
+		error = U_ZERO_ERROR;
+		req = ucasemap_utf8FoldCase(csm, out, olen, str, ilen, &error);
+		if (U_SUCCESS(error))
+		{
+			if (req >= olen)
+			{
+				outlen = req + 1;
+				out = sm_realloc_x(out, outlen);
+				out[req] = '\0';
+			}
+			break;
+		}
+		else if (error == U_BUFFER_OVERFLOW_ERROR)
+		{
+			outlen = req + 1;
+			out = sm_realloc_x(out, outlen);
+			olen = outlen;
+		}
+		else
+		{
+			/* syserr("conversion error for \"%s\": %s", str, u_errorName(error)); */
+			return NULL;
+		}
+	}
+	return out;
+}
+#endif /* USE_EAI */
diff --git a/libsm/makebuf.c b/libsm/makebuf.c
index 2542d2982d6a..0afdfc45256b 100644
--- a/libsm/makebuf.c
+++ b/libsm/makebuf.c
@@ -124,7 +124,7 @@ sm_whatbuf(fp, bufsize, couldbetty)
 			st.st_blksize = SM_IO_MAX_BUF;
 #  if SM_IO_MIN_BUF > 0
 		else
-#  endif /* SM_IO_MIN_BUF > 0 */
+#  endif
 # endif /* SM_IO_MAX_BUF > 0 */
 # if SM_IO_MIN_BUF > 0
 		if (st.st_blksize < SM_IO_MIN_BUF)
diff --git a/libsm/mbdb.c b/libsm/mbdb.c
index ff2d3d8150fa..86f3a2d6e5f8 100644
--- a/libsm/mbdb.c
+++ b/libsm/mbdb.c
@@ -27,16 +27,11 @@ SM_RCSID("@(#)$Id: mbdb.c,v 1.43 2014-01-08 17:03:15 ca Exp $")
 #include 
 #include 
 #include 
-# ifdef EX_OK
-#  undef EX_OK			/* for SVr4.2 SMP */
-# endif
 #include 
 
-#if LDAPMAP
-# if _LDAP_EXAMPLE_
-#  include 
-# endif
-#endif /* LDAPMAP */
+#if LDAPMAP && _LDAP_EXAMPLE_
+# include 
+#endif
 
 typedef struct
 {
@@ -50,23 +45,19 @@ static int	mbdb_pw_initialize __P((char *));
 static int	mbdb_pw_lookup __P((char *name, SM_MBDB_T *user));
 static void	mbdb_pw_terminate __P((void));
 
-#if LDAPMAP
-# if _LDAP_EXAMPLE_
+#if LDAPMAP && _LDAP_EXAMPLE_
 static struct sm_ldap_struct LDAPLMAP;
 static int	mbdb_ldap_initialize __P((char *));
 static int	mbdb_ldap_lookup __P((char *name, SM_MBDB_T *user));
 static void	mbdb_ldap_terminate __P((void));
-# endif /* _LDAP_EXAMPLE_ */
-#endif /* LDAPMAP */
+#endif /* LDAPMAP && _LDAP_EXAMPLE_ */
 
 static SM_MBDB_TYPE_T SmMbdbTypes[] =
 {
 	{ "pw", mbdb_pw_initialize, mbdb_pw_lookup, mbdb_pw_terminate },
-#if LDAPMAP
-# if _LDAP_EXAMPLE_
+#if LDAPMAP && _LDAP_EXAMPLE_
 	{ "ldap", mbdb_ldap_initialize, mbdb_ldap_lookup, mbdb_ldap_terminate },
-# endif
-#endif /* LDAPMAP */
+#endif
 	{ NULL, NULL, NULL, NULL }
 };
 
@@ -268,6 +259,7 @@ sm_pwfullname(gecos, user, buf, buflen)
 				*bp++ = Latin1ToASCII[(unsigned char) *p - 128];
 			else
 #endif
+				/* "else" in #if code above */
 				*bp++ = *p;
 		}
 	}
@@ -365,8 +357,7 @@ mbdb_pw_terminate()
 	endpwent();
 }
 
-#if LDAPMAP
-# if _LDAP_EXAMPLE_
+#if LDAPMAP && _LDAP_EXAMPLE_
 /*
 **  LDAP example implementation based on RFC 2307, "An Approach for Using
 **  LDAP as a Network Information Service":
@@ -404,19 +395,19 @@ mbdb_pw_terminate()
 **
 */
 
-#  define MBDB_LDAP_LABEL		"MailboxDatabase"
+# define MBDB_LDAP_LABEL		"MailboxDatabase"
 
-#  ifndef MBDB_LDAP_FILTER
-#   define MBDB_LDAP_FILTER		"(&(objectClass=posixAccount)(uid=%0))"
-#  endif
+# ifndef MBDB_LDAP_FILTER
+#  define MBDB_LDAP_FILTER		"(&(objectClass=posixAccount)(uid=%0))"
+# endif
 
-#  ifndef MBDB_DEFAULT_LDAP_BASEDN
-#   define MBDB_DEFAULT_LDAP_BASEDN	NULL
-#  endif
+# ifndef MBDB_DEFAULT_LDAP_BASEDN
+#  define MBDB_DEFAULT_LDAP_BASEDN	NULL
+# endif
 
-#  ifndef MBDB_DEFAULT_LDAP_SERVER
-#   define MBDB_DEFAULT_LDAP_SERVER	NULL
-#  endif
+# ifndef MBDB_DEFAULT_LDAP_SERVER
+#  define MBDB_DEFAULT_LDAP_SERVER	NULL
+# endif
 
 /*
 **  MBDB_LDAP_INITIALIZE -- initialize LDAP version
@@ -526,13 +517,13 @@ mbdb_ldap_lookup(name, user)
 	if (msgid == -1)
 	{
 		save_errno = sm_ldap_geterrno(LDAPLMAP.ldap_ld) + E_LDAPBASE;
-#  ifdef LDAP_SERVER_DOWN
+# ifdef LDAP_SERVER_DOWN
 		if (errno == LDAP_SERVER_DOWN)
 		{
 			/* server disappeared, try reopen on next search */
 			sm_ldap_close(&LDAPLMAP);
 		}
-#  endif /* LDAP_SERVER_DOWN */
+# endif /* LDAP_SERVER_DOWN */
 		errno = save_errno;
 		return EX_TEMPFAIL;
 	}
@@ -776,5 +767,4 @@ mbdb_ldap_terminate()
 {
 	sm_ldap_close(&LDAPLMAP);
 }
-# endif /* _LDAP_EXAMPLE_ */
-#endif /* LDAPMAP */
+#endif /* LDAPMAP && _LDAP_EXAMPLE_ */
diff --git a/libsm/memstat.c b/libsm/memstat.c
index 4ef49fad31d5..88b205821668 100644
--- a/libsm/memstat.c
+++ b/libsm/memstat.c
@@ -79,7 +79,7 @@ sm_memstat_get(resource, pvalue)
 		return (errno != 0) ? errno : -1;
 	r = ai.ani_max - ai.ani_resv;
 	r *= sc_page_size >> 10;
-   	*pvalue = r;
+	*pvalue = r;
 	return 0;
 }
 
@@ -167,7 +167,7 @@ sm_memstat_get(resource, pvalue)
 			(resource != NULL) ? resource: "freemem");
 	if (kn == NULL)
 		return (errno != 0) ? errno : -3;
-   	*pvalue = kn->value.ul;
+	*pvalue = kn->value.ul;
 	return 0;
 }
 
diff --git a/libsm/niprop.c b/libsm/niprop.c
index a5056deb34c6..9d8653362ac4 100644
--- a/libsm/niprop.c
+++ b/libsm/niprop.c
@@ -95,11 +95,11 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
 	}
 	(void) sm_strlcat(keybuf, keyval, sizeof keybuf);
 
-#if 0
+# if 0
 	if (tTd(38, 21))
 		sm_dprintf("ni_propval(%s, %s, %s, %s, %d) keybuf='%s'\n",
 			keydir, keyprop, keyval, valprop, sepchar, keybuf);
-#endif
+# endif
 
 	/*
 	**  If the passed directory and property name are found
@@ -114,10 +114,10 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
 		if (i == 0)
 		{
 			nis = ni_open(NULL, LOCAL_NETINFO_DOMAIN, &ni);
-#if 0
+# if 0
 			if (tTd(38, 20))
 				sm_dprintf("ni_open(LOCAL) = %d\n", nis);
-#endif
+# endif
 		}
 		else
 		{
@@ -125,10 +125,10 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
 				ni_free(lastni);
 			lastni = ni;
 			nis = ni_open(lastni, PARENT_NETINFO_DOMAIN, &ni);
-#if 0
+# if 0
 			if (tTd(38, 20))
 				sm_dprintf("ni_open(PARENT) = %d\n", nis);
-#endif
+# endif
 		}
 
 		/*
@@ -156,11 +156,11 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
 		if (ni_lookupprop(ni, &nid, valprop, &ninl) != 0)
 			continue;
 
-#if 0
+# if 0
 		if (tTd(38, 20))
 			sm_dprintf("ni_lookupprop: len=%d\n",
 				ninl.ni_namelist_len);
-#endif
+# endif
 
 		/*
 		**  See if we have an acceptable number of values.
@@ -203,10 +203,10 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
 		ni_free(ni);
 	if (lastni != NULL && ni != lastni)
 		ni_free(lastni);
-#if 0
+# if 0
 	if (tTd(38, 20))
 		sm_dprintf("ni_propval returns: '%s'\n", propval);
-#endif
+# endif
 
 	return propval;
 }
diff --git a/libsm/notify.c b/libsm/notify.c
index 9f4cca27d7a8..4ed3fd7f2bd1 100644
--- a/libsm/notify.c
+++ b/libsm/notify.c
@@ -10,6 +10,14 @@
 
 #include 
 
+#if _FFR_DMTRIGGER
+#include 	/* FDSET_CAST */
+#include 
+#include 
+#include 
+#include 
+#include 
+
 #include 
 #include 
 #include 
@@ -20,11 +28,6 @@
 #include 
 #include 	/* for memset() */
 
-#include 	/* FDSET_CAST */
-#include 
-#include 
-#include 
-
 #if SM_NOTIFY_DEBUG
 #define SM_DBG(p)	fprintf p
 #else
@@ -126,6 +129,9 @@ sm_notify_stop(owner, flags)
 **		<0: -errno
 */
 
+#define MAX_NETSTR 1024
+#define NETSTRPRE 5
+
 int
 sm_notify_snd(buf, buflen)
 	char *buf;
@@ -133,13 +139,18 @@ sm_notify_snd(buf, buflen)
 {
 	int r;
 	int save_errno;
+	size_t len;
+	char netstr[MAX_NETSTR];
 
 	SM_REQUIRE(buf != NULL);
 	SM_REQUIRE(buflen > 0);
 	if (NotifyWRpipe < 0)
 		return -EINVAL;
+	if (buflen >= MAX_NETSTR - 7)
+		return -E2BIG;	/* XXX "TOO LARGE"? */
 
-	r = write(NotifyWRpipe, buf, buflen);
+	len = sm_snprintf(netstr, sizeof(netstr), "%04d:%s,", (int)buflen, buf);
+	r = write(NotifyWRpipe, netstr, len);
 	save_errno = errno;
 	SM_DBG((stderr, "write=%d, fd=%d, e=%d\n", r, NotifyWRpipe, save_errno));
 	return r >= 0 ? 0 : -save_errno;
@@ -151,7 +162,7 @@ sm_notify_snd(buf, buflen)
 **	Parameters:
 **		buf -- where to write data
 **		buflen -- len of buffer
-**		tmo -- timeout
+**		tmo -- timeout (micro seconds)
 **
 **	Returns:
 **		0: success
@@ -162,24 +173,30 @@ int
 sm_notify_rcv(buf, buflen, tmo)
 	char *buf;
 	size_t buflen;
-	int tmo;
+	long tmo;
 {
-	int r;
+	int r, len;
 	int save_errno;
 	fd_set readfds;
-	struct timeval timeout;
+	struct timeval timeout, *tval;
 
 	SM_REQUIRE(buf != NULL);
-	SM_REQUIRE(buflen > 0);
+	SM_REQUIRE(buflen > NETSTRPRE + 2);
 	if (NotifyRDpipe < 0)
 		return -EINVAL;
 	FD_ZERO(&readfds);
 	SM_FD_SET(NotifyRDpipe, &readfds);
-	timeout.tv_sec = tmo;
-	timeout.tv_usec = 0;
+	if (tmo < 0)
+		tval = NULL;
+	else
+	{
+		timeout.tv_sec = (long) (tmo / SM_MICROS);
+		timeout.tv_usec = tmo % SM_MICROS;
+		tval = &timeout;
+	}
 
 	do {
-		r = select(NotifyRDpipe + 1, FDSET_CAST &readfds, NULL, NULL, &timeout);
+		r = select(NotifyRDpipe + 1, FDSET_CAST &readfds, NULL, NULL, tval);
 		save_errno = errno;
 		SM_DBG((stderr, "select=%d, fd=%d, e=%d\n", r, NotifyRDpipe, save_errno));
 	} while (r < 0 && save_errno == EINTR);
@@ -194,12 +211,30 @@ sm_notify_rcv(buf, buflen, tmo)
 	if (!FD_ISSET(NotifyRDpipe, &readfds))
 		return -ETIMEDOUT;
 
-	r = read(NotifyRDpipe, buf, buflen);
+	r = read(NotifyRDpipe, buf, NETSTRPRE);
+	if (NETSTRPRE != r)
+		return -1;	/* ??? */
+
+	if (sm_io_sscanf(buf, "%4u:", &len) != 1)
+		return -EINVAL;	/* ??? */
+	if (len >= MAX_NETSTR)
+		return -E2BIG;	/* ??? */
+	if (len >= buflen - 1)
+		return -E2BIG;	/* ??? */
+	if (len <= 0)
+		return -EINVAL;	/* ??? */
+	r = read(NotifyRDpipe, buf, len + 1);
 	save_errno = errno;
 	SM_DBG((stderr, "read=%d, e=%d\n", r, save_errno));
 	if (r == 0)
 		return -1;	/* ??? */
 	if (r < 0)
 		return -save_errno;
+	if (len + 1 != r)
+		return -1;	/* ??? */
+	if (buf[len] != ',')
+		return -EINVAL;	/* ??? */
+	buf[len] = '\0';
 	return r;
 }
+#endif /* _FFR_DMTRIGGER */
diff --git a/libsm/refill.c b/libsm/refill.c
index af3a84442f17..6dbb71ffe822 100644
--- a/libsm/refill.c
+++ b/libsm/refill.c
@@ -80,7 +80,7 @@ static int sm_lflush __P((SM_FILE_T *, int *));
 	do								\
 	{								\
 		(sel_ret) = select((fd) + 1, &sm_io_to_mask, NULL,	\
-				&sm_io_x_mask, (to));			\
+				   &sm_io_x_mask, (to));		\
 	} while ((sel_ret) < 0 && errno == EINTR);			\
 	if ((sel_ret) < 0)						\
 	{								\
diff --git a/libsm/rpool.c b/libsm/rpool.c
index 9d883ffca194..8e21877b9526 100644
--- a/libsm/rpool.c
+++ b/libsm/rpool.c
@@ -508,17 +508,44 @@ sm_rpool_attach_x(rpool, rfree, rcontext)
 */
 
 char *
-sm_rpool_strdup_x(rpool, s)
+# if SM_HEAP_CHECK > 2
+sm_rpool_strdup_tagged_x
+# else
+sm_rpool_strdup_x
+# endif
+	(rpool, s
+# if SM_HEAP_CHECK > 2
+	, tag, line, group
+# endif
+	)
 	SM_RPOOL_T *rpool;
 	const char *s;
+# if SM_HEAP_CHECK > 2
+	char *tag;
+	int line;
+	int group;
+# else
+#  define tag  "sm_rpool_strdup_x"
+#  define line 1
+#  define group 1
+# endif
 {
 	size_t l;
 	char *n;
 
 	l = strlen(s);
 	SM_ASSERT(l + 1 > l);
+# if SM_HEAP_CHECK
+	n = sm_rpool_malloc_tagged_x(rpool, l + 1, tag, line, group);
+# else
 	n = sm_rpool_malloc_x(rpool, l + 1);
+# endif
 	sm_strlcpy(n, s, l + 1);
 	return n;
 }
+# if SM_HEAP_CHECK <= 2
+#  undef tag
+#  undef line
+#  undef group
+# endif
 #endif /* DO_NOT_USE_STRCPY */
diff --git a/libsm/sem.c b/libsm/sem.c
index ac28a61ae353..201812e3a290 100644
--- a/libsm/sem.c
+++ b/libsm/sem.c
@@ -13,10 +13,11 @@ SM_RCSID("@(#)$Id: sem.c,v 1.15 2013-11-22 20:51:43 ca Exp $")
 #if SM_CONF_SEM
 # include 
 # include 
-# include 
-# include 
-# include 
 # include 
+# include 
+# include 
+# include 
+# include 
 
 /*
 **  SM_SEM_START -- initialize semaphores
@@ -156,10 +157,10 @@ sm_sem_rel(semid, semnum, timeout)
 	int r;
 	struct sembuf semops[1];
 
-#if PARANOID
+# if PARANOID
 	/* XXX should we check whether the value is already 0 ? */
 	SM_REQUIRE(sm_get_sem(semid, semnum) > 0);
-#endif
+# endif
 
 	semops[0].sem_num = semnum;
 	semops[0].sem_op = 1;
@@ -216,12 +217,17 @@ sm_sem_get(semid, semnum)
 **		< 0 on failure.
 */
 
+#ifdef __STDC__
+int
+sm_semsetowner(int semid, uid_t uid, gid_t gid, MODE_T mode)
+#else /* __STDC__ */
 int
 sm_semsetowner(semid, uid, gid, mode)
 	int semid;
 	uid_t uid;
 	gid_t gid;
-	mode_t mode;
+	MODE_T mode;
+#endif /* __STDC__ */
 {
 	int r;
 	struct semid_ds	semidds;
diff --git a/libsm/shm.c b/libsm/shm.c
index ac3919d5723f..716d5bc05927 100644
--- a/libsm/shm.c
+++ b/libsm/shm.c
@@ -15,6 +15,7 @@ SM_RCSID("@(#)$Id: shm.c,v 1.20 2013-11-22 20:51:43 ca Exp $")
 # include 
 # include 
 # include 
+# include 
 # include 
 
 
@@ -119,12 +120,17 @@ sm_shmstop(shm, shmid, owner)
 **		< 0 on failure.
 */
 
+#ifdef __STDC__
+int
+sm_shmsetowner(int shmid, uid_t uid, gid_t gid, MODE_T mode)
+#else /* __STDC__ */
 int
 sm_shmsetowner(shmid, uid, gid, mode)
 	int shmid;
 	uid_t uid;
 	gid_t gid;
-	mode_t mode;
+	MODE_T mode;
+#endif /* __STDC__ */
 {
 	int r;
 	struct shmid_ds shmid_ds;
diff --git a/libsm/signal.c b/libsm/signal.c
index bfbeaf555c2e..352638ec9288 100644
--- a/libsm/signal.c
+++ b/libsm/signal.c
@@ -40,41 +40,41 @@ sm_signal(sig, handler)
 	int sig;
 	sigfunc_t handler;
 {
-# if defined(SA_RESTART) || (!defined(SYS5SIGNALS) && !defined(BSD4_3))
+#if defined(SA_RESTART) || (!defined(SYS5SIGNALS) && !defined(BSD4_3))
 	struct sigaction n, o;
-# endif
+#endif
 
 	/*
 	**  First, try for modern signal calls
 	**  and restartable syscalls
 	*/
 
-# ifdef SA_RESTART
+#ifdef SA_RESTART
 	(void) memset(&n, '\0', sizeof n);
-#  if USE_SA_SIGACTION
+# if USE_SA_SIGACTION
 	n.sa_sigaction = (void(*)(int, siginfo_t *, void *)) handler;
 	n.sa_flags = SA_RESTART|SA_SIGINFO;
-#  else
+# else
 	n.sa_handler = handler;
 	n.sa_flags = SA_RESTART;
-#  endif
+# endif
 	if (sigaction(sig, &n, &o) < 0)
 		return SIG_ERR;
 	return o.sa_handler;
-# else /* SA_RESTART */
+#else /* SA_RESTART */
 
 	/*
 	**  Else check for SYS5SIGNALS or
 	**  BSD4_3 signals
 	*/
 
-#  if defined(SYS5SIGNALS) || defined(BSD4_3)
-#   ifdef BSD4_3
+# if defined(SYS5SIGNALS) || defined(BSD4_3)
+#  ifdef BSD4_3
 	return signal(sig, handler);
-#   else
+#  else
 	return sigset(sig, handler);
-#   endif
-#  else /* defined(SYS5SIGNALS) || defined(BSD4_3) */
+#  endif
+# else /* defined(SYS5SIGNALS) || defined(BSD4_3) */
 
 	/*
 	**  Finally, if nothing else is available,
@@ -86,8 +86,8 @@ sm_signal(sig, handler)
 	if (sigaction(sig, &n, &o) < 0)
 		return SIG_ERR;
 	return o.sa_handler;
-#  endif /* defined(SYS5SIGNALS) || defined(BSD4_3) */
-# endif /* SA_RESTART */
+# endif /* defined(SYS5SIGNALS) || defined(BSD4_3) */
+#endif /* SA_RESTART */
 }
 /*
 **  SM_BLOCKSIGNAL -- hold a signal to prevent delivery
@@ -105,13 +105,13 @@ int
 sm_blocksignal(sig)
 	int sig;
 {
-# ifdef BSD4_3
-#  ifndef sigmask
-#   define sigmask(s)	(1 << ((s) - 1))
-#  endif
+#ifdef BSD4_3
+# ifndef sigmask
+#  define sigmask(s)	(1 << ((s) - 1))
+# endif
 	return (sigblock(sigmask(sig)) & sigmask(sig)) != 0;
-# else /* BSD4_3 */
-#  ifdef ALTOS_SYSTEM_V
+#else /* BSD4_3 */
+# ifdef ALTOS_SYSTEM_V
 	sigfunc_t handler;
 
 	handler = sigset(sig, SIG_HOLD);
@@ -119,7 +119,7 @@ sm_blocksignal(sig)
 		return -1;
 	else
 		return handler == SIG_HOLD;
-#  else /* ALTOS_SYSTEM_V */
+# else /* ALTOS_SYSTEM_V */
 	sigset_t sset, oset;
 
 	(void) sigemptyset(&sset);
@@ -128,8 +128,8 @@ sm_blocksignal(sig)
 		return -1;
 	else
 		return sigismember(&oset, sig);
-#  endif /* ALTOS_SYSTEM_V */
-# endif /* BSD4_3 */
+# endif /* ALTOS_SYSTEM_V */
+#endif /* BSD4_3 */
 }
 /*
 **  SM_RELEASESIGNAL -- release a held signal
@@ -147,10 +147,10 @@ int
 sm_releasesignal(sig)
 	int sig;
 {
-# ifdef BSD4_3
+#ifdef BSD4_3
 	return (sigsetmask(sigblock(0) & ~sigmask(sig)) & sigmask(sig)) != 0;
-# else /* BSD4_3 */
-#  ifdef ALTOS_SYSTEM_V
+#else /* BSD4_3 */
+# ifdef ALTOS_SYSTEM_V
 	sigfunc_t handler;
 
 	handler = sigset(sig, SIG_HOLD);
@@ -158,7 +158,7 @@ sm_releasesignal(sig)
 		return -1;
 	else
 		return handler == SIG_HOLD;
-#  else /* ALTOS_SYSTEM_V */
+# else /* ALTOS_SYSTEM_V */
 	sigset_t sset, oset;
 
 	(void) sigemptyset(&sset);
@@ -167,8 +167,8 @@ sm_releasesignal(sig)
 		return -1;
 	else
 		return sigismember(&oset, sig);
-#  endif /* ALTOS_SYSTEM_V */
-# endif /* BSD4_3 */
+# endif /* ALTOS_SYSTEM_V */
+#endif /* BSD4_3 */
 }
 /*
 **  PEND_SIGNAL -- Add a signal to the pending signal list
@@ -263,10 +263,10 @@ void
 sm_allsignals(block)
 	bool block;
 {
-# ifdef BSD4_3
-#  ifndef sigmask
-#   define sigmask(s)	(1 << ((s) - 1))
-#  endif
+#ifdef BSD4_3
+# ifndef sigmask
+#  define sigmask(s)	(1 << ((s) - 1))
+# endif
 	if (block)
 	{
 		int mask = 0;
@@ -282,8 +282,8 @@ sm_allsignals(block)
 	}
 	else
 		sigsetmask(0);
-# else /* BSD4_3 */
-#  ifdef ALTOS_SYSTEM_V
+#else /* BSD4_3 */
+# ifdef ALTOS_SYSTEM_V
 	if (block)
 	{
 		(void) sigset(SIGALRM, SIG_HOLD);
@@ -302,7 +302,7 @@ sm_allsignals(block)
 		(void) sigset(SIGTERM, SIG_DFL);
 		(void) sigset(SIGUSR1, SIG_DFL);
 	}
-#  else /* ALTOS_SYSTEM_V */
+# else /* ALTOS_SYSTEM_V */
 	sigset_t sset;
 
 	(void) sigemptyset(&sset);
@@ -313,8 +313,8 @@ sm_allsignals(block)
 	(void) sigaddset(&sset, SIGTERM);
 	(void) sigaddset(&sset, SIGUSR1);
 	(void) sigprocmask(block ? SIG_BLOCK : SIG_UNBLOCK, &sset, NULL);
-#  endif /* ALTOS_SYSTEM_V */
-# endif /* BSD4_3 */
+# endif /* ALTOS_SYSTEM_V */
+#endif /* BSD4_3 */
 }
 /*
 **  SM_SIGNAL_NOOP -- A signal no-op function
diff --git a/libsm/strcaseeq.c b/libsm/strcaseeq.c
new file mode 100644
index 000000000000..c252d85e53e0
--- /dev/null
+++ b/libsm/strcaseeq.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ */
+
+#include 
+#include 
+
+#if USE_EAI
+#include 
+#include 
+#include 
+
+/*
+**  SM_STRCASEEQ -- are two strings equal (case-insenstive)?
+**
+**	Parameters:
+**		s1 -- string
+**		s2 -- string
+**
+**	Returns:
+**		true iff s1 == s2
+*/
+
+bool
+sm_strcaseeq(s1, s2)
+	const char *s1;
+	const char *s2;
+{
+	char *l1, *l2;
+	char *f1;
+	bool same;
+
+	if (asciistr(s1))
+	{
+		if (!asciistr(s2))
+			return false;
+		return (sm_strcasecmp(s1, s2) == 0);
+	}
+	if (asciistr(s2))
+		return false;
+	l1 = sm_lowercase(s1);
+	if (l1 != s1)
+	{
+		f1 = sm_strdup_x(l1);
+		l1 = f1;
+	}
+	else
+		f1 = NULL;
+	l2 = sm_lowercase(s2);
+
+	while (*l1 == *l2 && '\0' != *l1)
+		l1++, l2++;
+	same = *l1 == *l2;
+
+	SM_FREE(f1);
+	return same;
+}
+
+/*
+**  SM_STRNCASEEQ -- are two strings (up to a length) equal (case-insenstive)?
+**
+**	Parameters:
+**		s1 -- string
+**		s2 -- string
+**		n -- maximum length to compare
+**
+**	Returns:
+**		true iff s1 == s2 (for up to the first n char)
+*/
+
+bool
+sm_strncaseeq(s1, s2, n)
+	const char *s1;
+	const char *s2;
+	size_t n;
+{
+	char *l1, *l2;
+	char *f1;
+	bool same;
+
+	if (0 == n)
+		return true;
+	if (asciistr(s1))
+	{
+		if (!asciistr(s2))
+			return false;
+		return (sm_strncasecmp(s1, s2, n) == 0);
+	}
+	if (asciistr(s2))
+		return false;
+	l1 = sm_lowercase(s1);
+	if (l1 != s1)
+	{
+		f1 = sm_strdup_x(l1);
+		l1 = f1;
+	}
+	else
+		f1 = NULL;
+	l2 = sm_lowercase(s2);
+
+	while (*l1 == *l2 && '\0' != *l1 && n-- > 0)
+		l1++, l2++;
+	same = *l1 == *l2;
+
+	SM_FREE(f1);
+	return same;
+}
+#endif /* USE_EAI */
diff --git a/libsm/string.c b/libsm/string.c
index 83577f19a84e..9820d93dfe95 100644
--- a/libsm/string.c
+++ b/libsm/string.c
@@ -27,9 +27,6 @@ SM_RCSID("@(#)$Id: string.c,v 1.4 2013-11-22 20:51:43 ca Exp $")
 **
 **	Returns:
 **		none.
-**
-**	Side Effects:
-**		none.
 */
 
 void
diff --git a/libsm/stringf.c b/libsm/stringf.c
index 41b8898542ee..128571d6d12d 100644
--- a/libsm/stringf.c
+++ b/libsm/stringf.c
@@ -71,7 +71,7 @@ sm_stringf_x(fmt, va_alist)
 char *
 sm_vstringf_x(fmt, ap)
 	const char *fmt;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 {
 	char *s;
 
diff --git a/libsm/t-ixlen.c b/libsm/t-ixlen.c
new file mode 100644
index 000000000000..cc29431725a8
--- /dev/null
+++ b/libsm/t-ixlen.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ */
+
+#include 
+SM_IDSTR(id, "@(#)$Id: t-qic.c,v 1.10 2013-11-22 20:51:43 ca Exp $")
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#if _FFR_8BITENVADDR
+extern bool SmTestVerbose;
+
+static void
+chkilenx(str, len)
+	const char *str;
+	int len;
+{
+	int xlen;
+
+	xlen = ilenx(str);
+	SM_TEST(len == xlen);
+	if (len != xlen)
+		fprintf(stderr, "str=\"%s\", len=%d, excpected=%d\n",
+			str, xlen, len);
+}
+
+static void
+chkxleni(str, len)
+	const char *str;
+	int len;
+{
+	int ilen;
+
+	ilen = xleni(str);
+	SM_TEST(len == ilen);
+	if (len != ilen)
+		fprintf(stderr, "str=\"%s\", len=%d, excpected=%d\n",
+			str, ilen, len);
+}
+
+
+static void
+usage(prg)
+	const char *prg;
+{
+	fprintf(stderr, "usage: %s [options]\n", prg);
+	fprintf(stderr, "options:\n");
+	fprintf(stderr, "-x    xleni\n");
+}
+
+int
+main(argc, argv)
+	int argc;
+	char *argv[];
+{
+	int o, len;
+	bool x;
+	char line[1024];
+
+	x = false;
+	while ((o = getopt(argc, argv, "x")) != -1)
+	{
+		switch ((char) o)
+		{
+		  case 'x':
+			x = true;
+			break;
+
+		  default:
+			usage(argv[0]);
+			exit(1);
+		}
+	}
+
+	sm_test_begin(argc, argv, "test ilenx");
+
+	while (fscanf(stdin, "%d:%s\n", &len, line) == 2)
+	{
+		if (x)
+			chkxleni(line, len);
+		else
+			chkilenx(line, len);
+	}
+
+	return sm_test_end();
+}
+#else /* _FFR_8BITENVADDR */
+int
+main(argc, argv)
+	int argc;
+	char *argv[];
+{
+	return 0;
+}
+#endif /* _FFR_8BITENVADDR */
diff --git a/libsm/t-ixlen.sh b/libsm/t-ixlen.sh
new file mode 100755
index 000000000000..6c5cdf771d10
--- /dev/null
+++ b/libsm/t-ixlen.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+# Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+#	All rights reserved.
+#
+# By using this file, you agree to the terms and conditions set
+# forth in the LICENSE file which can be found at the top level of
+# the sendmail distribution.
+#
+# ----------------------------------------
+# test ilenx() and xleni(), using t-ixlen
+# ----------------------------------------
+
+PRG=./t-ixlen
+R=0
+${PRG} <
 
+#if _FFR_DMTRIGGER || _FFR_NOTIFY
 # include 
 # include 
-
+# include 
 # include 
 # include 
 # include 
 # include 
-
-# define MAX_CNT	10
+# include 
 
 /*
-**  MSGTEST -- test of message queue.
+**  NOTIFY_WR -- test of notify feature
 **
 **	Parameters:
-**		owner -- create message queue.
+**		pid -- pid of process
 **
 **	Returns:
 **		0 on success
-**		< 0 on failure.
+**		< 0 on failure
 */
 
 static int
-notifytest(owner)
-	int owner;
+notify_wr(pid)
+	pid_t pid;
 {
 	int r;
 	size_t len;
 	char buf[64];
 #define TSTSTR "qf0001"
 
-	r = sm_notify_start(owner, 0);
+	r = sm_notify_start(false, 0);
 	if (r < 0)
 	{
 		perror("sm_notify_start failed");
 		return -1;
 	}
 
-	if (!owner)
-	{
-		len = sm_strlcpy(buf, TSTSTR, sizeof(buf));
-		r = sm_notify_snd(buf, len);
-		SM_TEST(r >= 0);
-		if (r < 0)
-			goto end;
+	len = sm_snprintf(buf, sizeof(buf), "%s-%ld", TSTSTR, (long) pid);
+	r = sm_notify_snd(buf, len);
+	SM_TEST(r >= 0);
+	return r;
+}
 
-  end:
-		return r;
-	}
-	else
+/*
+**  NOTIFY_RD -- test of notify feature
+**
+**	Parameters:
+**
+**	Returns:
+**		0 on success
+**		< 0 on failure
+*/
+
+static int
+notify_rd(nproc)
+	int nproc;
+{
+	int r, i;
+	char buf[64];
+#define TSTSTR "qf0001"
+
+	r = sm_notify_start(true, 0);
+	if (r < 0)
 	{
-		r = sm_notify_rcv(buf, sizeof(buf), 5);
+		perror("sm_notify_start failed");
+		return -1;
+	}
+
+	for (i = 0; i < nproc; i++)
+	{
+		r = sm_notify_rcv(buf, sizeof(buf), 5 * SM_MICROS);
 		SM_TEST(r >= 0);
 		if (r < 0)
+		{
+			fprintf(stderr, "rcv=%d\n", r);
 			return r;
+		}
 		if (r > 0 && r < sizeof(buf))
 			buf[r] = '\0';
 		buf[sizeof(buf) - 1] = '\0';
-		SM_TEST(strcmp(buf, TSTSTR) == 0);
+		SM_TEST(strncmp(buf, TSTSTR, sizeof(TSTSTR) - 1) == 0);
+		SM_TEST(r > sizeof(TSTSTR));
 		fprintf(stderr, "buf=\"%s\"\n", buf);
 	}
 	return 0;
@@ -79,44 +103,68 @@ main(argc, argv)
 	int argc;
 	char *argv[];
 {
-	int ch;
+	int i;
 	int r = 0;
+	int nproc = 1;
 	pid_t pid;
 
-# define OPTIONS	""
-	while ((ch = getopt(argc, argv, OPTIONS)) != -1)
+# define OPTIONS	"p:"
+	while ((i = getopt(argc, argv, OPTIONS)) != -1)
 	{
-		switch ((char) ch)
+		switch ((char) i)
 		{
+		  case 'p':
+			nproc = atoi(optarg);
+			if (nproc < 1)
+			{
+				errno = EINVAL;
+				perror("-p: must be >0\n");
+				return r;
+			}
+			break;
 		  default:
 			break;
 		}
 	}
 
+	sm_test_begin(argc, argv, "test notify");
 	r = sm_notify_init(0);
+	SM_TEST(r >= 0);
 	if (r < 0)
 	{
 		perror("sm_notify_init failed\n");
-		return -1;
+		return r;
 	}
 
-	if ((pid = fork()) < 0)
+	pid = 0;
+	for (i = 0; i < nproc; i++)
 	{
-		perror("fork failed\n");
-		return -1;
-	}
+		if ((pid = fork()) < 0)
+		{
+			perror("fork failed\n");
+			return -1;
+		}
 
-	sm_test_begin(argc, argv, "test notify");
-	if (pid == 0)
-	{
-		/* give the parent the chance to setup data */
-		sleep(1);
-		r = notifytest(false);
-	}
-	else
-	{
-		r = notifytest(true);
+		if (pid == 0)
+		{
+			/* give the parent the chance to set up data */
+			sleep(1);
+			r = notify_wr(getpid());
+			break;
+		}
 	}
+	if (pid > 0)
+		r = notify_rd(nproc);
 	SM_TEST(r >= 0);
 	return sm_test_end();
 }
+#else /* _FFR_DMTRIGGER */
+int
+main(argc, argv)
+	int argc;
+	char *argv[];
+{
+	printf("SKIPPED: no _FFR_DMTRIGGER\n");
+	return 0;
+}
+#endif /* _FFR_DMTRIGGER */
diff --git a/libsm/t-qic.c b/libsm/t-qic.c
index 11375750a196..fea88c95b43d 100644
--- a/libsm/t-qic.c
+++ b/libsm/t-qic.c
@@ -44,14 +44,15 @@ show_diff(s1, s2)
 	}
 }
 
-char *quote_unquote __P((char *, char *, int, int));
+char *quote_unquote __P((char *, char *, int, int, int));
 
 char *
-quote_unquote(in, out, outlen, exp)
+quote_unquote(in, out, outlen, exp, mode)
 	char *in;
 	char *out;
 	int outlen;
 	int exp;
+	int mode;
 {
 	char *obp, *bp;
 	char line_back[1024];
@@ -59,9 +60,14 @@ quote_unquote(in, out, outlen, exp)
 	int cmp;
 
 	sm_strlcpy(line_in, in, sizeof(line_in));
-	obp = quote_internal_chars(in, out, &outlen);
+	obp = quote_internal_chars(in, out, &outlen, NULL);
 	bp = str2prt(line_in);
-	dequote_internal_chars(obp, line_back, sizeof(line_back));
+	if (0 == mode)
+		dequote_internal_chars(obp, line_back, sizeof(line_back));
+	else if (1 == mode)
+		dequote_internal_chars(obp, line_back, strlen(obp));
+	else if (2 == mode)
+		dequote_internal_chars(obp, line_back, strlen(obp) + 1);
 	cmp = strcmp(line_in, line_back);
 	SM_TEST(exp == cmp);
 	if (cmp != exp && !SmTestVerbose)
@@ -98,11 +104,13 @@ main(argc, argv)
 	char *argv[];
 {
 	char line_in[1024], line[256], line_out[32], *obp;
-	int i, los, cmp;
+	int i, los, cmp, mode;
 	sm_qic_T inout[] = {
 		  { "", "",	0 }
 		, { "abcdef", "abcdef",	0 }
 		, { "01234567890123456789", "01234567890123456789",	0 }
+		, { "\\", "\\",	0 }
+		, { "\\A", "\\A",	0 }
 		, { "01234567890123456789\001", "01234567890123456789\001",
 			0 }
 		, { "012345\2067890123456789", "012345\377\2067890123456789",
@@ -121,6 +129,9 @@ main(argc, argv)
 	};
 
 	sm_test_begin(argc, argv, "test meta quoting");
+	mode = 0;
+	if (argc > 1)
+		mode = atoi(argv[1]);
 	for (i = 0; i < sizeof(line_out); i++)
 		line_out[i] = '\0';
 	for (i = 0; i < sizeof(line_in); i++)
@@ -135,7 +146,7 @@ main(argc, argv)
 		line_in[i] = ch;
 	}
 	los = sizeof(line_out) / 2;
-	obp = quote_unquote(line_in, line_out, los, 0);
+	obp = quote_unquote(line_in, line_out, los, 0, mode);
 	if (obp != line_out)
 		SM_FREE(obp);
 
@@ -151,7 +162,7 @@ main(argc, argv)
 		line_in[i] = ch;
 	}
 	los = sizeof(line_in);
-	obp = quote_unquote(line_in, line_in, los, 0);
+	obp = quote_unquote(line_in, line_in, los, 0, mode);
 	if (obp != line_in)
 		SM_FREE(obp);
 
@@ -159,7 +170,7 @@ main(argc, argv)
 	{
 		los = sizeof(line_out) / 2;
 		obp = quote_unquote(inout[i].qic_in, line_out, los,
-				inout[i].qic_exp);
+				inout[i].qic_exp, mode);
 		cmp = strcmp(inout[i].qic_out, obp);
 		SM_TEST(inout[i].qic_exp == cmp);
 		if (inout[i].qic_exp != cmp && !SmTestVerbose)
@@ -186,7 +197,7 @@ main(argc, argv)
 		los = sm_strlcpy(line, inout[i].qic_in, sizeof(line));
 		SM_TEST(los + 1 < sizeof(line));
 		++los;
-		obp = quote_unquote(line, line, los, inout[i].qic_exp);
+		obp = quote_unquote(line, line, los, inout[i].qic_exp, mode);
 		cmp = strcmp(inout[i].qic_out, obp);
 		SM_TEST(inout[i].qic_exp == cmp);
 		if (inout[i].qic_exp != cmp && !SmTestVerbose)
@@ -214,7 +225,7 @@ main(argc, argv)
 	{
 		los = 0;
 		obp = quote_unquote(inout[i].qic_in, NULL, los,
-				inout[i].qic_exp);
+				inout[i].qic_exp, mode);
 		SM_TEST(obp != NULL);
 		cmp = strcmp(inout[i].qic_out, obp);
 		SM_TEST(inout[i].qic_exp == cmp);
diff --git a/libsm/t-sem.c b/libsm/t-sem.c
index b13e159ecebe..7404dd6ae391 100644
--- a/libsm/t-sem.c
+++ b/libsm/t-sem.c
@@ -20,6 +20,7 @@ SM_RCSID("@(#)$Id: t-sem.c,v 1.18 2013-11-22 20:51:43 ca Exp $")
 # include 
 # include 
 # include 
+# include 
 # include 
 
 # define T_SM_SEM_KEY (4321L)
@@ -31,14 +32,14 @@ delay(t, s)
 {
 	if (t > 0)
 	{
-#if DEBUG
+# if DEBUG
 		fprintf(stderr, "sleep(%d) before %s\n", t, s);
-#endif
+# endif
 		sleep(t);
 	}
-#if DEBUG
+# if DEBUG
 	fprintf(stderr, "%s\n", s);
-#endif
+# endif
 }
 
 
diff --git a/libsm/t-shm.c b/libsm/t-shm.c
index a9958fe026ae..286785a2ed89 100644
--- a/libsm/t-shm.c
+++ b/libsm/t-shm.c
@@ -20,6 +20,7 @@ SM_RCSID("@(#)$Id: t-shm.c,v 1.23 2013-11-22 20:51:43 ca Exp $")
 # include 
 # include 
 # include 
+# include 
 # include 
 
 # define SHMSIZE	1024
diff --git a/libsm/t-str2prt.c b/libsm/t-str2prt.c
new file mode 100644
index 000000000000..f9baa568c10a
--- /dev/null
+++ b/libsm/t-str2prt.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2006 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ */
+
+#include 
+SM_IDSTR(id, "@(#)$Id: t-qic.c,v 1.10 2013-11-22 20:51:43 ca Exp $")
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+extern bool SmTestVerbose;
+
+struct sm_qic_S
+{
+	char		*qic_in;
+	char		*qic_out;
+	int		 qic_exp;
+};
+typedef struct sm_qic_S sm_qic_T;
+
+int
+main(argc, argv)
+	int argc;
+	char *argv[];
+{
+	char *obp;
+	int i, cmp;
+	sm_qic_T inout[] = {
+		  { "", "",	0 }
+		, { "abcdef", "abcdef",	0 }
+		, { "01234567890123456789", "01234567890123456789",	0 }
+		, { "\\", "\\\\",	0 }
+		, { "\\001", "\\\\001",	0 }
+		, { "01234567890123456789\\001", "01234567890123456789\\\\001",
+			0 }
+		, { NULL, NULL,	0 }
+	};
+
+	sm_test_begin(argc, argv, "test meta quoting");
+	for (i = 0; inout[i].qic_in != NULL; i++)
+	{
+		obp = str2prt(inout[i].qic_in);
+		cmp = strcmp(inout[i].qic_out, obp);
+		SM_TEST(inout[i].qic_exp == cmp);
+		if (inout[i].qic_exp != cmp && SmTestVerbose)
+		{
+			fprintf(stderr, "in: %s\n", inout[i].qic_in);
+			fprintf(stderr, "got: %s\n", obp);
+			fprintf(stderr, "exp: %s\n", inout[i].qic_out);
+			fprintf(stderr, "cmp=%d\n", cmp);
+		}
+	}
+
+	return sm_test_end();
+}
diff --git a/libsm/t-streq.c b/libsm/t-streq.c
new file mode 100644
index 000000000000..a193eca5f02d
--- /dev/null
+++ b/libsm/t-streq.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ */
+
+#include 
+SM_IDSTR(id, "@(#)$Id: t-qic.c,v 1.10 2013-11-22 20:51:43 ca Exp $")
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#if _FFR_8BITENVADDR
+extern bool SmTestVerbose;
+
+static int
+tstrncaseeq(s1, s2, len)
+	char *s1;
+	char *s2;
+	size_t len;
+{
+	return SM_STRNCASEEQ(s1, s2, len);
+}
+
+static void
+usage(prg)
+	const char *prg;
+{
+	fprintf(stderr, "usage: %s [options]\n", prg);
+	fprintf(stderr, "options:\n");
+}
+
+int
+main(argc, argv)
+	int argc;
+	char *argv[];
+{
+	int o, len;
+#define MAXL	1024
+	char s1[MAXL], s2[MAXL];
+
+	while ((o = getopt(argc, argv, "h")) != -1)
+	{
+		switch ((char) o)
+		{
+		  default:
+			usage(argv[0]);
+			exit(1);
+		}
+	}
+
+	sm_test_begin(argc, argv, "test strncaseeq");
+
+	while (fscanf(stdin, "%d:%s\n", &len, s1) == 2 &&
+		fscanf(stdin, "%d:%s\n", &o,s2) == 2)
+	{
+		SM_TEST(tstrncaseeq(s1, s2, len) == o);
+	}
+
+	return sm_test_end();
+}
+#else /* _FFR_8BITENVADDR */
+int
+main(argc, argv)
+	int argc;
+	char *argv[];
+{
+	return 0;
+}
+#endif /* _FFR_8BITENVADDR */
diff --git a/libsm/t-streq.sh b/libsm/t-streq.sh
new file mode 100755
index 000000000000..7797e3f848f0
--- /dev/null
+++ b/libsm/t-streq.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+# Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+#	All rights reserved.
+#
+# By using this file, you agree to the terms and conditions set
+# forth in the LICENSE file which can be found at the top level of
+# the sendmail distribution.
+#
+# ----------------------------------------
+# test SM_STRNCASEEQ
+# ----------------------------------------
+
+PRG=./t-streq
+R=0
+${PRG} <
+#include 
+#include 
+
+#if USE_EAI
+
+/*
+**  legal utf-8 byte sequence
+**  http://www.unicode.org/versions/Unicode6.0.0/ch03.pdf - page 94
+**
+**   Code Points        1st       2s       3s       4s
+**  U+0000..U+007F     00..7F
+**  U+0080..U+07FF     C2..DF   80..BF
+**  U+0800..U+0FFF     E0       A0..BF   80..BF
+**  U+1000..U+CFFF     E1..EC   80..BF   80..BF
+**  U+D000..U+D7FF     ED       80..9F   80..BF
+**  U+E000..U+FFFF     EE..EF   80..BF   80..BF
+**  U+10000..U+3FFFF   F0       90..BF   80..BF   80..BF
+**  U+40000..U+FFFFF   F1..F3   80..BF   80..BF   80..BF
+**  U+100000..U+10FFFF F4       80..8F   80..BF   80..BF
+*/
+
+/*
+**  based on
+**  https://github.com/lemire/fastvalidate-utf-8.git
+**  which is distributed under an MIT license (besides others).
+*/
+
+bool
+utf8_valid(b, length)
+	const char *b;
+	size_t length;
+{
+	const unsigned char *bytes;
+	size_t index;
+
+	bytes = (const unsigned char *)b;
+	index = 0;
+	while (true)
+	{
+		unsigned char byte1;
+
+		do { /* fast ASCII Path */
+			if (index >= length)
+				return true;
+			byte1 = bytes[index++];
+		} while (byte1 < 0x80);
+		if (byte1 < 0xE0)
+		{
+			/* Two-byte form. */
+			if (index == length)
+				return false;
+			if (byte1 < 0xC2 || bytes[index++] > 0xBF)
+				return false;
+		}
+		else if (byte1 < 0xF0)
+		{
+			/* Three-byte form. */
+			if (index + 1 >= length)
+				return false;
+			unsigned char byte2 = bytes[index++];
+			if (byte2 > 0xBF
+			    /* Overlong? 5 most significant bits must not all be zero. */
+			    || (byte1 == 0xE0 && byte2 < 0xA0)
+			    /* Check for illegal surrogate codepoints. */
+			    || (byte1 == 0xED && 0xA0 <= byte2)
+			    /* Third byte trailing-byte test. */
+			    || bytes[index++] > 0xBF)
+				return false;
+		}
+		else
+		{
+
+			/* Four-byte form. */
+			if (index + 2 >= length)
+				return false;
+			int byte2 = bytes[index++];
+			if (byte2 > 0xBF
+			    /* Check that 1 <= plane <= 16. Tricky optimized form of: */
+			    /* if (byte1 > (byte) 0xF4 */
+			    /*    || byte1 == (byte) 0xF0 && byte2 < (byte) 0x90 */
+			    /*    || byte1 == (byte) 0xF4 && byte2 > (byte) 0x8F) */
+			    || (((byte1 << 28) + (byte2 - 0x90)) >> 30) != 0
+			    /* Third byte trailing-byte test */
+			    || bytes[index++] > 0xBF
+			    /* Fourth byte trailing-byte test */
+			    || bytes[index++] > 0xBF)
+				return false;
+		}
+	}
+	/* NOTREACHED */
+	return false;
+}
+#endif /* USE_EAI */
diff --git a/libsm/util.c b/libsm/util.c
index 1653fbdbb153..dd8bf88f79e5 100644
--- a/libsm/util.c
+++ b/libsm/util.c
@@ -21,12 +21,13 @@ SM_RCSID("@(#)$Id: util.c,v 1.10 2013-11-22 20:51:44 ca Exp $")
 
 /*
 **  STR2PRT -- convert "unprintable" characters in a string to \oct
+**		(except for some special chars, see below)
 **
 **	Parameters:
-**		s -- string to convert
+**		s -- string to convert [A]
 **
 **	Returns:
-**		converted string.
+**		converted string [S][U]
 **		This is a static local buffer, string must be copied
 **		before this function is called again!
 */
@@ -41,6 +42,12 @@ str2prt(s)
 	static int len = 0;
 	static char *buf = NULL;
 
+#if _FFR_LOGASIS >= 1
+#define BADCHAR(ch)	((unsigned char)(ch) <= 31)
+#else
+#define BADCHAR(ch)	(!(isascii(ch) && isprint(ch)))
+#endif
+
 	if (s == NULL)
 		return NULL;
 	ok = true;
@@ -51,7 +58,7 @@ str2prt(s)
 			++l;
 			ok = false;
 		}
-		else if (!(isascii(*h) && isprint(*h)))
+		else if (BADCHAR(*h))
 		{
 			l += 3;
 			ok = false;
@@ -71,7 +78,7 @@ str2prt(s)
 	for (h = buf; *s != '\0' && l > 0; s++, l--)
 	{
 		c = *s;
-		if (isascii(c) && isprint(c) && c != '\\')
+		if (c != '\\' && !BADCHAR(c))
 		{
 			*h++ = c;
 		}
@@ -99,9 +106,8 @@ str2prt(s)
 					(unsigned int)((unsigned char) c));
 
 				/*
-				**  XXX since l is unsigned this may
-				**  wrap around if the calculation is screwed
-				**  up...
+				**  XXX since l is unsigned this may wrap
+				**  around if the calculation is screwed up...
 				*/
 
 				l -= 2;
@@ -123,8 +129,8 @@ str2prt(s)
 **	The input and output pointers can be the same.
 **
 **	Parameters:
-**		ibp -- a pointer to the string to translate
-**		obp -- a pointer to an output buffer
+**		ibp -- a pointer to the string to translate [x]
+**		obp -- a pointer to an output buffer [i][m:A]
 **		bsp -- pointer to the length of the output buffer
 **
 **	Returns:
@@ -137,10 +143,29 @@ str2prt(s)
 #define SM_MM_QUOTE(ch) (((ch) & 0377) == METAQUOTE || (((ch) & 0340) == 0200))
 
 char *
-quote_internal_chars(ibp, obp, bsp)
+#if SM_HEAP_CHECK > 2
+quote_internal_chars_tagged
+#else
+quote_internal_chars
+#endif
+	(ibp, obp, bsp, rpool
+#if SM_HEAP_CHECK > 2
+	, tag, line, group
+#endif
+	)
 	char *ibp;
 	char *obp;
 	int *bsp;
+	SM_RPOOL_T *rpool;
+#if SM_HEAP_CHECK > 2
+	char *tag;
+	int line;
+	int group;
+#else
+# define tag  "quote_internal_chars"
+# define line 1
+# define group 1
+#endif
 {
 	char *ip, *op;
 	int bufused, olen;
@@ -162,7 +187,7 @@ quote_internal_chars(ibp, obp, bsp)
 	/* is the output buffer big enough? */
 	if (olen > *bsp)
 	{
-		obp = sm_malloc_x(olen);
+		obp = sm_rpool_malloc_tagged_x(rpool, olen, tag, line, group);
 		buffer_same = false;
 		*bsp = olen;
 	}
@@ -187,7 +212,7 @@ quote_internal_chars(ibp, obp, bsp)
 
 	if (buffer_same)
 	{
-		obp = sm_malloc_x(olen);
+		obp = sm_malloc_tagged_x(olen, tag, line + 1, group);
 		buffer_same = false;
 		*bsp = olen;
 	}
@@ -205,14 +230,19 @@ quote_internal_chars(ibp, obp, bsp)
 	op[bufused] = '\0';
 	return obp;
 }
+#if SM_HEAP_CHECK <= 2
+# undef tag
+# undef line
+# undef group
+#endif
 
 /*
 **  DEQUOTE_INTERNAL_CHARS -- undo the effect of quote_internal_chars
 **
 **	Parameters:
-**		ibp -- a pointer to the string to be translated.
-**		obp -- a pointer to the output buffer.  Can be the
-**			same as ibp.
+**		ibp -- a pointer to the string to be translated. [i]
+**		obp -- a pointer to the output buffer. [x]
+**			Can be the same as ibp.
 **		obs -- the size of the output buffer.
 **
 **	Returns:
diff --git a/libsm/uxtext_unquote.c b/libsm/uxtext_unquote.c
new file mode 100644
index 000000000000..67e77c306048
--- /dev/null
+++ b/libsm/uxtext_unquote.c
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ */
+
+#include 
+#include 
+
+/*
+**  based on
+**  https://github.com/aox/encodings/utf.cpp
+**  see license.txt included below.
+*/
+
+#if USE_EAI
+#include 
+#define SM_ISDIGIT(c)	(isascii(c) && isdigit(c))
+
+#include 
+
+/* for prototype */
+#include 
+
+# if 0
+/*
+**   RFC 6533:
+**
+**   In the ABNF below, all productions not defined in this document are
+**   defined in Appendix B of [RFC5234], in Section 4 of [RFC3629], or in
+**   [RFC3464].
+**
+**   utf-8-type-addr     = "utf-8;" utf-8-enc-addr
+**   utf-8-address       = Mailbox ; Mailbox as defined in [RFC6531].
+**   utf-8-enc-addr      = utf-8-addr-xtext /
+**                         utf-8-addr-unitext /
+**                         utf-8-address
+**   utf-8-addr-xtext    = 1*(QCHAR / EmbeddedUnicodeChar)
+**                         ; 7bit form of utf-8-addr-unitext.
+**                         ; Safe for use in the ORCPT [RFC3461]
+**                         ; parameter even when SMTPUTF8 SMTP
+**                         ; extension is not advertised.
+**   utf-8-addr-unitext  = 1*(QUCHAR / EmbeddedUnicodeChar)
+**                       ; MUST follow utf-8-address ABNF when
+**                       ; dequoted.
+**                       ; Safe for using in the ORCPT [RFC3461]
+**                       ; parameter when SMTPUTF8 SMTP extension
+**                       ; is also advertised.
+**   QCHAR              = %x21-2a / %x2c-3c / %x3e-5b / %x5d-7e
+**                       ; ASCII printable characters except
+**                       ; CTLs, SP, '\', '+', '='.
+**   QUCHAR              = QCHAR / UTF8-2 / UTF8-3 / UTF8-4
+**                       ; ASCII printable characters except
+**                       ; CTLs, SP, '\', '+' and '=', plus
+**                       ; other Unicode characters encoded in UTF-8
+**   EmbeddedUnicodeChar =   %x5C.78 "{" HEXPOINT "}"
+**                       ; starts with "\x"
+**   HEXPOINT = ( ( "0"/"1" ) %x31-39 ) / "10" / "20" /
+**              "2B" / "3D" / "7F" /         ; all xtext-specials
+**              "5C" / (HEXDIG8 HEXDIG) /    ; 2-digit forms
+**              ( NZHEXDIG 2(HEXDIG) ) /     ; 3-digit forms
+**              ( NZDHEXDIG 3(HEXDIG) ) /    ; 4-digit forms excluding
+**              ( "D" %x30-37 2(HEXDIG) ) /  ; ... surrogate
+**              ( NZHEXDIG 4(HEXDIG) ) /     ; 5-digit forms
+**              ( "10" 4*HEXDIG )            ; 6-digit forms
+**              ; represents either "\" or a Unicode code point outside
+**              ; the ASCII repertoire
+**   HEXDIG8             = %x38-39 / "A" / "B" / "C" / "D" / "E" / "F"
+**                       ; HEXDIG excluding 0-7
+**   NZHEXDIG            = %x31-39 / "A" / "B" / "C" / "D" / "E" / "F"
+**                       ; HEXDIG excluding "0"
+**   NZDHEXDIG           = %x31-39 / "A" / "B" / "C" / "E" / "F"
+**                       ; HEXDIG excluding "0" and "D"
+*/
+# endif /* 0 */
+
+/*
+**  UXTEXT_UNQUOTE -- "unquote" a utf-8-addr-unitext
+**
+**	Parameters:
+**		quoted -- original string [x]
+**		unquoted -- "decoded" string [x] (buffer provided by caller)
+**			if NULL this is basically a syntax check.
+**		olen -- length of unquoted (must be > 0)
+**
+**	Returns:
+**		>0: length of "decoded" string
+**		<0: error
+*/
+
+int
+uxtext_unquote(quoted, unquoted, olen)
+	const char *quoted;
+	char *unquoted;
+	int olen;
+{
+	const unsigned char *cp;
+	int ch, len;
+
+#define APPCH(ch) do	\
+	{		\
+		if (len >= olen)	\
+			return 0 - olen;	\
+		if (NULL !=  unquoted)	\
+			unquoted[len] = (char) (ch);	\
+		len++;	\
+	} while (0)
+
+	SM_REQUIRE(olen > 0);
+	SM_REQUIRE(NULL != quoted);
+	len = 0;
+	for (cp = (const unsigned char *) quoted; (ch = *cp) != 0; cp++)
+	{
+		if (ch == '\\' && cp[1] == 'x' && cp[2] == '{')
+		{
+			int	 uc = 0;
+
+			cp += 2;
+			while ((ch = *++cp) != '}')
+			{
+				if (SM_ISDIGIT(ch))
+					uc = (uc << 4) + (ch - '0');
+				else if (ch >= 'a' && ch <= 'f')
+					uc = (uc << 4) + (ch - 'a' + 10);
+				else if (ch >= 'A' && ch <= 'F')
+					uc = (uc << 4) + (ch - 'A' + 10);
+				else
+					return 0 - len;
+				if (uc > 0x10ffff)
+					return 0 - len;
+			}
+
+			if (uc < 0x80)
+				APPCH(uc);
+			else if (uc < 0x800)
+			{
+				APPCH(0xc0 | ((char) (uc >> 6)));
+				APPCH(0x80 | ((char) (uc & 0x3f)));
+			}
+			else if (uc < 0x10000)
+			{
+				APPCH(0xe0 | ((char) (uc >> 12)));
+				APPCH(0x80 | ((char) (uc >> 6) & 0x3f));
+				APPCH(0x80 | ((char) (uc & 0x3f)));
+			}
+			else if (uc < 0x200000)
+			{
+				APPCH(0xf0 | ((char) (uc >> 18)));
+				APPCH(0x80 | ((char) (uc >> 12) & 0x3f));
+				APPCH(0x80 | ((char) (uc >> 6) & 0x3f));
+				APPCH(0x80 | ((char) (uc & 0x3f)));
+			}
+			else if (uc < 0x4000000)
+			{
+				APPCH(0xf8 | ((char) (uc >> 24)));
+				APPCH(0x80 | ((char) (uc >> 18) & 0x3f));
+				APPCH(0x80 | ((char) (uc >> 12) & 0x3f));
+				APPCH(0x80 | ((char) (uc >> 6) & 0x3f));
+				APPCH(0x80 | ((char) (uc & 0x3f)));
+			}
+			else
+			{
+				APPCH(0xfc | ((char) (uc >> 30)));
+				APPCH(0x80 | ((char) (uc >> 24) & 0x3f));
+				APPCH(0x80 | ((char) (uc >> 18) & 0x3f));
+				APPCH(0x80 | ((char) (uc >> 12) & 0x3f));
+				APPCH(0x80 | ((char) (uc >> 6) & 0x3f));
+				APPCH(0x80 | ((char) (uc & 0x3f)));
+			}
+		}
+		else
+			APPCH(ch);
+	}
+	APPCH('\0');
+	return len;
+}
+
+# if 0
+aox/doc/readme/license.txt
+
+Copyright (c) 2003-2014, Archiveopteryx and its contributors.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose, without fee, and without a written
+agreement is hereby granted, provided that the above copyright notice
+and this paragraph and the following two paragraphs appear in all
+copies.
+
+IN NO EVENT SHALL ORYX BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+ORYX HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ORYX SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
+BASIS, AND ORYX HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+# endif /* 0 */
+#endif /* USE_EAI */
diff --git a/libsm/vasprintf.c b/libsm/vasprintf.c
index a880889a3d35..3bac485b8ff2 100644
--- a/libsm/vasprintf.c
+++ b/libsm/vasprintf.c
@@ -56,7 +56,7 @@ int
 sm_vasprintf(str, fmt, ap)
 	char **str;
 	const char *fmt;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 {
 	int ret;
 	SM_FILE_T fake;
diff --git a/libsm/vfprintf.c b/libsm/vfprintf.c
index b90a305b04d8..e4e69edbe419 100644
--- a/libsm/vfprintf.c
+++ b/libsm/vfprintf.c
@@ -98,7 +98,7 @@ static int
 sm_bprintf(fp, fmt, ap)
 	SM_FILE_T *fp;
 	const char *fmt;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 {
 	int ret;
 	SM_FILE_T fake;
@@ -174,7 +174,7 @@ sm_io_vfprintf(fp, timeout, fmt0, ap)
 	SM_FILE_T *fp;
 	int timeout;
 	const char *fmt0;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 {
 	register char *fmt;	/* format string */
 	register int ch;	/* character from fmt */
@@ -827,7 +827,7 @@ number:			if ((dprec = prec) >= 0)
 static void
 sm_find_arguments(fmt0, ap, argtable)
 	const char *fmt0;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 	va_list **argtable;
 {
 	register char *fmt;	/* format string */
@@ -1076,6 +1076,7 @@ reswitch:	switch (ch)
 			(void) SM_VA_ARG(ap, void *);
 			break;
 		}
+		SM_VA_END_COPY((*argtable)[n]);
 	}
 
 	if ((typetable != NULL) && (typetable != stattypetable))
diff --git a/libsm/vprintf.c b/libsm/vprintf.c
index 670482960d93..321499f67736 100644
--- a/libsm/vprintf.c
+++ b/libsm/vprintf.c
@@ -33,7 +33,7 @@ int
 sm_vprintf(timeout, fmt, ap)
 	int timeout;
 	char const *fmt;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 {
 	return sm_io_vfprintf(smiostdout, timeout, fmt, ap);
 }
diff --git a/libsm/vsnprintf.c b/libsm/vsnprintf.c
index f0da60285316..14da520f7f9f 100644
--- a/libsm/vsnprintf.c
+++ b/libsm/vsnprintf.c
@@ -42,7 +42,7 @@ sm_vsnprintf(str, n, fmt, ap)
 	char *str;
 	size_t n;
 	const char *fmt;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 {
 	int ret;
 	char dummy;
diff --git a/libsm/xleni.c b/libsm/xleni.c
new file mode 100644
index 000000000000..3d0b9d94d24e
--- /dev/null
+++ b/libsm/xleni.c
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ */
+
+#include 
+#include 
+#include 
+
+#if _FFR_8BITENVADDR
+/*
+**  XLENI -- determine the 'i'internal length of a string in e'x'ternal format
+**
+**	Parameters:
+**		str -- string [x]
+**
+**	Returns:
+**		'i'internal length of a string in e'x'ternal format
+*/
+
+int
+xleni(str)
+	const char *str;
+{
+	char c;
+	int idx, ilen;
+
+	if (NULL == str)
+		return -1;
+	for (ilen = 0, idx = 0; (c = str[idx]) != '\0'; ilen++, idx++)
+	{
+		if (SM_MM_QUOTE(c))
+			ilen++;
+	}
+
+	return ilen;
+}
+#endif /* _FFR_8BITENVADDR */
diff --git a/libsmdb/smcdb.c b/libsmdb/smcdb.c
index 84c1a9e1f90c..93b3bdf52323 100644
--- a/libsmdb/smcdb.c
+++ b/libsmdb/smcdb.c
@@ -70,14 +70,14 @@ static int smcdb_cursor __P((SMDB_DATABASE *database, SMDB_CURSOR **cursor, SMDB
 **
 */
 
-#if 0
+# if 0
 static int
 smdb_type_to_cdb_type(type)
 	SMDB_DBTYPE type;
 {
 	return 0;	/* XXX */
 }
-#endif
+# endif
 
 /*
 **  CDB_ERROR_TO_SMDB -- Translates cdb errors to smdbe errors
@@ -404,7 +404,7 @@ smcdb_cursor(database, cursor, flags)
 }
 
 /*
-**  SMDB_DB_OPEN -- Opens a db database.
+**  SMDB_CDB_OPEN -- Opens a cdb database.
 **
 **	Parameters:
 **		database -- An unallocated database pointer to a pointer.
@@ -415,19 +415,12 @@ smcdb_cursor(database, cursor, flags)
 **		type -- The type of database to open
 **			See smdb_type_to_cdb_type for valid types.
 **		user_info -- User information for file permissions.
-**		db_params --
-**			An SMDB_DBPARAMS struct including params. These
-**			are processed according to the type of the
-**			database. Currently supported params (only for
-**			HASH type) are:
-**			   num_elements
-**			   cache_size
+**		db_params -- unused
 **
 **	Returns:
 **		SMDBE_OK -- Success, other errno:
 **		SMDBE_MALLOC -- Cannot allocate memory.
-**		SMDBE_BAD_OPEN -- db_open didn't return an error, but
-**				 somehow the DB pointer is NULL.
+**		SMDBE_BAD_OPEN -- various (OS) errors.
 **		Anything else: translated error from cdb
 */
 
@@ -492,7 +485,7 @@ smdb_cdb_open(database, db_name, mode, mode_mask, sff, type, user_info, db_param
 
 	sm_cdbmap->smcdb_lock_fd = lock_fd;
 
-#if 0
+# if 0
 	db = NULL;
 	db_flags = 0;
 	if (bitset(O_CREAT, mode))
@@ -502,7 +495,7 @@ smdb_cdb_open(database, db_name, mode, mode_mask, sff, type, user_info, db_param
 	if (mode == O_RDONLY)
 		db_flags |= DB_RDONLY;
 	SM_DB_FLAG_ADD(db_flags);
-#endif
+# endif
 
 	result = -1; /* smdb_db_open_internal(db_file_name, db_type, db_flags, db_params, &db); */
 	db_fd = open(db_file_name, mode, DBMMODE);
diff --git a/libsmdb/smdb2.c b/libsmdb/smdb2.c
index d208efb40324..2e58f167124a 100644
--- a/libsmdb/smdb2.c
+++ b/libsmdb/smdb2.c
@@ -478,18 +478,18 @@ smdb_db_open_internal(db_name, db_type, db_flags, db_params, db)
 
 static void
 db_err_cb(
-#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
+#  if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
 	dbenv,
-#endif
+#  endif
 	errpfx, msg)
-#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
+#  if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
 	const DB_ENV *dbenv;
 	const char *errpfx;
 	const char *msg;
-#else
+#  else
 	const char *errpfx;
 	char *msg;
-#endif
+#  endif
 {
 	/* do not print/log any errors... */
 	return;
diff --git a/libsmutil/Makefile.m4 b/libsmutil/Makefile.m4
index e8efdc2cd955..611555a9f1ed 100644
--- a/libsmutil/Makefile.m4
+++ b/libsmutil/Makefile.m4
@@ -12,4 +12,10 @@ define(`bldSOURCES', `debug.c err.c lockfile.c safefile.c snprintf.c cf.c ')
 APPENDDEF(`confENVDEF', `-DNOT_SENDMAIL')
 bldPRODUCT_END
 
+srcdir=${SRCDIR}/libsmutil
+define(`confCHECK_LIBS',`libsmutil.a ../libsm/libsm.a')dnl
+include(confBUILDTOOLSDIR`/M4/'bldM4_TYPE_DIR`/check.m4')
+smcheck(`t-lockfile', `compile')
+smcheck(`t-lockfile-0.sh', `run')
+
 bldFINISH
diff --git a/libsmutil/cf.c b/libsmutil/cf.c
index f803b95ef607..f445f6293059 100644
--- a/libsmutil/cf.c
+++ b/libsmutil/cf.c
@@ -61,8 +61,11 @@ getcfname(opmode, submitmode, cftype, conffile)
 			(void) sm_strlcpy(cf, cflocation, sizeof cf);
 		else
 #endif /* NETINFO */
+		/* "else" in #if code above */
+		{
 			(void) sm_strlcpyn(cf, sizeof cf, 2, _DIR_SENDMAILCF,
 					   "submit.cf");
+		}
 		if (cftype == SM_GET_SUBMIT_CF || stat(cf, &sbuf) == 0)
 			return cf;
 	}
diff --git a/libsmutil/safefile.c b/libsmutil/safefile.c
index 1c70c24440e5..81adb5842496 100644
--- a/libsmutil/safefile.c
+++ b/libsmutil/safefile.c
@@ -78,12 +78,12 @@ safefile(fn, uid, gid, user, flags, mode, st)
 		flags &= ~SFF_SAFEDIRPATH;
 
 	/* first check to see if the file exists at all */
-# if HASLSTAT
+#if HASLSTAT
 	if ((bitset(SFF_NOSLINK, flags) ? lstat(fn, st)
 					: stat(fn, st)) < 0)
-# else
+#else
 	if (stat(fn, st) < 0)
-# endif
+#endif
 	{
 		file_errno = errno;
 	}
@@ -97,21 +97,21 @@ safefile(fn, uid, gid, user, flags, mode, st)
 		**  soon here!
 		*/
 
-# ifdef SUID_ROOT_FILES_OK
+#ifdef SUID_ROOT_FILES_OK
 		if (bitset(S_ISUID, st->st_mode))
-# else
+#else
 		if (bitset(S_ISUID, st->st_mode) && st->st_uid != 0 &&
 		    st->st_uid != TrustedUid)
-# endif
+#endif
 		{
 			uid = st->st_uid;
 			user = NULL;
 		}
-# ifdef SUID_ROOT_FILES_OK
+#ifdef SUID_ROOT_FILES_OK
 		if (bitset(S_ISGID, st->st_mode))
-# else
+#else
 		if (bitset(S_ISGID, st->st_mode) && st->st_gid != 0)
-# endif
+#endif
 			gid = st->st_gid;
 	}
 
@@ -142,7 +142,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 		}
 		else
 		{
-# if HASLSTAT
+#if HASLSTAT
 			/* Need lstat() information if called stat() before */
 			if (!bitset(SFF_NOSLINK, flags) && lstat(fn, st) < 0)
 			{
@@ -151,7 +151,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 					sm_dprintf("\t%s\n", sm_errstring(ret));
 				return ret;
 			}
-# endif /* HASLSTAT */
+#endif /* HASLSTAT */
 			/* directory is writable: disallow links */
 			flags |= SFF_NOLINK;
 		}
@@ -218,7 +218,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 				if (stbuf.st_gid == gid)
 					/* EMPTY */
 					;
-# ifndef NO_GROUP_SET
+#ifndef NO_GROUP_SET
 				else if (user != NULL && !DontInitGroups &&
 					 ((gr != NULL &&
 					   gr->gr_gid == stbuf.st_gid) ||
@@ -232,7 +232,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 					if (*gp == NULL)
 						md >>= 3;
 				}
-# endif /* ! NO_GROUP_SET */
+#endif /* ! NO_GROUP_SET */
 				else
 					md >>= 3;
 			}
@@ -252,7 +252,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 		return ret;
 	}
 
-# ifdef S_ISLNK
+#ifdef S_ISLNK
 	if (bitset(SFF_NOSLINK, flags) && S_ISLNK(st->st_mode))
 	{
 		if (tTd(44, 4))
@@ -260,7 +260,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 				(unsigned long) st->st_mode);
 		return E_SM_NOSLINK;
 	}
-# endif /* S_ISLNK */
+#endif /* S_ISLNK */
 	if (bitset(SFF_REGONLY, flags) && !S_ISREG(st->st_mode))
 	{
 		if (tTd(44, 4))
@@ -332,7 +332,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 		if (st->st_gid == gid)
 			/* EMPTY */
 			;
-# ifndef NO_GROUP_SET
+#ifndef NO_GROUP_SET
 		else if (user != NULL && !DontInitGroups &&
 			 ((gr != NULL && gr->gr_gid == st->st_gid) ||
 			  (gr = getgrgid(st->st_gid)) != NULL))
@@ -345,7 +345,7 @@ safefile(fn, uid, gid, user, flags, mode, st)
 			if (*gp == NULL)
 				mode >>= 3;
 		}
-# endif /* ! NO_GROUP_SET */
+#endif /* ! NO_GROUP_SET */
 		else
 			mode >>= 3;
 	}
@@ -470,18 +470,18 @@ safedirpath(fn, uid, gid, user, flags, level, offset)
 		if (tTd(44, 20))
 			sm_dprintf("\t[dir %s]\n", s);
 
-# if HASLSTAT
+#if HASLSTAT
 		ret = lstat(s, &stbuf);
-# else
+#else
 		ret = stat(s, &stbuf);
-# endif
+#endif
 		if (ret < 0)
 		{
 			ret = errno;
 			break;
 		}
 
-# ifdef S_ISLNK
+#ifdef S_ISLNK
 		/* Follow symlinks */
 		if (S_ISLNK(stbuf.st_mode))
 		{
@@ -637,7 +637,7 @@ safedirpath(fn, uid, gid, user, flags, level, offset)
 		if (stbuf.st_gid == gid &&
 		    bitset(S_IXGRP, stbuf.st_mode))
 			continue;
-# ifndef NO_GROUP_SET
+#ifndef NO_GROUP_SET
 		if (user != NULL && !DontInitGroups &&
 		    ((gr != NULL && gr->gr_gid == stbuf.st_gid) ||
 		     (gr = getgrgid(stbuf.st_gid)) != NULL))
@@ -651,7 +651,7 @@ safedirpath(fn, uid, gid, user, flags, level, offset)
 			    bitset(S_IXGRP, stbuf.st_mode))
 				continue;
 		}
-# endif /* ! NO_GROUP_SET */
+#endif /* ! NO_GROUP_SET */
 		if (!bitset(S_IXOTH, stbuf.st_mode))
 		{
 			ret = EACCES;
@@ -869,13 +869,13 @@ filechanged(fn, fd, stb)
 
 	if (stb->st_mode == ST_MODE_NOFILE)
 	{
-# if HASLSTAT && BOGUS_O_EXCL
+#if HASLSTAT && BOGUS_O_EXCL
 		/* only necessary if exclusive open follows symbolic links */
 		if (lstat(fn, stb) < 0 || stb->st_nlink != 1)
 			return true;
-# else
+#else
 		return false;
-# endif
+#endif
 	}
 	if (fstat(fd, &sta) < 0)
 		return true;
@@ -883,9 +883,9 @@ filechanged(fn, fd, stb)
 	if (sta.st_nlink != stb->st_nlink ||
 	    sta.st_dev != stb->st_dev ||
 	    sta.st_ino != stb->st_ino ||
-# if HAS_ST_GEN && 0		/* AFS returns garbage in st_gen */
+#if HAS_ST_GEN && 0		/* AFS returns garbage in st_gen */
 	    sta.st_gen != stb->st_gen ||
-# endif
+#endif
 	    sta.st_uid != stb->st_uid ||
 	    sta.st_gid != stb->st_gid)
 	{
@@ -899,10 +899,10 @@ filechanged(fn, fd, stb)
 			sm_dprintf(" ino	= %llu/%llu\n",
 				(ULONGLONG_T) stb->st_ino,
 				(ULONGLONG_T) sta.st_ino);
-# if HAS_ST_GEN
+#if HAS_ST_GEN
 			sm_dprintf(" gen	= %ld/%ld\n",
 				(long) stb->st_gen, (long) sta.st_gen);
-# endif
+#endif
 			sm_dprintf(" uid	= %ld/%ld\n",
 				(long) stb->st_uid, (long) sta.st_uid);
 			sm_dprintf(" gid	= %ld/%ld\n",
diff --git a/libsmutil/t-lockfile-0.sh b/libsmutil/t-lockfile-0.sh
new file mode 100755
index 000000000000..bc4ed311f410
--- /dev/null
+++ b/libsmutil/t-lockfile-0.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+# Copyright (c) 2021 Proofpoint, Inc. and its suppliers.
+#	All rights reserved.
+#
+# By using this file, you agree to the terms and conditions set
+# forth in the LICENSE file which can be found at the top level of
+# the sendmail distribution.
+#
+# ----------------------------------------
+# test t-lockfile, analyze result
+# ----------------------------------------
+
+fail()
+{
+  echo "$0: $@"
+  exit 1
+}
+
+PRG=./t-lockfile
+O=l.log
+
+analyze()
+{
+ # the "owner" unlock operation must be before
+ # the "client" lock operation can succeed
+ U=`grep -n 'owner=1, unlock.*done' $O | cut -d: -f1 | head -n1`
+ [ x"$U" = "x" ] && U=`grep -n '_close' $O | cut -d: -f1 | head -n1`
+ L=`grep -n 'owner=0, lock.* ok' $O | cut -d: -f1`
+ [ x"$U" = "x" ] && return 1
+ [ x"$L" = "x" ] && return 1
+ [ $U -lt $L ]
+}
+
+all=true
+while getopts 2a: FLAG
+do
+  case "${FLAG}" in
+    2) all=false;;
+    a) O=${OPTARG}
+       analyze || fail "$opts: unlock1=$U, lock2=$L"
+       exit;;
+  esac
+done
+shift `expr ${OPTIND} - 1`
+
+[ -x ${PRG} ] || fail "missing ${PRG}"
+
+if $all
+then
+for opts in "" "-r" "-n" "-nr"
+do
+  ${PRG} $opts > $O 2>&1 || fail "$opts: $?"
+  analyze || fail "$opts: unlock1=$U, lock2=$L"
+done
+fi
+
+# try with two processes
+for opts in "" "-r"
+do
+rm -f $O
+${PRG} -W >> $O 2>&1 || fail "-W: $?"
+wpid=$!
+${PRG} -R $opts >> $O 2>&1 || fail "-R $opts: $?"
+rpid=$!
+analyze || fail "$opts: unlock1=$U, lock2=$L"
+wait $wpid
+wait $rpid
+done
+
+exit 0
diff --git a/libsmutil/t-lockfile.c b/libsmutil/t-lockfile.c
new file mode 100644
index 000000000000..27818a990873
--- /dev/null
+++ b/libsmutil/t-lockfile.c
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2005 Proofpoint, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ */
+
+#include 
+SM_IDSTR(id, "@(#)$Id: t-lockfile.c,v 1.2 2013-11-22 20:51:50 ca Exp $")
+#include 
+#include 
+#include 
+
+#define IOBUFSZ	64
+char iobuf[IOBUFSZ];
+#define FIRSTLINE	"first line\n"
+#define LASTLINE	"last line\n"
+static int noio, chk;
+static pid_t pid;
+
+int
+openfile(owner, filename, flags)
+	int owner;
+	char *filename;
+	int flags;
+{
+	int fd;
+
+	if (owner)
+		flags |= O_CREAT;
+	fd = open(filename, flags, 0640);
+	if (fd >= 0)
+		return fd;
+	fprintf(stderr, "%d: %ld: owner=%d, open(%s) failed\n",
+		(int) pid, (long) time(NULL), owner, filename);
+	return 1;
+}
+
+int
+wrbuf(fd)
+	int fd;
+{
+	int r;
+
+	if (noio)
+		return 0;
+	r = write(fd, iobuf, sizeof(iobuf));
+	if (sizeof(iobuf) == r)
+		return 0;
+	fprintf(stderr, "%d: %ld: owner=1, write(%s)=fail\n",
+		(int) pid, (long) time(NULL), iobuf);
+	return 1;
+}
+
+int
+rdbuf(fd, xbuf)
+	int fd;
+	const char *xbuf;
+{
+	int r;
+
+	if (noio)
+		return 0;
+	r = read(fd, iobuf, sizeof(iobuf));
+	if (sizeof(iobuf) != r)
+	{
+		fprintf(stderr, "%d: %ld: owner=0, read()=fail\n",
+			(int) pid, (long) time(NULL));
+		return 1;
+	}
+	if (strncmp(iobuf, xbuf, strlen(xbuf)))
+	{
+		fprintf(stderr, "%d: %ld: owner=0, read=%s expected=%s\n",
+			(int) pid, (long) time(NULL), iobuf, xbuf);
+		return 1;
+	}
+	return 0;
+}
+
+/*
+**  LOCKTEST -- test of file locking
+**
+**	Parameters:
+**		owner -- create file?
+**		filename -- name of file.
+**		flags -- flags for open(2)
+**		delay -- how long to keep file locked?
+**
+**	Returns:
+**		0 on success
+**		!= 0 on failure.
+*/
+
+#define DBGPRINTR(str)	\
+	do	\
+	{	\
+		fprintf(stderr, "%d: %ld: owner=0, ", (int) pid,	\
+			(long) time(NULL));	\
+		fprintf(stderr, str, filename, shared ? "RD" : "EX");	\
+	} while (0)
+
+int
+locktestwr(filename, flags, delay)
+	char *filename;
+	int flags;
+	int delay;
+{
+	int fd;
+	bool locked;
+
+	fd = openfile(1, filename, flags);
+	if (fd < 0)
+		return errno;
+	locked = lockfile(fd, filename, "[owner]", LOCK_EX);
+	if (!locked)
+	{
+		fprintf(stderr, "%d: %ld: owner=1, lock(%s) failed\n",
+			(int) pid, (long) time(NULL), filename);
+		return 1;
+	}
+	else
+		fprintf(stderr, "%d: %ld: owner=1, lock(%s) ok\n",
+			(int) pid, (long) time(NULL), filename);
+
+	sm_strlcpy(iobuf, FIRSTLINE, sizeof(iobuf));
+	if (wrbuf(fd))
+		return 1;
+	sleep(delay);
+	sm_strlcpy(iobuf, LASTLINE, sizeof(iobuf));
+	if (wrbuf(fd))
+		return 1;
+	locked = lockfile(fd, filename, "[owner]", LOCK_UN);
+	if (!locked)
+	{
+		fprintf(stderr, "%d: %ld: owner=1, unlock(%s) failed\n",
+			(int) pid, (long) time(NULL), filename);
+		return 1;
+	}
+	fprintf(stderr, "%d: %ld: owner=1, unlock(%s) done\n",
+		(int) pid, (long) time(NULL), filename);
+	if (fd > 0)
+	{
+		close(fd);
+		fd = -1;
+	}
+	return 0;
+}
+
+long
+chklck(fd)
+	int fd;
+{
+#if !HASFLOCK
+	int action, i;
+	struct flock lfd;
+
+	(void) memset(&lfd, '\0', sizeof lfd);
+	lfd.l_type = F_RDLCK;
+	action = F_GETLK;
+	while ((i = fcntl(fd, action, &lfd)) < 0 && errno == EINTR)
+		continue;
+	if (i < 0)
+		return (long)i;
+	if (F_WRLCK == lfd.l_type)
+		return (long)lfd.l_pid;
+	return 0L;
+#else /* !HASFLOCK */
+	fprintf(stderr, "%d: %ld: flock: no lock test\n",
+		(int) pid, (long) time(NULL));
+	return -1L;
+#endif /* !HASFLOCK */
+}
+
+int
+locktestrd(filename, flags, delay, shared)
+	char *filename;
+	int flags;
+	int delay;
+	int shared;
+{
+	int fd, cnt;
+	int lt;
+	bool locked;
+
+	fd = openfile(0, filename, flags);
+	if (fd < 0)
+		return errno;
+	if (chk)
+	{
+		long locked;
+
+		locked = chklck(fd);
+		if (locked > 0)
+			fprintf(stderr, "%d: %ld: file=%s status=locked pid=%ld\n",
+				 (int) pid, (long) time(NULL), filename, locked);
+		else if (0 == locked)
+			fprintf(stderr, "%d: %ld: file=%s status=not_locked\n",
+				 (int) pid, (long) time(NULL), filename);
+		else
+			fprintf(stderr, "%d: %ld: file=%s status=unknown\n",
+				 (int) pid, (long) time(NULL), filename);
+		goto end;
+	}
+
+	if (shared)
+		lt = LOCK_SH;
+	else
+		lt = LOCK_EX;
+
+	for (cnt = 0; cnt < delay - 2; cnt++)
+	{
+		/* try to get lock: should fail (nonblocking) */
+		locked = lockfile(fd, filename, "[client]", lt|LOCK_NB);
+		if (locked)
+		{
+			DBGPRINTR("lock(%s)=%s succeeded\n");
+			return 1;
+		}
+		sleep(1);
+	}
+	if (delay > 0)
+		sleep(2);
+	locked = lockfile(fd, filename, "[client]", lt);
+	if (!locked)
+	{
+		DBGPRINTR("lock(%s)=%s failed\n");
+		return 1;
+	}
+	DBGPRINTR("lock(%s)=%s ok\n");
+	if (rdbuf(fd, FIRSTLINE))
+		return 1;
+	if (rdbuf(fd, LASTLINE))
+		return 1;
+	sleep(1);
+	locked = lockfile(fd, filename, "[client]", LOCK_UN);
+	if (!locked)
+	{
+		DBGPRINTR("unlock(%s)=%s failed\n");
+		return 1;
+	}
+	DBGPRINTR("unlock(%s)=%s done\n");
+
+  end:
+	if (fd > 0)
+	{
+		close(fd);
+		fd = -1;
+	}
+	return 0;
+}
+
+static void
+usage(prg)
+	const char *prg;
+{
+	fprintf(stderr, "usage: %s [options]\n"
+		"-f filename	use filename\n"
+		"-i		do not perform I/O\n"
+		"-n		do not try non-blocking locking first\n"
+		"-R		only start reader process\n"
+		"-r		use shared locking for reader\n"
+		"-s delay	sleep delay seconds before unlocking\n"
+		"-W		only start writer process\n"
+		, prg);
+}
+
+int
+main(argc, argv)
+	int argc;
+	char *argv[];
+{
+	int ch, delay, r, status, flags, shared, nb, reader, writer;
+	char *filename;
+	pid_t fpid;
+	extern char *optarg;
+
+	delay = 5;
+	filename = "testlock";
+	flags = O_RDWR;
+	shared = nb = noio = reader = writer = chk = 0;
+#define OPTIONS	"cf:inRrs:W"
+	while ((ch = getopt(argc, argv, OPTIONS)) != -1)
+	{
+		switch ((char) ch)
+		{
+		  case 'c':
+			chk = 1;
+			break;
+
+		  case 'f':
+			filename = optarg;
+			break;
+
+		  case 'i':
+			noio = 1;
+			break;
+
+		  case 'n':
+			nb = 0;
+			break;
+
+		  case 'R':
+			reader = 1;
+			break;
+
+		  case 'r':
+			shared = 1;
+			break;
+
+		  case 's':
+			delay = atoi(optarg);
+			break;
+
+		  case 'W':
+			writer = 1;
+			break;
+
+		  default:
+			usage(argv[0]);
+			exit(69);
+			break;
+		}
+	}
+
+	fpid = -1;
+	if (0 == reader && 0 == writer && (fpid = fork()) < 0)
+	{
+		perror("fork failed\n");
+		return 1;
+	}
+
+	r = 0;
+	if (reader || fpid == 0)
+	{
+		/* give the parent the chance to setup data */
+		pid = getpid();
+		sleep(1);
+		r = locktestrd(filename, flags, nb ? delay : 0, shared);
+	}
+	if (writer || fpid > 0)
+	{
+		fpid = getpid();
+		r = locktestwr(filename, flags, delay);
+		(void) wait(&status);
+	}
+	/* (void) unlink(filename); */
+	return r;
+}
diff --git a/libsmutil/t-maplock-0.sh b/libsmutil/t-maplock-0.sh
new file mode 100755
index 000000000000..1884211baf45
--- /dev/null
+++ b/libsmutil/t-maplock-0.sh
@@ -0,0 +1,111 @@
+#!/bin/sh
+# Copyright (c) 2021 Proofpoint, Inc. and its suppliers.
+#	All rights reserved.
+#
+# By using this file, you agree to the terms and conditions set
+# forth in the LICENSE file which can be found at the top level of
+# the sendmail distribution.
+#
+# ----------------------------------------
+# test map locking.
+# Note: this is mostly for systems which use fcntl().
+# just invoke it from the obj.*/libsmutil/ directory;
+# otherwise use the -l and -m options to specify the paths.
+# ----------------------------------------
+
+fail()
+{
+  echo "$0: $@"
+  exit 1
+}
+
+err()
+{
+  echo "$0: $@"
+  rc=1
+}
+
+O=`basename $0`.0
+V=vt
+M=../makemap/makemap
+CHKL=./t-lockfile
+
+usage()
+{
+  cat <> $O 2>&1
+}
+
+chkl()
+{
+  ${CHKL} -Rrc -f $F >> $O 2>&1
+}
+
+for XT in ${MAPTX}
+do
+
+MT=`echo $XT | cut -d: -f1`
+EXT=`echo $XT | cut -d: -f2`
+
+F=$V.${EXT}
+
+rm -f $O
+mm &
+wpid=$!
+sleep 1
+chkl&
+rpid=$!
+
+while [ $tries -gt 0 ]
+do
+  sleep 1; chkl
+  tries=`expr $tries - 1 `
+done
+
+wait $wpid
+wait $rpid
+
+if grep "status=unknown" $O >/dev/null
+then
+  :
+else
+  # get the makemap pid, not the "mm" pid, for checks?
+  grep "status=locked pid=" $O || err "$MT map not locked"
+fi
+
+done
+
+exit $rc
diff --git a/mail.local/mail.local.0 b/mail.local/mail.local.0
index 454261106dca..af3514de9068 100644
--- a/mail.local/mail.local.0
+++ b/mail.local/mail.local.0
@@ -1,57 +1,57 @@
-MAIL.LOCAL(8)                                                    MAIL.LOCAL(8)
+MAIL.LOCAL(8)               System Manager's Manual              MAIL.LOCAL(8)
 
 
 
-NAME
+NNAAMMEE
        mail.local - store mail in a mailbox
 
-SYNOPSIS
-       mail.local [-7] [-b] [-d] [-D mbdb] [-l] [-f from|-r from] [-h filename
-       ] user ...
+SSYYNNOOPPSSIISS
+       mmaaiill..llooccaall [--77] [--bb] [--dd] [--DD _m_b_d_b] [--ll] [--ff _f_r_o_m|--rr _f_r_o_m] [--hh _f_i_l_e_n_a_m_e
+       ] _u_s_e_r _._._.
 
-DESCRIPTION
-       Mail.local reads the standard input up to an end-of-file and appends it
-       to each user's mail file.  The user must be a valid user name.
+DDEESSCCRRIIPPTTIIOONN
+       MMaaiill..llooccaall reads the standard input up to an end-of-file and appends it
+       to each _u_s_e_r_'_s mmaaiill file.  The _u_s_e_r must be a valid user name.
 
        The options are as follows:
 
-       -7        Do not advertise 8BITMIME support in LMTP mode.
+       --77        Do not advertise 8BITMIME support in LMTP mode.
 
-       -b        Return  a  permanent  error instead of a temporary error if a
+       --bb        Return  a  permanent  error instead of a temporary error if a
                  mailbox exceeds quota.
 
-       -d        Specify this is  a  delivery  (for  backward  compatibility).
+       --dd        Specify this is  a  delivery  (for  backward  compatibility).
                  This option has no effect.
 
-       -D mbdb   Specify  the  name  of  the mailbox database which is used to
+       --DD _m_b_d_b   Specify  the  name  of  the mailbox database which is used to
                  look up local recipient names.  This option defaults to "pw",
                  which means use getpwnam().
 
-       -f from   Specify the sender's name.
+       --ff _f_r_o_m   Specify the sender's name.
 
-       -l        Turn on LMTP mode.
+       --ll        Turn on LMTP mode.
 
-       -r from   Specify the sender's name (for backward compatibility).  Same
+       --rr _f_r_o_m   Specify the sender's name (for backward compatibility).  Same
                  as -f.
 
-       -h filename
-                 Store incoming mail in filename in the user's home  directory
+       --hh _f_i_l_e_n_a_m_e
+                 Store incoming mail in _f_i_l_e_n_a_m_e in the user's home  directory
                  instead of a system mail spool directory.
 
-       The  next  options  are  only available if mail.local has been compiled
+       The  next  options  are  only available if mmaaiill..llooccaall has been compiled
        with -DHASHSPOOL.
 
-       -H hashtypehashdepth
-              Select hashed mail directories.  Valid hash types are u for user
-              name  and  m for MD5 (requires compilation with -DHASHSPOOLMD5).
-              Example: -H u2 selects user name hashing with a hash depth of 2.
+       --HH _h_a_s_h_t_y_p_e_h_a_s_h_d_e_p_t_h
+              Select hashed mail directories.  Valid hash types are uu for user
+              name  and  mm for MD5 (requires compilation with -DHASHSPOOLMD5).
+              Example: --HH _u_2 selects user name hashing with a hash depth of 2.
               Note:  there  must  be  no  space  between the hash type and the
               depth.
 
-       -p path
+       --pp _p_a_t_h
               Specify an alternate mail spool path.
 
-       -n     Specify that the domain part of recipient addresses in LMTP mode
+       --nn     Specify that the domain part of recipient addresses in LMTP mode
               should not be stripped.
 
        Individual  mail messages in the mailbox are delimited by an empty line
@@ -63,34 +63,34 @@ MAIL.LOCAL(8)                                                    MAIL.LOCAL(8)
        line (that is, a line beginning with the five characters ``From '' fol-
        lowing a blank line).
 
-       The mail files are exclusively  locked  with  flock(2)  while  mail  is
-       appended,  and  a  user.lock  file also is created while the mailbox is
+       The mail files are exclusively locked with flock(2) while mail  is  ap-
+       pended,  and  a  uusseerr..lloocckk  file  also  is created while the mailbox is
        locked for compatibility with older MUAs.
 
        If the ``biff'' service  is  returned  by  getservbyname(3),  the  biff
        server is notified of delivered mail.
 
-       The mail.local utility exits 0 on success, and >0 if an error occurs.
+       The mmaaiill..llooccaall utility exits 0 on success, and >0 if an error occurs.
 
-ENVIRONMENT
+EENNVVIIRROONNMMEENNTT
        TZ     Used to set the appropriate time zone on the timestamp.
 
-FILES
+FFIILLEESS
        /tmp/local.XXXXXX     temporary files
        /var/mail/user        user's default mailbox directory
        /var/mail/user.lock   lock file for a user's default mailbox
 
-SEE ALSO
+SSEEEE AALLSSOO
        mail(1), xsend(1), flock(2), getservbyname(3), comsat(8), sendmail(8)
 
-WARNING
-       mail.local  escapes  only "^From " lines that follow an empty line.  If
+WWAARRNNIINNGG
+       mmaaiill..llooccaall  escapes  only "^From " lines that follow an empty line.  If
        all lines starting with "From " should be escaped, use the 'E' flag for
        the local mailer in the sendmail.cf file.
 
-HISTORY
-       A  superset  of  mail.local  (handling  mailbox reading as well as mail
-       delivery) appeared in Version 7 AT&T UNIX as the program mail.
+HHIISSTTOORRYY
+       A  superset of mmaaiill..llooccaall (handling mailbox reading as well as mail de-
+       livery) appeared in Version 7 AT&T UNIX as the program mmaaiill.
 
 
 
diff --git a/mail.local/mail.local.c b/mail.local/mail.local.c
index 5a5659b2068b..4a0a5582382e 100644
--- a/mail.local/mail.local.c
+++ b/mail.local/mail.local.c
@@ -21,14 +21,12 @@ SM_IDSTR(copyright,
 SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.257 2013-11-22 20:51:51 ca Exp $")
 
 #include 
+#include 
 #include 
 #include 
 #include 
-# include 
-# ifdef EX_OK
-#  undef EX_OK		/* unistd.h may have another use for this */
-# endif
-# define LOCKFILE_PMODE 0
+#include 
+#define LOCKFILE_PMODE 0
 #include 
 #include 
 
@@ -148,6 +146,9 @@ off_t	BodyLength;
 #endif
 
 bool	EightBitMime = true;		/* advertise 8BITMIME in LMTP */
+#if USE_EAI
+bool	EAI = true;			/* advertise SMTPUTF8 in LMTP */
+#endif
 char	ErrBuf[10240];			/* error buffer */
 int	ExitVal = EX_OK;		/* sysexits.h error value. */
 bool	HoldErrs = false;		/* Hold errors in ErrBuf */
@@ -218,11 +219,11 @@ main(argc, argv)
 	/* use a reasonable umask */
 	(void) umask(0077);
 
-# ifdef LOG_MAIL
+#ifdef LOG_MAIL
 	openlog("mail.local", 0, LOG_MAIL);
-# else
+#else
 	openlog("mail.local", 0);
-# endif
+#endif
 
 	from = NULL;
 
@@ -233,14 +234,16 @@ main(argc, argv)
 		mailerr("421", "Configuration error: _PATH_MAILDIR too large");
 		sm_exit(EX_CONFIG);
 	}
+
+	/* HACK: add U to all options - this should be only for USE_EAI */
 #if HASHSPOOL
-	while ((ch = getopt(argc, argv, "7bdD:f:h:r:lH:p:n")) != -1)
+	while ((ch = getopt(argc, argv, "7bdD:f:h:r:lH:p:nUV")) != -1)
 #else /* HASHSPOOL */
-#  if _FFR_SPOOL_PATH
-	while ((ch = getopt(argc, argv, "7bdD:f:h:r:lp:")) != -1)
-#  else
-	while ((ch = getopt(argc, argv, "7bdD:f:h:r:l")) != -1)
-#  endif
+# if _FFR_SPOOL_PATH
+	while ((ch = getopt(argc, argv, "7bdD:f:h:r:lp:UV")) != -1)
+# else
+	while ((ch = getopt(argc, argv, "7bdD:f:h:r:lUV")) != -1)
+# endif
 #endif /* HASHSPOOL */
 	{
 		switch(ch)
@@ -342,6 +345,22 @@ main(argc, argv)
 			break;
 #endif /* HASHSPOOL || _FFR_SPOOL_PATH */
 
+#if USE_EAI
+		  case 'U':
+			EAI = false;
+			break;
+#endif
+		  case 'V':
+			fprintf(stderr, "compiled with\n");
+#if MAIL_LOCAL_TEST
+			fprintf(stderr, "MAIL_LOCAL_TEST\n");
+#endif
+#if USE_EAI
+			/* test scripts should look for SMTPUTF8 */
+			fprintf(stderr, "USE_EAI\n");
+#endif
+			break;
+
 		  case '?':
 		  default:
 			usage();
@@ -573,7 +592,7 @@ dolmtp()
 		{
 		  case 'd':
 		  case 'D':
-			if (sm_strcasecmp(buf, "data") == 0)
+			if (SM_STRCASEEQ(buf, "data"))
 			{
 				bool inbody = false;
 
@@ -627,6 +646,10 @@ dolmtp()
 				printf("250-%s\r\n", myhostname);
 				if (EightBitMime)
 					printf("250-8BITMIME\r\n");
+#if USE_EAI
+				if (EAI)
+					printf("250-SMTPUTF8\r\n");
+#endif
 				printf("250-ENHANCEDSTATUSCODES\r\n");
 				printf("250 PIPELINING\r\n");
 				continue;
@@ -662,7 +685,7 @@ dolmtp()
 
 		  case 'n':
 		  case 'N':
-			if (sm_strcasecmp(buf, "noop") == 0)
+			if (SM_STRCASEEQ(buf, "noop"))
 			{
 				printf("250 2.0.0 Ok\r\n");
 				continue;
@@ -673,7 +696,7 @@ dolmtp()
 
 		  case 'q':
 		  case 'Q':
-			if (sm_strcasecmp(buf, "quit") == 0)
+			if (SM_STRCASEEQ(buf, "quit"))
 			{
 				printf("221 2.0.0 Bye\r\n");
 				sm_exit(EX_OK);
@@ -724,7 +747,7 @@ dolmtp()
 				printf("250 2.1.5 Ok\r\n");
 				continue;
 			}
-			else if (sm_strcasecmp(buf, "rset") == 0)
+			else if (SM_STRCASEEQ(buf, "rset"))
 			{
 				printf("250 2.0.0 Ok\r\n");
 
@@ -959,7 +982,7 @@ store(from, inbody)
 
 	if (fp == NULL || fflush(fp) == EOF || ferror(fp) != 0)
 	{
-		mailerr("451 4.3.0", "Temporary file write error");
+		mailerr("451 4.3.0", "Temporary file flush error");
 		if (fp != NULL)
 			(void) fclose(fp);
 		return -1;
@@ -1046,7 +1069,7 @@ deliver(fd, name)
 
 	if (HomeMailFile == NULL)
 	{
-		if (sm_strlcpyn(path, sizeof(path), 
+		if (sm_strlcpyn(path, sizeof(path),
 #if HASHSPOOL
 				4,
 #else
@@ -1150,7 +1173,7 @@ deliver(fd, name)
 				goto tryagain;
 
 			/* open failed, don't try again */
-			mailerr("450 4.2.0", "%s: %s", path,
+			mailerr("450 4.2.0", "Create %s: %s", path,
 				sm_errstring(save_errno));
 			goto err0;
 		}
@@ -1193,7 +1216,11 @@ deliver(fd, name)
 	}
 
 	/* change UID for quota checks */
-	if (setreuid(0, user.mbdb_uid) < 0)
+	if (
+#if MAIL_LOCAL_TEST
+	    (HomeMailFile == NULL || user.mbdb_uid != getuid()) &&
+#endif
+	    setreuid(0, user.mbdb_uid) < 0)
 	{
 		mailerr("450 4.2.0", "setreuid(0, %d): %s (r=%d, e=%d)",
 			(int) user.mbdb_uid, sm_errstring(errno),
@@ -1206,7 +1233,7 @@ deliver(fd, name)
 	mbfd = open(path, O_APPEND|O_WRONLY, 0);
 	if (mbfd < 0)
 	{
-		mailerr("450 4.2.0", "%s: %s", path, sm_errstring(errno));
+		mailerr("450 4.2.0", "Append %s: %s", path, sm_errstring(errno));
 		goto err0;
 	}
 	else if (fstat(mbfd, &fsb) < 0 ||
@@ -1215,9 +1242,9 @@ deliver(fd, name)
 		 !S_ISREG(fsb.st_mode) ||
 		 sb.st_dev != fsb.st_dev ||
 		 sb.st_ino != fsb.st_ino ||
-# if HAS_ST_GEN && 0		/* AFS returns random values for st_gen */
+#if HAS_ST_GEN && 0		/* AFS returns random values for st_gen */
 		 sb.st_gen != fsb.st_gen ||
-# endif
+#endif
 		 sb.st_uid != fsb.st_uid)
 	{
 		ExitVal = EX_TEMPFAIL;
@@ -1267,7 +1294,7 @@ deliver(fd, name)
 	/* Wait until we can get a lock on the file. */
 	if (flock(mbfd, LOCK_EX) < 0)
 	{
-		mailerr("450 4.2.0", "%s: %s", path, sm_errstring(errno));
+		mailerr("450 4.2.0", "Lock %s: %s", path, sm_errstring(errno));
 		goto err1;
 	}
 
@@ -1279,7 +1306,7 @@ deliver(fd, name)
 	/* Copy the message into the file. */
 	if (lseek(fd, (off_t) 0, SEEK_SET) == (off_t) -1)
 	{
-		mailerr("450 4.2.0", "Temporary file: %s",
+		mailerr("450 4.2.0", "Temporary file seek error: %s",
 			sm_errstring(errno));
 		goto err1;
 	}
@@ -1321,7 +1348,7 @@ deliver(fd, name)
 				if (errno == EDQUOT && BounceQuota)
 					errcode = "552 5.2.2";
 #endif
-				mailerr(errcode, "%s: %s",
+				mailerr(errcode, "Write %s: %s",
 					path, sm_errstring(errno));
 				goto err3;
 			}
@@ -1329,7 +1356,7 @@ deliver(fd, name)
 	}
 	if (nr < 0)
 	{
-		mailerr("450 4.2.0", "Temporary file: %s",
+		mailerr("450 4.2.0", "Temporary file read error: %s",
 			sm_errstring(errno));
 		goto err3;
 	}
@@ -1337,7 +1364,7 @@ deliver(fd, name)
 	/* Flush to disk, don't wait for update. */
 	if (fsync(mbfd) < 0)
 	{
-		mailerr("450 4.2.0", "%s: %s", path, sm_errstring(errno));
+		mailerr("450 4.2.0", "Sync %s: %s", path, sm_errstring(errno));
 err3:
 #ifdef DEBUG
 		fprintf(stderr, "reset euid = %d\n", (int) geteuid());
@@ -1346,7 +1373,11 @@ deliver(fd, name)
 			(void) ftruncate(mbfd, curoff);
 err1:		if (mbfd >= 0)
 			(void) close(mbfd);
-err0:		(void) setreuid(0, 0);
+err0:
+#if MAIL_LOCAL_TEST
+		if (HomeMailFile == NULL || user.mbdb_uid != getuid())
+#endif
+		(void) setreuid(0, 0);
 		unlockmbox();
 		return;
 	}
@@ -1374,7 +1405,7 @@ err0:		(void) setreuid(0, 0);
 		if (errno == EDQUOT && BounceQuota)
 			errcode = "552 5.2.2";
 #endif
-		mailerr(errcode, "%s: %s", path, sm_errstring(errno));
+		mailerr(errcode, "Close %s: %s", path, sm_errstring(errno));
 		mbfd = open(path, O_WRONLY, 0);
 		if (mbfd < 0 ||
 		    cursize == 0
@@ -1385,9 +1416,9 @@ err0:		(void) setreuid(0, 0);
 		    !S_ISREG(sb.st_mode) ||
 		    sb.st_dev != fsb.st_dev ||
 		    sb.st_ino != fsb.st_ino ||
-# if HAS_ST_GEN && 0		/* AFS returns random values for st_gen */
+#if HAS_ST_GEN && 0		/* AFS returns random values for st_gen */
 		    sb.st_gen != fsb.st_gen ||
-# endif
+#endif
 		    sb.st_uid != fsb.st_uid
 		   )
 		{
@@ -1405,7 +1436,11 @@ err0:		(void) setreuid(0, 0);
 	else
 		notifybiff(biffmsg);
 
-	if (setreuid(0, 0) < 0)
+	if (
+#if MAIL_LOCAL_TEST
+	    (HomeMailFile == NULL || user.mbdb_uid != getuid()) &&
+#endif
+	    setreuid(0, 0) < 0)
 	{
 		mailerr("450 4.2.0", "setreuid(0, 0): %s",
 			sm_errstring(errno));
@@ -1581,11 +1616,12 @@ void
 usage()
 {
 	ExitVal = EX_USAGE;
-# if _FFR_SPOOL_PATH
+	/* XXX add U to options for USE_EAI */
+#if _FFR_SPOOL_PATH
 	mailerr(NULL, "usage: mail.local [-7] [-b] [-d] [-l] [-f from|-r from] [-h filename] [-p path] user ...");
-# else
+#else
 	mailerr(NULL, "usage: mail.local [-7] [-b] [-d] [-l] [-f from|-r from] [-h filename] user ...");
-# endif
+#endif
 	sm_exit(ExitVal);
 }
 
@@ -1650,7 +1686,7 @@ hashname(name)
 	MD5_CTX ctx;
 	unsigned char md5[18];
 #  if MAXPATHLEN <= 24
-    ERROR _MAXPATHLEN <= 24
+#    ERROR "MAXPATHLEN <= 24"
 #  endif
 	char b64[24];
 	MD5_LONG bits;
diff --git a/mailstats/mailstats.0 b/mailstats/mailstats.0
index f733c56ba5fa..f31eddc10bd7 100644
--- a/mailstats/mailstats.0
+++ b/mailstats/mailstats.0
@@ -1,62 +1,62 @@
-MAILSTATS(8)                                                      MAILSTATS(8)
+MAILSTATS(8)                System Manager's Manual               MAILSTATS(8)
 
 
 
-NAME
+NNAAMMEE
        mailstats - display mail statistics
 
-SYNOPSIS
-       mailstats [-c] [-o] [-p] [-P] [-C cffile] [-f stfile]
+SSYYNNOOPPSSIISS
+       mmaaiillssttaattss [--cc] [--oo] [--pp] [--PP] [--CC _c_f_f_i_l_e] [--ff _s_t_f_i_l_e]
 
-DESCRIPTION
-       The mailstats utility displays the current mail statistics.
+DDEESSCCRRIIPPTTIIOONN
+       The mmaaiillssttaattss utility displays the current mail statistics.
 
        First, the time at which statistics started being kept is displayed, in
        the format specified by ctime(3).  Then, the statistics for each mailer
        are  displayed  on  a  single line, each with the following white space
        separated fields:
 
-              M           The mailer number.
-              msgsfr      Number of messages from the mailer.
-              bytes_from  Kbytes from the mailer.
-              msgsto      Number of messages to the mailer.
-              bytes_to    Kbytes to the mailer.
-              msgsrej     Number of messages rejected.
-              msgsdis     Number of messages discarded.
-              msgsqur     Number of messages quarantined.
-              Mailer      The name of the mailer.
+              MM           The mailer number.
+              mmssggssffrr      Number of messages from the mailer.
+              bbyytteess__ffrroomm  Kbytes from the mailer.
+              mmssggssttoo      Number of messages to the mailer.
+              bbyytteess__ttoo    Kbytes to the mailer.
+              mmssggssrreejj     Number of messages rejected.
+              mmssggssddiiss     Number of messages discarded.
+              mmssggssqquurr     Number of messages quarantined.
+              MMaaiilleerr      The name of the mailer.
 
        After this display, a line totaling the values for all of  the  mailers
-       is  displayed  (preceded  with  a  ``T''),  separated from the previous
-       information by  a  line  containing  only  equals  (``='')  characters.
-       Another line preceded with a ``C'' lists the number of TCP connections.
+       is  displayed  (preceded with a ``T''), separated from the previous in-
+       formation by a line containing only equals (``='') characters.  Another
+       line preceded with a ``C'' lists the number of TCP connections.
 
        The options are as follows:
 
-       -C     Read the specified file instead of the default sendmail configu-
+       --CC     Read the specified file instead of the default sseennddmmaaiill configu-
               ration file.
 
-       -c     Try  to use submit.cf instead of the default sendmail configura-
+       --cc     Try to use submit.cf instead of the default sseennddmmaaiill  configura-
               tion file.
 
-       -f     Read the specified statistics file  instead  of  the  statistics
-              file specified in the sendmail configuration file.
+       --ff     Read  the  specified  statistics  file instead of the statistics
+              file specified in the sseennddmmaaiill configuration file.
 
-       -P     Output  information  in  program-readable  mode without clearing
+       --PP     Output information in  program-readable  mode  without  clearing
               statistics.
 
-       -p     Output information in program-readable mode  and  clear  statis-
+       --pp     Output  information  in  program-readable mode and clear statis-
               tics.
 
-       -o     Don't display the name of the mailer in the output.
+       --oo     Don't display the name of the mailer in the output.
 
-       The mailstats utility exits 0 on success, and >0 if an error occurs.
+       The mmaaiillssttaattss utility exits 0 on success, and >0 if an error occurs.
 
-FILES
-       /etc/mail/sendmail.cf    The default sendmail configuration file.
-       /etc/mail/statistics     The default sendmail statistics file.
+FFIILLEESS
+       /etc/mail/sendmail.cf    The default sseennddmmaaiill configuration file.
+       /etc/mail/statistics     The default sseennddmmaaiill statistics file.
 
-SEE ALSO
+SSEEEE AALLSSOO
        mailq(1), sendmail(8)
 
 
diff --git a/mailstats/mailstats.8 b/mailstats/mailstats.8
index 1cbc1aedae91..2bedb3f7f46f 100644
--- a/mailstats/mailstats.8
+++ b/mailstats/mailstats.8
@@ -15,7 +15,7 @@ mailstats
 .SH SYNOPSIS
 .B mailstats
 .RB [ \-c "] [" \-o "] [" \-p "] [" \-P ]
-.RB [ \-C 
+.RB [ \-C
 .IR cffile ]
 .RB [ \-f
 .IR stfile ]
@@ -25,10 +25,10 @@ The
 utility displays the current mail statistics.
 .PP
 First, the time at which statistics started being kept is displayed,
-in the format specified by 
-ctime(3).  
-Then, 
-the statistics for each mailer are displayed on a single line, 
+in the format specified by
+ctime(3).
+Then,
+the statistics for each mailer are displayed on a single line,
 each with the following white space separated fields:
 .sp
 .RS
@@ -36,7 +36,7 @@ each with the following white space separated fields:
 .TP 1.2i
 .B M
 The mailer number.
-.TP 
+.TP
 .B msgsfr
 Number of messages from the mailer.
 .TP
@@ -63,15 +63,15 @@ The name of the mailer.
 .PD
 .RE
 .PP
-After this display, a line totaling the values for all of the mailers 
+After this display, a line totaling the values for all of the mailers
 is displayed (preceded with a ``T''),
-separated from the previous information by a line containing only equals 
-(``='') 
+separated from the previous information by a line containing only equals
+(``='')
 characters.
 Another line preceded with a ``C'' lists the number of TCP connections.
 .PP
 The options are as follows:
-.TP 
+.TP
 .B \-C
 Read the specified file instead of the default
 .B sendmail
@@ -85,9 +85,9 @@ configuration file.
 .B \-f
 Read the specified statistics file instead of the statistics file
 specified in the
-.B sendmail 
+.B sendmail
 configuration file.
-.TP 
+.TP
 .B \-P
 Output information in program-readable mode without clearing statistics.
 .TP
@@ -114,5 +114,5 @@ The default
 statistics file.
 .PD
 .SH SEE ALSO
-mailq(1), 
+mailq(1),
 sendmail(8)
diff --git a/makemap/makemap.0 b/makemap/makemap.0
index 61f4d6f868dc..202c235c168b 100644
--- a/makemap/makemap.0
+++ b/makemap/makemap.0
@@ -1,101 +1,100 @@
-MAKEMAP(8)                                                          MAKEMAP(8)
+MAKEMAP(8)                  System Manager's Manual                 MAKEMAP(8)
 
 
 
-NAME
+NNAAMMEE
        makemap - create database maps for sendmail
 
-SYNOPSIS
-       makemap  [-C  file] [-N] [-c cachesize] [-d] [-D commentchar] [-e] [-f]
-       [-l] [-o] [-r] [-s] [-t delim] [-u] [-v] maptype mapnam
+SSYYNNOOPPSSIISS
+       mmaakkeemmaapp  [--CC  _f_i_l_e] [--NN] [--cc _c_a_c_h_e_s_i_z_e] [--dd] [--DD _c_o_m_m_e_n_t_c_h_a_r] [--ee] [--ff]
+       [--ll] [--oo] [--rr] [--ss] [--tt _d_e_l_i_m] [--uu] [--vv] _m_a_p_t_y_p_e _m_a_p_n_a_m
 
-DESCRIPTION
-       Makemap creates the database maps used by  the  keyed  map  lookups  in
+DDEESSCCRRIIPPTTIIOONN
+       MMaakkeemmaapp creates the database maps used by  the  keyed  map  lookups  in
        sendmail(8).   It  reads input from the standard input and outputs them
-       to the indicated mapname.
+       to the indicated _m_a_p_n_a_m_e_.
 
-       Depending on how it is compiled,  makemap  handles  different  database
-       formats, selected using the maptype parameter.  They may be
+       Depending on how it is compiled,  mmaakkeemmaapp  handles  different  database
+       formats, selected using the _m_a_p_t_y_p_e parameter.  They may be
 
        dbm    DBM format maps.  This requires the ndbm(3) library.
 
-       btree  B-Tree  format maps.  This requires the new Berkeley DB library.
+       btree  B-Tree format maps.  This requires the new Berkeley DB library.
 
        hash   Hash format maps.  This also requires the Berkeley DB library.
 
-       cdb    CDB (Constant DataBase) format maps.  This requires the  tinycdb
+       cdb    CDB  (Constant DataBase) format maps.  This requires the tinycdb
               library.
 
        implicit
-              The  first  available  format in the following order: hash, dbm,
+              The first available format in the following  order:  hash,  dbm,
               and cdb.
 
-       In all cases, makemap reads lines from the standard input consisting of
+       In all cases, mmaakkeemmaapp reads lines from the standard input consisting of
        two words separated by white space.  The first is the database key, the
-       second is the value.  The value may contain ``%n'' strings to  indicate
-       parameter  substitution.   Literal percents should be doubled (``%%'').
+       second  is the value.  The value may contain ``%_n'' strings to indicate
+       parameter substitution.  Literal percents should be  doubled  (``%%'').
        Blank lines and lines beginning with ``#'' are ignored.
 
-       Notice: do not use  makemap  to  create  the  aliases  data  base,  but
-       newaliases  which  puts  a  special  token  into  the data base that is
-       required by sendmail.
+       Notice:  do  nnoott  use  mmaakkeemmaapp  to  create  the  aliases data base, but
+       nneewwaalliiaasseess which puts a special token into the data base  that  is  re-
+       quired by sseennddmmaaiill..
 
-       If the TrustedUser option is set in the sendmail configuration file and
-       makemap  is  invoked  as root, the generated files will be owned by the
-       specified TrustedUser.
+       If the _T_r_u_s_t_e_d_U_s_e_r option is set in the sendmail configuration file and
+       mmaakkeemmaapp is invoked as root, the generated files will be  owned  by  the
+       specified _T_r_u_s_t_e_d_U_s_e_r_.
 
-   Flags
-       -C     Use the specified sendmail configuration file for looking up the
+   FFllaaggss
+       --CC     Use the specified sseennddmmaaiill configuration file for looking up the
               TrustedUser option.
 
-       -N     Include  the null byte that terminates strings in the map.  This
+       --NN     Include the null byte that terminates strings in the map.   This
               must match the -N flag in the sendmail.cf ``K'' line.
 
-       -c     Use the specified hash and B-Tree cache size.
+       --cc     Use the specified hash and B-Tree cache size.
 
-       -D     Use to specify the character to use to indicate a comment (which
+       --DD     Use to specify the character to use to indicate a comment (which
               is ignored) instead of the default of '#'.
 
-       -d     Allow duplicate keys in the map.  This is only allowed on B-Tree
-              format maps.  If two identical keys are read, they will both  be
+       --dd     Allow duplicate keys in the map.  This is only allowed on B-Tree
+              format  maps.  If two identical keys are read, they will both be
               inserted into the map.
 
-       -e     Allow empty value (right hand side).
+       --ee     Allow empty value (right hand side).
 
-       -f     Normally  all  upper case letters in the key are folded to lower
-              case.  This flag disables that behaviour.  This is  intended  to
-              mesh  with  the -f flag in the K line in sendmail.cf.  The value
+       --ff     Normally all upper case letters in the key are folded  to  lower
+              case.   This  flag disables that behaviour.  This is intended to
+              mesh with the -f flag in the KK line in sendmail.cf.   The  value
               is never case folded.
 
-       -l     List supported map types.
+       --ll     List supported map types.
 
-       -o     Append to an old file.  This allows you to augment  an  existing
-              file.   Note: this might not be supported by all database types,
+       --oo     Append  to  an old file.  This allows you to augment an existing
+              file.  Note: this might not be supported by all database  types,
               e.g., cdb.
 
-       -r     Allow replacement of existing keys.  Normally makemap  complains
+       --rr     Allow  replacement of existing keys.  Normally mmaakkeemmaapp complains
               if you repeat a key, and does not do the insert.
 
-       -s     Ignore  safety  checks  on  maps  being  created.  This includes
-              checking for hard or symbolic links in world  writable  directo-
+       --ss     Ignore safety checks  on  maps  being  created.   This  includes
+              checking  for  hard or symbolic links in world writable directo-
               ries.
 
-       -t     Use  the  specified  delimiter  instead of white space (also for
+       --tt     Use the specified delimiter instead of  white  space  (also  for
               dumping a map).
 
-       -u     dump (unmap) the content of the database to standard output.
+       --uu     dump (unmap) the content of the database to standard output.
 
-       -v     Verbosely print what it is doing.
+       --vv     Verbosely print what it is doing.
 
-
-Example
+EExxaammppllee
        makemap hash /etc/mail/access < /etc/mail/access
 
-SEE ALSO
+SSEEEE AALLSSOO
        sendmail(8), newaliases(1)
 
-HISTORY
-       The makemap command appeared in 4.4BSD.
+HHIISSTTOORRYY
+       The mmaakkeemmaapp command appeared in 4.4BSD.
 
 
 
diff --git a/makemap/makemap.c b/makemap/makemap.c
index 4aa8d6ddab38..f2ed0e39f990 100644
--- a/makemap/makemap.c
+++ b/makemap/makemap.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998-2002, 2004, 2008 Proofpoint, Inc. and its suppliers.
+ * Copyright (c) 1998-2002, 2004, 2008, 2020 Proofpoint, Inc. and its suppliers.
  *	All rights reserved.
  * Copyright (c) 1992 Eric P. Allman.  All rights reserved.
  * Copyright (c) 1992, 1993
@@ -38,6 +38,9 @@ SM_IDSTR(id, "@(#)$Id: makemap.c,v 8.183 2013-11-22 20:51:52 ca Exp $")
 #include 
 #include 
 #include 
+#if USE_EAI
+# include 
+#endif
 
 uid_t	RealUid;
 gid_t	RealGid;
@@ -67,6 +70,11 @@ usage(progname)
 	sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
 		      "       %*s [-d] [-e] [-f] [-l] [-o] [-r] [-s] [-t delimiter]\n",
 		      (int) strlen(progname), "");
+#if _FFR_TESTS
+	sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+		      "       %*s [-S n]\n",
+		      (int) strlen(progname), "");
+#endif
 	sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
 		      "       %*s [-u] [-v] type mapname\n",
 		      (int) strlen(progname), "");
@@ -286,6 +294,12 @@ main(argc, argv)
 	static char rnamebuf[MAXNAME];	/* holds RealUserName */
 	extern char *optarg;
 	extern int optind;
+#if USE_EAI
+	bool ascii = true;
+#endif
+#if _FFR_TESTS
+	int slp = 0;
+#endif
 
 	memset(¶ms, '\0', sizeof params);
 	params.smdbp_cache_size = 1024 * 1024;
@@ -313,7 +327,12 @@ main(argc, argv)
 		       SMDB_MAX_USER_NAME_LEN);
 
 #define OPTIONS		"C:D:Nc:defi:Llorst:uvx"
-	while ((opt = getopt(argc, argv, OPTIONS)) != -1)
+#if _FFR_TESTS
+# define X_OPTIONS		"S:"
+#else
+# define X_OPTIONS
+#endif
+	while ((opt = getopt(argc, argv, OPTIONS X_OPTIONS)) != -1)
 	{
 		switch (opt)
 		{
@@ -369,6 +388,12 @@ main(argc, argv)
 			allowreplace = true;
 			break;
 
+#if _FFR_TESTS
+		  case 'S':
+			slp = atoi(optarg);
+			break;
+#endif
+
 		  case 's':
 			setbitn(DBS_MAPINUNSAFEDIRPATH, DontBlameSendmail);
 			setbitn(DBS_WRITEMAPTOHARDLINK, DontBlameSendmail);
@@ -393,7 +418,7 @@ main(argc, argv)
 		  case 'v':
 			verbose = true;
 			break;
- 
+
 		  case 'x':
 			smdb_print_available_types(true);
 			exit(EX_OK);
@@ -602,12 +627,41 @@ main(argc, argv)
 			memset(&db_val, '\0', sizeof db_val);
 			db_key.data = ibuf;
 
-			for (p = ibuf; *p != '\0' && !(ISSEP(*p)); p++)
+#if USE_EAI
+			db_key.size = 0;
+			if (foldcase)
+			{
+				for (p = ibuf; *p != '\0' && !ISSEP(*p); p++)
+				{
+					if (!ISASCII(*p))
+						ascii = false;
+				}
+				if (!ascii)
+				{
+					char sep;
+					char *lkey;
+
+					sep = *p;
+					*p = '\0';
+
+					lkey = sm_lowercase(ibuf);
+					db_key.data = lkey;
+					db_key.size = strlen(lkey);
+					*p = sep;
+				}
+			}
+			if (ascii)
+#endif /* USE_EAI */
+			/* NOTE: see if () above! */
+			for (p = ibuf; *p != '\0' && !ISSEP(*p); p++)
 			{
 				if (foldcase && ISASCII(*p) && isupper(*p))
 					*p = tolower(*p);
 			}
-			db_key.size = p - ibuf;
+#if USE_EAI
+			if (0 == db_key.size)
+#endif
+				db_key.size = p - ibuf;
 			if (inclnull)
 				db_key.size++;
 
@@ -680,6 +734,11 @@ main(argc, argv)
 		}
 	}
 
+#if _FFR_TESTS
+	if (slp > 0)
+		sleep(slp);
+#endif
+
 	/*
 	**  Now close the database.
 	*/
diff --git a/praliases/praliases.0 b/praliases/praliases.0
index c6b03b0c512f..1c6b911d8b78 100644
--- a/praliases/praliases.0
+++ b/praliases/praliases.0
@@ -1,37 +1,37 @@
-PRALIASES(8)                                                      PRALIASES(8)
+PRALIASES(8)                System Manager's Manual               PRALIASES(8)
 
 
 
-NAME
+NNAAMMEE
        praliases - display system mail aliases
 
-SYNOPSIS
-       praliases [-C file] [-f file] [key ...]
+SSYYNNOOPPSSIISS
+       pprraalliiaasseess [--CC _f_i_l_e] [--ff _f_i_l_e] [_k_e_y _._._.]
 
-DESCRIPTION
-       The  praliases  utility  displays  the  current system aliases, one per
+DDEESSCCRRIIPPTTIIOONN
+       The  pprraalliiaasseess  utility  displays  the  current system aliases, one per
        line, in no particular order.  The special internal @:@ alias  will  be
        displayed if present.
 
        The options are as follows:
 
-       -C file
+       --CC _f_i_l_e
               Read  the  specified  sendmail configuration file instead of the
-              default sendmail configuration file.
+              default sseennddmmaaiill configuration file.
 
-       -f file
-              Read the specified file instead of the configured sendmail  sys-
+       --ff _f_i_l_e
+              Read the specified file instead of the configured sseennddmmaaiill  sys-
               tem aliases file(s).
 
        If  one  or  more  keys are specified on the command line, only entries
        which match those keys are displayed.
 
-       The praliases utility exits 0 on success, and >0 if an error occurs.
+       The pprraalliiaasseess utility exits 0 on success, and >0 if an error occurs.
 
-FILES
-       /etc/mail/sendmail.cf    The default sendmail configuration file.
+FFIILLEESS
+       /etc/mail/sendmail.cf    The default sseennddmmaaiill configuration file.
 
-SEE ALSO
+SSEEEE AALLSSOO
        mailq(1), sendmail(8)
 
 
diff --git a/praliases/praliases.8 b/praliases/praliases.8
index 8a8f66d9055f..74d11100756e 100644
--- a/praliases/praliases.8
+++ b/praliases/praliases.8
@@ -24,7 +24,7 @@ praliases
 .SH DESCRIPTION
 The
 .B praliases
-utility displays the current system aliases, 
+utility displays the current system aliases,
 one per line, in no particular order.
 The special internal @:@ alias will be displayed if present.
 .PP
@@ -34,7 +34,7 @@ The options are as follows:
 Read the specified sendmail configuration file instead of the default
 .B sendmail
 configuration file.
-.TP 
+.TP
 .BI "\-f " file
 Read the specified file instead of the configured
 .B sendmail
@@ -53,5 +53,5 @@ The default
 .B sendmail
 configuration file.
 .SH SEE ALSO
-mailq(1), 
+mailq(1),
 sendmail(8)
diff --git a/praliases/praliases.c b/praliases/praliases.c
index 682d4e14d2ea..2239bd1b9b39 100644
--- a/praliases/praliases.c
+++ b/praliases/praliases.c
@@ -87,7 +87,7 @@ main(argc, argv)
 	RunAsUserName = RealUserName = rnamebuf;
 
 	cfile = getcfname(0, 0, SM_GET_SENDMAIL_CF, NULL);
-	while ((ch = getopt(argc, argv, "C:f:")) != -1)
+	while ((ch = getopt(argc, argv, "C:f:l")) != -1)
 	{
 		switch ((char)ch) {
 		case 'C':
@@ -96,6 +96,11 @@ main(argc, argv)
 		case 'f':
 			filename = optarg;
 			break;
+
+		case 'l':
+			smdb_print_available_types(false);
+			exit(EX_OK);
+			break;
 		case '?':
 		default:
 			(void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
diff --git a/rmail/rmail.0 b/rmail/rmail.0
index 011c2846b545..eabc6a6de871 100644
--- a/rmail/rmail.0
+++ b/rmail/rmail.0
@@ -1,35 +1,35 @@
-RMAIL(8)                                                              RMAIL(8)
+RMAIL(8)                    System Manager's Manual                   RMAIL(8)
 
 
 
-NAME
+NNAAMMEE
        rmail - handle remote mail received via uucp
 
-SYNOPSIS
-       rmail [-D domain] [-T] user ...
+SSYYNNOOPPSSIISS
+       rrmmaaiill [--DD _d_o_m_a_i_n] [--TT] _u_s_e_r _._._.
 
-DESCRIPTION
-       Rmail   interprets  incoming  mail  received  via  uucp(1),  collapsing
+DDEESSCCRRIIPPTTIIOONN
+       RRmmaaiill   interprets  incoming  mail  received  via  uucp(1),  collapsing
        ``From'' lines in the form generated by  mail.local(8)  into  a  single
        line of the form ``return-path!sender'', and passing the processed mail
        on to sendmail(8).
 
-       Rmail is explicitly designed for use with uucp and sendmail.
+       RRmmaaiill is explicitly designed for use with uucp and sendmail.
 
-   Flags
-       -D     Use the specified  domain  instead  of  the  default  domain  of
+   FFllaaggss
+       --DD     Use the specified  _d_o_m_a_i_n  instead  of  the  default  domain  of
               ``UUCP''.
 
-       -T     Turn on debugging.
+       --TT     Turn on debugging.
 
-SEE ALSO
+SSEEEE AALLSSOO
        uucp(1), mail.local(8), sendmail(8)
 
-HISTORY
-       The rmail program appeared in 4.2BSD.
+HHIISSTTOORRYY
+       The rrmmaaiill program appeared in 4.2BSD.
 
-BUGS
-       Rmail should not reside in /bin.
+BBUUGGSS
+       RRmmaaiill should not reside in /bin.
 
 
 
diff --git a/rmail/rmail.8 b/rmail/rmail.8
index 3d2a8c5ec6bd..e93f3e1c6f53 100644
--- a/rmail/rmail.8
+++ b/rmail/rmail.8
@@ -19,23 +19,23 @@ rmail
 .RB [ \-D
 .IR domain ]
 .RB [ \-T ]
-.I 
+.I
 user ...
 .SH DESCRIPTION
 .B Rmail
-interprets incoming mail received via 
-uucp(1), 
-collapsing ``From'' lines in the form generated 
-by 
-mail.local(8) 
-into a single line of the form ``return-path!sender'', 
-and passing the processed mail on to 
+interprets incoming mail received via
+uucp(1),
+collapsing ``From'' lines in the form generated
+by
+mail.local(8)
+into a single line of the form ``return-path!sender'',
+and passing the processed mail on to
 sendmail(8).
 .PP
 .B Rmail
-is explicitly designed for use with 
-uucp 
-and 
+is explicitly designed for use with
+uucp
+and
 sendmail.
 .SS Flags
 .TP
@@ -47,15 +47,15 @@ instead of the default domain of ``UUCP''.
 .B \-T
 Turn on debugging.
 .SH SEE ALSO
-uucp(1), 
-mail.local(8), 
+uucp(1),
+mail.local(8),
 sendmail(8)
 .SH HISTORY
 The
 .B rmail
-program appeared in 
+program appeared in
 4.2BSD.
 .SH BUGS
 .B Rmail
-should not reside in 
+should not reside in
 /bin.
diff --git a/smrsh/smrsh.0 b/smrsh/smrsh.0
index ca30a62ae516..5f9c87fbb51e 100644
--- a/smrsh/smrsh.0
+++ b/smrsh/smrsh.0
@@ -1,63 +1,63 @@
-SMRSH(8)                                                              SMRSH(8)
+SMRSH(8)                    System Manager's Manual                   SMRSH(8)
 
 
 
-NAME
+NNAAMMEE
        smrsh - restricted shell for sendmail
 
-SYNOPSIS
-       smrsh -c command
+SSYYNNOOPPSSIISS
+       ssmmrrsshh --cc command
 
-DESCRIPTION
-       The  smrsh  program  is intended as a replacement for sh for use in the
-       ``prog'' mailer in sendmail(8) configuration files.  It sharply  limits
-       the  commands that can be run using the ``|program'' syntax of sendmail
+DDEESSCCRRIIPPTTIIOONN
+       The  _s_m_r_s_h  program  is intended as a replacement for _s_h for use in the
+       ``prog'' mailer in _s_e_n_d_m_a_i_l(8) configuration files.  It sharply  limits
+       the  commands that can be run using the ``|program'' syntax of _s_e_n_d_m_a_i_l
        in order to improve the over all security  of  your  system.   Briefly,
        even  if  a ``bad guy'' can get sendmail to run a program without going
-       through an alias or forward file, smrsh limits the set of programs that
+       through an alias or forward file, _s_m_r_s_h limits the set of programs that
        he or she can execute.
 
-       Briefly,  smrsh limits programs to be in a single directory, by default
+       Briefly,  _s_m_r_s_h limits programs to be in a single directory, by default
        /usr/adm/sm.bin, allowing the system administrator to choose the set of
        acceptable  commands,  and  to  the  shell  builtin  commands ``exec'',
        ``exit'', and ``echo''.  It also rejects any commands with the  charac-
        ters ``', `<', `>', `;', `$', `(', `)', `\r' (carriage return), or `\n'
-       (newline) on the command line  to  prevent  ``end  run''  attacks.   It
-       allows   ``||''   and   ``&&''   to   enable  commands  like:  ``"|exec
-       /usr/local/bin/filter || exit 75"''
+       (newline) on the command line to prevent ``end run'' attacks.   It  al-
+       lows  ``||''  and  ``&&''  to  enable  commands like: ``"|exec /usr/lo-
+       cal/bin/filter || exit 75"''
 
        Initial  pathnames  on  programs  are  stripped,   so   forwarding   to
-       ``/usr/ucb/vacation'',                           ``/usr/bin/vacation'',
-       ``/home/server/mydir/bin/vacation'', and ``vacation'' all actually for-
-       ward to ``/usr/adm/sm.bin/vacation''.
+       ``/usr/ucb/vacation'',     ``/usr/bin/vacation'',    ``/home/server/my-
+       dir/bin/vacation'',  and   ``vacation''   all   actually   forward   to
+       ``/usr/adm/sm.bin/vacation''.
 
        System  administrators  should  be  conservative  about  populating the
-       sm.bin directory.  For example, a reasonable additions is  vacation(1),
+       sm.bin directory.  For example, a reasonable additions is  _v_a_c_a_t_i_o_n(1),
        and  the like.  No matter how brow-beaten you may be, never include any
-       shell or shell-like program (such as perl(1)) in the sm.bin  directory.
+       shell or shell-like program (such as _p_e_r_l(1)) in the sm.bin  directory.
        Note  that  this  does not restrict the use of shell or perl scripts in
-       the sm.bin directory (using the ``#!''  syntax);  it  simply  disallows
-       execution  of  arbitrary programs.  Also, including mail filtering pro-
-       grams such as procmail(1) is a very bad idea.  procmail(1) allows users
-       to run arbitrary programs in their procmailrc(5).
+       the sm.bin directory (using the ``#!'' syntax); it simply disallows ex-
+       ecution of arbitrary programs.  Also, including mail filtering programs
+       such as _p_r_o_c_m_a_i_l(1) is a very bad idea.  _p_r_o_c_m_a_i_l(1)  allows  users  to
+       run arbitrary programs in their _p_r_o_c_m_a_i_l_r_c(5).
 
-COMPILATION
+CCOOMMPPIILLAATTIIOONN
        Compilation  should  be  trivial  on most systems.  You may need to use
-       -DSMRSH_PATH=\"path\" to adjust the default search  path  (defaults  to
-       ``/bin:/usr/bin:/usr/ucb'') and/or -DSMRSH_CMDDIR=\"dir\" to change the
+       -DSMRSH_PATH=\"_p_a_t_h\" to adjust the default search  path  (defaults  to
+       ``/bin:/usr/bin:/usr/ucb'') and/or -DSMRSH_CMDDIR=\"_d_i_r\" to change the
        default program directory (defaults to ``/usr/adm/sm.bin'').
 
-FILES
+FFIILLEESS
        /usr/adm/sm.bin - default directory for restricted programs on most OSs
 
-       /var/adm/sm.bin  -  directory  for  restricted  programs  on  HP UX and
-       Solaris
+       /var/adm/sm.bin - directory for restricted programs on HP  UX  and  So-
+       laris
 
-       /usr/libexec/sm.bin - directory for restricted programs on FreeBSD  (>=
+       /usr/libexec/sm.bin  - directory for restricted programs on FreeBSD (>=
        3.3) and DragonFly BSD
 
 
-SEE ALSO
+SSEEEE AALLSSOO
        sendmail(8)
 
 
diff --git a/smrsh/smrsh.c b/smrsh/smrsh.c
index 8c4e47ca200b..1e6cd28c4f59 100644
--- a/smrsh/smrsh.c
+++ b/smrsh/smrsh.c
@@ -377,7 +377,7 @@ main(argc, argv)
 #if ALLOWSEMI
 		if (*r == ';')
 		{
-			addcmd(p, false,  r - p + 1);
+			addcmd(p, false, r - p + 1);
 			q = r + 1;
 			continue;
 		}
@@ -385,7 +385,7 @@ main(argc, argv)
 		if ((*r == '&' && *(r + 1) == '&') ||
 		    (*r == '|' && *(r + 1) == '|'))
 		{
-			addcmd(p, false,  r - p + 2);
+			addcmd(p, false, r - p + 2);
 			q = r + 2;
 			continue;
 		}
diff --git a/src/README b/src/README
index 06d727de4baf..81f5bfbce147 100644
--- a/src/README
+++ b/src/README
@@ -8,9 +8,6 @@
 # forth in the LICENSE file which can be found at the top level of
 # the sendmail distribution.
 #
-#
-#	$Id: README,v 8.393 2013-11-22 20:51:54 ca Exp $
-#
 
 This directory contains the source files for sendmail(TM).
 
@@ -133,8 +130,7 @@ MAP_REGEX	Regular Expression support.  You will need to use an
 		routines or install a regexp library such as libregex from
 		the Free Software Foundation.
 DNSMAP		DNS map support.  Requires NAMED_BIND.
-PH_MAP		PH map support.  You will need the libphclient library from
-		the nph package (http://www-dev.cites.uiuc.edu/ph/nph/).
+PH_MAP		PH map support.
 MAP_NSD		nsd map support (IRIX 6.5 and later).
 SOCKETMAP	Support for a trivial query protocol over UNIX domain or TCP
 		sockets.
@@ -337,6 +333,8 @@ NEEDPUTENV	Define this if your system needs am emulation of the
 NOFTRUNCATE	Define this if you don't have the ftruncate(2) syscall.
 		If you don't have this system call, there is an unavoidable
 		race condition that occurs when creating alias databases.
+NO_EOH_FIELDS	Define this to disable the special handling of the headers
+		Message: and Text: to denote the end of the message header.
 GIDSET_T	The type of entries in a gidset passed as the second
 		argument to getgroups(2).  Historically this has been an
 		int, so this is the default, but some systems (such as
@@ -767,25 +765,23 @@ From: Garrett Wollman 
     certificate authentication -- even some of those which already support
     SSL/TLS for confidentiality.
 
-Further information can be found via:
-http://www.sendmail.org/tips/
-
 
 +------------------------------------+
 | SASL COMPILATION AND CONFIGURATION |
 +------------------------------------+
 
 Please read the documentation accompanying the Cyrus SASL library
-(INSTALL and README).  If you use Berkeley DB for Cyrus SASL then
-you must compile sendmail with the same version of Berkeley DB.
-See devtools/README for how to set the correct compile time parameters;
-you should at least set the following variables:
+(INSTALL and README, especially about Sendmail.conf).  If you use
+Berkeley DB for Cyrus SASL then you must compile sendmail with the
+same version of Berkeley DB.  See devtools/README for how to set
+the correct compile time parameters; you should at least set the
+following variables:
 
-APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL')
-APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
+APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL=2')
+APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
 
 If you have installed the Cyrus SASL library and include files in
-a location that your C compiler doesn't use by default you should
+a location which your C compiler doesn't use by default you should
 set confINCDIRS and confLIBDIRS as explained in the first section:
 BUILDING SENDMAIL.
 
@@ -794,7 +790,8 @@ sendmail where to find the sasl library and the include files (see
 devtools/README for the parameters to set).  Set up the required
 users and passwords as explained in the SASL documentation.  See
 also cf/README for authentication related options (especially
-DefaultAuthInfo if you want authentication between MTAs).
+"Providing SMTP AUTH Data when sendmail acts as Client"
+if you want authentication between MTAs).
 
 To perform an initial test, connect to your sendmail daemon
 (telnet localhost 25) and issue a EHLO localhost and see whether
@@ -804,9 +801,6 @@ is in the response.  If it isn't, run the daemon with
 and try again.  Then take a look at the logfile and see whether
 there are any security related problems listed (unsafe files).
 
-Further information can be found via:
-http://www.sendmail.org/tips/
-
 
 +-------------------------------------+
 | OPERATING SYSTEM AND COMPILE QUIRKS |
@@ -1180,10 +1174,6 @@ IRIX
 
 	These are unavoidable and innocuous -- just ignore them.
 
-	According to Dave Sill , there is a version of the
-	Berkeley DB library patched to run on Irix 6.2 available from
-	http://reality.sgi.com/ariel/freeware/#db .
-
 IRIX 6.x
 	If you are using XFS filesystem, avoid using the -32 ABI switch to
 	the cc compiler if possible.
@@ -1580,7 +1570,6 @@ Darwin/Mac OS X (10.X.X)
 
 	From scratch here is what Darwin users need to do to the standard
 	10.0.0, 10.0.1 install to get sendmail working.
-	From http://www.macosx.com/forums/showthread.php?s=6dac0e9e1f3fd118a4870a8a9b559491&threadid=2242:
 	1. chmod g-w / /private /private/etc
 	2. Properly set HOSTNAME in /etc/hostconfig to your FQDN:
 	   HOSTNAME=-my.domain.com-
@@ -1695,8 +1684,7 @@ Listproc 6.0c
 	as well. :)
 
 PH
-	PH support is provided by Mark Roth .  The map is
-	described at http://www-dev.cites.uiuc.edu/sendmail/ .
+	PH support is provided by Mark Roth .
 
 	NOTE: The "spacedname" pseudo-field which was used by earlier
 	versions of the PH map code is no longer supported!  See the URL
@@ -1866,4 +1854,30 @@ util.c		Some general purpose routines used by sendmail.
 version.c	The version number and information about this
 		version of sendmail.
 
-(Version $Revision: 8.393 $, last update $Date: 2013-11-22 20:51:54 $ )
+
++---------------------------+
+| SOME NOTES ABOUT THE CODE |
++---------------------------+
+
+Some things are not easy to understand by just reading the source
+code, so this section has some notes which might be interesting for
+those who want to enhance sendmail.  These notes are not exhaustive
+but just cover some things which might be interesting.
+
+Address format: sendmail uses a range of 8 bit characters for its
+internal purposes as noted in sendmail.h:
+
+**  Special characters in rewriting rules.
+**	These are used internally only.
+
+To handle all 8 bit characters, sendmail uses two address formats:
+internal and external -- for details see the comments in cataddr()
+as well as the functions quote_internal_chars() and
+dequote_internal_chars() in libsm/util.c.
+
+These formats are marked in many places with [i] and [x] respectively.
+Some functions only work on one kind of those formats, so it is
+important to mark the strings accordingly. In some cases the marker
+[A] is used to denote that the string format does not matter (which
+is the default) -- this is only used in cases where there might be
+some confusion about any format requirements.
diff --git a/src/TRACEFLAGS b/src/TRACEFLAGS
index df5df6bded58..0b9ccd989320 100644
--- a/src/TRACEFLAGS
+++ b/src/TRACEFLAGS
@@ -78,13 +78,16 @@
 64	multiple	Milter
 65	main.c		permission checks
 #if DANE
+66	domain.c	force port=25 for TLSA RR lookups
 67	domain.c	TLSA RR lookups
 #endif
+68	unused
 #if _FFR_QUEUE_SCHED_DBG
 69	queue.c		scheduling
 #endif
 70	queue.c		quarantining
 71,>99	milter.c	quarantine on errors
+72	unused
 73	queue.c		shared memory updates
 74,>99	map.c		LDAP map defer
 #if _FFR_XCNCT
@@ -93,16 +96,21 @@
 #if _FFR_TESTS
 76,>99	queue.c		run_work_group: sleep
 77,>99	daemon.c	change delivery host/port
+78,>99	queue.c		generate 15 char queue ids
+79,>99	alias.c		rebuild aliases: sleep
 #endif
 80			content length
 81			sun remote mode
+82,>99	parseaddr.c	disable clearing bit 8 on addresses
 83	collect.c	timeout
 84	deliver.c	timeout
 85	map.c		dprintf map
 #if _FFR_PROXY
 87	srvrsmtp.c	proxy mode
 #endif
+88,>99	tls.c		disable the effect of _FFR_VRFY_TRUSTED_FIRST
 89	conf.c		>=8 use sm_dprintf() instead of syslog()
+90	unused
 91	mci.c		syslogging of MCI cache information
 92	EF_LOGSENDER
 93,>99	*		Prevent daemon connection fork for profiling/debugging
diff --git a/src/alias.c b/src/alias.c
index 70d8452eb08c..e3ee68f21852 100644
--- a/src/alias.c
+++ b/src/alias.c
@@ -15,6 +15,8 @@
 
 SM_RCSID("@(#)$Id: alias.c,v 8.221 2013-11-22 20:51:54 ca Exp $")
 
+#include 
+
 #define SEPARATOR ':'
 # define ALIAS_SPEC_SEPARATORS	" ,/:"
 
@@ -58,7 +60,7 @@ alias(a, sendq, aliaslevel, e)
 	register char *p;
 	char *owner;
 	auto int status = EX_OK;
-	char obuf[MAXNAME + 7];
+	char obuf[MAXNAME_I + 7];
 
 	if (tTd(27, 1))
 		sm_dprintf("alias(%s)\n", a->q_user);
@@ -186,11 +188,12 @@ alias(a, sendq, aliaslevel, e)
 	e->e_flags |= EF_SENDRECEIPT;
 	a->q_flags |= QDELIVERED|QEXPANDED;
 }
+
 /*
 **  ALIASLOOKUP -- look up a name in the alias file.
 **
 **	Parameters:
-**		name -- the name to look up.
+**		name -- the name to look up [i]
 **		pstat -- a pointer to a place to put the status.
 **		av -- argument for %1 expansion.
 **
@@ -198,9 +201,6 @@ alias(a, sendq, aliaslevel, e)
 **		the value of name.
 **		NULL if unknown.
 **
-**	Side Effects:
-**		none.
-**
 **	Warnings:
 **		The return value will be trashed across calls.
 */
@@ -212,9 +212,15 @@ aliaslookup(name, pstat, av)
 	char *av;
 {
 	static MAP *map = NULL;
+	char *res;
 #if _FFR_ALIAS_DETAIL
 	int i;
 	char *argv[4];
+#else
+# define argv NULL
+#endif
+#if _FFR_8BITENVADDR
+	char buf[MAXNAME];	/* EAI:ok */
 #endif
 
 	if (map == NULL)
@@ -228,8 +234,13 @@ aliaslookup(name, pstat, av)
 	DYNOPENMAP(map);
 
 	/* special case POstMastER -- always use lower case */
-	if (sm_strcasecmp(name, "postmaster") == 0)
+	if (SM_STRCASEEQ(name, "postmaster"))
 		name = "postmaster";
+#if _FFR_8BITENVADDR
+	(void) dequote_internal_chars(name, buf, sizeof(buf));
+	/* check length? */
+	name = buf;
+#endif /* _FFR_8BITENVADDR */
 
 #if _FFR_ALIAS_DETAIL
 	i = 0;
@@ -240,11 +251,14 @@ aliaslookup(name, pstat, av)
 	if (av != NULL && *av == '+')
 		argv[i++] = av + 1;
 	argv[i++] = NULL;
-	return (*map->map_class->map_lookup)(map, name, argv, pstat);
-#else /* _FFR_ALIAS_DETAIL */
-	return (*map->map_class->map_lookup)(map, name, NULL, pstat);
 #endif /* _FFR_ALIAS_DETAIL */
+	res = (*map->map_class->map_lookup)(map, name, argv, pstat);
+#if _FFR_8BITENVADDR
+	/* map_lookup() does a map_rewrite(), so no quoting here */
+#endif
+	return res;
 }
+
 /*
 **  SETALIAS -- set up an alias map
 **
@@ -601,6 +615,16 @@ rebuildaliases(map, automatic)
 	/* add distinguished entries and close the database */
 	if (bitset(MF_OPEN, map->map_mflags))
 	{
+#if _FFR_TESTS
+		if (tTd(78, 101))
+		{
+			int sl;
+
+			sl = tTdlevel(78) - 100;
+			sm_dprintf("rebuildaliases: sleep=%d\n", sl);
+			sleep(sl);
+		}
+#endif
 		map->map_mflags |= MF_CLOSING;
 		map->map_class->map_close(map);
 		map->map_mflags &= ~(MF_OPEN|MF_WRITABLE|MF_CLOSING);
@@ -647,7 +671,13 @@ readaliases(map, af, announcestats, logstats)
 	bool skipping;
 	long naliases, bytes, longest;
 	ADDRESS al, bl;
-	char line[BUFSIZ];
+	char lbuf[BUFSIZ];
+	char *line;
+#if _FFR_8BITENVADDR
+	char lhsbuf[MAXNAME];	/* EAI:ok */
+	char rhsbuf[BUFSIZ];
+	int len;
+#endif
 
 	/*
 	**  Read and interpret lines
@@ -657,12 +687,21 @@ readaliases(map, af, announcestats, logstats)
 	LineNumber = 0;
 	naliases = bytes = longest = 0;
 	skipping = false;
-	while (sm_io_fgets(af, SM_TIME_DEFAULT, line, sizeof(line)) >= 0)
+	line = NULL;
+	while (sm_io_fgets(af, SM_TIME_DEFAULT, lbuf, sizeof(lbuf)) >= 0)
 	{
 		int lhssize, rhssize;
 		int c;
 
 		LineNumber++;
+#if _FFR_8BITENVADDR
+		if (line != lbuf)
+			SM_FREE(line);
+		len = 0;
+		line = quote_internal_chars(lbuf, NULL, &len, NULL);
+#else
+		line = lbuf;
+#endif
 		p = strchr(line, '\n');
 
 		/* XXX what if line="a\\" ? */
@@ -723,6 +762,7 @@ readaliases(map, af, announcestats, logstats)
 			syserr("554 5.3.5 missing colon");
 			continue;
 		}
+/* XXX line must be [i] */
 		if (parseaddr(line, &al, RF_COPYALL, ':', NULL, CurEnv, true)
 		    == NULL)
 		{
@@ -758,6 +798,7 @@ readaliases(map, af, announcestats, logstats)
 						p++;
 					if (*p == '\0')
 						break;
+/* XXX p must be [i] */
 					if (parseaddr(p, &bl, RF_COPYNONE, ',',
 						      &delimptr, CurEnv, true)
 					    == NULL)
@@ -811,8 +852,8 @@ readaliases(map, af, announcestats, logstats)
 		**	Special case pOStmaStER -- always make it lower case.
 		*/
 
-		if (sm_strcasecmp(al.q_user, "postmaster") == 0)
-			makelower(al.q_user);
+		if (SM_STRCASEEQ(al.q_user, "postmaster"))
+			makelower_a(&al.q_user, CurEnv->e_rpool);
 
 		lhssize = strlen(al.q_user);
 		rhssize = strlen(rhs);
@@ -831,7 +872,13 @@ readaliases(map, af, announcestats, logstats)
 		}
 		else
 		{
+#if _FFR_8BITENVADDR
+			dequote_internal_chars(al.q_user, lhsbuf, sizeof(lhsbuf));
+			dequote_internal_chars(rhs, rhsbuf, sizeof(rhsbuf));
+			map->map_class->map_store(map, lhsbuf, rhsbuf);
+#else
 			map->map_class->map_store(map, al.q_user, rhs);
+#endif
 
 			/* statistics */
 			naliases++;
@@ -859,8 +906,7 @@ readaliases(map, af, announcestats, logstats)
 **	Parameters:
 **		user -- the name of the user who's mail we would like
 **			to forward to.  It must have been verified --
-**			i.e., the q_home field must have been filled
-**			in.
+**			i.e., the q_home field must have been filled in.
 **		sendq -- a pointer to the head of the send queue to
 **			put this user's aliases in.
 **		aliaslevel -- the current alias nesting depth.
diff --git a/src/aliases.0 b/src/aliases.0
index ba855d4807e9..64d439c4c536 100644
--- a/src/aliases.0
+++ b/src/aliases.0
@@ -1,46 +1,46 @@
-ALIASES(5)                                                          ALIASES(5)
+ALIASES(5)                    File Formats Manual                   ALIASES(5)
 
 
 
-NAME
+NNAAMMEE
        aliases - aliases file for sendmail
 
-SYNOPSIS
-       aliases
+SSYYNNOOPPSSIISS
+       aalliiaasseess
 
-DESCRIPTION
+DDEESSCCRRIIPPTTIIOONN
        This file describes user ID aliases used by sendmail.  The file resides
        in /etc/mail and is formatted as a series of lines of the form
 
               name: addr_1, addr_2, addr_3, . . .
 
-       The name is the name to alias, and the addr_n are the aliases for  that
-       name.  addr_n can be another alias, a local username, a local filename,
+       The _n_a_m_e is the name to alias, and the _a_d_d_r___n are the aliases for  that
+       name.  _a_d_d_r___n can be another alias, a local username, a local filename,
        a command, an include file, or an external address.
 
-       Local Username
+       LLooccaall UUsseerrnnaammee
               username
 
               The username must be available via getpwnam(3).
 
-       Local Filename
+       LLooccaall FFiilleennaammee
               /path/name
 
               Messages are appended to the file specified by the full pathname
               (starting with a slash (/))
 
-       Command
+       CCoommmmaanndd
               |command
 
               A  command  starts  with a pipe symbol (|), it receives messages
               via standard input.
 
-       Include File
+       IInncclluuddee FFiillee
               :include: /path/name
 
-              The aliases in pathname are added to the aliases for name.
+              The aliases in pathname are added to the aliases for _n_a_m_e_.
 
-       E-Mail Address
+       EE--MMaaiill AAddddrreessss
               user@domain
 
               An e-mail address in RFC 822 format.
@@ -52,11 +52,11 @@ ALIASES(5)                                                          ALIASES(5)
        Aliasing occurs only on local names.  Loops can  not  occur,  since  no
        message will be sent to any person more than once.
 
-       If  an  alias  is found for name, sendmail then checks for an alias for
-       owner-name.  If it is found and the result of the lookup expands  to  a
+       If  an  alias  is found for _n_a_m_e, sendmail then checks for an alias for
+       _o_w_n_e_r_-_n_a_m_e.  If it is found and the result of the lookup expands  to  a
        single address, the envelope sender address of the message is rewritten
        to that address.  If it is found and the result expands  to  more  than
-       one address, the envelope sender address is changed to owner-name.
+       one address, the envelope sender address is changed to _o_w_n_e_r_-_n_a_m_e.
 
        After  aliasing  has  been  done, local and valid recipients who have a
        ``.forward'' file in their home directory have  messages  forwarded  to
@@ -67,22 +67,22 @@ ALIASES(5)                                                          ALIASES(5)
        program  newaliases(1).   A  newaliases command should be executed each
        time the aliases file is changed for the change to take effect.
 
-SEE ALSO
+SSEEEE AALLSSOO
        newaliases(1), dbm(3), dbopen(3), db_open(3), sendmail(8)
 
-       SENDMAIL Installation and Operation Guide.
+       _S_E_N_D_M_A_I_L _I_n_s_t_a_l_l_a_t_i_o_n _a_n_d _O_p_e_r_a_t_i_o_n _G_u_i_d_e_.
 
-       SENDMAIL An Internetwork Mail Router.
+       _S_E_N_D_M_A_I_L _A_n _I_n_t_e_r_n_e_t_w_o_r_k _M_a_i_l _R_o_u_t_e_r_.
 
-BUGS
+BBUUGGSS
        If you have compiled sendmail with DBM support instead  of  NEWDB,  you
        may  have  encountered problems in dbm(3) restricting a single alias to
        about 1000 bytes  of  information.   You  can  get  longer  aliases  by
        ``chaining'';  that is, make the last name in the alias be a dummy name
        which is a continuation alias.
 
-HISTORY
-       The aliases file format appeared in 4.0BSD.
+HHIISSTTOORRYY
+       The aalliiaasseess file format appeared in 4.0BSD.
 
 
 
diff --git a/src/aliases.5 b/src/aliases.5
index f09b49cf5e0c..cb6750876830 100644
--- a/src/aliases.5
+++ b/src/aliases.5
@@ -18,13 +18,13 @@ aliases
 .SH SYNOPSIS
 .B aliases
 .SH DESCRIPTION
-This file describes user 
-ID 
-aliases used by 
+This file describes user
+ID
+aliases used by
 sendmail.
-The file resides in 
-/etc/mail 
-and 
+The file resides in
+/etc/mail
+and
 is formatted as a series of lines of the form
 .IP
 name: addr_1, addr_2, addr_3, . . .
@@ -33,7 +33,7 @@ The
 .I name
 is the name to alias, and the
 .I addr_n
-are the aliases for that name.  
+are the aliases for that name.
 .I addr_n
 can be another alias, a local username, a local filename,
 a command,
@@ -68,14 +68,14 @@ user@domain
 .IP
 An e-mail address in RFC 822 format.
 .PP
-Lines beginning with white space are continuation lines.  
-Another way to continue lines is by placing a backslash 
-directly before a newline.  
-Lines beginning with 
-# 
+Lines beginning with white space are continuation lines.
+Another way to continue lines is by placing a backslash
+directly before a newline.
+Lines beginning with
+#
 are comments.
 .PP
-Aliasing occurs only on local names.  
+Aliasing occurs only on local names.
 Loops can not occur, since no message will be sent to any person more than once.
 .PP
 If an alias is found for
@@ -89,43 +89,43 @@ If it is found and the result expands to more than one address, the
 envelope sender address is changed to
 .IR owner-name .
 .PP
-After aliasing has been done, local and valid recipients who have a 
-``.forward'' 
-file in their home directory have messages forwarded to the 
+After aliasing has been done, local and valid recipients who have a
+``.forward''
+file in their home directory have messages forwarded to the
 list of users defined in that file.
 .PP
 This is only the raw data file; the actual aliasing information is
-placed into a binary format in the file 
+placed into a binary format in the file
 /etc/mail/aliases.db
-using the program 
-newaliases(1).  
-A 
+using the program
+newaliases(1).
+A
 newaliases
-command should be executed each time the aliases file is changed for the 
+command should be executed each time the aliases file is changed for the
 change to take effect.
 .SH SEE  ALSO
-newaliases(1), 
-dbm(3), 
-dbopen(3), 
-db_open(3), 
+newaliases(1),
+dbm(3),
+dbopen(3),
+db_open(3),
 sendmail(8)
 .PP
 .I
 SENDMAIL Installation and Operation Guide.
 .PP
-.I 
+.I
 SENDMAIL An Internetwork Mail Router.
 .SH BUGS
-If you have compiled 
-sendmail 
+If you have compiled
+sendmail
 with DBM support instead of NEWDB,
-you may have encountered problems in 
-dbm(3) 
-restricting a single alias to about 1000 bytes of information.  
-You can get longer aliases by ``chaining''; that is, make the last name in 
+you may have encountered problems in
+dbm(3)
+restricting a single alias to about 1000 bytes of information.
+You can get longer aliases by ``chaining''; that is, make the last name in
 the alias be a dummy name which is a continuation alias.
 .SH HISTORY
 The
 .B aliases
-file format appeared in 
+file format appeared in
 4.0BSD.
diff --git a/src/collect.c b/src/collect.c
index 526519050ca6..762c60155f9b 100644
--- a/src/collect.c
+++ b/src/collect.c
@@ -15,6 +15,8 @@
 
 SM_RCSID("@(#)$Id: collect.c,v 8.287 2013-11-22 20:51:55 ca Exp $")
 
+#include 
+
 static void	eatfrom __P((char *volatile, ENVELOPE *));
 static void	collect_doheader __P((ENVELOPE *));
 static SM_FILE_T *collect_dfopen __P((ENVELOPE *));
@@ -846,8 +848,7 @@ collect(fp, smtpmode, hdrp, e, rsetsize)
 			q->q_state = QS_FATALERR;
 		}
 
-		(void) sm_io_close(df, SM_TIME_DEFAULT);
-		df = NULL;
+		SM_CLOSE_FP(df);
 		finis(true, true, ExitStat);
 		/* NOTREACHED */
 	}
@@ -895,7 +896,7 @@ collect(fp, smtpmode, hdrp, e, rsetsize)
 	{
 		/* if it claimed to be 8 bits, well, it lied.... */
 		if (e->e_bodytype != NULL &&
-		    sm_strcasecmp(e->e_bodytype, "8BITMIME") == 0)
+		    SM_STRCASEEQ(e->e_bodytype, "8bitmime"))
 			e->e_bodytype = "7BIT";
 	}
 
@@ -939,6 +940,8 @@ collect(fp, smtpmode, hdrp, e, rsetsize)
 
   end:
 	(void) set_tls_rd_tmo(old_rd_tmo);
+	if (buf != bufbuf)
+		SM_FREE(buf);
 }
 
 /*
diff --git a/src/conf.c b/src/conf.c
index 63c545cb27e1..e7a9615c23ab 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -25,16 +25,14 @@ SM_RCSID("@(#)$Id: conf.c,v 8.1192 2014-01-27 18:23:21 ca Exp $")
 #include "map.h"
 #include 
 
-#ifdef DEC
-# if NETINET6
+#if defined(DEC) && NETINET6
 /* for the IPv6 device lookup */
-#  define _SOCKADDR_LEN
-#  include 
-# endif /* NETINET6 */
-#endif /* DEC */
+# define _SOCKADDR_LEN
+# include 
+#endif
 
-# include 
-# include 
+#include 
+#include 
 
 #include 
 #if NETINET || NETINET6
@@ -94,6 +92,12 @@ static struct hostent *sm_getipnodebyaddr __P((const void *, size_t, int, int *)
 **	something with them.
 */
 
+#if _FFR_MTA_MODE
+# define Xflags	H_ASIS
+#else
+# define Xflags 0
+#endif
+
 struct hdrinfo	HdrInfo[] =
 {
 		/* originator fields, most to least significant */
@@ -101,8 +105,8 @@ struct hdrinfo	HdrInfo[] =
 	{ "resent-from",		H_FROM|H_RESENT,	NULL	},
 	{ "resent-reply-to",		H_FROM|H_RESENT,	NULL	},
 	{ "sender",			H_FROM,			NULL	},
-	{ "from",			H_FROM,			NULL	},
-	{ "reply-to",			H_FROM,			NULL	},
+	{ "from",			H_FROM | Xflags,	NULL	},
+	{ "reply-to",			H_FROM | Xflags,	NULL	},
 	{ "errors-to",			H_FROM|H_ERRORSTO,	NULL	},
 	{ "full-name",			H_ACHECK,		NULL	},
 	{ "return-receipt-to",		H_RECEIPTTO,		NULL	},
@@ -110,7 +114,7 @@ struct hdrinfo	HdrInfo[] =
 	{ "disposition-notification-to",	H_FROM,		NULL	},
 
 		/* destination fields */
-	{ "to",				H_RCPT,			NULL	},
+	{ "to",				H_RCPT | Xflags,	NULL	},
 	{ "resent-to",			H_RCPT|H_RESENT,	NULL	},
 	{ "cc",				H_RCPT,			NULL	},
 	{ "resent-cc",			H_RCPT|H_RESENT,	NULL	},
@@ -148,8 +152,6 @@ struct hdrinfo	HdrInfo[] =
 	{ NULL,				0,			NULL	}
 };
 
-
-
 /*
 **  Privacy values
 */
@@ -172,6 +174,9 @@ struct prival PrivacyValues[] =
 	{ "nobodyreturn",	PRIV_NOBODYRETN		},
 	{ "goaway",		PRIV_GOAWAY		},
 	{ "noactualrecipient",	PRIV_NOACTUALRECIPIENT	},
+#if _FFR_NOREFLECT
+	{ "noreflection",	PRIV_NOREFLECTION	},
+#endif
 	{ NULL,			0			}
 };
 
@@ -320,7 +325,7 @@ setdefaults(e)
 	e->e_xfqgrp = NOQGRP;
 	e->e_xfqdir = NOQDIR;
 	e->e_ctime = curtime();
-#if _FFR_EAI
+#if USE_EAI
 	e->e_smtputf8 = false;
 #endif
 	SevenBitInput = false;			/* option 7 */
@@ -405,9 +410,9 @@ setdefaults(e)
 	}
 	else
 		InetMode = AF_INET;
-#if !IPV6_FULL
+# if !IPV6_FULL
 	UseCompressedIPv6Addresses = true;
-#endif
+# endif
 #else /* NETINET6 */
 	InetMode = AF_INET;
 #endif /* NETINET6 */
@@ -1038,9 +1043,9 @@ switch_map_find(service, maptype, mapreturn)
 				p = strpbrk(buf, "#\n");
 				if (p != NULL)
 					*p = '\0';
-#ifndef SM_NSSWITCH_DELIMS
-# define SM_NSSWITCH_DELIMS	" \t"
-#endif
+# ifndef SM_NSSWITCH_DELIMS
+#  define SM_NSSWITCH_DELIMS	" \t"
+# endif
 				p = strpbrk(buf, SM_NSSWITCH_DELIMS);
 				if (p != NULL)
 					*p++ = '\0';
@@ -1185,14 +1190,14 @@ char *
 username()
 {
 	static char *myname = NULL;
-	extern char *getlogin();
+	extern char *getlogin __P((void));
 	register struct passwd *pw;
 
 	/* cache the result */
 	if (myname == NULL)
 	{
 		myname = getlogin();
-		if (myname == NULL || myname[0] == '\0')
+		if (SM_IS_EMPTY(myname))
 		{
 			pw = sm_getpwuid(RealUid);
 			if (pw != NULL)
@@ -1210,7 +1215,7 @@ username()
 					myname = pw->pw_name;
 			}
 		}
-		if (myname == NULL || myname[0] == '\0')
+		if (SM_IS_EMPTY(myname))
 		{
 			syserr("554 5.3.0 Who are you?");
 			myname = "postmaster";
@@ -1251,8 +1256,8 @@ ttypath()
 {
 	struct stat stbuf;
 	register char *pathn;
-	extern char *ttyname();
-	extern char *getlogin();
+	extern char *ttyname __P((int));
+	extern char *getlogin __P((void));
 
 	/* compute the pathname of the controlling tty */
 	if ((pathn = ttyname(2)) == NULL && (pathn = ttyname(1)) == NULL &&
@@ -1543,7 +1548,7 @@ getla()
 #   endif
 #  endif /* LA_TYPE == LA_SHORT */
 # endif /* LA_TYPE == LA_INT */
-	extern off_t lseek();
+	extern off_t lseek __P((int, off_t, int));
 
 	if (kmem < 0)
 	{
@@ -2546,13 +2551,13 @@ initsetproctitle(argc, argv, envp)
 	**  Use all contiguous argv and envp pointers starting at argv[0]
 	*/
 
-# if _FFR_SPT_ALIGN
+#if _FFR_SPT_ALIGN
 	align = -1;
-#  ifdef SPT_ALIGN_SIZE
+# ifdef SPT_ALIGN_SIZE
 	for (i = SPT_ALIGN_SIZE; i > 0; i >>= 1)
 		align++;
-#  endif
-# endif /* _FFR_SPT_ALIGN */
+# endif
+#endif /* _FFR_SPT_ALIGN */
 
 	for (i = 0; i < argc; i++)
 	{
@@ -2760,29 +2765,29 @@ pid_t
 sm_wait(status)
 	int *status;
 {
-# ifdef WAITUNION
+#ifdef WAITUNION
 	union wait st;
-# else
+#else
 	auto int st;
-# endif
+#endif
 	pid_t i;
-# if defined(ISC_UNIX) || defined(_SCO_unix_)
+#if defined(ISC_UNIX) || defined(_SCO_unix_)
 	int savesig;
-# endif
+#endif
 
-# if defined(ISC_UNIX) || defined(_SCO_unix_)
+#if defined(ISC_UNIX) || defined(_SCO_unix_)
 	savesig = sm_releasesignal(SIGCHLD);
-# endif
+#endif
 	i = wait(&st);
-# if defined(ISC_UNIX) || defined(_SCO_unix_)
+#if defined(ISC_UNIX) || defined(_SCO_unix_)
 	if (savesig > 0)
 		sm_blocksignal(SIGCHLD);
-# endif
-# ifdef WAITUNION
+#endif
+#ifdef WAITUNION
 	*status = st.w_status;
-# else
+#else
 	*status = st;
-# endif
+#endif
 	return i;
 }
 /*
@@ -2811,7 +2816,7 @@ reapchild(sig)
 	int save_errno = errno;
 	int st;
 	pid_t pid;
-# if HASWAITPID
+#if HASWAITPID
 	auto int status;
 	int count;
 
@@ -2821,14 +2826,14 @@ reapchild(sig)
 		st = status;
 		if (count++ > 1000)
 			break;
-# else /* HASWAITPID */
-#  ifdef WNOHANG
+#else /* HASWAITPID */
+# ifdef WNOHANG
 	union wait status;
 
 	while ((pid = wait3(&status, WNOHANG, (struct rusage *) NULL)) > 0)
 	{
 		st = status.w_status;
-#  else /* WNOHANG */
+# else /* WNOHANG */
 	auto int status;
 
 	/*
@@ -2841,8 +2846,8 @@ reapchild(sig)
 	if ((pid = wait(&status)) > 0)
 	{
 		st = status;
-#  endif /* WNOHANG */
-# endif /* HASWAITPID */
+# endif /* WNOHANG */
+#endif /* HASWAITPID */
 		/* Drop PID and check if it was a control socket child */
 		proc_list_drop(pid, st, NULL);
 	}
@@ -2872,22 +2877,22 @@ reapchild(sig)
 int
 getdtsize()
 {
-# ifdef RLIMIT_NOFILE
+#ifdef RLIMIT_NOFILE
 	struct rlimit rl;
 
 	if (getrlimit(RLIMIT_NOFILE, &rl) >= 0)
 		return rl.rlim_cur;
-# endif /* RLIMIT_NOFILE */
+#endif /* RLIMIT_NOFILE */
 
-# if HASGETDTABLESIZE
+#if HASGETDTABLESIZE
 	return getdtablesize();
-# else /* HASGETDTABLESIZE */
-#  ifdef _SC_OPEN_MAX
+#else /* HASGETDTABLESIZE */
+# ifdef _SC_OPEN_MAX
 	return sysconf(_SC_OPEN_MAX);
-#  else
+# else
 	return NOFILE;
-#  endif
-# endif /* HASGETDTABLESIZE */
+# endif
+#endif /* HASGETDTABLESIZE */
 }
 /*
 **  UNAME -- get the UUCP name of this system.
@@ -2947,6 +2952,7 @@ uname(name)
 */
 
 #if !HASINITGROUPS
+int
 initgroups(name, basegid)
 	char *name;
 	int basegid;
@@ -2980,7 +2986,7 @@ setgroups(ngroups, grouplist)
 pid_t
 setsid __P ((void))
 {
-#  ifdef TIOCNOTTY
+# ifdef TIOCNOTTY
 	int fd;
 
 	fd = open("/dev/tty", O_RDWR, 0);
@@ -2989,12 +2995,12 @@ setsid __P ((void))
 		(void) ioctl(fd, TIOCNOTTY, (char *) 0);
 		(void) close(fd);
 	}
-#  endif /* TIOCNOTTY */
-#  ifdef SYS5SETPGRP
+# endif /* TIOCNOTTY */
+# ifdef SYS5SETPGRP
 	return setpgrp();
-#  else
+# else
 	return setpgid(0, CurrentPid);
-#  endif
+# endif
 }
 
 #endif /* !HASSETSID */
@@ -3003,7 +3009,7 @@ setsid __P ((void))
 */
 
 #if NEEDFSYNC
-
+int
 fsync(fd)
 	int fd;
 {
@@ -3227,9 +3233,9 @@ usershellok(user, shell)
 	char *user;
 	char *shell;
 {
-# if HASGETUSERSHELL
+#if HASGETUSERSHELL
 	register char *p;
-	extern char *getusershell();
+	extern char *getusershell __P((void));
 
 	if (shell == NULL || shell[0] == '\0' || wordinclass(user, 't') ||
 	    ConfigLevel <= 1)
@@ -3241,10 +3247,10 @@ usershellok(user, shell)
 			break;
 	endusershell();
 	return p != NULL;
-# else /* HASGETUSERSHELL */
-#  if USEGETCONFATTR
+#else /* HASGETUSERSHELL */
+# if USEGETCONFATTR
 	auto char *v;
-#  endif
+# endif
 	register SM_FILE_T *shellf;
 	char buf[MAXLINE];
 
@@ -3252,7 +3258,7 @@ usershellok(user, shell)
 	    ConfigLevel <= 1)
 		return true;
 
-#  if USEGETCONFATTR
+# if USEGETCONFATTR
 	/*
 	**  Naturally IBM has a "better" idea.....
 	**
@@ -3276,7 +3282,7 @@ usershellok(user, shell)
 		}
 		return false;
 	}
-#  endif /* USEGETCONFATTR */
+# endif /* USEGETCONFATTR */
 
 	shellf = sm_io_open(SmFtStdio, SM_TIME_DEFAULT, _PATH_SHELLS,
 			    SM_IO_RDONLY, NULL);
@@ -3319,7 +3325,7 @@ usershellok(user, shell)
 	}
 	(void) sm_io_close(shellf, SM_TIME_DEFAULT);
 	return false;
-# endif /* HASGETUSERSHELL */
+#endif /* HASGETUSERSHELL */
 }
 /*
 **  FREEDISKSPACE -- see how much free space is on the queue filesystem
@@ -3340,87 +3346,87 @@ usershellok(user, shell)
 */
 
 /* statfs types */
-# define SFS_NONE	0	/* no statfs implementation */
-# define SFS_USTAT	1	/* use ustat */
-# define SFS_4ARGS	2	/* use four-argument statfs call */
-# define SFS_VFS	3	/* use  implementation */
-# define SFS_MOUNT	4	/* use  implementation */
-# define SFS_STATFS	5	/* use  implementation */
-# define SFS_STATVFS	6	/* use  implementation */
+#define SFS_NONE	0	/* no statfs implementation */
+#define SFS_USTAT	1	/* use ustat */
+#define SFS_4ARGS	2	/* use four-argument statfs call */
+#define SFS_VFS	3	/* use  implementation */
+#define SFS_MOUNT	4	/* use  implementation */
+#define SFS_STATFS	5	/* use  implementation */
+#define SFS_STATVFS	6	/* use  implementation */
 
-# ifndef SFS_TYPE
-#  define SFS_TYPE	SFS_NONE
-# endif
+#ifndef SFS_TYPE
+# define SFS_TYPE	SFS_NONE
+#endif
 
-# if SFS_TYPE == SFS_USTAT
-#  include 
-# endif
-# if SFS_TYPE == SFS_4ARGS || SFS_TYPE == SFS_STATFS
-#  include 
-# endif
-# if SFS_TYPE == SFS_VFS
-#  include 
-# endif
-# if SFS_TYPE == SFS_MOUNT
-#  include 
-# endif
-# if SFS_TYPE == SFS_STATVFS
-#  include 
-# endif
+#if SFS_TYPE == SFS_USTAT
+# include 
+#endif
+#if SFS_TYPE == SFS_4ARGS || SFS_TYPE == SFS_STATFS
+# include 
+#endif
+#if SFS_TYPE == SFS_VFS
+# include 
+#endif
+#if SFS_TYPE == SFS_MOUNT
+# include 
+#endif
+#if SFS_TYPE == SFS_STATVFS
+# include 
+#endif
 
 long
 freediskspace(dir, bsize)
 	const char *dir;
 	long *bsize;
 {
-# if SFS_TYPE == SFS_NONE
+#if SFS_TYPE == SFS_NONE
 	if (bsize != NULL)
 		*bsize = 4096L;
 
 	/* assume free space is plentiful */
 	return (long) LONG_MAX;
-# else /* SFS_TYPE == SFS_NONE */
-#  if SFS_TYPE == SFS_USTAT
+#else /* SFS_TYPE == SFS_NONE */
+# if SFS_TYPE == SFS_USTAT
 	struct ustat fs;
 	struct stat statbuf;
-#   define FSBLOCKSIZE	DEV_BSIZE
-#   define SFS_BAVAIL	f_tfree
-#  else /* SFS_TYPE == SFS_USTAT */
-#   if defined(ultrix)
+#  define FSBLOCKSIZE	DEV_BSIZE
+#  define SFS_BAVAIL	f_tfree
+# else /* SFS_TYPE == SFS_USTAT */
+#  if defined(ultrix)
 	struct fs_data fs;
-#    define SFS_BAVAIL	fd_bfreen
-#    define FSBLOCKSIZE	1024L
-#   else /* defined(ultrix) */
-#    if SFS_TYPE == SFS_STATVFS
+#   define SFS_BAVAIL	fd_bfreen
+#   define FSBLOCKSIZE	1024L
+#  else /* defined(ultrix) */
+#   if SFS_TYPE == SFS_STATVFS
 	struct statvfs fs;
-#     define FSBLOCKSIZE	fs.f_frsize
-#    else /* SFS_TYPE == SFS_STATVFS */
+#    define FSBLOCKSIZE	fs.f_frsize
+#   else /* SFS_TYPE == SFS_STATVFS */
 	struct statfs fs;
-#     define FSBLOCKSIZE	fs.f_bsize
-#    endif /* SFS_TYPE == SFS_STATVFS */
-#   endif /* defined(ultrix) */
-#  endif /* SFS_TYPE == SFS_USTAT */
-#  ifndef SFS_BAVAIL
-#   define SFS_BAVAIL f_bavail
-#  endif
+#    define FSBLOCKSIZE	fs.f_bsize
+#   endif /* SFS_TYPE == SFS_STATVFS */
+#  endif /* defined(ultrix) */
+# endif /* SFS_TYPE == SFS_USTAT */
+# ifndef SFS_BAVAIL
+#  define SFS_BAVAIL f_bavail
+# endif
 
-#  if SFS_TYPE == SFS_USTAT
+# if SFS_TYPE == SFS_USTAT
 	if (stat(dir, &statbuf) == 0 && ustat(statbuf.st_dev, &fs) == 0)
-#  else /* SFS_TYPE == SFS_USTAT */
-#   if SFS_TYPE == SFS_4ARGS
+# else /* SFS_TYPE == SFS_USTAT */
+#  if SFS_TYPE == SFS_4ARGS
 	if (statfs(dir, &fs, sizeof(fs), 0) == 0)
-#   else /* SFS_TYPE == SFS_4ARGS */
-#    if SFS_TYPE == SFS_STATVFS
+#  else /* SFS_TYPE == SFS_4ARGS */
+#   if SFS_TYPE == SFS_STATVFS
 	if (statvfs(dir, &fs) == 0)
-#    else /* SFS_TYPE == SFS_STATVFS */
-#     if defined(ultrix)
+#   else /* SFS_TYPE == SFS_STATVFS */
+#    if defined(ultrix)
 	if (statfs(dir, &fs) > 0)
-#     else /* defined(ultrix) */
+#    else /* defined(ultrix) */
 	if (statfs(dir, &fs) == 0)
-#     endif /* defined(ultrix) */
-#    endif /* SFS_TYPE == SFS_STATVFS */
-#   endif /* SFS_TYPE == SFS_4ARGS */
-#  endif /* SFS_TYPE == SFS_USTAT */
+#    endif /* defined(ultrix) */
+#   endif /* SFS_TYPE == SFS_STATVFS */
+#  endif /* SFS_TYPE == SFS_4ARGS */
+# endif /* SFS_TYPE == SFS_USTAT */
 	{
 		if (bsize != NULL)
 			*bsize = FSBLOCKSIZE;
@@ -3432,7 +3438,7 @@ freediskspace(dir, bsize)
 			return (long) fs.SFS_BAVAIL;
 	}
 	return -1;
-# endif /* SFS_TYPE == SFS_NONE */
+#endif /* SFS_TYPE == SFS_NONE */
 }
 /*
 **  ENOUGHDISKSPACE -- is there enough free space on the queue file systems?
@@ -3610,14 +3616,14 @@ lockfile(fd, filename, ext, type)
 {
 	int i;
 	int save_errno;
-# if !HASFLOCK
+#if !HASFLOCK
 	int action;
 	struct flock lfd;
 
 	if (ext == NULL)
 		ext = "";
 
-	memset(&lfd, '\0', sizeof(lfd));
+	(void) memset(&lfd, '\0', sizeof(lfd));
 	if (bitset(LOCK_UN, type))
 		lfd.l_type = F_UNLCK;
 	else if (bitset(LOCK_EX, type))
@@ -3633,7 +3639,6 @@ lockfile(fd, filename, ext, type)
 	if (tTd(55, 60))
 		sm_dprintf("lockfile(%s%s, action=%d, type=%d): ",
 			filename, ext, action, lfd.l_type);
-
 	while ((i = fcntl(fd, action, &lfd)) < 0 && errno == EINTR)
 		continue;
 	if (i >= 0)
@@ -3674,7 +3679,7 @@ lockfile(fd, filename, ext, type)
 		       filename, ext, fd, type, omode, (long) euid);
 		dumpfd(fd, true, true);
 	}
-# else /* !HASFLOCK */
+#else /* !HASFLOCK */
 	if (ext == NULL)
 		ext = "";
 
@@ -3704,7 +3709,7 @@ lockfile(fd, filename, ext, type)
 			filename, ext, fd, type, omode, (long) euid);
 		dumpfd(fd, true, true);
 	}
-# endif /* !HASFLOCK */
+#endif /* !HASFLOCK */
 	if (tTd(55, 60))
 		sm_dprintf("FAIL\n");
 	errno = save_errno;
@@ -3772,7 +3777,7 @@ chownsafe(fd, safedir)
 	int fd;
 	bool safedir;
 {
-# if (!defined(_POSIX_CHOWN_RESTRICTED) || _POSIX_CHOWN_RESTRICTED != -1) && \
+#if (!defined(_POSIX_CHOWN_RESTRICTED) || _POSIX_CHOWN_RESTRICTED != -1) && \
     (defined(_PC_CHOWN_RESTRICTED) || defined(_GNU_TYPES_H))
 	int rval;
 
@@ -3788,14 +3793,14 @@ chownsafe(fd, safedir)
 
 	errno = 0;
 	rval = fpathconf(fd, _PC_CHOWN_RESTRICTED);
-#  if SAFENFSPATHCONF
+# if SAFENFSPATHCONF
 	return errno == 0 && rval IS_SAFE_CHOWN;
-#  else
+# else
 	return safedir && errno == 0 && rval IS_SAFE_CHOWN;
-#  endif
-# else /* (!defined(_POSIX_CHOWN_RESTRICTED) || _POSIX_CHOWN_RESTRICTED != -1) && ... */
+# endif
+#else /* (!defined(_POSIX_CHOWN_RESTRICTED) || _POSIX_CHOWN_RESTRICTED != -1) && ... */
 	return bitnset(DBS_ASSUMESAFECHOWN, DontBlameSendmail);
-# endif /* (!defined(_POSIX_CHOWN_RESTRICTED) || _POSIX_CHOWN_RESTRICTED != -1) && ... */
+#endif /* (!defined(_POSIX_CHOWN_RESTRICTED) || _POSIX_CHOWN_RESTRICTED != -1) && ... */
 }
 /*
 **  RESETLIMITS -- reset system controlled resource limits
@@ -3858,7 +3863,7 @@ bool
 setvendor(vendor)
 	char *vendor;
 {
-	if (sm_strcasecmp(vendor, "Berkeley") == 0)
+	if (SM_STRCASEEQ(vendor, "Berkeley"))
 	{
 		VendorCode = VENDOR_BERKELEY;
 		return true;
@@ -3867,14 +3872,14 @@ setvendor(vendor)
 	/* add vendor extensions here */
 
 #ifdef SUN_EXTENSIONS
-	if (sm_strcasecmp(vendor, "Sun") == 0)
+	if (SM_STRCASEEQ(vendor, "Sun"))
 	{
 		VendorCode = VENDOR_SUN;
 		return true;
 	}
 #endif /* SUN_EXTENSIONS */
 #ifdef DEC
-	if (sm_strcasecmp(vendor, "Digital") == 0)
+	if (SM_STRCASEEQ(vendor, "Digital"))
 	{
 		VendorCode = VENDOR_DEC;
 		return true;
@@ -3882,7 +3887,7 @@ setvendor(vendor)
 #endif /* DEC */
 
 #if defined(VENDOR_NAME) && defined(VENDOR_CODE)
-	if (sm_strcasecmp(vendor, VENDOR_NAME) == 0)
+	if (SM_STRCASEEQ(vendor, VENDOR_NAME))
 	{
 		VendorCode = VENDOR_CODE;
 		return true;
@@ -4404,8 +4409,11 @@ sm_gethostbyname(name, family)
 # endif /* NETINET6 */
 	char *maptype[MAXMAPSTACK];
 	short mapreturn[MAXMAPACTIONS];
-	char hbuf[MAXNAME];
-
+	char hbuf[MAXNAME_I];
+# if _FFR_8BITENVADDR
+	(void) dequote_internal_chars(name, hbuf, sizeof(hbuf));
+	name = hbuf;
+# endif
 	if (tTd(61, 10))
 		sm_dprintf("sm_gethostbyname(%s, %d)... ", name, family);
 
@@ -4423,7 +4431,8 @@ sm_gethostbyname(name, family)
 	if (h == NULL)
 	{
 		if (tTd(61, 10))
-			sm_dprintf("failure\n");
+			sm_dprintf("failure: errno=%d, h_errno=%d\n",
+				errno, h_errno);
 
 		nmaps = switch_map_find("hosts", maptype, mapreturn);
 		while (--nmaps >= 0)
@@ -4467,9 +4476,9 @@ sm_gethostbyname(name, family)
 	/* the function is supposed to return only the requested family */
 	if (h != NULL && h->h_addrtype != family)
 	{
-# if NETINET6
+#if NETINET6
 		freehostent(h);
-# endif
+#endif
 		h = NULL;
 		SM_SET_H_ERRNO(NO_DATA);
 	}
@@ -4477,7 +4486,8 @@ sm_gethostbyname(name, family)
 	if (tTd(61, 10))
 	{
 		if (h == NULL)
-			sm_dprintf("failure\n");
+			sm_dprintf("failure: errno=%d, h_errno=%d\n",
+				errno, h_errno);
 		else
 		{
 			sm_dprintf("%s\n", h->h_name);
@@ -4821,24 +4831,24 @@ struct mbuf;
 void
 load_if_names()
 {
-# if NETINET6 && defined(SIOCGLIFCONF)
-#  ifdef __hpux
+#if NETINET6 && defined(SIOCGLIFCONF)
+# ifdef __hpux
 
     /*
     **  Unfortunately, HP has changed all of the structures,
     **  making life difficult for implementors.
     */
 
-#   define lifconf	if_laddrconf
-#   define lifc_len	iflc_len
-#   define lifc_buf	iflc_buf
-#   define lifreq	if_laddrreq
-#   define lifr_addr	iflr_addr
-#   define lifr_name	iflr_name
-#   define lifr_flags	iflr_flags
-#   define ss_family	sa_family
-#   undef SIOCGLIFNUM
-#  endif /* __hpux */
+#  define lifconf	if_laddrconf
+#  define lifc_len	iflc_len
+#  define lifc_buf	iflc_buf
+#  define lifreq	if_laddrreq
+#  define lifr_addr	iflr_addr
+#  define lifr_name	iflr_name
+#  define lifr_flags	iflr_flags
+#  define ss_family	sa_family
+#  undef SIOCGLIFNUM
+# endif /* __hpux */
 
 	int s;
 	int i;
@@ -4846,26 +4856,26 @@ load_if_names()
 	int numifs;
 	char *buf;
 	struct lifconf lifc;
-#  ifdef SIOCGLIFNUM
+# ifdef SIOCGLIFNUM
 	struct lifnum lifn;
-#  endif
+# endif
 
 	s = socket(InetMode, SOCK_DGRAM, 0);
 	if (s == -1)
 		return;
 
 	/* get the list of known IP address from the kernel */
-#  ifdef __hpux
+# ifdef __hpux
 	i = ioctl(s, SIOCGIFNUM, (char *) &numifs);
-#  endif
-#  ifdef SIOCGLIFNUM
+# endif
+# ifdef SIOCGLIFNUM
 	lifn.lifn_family = AF_UNSPEC;
 	lifn.lifn_flags = 0;
 	i = ioctl(s, SIOCGLIFNUM, (char *)&lifn);
 	numifs = lifn.lifn_count;
-#  endif /* SIOCGLIFNUM */
+# endif /* SIOCGLIFNUM */
 
-#  if defined(__hpux) || defined(SIOCGLIFNUM)
+# if defined(__hpux) || defined(SIOCGLIFNUM)
 	if (i < 0)
 	{
 		/* can't get number of interfaces -- fall back */
@@ -4877,7 +4887,7 @@ load_if_names()
 	else if (tTd(0, 42))
 		sm_dprintf("system has %d interfaces\n", numifs);
 	if (numifs < 0)
-#  endif /* defined(__hpux) || defined(SIOCGLIFNUM) */
+# endif /* defined(__hpux) || defined(SIOCGLIFNUM) */
 		numifs = MAXINTERFACES;
 
 	if (numifs <= 0)
@@ -4888,10 +4898,10 @@ load_if_names()
 
 	len = lifc.lifc_len = numifs * sizeof(struct lifreq);
 	buf = lifc.lifc_buf = xalloc(lifc.lifc_len);
-#  ifndef __hpux
+# ifndef __hpux
 	lifc.lifc_family = AF_UNSPEC;
 	lifc.lifc_flags = 0;
-#  endif
+# endif
 	if (ioctl(s, SIOCGLIFCONF, (char *)&lifc) < 0)
 	{
 		if (tTd(0, 4))
@@ -4917,9 +4927,9 @@ load_if_names()
 		char *name;
 		struct in6_addr ia6;
 		struct in_addr ia;
-#  ifdef SIOCGLIFFLAGS
+# ifdef SIOCGLIFFLAGS
 		struct lifreq ifrf;
-#  endif
+# endif
 		char ip_addr[256];
 		char buf6[INET6_ADDRSTRLEN];
 
@@ -4946,18 +4956,21 @@ load_if_names()
 		if ((len - i) < sizeof(*ifr))
 			break;
 
-#  ifdef BSD4_4_SOCKADDR
+# ifdef BSD4_4_SOCKADDR
 		if (sa->sa.sa_len > sizeof(ifr->lifr_addr))
 			i += sizeof(ifr->lifr_name) + sa->sa.sa_len;
 		else
-#  endif /* BSD4_4_SOCKADDR */
-#  ifdef DEC
+# endif /* BSD4_4_SOCKADDR */
+		/* "else" in #if code above */
+		{
+# ifdef DEC
 			/* fix for IPv6  size differences */
 			i += sizeof(ifr->ifr_name) +
 			     max(sizeof(ifr->ifr_addr), ifr->ifr_addr.sa_len);
-#   else /* DEC */
+# else /* DEC */
 			i += sizeof(*ifr);
-#   endif /* DEC */
+# endif /* DEC */
+		}
 
 		if (tTd(0, 20))
 			sm_dprintf("%s\n", anynet_ntoa(sa));
@@ -4965,7 +4978,7 @@ load_if_names()
 		if (af != AF_INET && af != AF_INET6)
 			continue;
 
-#  ifdef SIOCGLIFFLAGS
+# ifdef SIOCGLIFFLAGS
 		memset(&ifrf, '\0', sizeof(struct lifreq));
 		(void) sm_strlcpy(ifrf.lifr_name, ifr->lifr_name,
 				  sizeof(ifrf.lifr_name));
@@ -4985,7 +4998,7 @@ load_if_names()
 
 		if (!bitset(IFF_UP, flags))
 			continue;
-#  endif /* SIOCGLIFFLAGS */
+# endif /* SIOCGLIFFLAGS */
 
 		ip_addr[0] = '\0';
 
@@ -4994,7 +5007,7 @@ load_if_names()
 		{
 		  case AF_INET6:
 			SETV6LOOPBACKADDRFOUND(*sa);
-#  ifdef __KAME__
+# ifdef __KAME__
 			/* convert into proper scoped address */
 			if ((IN6_IS_ADDR_LINKLOCAL(&sa->sin6.sin6_addr) ||
 			     IN6_IS_ADDR_SITELOCAL(&sa->sin6.sin6_addr)) &&
@@ -5007,7 +5020,7 @@ load_if_names()
 							       ((unsigned int)ia6p->s6_addr[2] << 8));
 				ia6p->s6_addr[2] = ia6p->s6_addr[3] = 0;
 			}
-#  endif /* __KAME__ */
+# endif /* __KAME__ */
 			ia6 = sa->sin6.sin6_addr;
 			if (IN6_IS_ADDR_UNSPECIFIED(&ia6))
 			{
@@ -5052,18 +5065,18 @@ load_if_names()
 				sm_dprintf("\ta.k.a.: %s\n", ip_addr);
 		}
 
-#  ifdef SIOCGLIFFLAGS
+# ifdef SIOCGLIFFLAGS
 		/* skip "loopback" interface "lo" */
 		if (DontProbeInterfaces == DPI_SKIPLOOPBACK &&
 		    bitset(IFF_LOOPBACK, flags))
 			continue;
-#  endif /* SIOCGLIFFLAGS */
+# endif /* SIOCGLIFFLAGS */
 		(void) add_hostnames(sa);
 	}
 	sm_free(buf); /* XXX */
 	(void) close(s);
-# else /* NETINET6 && defined(SIOCGLIFCONF) */
-#  if defined(SIOCGIFCONF) && !SIOCGIFCONF_IS_BROKEN
+#else /* NETINET6 && defined(SIOCGLIFCONF) */
+# if defined(SIOCGIFCONF) && !SIOCGIFCONF_IS_BROKEN
 	int s;
 	int i;
 	struct ifconf ifc;
@@ -5074,7 +5087,7 @@ load_if_names()
 		return;
 
 	/* get the list of known IP address from the kernel */
-#   if defined(SIOCGIFNUM) && !SIOCGIFNUM_IS_BROKEN
+#  if defined(SIOCGIFNUM) && !SIOCGIFNUM_IS_BROKEN
 	if (ioctl(s, SIOCGIFNUM, (char *) &numifs) < 0)
 	{
 		/* can't get number of interfaces -- fall back */
@@ -5086,7 +5099,7 @@ load_if_names()
 	else if (tTd(0, 42))
 		sm_dprintf("system has %d interfaces\n", numifs);
 	if (numifs < 0)
-#   endif /* defined(SIOCGIFNUM) && !SIOCGIFNUM_IS_BROKEN */
+#  endif /* defined(SIOCGIFNUM) && !SIOCGIFNUM_IS_BROKEN */
 		numifs = MAXINTERFACES;
 
 	if (numifs <= 0)
@@ -5113,20 +5126,24 @@ load_if_names()
 	for (i = 0; i < ifc.ifc_len && i >= 0; )
 	{
 		int af;
+#  if HAVE_IFC_BUF_VOID
+		struct ifreq *ifr = (struct ifreq *) &((char *)ifc.ifc_buf)[i];
+#  else
 		struct ifreq *ifr = (struct ifreq *) &ifc.ifc_buf[i];
+#  endif
 		SOCKADDR *sa = (SOCKADDR *) &ifr->ifr_addr;
-#   if NETINET6
+#  if NETINET6
 		char *addr;
 		struct in6_addr ia6;
-#   endif
+#  endif
 		struct in_addr ia;
-#   ifdef SIOCGIFFLAGS
+#  ifdef SIOCGIFFLAGS
 		struct ifreq ifrf;
-#   endif
+#  endif
 		char ip_addr[256];
-#   if NETINET6
+#  if NETINET6
 		char buf6[INET6_ADDRSTRLEN];
-#   endif
+#  endif
 
 		/*
 		**  If we don't have a complete ifr structure,
@@ -5136,25 +5153,28 @@ load_if_names()
 		if ((ifc.ifc_len - i) < sizeof(*ifr))
 			break;
 
-#   ifdef BSD4_4_SOCKADDR
+#  ifdef BSD4_4_SOCKADDR
 		if (sa->sa.sa_len > sizeof(ifr->ifr_addr))
 			i += sizeof(ifr->ifr_name) + sa->sa.sa_len;
 		else
-#   endif /* BSD4_4_SOCKADDR */
+#  endif /* BSD4_4_SOCKADDR */
+		/* "else" in #if code above */
+		{
 			i += sizeof(*ifr);
+		}
 
 		if (tTd(0, 20))
 			sm_dprintf("%s\n", anynet_ntoa(sa));
 
 		af = ifr->ifr_addr.sa_family;
 		if (af != AF_INET
-#   if NETINET6
+#  if NETINET6
 		    && af != AF_INET6
-#   endif
+#  endif
 		    )
 			continue;
 
-#   ifdef SIOCGIFFLAGS
+#  ifdef SIOCGIFFLAGS
 		memset(&ifrf, '\0', sizeof(struct ifreq));
 		(void) sm_strlcpy(ifrf.ifr_name, ifr->ifr_name,
 			       sizeof(ifrf.ifr_name));
@@ -5162,10 +5182,10 @@ load_if_names()
 		if (tTd(0, 41))
 			sm_dprintf("\tflags: %lx\n",
 				(unsigned long) ifrf.ifr_flags);
-#    define IFRFREF ifrf
-#   else /* SIOCGIFFLAGS */
-#    define IFRFREF (*ifr)
-#   endif /* SIOCGIFFLAGS */
+#   define IFRFREF ifrf
+#  else /* SIOCGIFFLAGS */
+#   define IFRFREF (*ifr)
+#  endif /* SIOCGIFFLAGS */
 
 		if (!bitset(IFF_UP, IFRFREF.ifr_flags))
 			continue;
@@ -5191,10 +5211,10 @@ load_if_names()
 					inet_ntoa(ia));
 			break;
 
-#   if NETINET6
+#  if NETINET6
 		  case AF_INET6:
 			SETV6LOOPBACKADDRFOUND(*sa);
-#    ifdef __KAME__
+#   ifdef __KAME__
 			/* convert into proper scoped address */
 			if ((IN6_IS_ADDR_LINKLOCAL(&sa->sin6.sin6_addr) ||
 			     IN6_IS_ADDR_SITELOCAL(&sa->sin6.sin6_addr)) &&
@@ -5207,7 +5227,7 @@ load_if_names()
 							       ((unsigned int)ia6p->s6_addr[2] << 8));
 				ia6p->s6_addr[2] = ia6p->s6_addr[3] = 0;
 			}
-#    endif /* __KAME__ */
+#   endif /* __KAME__ */
 			ia6 = sa->sin6.sin6_addr;
 			if (IN6_IS_ADDR_UNSPECIFIED(&ia6))
 			{
@@ -5227,7 +5247,7 @@ load_if_names()
 						   addr);
 			break;
 
-#   endif /* NETINET6 */
+#  endif /* NETINET6 */
 		}
 
 		if (ip_addr[0] == '\0')
@@ -5249,9 +5269,9 @@ load_if_names()
 	}
 	sm_free(ifc.ifc_buf); /* XXX */
 	(void) close(s);
-#   undef IFRFREF
-#  endif /* defined(SIOCGIFCONF) && !SIOCGIFCONF_IS_BROKEN */
-# endif /* NETINET6 && defined(SIOCGLIFCONF) */
+#  undef IFRFREF
+# endif /* defined(SIOCGIFCONF) && !SIOCGIFCONF_IS_BROKEN */
+#endif /* NETINET6 && defined(SIOCGLIFCONF) */
 }
 /*
 **  ISLOOPBACK -- is socket address in the loopback net?
@@ -5503,7 +5523,12 @@ sm_syslog(level, id, fmt, va_alist)
 	}
 
 	/* clean up buf after it has been expanded with args */
+#if _FFR_LOGASIS >= 5
+/* for testing! */
+	newstring = buf;
+#else
 	newstring = str2prt(buf);
+#endif
 	if ((strlen(newstring) + idlen + 1) < SYSLOG_BUFSIZE)
 	{
 #if LOG
@@ -5695,8 +5720,7 @@ local_hostname_length(hostname)
 	len_host = strlen(hostname);
 	len_domain = strlen(_res.defdname);
 	if (len_host > len_domain &&
-	    (sm_strcasecmp(hostname + len_host - len_domain,
-			_res.defdname) == 0) &&
+	    (SM_STRCASEEQ(hostname + len_host - len_domain, _res.defdname)) &&
 	    hostname[len_host - len_domain - 1] == '.')
 		return len_host - len_domain - 1;
 	else
@@ -5820,14 +5844,11 @@ link(source, target)
 char	*CompileOptions[] =
 {
 #if ALLOW_255
+	/* if not enabled (and EightBitAddrOK not set): convert 0xff to 0x7f */
 	"ALLOW_255",
 #endif
 #if DANE
-# if STARTTLS
 	"DANE",
-# else
-#  error "DANE set but STARTTLS not defined"
-# endif
 #endif
 #if NAMED_BIND
 # if DNSMAP
@@ -5854,15 +5875,19 @@ char	*CompileOptions[] =
 	"LDAPMAP",
 #endif
 #if LDAP_NETWORK_TIMEOUT
-# if LDAPMAP && defined(LDAP_OPT_NETWORK_TIMEOUT)
+# if LDAPMAP
 	/* set LDAP_OPT_NETWORK_TIMEOUT if available (-c) */
 	"LDAP_NETWORK_TIMEOUT",
 # else
-#  ERROR: _LDAP_NETWORK_TIMEOUT requires _LDAPMAP
+#  ERROR "LDAP_NETWORK_TIMEOUT requires LDAPMAP"
 # endif
 #endif
 #if LDAP_REFERRALS
+# if LDAPMAP
 	"LDAP_REFERRALS",
+# else
+#  ERROR "LDAP_REFERRALS requires LDAPMAP"
+# endif
 #endif
 #if LOG
 	"LOG",
@@ -5926,6 +5951,9 @@ char	*CompileOptions[] =
 #endif
 #if NEWDB
 # if defined(DB_VERSION_MAJOR) && defined(DB_VERSION_MINOR)
+#  if DB_VERSION_MAJOR >= 5 && !HASFLOCK
+#    ERROR "Berkeley DB file locking needs flock() for version 5.x (and greater?)"
+#  endif
 	"NEWDB=" SM_XSTR(DB_VERSION_MAJOR) "." SM_XSTR(DB_VERSION_MINOR),
 # else
 	"NEWDB",
@@ -5996,6 +6024,22 @@ char	*CompileOptions[] =
 #if USERDB
 	"USERDB",
 #endif
+#if USE_EAI
+
+	/*
+	**  Initial/Partial/Experimental EAI (SMTPUTF8) support.
+	**  Requires ICU include files and library depending on the OS.
+	**  Initial patch from Arnt Gulbrandsen.
+	*/
+
+# if !ALLOW_255
+#  ERROR "USE_EAI requires ALLOW_255"
+# endif
+# if _FFR_EIGHT_BIT_ADDR_OK
+#  ERROR "Cannot enable both USE_EAI and _FFR_EIGHT_BIT_ADDR_OK"
+# endif
+	"USE_EAI",
+#endif
 #if USE_LDAP_INIT
 	"USE_LDAP_INIT",
 #endif
@@ -6258,7 +6302,7 @@ char	*OsCompileOptions[] =
 	"USE_OPENSSL_ENGINE=" SM_XSTR(USE_OPENSSL_ENGINE),
 # else
 	"USE_OPENSSL_ENGINE",
-#endif
+# endif
 #endif
 #if USING_NETSCAPE_LDAP
 	"USING_NETSCAPE_LDAP",
@@ -6339,15 +6383,23 @@ char	*FFRCompileOptions[] =
 	/* Don't try to send mail if its size exceeds SIZE= of server. */
 	"_FFR_CLIENT_SIZE",
 #endif
-#if _FFR_DM_ONE
-	/* deliver first TA in background, then queue */
-	"_FFR_DM_ONE",
-#endif
 #if _FFR_DIGUNIX_SAFECHOWN
 	/* Properly set SAFECHOWN (include/sm/conf.h) for Digital UNIX */
 /* Problem noted by Anne Bennett of Concordia University */
 	"_FFR_DIGUNIX_SAFECHOWN",
 #endif
+#if _FFR_DM_ONE
+	/* deliver first TA in background, then queue */
+	"_FFR_DM_ONE",
+#endif
+#if _FFR_DMTRIGGER
+	/*
+	**  WIP: DeliveryMode=Trigger: queue message and notify
+	**  some kind of queue manager about it.
+	*/
+
+	"_FFR_DMTRIGGER",
+#endif
 #if _FFR_DNSMAP_ALIASABLE
 	/* Allow dns map type to be used for aliases. */
 /* Don Lewis of TDK */
@@ -6479,11 +6531,6 @@ char	*FFRCompileOptions[] =
 	/* log some TLS info in to= too */
 	"_FFR_LOG_MORE2=" SM_XSTR(_FFR_LOG_MORE2),
 #endif
-#if _FFR_LOG_MORE1 > 1 || _FFR_LOG_MORE2 > 1
-# if _FFR_LOG_MORE1 != _FFR_LOG_MORE2
-   ERROR: FFR_LOG_MORE1 != FFR_LOG_MORE2
-# endif
-#endif
 #if _FFR_MAIL_MACRO
 	/* make the "real" sender address available in {mail_from} */
 	"_FFR_MAIL_MACRO",
@@ -6522,7 +6569,7 @@ char	*FFRCompileOptions[] =
 #if _FFR_MILTER_CONNECT_REPLYCODE
 	/* milter: propagate replycode returned by connect commands */
 	/* John Gardiner Myers of Proofpoint */
-	"_FFR_MILTER_CONNECT_REPLYCODE ",
+	"_FFR_MILTER_CONNECT_REPLYCODE",
 #endif
 #if _FFR_MILTER_CONVERT_ALL_LF_TO_CRLF
 	/*
@@ -6566,6 +6613,23 @@ char	*FFRCompileOptions[] =
 	/* allow to override "Message accepted for delivery" */
 	"_FFR_MSG_ACCEPT",
 #endif
+#if _FFR_MTA_MODE
+	/* do not modify headers -- does NOT (yet) work */
+	"_FFR_MTA_MODE",
+#endif
+#if _FFR_MTA_STS
+# if !MAP_REGEX
+#  ERROR "_FFR_MTA_STS requires MAP_REGEX"
+# endif
+# if !STARTTLS
+#  ERROR "_FFR_MTA_STS requires STARTTLS"
+# endif
+# if !_FFR_TLS_ALTNAMES
+#  ERROR "_FFR_MTA_STS requires _FFR_TLS_ALTNAMES"
+# endif
+	/* MTA STS support */
+	"_FFR_MTA_STS",
+#endif /* _FFR_MTA_STS */
 #if _FFR_NODELAYDSN_ON_HOLD
 	/* Do not issue a DELAY DSN for mailers that use the hold flag. */
 /* Steven Pitzl */
@@ -6589,7 +6653,7 @@ char	*FFRCompileOptions[] =
 	**  better option) which returns the single dn/multiple
 	**  attributes.
 	**
-	** Jeffrey T. Eaton, Carnegie-Mellon University
+	**  Jeffrey T. Eaton, Carnegie-Mellon University
 	*/
 
 	"_FFR_LDAP_SINGLEDN",
@@ -6603,7 +6667,7 @@ char	*FFRCompileOptions[] =
 	/* outgoing connection control (not yet working) */
 	"_FFR_OCC",
 # else
-#  ERROR: FFR_OCC requires _SM_CONF_SHM
+#  ERROR "_FFR_OCC requires SM_CONF_SHM"
 # endif
 #endif
 #if _FFR_PROXY
@@ -6652,6 +6716,10 @@ char	*FFRCompileOptions[] =
 	/* reject NUL bytes in body */
 	"_FFR_REJECT_NUL_BYTE",
 #endif
+#if _FFR_REPLY_MULTILINE
+	/* try to gather multi-line replies for reply= logging */
+	"_FFR_REPLY_MULTILINE=" SM_XSTR(_FFR_REPLY_MULTILINE),
+#endif
 #if _FFR_RESET_MACRO_GLOBALS
 	/* Allow macro 'j' to be set dynamically via rulesets. */
 	"_FFR_RESET_MACRO_GLOBALS",
@@ -6691,14 +6759,14 @@ char	*FFRCompileOptions[] =
 #endif
 #if _FFR_SLEEP_USE_SELECT
 	/* Use select(2) in libsm/clock.c to emulate sleep(2) */
-	"_FFR_SLEEP_USE_SELECT ",
+	"_FFR_SLEEP_USE_SELECT",
 #endif
 #if _FFR_SM_LDAP_DBG
 # if LDAPMAP && defined(LBER_OPT_LOG_PRINT_FN)
 	/* LDAP debugging */
 	"_FFR_SM_LDAP_DBG",
 # else
-#  ERROR: FFR_SM_LDAP_DBG requires _LDAPMAP and LBER_OPT_LOG_PRINT_FN
+#  ERROR "_FFR_SM_LDAP_DBG requires LDAPMAP and LBER_OPT_LOG_PRINT_FN"
 # endif
 #endif
 #if _FFR_SPT_ALIGN
@@ -6727,19 +6795,11 @@ char	*FFRCompileOptions[] =
 #endif
 #if _FFR_TLS_ALTNAMES
 	/* store subjectAltNames in class {cert_altnames} */
-# if STARTTLS
 	"_FFR_TLS_ALTNAMES",
-# else
-#  error "_FFR_TLS_ALTNAMES set but STARTTLS not defined"
-# endif
 #endif
 #if _FFR_TLSFB2CLEAR
 	/* set default for TLSFallbacktoClear to true */
-# if STARTTLS
 	"_FFR_TLSFB2CLEAR",
-# else
-#  error "_FFR_TLSFB2CLEAR set but STARTTLS not defined"
-# endif
 #endif
 #if _FFR_TLS_USE_CERTIFICATE_CHAIN_FILE
 	/*
@@ -6747,11 +6807,7 @@ char	*FFRCompileOptions[] =
 	**  instead of SSL_CTX_use_certificate_file()
 	*/
 
-# if STARTTLS
 	"_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE",
-# else
-#  error "_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE set but STARTTLS not defined"
-# endif
 #endif
 #if _FFR_TRUSTED_QF
 	/*
@@ -6790,7 +6846,7 @@ char	*FFRCompileOptions[] =
 # if defined(X509_V_FLAG_TRUSTED_FIRST)
 	"_FFR_VRFY_TRUSTED_FIRST",
 # else
-#  error "FFR_VRFY_TRUSTED_FIRST set but X509_V_FLAG_TRUSTED_FIRST not defined"
+#  ERROR "_FFR_VRFY_TRUSTED_FIRST set but X509_V_FLAG_TRUSTED_FIRST not defined"
 # endif
 #endif
 
@@ -6807,24 +6863,44 @@ char	*FFRCompileOptions[] =
 	/* X-Connect support */
 	"_FFR_XCNCT",
 #endif
-#if _FFR_EAI
-
+#if _FFR_LOGASIS
+	"_FFR_LOGASIS=" SM_XSTR(_FFR_LOGASIS),
+#endif
+#if _FFR_NOREFLECT
+	/* Don't forget to update docs for "goaway" to include this */
+	"_FFR_NOREFLECT",
+#endif
+#if _FFR_AUTH_PASSING
+	/* Set the default AUTH= if the sender didn't */
+	"_FFR_AUTH_PASSING",
+#endif
+#if _FFR_HOST_SORT_REVERSE
+	/* Reverse sort for host for recipient sorting pre-envelope-split */
+	"_FFR_HOST_SORT_REVERSE",
+#endif
+#if _FFR_MSP_PARANOIA
 	/*
-	**  Initial/Partial/Experimental EAI (SMTPUTF8) support.
-	**  NOTE: This is currently BROKEN as the handling of
-	**  envelope addresses in sendmail is NOT 8-bit clean
-	**  (in contrast to header addresses/values).
-	**  Requires ICU include files and library depending on the OS.
-	**  Patch from Arnt Gulbrandsen.
+	**  Forbid queue groups, multiple queues, and dangerous queue permissions
+	**  when operating as an MSP
 	*/
 
-# if !ALLOW_255
-#  ERROR FFR_EAI requires _ALLOW_255
-# endif
-# if _FFR_EIGHT_BIT_ADDR_OK
-#  error "Cannot enable both of these FFRs: FFR_EAI FFR_EIGHT_BIT_ADDR_OK"
-# endif
-	"_FFR_EAI",
+	"_FFR_MSP_PARANOIA",
+#endif
+#if _FFR_ANY_FREE_FS
+	/*
+	**  Check whether there is at least one fs with enough space
+	**  (may not work, needs review)
+	*/
+
+	"_FFR_ANY_FREE_FS",
+#endif
+#if _FFR_MIME_CR_OK
+	/*
+	**  Strip trailing CR in MIME boundaries
+	**  (may not work, needs review)
+	*/
+
+	"_FFR_MIME_CR_OK",
 #endif
 	NULL
 };
diff --git a/src/conf.h b/src/conf.h
index b5b368f48d68..122b7614516f 100644
--- a/src/conf.h
+++ b/src/conf.h
@@ -109,7 +109,7 @@ struct rusage;	/* forward declaration to get gcc to shut up in wait.h */
 #define MAXSHORTSTR	203		/* max short string length */
 #define MAXMACNAMELEN	25		/* max macro name length */
 #define MAXMACROID	0377		/* max macro id number */
-					/* Must match (BITMAPBITS - 1) */
+	/* Must match (BITMAPBITS - 1), checked in macro.c */
 #ifndef MAXHDRSLEN
 # define MAXHDRSLEN	(32 * 1024)	/* max size of message headers */
 #endif
@@ -132,7 +132,7 @@ struct rusage;	/* forward declaration to get gcc to shut up in wait.h */
 	/* must be less than BITMAPBITS for DoQueueRun */
 #endif
 #if MAXQUEUEGROUPS >= BITMAPBITS
-  ERROR _MAXQUEUEGROUPS must be less than _BITMAPBITS
+# ERROR "MAXQUEUEGROUPS must be less than BITMAPBITS"
 #endif
 
 #ifndef MAXWORKGROUPS
diff --git a/src/control.c b/src/control.c
index a6d8ad631335..1af2cf7cfd95 100644
--- a/src/control.c
+++ b/src/control.c
@@ -12,6 +12,7 @@
 
 SM_RCSID("@(#)$Id: control.c,v 8.130 2013-11-22 20:51:55 ca Exp $")
 
+#include 
 #include 
 
 /* values for cmd_code */
@@ -61,13 +62,13 @@ int ControlSocket = -1;
 int
 opencontrolsocket()
 {
-# if NETUNIX
+#if NETUNIX
 	int save_errno;
 	int rval;
 	long sff = SFF_SAFEDIRPATH|SFF_OPENASROOT|SFF_NOLINK|SFF_CREAT|SFF_MUSTOWN;
 	struct sockaddr_un controladdr;
 
-	if (ControlSocketName == NULL || *ControlSocketName == '\0')
+	if (SM_IS_EMPTY(ControlSocketName))
 		return 0;
 
 	if (strlen(ControlSocketName) >= sizeof(controladdr.sun_path))
@@ -152,7 +153,7 @@ opencontrolsocket()
 		errno = save_errno;
 		return -1;
 	}
-# endif /* NETUNIX */
+#endif /* NETUNIX */
 	return 0;
 }
 /*
@@ -172,7 +173,7 @@ void
 closecontrolsocket(fullclose)
 	bool fullclose;
 {
-# if NETUNIX
+#if NETUNIX
 	long sff = SFF_SAFEDIRPATH|SFF_OPENASROOT|SFF_NOLINK|SFF_CREAT|SFF_MUSTOWN;
 
 	if (ControlSocket >= 0)
@@ -200,7 +201,7 @@ closecontrolsocket(fullclose)
 			return;
 		}
 	}
-# endif /* NETUNIX */
+#endif /* NETUNIX */
 	return;
 }
 /*
@@ -219,11 +220,11 @@ closecontrolsocket(fullclose)
 void
 clrcontrol()
 {
-# if NETUNIX
+#if NETUNIX
 	if (ControlSocket >= 0)
 		(void) close(ControlSocket);
 	ControlSocket = -1;
-# endif /* NETUNIX */
+#endif /* NETUNIX */
 }
 /*
 **  CONTROL_COMMAND -- read and process command from named socket
@@ -329,7 +330,7 @@ control_command(sock, e)
 	/* decode command */
 	for (c = CmdTab; c->cmd_name != NULL; c++)
 	{
-		if (sm_strcasecmp(c->cmd_name, cmdbuf) == 0)
+		if (SM_STRCASEEQ(c->cmd_name, cmdbuf))
 			break;
 	}
 
@@ -397,7 +398,7 @@ control_command(sock, e)
 		break;
 
 	  case CMDMEMDUMP:	/* daemon memory dump, to find memory leaks */
-# if SM_HEAP_CHECK
+#if SM_HEAP_CHECK
 		/* dump the heap, if we are checking for memory leaks */
 		if (sm_debug_active(&SmHeapCheck, 2))
 		{
@@ -410,12 +411,12 @@ control_command(sock, e)
 			(void) sm_io_fprintf(s, SM_TIME_DEFAULT,
 					     "To fix, run sendmail with -dsm_check_heap.4\r\n");
 		}
-# else /* SM_HEAP_CHECK */
+#else /* SM_HEAP_CHECK */
 		(void) sm_io_fprintf(s, SM_TIME_DEFAULT,
 				     "Memory dump unavailable.\r\n");
 		(void) sm_io_fprintf(s, SM_TIME_DEFAULT,
 				     "To fix, rebuild with -DSM_HEAP_CHECK\r\n");
-# endif /* SM_HEAP_CHECK */
+#endif /* SM_HEAP_CHECK */
 		break;
 
 	  case CMDERROR:	/* unknown command */
diff --git a/src/convtime.c b/src/convtime.c
index 4d51d97ad6da..703602552e89 100644
--- a/src/convtime.c
+++ b/src/convtime.c
@@ -14,6 +14,7 @@
 #include 
 
 SM_RCSID("@(#)$Id: convtime.c,v 8.40 2013-11-22 20:51:55 ca Exp $")
+#include 
 
 /*
 **  CONVTIME -- convert time
@@ -48,7 +49,7 @@ convtime(p, units)
 	bool pos = true;
 
 	r = 0;
-	if (sm_strcasecmp(p, "now") == 0)
+	if (SM_STRCASEEQ(p, "now"))
 		return NOW;
 	if (*p == '-')
 	{
diff --git a/src/daemon.c b/src/daemon.c
index 19a937815cbd..5b42e323b1cc 100644
--- a/src/daemon.c
+++ b/src/daemon.c
@@ -15,6 +15,7 @@
 #include "map.h"
 
 SM_RCSID("@(#)$Id: daemon.c,v 8.698 2013-11-22 20:51:55 ca Exp $")
+#include 
 
 #if defined(SOCK_STREAM) || defined(__GNU_LIBRARY__)
 # define USE_SOCK_STREAM	1
@@ -39,6 +40,10 @@ SM_RCSID("@(#)$Id: daemon.c,v 8.698 2013-11-22 20:51:55 ca Exp $")
 # endif
 #endif
 
+#if _FFR_DMTRIGGER
+# include 
+#endif
+
 #if NETINET6
 # define FREEHOSTENT(h, s)			\
 	do					\
@@ -695,6 +700,15 @@ getrequests(e)
 			/* turn on profiling */
 			/* SM_PROF(0); */
 
+#if _FFR_DMTRIGGER
+			if (SM_TRIGGER == e->e_sendmode)
+			{
+				i = sm_notify_start(false, 0);
+				if (i != 0)
+					syserr("sm_notify_start(false) failed=%d", i);
+			}
+#endif
+
 			/*
 			**  Initialize exception stack and default exception
 			**  handler for child process.
@@ -957,7 +971,7 @@ getrequests(e)
 		}
 	}
 	if (tTd(15, 2))
-		sm_dprintf("getreq: returning\n");
+		sm_dprintf("getrequests: returning\n");
 
 #if MILTER
 	/* set the filters for this daemon */
@@ -1541,28 +1555,28 @@ setsockaddroptions(p, d)
 			if (isascii(*v) && isdigit(*v))
 				d->d_addr.sa.sa_family = atoi(v);
 #ifdef NETUNIX
-			else if (sm_strcasecmp(v, "unix") == 0 ||
-				 sm_strcasecmp(v, "local") == 0)
+			else if (SM_STRCASEEQ(v, "unix") ||
+				 SM_STRCASEEQ(v, "local"))
 				d->d_addr.sa.sa_family = AF_UNIX;
 #endif
 #if NETINET
-			else if (sm_strcasecmp(v, "inet") == 0)
+			else if (SM_STRCASEEQ(v, "inet"))
 				d->d_addr.sa.sa_family = AF_INET;
 #endif
 #if NETINET6
-			else if (sm_strcasecmp(v, "inet6") == 0)
+			else if (SM_STRCASEEQ(v, "inet6"))
 				d->d_addr.sa.sa_family = AF_INET6;
 #endif
 #if NETISO
-			else if (sm_strcasecmp(v, "iso") == 0)
+			else if (SM_STRCASEEQ(v, "iso"))
 				d->d_addr.sa.sa_family = AF_ISO;
 #endif
 #if NETNS
-			else if (sm_strcasecmp(v, "ns") == 0)
+			else if (SM_STRCASEEQ(v, "ns"))
 				d->d_addr.sa.sa_family = AF_NS;
 #endif
 #if NETX25
-			else if (sm_strcasecmp(v, "x.25") == 0)
+			else if (SM_STRCASEEQ(v, "x.25"))
 				d->d_addr.sa.sa_family = AF_CCITT;
 #endif
 			else
@@ -2388,7 +2402,7 @@ makeconnection(host, port, mci, e, enough
 				/*
 				**  Check for errors!
 				**  If no ad: turn off TLSA.
-				**  permail: use "normal" method?
+				**  permfail: use "normal" method?
 				**  tempfail: delay or use "normal" method?
 				*/
 
@@ -2402,9 +2416,9 @@ makeconnection(host, port, mci, e, enough
 						return EX_TEMPFAIL;
 					}
 					hp = dns2he(rr, family);
-#if NETINET6
+# if NETINET6
 					hs = hp;
-#endif
+# endif
 				}
 
 				/* other possible "tempfails"? */
@@ -2453,6 +2467,7 @@ makeconnection(host, port, mci, e, enough
 			}
 			else
 # endif /* NETINET6 */
+			/* "else" in #if code above */
 			{
 				if (errno == ETIMEDOUT ||
 # if _FFR_GETHBN_ExFILE
@@ -2536,7 +2551,7 @@ makeconnection(host, port, mci, e, enough
 		**  8754: see common.sh XREF SNKPORT2
 		*/
 
-		if (tTd(77, 101) && hp->h_addrtype == AF_INET &&
+		if (tTd(77, 101) && hp != NULL && hp->h_addrtype == AF_INET &&
 		    addr.sin.sin_addr.s_addr == inet_addr("10.1.1.12"))
 		{
 			addr.sin.sin_addr.s_addr = inet_addr("127.0.0.1");
@@ -2671,6 +2686,7 @@ makeconnection(host, port, mci, e, enough
 		}
 		else
 #endif /* HASRRESVPORT */
+		/* "else" in #if code above */
 		{
 			s = socket(addr.sa.sa_family, SOCK_STREAM, 0);
 		}
@@ -2812,6 +2828,25 @@ makeconnection(host, port, mci, e, enough
 				sm_dprintf("Connecting to [%s].%d...\n",
 					anynet_ntoa(&addr), ntohs(port));
 
+#if _FFR_TESTS
+			if (tTd(77, 101)
+			    /* && AF_INET == addr.sin.sin_family */
+			    && addr.sin.sin_addr.s_addr >=
+				inet_addr("255.255.255.1")
+			    && addr.sin.sin_addr.s_addr <=
+				inet_addr("255.255.255.255")
+			   )
+			{
+				i = -1;
+				save_errno = ntohl(addr.sin.sin_addr.s_addr) -
+					ntohl(inet_addr("255.255.255.0"));
+				sm_dprintf("hack: fail connection=%d\n",
+					save_errno);
+				errno = save_errno;
+			}
+			else
+				/* Watch out of changes below! */
+#endif /* _FFR_TESTS */
 			i = connect(s, (struct sockaddr *) &addr, addrlen);
 			save_errno = errno;
 			if (ev != NULL)
@@ -2928,8 +2963,7 @@ makeconnection(host, port, mci, e, enough
 		save_errno = errno;
 		syserr("cannot open SMTP client channel, fd=%d", s);
 		mci_setstat(mci, EX_TEMPFAIL, "4.4.5", NULL);
-		if (mci->mci_out != NULL)
-			(void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
+		SM_CLOSE_FP(mci->mci_out);
 		(void) close(s);
 		errno = save_errno;
 		OCC_CLOSE;
@@ -2940,13 +2974,26 @@ makeconnection(host, port, mci, e, enough
 	/* set {client_flags} */
 	if (ClientSettings[addr.sa.sa_family].d_mflags != NULL)
 	{
-		macdefine(&mci->mci_macro, A_PERM,
-			  macid("{client_flags}"),
-			  ClientSettings[addr.sa.sa_family].d_mflags);
+		char flags[64];	/* XXX */
+
+		/*
+		**  For now just concatenate the flags as there is no
+		**  overlap yet.
+		*/
+
+		p = macvalue(macid("{client_flags}"), e);
+		flags[0] = '\0';
+		if (!SM_IS_EMPTY(p))
+		{
+			(void) sm_strlcpy(flags, p, sizeof(flags));
+			(void) sm_strlcat(flags, " ", sizeof(flags));
+		}
+		(void) sm_strlcat(flags,
+			ClientSettings[addr.sa.sa_family].d_mflags,
+			sizeof(flags));
+		macdefine(&mci->mci_macro, A_PERM, macid("{client_flags}"),
+			  flags);
 	}
-	else
-		macdefine(&mci->mci_macro, A_PERM,
-			  macid("{client_flags}"), "");
 
 	/* "add" {client_flags} to bitmap */
 	if (bitnset(D_IFNHELO, ClientSettings[addr.sa.sa_family].d_flags))
@@ -3123,8 +3170,7 @@ makeconnection_ds(mux_path, mci)
 		save_errno = errno;
 		syserr("cannot open SMTP client channel, fd=%d", sock);
 		mci_setstat(mci, EX_TEMPFAIL, "4.4.5", NULL);
-		if (mci->mci_out != NULL)
-			(void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
+		SM_CLOSE_FP(mci->mci_out);
 		(void) close(sock);
 		errno = save_errno;
 		return EX_TEMPFAIL;
@@ -3539,8 +3585,8 @@ getauthinfo(fd, may_be_forged)
 	struct hostent *hp;
 	char *ostype = NULL;
 	char **ha;
-	char ibuf[MAXNAME + 1];
-	static char hbuf[MAXNAME + MAXAUTHINFO + 11];
+	char ibuf[MAXNAME + 1];	/* EAI:ok? it's a hostname from OS */
+	static char hbuf[MAXNAME + MAXAUTHINFO + 11]; /* EAI:ok? (as above)*/
 
 	*may_be_forged = true;
 	falen = sizeof(RealHostAddr);
@@ -4058,7 +4104,7 @@ host_map_lookup(map, name, av, statp)
 	time_t SM_NONVOLATILE retrans = 0;
 	int SM_NONVOLATILE retry = 0;
 #endif
-	char hbuf[MAXNAME + 1];
+	char hbuf[MAXNAME + 1]; /* is (host)name in 'x' format? */
 
 	/*
 	**  See if we have already looked up this name.  If so, just
@@ -4151,12 +4197,37 @@ host_map_lookup(map, name, av, statp)
 	if (*name != '[')
 	{
 		int ttl, r;
+#if USE_EAI
+		bool utf8;
 
-		(void) sm_strlcpy(hbuf, name, sizeof(hbuf));
+		utf8 = !addr_is_ascii(name);
+		if (utf8)
+		{
+			(void) sm_strlcpy(hbuf, hn2alabel(name), sizeof(hbuf));
+
+			/* if this is not a FQHN then do not restore it */
+			utf8 = strchr(hbuf, '.') != NULL;
+		}
+		else
+#endif /* USE_EAI */
+		/* "else" in #if code above */
+		{
+			(void) sm_strlcpy(hbuf, name, sizeof(hbuf));
+		}
 
 		r = getcanonname(hbuf, sizeof(hbuf) - 1, !HasWildcardMX, &ttl);
 		if (r != HOST_NOTFOUND)
 		{
+#if USE_EAI
+			/*
+			**  Restore original. XXX Check if modified?
+			**  If so, convert it via hn2ulabel()
+			**  (not available yet)?
+			*/
+
+			if (utf8)
+				(void) sm_strlcpy(hbuf, name, sizeof(hbuf));
+#endif
 			ans = hbuf;
 			if (ttl > 0)
 				s->s_namecanon.nc_exp = now + SM_MIN(ttl,
@@ -4208,7 +4279,7 @@ host_map_lookup(map, name, av, statp)
 #if NETINET6
 			if (ans == hp->h_name)
 			{
-				static char n[MAXNAME + 1];
+				static char n[MAXNAME + 1];	/* EAI:ok */
 
 				/* hp->h_name is about to disappear */
 				(void) sm_strlcpy(n, ans, sizeof(n));
@@ -4515,12 +4586,14 @@ anynet_ntoa(sap)
 	(void) sm_snprintf(buf, sizeof(buf), "Family %d: ", sap->sa.sa_family);
 	bp = &buf[strlen(buf)];
 	ap = sap->sa.sa_data;
-	for (l = sizeof(sap->sa.sa_data); --l >= 0; )
+	for (l = sizeof(sap->sa.sa_data); --l >= 0 && SPACELEFT(buf, bp) > 3; )
 	{
 		(void) sm_snprintf(bp, SPACELEFT(buf, bp), "%02x:",
 				   *ap++ & 0377);
 		bp += 3;
 	}
+	SM_ASSERT(bp > buf);
+	SM_ASSERT(bp <= buf + sizeof(buf));
 	*--bp = '\0';
 	return buf;
 }
@@ -4613,7 +4686,7 @@ hostnamebyanyaddr(sap)
 #  if NETINET6
 		if (name == hp->h_name)
 		{
-			static char n[MAXNAME + 1];
+			static char n[MAXNAME + 1];	/* EAI:ok */
 
 			/* Copy the string, hp->h_name is about to disappear */
 			(void) sm_strlcpy(n, name, sizeof(n));
diff --git a/src/deliver.c b/src/deliver.c
index ff4b21487700..7d8008d80ac8 100644
--- a/src/deliver.c
+++ b/src/deliver.c
@@ -16,6 +16,8 @@
 
 SM_RCSID("@(#)$Id: deliver.c,v 8.1030 2013-11-22 20:51:55 ca Exp $")
 
+#include 
+
 #if HASSETUSERCONTEXT
 # include 
 #endif
@@ -54,6 +56,9 @@ static bool	iscltflgset __P((ENVELOPE *, int));
 # include 
 #endif
 
+#define ESCNULLMXRCPT "5.1.10"
+#define ERRNULLMX "556 Host does not accept mail: MX 0 ."
+
 /*
 **  SENDALL -- actually send all the messages.
 **
@@ -160,7 +165,7 @@ sendall(e, mode)
 			recip = "(nobody)";
 
 		errno = 0;
-		queueup(e, WILL_BE_QUEUED(mode), false);
+		queueup(e, WILL_BE_QUEUED(mode) ? QUP_FL_ANNOUNCE : QUP_FL_NONE);
 		e->e_flags |= EF_FATALERRS|EF_PM_NOTIFY|EF_CLRQUEUE;
 		ExitStat = EX_UNAVAILABLE;
 		syserr("554 5.4.6 Too many hops %d (%d max): from %s via %s, to %s",
@@ -527,7 +532,7 @@ sendall(e, mode)
 	       SuperSafe == SAFE_REALLY_POSTMILTER))) &&
 	    (!bitset(EF_INQUEUE, e->e_flags) || splitenv != NULL))
 	{
-		bool msync;
+		unsigned int qup_flags;
 
 		/*
 		**  Be sure everything is instantiated in the queue.
@@ -536,15 +541,18 @@ sendall(e, mode)
 		**  recipients.
 		*/
 
-#if !HASFLOCK
-		msync = false;
-#else
-		msync = mode == SM_FORK;
+		if (WILL_BE_QUEUED(mode))
+			qup_flags = QUP_FL_ANNOUNCE;
+		else
+			qup_flags = QUP_FL_NONE;
+#if HASFLOCK
+		if (mode == SM_FORK)
+			qup_flags |= QUP_FL_MSYNC;
 #endif
 
 		for (ee = splitenv; ee != NULL; ee = ee->e_sibling)
-			queueup(ee, WILL_BE_QUEUED(mode), msync);
-		queueup(e, WILL_BE_QUEUED(mode), msync);
+			queueup(ee, qup_flags);
+		queueup(e, qup_flags);
 	}
 
 	if (tTd(62, 10))
@@ -662,9 +670,7 @@ sendall(e, mode)
 			/* be sure we leave the temp files to our child */
 			/* close any random open files in the envelope */
 			closexscript(e);
-			if (e->e_dfp != NULL)
-				(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT);
-			e->e_dfp = NULL;
+			SM_CLOSE_FP(e->e_dfp);
 			e->e_flags &= ~EF_HAS_DF;
 
 			/* can't call unlockqueue to avoid unlink of xfp */
@@ -866,7 +872,7 @@ sendenvelope(e, mode)
 			return;
 		}
 		for (ee = e->e_sibling; ee != NULL; ee = ee->e_sibling)
-			queueup(ee, false, true);
+			queueup(ee, QUP_FL_MSYNC);
 
 		/* clean up */
 		for (ee = e->e_sibling; ee != NULL; ee = ee->e_sibling)
@@ -876,11 +882,7 @@ sendenvelope(e, mode)
 			unlockqueue(ee);
 
 			/* this envelope is marked unused */
-			if (ee->e_dfp != NULL)
-			{
-				(void) sm_io_close(ee->e_dfp, SM_TIME_DEFAULT);
-				ee->e_dfp = NULL;
-			}
+			SM_CLOSE_FP(ee->e_dfp);
 			ee->e_id = NULL;
 			ee->e_flags &= ~EF_HAS_DF;
 		}
@@ -891,10 +893,10 @@ sendenvelope(e, mode)
 	for (q = e->e_sendqueue; q != NULL; q = q->q_next)
 	{
 #if XDEBUG
-		char wbuf[MAXNAME + 20];
+		char wbuf[MAXNAME + 20]; /* EAI: might be too short, but that's ok for debugging */
 
 		(void) sm_snprintf(wbuf, sizeof(wbuf), "sendall(%.*s)",
-				   MAXNAME, q->q_paddr);
+				   MAXNAME, q->q_paddr); /* EAI: see above */
 		checkfd012(wbuf);
 #endif /* XDEBUG */
 		if (mode == SM_VERIFY)
@@ -922,7 +924,7 @@ sendenvelope(e, mode)
 			if (CheckpointInterval > 0 &&
 			    e->e_nsent >= CheckpointInterval)
 			{
-				queueup(e, false, false);
+				queueup(e, QUP_FL_NONE);
 				e->e_nsent = 0;
 			}
 			(void) deliver(e, q);
@@ -1233,6 +1235,63 @@ should_try_fbsh(e, tried_fallbacksmarthost, hostbuf, hbsz, status)
 	return false;
 }
 
+/*
+**  CLTFEATURES -- Get features for SMTP client
+**
+**	Parameters:
+**		e -- envelope
+**		clientname -- name of client.
+**
+**	Returns:
+**		EX_OK or EX_TEMPFAIL
+*/
+
+static int cltfeatures __P((ENVELOPE *, char *));
+static int
+cltfeatures(e, clientname)
+	ENVELOPE *e;
+	char *clientname;
+{
+	int r, i, idx;
+	char **pvp, c;
+	char pvpbuf[PSBUFSIZE];
+	char flags[64];	/* XXX */
+
+	SM_ASSERT(e != NULL);
+	SM_ASSERT(e->e_mci != NULL);
+	macdefine(&e->e_mci->mci_macro, A_PERM, macid("{client_flags}"), "");
+	pvp = NULL;
+	r = rscap("clt_features", clientname, "", e, &pvp, pvpbuf,
+		  sizeof(pvpbuf));
+	if (r != EX_OK)
+		return EX_OK;
+	if (pvp == NULL || pvp[0] == NULL || (pvp[0][0] & 0377) != CANONNET)
+		return EX_OK;
+	if (pvp[1] != NULL && sm_strncasecmp(pvp[1], "temp", 4) == 0)
+		return EX_TEMPFAIL;
+
+	/* XXX Note: this does not inherit defaults! */
+	for (idx = 0, i = 1; pvp[i] != NULL; i++)
+	{
+		c = pvp[i][0];
+		if (!(isascii(c) && !isspace(c) && isprint(c)))
+			continue;
+		if (idx >= sizeof(flags) - 4)
+			break;
+		flags[idx++] = c;
+		if (isupper(c))
+			flags[idx++] = c;
+		flags[idx++] = ' ';
+	}
+	flags[idx] = '\0';
+
+	macdefine(&e->e_mci->mci_macro, A_TEMP, macid("{client_flags}"), flags);
+	if (tTd(10, 30))
+		sm_dprintf("cltfeatures: mci=%p, flags=%s, {client_flags}=%s\n",
+			e->e_mci, flags, macvalue(macid("{client_flags}"), e));
+	return EX_OK;
+}
+
 /*
 **  DELIVER -- Deliver a message to a list of addresses.
 **
@@ -1370,7 +1429,7 @@ deliver(e, firstto)
 	int rpvect[2];
 	char *mxhosts[MAXMXHOSTS + 1];
 	char *pv[MAXPV + 1];
-	char buf[MAXNAME + 1];
+	char buf[MAXNAME + 1];	/* EAI:ok */
 	char cbuf[MAXPATHLEN];
 
 	errno = 0;
@@ -1440,7 +1499,9 @@ deliver(e, firstto)
 	rpath = remotename(p, m, RF_SENDERADDR|RF_CANONICAL, &rcode, e);
 	if (rcode != EX_OK && bitnset(M_xSMTP, m->m_flags))
 		goto cleanup;
-	if (strlen(rpath) > MAXNAME)
+
+	/* need to check external format, not internal! */
+	if (strlen(rpath) > MAXNAME_I)
 	{
 		rpath = shortenstring(rpath, MAXSHORTSTR);
 
@@ -1597,6 +1658,13 @@ deliver(e, firstto)
 		if (++rcptcount > to->q_mailer->m_maxrcpt)
 			break;
 
+		/*
+		**  prepare envelope for new session to avoid leakage
+		**  between delivery attempts.
+		*/
+
+		smtpclrse(e);
+
 		if (tTd(10, 1))
 		{
 			sm_dprintf("\nsend to ");
@@ -2020,6 +2088,7 @@ deliver(e, firstto)
 		}
 		else
 #endif /* NETUNIX */
+		/* "else" in #if code above */
 		{
 			CurHostName = pv[1];
 							/* XXX ??? */
@@ -2069,7 +2138,7 @@ deliver(e, firstto)
 		{
 			char sep = ':';
 			char *endp;
-			static char hostbuf[MAXNAME + 1];
+			static char hostbuf[MAXNAME_I + 1];
 			bool tried_fallbacksmarthost = false;
 #if DANE
 			unsigned long tlsa_flags;
@@ -2207,6 +2276,7 @@ deliver(e, firstto)
 			}
 			else
 #endif /* NETUNIX */
+			/* "else" in #if code above */
 			{
 				if (port == 0)
 					message("Connecting to %s via %s...",
@@ -2215,22 +2285,48 @@ deliver(e, firstto)
 					message("Connecting to %s port %d via %s...",
 						hostbuf, ntohs(port),
 						m->m_name);
+
+				/*
+				**  XXX OK to do this here already?
+				**  set the current connection information
+				**  required to set {client_flags} in e->e_mci
+				*/
+
+				e->e_mci = mci;
+				if ((i = cltfeatures(e, hostbuf)) != EX_OK)
+				{
+					if (LogLevel > 8)
+					sm_syslog(LOG_WARNING, e->e_id,
+						  "clt_features=TEMPFAIL, host=%s, status=skipped"
+						  , hostbuf);
+					/* XXX handle error! */
+					(void) sm_strlcpy(SmtpError,
+						"clt_features=TEMPFAIL",
+						sizeof(SmtpError));
 #if DANE
-				tlsa_flags |= (ste != NULL) ? Dane : DANE_NEVER;
+					tlsa_flags &= ~TLSAFLTEMP;
+#endif
+				}
+#if DANE
+				/* hack: disable DANE if requested */
+				if (iscltflgset(e, D_NODANE))
+					ste = NULL;
+				tlsa_flags |= ste != NULL ? Dane : DANE_NEVER;
 				dane_vrfy_ctx.dane_vrfy_chk = tlsa_flags;
 				dane_vrfy_ctx.dane_vrfy_port = m->m_port;
 				if (tTd(11, 11))
-					sm_dprintf("makeconnection: before: chk=%d, mode=%lX\n", dane_vrfy_ctx.dane_vrfy_chk, tlsa_flags);
+					sm_dprintf("makeconnection: before: chk=%d, tlsa_flags=%lX, {client_flags}=%s\n", dane_vrfy_ctx.dane_vrfy_chk, tlsa_flags, macvalue(macid("{client_flags}"), e));
 #endif
-				i = makeconnection(hostbuf, port, mci, e,
-						enough
+				if (EX_OK == i)
+					i = makeconnection(hostbuf, port, mci,
+						e, enough
 #if DANE
 						, &tlsa_flags
 #endif
 						);
 #if DANE
 				if (tTd(11, 11))
-					sm_dprintf("makeconnection: after: chk=%d, mode=%lX\n", dane_vrfy_ctx.dane_vrfy_chk, tlsa_flags);
+					sm_dprintf("makeconnection: after: chk=%d, tlsa_flags=%lX\n", dane_vrfy_ctx.dane_vrfy_chk, tlsa_flags);
 				if (dane_vrfy_ctx.dane_vrfy_chk != DANE_ALWAYS)
 					dane_vrfy_ctx.dane_vrfy_chk = DANEMODE(tlsa_flags);
 				if (EX_TEMPFAIL == i &&
@@ -2546,7 +2642,7 @@ deliver(e, firstto)
 			/* tweak niceness */
 			if (m->m_nice != 0)
 				(void) nice(m->m_nice);
-#endif /* HASNICE */
+#endif
 
 			/* reset group id */
 			if (bitnset(M_SPECIFIC_UID, m->m_flags))
@@ -2920,8 +3016,7 @@ deliver(e, firstto)
 			syserr("deliver: cannot create mailer input channel, fd=%d",
 			       mpvect[1]);
 			(void) close(rpvect[0]);
-			(void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
-			mci->mci_out = NULL;
+			SM_CLOSE_FP(mci->mci_out);
 			rcode = EX_OSERR;
 			goto give_up;
 		}
@@ -2939,7 +3034,7 @@ deliver(e, firstto)
 #if STARTTLS || SASL
 		char *srvname;
 		extern SOCKADDR CurHostAddr;
-#endif /* STARTTLS || SASL */
+#endif
 
 #if SASL
 # define DONE_AUTH(f)		bitset(MCIF_AUTHACT, f)
@@ -3017,7 +3112,7 @@ deliver(e, firstto)
 			dane_vrfy_ctx.dane_vrfy_fp[0] = '\0';
 			dane_vrfy_ctx.dane_vrfy_res = 0;
 		}
-# endif
+# endif /* DANE */
 
 #endif /* STARTTLS || SASL */
 
@@ -3026,6 +3121,75 @@ deliver(e, firstto)
 #if SASL
 		mci->mci_saslcap = NULL;
 #endif
+#if _FFR_MTA_STS
+# define USEMTASTS (MTASTS && !SM_TLSI_IS(&(mci->mci_tlsi), TLSI_FL_NOSTS) && !iscltflgset(e, D_NOSTS))
+# if DANE
+#  define CHKMTASTS (USEMTASTS && (ste == NULL || ste->s_tlsa == NULL || SM_TLSI_IS(&(mci->mci_tlsi), TLSI_FL_NODANE)))
+# else
+#  define CHKMTASTS USEMTASTS
+# endif
+#endif /* _FFR_MTA_STS */
+#if _FFR_MTA_STS
+		if (!DONE_STARTTLS(mci->mci_flags))
+		{
+		/*
+		**  HACK: use the domain of the first valid RCPT for STS.
+		**  It seems whoever wrote the specs did not consider
+		**  SMTP sessions versus transactions.
+		**  (but what would you expect from people who try
+		**  to use https for "security" after relying on DNS?)
+		*/
+
+		macdefine(&e->e_macro, A_PERM, macid("{rcpt_addr}"), "");
+# if DANE
+		if (MTASTS && (ste != NULL && ste->s_tlsa != NULL))
+			macdefine(&e->e_macro, A_PERM, macid("{sts_sni}"), "DANE");
+		else
+# endif
+			macdefine(&e->e_macro, A_PERM, macid("{sts_sni}"), "");
+		if (USEMTASTS && firstto->q_user != NULL)
+		{
+			if (tTd(10, 64))
+			{
+				sm_dprintf("firstto ");
+				printaddr(sm_debug_file(), firstto, false);
+			}
+			macdefine(&e->e_macro, A_TEMP,
+				  macid("{rcpt_addr}"), firstto->q_user);
+		}
+		else if (USEMTASTS)
+		{
+			if (tTd(10, 64))
+			{
+				sm_dprintf("tochain ");
+				printaddr(sm_debug_file(), tochain, false);
+			}
+			for (to = tochain; to != NULL; to = to->q_tchain)
+			{
+				if (!QS_IS_UNMARKED(to->q_state))
+					continue;
+				if (to->q_user == NULL)
+					continue;
+				macdefine(&e->e_macro, A_TEMP,
+					  macid("{rcpt_addr}"), to->q_user);
+				break;
+			}
+		}
+		}
+#endif /* _FFR_MTA_STS */
+#if USE_EAI
+		if (!addr_is_ascii(e->e_from.q_paddr) && !e->e_smtputf8)
+			e->e_smtputf8 = true;
+		for (to = tochain; to != NULL && !e->e_smtputf8; to = to->q_tchain)
+		{
+			if (!QS_IS_UNMARKED(to->q_state))
+				continue;
+			if (!addr_is_ascii(to->q_user))
+				e->e_smtputf8 = true;
+		}
+		/* XXX reset e_smtputf8 to original state at the end? */
+#endif /* USE_EAI */
+
 		smtpinit(m, mci, e, ONLY_HELO(mci->mci_flags));
 		CLR_HELO(mci->mci_flags);
 
@@ -3104,6 +3268,13 @@ deliver(e, firstto)
 				{
 					/* start again without STARTTLS */
 					mci->mci_flags |= MCIF_TLSACT;
+# if DANE && _FFR_MTA_STS
+/* if DANE is used (and STS should be used): disable STS */
+/* also check MTASTS and NOSTS flag? */
+					if (ste != NULL && ste->s_tlsa != NULL &&
+					    !SM_TLSI_IS(&(mci->mci_tlsi), TLSI_FL_NODANE))
+						macdefine(&e->e_macro, A_PERM, macid("{rcpt_addr}"), "");
+# endif
 				}
 				else
 				{
@@ -3134,6 +3305,9 @@ deliver(e, firstto)
 					  case EX_UNAVAILABLE:
 						s = "NONE";
 						break;
+					  case EX_CONFIG:
+						s = "CONFIG";
+						break;
 
 					  /* everything else is a failure */
 					  default:
@@ -3155,6 +3329,7 @@ deliver(e, firstto)
 				*/
 
 				if (!bitset(MCIF_TLS, mci->mci_flags) &&
+				    !iscltflgset(e, D_NODANE) &&
 				    ste != NULL &&
 				    ste->s_tlsa != NULL &&
 				    ste->s_tlsa->dane_tlsa_n > 0)
@@ -3178,7 +3353,7 @@ deliver(e, firstto)
 			/*
 			**  rcode == EX_SOFTWARE is special:
 			**  the TLS negotiation failed
-			**  we have to drop the connection no matter what
+			**  we have to drop the connection no matter what.
 			**  However, we call tls_server to give it the chance
 			**  to log the problem and return an appropriate
 			**  error code.
@@ -3213,12 +3388,7 @@ deliver(e, firstto)
 				{
 					/* drop the connection */
 					mci->mci_state = MCIS_QUITING;
-					if (mci->mci_in != NULL)
-					{
-						(void) sm_io_close(mci->mci_in,
-								   SM_TIME_DEFAULT);
-						mci->mci_in = NULL;
-					}
+					SM_CLOSE_FP(mci->mci_out);
 					mci->mci_flags &= ~MCIF_TLSACT;
 					(void) endmailer(mci, e, pv);
 
@@ -3230,6 +3400,10 @@ deliver(e, firstto)
 # if DANE
 					     && dane_vrfy_ctx.dane_vrfy_chk !=
 						DANE_SECURE
+# endif
+# if _FFR_MTA_STS
+					     && !SM_TLSI_IS(&(mci->mci_tlsi),
+							TLSI_FL_STS_NOFB2CLR)
 # endif
 					    )
 					{
@@ -3399,8 +3573,8 @@ deliver(e, firstto)
 	if (bitnset(M_MAKE8BIT, m->m_flags) &&
 	    !bitset(MCIF_7BIT, mci->mci_flags) &&
 	    (p = hvalue("Content-Transfer-Encoding", e->e_header)) != NULL &&
-	     (sm_strcasecmp(p, "quoted-printable") == 0 ||
-	      sm_strcasecmp(p, "base64") == 0) &&
+	     (SM_STRCASEEQ(p, "quoted-printable") ||
+	      SM_STRCASEEQ(p, "base64")) &&
 	    (p = hvalue("Content-Type", e->e_header)) != NULL)
 	{
 		/* may want to convert 7 -> 8 */
@@ -3520,14 +3694,17 @@ deliver(e, firstto)
 
 		/* XXX this isn't pipelined... */
 		rcode = smtpmailfrom(m, mci, e);
+		mci->mci_okrcpts = 0;
+		mci->mci_retryrcpt = rcode == EX_TEMPFAIL;
 		if (rcode == EX_OK)
 		{
-			register int i;
+			register int rc;
 #if PIPELINING
 			ADDRESS *volatile pchain;
 #endif
 
 			/* send the recipient list */
+			rc = EX_OK;
 			tobuf[0] = '\0';
 			mci->mci_retryrcpt = false;
 			mci->mci_tolist = tobuf;
@@ -3544,16 +3721,25 @@ deliver(e, firstto)
 				/* mark recipient state as "ok so far" */
 				to->q_state = QS_OK;
 				e->e_to = to->q_paddr;
+#if _FFR_MTA_STS
+				if (CHKMTASTS && to->q_user != NULL)
+					macdefine(&e->e_macro, A_TEMP,
+						macid("{rcpt_addr}"), to->q_user);
+				else
+					macdefine(&e->e_macro, A_PERM,
+						macid("{rcpt_addr}"), "");
+#endif /* _FFR_MTA_STS */
 #if STARTTLS
-				i = rscheck("tls_rcpt", to->q_user, NULL, e,
+				rc = rscheck("tls_rcpt", to->q_user, NULL, e,
 					    RSF_RMCOMM|RSF_COUNT, 3,
 					    mci->mci_host, e->e_id, NULL, NULL);
-				if (i != EX_OK)
+				if (rc != EX_OK)
 				{
-					markfailure(e, to, mci, i, false);
-					giveresponse(i, to->q_status,  m, mci,
+					to->q_flags |= QINTREPLY;
+					markfailure(e, to, mci, rc, false);
+					giveresponse(rc, to->q_status, m, mci,
 						     ctladdr, xstart, e, to);
-					if (i == EX_TEMPFAIL)
+					if (rc == EX_TEMPFAIL)
 					{
 						mci->mci_retryrcpt = true;
 						to->q_state = QS_RETRY;
@@ -3562,9 +3748,9 @@ deliver(e, firstto)
 				}
 #endif /* STARTTLS */
 
-				i = smtprcpt(to, m, mci, e, ctladdr, xstart);
+				rc = smtprcpt(to, m, mci, e, ctladdr, xstart);
 #if PIPELINING
-				if (i == EX_OK &&
+				if (rc == EX_OK &&
 				    bitset(MCIF_PIPELINED, mci->mci_flags))
 				{
 					/*
@@ -3584,12 +3770,12 @@ deliver(e, firstto)
 					}
 				}
 #endif /* PIPELINING */
-				if (i != EX_OK)
+				if (rc != EX_OK)
 				{
-					markfailure(e, to, mci, i, false);
-					giveresponse(i, to->q_status, m, mci,
+					markfailure(e, to, mci, rc, false);
+					giveresponse(rc, to->q_status, m, mci,
 						     ctladdr, xstart, e, to);
-					if (i == EX_TEMPFAIL)
+					if (rc == EX_TEMPFAIL)
 						to->q_state = QS_RETRY;
 				}
 			}
@@ -3597,12 +3783,12 @@ deliver(e, firstto)
 			/* No recipients in list and no missing responses? */
 			if (tobuf[0] == '\0'
 #if PIPELINING
-			    && bitset(MCIF_PIPELINED, mci->mci_flags)
+			    /* && bitset(MCIF_PIPELINED, mci->mci_flags) */
 			    && mci->mci_nextaddr == NULL
 #endif
 			   )
 			{
-				rcode = EX_OK;
+				rcode = rc;
 				e->e_to = NULL;
 				if (bitset(MCIF_CACHED, mci->mci_flags))
 					smtprset(m, mci, e);
@@ -3613,7 +3799,10 @@ deliver(e, firstto)
 				rcode = smtpdata(m, mci, e, ctladdr, xstart);
 			}
 		}
-		if (rcode == EX_TEMPFAIL && nummxhosts > hostnum)
+
+		if (rcode == EX_TEMPFAIL && nummxhosts > hostnum
+		    && (mci->mci_retryrcpt || mci->mci_okrcpts > 0)
+		   )
 		{
 			/* try next MX site */
 			goto tryhost;
@@ -3697,7 +3886,7 @@ deliver(e, firstto)
 
 		if (CheckpointInterval > 0 && e->e_nsent >= CheckpointInterval)
 		{
-			queueup(e, false, false);
+			queueup(e, QUP_FL_NONE);
 			e->e_nsent = 0;
 		}
 
@@ -3773,7 +3962,13 @@ deliver(e, firstto)
 
 	if (tobuf[0] != '\0')
 	{
-		giveresponse(rcode, NULL, m, mci, ctladdr, xstart, e, NULL);
+		giveresponse(rcode,
+#if _FFR_NULLMX_STATUS
+			(NULL == mci || SM_IS_EMPTY(mci->mci_status))
+				? NULL :
+#endif
+				mci->mci_status,
+			m, mci, ctladdr, xstart, e, NULL);
 #if 0
 		/*
 		**  This code is disabled for now because I am not
@@ -3977,7 +4172,7 @@ markfailure(e, q, mci, rcode, ovr)
 	}
 	if (rcode != EX_OK && q->q_rstatus == NULL &&
 	    q->q_mailer != NULL && q->q_mailer->m_diagtype != NULL &&
-	    sm_strcasecmp(q->q_mailer->m_diagtype, "X-UNIX") == 0)
+	    SM_STRCASEEQ(q->q_mailer->m_diagtype, "X-UNIX"))
 	{
 		char buf[16];
 
@@ -4045,11 +4240,7 @@ endmailer(mci, e, pv)
 	mci_unlock_host(mci);
 
 	/* close output to mailer */
-	if (mci->mci_out != NULL)
-	{
-		(void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
-		mci->mci_out = NULL;
-	}
+	SM_CLOSE_FP(mci->mci_out);
 
 	/* copy any remaining input to transcript */
 	if (mci->mci_in != NULL && mci->mci_state != MCIS_ERROR &&
@@ -4075,11 +4266,7 @@ endmailer(mci, e, pv)
 #endif
 
 	/* now close the input */
-	if (mci->mci_in != NULL)
-	{
-		(void) sm_io_close(mci->mci_in, SM_TIME_DEFAULT);
-		mci->mci_in = NULL;
-	}
+	SM_CLOSE_FP(mci->mci_in);
 	mci->mci_state = MCIS_CLOSED;
 
 	errno = save_errno;
@@ -4195,6 +4382,10 @@ giveresponse(status, dsn, m, mci, ctladdr, xstart, e, to)
 		SM_ASSERT(0);
 	}
 
+	if (tTd(11, 4))
+		sm_dprintf("giveresponse: status=%d, e->e_message=%s, SmtpError=%s\n",
+			status, e->e_message, SmtpError);
+
 	/*
 	**  Compute status message from code.
 	*/
@@ -4230,7 +4421,7 @@ giveresponse(status, dsn, m, mci, ctladdr, xstart, e, to)
 		if (h_errno == TRY_AGAIN)
 			statmsg = sm_errstring(h_errno + E_DNSBASE);
 		else
-#endif /* NAMED_BIND */
+#endif
 		{
 			if (errnum != 0)
 				statmsg = sm_errstring(errnum);
@@ -4295,6 +4486,25 @@ giveresponse(status, dsn, m, mci, ctladdr, xstart, e, to)
 		usestat = true;
 	}
 #endif /* NAMED_BIND */
+#if USE_EAI
+	else if (errnum == 0 && status == EX_DATAERR
+		&& e->e_message != NULL && e->e_message[0] != '\0')
+	{
+		int m;
+
+		/* XREF: 2nd arg must be coordinated with smtpmailfrom() */
+		m = skipaddrhost(e->e_message, false);
+
+		/*
+		**  XXX Why is the SMTP reply code needed here?
+		**  How to avoid a hard-coded value?
+		*/
+
+		(void) sm_snprintf(buf, sizeof(buf), "550 %s", e->e_message + m);
+		statmsg = buf;
+		usestat = true;
+	}
+#endif /* USE_EAI */
 	else
 	{
 		statmsg = exmsg;
@@ -4382,11 +4592,11 @@ giveresponse(status, dsn, m, mci, ctladdr, xstart, e, to)
 		logdelivery(m, mci, dsn, statmsg + off, ctladdr, xstart, e, to, status);
 
 	if (tTd(11, 2))
-		sm_dprintf("giveresponse: status=%d, dsn=%s, e->e_message=%s, errnum=%d\n",
+		sm_dprintf("giveresponse: status=%d, dsn=%s, e->e_message=%s, errnum=%d, statmsg=%s\n",
 			   status,
 			   dsn == NULL ? "" : dsn,
 			   e->e_message == NULL ? "" : e->e_message,
-			   errnum);
+			   errnum, statmsg);
 
 	if (status != EX_TEMPFAIL)
 		setstat(status);
@@ -4448,6 +4658,10 @@ logdelivery(m, mci, dsn, status, ctladdr, xstart, e, to, rcode)
 	int l;
 	time_t now = curtime();
 	char buf[1024];
+#if _FFR_8BITENVADDR
+	char xbuf[SM_MAX(SYSLOG_BUFSIZE, MAXNAME)];	/* EAI:ok */
+#endif
+	char *xstr;
 
 #if (SYSLOG_BUFSIZE) >= 256
 	/* ctladdr: max 106 bytes */
@@ -4550,11 +4764,11 @@ logdelivery(m, mci, dsn, status, ctladdr, xstart, e, to, rcode)
 # if (STATLEN) < 63
 #  undef STATLEN
 #  define STATLEN	63
-# endif /* (STATLEN) < 63 */
+# endif
 # if (STATLEN) > 203
 #  undef STATLEN
 #  define STATLEN	203
-# endif /* (STATLEN) > 203 */
+# endif
 
 	/*
 	**  Notes:
@@ -4574,9 +4788,9 @@ logdelivery(m, mci, dsn, status, ctladdr, xstart, e, to, rcode)
 	**  reply - how to avoid that?
 	*/
 
-	/* only show errors */
-	if (rcode != EX_OK && to != NULL && to->q_rstatus != NULL &&
-	    *to->q_rstatus != '\0')
+	/* only show errors from server */
+	if (rcode != EX_OK && to != NULL && !SM_IS_EMPTY(to->q_rstatus)
+	    && !bitset(QINTREPLY, to->q_flags))
 	{
 		(void) sm_snprintf(bp, SPACELEFT(buf, bp),
 			", reply=%s",
@@ -4593,6 +4807,16 @@ logdelivery(m, mci, dsn, status, ctladdr, xstart, e, to, rcode)
 			shortenstring(e->e_text, STATLEN));
 		bp += strlen(bp);
 	}
+#if _FFR_NULLMX_STATUS
+	/* Hack for MX 0 . : how to make this general? */
+	else if (rcode != EX_OK && NULL == to && dsn != NULL &&
+		 strcmp(dsn, ESCNULLMXRCPT) == 0)
+	{
+		(void) sm_snprintf(bp, SPACELEFT(buf, bp),
+			", status=%s", ERRNULLMX);
+		bp += strlen(bp);
+	}
+#endif
 
 	/* stat: max 210 bytes */
 	if ((bp - buf) > (sizeof(buf) - ((STATLEN) + 20)))
@@ -4626,11 +4850,24 @@ logdelivery(m, mci, dsn, status, ctladdr, xstart, e, to, rcode)
 		}
 		if (p == q)
 			break;
+# if _FFR_8BITENVADDR
+		/* XXX is this correct? dequote all of p? */
+		(void) dequote_internal_chars(p, xbuf, sizeof(xbuf));
+		xstr = xbuf;
+# else
+		xstr = p;
+# endif
 		sm_syslog(LOG_INFO, e->e_id, "to=%.*s [more]%s",
-			  (int) (++q - p), p, buf);
+			  (int) (++q - p), xstr, buf);
 		p = q;
 	}
-	sm_syslog(LOG_INFO, e->e_id, "to=%.*s%s", l, p, buf);
+# if _FFR_8BITENVADDR
+	(void) dequote_internal_chars(p, xbuf, sizeof(xbuf));
+	xstr = xbuf;
+# else
+	xstr = p;
+# endif
+	sm_syslog(LOG_INFO, e->e_id, "to=%.*s%s", l, xstr, buf);
 
 #else /* (SYSLOG_BUFSIZE) >= 256 */
 
@@ -4767,7 +5004,7 @@ putfromline(mci, e)
 		if (bang == NULL)
 		{
 			char *at;
-			char hname[MAXNAME];
+			char hname[MAXNAME];	/* EAI:ok */
 
 			/*
 			**  If we can construct a UUCP path, do so
@@ -5844,8 +6081,8 @@ mailfile(filename, mailer, ctladdr, sfflags, e)
 		if (bitnset(M_MAKE8BIT, mailer->m_flags) &&
 		    !bitset(MCIF_7BIT, mcibuf.mci_flags) &&
 		    (p = hvalue("Content-Transfer-Encoding", e->e_header)) != NULL &&
-		    (sm_strcasecmp(p, "quoted-printable") == 0 ||
-		     sm_strcasecmp(p, "base64") == 0) &&
+		    (SM_STRCASEEQ(p, "quoted-printable") ||
+		     SM_STRCASEEQ(p, "base64")) &&
 		    (p = hvalue("Content-Type", e->e_header)) != NULL)
 		{
 			/* may want to convert 7 -> 8 */
@@ -5876,9 +6113,9 @@ mailfile(filename, mailer, ctladdr, sfflags, e)
 #if HASFCHMOD
 		(void) fchmod(sm_io_getinfo(f, SM_IO_WHAT_FD, NULL),
 			      (MODE_T) mode);
-#else /* HASFCHMOD */
+#else
 		(void) chmod(filename, (MODE_T) mode);
-#endif /* HASFCHMOD */
+#endif
 		if (sm_io_close(f, SM_TIME_DEFAULT) < 0)
 			setstat(EX_IOERR);
 		(void) sm_io_flush(smioout, SM_TIME_DEFAULT);
@@ -6017,6 +6254,7 @@ hostsignature(m, host, ad)
 	int hl;
 	char *hp;
 	char *endp;
+	char *lstr;
 	int oldoptions = _res.options;
 	char *mxhosts[MAXMXHOSTS + 1];
 	unsigned short mxprefs[MAXMXHOSTS + 1];
@@ -6120,10 +6358,9 @@ hostsignature(m, host, ad)
 			auto int rcode;
 			int ttl;
 
-			GETMPORT(m);
 			nmx = getmxrr(hp, mxhosts, mxprefs,
 				      DROPLOCALHOST|TRYFALLBACK|(ad ? ISAD :0),
-				      &rcode, &ttl, M_PORT(m));
+				      &rcode, &ttl, GETMPORT(m));
 			if (nmx <= 0)
 			{
 				int save_errno;
@@ -6136,8 +6373,8 @@ hostsignature(m, host, ad)
 				mci->mci_herrno = h_errno;
 				mci->mci_lastuse = now;
 				if (nmx == NULLMX)
-					mci_setstat(mci, rcode, "5.7.27",
-						    "550 Host does not accept mail");
+					mci_setstat(mci, rcode, ESCNULLMXRCPT,
+						    ERRNULLMX);
 				else if (rcode == EX_NOHOST)
 					mci_setstat(mci, rcode, "5.1.2",
 						    "550 Host unknown");
@@ -6218,7 +6455,8 @@ hostsignature(m, host, ad)
 			*endp++ = sep;
 		prevsep = sep;
 	}
-	makelower(s->s_hostsig.hs_sig);
+	lstr = makelower_a(&s->s_hostsig.hs_sig, NULL);
+	ASSIGN_IFDIFF(s->s_hostsig.hs_sig, lstr);
 	if (ConfigLevel < 2)
 		_res.options = oldoptions;
 #else /* NAMED_BIND */
@@ -6438,6 +6676,7 @@ starttls(m, mci, e
 {
 	int smtpresult;
 	int result = 0;
+	int ret = EX_OK;
 	int rfd, wfd;
 	SSL *clt_ssl = NULL;
 	time_t tlsstart;
@@ -6454,30 +6693,7 @@ starttls(m, mci, e
 		return EX_TEMPFAIL;
 	}
 
-	smtpmessage("STARTTLS", m, mci);
-
-	/* get the reply */
-	smtpresult = reply(m, mci, e, TimeOuts.to_starttls, NULL, NULL,
-			XS_STARTTLS);
-
-	/* check return code from server */
-	if (REPLYTYPE(smtpresult) == 4)
-		return EX_TEMPFAIL;
-	if (smtpresult == 501)
-		return EX_USAGE;
-	if (smtpresult == -1)
-		return smtpresult;
-
-	/* not an expected reply but we have to deal with it */
-	if (REPLYTYPE(smtpresult) == 5)
-		return EX_UNAVAILABLE;
-	if (smtpresult != 220)
-		return EX_PROTOCOL;
-
-	if (LogLevel > 13)
-		sm_syslog(LOG_INFO, NOQID, "STARTTLS=client, start=ok");
-
-	/* start connection */
+	/* clt_ssl needed for get_tls_se_features() hence create here */
 	if ((clt_ssl = SSL_new(clt_ctx)) == NULL)
 	{
 		if (LogLevel > 5)
@@ -6488,14 +6704,55 @@ starttls(m, mci, e
 		}
 		return EX_SOFTWARE;
 	}
-	/* SSL_clear(clt_ssl); ? */
 
-	if (get_tls_se_options(e, clt_ssl, &mci->mci_tlsi, false) != 0)
+	ret = get_tls_se_features(e, clt_ssl, &mci->mci_tlsi, false);
+	if (EX_OK != ret)
 	{
 		sm_syslog(LOG_ERR, NOQID,
-			  "STARTTLS=client, get_tls_se_options=fail");
-		return EX_SOFTWARE;
+			  "STARTTLS=client, get_tls_se_features=failed, ret=%d",
+				ret);
+		goto fail;
 	}
+
+	smtpmessage("STARTTLS", m, mci);
+
+	/* get the reply */
+	smtpresult = reply(m, mci, e, TimeOuts.to_starttls, NULL, NULL,
+			XS_STARTTLS);
+
+	/* check return code from server */
+	if (REPLYTYPE(smtpresult) == 4)
+	{
+		ret = EX_TEMPFAIL;
+		goto fail;
+	}
+	if (smtpresult == 501)
+	{
+		ret = EX_USAGE;
+		goto fail;
+	}
+	if (smtpresult == -1)
+	{
+		ret = smtpresult;
+		goto fail;
+	}
+
+	/* not an expected reply but we have to deal with it */
+	if (REPLYTYPE(smtpresult) == 5)
+	{
+		ret = EX_UNAVAILABLE;
+		goto fail;
+	}
+	if (smtpresult != 220)
+	{
+		ret = EX_PROTOCOL;
+		goto fail;
+	}
+
+	if (LogLevel > 13)
+		sm_syslog(LOG_INFO, NOQID, "STARTTLS=client, start=ok");
+
+	/* SSL_clear(clt_ssl); ? */
 	result = SSL_set_ex_data(clt_ssl, TLSsslidx, &mci->mci_tlsi);
 	if (0 == result)
 	{
@@ -6506,7 +6763,7 @@ starttls(m, mci, e
 				  result, TLSsslidx);
 			tlslogerr(LOG_WARNING, 9, "client");
 		}
-		return EX_SOFTWARE;
+		goto fail;
 	}
 # if DANE
 	if (SM_TLSI_IS(&(mci->mci_tlsi), TLSI_FL_NODANE))
@@ -6515,29 +6772,50 @@ starttls(m, mci, e
 	{
 		int r;
 
-#  define SM_IS_EMPTY(s)	(NULL == (s) || '\0' == *(s))
-
 		/* set SNI only if there is a TLSA RR */
 		if (dane_get_tlsa(dane_vrfy_ctx) != NULL &&
 		    !(SM_IS_EMPTY(dane_vrfy_ctx->dane_vrfy_host) &&
-		      SM_IS_EMPTY(dane_vrfy_ctx->dane_vrfy_sni)) &&
-		    (r = SSL_set_tlsext_host_name(clt_ssl,
+		      SM_IS_EMPTY(dane_vrfy_ctx->dane_vrfy_sni)))
+		{
+#  if _FFR_MTA_STS
+			SM_FREE(STS_SNI);
+#  endif
+			if ((r = SSL_set_tlsext_host_name(clt_ssl,
 				(!SM_IS_EMPTY(dane_vrfy_ctx->dane_vrfy_sni)
 				? dane_vrfy_ctx->dane_vrfy_sni
 				: dane_vrfy_ctx->dane_vrfy_host))) <= 0)
+			{
+				if (LogLevel > 5)
+				{
+					sm_syslog(LOG_ERR, NOQID,
+						  "STARTTLS=client, host=%s, SSL_set_tlsext_host_name=%d",
+						  dane_vrfy_ctx->dane_vrfy_host, r);
+				}
+				tlslogerr(LOG_ERR, 5, "client");
+				/* return EX_SOFTWARE; */
+			}
+		}
+	}
+	memcpy(&mci->mci_tlsi.tlsi_dvc, dane_vrfy_ctx, sizeof(*dane_vrfy_ctx));
+# endif /* DANE */
+# if _FFR_MTA_STS
+	if (STS_SNI != NULL)
+	{
+		int r;
+
+		if ((r = SSL_set_tlsext_host_name(clt_ssl, STS_SNI)) <= 0)
 		{
 			if (LogLevel > 5)
 			{
 				sm_syslog(LOG_ERR, NOQID,
 					  "STARTTLS=client, host=%s, SSL_set_tlsext_host_name=%d",
-					  dane_vrfy_ctx->dane_vrfy_host, r);
+					  STS_SNI, r);
 			}
 			tlslogerr(LOG_ERR, 5, "client");
 			/* return EX_SOFTWARE; */
 		}
 	}
-	memcpy(&mci->mci_tlsi.tlsi_dvc, dane_vrfy_ctx, sizeof(*dane_vrfy_ctx));
-# endif /* DANE */
+# endif /* _FFR_MTA_STS */
 
 	rfd = sm_io_getinfo(mci->mci_in, SM_IO_WHAT_FD, NULL);
 	wfd = sm_io_getinfo(mci->mci_out, SM_IO_WHAT_FD, NULL);
@@ -6553,7 +6831,7 @@ starttls(m, mci, e
 				  result);
 			tlslogerr(LOG_WARNING, 9, "client");
 		}
-		return EX_SOFTWARE;
+		goto fail;
 	}
 	SSL_set_connect_state(clt_ssl);
 	tlsstart = curtime();
@@ -6584,8 +6862,7 @@ starttls(m, mci, e
 			tlslogerr(LOG_WARNING, 9, "client");
 		}
 
-		SM_SSL_FREE(clt_ssl);
-		return EX_SOFTWARE;
+		goto fail;
 	}
 	mci->mci_ssl = clt_ssl;
 	result = tls_get_info(mci->mci_ssl, false, mci->mci_host,
@@ -6595,10 +6872,12 @@ starttls(m, mci, e
 	if (sfdctls(&mci->mci_in, &mci->mci_out, mci->mci_ssl) == 0)
 		return EX_OK;
 
+  fail:
 	/* failure */
 	SM_SSL_FREE(clt_ssl);
-	return EX_SOFTWARE;
+	return (EX_OK == ret) ? EX_SOFTWARE : ret;
 }
+
 /*
 **  ENDTLSCLT -- shutdown secure connection (client side)
 **
diff --git a/src/domain.c b/src/domain.c
index c45abf1acc09..027038e283db 100644
--- a/src/domain.c
+++ b/src/domain.c
@@ -13,7 +13,7 @@
 
 #include 
 #include "map.h"
-#if _FFR_EAI
+#if USE_EAI
 #include 
 #endif
 
@@ -23,8 +23,9 @@ SM_RCSID("@(#)$Id: domain.c,v 8.205 2013-11-22 20:51:55 ca Exp $ (with name serv
 SM_RCSID("@(#)$Id: domain.c,v 8.205 2013-11-22 20:51:55 ca Exp $ (without name server)")
 #endif
 
-#if NAMED_BIND
+#include 
 
+#if NAMED_BIND
 # include 
 # include 
 # if DANE
@@ -114,14 +115,13 @@ tlsaadd(name, dr, dane_tlsa, dnsrc, n, pttl, level)
 
 		/* check previous error and keep the "most important" one? */
 		dane_tlsa->dane_tlsa_dnsrc = dnsrc;
-# if DNSSEC_TEST
+#  if DNSSEC_TEST
 		if (tTd(8, 110))
-			*pttl = tTdlevel(8)-110;	/* how to make this an option? */
+			*pttl = tTdlevel(8)-110; /* how to make this an option? */
 		else
-# else
+#  endif
+		/* "else" in #if code above */
 			*pttl = SM_NEG_TTL;
-# endif
-
 		return n;
 	}
 	if (dr == NULL)
@@ -418,23 +418,23 @@ getfallbackmxrr(host)
 	int ttl;
 	static time_t renew = 0;
 
-#if 0
+# if 0
 	/* This is currently done before this function is called. */
-	if (host == NULL || *host == '\0')
+	if (SM_IS_EMPTY(host))
 		return 0;
-#endif /* 0 */
+# endif /* 0 */
 	if (NumFallbackMXHosts > 0 && renew > curtime())
 		return NumFallbackMXHosts;
 
 	/* for DANE we need to invoke getmxrr() to get the TLSA RRs. */
-#if !DANE
+# if !DANE
 	if (host[0] == '[')
 	{
 		fbhosts[0] = host;
 		NumFallbackMXHosts = 1;
 	}
 	else
-#endif
+# endif
 	{
 		/* free old data */
 		for (i = 0; i < NumFallbackMXHosts; i++)
@@ -447,9 +447,9 @@ getfallbackmxrr(host)
 		*/
 
 		NumFallbackMXHosts = getmxrr(host, fbhosts, NULL,
-#if DANE
+# if DANE
 					(DANE_SECURE == Dane) ?  ISAD :
-#endif
+# endif
 					0,
 					&rcode, &ttl, 0);
 		renew = curtime() + ttl;
@@ -496,11 +496,44 @@ fallbackmxrr(nmx, prefs, mxhosts)
 	return nmx;
 }
 
+# if USE_EAI
+
+/*
+**  HN2ALABEL -- convert hostname in U-label format to A-label format
+**
+**	Parameters:
+**		hostname -- hostname in U-label format
+**
+**	Returns:
+**		hostname in A-label format in a local static buffer.
+**		It must be copied before the function is called again.
+*/
+
+const char *
+hn2alabel(hostname)
+	const char *hostname;
+{
+	UErrorCode error = U_ZERO_ERROR;
+	UIDNAInfo info = UIDNA_INFO_INITIALIZER;
+	UIDNA *idna;
+	static char buf[MAXNAME_I];	/* XXX ??? */
+
+	if (addr_is_ascii(hostname))
+		return hostname;
+	idna = uidna_openUTS46(UIDNA_NONTRANSITIONAL_TO_ASCII, &error);
+	(void) uidna_nameToASCII_UTF8(idna, hostname, strlen(hostname),
+				     buf, sizeof(buf) - 1,
+				     &info, &error);
+	uidna_close(idna);
+	return buf;
+}
+# endif /* USE_EAI */
+
 /*
 **  GETMXRR -- get MX resource records for a domain
 **
 **	Parameters:
-**		host -- the name of the host to MX.
+**		host -- the name of the host to MX [must be x]
 **		mxhosts -- a pointer to a return buffer of MX records.
 **		mxprefs -- a pointer to a return buffer of MX preferences.
 **			If NULL, don't try to populate.
@@ -554,10 +587,11 @@ getmxrr(host, mxhosts, mxprefs, flags, rcode, pttl, port)
 	int ttl = 0;
 	bool ad;
 	bool seennullmx = false;
-	extern int res_query(), res_search();
+	extern int res_query __P((const char *, int, int, u_char *, int));
+	extern int res_search __P((const char *, int, int , u_char *, int));
 # if DANE
 	bool cname2mx;
-	char qname[MAXNAME];
+	char qname[MAXNAME];	/* EAI: copy of host: ok? */
 	unsigned long old_options = 0;
 # endif
 
@@ -605,22 +639,13 @@ getmxrr(host, mxhosts, mxprefs, flags, rcode, pttl, port)
 		(void) sm_strlcpy(qname, host, sizeof(qname));
 # endif /* DANE */
 
-# if _FFR_EAI
+# if USE_EAI
 	if (!addr_is_ascii(host))
 	{
-		char buf[1024];
-		UErrorCode error = U_ZERO_ERROR;
-		UIDNAInfo info = UIDNA_INFO_INITIALIZER;
-		UIDNA *idna;
-
-		idna = uidna_openUTS46(UIDNA_NONTRANSITIONAL_TO_ASCII, &error);
-		(void) uidna_nameToASCII_UTF8(idna, host, strlen(host),
-					     buf, sizeof(buf) - 1,
-					     &info, &error);
-		uidna_close(idna);
-		host = sm_rpool_strdup_x(CurEnv->e_rpool, buf);
+		/* XXX memory leak? */
+		host = sm_rpool_strdup_x(CurEnv->e_rpool, hn2alabel(host));
 	}
-# endif /* _FFR_EAI */
+# endif /* USE_EAI */
 
 	/*
 	**  If we don't have MX records in our host switch, don't
@@ -865,7 +890,7 @@ getmxrr(host, mxhosts, mxprefs, flags, rcode, pttl, port)
 	/* delete duplicates from list (yes, some bozos have duplicates) */
 	for (i = 0; i < nmx - 1; )
 	{
-		if (sm_strcasecmp(mxhosts[i], mxhosts[i + 1]) != 0)
+		if (!SM_STRCASEEQ(mxhosts[i], mxhosts[i + 1]))
 			i++;
 		else
 		{
@@ -980,6 +1005,25 @@ getmxrr(host, mxhosts, mxprefs, flags, rcode, pttl, port)
 # endif /* NETINET6 */
 				else
 				{
+# if USE_EAI
+					char *hn;
+
+					hn = MXHostBuf + 1;
+					if (!addr_is_ascii(hn))
+					{
+						const char *ahn;
+
+						ahn = hn2alabel(hn);
+						if (strlen(ahn) >= sizeof(MXHostBuf) - 1)
+						{
+							*rcode = EX_CONFIG;
+							syserr("Encoded host name %s too long",
+							       shortenstring(ahn, MAXSHORTSTR));
+							goto error;
+						}
+						(void) sm_strlcpy(hn, ahn, sizeof(MXHostBuf) - 1);
+					}
+# endif /* USE_EAI */
 					trycanon = true;
 					mxhosts[0]++;
 				}
diff --git a/src/envelope.c b/src/envelope.c
index 08d48b171e6a..b1e61f134e15 100644
--- a/src/envelope.c
+++ b/src/envelope.c
@@ -12,6 +12,7 @@
  */
 
 #include 
+#include 
 
 SM_RCSID("@(#)$Id: envelope.c,v 8.313 2013-11-22 20:51:55 ca Exp $")
 
@@ -370,8 +371,8 @@ dropenvelope(e, fulldrop, split)
 			    strcmp(e->e_from.q_paddr, "<>") != 0 &&
 			    sm_strncasecmp(e->e_from.q_paddr, "owner-", 6) != 0 &&
 			    (strlen(e->e_from.q_paddr) <= 8 ||
-			     sm_strcasecmp(&e->e_from.q_paddr[strlen(e->e_from.q_paddr) - 8],
-					   "-request") != 0))
+			     !SM_STRCASEEQ(&e->e_from.q_paddr[strlen(e->e_from.q_paddr) - 8],
+					   "-request")))
 			{
 				for (q = e->e_sendqueue; q != NULL;
 				     q = q->q_next)
@@ -517,7 +518,7 @@ dropenvelope(e, fulldrop, split)
 	    e->e_class >= 0)
 	{
 		auto ADDRESS *rlist = NULL;
-		char pcopy[MAXNAME];
+		char pcopy[MAXNAME_I];
 
 		if (failure_return)
 		{
@@ -553,11 +554,7 @@ dropenvelope(e, fulldrop, split)
 		}
 		if (!panic)
 		{
-			if (e->e_dfp != NULL)
-			{
-				(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT);
-				e->e_dfp = NULL;
-			}
+			SM_CLOSE_FP(e->e_dfp);
 			(void) xunlink(queuename(e, DATAFL_LETTER));
 		}
 		if (panic && QueueMode == QM_LOST)
@@ -584,7 +581,7 @@ dropenvelope(e, fulldrop, split)
 	else if (queueit || !bitset(EF_INQUEUE, e->e_flags))
 	{
 		if (!split)
-			queueup(e, false, true);
+			queueup(e, QUP_FL_MSYNC);
 		else
 		{
 			ENVELOPE *oldsib;
@@ -607,8 +604,8 @@ dropenvelope(e, fulldrop, split)
 					(long) geteuid());
 			}
 			for (ee = e->e_sibling; ee != NULL; ee = ee->e_sibling)
-				queueup(ee, false, true);
-			queueup(e, false, true);
+				queueup(ee, QUP_FL_MSYNC);
+			queueup(e, QUP_FL_MSYNC);
 
 			/* clean up */
 			for (ee = e->e_sibling; ee != NULL; ee = ee->e_sibling)
@@ -621,12 +618,7 @@ dropenvelope(e, fulldrop, split)
 				unlockqueue(ee);
 
 				/* this envelope is marked unused */
-				if (ee->e_dfp != NULL)
-				{
-					(void) sm_io_close(ee->e_dfp,
-							   SM_TIME_DEFAULT);
-					ee->e_dfp = NULL;
-				}
+				SM_CLOSE_FP(ee->e_dfp);
 				ee->e_id = NULL;
 				ee->e_flags &= ~EF_HAS_DF;
 			}
@@ -641,11 +633,7 @@ dropenvelope(e, fulldrop, split)
 	unlockqueue(e);
 
 	/* make sure that this envelope is marked unused */
-	if (e->e_dfp != NULL)
-	{
-		(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT);
-		e->e_dfp = NULL;
-	}
+	SM_CLOSE_FP(e->e_dfp);
 	e->e_id = NULL;
 	e->e_flags &= ~EF_HAS_DF;
 	if (panic)
@@ -690,11 +678,8 @@ clearenvelope(e, fullclear, rpool)
 	if (!fullclear)
 	{
 		/* clear out any file information */
-		if (e->e_xfp != NULL)
-			(void) sm_io_close(e->e_xfp, SM_TIME_DEFAULT);
-		if (e->e_dfp != NULL)
-			(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT);
-		e->e_xfp = e->e_dfp = NULL;
+		SM_CLOSE_FP(e->e_xfp);
+		SM_CLOSE_FP(e->e_dfp);
 	}
 
 	/*
@@ -950,8 +935,7 @@ closexscript(e)
 	if (e->e_lockfp == NULL)
 		syserr("closexscript: job not locked");
 #endif
-	(void) sm_io_close(e->e_xfp, SM_TIME_DEFAULT);
-	e->e_xfp = NULL;
+	SM_CLOSE_FP(e->e_xfp);
 }
 /*
 **  SETSENDER -- set the person who this message is from
@@ -975,7 +959,7 @@ closexscript(e)
 **	ourselves.
 **
 **	Parameters:
-**		from -- the person we would like to believe this message
+**		from -- the person we would like to believe this message [i]
 **			is from, as specified on the command line.
 **		e -- the envelope in which we would like the sender set.
 **		delimptr -- if non-NULL, set to the location of the
@@ -1003,7 +987,7 @@ setsender(from, e, delimptr, delimchar, internal)
 	register char **pvp;
 	char *realname = NULL;
 	char *bp;
-	char buf[MAXNAME + 2];
+	char buf[MAXNAME_I + 2];
 	char pvpbuf[PSBUFSIZE];
 	extern char *FullName;
 
@@ -1021,7 +1005,7 @@ setsender(from, e, delimptr, delimchar, internal)
 	if (bitset(EF_QUEUERUN, e->e_flags) || OpMode == MD_SMTP ||
 	    OpMode == MD_ARPAFTP || OpMode == MD_DAEMON)
 		realname = from;
-	if (realname == NULL || realname[0] == '\0')
+	if (SM_IS_EMPTY(realname))
 		realname = username();
 
 	if (ConfigLevel < 2)
@@ -1044,7 +1028,7 @@ setsender(from, e, delimptr, delimchar, internal)
 		if (from != NULL && LogLevel > 2)
 		{
 			char *p;
-			char ebuf[MAXNAME * 2 + 2];
+			char ebuf[MAXNAME * 2 + 2]; /* EAI:ok? */
 
 			p = macvalue('_', e);
 			if (p == NULL)
@@ -1054,8 +1038,9 @@ setsender(from, e, delimptr, delimchar, internal)
 				if (host == NULL)
 					host = MyHostName;
 				(void) sm_snprintf(ebuf, sizeof(ebuf),
-						   "%.*s@%.*s", MAXNAME,
-						   realname, MAXNAME, host);
+						   "%.*s@%.*s",
+						   MAXNAME, realname, /* EAI: see above */
+						   MAXNAME, host); /* EAI: see above */
 				p = ebuf;
 			}
 			sm_syslog(LOG_NOTICE, e->e_id,
@@ -1074,6 +1059,7 @@ setsender(from, e, delimptr, delimchar, internal)
 			SuprErrs = true;
 		}
 		if (from == realname ||
+/* XXX realname must be [i] */
 		    parseaddr(from = realname,
 			      &e->e_from, RF_COPYALL|RF_SENDERADDR, ' ',
 			      NULL, e, false) == NULL)
@@ -1083,6 +1069,7 @@ setsender(from, e, delimptr, delimchar, internal)
 			SuprErrs = true;
 			expand("\201n", nbuf, sizeof(nbuf), e);
 			from = sm_rpool_strdup_x(e->e_rpool, nbuf);
+/* XXX from must be [i] */
 			if (parseaddr(from, &e->e_from, RF_COPYALL, ' ',
 				      NULL, e, false) == NULL &&
 			    parseaddr(from = "postmaster", &e->e_from,
diff --git a/src/err.c b/src/err.c
index 8bd02669c5e0..c76fb7714066 100644
--- a/src/err.c
+++ b/src/err.c
@@ -19,6 +19,9 @@ SM_RCSID("@(#)$Id: err.c,v 8.206 2013-11-22 20:51:55 ca Exp $")
 # include 
 # include 			/* for LDAP error codes */
 #endif
+#if _FFR_8BITENVADDR
+# include 
+#endif
 
 static void	putoutmsg __P((char *, bool, bool));
 static void	puterrmsg __P((char *));
@@ -375,7 +378,7 @@ usrerrenh(enhsc, fmt, va_alist)
 	char *errtxt;
 	SM_VA_LOCAL_DECL
 
-	if (enhsc == NULL || *enhsc == '\0')
+	if (SM_IS_EMPTY(enhsc))
 	{
 		if (fmt[0] == '5' || fmt[0] == '6')
 			enhsc = "5.0.0";
@@ -730,8 +733,13 @@ putoutmsg(msg, holdmsg, heldmsg)
 				     (OpMode == MD_SMTP || OpMode == MD_DAEMON)
 					? msg : errtxt);
 #if !PIPELINING
-	/* XXX can't flush here for SMTP pipelining */
-	if (msg[3] == ' ')
+	/*
+	**  Note: in case of an SMTP reply this should check
+	**  that the last line of msg is not a continuation line
+	**  but that's probably not worth the effort.
+	*/
+
+	if (ISSMTPREPLY(msg))
 		(void) sm_io_flush(OutChannel, SM_TIME_DEFAULT);
 	if (!sm_io_error(OutChannel) || DisConnected)
 		return;
@@ -893,6 +901,47 @@ extenhsc(s, delim, e)
 	return l + h;
 }
 
+#if USE_EAI
+/*
+**  SKIPADDRHOST -- skip address and host in a message
+**
+**	Parameters:
+**		s -- string with possible address and host
+**		skiphost -- skip also host?
+**
+**	Returns:
+**		0  -- no address and host
+**		>0 -- position after address (and host)
+*/
+
+int
+skipaddrhost(s, skiphost)
+	const char *s;
+	bool skiphost;
+{
+	char *str;
+	size_t len;
+
+#define SM_ADDR_DELIM "... "
+	if (s == NULL)
+		return 0;
+	str = strstr(s, SM_ADDR_DELIM);
+	if (str == NULL)
+		return 0;
+	str += sizeof(SM_ADDR_DELIM) + 1;
+	len = strlen(s);
+	if (str >= s + len)
+		return 0;
+	if (!skiphost)
+		return str - s + 1;
+
+	str = strchr(str, ' ');
+	if (str >= s + len)
+		return 0;
+	return str - s + 1;
+}
+#endif /* USE_EAI */
+
 /*
 **  FMTMSG -- format a message into buffer.
 **
@@ -921,7 +970,7 @@ fmtmsg(eb, to, num, enhsc, eno, fmt, ap)
 	const char *enhsc;
 	int eno;
 	const char *fmt;
-	SM_VA_LOCAL_DECL
+	va_list ap;
 {
 	char del;
 	int l;
@@ -1004,21 +1053,29 @@ fmtmsg(eb, to, num, enhsc, eno, fmt, ap)
 	     strncmp(num, "550", 3) == 0 ||
 	     strncmp(num, "553", 3) == 0))
 	{
+#if _FFR_8BITENVADDR
+		char xbuf[MAXNAME + 1];	/* EAI:ok */
+		int len;
+
+		len = sizeof(xbuf);
+		(void) sm_strlcpy(xbuf, to, len);
+		(void) dequote_internal_chars(xbuf, xbuf, len);
+		(void) sm_strlcpyn(eb, spaceleft, 2,
+				   shortenstring(xbuf, MAXSHORTSTR), "... ");
+		eb += strlen(eb);
+#else /* _FFR_8BITENVADDR */
 		(void) sm_strlcpyn(eb, spaceleft, 2,
 				   shortenstring(to, MAXSHORTSTR), "... ");
-		spaceleft -= strlen(eb);
-#if _FFR_EAI
-		eb += strlen(eb);
-#else
 		while (*eb != '\0')
 			*eb++ &= 0177;
-#endif
+#endif /* _FFR_8BITENVADDR */
+		spaceleft -= strlen(eb);
 	}
 
 	/* output the message */
 	(void) sm_vsnprintf(eb, spaceleft, fmt, ap);
 	spaceleft -= strlen(eb);
-#if _FFR_EAI
+#if USE_EAI
 	eb += strlen(eb);
 #else
 	while (*eb != '\0')
diff --git a/src/headers.c b/src/headers.c
index da84a8009328..a7896f420d97 100644
--- a/src/headers.c
+++ b/src/headers.c
@@ -13,6 +13,7 @@
 
 #include 
 #include 
+#include 
 
 SM_RCSID("@(#)$Id: headers.c,v 8.320 2013-11-22 20:51:55 ca Exp $")
 
@@ -306,15 +307,20 @@ dochompheader(line, pflag, hdrp, e)
 		if (rs != NULL)
 		{
 			int l, k;
-			char qval[MAXNAME];
+			char qval[MAXNAME_I];
+			XLENDECL
 
 			l = 0;
+			XLEN('"');
 			qval[l++] = '"';
 
 			/* - 3 to avoid problems with " at the end */
-			/* should be sizeof(qval), not MAXNAME */
-			for (k = 0; fvalue[k] != '\0' && l < MAXNAME - 3; k++)
+			for (k = 0;
+			     fvalue[k] != '\0' && l < sizeof(qval) - 3
+			     && xlen < MAXNAME - 3;
+			     k++)
 			{
+				XLEN(fvalue[k]);
 				switch (fvalue[k])
 				{
 				  /* XXX other control chars? */
@@ -326,6 +332,7 @@ dochompheader(line, pflag, hdrp, e)
 					qval[l++] = ' ';
 					break;
 				  case '"':
+					XLEN('\\');
 					qval[l++] = '\\';
 					/* FALLTHROUGH */
 				  default:
@@ -333,15 +340,18 @@ dochompheader(line, pflag, hdrp, e)
 					break;
 				}
 			}
+			/* just for "completeness": xlen not used afterwards */
+			XLEN('"');
 			qval[l++] = '"';
 			qval[l] = '\0';
 			k += strlen(fvalue + k);
-			if (k >= MAXNAME)
+			if (k >= sizeof(qval))
 			{
 				if (LogLevel > 9)
 					sm_syslog(LOG_WARNING, e->e_id,
 						  "Warning: truncated header '%s' before check with '%s' len=%d max=%d",
-						  fname, rs, k, MAXNAME - 1);
+						  fname, rs, k,
+						  (int) (sizeof(qval) - 1));
 			}
 			macdefine(&e->e_macro, A_TEMP,
 				macid("{currHeader}"), qval);
@@ -375,7 +385,7 @@ dochompheader(line, pflag, hdrp, e)
 	if (!bitset(EF_RESENT, e->e_flags))
 		p += 7;
 	if (!bitset(pflag, CHHDR_DEF) && !headeronly &&
-	    !bitset(EF_QUEUERUN, e->e_flags) && sm_strcasecmp(fname, p) == 0)
+	    !bitset(EF_QUEUERUN, e->e_flags) && SM_STRCASEEQ(fname, p))
 	{
 		if (e->e_from.q_paddr != NULL &&
 		    e->e_from.q_mailer != NULL &&
@@ -394,7 +404,7 @@ dochompheader(line, pflag, hdrp, e)
 	/* delete default value for this header */
 	for (hp = hdrp; (h = *hp) != NULL; hp = &h->h_link)
 	{
-		if (sm_strcasecmp(fname, h->h_field) == 0 &&
+		if (SM_STRCASEEQ(fname, h->h_field) &&
 		    !bitset(H_USER, h->h_flags) &&
 		    !bitset(H_FORCE, h->h_flags))
 		{
@@ -434,9 +444,12 @@ dochompheader(line, pflag, hdrp, e)
 	}
 
 	/* create a new node */
-	h = (HDR *) sm_rpool_malloc_x(e->e_rpool, sizeof(*h));
-	h->h_field = sm_rpool_strdup_x(e->e_rpool, fname);
-	h->h_value = sm_rpool_strdup_x(e->e_rpool, fvalue);
+	h = (HDR *) sm_rpool_malloc_tagged_x(e->e_rpool, sizeof(*h), "header",
+			pflag, bitset(pflag, CHHDR_DEF) ? 0 : 1);
+	h->h_field = sm_rpool_strdup_tagged_x(e->e_rpool, fname, "h_field",
+			pflag, bitset(pflag, CHHDR_DEF) ? 0 : 1);
+	h->h_value = sm_rpool_strdup_tagged_x(e->e_rpool, fvalue, "h_value",
+			pflag, bitset(pflag, CHHDR_DEF) ? 0 : 1);
 	h->h_link = NULL;
 	memmove((char *) h->h_mflags, (char *) mopts, sizeof(mopts));
 	h->h_macro = mid;
@@ -505,12 +518,12 @@ chompheader(line, pflag, hdrp, e)
 	/* quote this if user (not config file) input */
 	if (bitset(pflag, CHHDR_USER))
 	{
-		char xbuf[MAXLINE];
+		char xbuf[MAXLINE]; /* EAI:ok; actual buffer might be greater */
 		char *xbp = NULL;
 		int xbufs;
 
 		xbufs = sizeof(xbuf);
-		xbp = quote_internal_chars(line, xbuf, &xbufs);
+		xbp = quote_internal_chars(line, xbuf, &xbufs, NULL);
 		if (tTd(31, 7))
 		{
 			sm_dprintf("chompheader: quoted: ");
@@ -626,7 +639,7 @@ addheader(field, value, flags, e, space)
 	/* find current place in list -- keep back pointer? */
 	for (hp = hdrlist; (h = *hp) != NULL; hp = &h->h_link)
 	{
-		if (sm_strcasecmp(field, h->h_field) == 0)
+		if (SM_STRCASEEQ(field, h->h_field))
 			break;
 	}
 
@@ -728,7 +741,7 @@ hvalue(field, header)
 	for (h = header; h != NULL; h = h->h_link)
 	{
 		if (!bitset(H_DEFAULT, h->h_flags) &&
-		    sm_strcasecmp(h->h_field, field) == 0)
+		    SM_STRCASEEQ(h->h_field, field))
 		{
 			char *s;
 
@@ -921,10 +934,10 @@ eatheader(e, full, log)
 		p = "resent-message-id";
 		if (!bitset(EF_RESENT, e->e_flags))
 			p += 7;
-		if (sm_strcasecmp(h->h_field, p) == 0)
+		if (SM_STRCASEEQ(h->h_field, p))
 		{
 			e->e_msgid = h->h_value;
-			while (isascii(*e->e_msgid) && isspace(*e->e_msgid))
+			while (SM_ISSPACE(*e->e_msgid))
 				e->e_msgid++;
 			macdefine(&e->e_macro, A_PERM, macid("{msg_id}"),
 				  e->e_msgid);
@@ -979,9 +992,9 @@ eatheader(e, full, log)
 		/* Check if multipart/report */
 		if (pvp != NULL && pvp[0] != NULL &&
 		    pvp[1] != NULL && pvp[2] != NULL &&
-		    sm_strcasecmp(*pvp++, "multipart") == 0 &&
+		    SM_STRCASEEQ(*pvp++, "multipart") &&
 		    strcmp(*pvp++, "/") == 0 &&
-		    sm_strcasecmp(*pvp++, "report") == 0)
+		    SM_STRCASEEQ(*pvp++, "report"))
 		{
 			/* Look for report-type=delivery-status */
 			while (*pvp != NULL)
@@ -995,7 +1008,7 @@ eatheader(e, full, log)
 					break;
 
 				/* look for report-type */
-				if (sm_strcasecmp(*pvp++, "report-type") != 0)
+				if (!SM_STRCASEEQ(*pvp++, "report-type"))
 					continue;
 
 				/* skip equal */
@@ -1004,8 +1017,7 @@ eatheader(e, full, log)
 
 				/* check value */
 				if (*++pvp != NULL &&
-				    sm_strcasecmp(*pvp,
-						  "delivery-status") == 0)
+				    SM_STRCASEEQ(*pvp, "delivery-status"))
 					e->e_timeoutclass = TOC_DSN;
 
 				/* found report-type, no need to continue */
@@ -1019,11 +1031,11 @@ eatheader(e, full, log)
 	if (p != NULL)
 	{
 		/* (this should be in the configuration file) */
-		if (sm_strcasecmp(p, "urgent") == 0)
+		if (SM_STRCASEEQ(p, "urgent"))
 			e->e_timeoutclass = TOC_URGENT;
-		else if (sm_strcasecmp(p, "normal") == 0)
+		else if (SM_STRCASEEQ(p, "normal"))
 			e->e_timeoutclass = TOC_NORMAL;
-		else if (sm_strcasecmp(p, "non-urgent") == 0)
+		else if (SM_STRCASEEQ(p, "non-urgent"))
 			e->e_timeoutclass = TOC_NONURGENT;
 		else if (bitset(EF_RESPONSE, e->e_flags))
 			e->e_timeoutclass = TOC_DSN;
@@ -1040,7 +1052,7 @@ eatheader(e, full, log)
 
 	/* check to see if this is a MIME message */
 	if ((e->e_bodytype != NULL &&
-	     sm_strcasecmp(e->e_bodytype, "8BITMIME") == 0) ||
+	     SM_STRCASEEQ(e->e_bodytype, "8bitmime")) ||
 	    hvalue("MIME-Version", e->e_header) != NULL)
 	{
 		e->e_flags |= EF_IS_MIME;
@@ -1110,6 +1122,35 @@ eatheader(e, full, log)
 **		none
 */
 
+
+#define XBUFLEN MAXNAME
+#if (SYSLOG_BUFSIZE) >= 256
+# ifndef MSGIDLOGLEN
+#  define MSGIDLOGLEN 100
+#  define FIRSTLOGLEN 850
+# else
+#  if MSGIDLOGLEN < 100
+#    ERROR "MSGIDLOGLEN too short"
+#  endif
+/* XREF: this is "sizeof(sbuf)", see above */
+#  if MSGIDLOGLEN >= MAXLINE / 2
+#    ERROR "MSGIDLOGLEN too long"
+#  endif
+
+/* 850 - 100 for original MSGIDLOGLEN */
+#  define FIRSTLOGLEN (750 + MSGIDLOGLEN)
+
+/* check that total length is ok */
+#  if FIRSTLOGLEN + 200 >= MAXLINE
+#    ERROR "MSGIDLOGLEN too long"
+#  endif
+#  if MSGIDLOGLEN > MAXNAME
+#    undef XBUFLEN
+#    define XBUFLEN MSGIDLOGLEN
+#  endif
+# endif
+#endif /* (SYSLOG_BUFSIZE) >= 256 */
+
 void
 logsender(e, msgid)
 	register ENVELOPE *e;
@@ -1118,8 +1159,12 @@ logsender(e, msgid)
 	char *name;
 	register char *sbp;
 	register char *p;
-	char hbuf[MAXNAME + 1];
-	char sbuf[MAXLINE + 1]; /* XREF: see below MSGIDLOGLEN */
+	char hbuf[MAXNAME + 1];	/* EAI:ok; restricted to short size */
+	char sbuf[MAXLINE + 1]; /* EAI:ok; XREF: see also MSGIDLOGLEN */
+#if _FFR_8BITENVADDR
+	char xbuf[XBUFLEN + 1];	/* EAI:ok */
+#endif
+	char *xstr;
 
 	if (bitset(EF_RESPONSE, e->e_flags))
 		name = "[RESPONSE]";
@@ -1145,34 +1190,26 @@ logsender(e, msgid)
 
 #if (SYSLOG_BUFSIZE) >= 256
 	sbp = sbuf;
+	if (NULL != e->e_from.q_paddr)
+	{
+		xstr = e->e_from.q_paddr;
+# if _FFR_8BITENVADDR
+		(void) dequote_internal_chars(e->e_from.q_paddr, xbuf, sizeof(xbuf));
+		xstr = xbuf;
+# endif
+	}
+	else
+		xstr = "";
 	(void) sm_snprintf(sbp, SPACELEFT(sbuf, sbp),
-		"from=%.200s, size=%ld, class=%d, nrcpts=%d",
-		e->e_from.q_paddr == NULL ? "" : e->e_from.q_paddr,
+		"from=%.200s, size=%ld, class=%d, nrcpts=%d", xstr,
 		PRT_NONNEGL(e->e_msgsize), e->e_class, e->e_nrcpts);
 	sbp += strlen(sbp);
 	if (msgid != NULL)
 	{
-
-#ifndef MSGIDLOGLEN
-# define MSGIDLOGLEN 100
-# define FIRSTLOGLEN 850
-# else
-#  if MSGIDLOGLEN < 100
-    ERROR MSGIDLOGLEN too short
-#  endif
-/* XREF: this is "sizeof(sbuf)", see above */
-#  if MSGIDLOGLEN >= MAXLINE / 2
-    ERROR MSGIDLOGLEN too long
-#  endif
-
-/* 850 - 100 for original MSGIDLOGLEN */
-#  define FIRSTLOGLEN (750 + MSGIDLOGLEN)
-
-/* check that total length is ok */
-#  if FIRSTLOGLEN + 200 >= MAXLINE
-    ERROR MSGIDLOGLEN too long
-#  endif
-#endif
+# if _FFR_8BITENVADDR
+		(void) dequote_internal_chars(msgid, xbuf, sizeof(xbuf));
+		msgid = xbuf;
+# endif
 		(void) sm_snprintf(sbp, SPACELEFT(sbuf, sbp),
 				", msgid=%.*s", MSGIDLOGLEN, msgid);
 		sbp += strlen(sbp);
@@ -1201,7 +1238,7 @@ logsender(e, msgid)
 	LOG_MORE(sbuf, sbp);
 #  if SASL
 	p = macvalue(macid("{auth_type}"), e);
-	if (p == NULL || *p == '\0')
+	if (SM_IS_EMPTY(p))
 		p = "NONE";
 	(void) sm_snprintf(sbp, SPACELEFT(sbuf, sbp), ", auth=%.20s", p);
 	sbp += strlen(sbp);
@@ -1220,9 +1257,15 @@ logsender(e, msgid)
 		  "size=%ld, class=%ld, nrcpts=%d",
 		  PRT_NONNEGL(e->e_msgsize), e->e_class, e->e_nrcpts);
 	if (msgid != NULL)
+	{
+# if _FFR_8BITENVADDR
+		(void) dequote_internal_chars(msgid, xbuf, sizeof(xbuf));
+		msgid = xbuf;
+# endif
 		sm_syslog(LOG_INFO, e->e_id,
 			  "msgid=%s",
 			  shortenstring(msgid, 83));
+	}
 	sbp = sbuf;
 	*sbp = '\0';
 	if (e->e_bodytype != NULL)
@@ -1264,7 +1307,7 @@ priencode(p)
 
 	for (i = 0; i < NumPriorities; i++)
 	{
-		if (sm_strcasecmp(p, Priorities[i].pri_name) == 0)
+		if (SM_STRCASEEQ(p, Priorities[i].pri_name))
 			return Priorities[i].pri_val;
 	}
 
@@ -1291,7 +1334,7 @@ priencode(p)
 **	the original syntax.
 **
 **	Parameters:
-**		addr -- the address to be cracked.
+**		addr -- the address to be cracked. [A]
 **		e -- the current envelope.
 **
 **	Returns:
@@ -1301,11 +1344,16 @@ priencode(p)
 **		none.
 **
 **	Warning:
-**		The return value is saved in local storage and should
+**		The return value is saved in static storage and should
 **		be copied if it is to be reused.
 */
 
-#define SM_HAVE_ROOM		((bp < buflim) && (buflim <= bufend))
+#define SM_HAVE_ROOMB		((bp < buflim) && (buflim <= bufend))
+#if USE_EAI
+# define SM_HAVE_ROOM		((xlen < MAXNAME) && SM_HAVE_ROOMB)
+#else
+# define SM_HAVE_ROOM		SM_HAVE_ROOMB
+#endif
 
 /*
 **  Append a character to bp if we have room.
@@ -1315,6 +1363,7 @@ priencode(p)
 #define SM_APPEND_CHAR(c)					\
 	do							\
 	{							\
+		XLEN(c);					\
 		if (SM_HAVE_ROOM)				\
 			*bp++ = (c);				\
 		else						\
@@ -1322,7 +1371,7 @@ priencode(p)
 	} while (0)
 
 #if MAXNAME < 10
-ERROR MAXNAME must be at least 10
+# ERROR "MAXNAME must be at least 10"
 #endif
 
 char *
@@ -1349,7 +1398,8 @@ crackaddr(addr, e)
 	char *bufhead;
 	char *addrhead;
 	char *bufend;
-	static char buf[MAXNAME + 1];
+	static char buf[MAXNAME_I + 1];	/* XXX: EAI? */
+	XLENDECL
 
 	if (tTd(33, 1))
 		sm_dprintf("crackaddr(%s)\n", addr);
@@ -1730,8 +1780,11 @@ putheader(mci, hdr, e, flags)
 		}
 
 		/* Skip empty headers */
-		if (h->h_value == NULL)
+		if (p == NULL)
 			continue;
+#if _FFR_8BITENVADDR
+		(void) dequote_internal_chars(p, buf, sizeof(buf));
+#endif
 
 		/* heuristic shortening of MIME fields to avoid MUA overflows */
 		if (MaxMimeFieldLength > 0 &&
@@ -1759,7 +1812,7 @@ putheader(mci, hdr, e, flags)
 		{
 			size_t len;
 
-			len = strlen(h->h_value);
+			len = strlen(p);
 			if (len > (size_t) MaxMimeHeaderLength)
 			{
 				h->h_value[MaxMimeHeaderLength - 1] = '\0';
@@ -2055,6 +2108,16 @@ commaize(h, p, oldstyle, mci, e, putflags)
 	if (bitnset(M_7BITHDRS, mci->mci_mailer->m_flags))
 		putflags |= PXLF_STRIP8BIT;
 
+#if _FFR_MTA_MODE
+	/* activate this per mailer? */
+	if (bitset(H_FROM, h->h_flags) && bitset(H_ASIS, h->h_flags))
+	{
+		(void) sm_snprintf(obuf, sizeof(obuf), "%.200s:%s", h->h_field,
+				h->h_value);
+		return putxline(obuf, strlen(obuf), mci, putflags);
+	}
+#endif
+
 	obp = obuf;
 	(void) sm_snprintf(obp, SPACELEFT(obuf, obp), "%.200s:", h->h_field);
 	/* opos = strlen(obp); instead of the next 3 lines? */
@@ -2299,7 +2362,7 @@ fix_mime_header(h, e)
 	size_t len = 0;
 	size_t retlen = 0;
 
-	if (begin == NULL || *begin == '\0')
+	if (SM_IS_EMPTY(begin))
 		return 0;
 
 	/* Split on each ';' */
diff --git a/src/helpfile b/src/helpfile
index 9529b28a7fc2..d17deb384f16 100644
--- a/src/helpfile
+++ b/src/helpfile
@@ -67,7 +67,7 @@ starttls	STARTTLS
 starttls		Start TLS negotiation.
 verb	VERB
 verb		Go into verbose mode.  This sends 0xy responses that are
-verb		not RFC821 standard (but should be)  They are recognized
+verb		not RFC821 standard (but should be).  They are recognized
 verb		by humans and other sendmail implementations.
 vrfy	VRFY 
 vrfy		Verify an address.  If you want to see what it aliases
@@ -115,8 +115,13 @@ dsn		ORCPT	Original recipient.
 -bt	$$m		 :print the value of macro $$m.
 -bt	$$=c		 :print the contents of class $$=c.
 -bt	/mx host	 :returns the MX records for `host'.
+-bt	/gethostbyname host [family]  :calls gethostbyname() for `host'.
+-bt	/dnslookup host [qtype] [flags]	 :Does a qtype DNS lookup for `host'.
 -bt	/parse address	 :parse address, returning the value of crackaddr, and
 -bt			  the parsed address.
+-bt	/sender address	 :parse sender address, returning the value of
+-bt			  setsender.
+-bt	/expand string	 :expands string, returning the value of expand.
 -bt	/try mailer addr :rewrite address into the form it will have when
 -bt			  presented to the indicated mailer.
 -bt	/tryflags flags	 :set flags used by parsing.  The flags can be `H' for
@@ -125,6 +130,7 @@ dsn		ORCPT	Original recipient.
 -bt			  flags for header recipients.
 -bt	/canon hostname	 :try to canonify hostname.
 -bt	/map mapname key :look up `key' in the indicated `mapname'.
+-bt	/header header	 :parses header, returning header flags
 -bt	/quit		 :quit address test mode.
 -bt	rules addr	 :run the indicated address through the named rules.
 -bt			  Rules can be a comma separated list of rules.
diff --git a/src/macro.c b/src/macro.c
index 83438563151b..23012f4a414f 100644
--- a/src/macro.c
+++ b/src/macro.c
@@ -159,23 +159,17 @@ initmacros(e)
 
 /*
 **  EXPAND/DOEXPAND -- macro expand a string using $x escapes.
-**
-**	After expansion, the expansion will be in external form (that is,
-**	there will be no sendmail metacharacters and METAQUOTEs will have
-**	been stripped out).
+**	(including conditionals, e.g., $?x Y $| N $.)
 **
 **	Parameters:
-**		s -- the string to expand.
-**		buf -- the place to put the expansion.
+**		s -- the string to expand. [i]
+**		buf -- the place to put the expansion. [i]
 **		bufsize -- the size of the buffer.
 **		explevel -- the depth of expansion (doexpand only)
 **		e -- envelope in which to work.
 **
 **	Returns:
 **		none.
-**
-**	Side Effects:
-**		none.
 */
 
 static void doexpand __P(( char *, char *, size_t, int, ENVELOPE *));
@@ -422,9 +416,9 @@ mactabclear(mac)
 void
 #if SM_HEAP_CHECK
 macdefine_tagged(mac, vclass, id, value, file, line, grp)
-#else /* SM_HEAP_CHECK */
+#else
 macdefine(mac, vclass, id, value)
-#endif /* SM_HEAP_CHECK */
+#endif
 	MACROS_T *mac;
 	ARGCLASS_T vclass;
 	int id;
@@ -433,7 +427,7 @@ macdefine(mac, vclass, id, value)
 	char *file;
 	int line;
 	int grp;
-#endif /* SM_HEAP_CHECK */
+#endif
 {
 	char *newvalue;
 
@@ -447,6 +441,10 @@ macdefine(mac, vclass, id, value)
 		xputs(sm_debug_file(), value);
 		sm_dprintf(")\n");
 	}
+#if USE_EAI && 0
+	if (('j' == id || 'm' == id) && !addr_is_ascii(value))
+		return an error/warning to caller and let them handle it.
+#endif
 
 	if (mac->mac_rpool == NULL)
 	{
diff --git a/src/mailq.0 b/src/mailq.0
index 4e0c5a6d4317..deafecf05277 100644
--- a/src/mailq.0
+++ b/src/mailq.0
@@ -1,57 +1,57 @@
-MAILQ(1)                                                              MAILQ(1)
+MAILQ(1)                    General Commands Manual                   MAILQ(1)
 
 
 
-NAME
+NNAAMMEE
        mailq - print the mail queue
 
-SYNOPSIS
-       mailq [-Ac] [-q...]  [-v]
+SSYYNNOOPPSSIISS
+       mmaaiillqq [--AAcc] [--qq......]  [--vv]
 
-DESCRIPTION
-       Mailq prints a summary of the mail messages queued for future delivery.
+DDEESSCCRRIIPPTTIIOONN
+       MMaaiillqq prints a summary of the mail messages queued for future delivery.
 
-       The first line printed for each message shows the  internal  identifier
+       The  first  line printed for each message shows the internal identifier
        used on this host for the message with a possible status character, the
-       size of the message in  bytes,  the  date  and  time  the  message  was
-       accepted  into  the queue, and the envelope sender of the message.  The
-       second line shows the error message that  caused  this  message  to  be
-       retained  in  the queue; it will not be present if the message is being
-       processed for the first time.  The status characters are  either  *  to
-       indicate the job is being processed; X to indicate that the load is too
-       high to process the job; and - to indicate that the job is too young to
+       size  of  the  message  in bytes, the date and time the message was ac-
+       cepted into the queue, and the envelope sender  of  the  message.   The
+       second  line shows the error message that caused this message to be re-
+       tained in the queue; it will not be present if  the  message  is  being
+       processed  for  the  first time.  The status characters are either ** to
+       indicate the job is being processed; XX to indicate that the load is too
+       high to process the job; and -- to indicate that the job is too young to
        process.  The following lines show message recipients, one per line.
 
-       Mailq is identical to ``sendmail -bp''.
+       MMaaiillqq is identical to ``sendmail -bp''.
 
        The relevant options are as follows:
 
-       -Ac    Show  the mail submission queue specified in /etc/mail/submit.cf
-              instead of the MTA queue specified in /etc/mail/sendmail.cf.
+       --AAcc    Show the mail submission queue specified in  _/_e_t_c_/_m_a_i_l_/_s_u_b_m_i_t_._c_f
+              instead of the MTA queue specified in _/_e_t_c_/_m_a_i_l_/_s_e_n_d_m_a_i_l_._c_f.
 
-       -qL    Show the "lost" items in the mail queue instead  of  the  normal
+       --qqLL    Show  the  "lost"  items in the mail queue instead of the normal
               queue items.
 
-       -qQ    Show the quarantined items in the mail queue instead of the nor-
+       --qqQQ    Show the quarantined items in the mail queue instead of the nor-
               mal queue items.
 
-       -q[!]I substr
-              Limit processed jobs to those containing substr as  a  substring
-              of the queue id or not when !  is specified.
+       --qq[_!]I substr
+              Limit  processed  jobs to those containing _s_u_b_s_t_r as a substring
+              of the queue id or not when _!  is specified.
 
-       -q[!]Q substr
-              Limit  processed jobs to quarantined jobs containing substr as a
-              substring of the quarantine reason or not when !  is  specified.
+       --qq[_!]Q substr
+              Limit processed jobs to quarantined jobs containing _s_u_b_s_t_r as  a
+              substring of the quarantine reason or not when _!  is specified.
 
-       -q[!]R substr
-              Limit  processed  jobs to those containing substr as a substring
-              of one of the recipients or not when !  is specified.
+       --qq[_!]R substr
+              Limit  processed  jobs to those containing _s_u_b_s_t_r as a substring
+              of one of the recipients or not when _!  is specified.
 
-       -q[!]S substr
-              Limit processed jobs to those containing substr as  a  substring
-              of the sender or not when !  is specified.
+       --qq[_!]S substr
+              Limit processed jobs to those containing _s_u_b_s_t_r as  a  substring
+              of the sender or not when _!  is specified.
 
-       -v     Print  verbose  information.  This adds the priority of the mes-
+       --vv     Print  verbose  information.  This adds the priority of the mes-
               sage and a single character indicator (``+'' or blank)  indicat-
               ing whether a warning message has been sent on the first line of
               the message.  Additionally, extra lines may be  intermixed  with
@@ -61,20 +61,20 @@ MAILQ(1)                                                              MAILQ(1)
               from, if any.  Moreover, status messages for each recipient  are
               printed if available.
 
-       Several  sendmail.cf  options influence the behavior of the mailq util-
+       Several  sendmail.cf  options influence the behavior of the mmaaiillqq util-
        ity: The number of items printed  per  queue  group  is  restricted  by
-       MaxQueueRunSize  if  that  value is set.  The status character * is not
-       printed for some values of QueueSortOrder, e.g., filename, random, mod-
-       ification,  and none, unless a -q option is used to limit the processed
+       MMaaxxQQuueeuueeRRuunnSSiizzee  if  that  value is set.  The status character ** is not
+       printed for some values of QQuueeuueeSSoorrttOOrrddeerr,, e.g., filename, random, mod-
+       ification,  and none, unless a --qq option is used to limit the processed
        jobs.
 
-       The mailq utility exits 0 on success, and >0 if an error occurs.
+       The mmaaiillqq utility exits 0 on success, and >0 if an error occurs.
 
-SEE ALSO
+SSEEEE AALLSSOO
        sendmail(8)
 
-HISTORY
-       The mailq command appeared in 4.0BSD.
+HHIISSTTOORRYY
+       The mmaaiillqq command appeared in 4.0BSD.
 
 
 
diff --git a/src/mailq.1 b/src/mailq.1
index 0a12d3775b56..6b5069b836b9 100644
--- a/src/mailq.1
+++ b/src/mailq.1
@@ -24,16 +24,16 @@ mailq
 .B Mailq
 prints a summary of the mail messages queued for future delivery.
 .PP
-The first line printed for each message 
-shows the internal identifier used on this host 
-for the message with a possible status character, 
+The first line printed for each message
+shows the internal identifier used on this host
+for the message with a possible status character,
 the size of the message in bytes,
-the date and time the message was accepted into the queue, 
-and the envelope sender of the message.  
-The second line shows the error message that caused this message 
-to be retained in the queue; 
-it will not be present if the message is being processed 
-for the first time.  
+the date and time the message was accepted into the queue,
+and the envelope sender of the message.
+The second line shows the error message that caused this message
+to be retained in the queue;
+it will not be present if the message is being processed
+for the first time.
 The status characters are either
 .B *
 to indicate the job is being processed;
@@ -41,7 +41,7 @@ to indicate the job is being processed;
 to indicate that the load is too high to process the job; and
 .B -
 to indicate that the job is too young to process.
-The following lines show message recipients, 
+The following lines show message recipients,
 one per line.
 .PP
 .B Mailq
@@ -91,15 +91,15 @@ as a substring of the sender or not when
 is specified.
 .TP
 .B \-v
-Print verbose information.  
-This adds the priority of the message and 
-a single character indicator (``+'' or blank) 
-indicating whether a warning message has been sent 
+Print verbose information.
+This adds the priority of the message and
+a single character indicator (``+'' or blank)
+indicating whether a warning message has been sent
 on the first line of the message.
 Additionally, extra lines may be intermixed with the recipients
-indicating the ``controlling user'' information; 
-this shows who will own any programs that are executed 
-on behalf of this message 
+indicating the ``controlling user'' information;
+this shows who will own any programs that are executed
+on behalf of this message
 and the name of the alias this command expanded from, if any.
 Moreover, status messages for each recipient are printed
 if available.
@@ -131,5 +131,5 @@ sendmail(8)
 .SH HISTORY
 The
 .B mailq
-command appeared in 
+command appeared in
 4.0BSD.
diff --git a/src/main.c b/src/main.c
index a79733448039..d1fd89954d48 100644
--- a/src/main.c
+++ b/src/main.c
@@ -17,6 +17,12 @@
 #include 
 #include 
 #include 
+#if _FFR_8BITENVADDR
+# include 
+#endif
+#if _FFR_DMTRIGGER
+# include 
+#endif
 
 #ifndef lint
 SM_UNUSED(static char copyright[]) =
@@ -159,10 +165,15 @@ main(argc, argv, envp)
 	char **argv;
 	char **envp;
 {
-	register char *p;
+	char *p;
 	char **av;
 	extern char Version[];
-	char *ep, *from;
+	char *ep, *fromaddr;
+#if USE_EAI
+	char *fromaddr_x;
+#else
+# define fromaddr_x fromaddr
+#endif
 	STAB *st;
 	register int i;
 	int j;
@@ -195,7 +206,7 @@ main(argc, argv, envp)
 	struct stat traf_st;		/* for TrafficLog FIFO check */
 	char buf[MAXLINE];
 	char jbuf[MAXHOSTNAMELEN];	/* holds MyHostName */
-	static char rnamebuf[MAXNAME];	/* holds RealUserName */
+	static char rnamebuf[MAXNAME];	/* holds RealUserName */ /* EAI:ok */
 	char *emptyenviron[1];
 #if STARTTLS
 	bool tls_ok;
@@ -380,13 +391,13 @@ main(argc, argv, envp)
 		OpMode = MD_PURGESTAT;
 
 #if defined(__osf__) || defined(_AIX3)
-# define OPTIONS	"A:B:b:C:cD:d:e:F:f:Gh:IiL:M:mN:nO:o:p:Q:q:R:r:sTtV:vX:x"
-#endif /* defined(__osf__) || defined(_AIX3) */
+# define OPTIONS	"A:B:b:C:cD:d:e:F:f:Gh:IiL:M:mN:nO:o:p:Q:q:R:r:sTtUV:vX:x"
+#endif
 #if defined(sony_news)
-# define OPTIONS	"A:B:b:C:cD:d:E:e:F:f:Gh:IiJ:L:M:mN:nO:o:p:Q:q:R:r:sTtV:vX:"
-#endif /* defined(sony_news) */
+# define OPTIONS	"A:B:b:C:cD:d:E:e:F:f:Gh:IiJ:L:M:mN:nO:o:p:Q:q:R:r:sTtUV:vX:"
+#endif
 #ifndef OPTIONS
-# define OPTIONS	"A:B:b:C:cD:d:e:F:f:Gh:IiL:M:mN:nO:o:p:Q:q:R:r:sTtV:vX:"
+# define OPTIONS	"A:B:b:C:cD:d:e:F:f:Gh:IiL:M:mN:nO:o:p:Q:q:R:r:sTtUV:vX:"
 #endif
 
 	/* Set to 0 to allow -b; need to check optarg before using it! */
@@ -415,6 +426,9 @@ main(argc, argv, envp)
 				OpMode = j;
 				break;
 
+			  case MD_SHOWCONFIG:
+				showcfopts();
+				return EX_OK;
 #if _FFR_LOCAL_DAEMON
 			  case MD_LOCAL:
 				OpMode = MD_DAEMON;
@@ -477,7 +491,7 @@ main(argc, argv, envp)
 				return EX_USAGE;
 			}
 			j = SM_MIN(strlen(optarg), 32) + 1;
-			sysloglabel = xalloc(j);
+			sysloglabel = sm_malloc_tagged_x(j, "sysloglabel", 0, 0);
 			(void) sm_strlcpy(sysloglabel, optarg, j);
 			SyslogPrefixLen = PIDLEN + (MAXQFNAME - 3) +
 					  SL_FUDGE + j;
@@ -589,8 +603,9 @@ main(argc, argv, envp)
 	j = 0;
 	for (av = argv; *av != NULL; )
 		j += strlen(*av++) + 1;
-	SaveArgv = (char **) xalloc(sizeof(char *) * (argc + 1));
-	CommandLineArgs = xalloc(j);
+	SaveArgv = (char **) sm_malloc_tagged_x(sizeof(char *) * (argc + 1),
+					"argv", 0, 0);
+	CommandLineArgs = sm_malloc_tagged_x(j, "cliargs", 0, 0);
 	p = CommandLineArgs;
 	for (av = argv, i = 0; *av != NULL; )
 	{
@@ -715,7 +730,7 @@ main(argc, argv, envp)
 #endif /* NAMED_BIND */
 
 	errno = 0;
-	from = NULL;
+	fromaddr = NULL;
 
 	/* initialize some macros, etc. */
 	init_vendor_macros(&BlankEnvelope);
@@ -731,6 +746,14 @@ main(argc, argv, envp)
 
 		if (tTd(0, 4))
 			sm_dprintf("Canonical name: %s\n", jbuf);
+#if USE_EAI
+		if (!addr_is_ascii(jbuf))
+		{
+			usrerr("hostname %s must be ASCII", jbuf);
+			finis(false, true, EX_CONFIG);
+			/* NOTREACHED */
+		}
+#endif
 		macdefine(&BlankEnvelope.e_macro, A_TEMP, 'w', jbuf);
 		macdefine(&BlankEnvelope.e_macro, A_TEMP, 'j', jbuf);
 		setclass('w', jbuf);
@@ -746,14 +769,16 @@ main(argc, argv, envp)
 			if (tTd(0, 22))
 				sm_dprintf("uname failed (%s)\n",
 					   sm_errstring(errno));
-			makelower(jbuf);
 			p = jbuf;
+			p = makelower_a(&p, NULL);
 		}
 		if (tTd(0, 4))
 			sm_dprintf(" UUCP nodename: %s\n", p);
 		macdefine(&BlankEnvelope.e_macro, A_TEMP, 'k', p);
 		setclass('k', p);
 		setclass('w', p);
+		if (p != utsname.nodename && p != jbuf)
+			SM_FREE(p);
 	}
 	if (hp != NULL)
 	{
@@ -865,20 +890,20 @@ main(argc, argv, envp)
 			/* already done */
 			break;
 
-		  case 'f':	/* from address */
+		  case 'f':	/* fromaddr address */
 		  case 'r':	/* obsolete -f flag */
 			CHECK_AGAINST_OPMODE(j);
-			if (from != NULL)
+			if (fromaddr != NULL)
 			{
 				usrerr("More than one \"from\" person");
 				ExitStat = EX_USAGE;
 				break;
 			}
 			if (optarg[0] == '\0')
-				from = newstr("<>");
+				fromaddr = newstr("<>");
 			else
-				from = newstr(denlstring(optarg, true, true));
-			if (strcmp(RealUserName, from) != 0)
+				fromaddr = newstr(denlstring(optarg, true, true));
+			if (strcmp(RealUserName, fromaddr) != 0)
 				warn_f_flag = j;
 			break;
 
@@ -921,18 +946,18 @@ main(argc, argv, envp)
 			DefaultNotify |= QHASNOTIFY;
 			macdefine(&BlankEnvelope.e_macro, A_TEMP,
 				macid("{dsn_notify}"), optarg);
-			if (sm_strcasecmp(optarg, "never") == 0)
+			if (SM_STRCASEEQ(optarg, "never"))
 				break;
 			for (p = optarg; p != NULL; optarg = p)
 			{
 				p = strchr(p, ',');
 				if (p != NULL)
 					*p++ = '\0';
-				if (sm_strcasecmp(optarg, "success") == 0)
+				if (SM_STRCASEEQ(optarg, "success"))
 					DefaultNotify |= QPINGONSUCCESS;
-				else if (sm_strcasecmp(optarg, "failure") == 0)
+				else if (SM_STRCASEEQ(optarg, "failure"))
 					DefaultNotify |= QPINGONFAILURE;
-				else if (sm_strcasecmp(optarg, "delay") == 0)
+				else if (SM_STRCASEEQ(optarg, "delay"))
 					DefaultNotify |= QPINGONDELAY;
 				else
 				{
@@ -1116,9 +1141,9 @@ main(argc, argv, envp)
 				break;
 			}
 			BlankEnvelope.e_flags |= EF_RET_PARAM;
-			if (sm_strcasecmp(optarg, "hdrs") == 0)
+			if (SM_STRCASEEQ(optarg, "hdrs"))
 				BlankEnvelope.e_flags |= EF_NO_BODY_RETN;
-			else if (sm_strcasecmp(optarg, "full") != 0)
+			else if (!SM_STRCASEEQ(optarg, "full"))
 			{
 				usrerr("Invalid -R value");
 				ExitStat = EX_USAGE;
@@ -1132,6 +1157,13 @@ main(argc, argv, envp)
 			GrabTo = true;
 			break;
 
+#if USE_EAI
+		  case 'U':
+			CHECK_AGAINST_OPMODE(j);
+			BlankEnvelope.e_smtputf8 = true;
+			break;
+#endif
+
 		  case 'V':	/* DSN ENVID: set "original" envelope id */
 			CHECK_AGAINST_OPMODE(j);
 			if (!xtextok(optarg))
@@ -1344,6 +1376,14 @@ main(argc, argv, envp)
 	    OpMode == MD_DAEMON || OpMode == MD_FGDAEMON)
 		makeworkgroups();
 
+#if USE_EAI
+	if (!SMTPUTF8 && MainEnvelope.e_smtputf8)
+	{
+		usrerr("-U requires SMTPUTF8");
+		finis(false, true, EX_USAGE);
+	}
+#endif
+
 	/* set up the basic signal handlers */
 	if (sm_signal(SIGINT, SIG_IGN) != SIG_IGN)
 		(void) sm_signal(SIGINT, intsig);
@@ -1859,7 +1899,7 @@ main(argc, argv, envp)
 
 	/* MIME message/xxx subtypes that can be treated as messages */
 	setclass('s', "rfc822");
-#if _FFR_EAI
+#if USE_EAI
 	setclass('s', "global");
 #endif
 
@@ -2314,6 +2354,15 @@ main(argc, argv, envp)
 	}
 #endif /* SASL */
 
+#if _FFR_DMTRIGGER
+	if (OpMode == MD_DAEMON && SM_TRIGGER == BlankEnvelope.e_sendmode)
+	{
+		i = sm_notify_init(0);
+		if (i != 0)
+			syserr("sm_notify_init() failed=%d", i);
+	}
+#endif
+
 	if (OpMode == MD_SMTP)
 	{
 		proc_list_add(CurrentPid, "Sendmail SMTP Agent",
@@ -2325,9 +2374,9 @@ main(argc, argv, envp)
 
 	/*
 	**  If a daemon, wait for a request.
-	**	getrequests will always return in a child.
-	**	If we should also be processing the queue, start
-	**		doing it in background.
+	**	getrequests() will return in a child (unless -d93.100 is used).
+	**	If we should also be processing the queue,
+	**		start doing it in background.
 	**	We check for any errors that might have happened
 	**		during startup.
 	*/
@@ -2405,6 +2454,11 @@ main(argc, argv, envp)
 		(void) sm_releasesignal(SIGHUP);
 		(void) sm_signal(SIGTERM, sigterm);
 
+#if _FFR_DMTRIGGER
+		if (SM_TRIGGER == BlankEnvelope.e_sendmode)
+			qm();
+#endif
+
 		if (QueueIntvl > 0)
 		{
 #if _FFR_RUNPQG
@@ -2758,13 +2812,29 @@ main(argc, argv, envp)
 	initsys(&MainEnvelope);
 	macdefine(&MainEnvelope.e_macro, A_PERM, macid("{ntries}"), "0");
 	macdefine(&MainEnvelope.e_macro, A_PERM, macid("{nrcpts}"), "0");
-	setsender(from, &MainEnvelope, NULL, '\0', false);
+#if USE_EAI
+	fromaddr_x = fromaddr;	/* for logging - see below -- just in case */
+	if (fromaddr != NULL && (MainEnvelope.e_smtputf8 ||
+			(MainEnvelope.e_smtputf8 = !asciistr(fromaddr))))
+	{
+		/* not very efficient: asciistr() may be called above already */
+		if (!SMTPUTF8 && !asciistr(fromaddr))
+		{
+			usrerr("non-ASCII sender address %s requires SMTPUTF8",
+				fromaddr);
+			finis(false, true, EX_USAGE);
+		}
+		j = 0;
+		fromaddr = quote_internal_chars(fromaddr, NULL, &j, NULL);
+	}
+#endif
+	setsender(fromaddr, &MainEnvelope, NULL, '\0', false);
 	if (warn_f_flag != '\0' && !wordinclass(RealUserName, 't') &&
 	    (!bitnset(M_LOCALMAILER, MainEnvelope.e_from.q_mailer->m_flags) ||
 	     strcmp(MainEnvelope.e_from.q_user, RealUserName) != 0))
 	{
 		auth_warning(&MainEnvelope, "%s set sender to %s using -%c",
-			     RealUserName, from, warn_f_flag);
+			     RealUserName, fromaddr_x, warn_f_flag);
 #if SASL
 		auth = false;
 #endif
@@ -3023,6 +3093,10 @@ finis(drop, cleanup, exitstat)
 		if (fp != NULL)
 			dump_ch(fp);
 	}
+#endif /* RATECTL_DEBUG || _FFR_OCC */
+#if _FFR_DMTRIGGER
+	if (OpMode == MD_DAEMON && SM_TRIGGER == BlankEnvelope.e_sendmode)
+		sm_notify_stop(DaemonPid == getpid(), 0);
 #endif
 	if (tTd(2, 1))
 	{
@@ -3124,6 +3198,10 @@ finis(drop, cleanup, exitstat)
 #endif
 		(void) setuid(RealUid);
 #if SM_HEAP_CHECK
+# if SM_HEAP_CHECK > 1
+		/* seems this is not always free()? */
+		sm_rpool_free(CurEnv->e_rpool);
+# endif
 		/* dump the heap, if we are checking for memory leaks */
 		if (sm_debug_active(&SmHeapCheck, 2))
 			sm_heap_report(smioout,
@@ -3358,6 +3436,7 @@ disconnect(droplev, e)
 	int droplev;
 	register ENVELOPE *e;
 {
+#define LOGID(e) (((e) != NULL && (e)->e_id != NULL) ? (e)->e_id : NOQID)
 	int fd;
 
 	if (tTd(52, 1))
@@ -3371,7 +3450,7 @@ disconnect(droplev, e)
 		return;
 	}
 	if (LogLevel > 93)
-		sm_syslog(LOG_DEBUG, e->e_id,
+		sm_syslog(LOG_DEBUG, LOGID(e),
 			  "disconnect level %d",
 			  droplev);
 
@@ -3393,7 +3472,7 @@ disconnect(droplev, e)
 	}
 	if (sm_io_reopen(SmFtStdio, SM_TIME_DEFAULT, SM_PATH_DEVNULL,
 			 SM_IO_RDONLY, NULL, smioin) == NULL)
-		sm_syslog(LOG_ERR, e->e_id,
+		sm_syslog(LOG_ERR, LOGID(e),
 			  "disconnect: sm_io_reopen(\"%s\") failed: %s",
 			  SM_PATH_DEVNULL, sm_errstring(errno));
 
@@ -3421,7 +3500,7 @@ disconnect(droplev, e)
 		if (smioout->sm_magic == NULL &&
 		    sm_io_reopen(SmFtStdio, SM_TIME_DEFAULT, SM_PATH_DEVNULL,
 				 SM_IO_WRONLY, NULL, smioout) == NULL)
-			sm_syslog(LOG_ERR, e->e_id,
+			sm_syslog(LOG_ERR, LOGID(e),
 				  "disconnect: sm_io_reopen(\"%s\") failed: %s",
 				  SM_PATH_DEVNULL, sm_errstring(errno));
 #endif /* 0 */
@@ -3431,7 +3510,7 @@ disconnect(droplev, e)
 		fd = open(SM_PATH_DEVNULL, O_WRONLY, 0666);
 		if (fd == -1)
 		{
-			sm_syslog(LOG_ERR, e->e_id,
+			sm_syslog(LOG_ERR, LOGID(e),
 				  "disconnect: open(\"%s\") failed: %s",
 				  SM_PATH_DEVNULL, sm_errstring(errno));
 		}
@@ -3456,7 +3535,7 @@ disconnect(droplev, e)
 #endif
 
 	if (LogLevel > 71)
-		sm_syslog(LOG_DEBUG, e->e_id, "in background, pid=%d",
+		sm_syslog(LOG_DEBUG, LOGID(e), "in background, pid=%d",
 			  (int) CurrentPid);
 
 	errno = 0;
@@ -3554,37 +3633,35 @@ auth_warning(e, msg, va_alist)
 {
 	char buf[MAXLINE];
 	SM_VA_LOCAL_DECL
+	char *p;
+	static char hostbuf[48];
 
-	if (bitset(PRIV_AUTHWARNINGS, PrivacyFlags))
+	if (!bitset(PRIV_AUTHWARNINGS, PrivacyFlags))
+		return;
+
+	if (hostbuf[0] == '\0')
 	{
-		register char *p;
-		static char hostbuf[48];
+		struct hostent *hp;
 
-		if (hostbuf[0] == '\0')
-		{
-			struct hostent *hp;
-
-			hp = myhostname(hostbuf, sizeof(hostbuf));
+		hp = myhostname(hostbuf, sizeof(hostbuf));
 #if NETINET6
-			if (hp != NULL)
-			{
-				freehostent(hp);
-				hp = NULL;
-			}
-#endif /* NETINET6 */
+		if (hp != NULL)
+		{
+			freehostent(hp);
+			hp = NULL;
 		}
-
-		(void) sm_strlcpyn(buf, sizeof(buf), 2, hostbuf, ": ");
-		p = &buf[strlen(buf)];
-		SM_VA_START(ap, msg);
-		(void) sm_vsnprintf(p, SPACELEFT(buf, p), msg, ap);
-		SM_VA_END(ap);
-		addheader("X-Authentication-Warning", buf, 0, e, true);
-		if (LogLevel > 3)
-			sm_syslog(LOG_INFO, e->e_id,
-				  "Authentication-Warning: %.400s",
-				  buf);
+#endif /* NETINET6 */
 	}
+
+	(void) sm_strlcpyn(buf, sizeof(buf), 2, hostbuf, ": ");
+	p = &buf[strlen(buf)];
+	SM_VA_START(ap, msg);
+	(void) sm_vsnprintf(p, SPACELEFT(buf, p), msg, ap);
+	SM_VA_END(ap);
+	addheader("X-Authentication-Warning", buf, 0, e, true);
+	if (LogLevel > 3)
+		sm_syslog(LOG_INFO, e->e_id,
+			  "Authentication-Warning: %.400s", buf);
 }
 /*
 **  GETEXTENV -- get from external environment
@@ -3644,7 +3721,7 @@ sm_setuserenv(envar, value)
 	/* XXX enforce reasonable size? */
 	i = strlen(envar) + 1;
 	l = strlen(value) + i + 1;
-	p = (char *) xalloc(l);
+	p = (char *) sm_malloc_tagged_x(l, "setuserenv", 0, 0);
 	(void) sm_strlcpyn(p, l, 3, envar, "=", value);
 
 	while (*evp != NULL && strncmp(*evp, p, i) != 0)
@@ -4045,28 +4122,29 @@ sm_printoptions(options)
 **
 **	Parameters:
 **		str -- the input line.
+**		mq -- "quote" meta chars?
 **
 **	Returns:
-**		none.
+**		meta quoting performed?
 **
 **	Side Effects:
-**		replaces \0octal in str with octal value.
+**		replaces \0octal in str with octal value,
+**		optionally (meta) quotes meta chars.
 */
 
-static bool to8bit __P((char *));
+static bool to8bit __P((char *, bool));
 
 static bool
-to8bit(str)
+to8bit(str, mq)
 	char *str;
+	bool mq;
 {
 	int c, len;
 	char *out, *in;
-	bool changed;
 
 	if (str == NULL)
 		return false;
 	in = out = str;
-	changed = false;
 	len = 0;
 	while ((c = (*str++ & 0377)) != '\0')
 	{
@@ -4085,21 +4163,21 @@ to8bit(str)
 				++str;
 				++len;
 			}
-			changed = true;
+			mq = true;
 			c = oct;
 		}
 		*out++ = c;
 	}
 	*out++ = c;
-	if (changed)
+	if (mq)
 	{
 		char *q;
 
-		q = quote_internal_chars(in, in, &len);
+		q = quote_internal_chars(in, in, &len, NULL);
 		if (q != in)
 			sm_strlcpy(in, q, len);
 	}
-	return changed;
+	return mq;
 }
 
 /*
@@ -4138,6 +4216,9 @@ testmodeline(line, e)
 	char lbuf[MAXLINE];
 	extern unsigned char TokTypeNoC[];
 	bool eightbit;
+#if _FFR_8BITENVADDR
+	int len = sizeof(exbuf);
+#endif
 
 	/* skip leading spaces */
 	while (*line == ' ')
@@ -4333,13 +4414,13 @@ testmodeline(line, e)
 					     "Usage: /[canon|map|mx|parse|try|tryflags]\n");
 			return;
 		}
-		if (sm_strcasecmp(&line[1], "quit") == 0)
+		if (SM_STRCASEEQ(&line[1], "quit"))
 		{
 			CurEnv->e_id = NULL;
 			finis(true, true, ExitStat);
 			/* NOTREACHED */
 		}
-		if (sm_strcasecmp(&line[1], "mx") == 0)
+		if (SM_STRCASEEQ(&line[1], "mx"))
 		{
 #if NAMED_BIND
 			/* look up MX records */
@@ -4371,7 +4452,7 @@ testmodeline(line, e)
 					     "No MX code compiled in\n");
 #endif /* NAMED_BIND */
 		}
-		else if (sm_strcasecmp(&line[1], "canon") == 0)
+		else if (SM_STRCASEEQ(&line[1], "canon"))
 		{
 			char host[MAXHOSTNAMELEN];
 
@@ -4393,7 +4474,7 @@ testmodeline(line, e)
 					     "getcanonname(%s) returns %s\n",
 					     p, host);
 		}
-		else if (sm_strcasecmp(&line[1], "map") == 0)
+		else if (SM_STRCASEEQ(&line[1], "map"))
 		{
 			auto int rcode = EX_OK;
 			char *av[2];
@@ -4442,7 +4523,25 @@ testmodeline(line, e)
 						     "returns %s (%d)\n", p,
 						     rcode);
 		}
-		else if (sm_strcasecmp(&line[1], "try") == 0)
+		else if (SM_STRCASEEQ(&line[1], "sender"))
+		{
+			setsender(p, CurEnv, NULL, '\0', false);
+			(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+					     "addr=%s\n",
+					     e->e_from.q_user);
+		}
+		else if (SM_STRCASEEQ(&line[1], "expand"))
+		{
+			if (*p == '\0')
+			{
+				(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+						     "Usage: /expand string\n");
+				return;
+			}
+			expand(p, exbuf, sizeof(exbuf), CurEnv);
+			xputs(smioout, exbuf);
+		}
+		else if (SM_STRCASEEQ(&line[1], "try"))
 		{
 			MAILER *m;
 			STAB *st;
@@ -4474,13 +4573,20 @@ testmodeline(line, e)
 							: "envelope",
 				     bitset(RF_SENDERADDR, tryflags) ? "sender"
 							: "recipient", q, p);
+#if _FFR_8BITENVADDR
+			q = quote_internal_chars(q, exbuf, &len, NULL);
+#endif
 			p = remotename(q, m, tryflags, &rcode, CurEnv);
+#if _FFR_8BITENVADDR
+			dequote_internal_chars(p, exbuf, sizeof(exbuf));
+			p = exbuf;
+#endif
 			(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
 					     "Rcode = %d, addr = %s\n",
 					     rcode, p == NULL ? "" : p);
 			e->e_to = NULL;
 		}
-		else if (sm_strcasecmp(&line[1], "tryflags") == 0)
+		else if (SM_STRCASEEQ(&line[1], "tryflags"))
 		{
 			if (*p == '\0')
 			{
@@ -4520,7 +4626,7 @@ testmodeline(line, e)
 			macdefine(&e->e_macro, A_TEMP,
 				macid("{addr_type}"), exbuf);
 		}
-		else if (sm_strcasecmp(&line[1], "parse") == 0)
+		else if (SM_STRCASEEQ(&line[1], "parse"))
 		{
 			if (*p == '\0')
 			{
@@ -4528,6 +4634,9 @@ testmodeline(line, e)
 						     "Usage: /parse address\n");
 				return;
 			}
+#if _FFR_8BITENVADDR
+			p = quote_internal_chars(p, exbuf, &len, NULL);
+#endif
 			q = crackaddr(p, e);
 			(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
 					     "Cracked address = ");
@@ -4538,6 +4647,7 @@ testmodeline(line, e)
 							"header" : "envelope",
 					     bitset(RF_SENDERADDR, tryflags) ?
 							"sender" : "recipient");
+/* XXX p must be [i] */
 			if (parseaddr(p, &a, tryflags, '\0', NULL, e, true)
 			    == NULL)
 				(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
@@ -4555,16 +4665,16 @@ testmodeline(line, e)
 						     a.q_user);
 			e->e_to = NULL;
 		}
-		else if (sm_strcasecmp(&line[1], "header") == 0)
+		else if (SM_STRCASEEQ(&line[1], "header"))
 		{
 			unsigned long ul;
 
 			ul = chompheader(p, CHHDR_CHECK|CHHDR_USER, NULL, e);
 			(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
-					     "ul = %lu\n", ul);
+					     "ul = %#0.8lx\n", ul);
 		}
 #if NETINET || NETINET6
-		else if (sm_strcasecmp(&line[1], "gethostbyname") == 0)
+		else if (SM_STRCASEEQ(&line[1], "gethostbyname"))
 		{
 			int family = AF_INET;
 
@@ -4583,7 +4693,7 @@ testmodeline(line, e)
 		}
 #endif /* NETINET || NETINET6 */
 #if DANE
-		else if (sm_strcasecmp(&line[1], "dnslookup") == 0)
+		else if (SM_STRCASEEQ(&line[1], "dnslookup"))
 		{
 			DNS_REPLY_T *r;
 			int rr_type, family;
@@ -4643,7 +4753,6 @@ testmodeline(line, e)
 		(void) sm_io_flush(smioout, SM_TIME_DEFAULT);
 		return;
 	}
-
 	for (p = line; SM_ISSPACE(*p); p++)
 		continue;
 	q = p;
@@ -4657,7 +4766,7 @@ testmodeline(line, e)
 	}
 	*p = '\0';
 	if (tTd(23, 101))
-		eightbit = to8bit(p + 1);
+		eightbit = to8bit(p + 1, tTd(23, 102));
 	if (invalidaddr(p + 1, NULL, true))
 		return;
 	do
@@ -4666,6 +4775,7 @@ testmodeline(line, e)
 		char pvpbuf[PSBUFSIZE];
 
 		pvp = prescan(++p, ',', pvpbuf, sizeof(pvpbuf), &delimptr,
+				tTd(23, 103) ? ExtTokenTab :
 			      ConfigLevel >= 9 ? TokTypeNoC : ExtTokenTab, false);
 		if (pvp == NULL)
 			continue;
diff --git a/src/map.c b/src/map.c
index 0931ea69235b..85589a1b4e99 100644
--- a/src/map.c
+++ b/src/map.c
@@ -14,6 +14,7 @@
 #include 
 
 SM_RCSID("@(#)$Id: map.c,v 8.713 2013-11-22 20:51:55 ca Exp $")
+#include 
 
 #if LDAPMAP
 # include 
@@ -22,10 +23,10 @@ SM_RCSID("@(#)$Id: map.c,v 8.713 2013-11-22 20:51:55 ca Exp $")
 #if NDBM
 # include 
 # ifdef R_FIRST
-  ERROR README:	You are running the Berkeley DB version of ndbm.h.  See
-  ERROR README:	the README file about tweaking Berkeley DB so it can
-  ERROR README:	coexist with NDBM, or delete -DNDBM from the Makefile
-  ERROR README: and use -DNEWDB instead.
+#  error "README: You are running the Berkeley DB version of ndbm.h.  See"
+#  error "README: the README file about tweaking Berkeley DB so it can"
+#  error "README: coexist with NDBM, or delete -DNDBM from the Makefile"
+#  error "README: and use -DNEWDB instead."
 # endif /* R_FIRST */
 #endif /* NDBM */
 #if NEWDB
@@ -386,8 +387,7 @@ map_rewrite(map, s, slen, av)
 	{
 		/* need to malloc additional space */
 		buflen = len;
-		if (buf != NULL)
-			sm_free(buf);
+		SM_FREE(buf);
 		buf = sm_pmalloc_x(buflen);
 	}
 
@@ -437,6 +437,24 @@ map_rewrite(map, s, slen, av)
 		(void) sm_strlcpy(bp, map->map_app, len);
 	else
 		*bp = '\0';
+#if _FFR_8BITENVADDR
+	if (!bitset(MF_KEEPXFMT, map->map_mflags))
+	{
+		int newlen;
+		char *quoted;
+
+		newlen = 0;
+		quoted = quote_internal_chars(buf, NULL, &newlen, NULL);
+		if (newlen > buflen)
+		{
+			buflen = newlen;
+			SM_FREE(buf);
+			buf = sm_pmalloc_x(buflen);
+		}
+		(void) sm_strlcpy(buf, quoted, buflen);
+		SM_FREE(quoted);
+	}
+#endif
 	if (tTd(39, 1))
 		sm_dprintf("map_rewrite => %s\n", buf);
 	return buf;
@@ -694,7 +712,7 @@ sun_init_domain()
 	**  something like "sun.com").
 	*/
 
-	char buf[MAXNAME];
+	char buf[MAXNAME];	/* EAI:ok (domainname) */
 	char *period, *autodomain;
 
 	if (getdomainname(buf, sizeof buf) < 0)
@@ -940,7 +958,7 @@ extract_canonname(name, dot, line, cbuf, cbuflen)
 
 	for (i = 1; ; i++)
 	{
-		char nbuf[MAXNAME + 1];
+		char nbuf[MAXNAME + 1];	/* EAI:hostname */
 
 		p = get_column(line, i, '\0', nbuf, sizeof(nbuf));
 		if (p == NULL)
@@ -952,13 +970,13 @@ extract_canonname(name, dot, line, cbuf, cbuflen)
 		{
 			(void) sm_strlcpy(cbuf, p, cbuflen);
 		}
-		if (sm_strcasecmp(name, p) == 0)
+		if (SM_STRCASEEQ(name, p))
 			found = true;
 		else if (dot != NULL)
 		{
 			/* try looking for the FQDN as well */
 			*dot = '.';
-			if (sm_strcasecmp(name, p) == 0)
+			if (SM_STRCASEEQ(name, p))
 				found = true;
 			*dot = '\0';
 		}
@@ -1054,14 +1072,14 @@ dns_map_parseargs(map,args)
 			break;
 		switch (*++p)
 		{
-#if DNSSEC_TEST
+#  if DNSSEC_TEST
 		  case '@':
 			++p;
 			if (nsportip(p) < 0)
 				syserr("dns map %s: nsportip(%s)=failed",
 					map->map_mname, p);
 			break;
-#endif /* DNSSEC_TEST */
+#  endif /* DNSSEC_TEST */
 
 		  case 'A':
 			map->map_mflags |= MF_APPEND;
@@ -1132,9 +1150,9 @@ dns_map_parseargs(map,args)
 			break;
 
 		  case 'S':
-#if defined(RES_USE_EDNS0) && defined(RES_USE_DNSSEC)
+#  if defined(RES_USE_EDNS0) && defined(RES_USE_DNSSEC)
 			map_p->dns_m_options |= SM_RES_DNSSEC;
-#endif
+#  endif
 			break;
 
 		  case 'r':
@@ -1339,12 +1357,12 @@ dns_map_lookup(map, name, av, statp)
 					    sizeof(buf6));
 			break;
 #  endif /* NETINET6 */
-# ifdef T_TLSA
+#  ifdef T_TLSA
 		  case T_TLSA:
 			type = "T_TLSA";
 			value = rr->rr_u.rr_txt;
 			break;
-# endif /* T_TLSA */
+#  endif /* T_TLSA */
 		}
 
 		(void) strreplnonprt(value, 'X');
@@ -1427,8 +1445,7 @@ dns_map_lookup(map, name, av, statp)
 		result = map_rewrite(map, vp, vsize, av);
 
   cleanup:
-	if (vp != NULL)
-		sm_free(vp);
+	SM_FREE(vp);
 	dns_free_data(r);
 	return result;
 }
@@ -1679,7 +1696,7 @@ ndbm_map_open(map, mode)
 		map->map_mflags |= MF_LOCKED;
 		if (geteuid() == 0 && TrustedUid != 0)
 		{
-#  if HASFCHOWN
+# if HASFCHOWN
 			if (fchown(dfd, TrustedUid, -1) < 0 ||
 			    fchown(pfd, TrustedUid, -1) < 0)
 			{
@@ -1691,13 +1708,13 @@ ndbm_map_open(map, mode)
 				message("050 ownership change on %s failed: %s",
 					map->map_file, sm_errstring(err));
 			}
-#  else /* HASFCHOWN */
+# else /* HASFCHOWN */
 			sm_syslog(LOG_ALERT, NOQID,
 				  "no fchown(): cannot change ownership on %s",
 				  map->map_file);
 			message("050 no fchown(): cannot change ownership on %s",
 				map->map_file);
-#  endif /* HASFCHOWN */
+# endif /* HASFCHOWN */
 		}
 	}
 	return true;
@@ -1717,7 +1734,7 @@ ndbm_map_lookup(map, name, av, statp)
 {
 	datum key, val;
 	int dfd, pfd;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 	struct stat stbuf;
 
 	if (tTd(38, 20))
@@ -1732,7 +1749,7 @@ ndbm_map_lookup(map, name, av, statp)
 			key.dsize = sizeof(keybuf) - 1;
 		memmove(keybuf, key.dptr, key.dsize);
 		keybuf[key.dsize] = '\0';
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 		key.dptr = keybuf;
 	}
 lockdbm:
@@ -1815,7 +1832,7 @@ ndbm_map_store(map, lhs, rhs)
 	datum key;
 	datum data;
 	int status;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 
 	if (tTd(38, 12))
 		sm_dprintf("ndbm_map_store(%s, %s, %s)\n",
@@ -1829,7 +1846,7 @@ ndbm_map_store(map, lhs, rhs)
 			key.dsize = sizeof(keybuf) - 1;
 		memmove(keybuf, key.dptr, key.dsize);
 		keybuf[key.dsize] = '\0';
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 		key.dptr = keybuf;
 	}
 
@@ -1861,8 +1878,7 @@ ndbm_map_store(map, lhs, rhs)
 				old.dsize = strlen(old.dptr);
 				if (data.dsize + old.dsize + 2 > bufsiz)
 				{
-					if (buf != NULL)
-						(void) sm_free(buf);
+					SM_FREE(buf);
 					bufsiz = data.dsize + old.dsize + 2;
 					buf = sm_pmalloc_x(bufsiz);
 				}
@@ -2187,7 +2203,7 @@ db_map_open(map, mode, mapclassname, dbtype, openinfo)
 
 #  if DB_VERSION_MAJOR > 2
 		ret = db_create(&db, NULL, 0);
-#  ifdef DB_CACHE_SIZE
+#   ifdef DB_CACHE_SIZE
 		if (ret == 0 && db != NULL)
 		{
 			ret = db->set_cachesize(db, 0, DB_CACHE_SIZE, 0);
@@ -2197,8 +2213,8 @@ db_map_open(map, mode, mapclassname, dbtype, openinfo)
 				db = NULL;
 			}
 		}
-#  endif /* DB_CACHE_SIZE */
-#  ifdef DB_HASH_NELEM
+#   endif /* DB_CACHE_SIZE */
+#   ifdef DB_HASH_NELEM
 		if (dbtype == DB_HASH && ret == 0 && db != NULL)
 		{
 			ret = db->set_h_nelem(db, DB_HASH_NELEM);
@@ -2208,7 +2224,7 @@ db_map_open(map, mode, mapclassname, dbtype, openinfo)
 				db = NULL;
 			}
 		}
-#  endif /* DB_HASH_NELEM */
+#   endif /* DB_HASH_NELEM */
 		if (ret == 0 && db != NULL)
 		{
 			ret = db->open(db,
@@ -2216,10 +2232,10 @@ db_map_open(map, mode, mapclassname, dbtype, openinfo)
 					buf, NULL, dbtype, flags, DBMMODE);
 			if (ret != 0)
 			{
-#ifdef DB_OLD_VERSION
+#   ifdef DB_OLD_VERSION
 				if (ret == DB_OLD_VERSION)
 					ret = EINVAL;
-#endif /* DB_OLD_VERSION */
+#   endif /* DB_OLD_VERSION */
 				(void) db->close(db, 0);
 				db = NULL;
 			}
@@ -2294,7 +2310,7 @@ db_map_open(map, mode, mapclassname, dbtype, openinfo)
 		(void) db->sync(db, 0);
 		if (geteuid() == 0 && TrustedUid != 0)
 		{
-#  if HASFCHOWN
+# if HASFCHOWN
 			if (fchown(fd, TrustedUid, -1) < 0)
 			{
 				int err = errno;
@@ -2305,13 +2321,13 @@ db_map_open(map, mode, mapclassname, dbtype, openinfo)
 				message("050 ownership change on %s failed: %s",
 					buf, sm_errstring(err));
 			}
-#  else /* HASFCHOWN */
+# else /* HASFCHOWN */
 			sm_syslog(LOG_ALERT, NOQID,
 				  "no fchown(): cannot change ownership on %s",
 				  map->map_file);
 			message("050 no fchown(): cannot change ownership on %s",
 				map->map_file);
-#  endif /* HASFCHOWN */
+# endif /* HASFCHOWN */
 		}
 	}
 
@@ -2351,7 +2367,7 @@ db_map_lookup(map, name, av, statp)
 	int save_errno;
 	int fd;
 	struct stat stbuf;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 	char buf[MAXPATHLEN];
 
 	memset(&key, '\0', sizeof(key));
@@ -2380,7 +2396,7 @@ db_map_lookup(map, name, av, statp)
 	memmove(keybuf, name, key.size);
 	keybuf[key.size] = '\0';
 	if (!bitset(MF_NOFOLDCASE, map->map_mflags))
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
   lockdb:
 # if DB_VERSION_MAJOR < 2
 	fd = db->fd(db);
@@ -2511,7 +2527,7 @@ db_map_store(map, lhs, rhs)
 	DBT key;
 	DBT data;
 	register DB *db = map->map_db2;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 
 	memset(&key, '\0', sizeof(key));
 	memset(&data, '\0', sizeof(data));
@@ -2528,7 +2544,7 @@ db_map_store(map, lhs, rhs)
 			key.size = sizeof(keybuf) - 1;
 		memmove(keybuf, key.data, key.size);
 		keybuf[key.size] = '\0';
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 		key.data = keybuf;
 	}
 
@@ -2579,8 +2595,7 @@ db_map_store(map, lhs, rhs)
 				old.size = strlen(old.data);
 				if (data.size + old.size + 2 > (size_t) bufsiz)
 				{
-					if (buf != NULL)
-						sm_free(buf);
+					SM_FREE(buf);
 					bufsiz = data.size + old.size + 2;
 					buf = sm_pmalloc_x(bufsiz);
 				}
@@ -2729,6 +2744,7 @@ cdb_map_open(map, mode)
 	int fd, status, omode, smode;
 	long sff;
 	struct stat st;
+	struct cdb *cdbp;
 	char buf[MAXPATHLEN];
 
 	if (tTd(38, 2))
@@ -2741,11 +2757,7 @@ cdb_map_open(map, mode)
 	omode = mode;
 
 	/*
-	**  Notes:
-	**  If a temporary file is used, then there must be some check
-	**  that the rename() is "safe" (i.e., does not overwrite some
-	**  "other" file created by an attacker).
-	**
+	**  Note:
 	**  The code to add the extension and to set up safefile()
 	**  and open() should be in a common function
 	**  (it would be nice to re-use libsmdb?)
@@ -2763,20 +2775,13 @@ cdb_map_open(map, mode)
 	sff = SFF_ROOTOK|SFF_REGONLY;
 	if (mode == O_RDWR)
 	{
-		if (sm_strlcat(buf, ".tmp", sizeof buf) >= sizeof buf)
-		{
-			errno = 0;
-			if (!bitset(MF_OPTIONAL, map->map_mflags))
-				syserr("cdb map \"%s\": map file %s name too long",
-					map->map_mname, map->map_file);
-			return false;
-		}
 		sff |= SFF_CREAT;
 		if (!bitnset(DBS_WRITEMAPTOSYMLINK, DontBlameSendmail))
 			sff |= SFF_NOSLINK;
 		if (!bitnset(DBS_WRITEMAPTOHARDLINK, DontBlameSendmail))
 			sff |= SFF_NOHLINK;
 		smode = S_IWRITE;
+		map->map_mflags |= MF_LOCKED;
 	}
 	else
 	{
@@ -2841,6 +2846,11 @@ cdb_map_open(map, mode)
 		syserr("cdb_map_open: cannot lock %s", buf);
 # endif /* !LOCK_ON_OPEN */
 
+	map->map_lockfd = fd;
+
+	if (fd >= 0 && fstat(fd, &st) >= 0)
+		map->map_mtime = st.st_mtime;
+
 	/* only for aliases! */
 	if (mode == O_RDWR)
 	{
@@ -2859,45 +2869,49 @@ cdb_map_open(map, mode)
 		map->map_db2 = (ARBPTR_T)cdbmp;
 		return true;
 	}
-	else
+
+	cdbp = (struct cdb *) xalloc(sizeof(*cdbp));
+	status = cdb_init(cdbp, fd);
+	if (status != 0)
 	{
-		struct cdb *cdbp;
-
-		cdbp = (struct cdb *) xalloc(sizeof(*cdbp));
-		status = cdb_init(cdbp, fd);
-		if (status != 0)
-		{
-			close(fd);
-			if (!bitset(MF_OPTIONAL, map->map_mflags))
-				syserr("initialization of cdb map failed");
-			return false;
-		}
-		map->map_db1 = (ARBPTR_T)cdbp;
-		return true;
+		close(fd);
+		if (!bitset(MF_OPTIONAL, map->map_mflags))
+			syserr("initialization of cdb map failed");
+		return false;
 	}
-
-	/* NOTREACHED */
-	return false;
+	map->map_db1 = (ARBPTR_T)cdbp;
+	return true;
 }
 
 char *
-cdb_map_lookup (map, name, av, statp)
-	MAP * map;
+cdb_map_lookup(map, name, av, statp)
+	MAP *map;
 	char *name;
 	char **av;
 	int *statp;
 {
-	char * data;
+	char *data;
 	struct cdb *cdbmap;
 	unsigned int klen, dlen;
-	int st;
-	char key[MAXNAME+1];
+	int st, fd;
+	char key[MAXNAME + 1];	/* EAI:ok */
+	char buf[MAXPATHLEN];
+	struct stat stbuf;
 
 	data = NULL;
 	cdbmap = map->map_db1;
 	if (tTd(38, 20))
 		sm_dprintf("cdb_map_lookup(%s, %s)\n", map->map_mname, name);
 
+	if (!smdb_add_extension(buf, sizeof(buf), map->map_file, CDBext))
+	{
+		errno = 0;
+		if (!bitset(MF_OPTIONAL, map->map_mflags))
+			syserr("cdb map \"%s\": map file %s name too long",
+				map->map_mname, map->map_file);
+		return false;
+	}
+
 	klen = strlen(name);
 	if (klen > sizeof(key) - 1)
 		klen = sizeof(key) - 1;
@@ -2905,7 +2919,48 @@ cdb_map_lookup (map, name, av, statp)
 	key[klen] = '\0';
 
 	if (!bitset(MF_NOFOLDCASE, map->map_mflags))
-		makelower(key);
+		makelower_buf(key, key, sizeof(key));
+
+  lockdb:
+	fd = map->map_lockfd;
+	if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags))
+		(void) lockfile(fd, buf, NULL, LOCK_SH);
+
+	if (fd < 0 || fstat(fd, &stbuf) < 0 || stbuf.st_mtime > map->map_mtime)
+	{
+		/* Reopen the database to sync the cache */
+		int omode = bitset(map->map_mflags, MF_WRITABLE) ? O_RDWR
+								 : O_RDONLY;
+
+		if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags))
+			(void) lockfile(fd, buf, NULL, LOCK_UN);
+		map->map_mflags |= MF_CLOSING;
+		map->map_class->map_close(map);
+		map->map_mflags &= ~(MF_OPEN|MF_WRITABLE|MF_CLOSING);
+		if (map->map_class->map_open(map, omode))
+		{
+			map->map_mflags |= MF_OPEN;
+			if ((omode & O_ACCMODE) == O_RDWR)
+				map->map_mflags |= MF_WRITABLE;
+			cdbmap = map->map_db1;
+			goto lockdb;
+		}
+		else
+		{
+			if (!bitset(MF_OPTIONAL, map->map_mflags))
+			{
+				extern MAPCLASS BogusMapClass;
+
+				*statp = EX_TEMPFAIL;
+				map->map_orgclass = map->map_class;
+				map->map_class = &BogusMapClass;
+				map->map_mflags |= MF_OPEN;
+				syserr("Cannot reopen CDB database %s",
+					map->map_file);
+			}
+			return NULL;
+		}
+	}
 
 	st = 0;
 	if (bitset(MF_TRY0NULL, map->map_mflags))
@@ -2920,6 +2975,8 @@ cdb_map_lookup (map, name, av, statp)
 		if (st == 1)
 			 map->map_mflags &= ~MF_TRY0NULL;
 	}
+	if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags))
+		(void) lockfile(fd, buf, NULL, LOCK_UN);
 	if (st != 1)
 	{
 		if (st < 0)
@@ -2953,7 +3010,7 @@ cdb_map_store(map, lhs, rhs)
 	size_t klen;
 	size_t vlen;
 	int status;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 
 	cdbmp = map->map_db2;
 	if (cdbmp == NULL)
@@ -2967,7 +3024,7 @@ cdb_map_store(map, lhs, rhs)
 			klen = sizeof(keybuf) - 1;
 		memmove(keybuf, lhs, klen);
 		keybuf[klen] = '\0';
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 		lhs = keybuf;
 	}
 
@@ -2995,19 +3052,16 @@ cdb_map_close(map)
 	if (cdbp != NULL)
 	{
 		if (tTd(38, 20))
-			sm_dprintf("cdb_map_close(%p)\n", (void *)cdbp);
+			sm_dprintf("cdb_map_close(%p): cdbp\n", (void *)cdbp);
 		fd = cdb_fileno(cdbp);
 		cdb_free(cdbp);
-		sm_free(cdbp);
-		cdbp = NULL;
+		SM_FREE(cdbp);
 	}
 	cdbmp = map->map_db2;
 	if (cdbmp != NULL)
 	{
-		char tmpfn[MAXPATHLEN], cdbfn[MAXPATHLEN];
-
 		if (tTd(38, 20))
-			sm_dprintf("cdb_map_close(%p)\n", (void *)cdbmp);
+			sm_dprintf("cdb_map_close(%p): cdmbp\n", (void *)cdbmp);
 		fd = cdb_fileno(cdbmp);
 
 		/* write out the distinguished alias */
@@ -3015,33 +3069,17 @@ cdb_map_close(map)
 		cdb_map_store(map, "@", "@");
 
 		if (cdb_make_finish(cdbmp) != 0)
-			syserr("cdb: failed to write %s", map->map_file);
-		if (fd >=0)
+			syserr("cdb: cdb_make_finish(%s) failed",
+				map->map_file);
+		if (fd >= 0)
 		{
 			if (fsync(fd) == -1)
 				syserr("cdb: fsync(%s) failed", map->map_file);
 			if (close(fd) == -1)
 				syserr("cdb: close(%s) failed", map->map_file);
+			fd = -1;
 		}
-
-		if (!smdb_add_extension(cdbfn, sizeof(cdbfn), map->map_file,
-					CDBext))
-		{
-			syserr("cdb: add extension to %s failed",
-				map->map_file);
-		}
-		if (sm_strlcpy(tmpfn, cdbfn, sizeof tmpfn) >= sizeof tmpfn ||
-		    sm_strlcat(tmpfn, ".tmp", sizeof tmpfn) >= sizeof tmpfn)
-		{
-			syserr("cdb: set temp filename for %s failed",
-				map->map_file);
-		}
-		if (tTd(38, 80))
-			sm_dprintf("rename(%s, %s)\n", tmpfn, cdbfn);
-		if (rename(tmpfn, cdbfn) == -1)
-			syserr("cdb: rename(%s, %s) failed", tmpfn, cdbfn);
-		sm_free(cdbmp);
-		cdbmp = NULL;
+		SM_FREE(cdbmp);
 	}
 	if (fd >=0)
 		close(fd);
@@ -3114,8 +3152,7 @@ nis_map_open(map, mode)
 	if (tTd(38, 10))
 		sm_dprintf("nis_map_open: yp_match(@, %s, %s) => %s\n",
 			map->map_domain, map->map_file, yperr_string(yperr));
-	if (vp != NULL)
-		sm_free(vp);
+	SM_FREE(vp);
 
 	if (yperr == 0 || yperr == YPERR_KEY || yperr == YPERR_BUSY)
 	{
@@ -3159,7 +3196,7 @@ nis_map_lookup(map, name, av, statp)
 	auto int vsize;
 	int buflen;
 	int yperr;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 	char *SM_NONVOLATILE result = NULL;
 
 	if (tTd(38, 20))
@@ -3172,7 +3209,7 @@ nis_map_lookup(map, name, av, statp)
 	memmove(keybuf, name, buflen);
 	keybuf[buflen] = '\0';
 	if (!bitset(MF_NOFOLDCASE, map->map_mflags))
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 	yperr = YPERR_KEY;
 	vp = NULL;
 	if (bitset(MF_TRY0NULL, map->map_mflags))
@@ -3195,8 +3232,7 @@ nis_map_lookup(map, name, av, statp)
 	{
 		if (yperr != YPERR_KEY && yperr != YPERR_BUSY)
 			map->map_mflags &= ~(MF_VALID|MF_OPEN);
-		if (vp != NULL)
-			sm_free(vp);
+		SM_FREE(vp);
 		return NULL;
 	}
 	SM_TRY
@@ -3205,8 +3241,7 @@ nis_map_lookup(map, name, av, statp)
 		else
 			result = map_rewrite(map, vp, vsize, av);
 	SM_FINALLY
-		if (vp != NULL)
-			sm_free(vp);
+		SM_FREE(vp);
 	SM_END_TRY
 	return result;
 }
@@ -3230,8 +3265,8 @@ nis_getcanonname(name, hbsize, statp)
 	static bool try1null = true;
 	static char *yp_domain = NULL;
 	char host_record[MAXLINE];
-	char cbuf[MAXNAME];
-	char nbuf[MAXNAME + 1];
+	char cbuf[MAXNAME];	/* EAI:hostname */
+	char nbuf[MAXNAME + 1];	/* EAI:hostname */
 
 	if (tTd(38, 20))
 		sm_dprintf("nis_getcanonname(%s)\n", name);
@@ -3246,7 +3281,7 @@ nis_getcanonname(name, hbsize, statp)
 
 	if (yp_domain == NULL)
 		(void) yp_get_default_domain(&yp_domain);
-	makelower(nbuf);
+	makelower_buf(nbuf, nbuf, sizeof(nbuf));
 	yperr = YPERR_KEY;
 	vp = NULL;
 	if (try0null)
@@ -3273,8 +3308,7 @@ nis_getcanonname(name, hbsize, statp)
 			*statp = EX_TEMPFAIL;
 		else
 			*statp = EX_UNAVAILABLE;
-		if (vp != NULL)
-			sm_free(vp);
+		SM_FREE(vp);
 		return false;
 	}
 	(void) sm_strlcpy(host_record, vp, sizeof(host_record));
@@ -3475,7 +3509,7 @@ nisplus_map_lookup(map, name, av, statp)
 	auto int vsize;
 	char *skp;
 	int skleft;
-	char search_key[MAXNAME + 4];
+	char search_key[MAXNAME + 4];	/* EAI:ok */
 	char qbuf[MAXLINE + NIS_MAXNAMELEN];
 	nis_result *result;
 
@@ -3532,7 +3566,7 @@ nisplus_map_lookup(map, name, av, statp)
 	}
 	*skp = '\0';
 	if (!bitset(MF_NOFOLDCASE, map->map_mflags))
-		makelower(search_key);
+		makelower_buf(search_key, search_key, sizeof(search_key));
 
 	/* construct the query */
 	if (PARTIAL_NAME(map->map_file))
@@ -3614,8 +3648,8 @@ nisplus_getcanonname(name, hbsize, statp)
 	auto int vsize;
 	nis_result *result;
 	char *p;
-	char nbuf[MAXNAME + 1];
-	char qbuf[MAXLINE + NIS_MAXNAMELEN];
+	char nbuf[MAXNAME + 1];	/* EAI:hostname */
+	char qbuf[MAXLINE + NIS_MAXNAMELEN];	/* EAI:hostname */
 
 	if (sm_strlcpy(nbuf, name, sizeof(nbuf)) >= sizeof(nbuf))
 	{
@@ -3722,7 +3756,7 @@ nisplus_getcanonname(name, hbsize, statp)
 char *
 nisplus_default_domain()
 {
-	static char default_domain[MAXNAME + 1] = "";
+	static char default_domain[MAXNAME + 1] = "";	/* EAI:hostname */
 	char *p;
 
 	if (default_domain[0] != '\0')
@@ -3800,14 +3834,14 @@ ldapmap_open(map, mode)
 	if (tTd(38, 2))
 		sm_dprintf("ldapmap_open(%s, %d): ", map->map_mname, mode);
 
-#if defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && \
+# if defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && \
     HASLDAPGETALIASBYNAME
 	if (VendorCode == VENDOR_SUN &&
 	    strcmp(map->map_mname, "aliases.ldap") == 0)
 	{
 		return true;
 	}
-#endif /* defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && ... */
+# endif /* defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && ... */
 
 	mode &= O_ACCMODE;
 
@@ -4002,26 +4036,45 @@ ldapmap_lookup(map, name, av, statp)
 	SM_LDAP_STRUCT *lmap = NULL;
 	char *argv[SM_LDAP_ARGS];
 	char keybuf[MAXKEY];
-#if SM_LDAP_ARGS != MAX_MAP_ARGS
-# ERROR _SM_LDAP_ARGS must be the same as _MAX_MAP_ARGS
-#endif
+# if SM_LDAP_ARGS != MAX_MAP_ARGS
+#  ERROR "SM_LDAP_ARGS must be the same as MAX_MAP_ARGS"
+# endif
 
-#if defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && \
+# define AV_FREE(av)	\
+	do		\
+	{		\
+		int ai;	\
+		for (ai = 0; ai < SM_LDAP_ARGS && av[ai] != NULL; ai++) \
+			SM_FREE(av[ai]);	\
+	} while (0)
+
+# if USE_EAI
+	bool allascii;
+	char *largv[SM_LDAP_ARGS];
+	char **largs;
+
+#  define LARGV_FREE	AV_FREE(largv)
+# else
+#  define largs av
+#  define LARGV_FREE
+# endif
+
+# if defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && \
     HASLDAPGETALIASBYNAME
 	if (VendorCode == VENDOR_SUN &&
 	    strcmp(map->map_mname, "aliases.ldap") == 0)
 	{
 		int rc;
-#if defined(GETLDAPALIASBYNAME_VERSION) && (GETLDAPALIASBYNAME_VERSION >= 2)
+#  if defined(GETLDAPALIASBYNAME_VERSION) && (GETLDAPALIASBYNAME_VERSION >= 2)
 		extern char *__getldapaliasbyname();
 		char *answer;
 
 		answer = __getldapaliasbyname(name, &rc);
-#else
-		char answer[MAXNAME + 1];
+#  else
+		char answer[MAXNAME + 1];	/* EAI:Sun only, ignore */
 
 		rc = __getldapaliasbyname(name, answer, sizeof(answer));
-#endif
+#  endif
 		if (rc != 0)
 		{
 			if (tTd(38, 20))
@@ -4038,38 +4091,79 @@ ldapmap_lookup(map, name, av, statp)
 			result = map_rewrite(map, name, strlen(name), NULL);
 		else
 			result = map_rewrite(map, answer, strlen(answer), av);
-#if defined(GETLDAPALIASBYNAME_VERSION) && (GETLDAPALIASBYNAME_VERSION >= 2)
+#  if defined(GETLDAPALIASBYNAME_VERSION) && (GETLDAPALIASBYNAME_VERSION >= 2)
 		free(answer);
-#endif
+#  endif
 		return result;
 	}
-#endif /* defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && ... */
+# endif /* defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && ... */
 
 	/* Get ldap struct pointer from map */
 	lmap = (SM_LDAP_STRUCT *) map->map_db1;
 	sm_ldap_setopts(lmap->ldap_ld, lmap);
 
+	/* initialize first element so AV_FREE can work */
+	argv[0] = NULL;
+# if USE_EAI
+	largv[0] = NULL;
+# endif
+
 	if (lmap->ldap_multi_args)
 	{
 		SM_REQUIRE(av != NULL);
 		memset(argv, '\0', sizeof(argv));
+# if USE_EAI
+		largs = av;
+		memset(largv, '\0', sizeof(largv));
+
+		/* this is ugly - can we merge it with the next loop? */
+		allascii = true;
+		if (!bitset(MF_MATCHONLY, map->map_mflags))
+		{
+			for (i = 0, allascii = true;
+			     i < SM_LDAP_ARGS && av[i] != NULL;
+			     i++)
+			{
+				if (!addr_is_ascii(av[i]))
+				{
+					allascii = false;
+					largs = largv;
+					break;
+				}
+			}
+		}
+# endif /* USE_EAI */
 		for (i = 0; i < SM_LDAP_ARGS && av[i] != NULL; i++)
 		{
 			argv[i] = sm_strdup(av[i]);
 			if (argv[i] == NULL)
 			{
-				int save_errno, j;
-
-				save_errno = errno;
-				for (j = 0; j < i && argv[j] != NULL; j++)
-					SM_FREE(argv[j]);
 				*statp = EX_TEMPFAIL;
-				errno = save_errno;
-				return NULL;
+				goto none;
 			}
 
 			if (!bitset(MF_NOFOLDCASE, map->map_mflags))
+/*			    && !bitset(MF_MATCHONLY, map->map_mflags))	*/
+/* see below: av[]/largs onluy used if !MF_MATCHONLY !? */
+			{
+# if USE_EAI
+				if (!allascii)
+				{
+					char *lower;
+
+					lower = makelower(av[i]);
+					largv[i] = sm_strdup(lower);
+					if (largv[i] == NULL)
+					{
+						*statp = EX_TEMPFAIL;
+						goto none;
+					}
+				}
+				else
+# endif /* USE_EAI */
+				/* NOTE: see else above! */
 				SM_CONVERT_ID(av[i]);
+			}
 		}
 	}
 	else
@@ -4104,8 +4198,7 @@ ldapmap_lookup(map, name, av, statp)
 		msgid = sm_ldap_search_m(lmap, argv);
 
 		/* free the argv array and its content, no longer needed */
-		for (i = 0; i < SM_LDAP_ARGS && argv[i] != NULL; i++)
-			SM_FREE(argv[i]);
+		AV_FREE(argv);
 	}
 	else
 		msgid = sm_ldap_search(lmap, keybuf);
@@ -4140,9 +4233,9 @@ ldapmap_lookup(map, name, av, statp)
 			break;
 		}
 		errno = save_errno;
-		return NULL;
+		goto none;
 	}
-#if SM_LDAP_ERROR_ON_MISSING_ARGS
+# if SM_LDAP_ERROR_ON_MISSING_ARGS
 	else if (msgid == SM_LDAP_ERR_ARG_MISS)
 	{
 		if (bitset(MF_NODEFER, map->map_mflags))
@@ -4152,9 +4245,9 @@ ldapmap_lookup(map, name, av, statp)
 			syserr("554 5.3.5 Error in ldap_search in map %s, too few arguments",
 			       map->map_mname);
 		*statp = EX_CONFIG;
-		return NULL;
+		goto none;
 	}
-#endif /* SM_LDAP_ERROR_ON_MISSING_ARGS */
+# endif /* SM_LDAP_ERROR_ON_MISSING_ARGS */
 
 	*statp = EX_NOTFOUND;
 	vp = NULL;
@@ -4202,12 +4295,12 @@ ldapmap_lookup(map, name, av, statp)
 				       map->map_mname, name);
 		}
 		errno = save_errno;
-		return NULL;
+		goto none;
 	}
 
 	/* Did we match anything? */
 	if (vp == NULL && !bitset(MF_MATCHONLY, map->map_mflags))
-		return NULL;
+		goto none;
 
 	if (*statp == EX_OK)
 	{
@@ -4220,12 +4313,20 @@ ldapmap_lookup(map, name, av, statp)
 		else
 		{
 			/* vp != NULL according to test above */
-			result = map_rewrite(map, vp, strlen(vp), av);
+			result = map_rewrite(map, vp, strlen(vp), largs);
 		}
-		if (vp != NULL)
-			sm_free(vp); /* XXX */
+		SM_FREE(vp); /* XXX */
 	}
+	LARGV_FREE;
 	return result;
+
+  none:
+	/* other cleanup? */
+	save_errno = errno;
+	AV_FREE(argv);
+	LARGV_FREE;
+	errno = save_errno;
+	return NULL;
 }
 
 /*
@@ -4322,6 +4423,7 @@ ldapmap_parseargs(map, args)
 	int i;
 	register char *p = args;
 	SM_LDAP_STRUCT *lmap;
+	SM_LDAP_STRUCT *lmap_alloc;
 	struct lamvalues *lam;
 	struct ladvalues *lad;
 	struct lssvalues *lss;
@@ -4335,12 +4437,14 @@ ldapmap_parseargs(map, args)
 	if (lmap == NULL || lmap != LDAPDefaults)
 	{
 		/* We need to alloc an SM_LDAP_STRUCT struct */
-		lmap = (SM_LDAP_STRUCT *) xalloc(sizeof(*lmap));
+		lmap_alloc = lmap = (SM_LDAP_STRUCT *) xalloc(sizeof(*lmap));
 		if (LDAPDefaults == NULL)
 			sm_ldap_clear(lmap);
 		else
 			STRUCTCOPY(*LDAPDefaults, *lmap);
 	}
+	else
+		lmap_alloc = NULL;
 
 	/* there is no check whether there is really an argument */
 	map->map_mflags |= MF_TRY0NULL|MF_TRY1NULL;
@@ -4382,7 +4486,7 @@ ldapmap_parseargs(map, args)
 			{
 				syserr("%s: Default LDAP string too long",
 				       map->map_mname);
-				return false;
+				goto fail;
 			}
 
 			/* default args for an alias LDAP entry */
@@ -4527,22 +4631,22 @@ ldapmap_parseargs(map, args)
 			break;
 
 		  case 'H':		/* Use LDAP URI */
-#  if !USE_LDAP_INIT
+# if !USE_LDAP_INIT
 			syserr("Must compile with -DUSE_LDAP_INIT to use LDAP URIs (-H) in map %s",
 			       map->map_mname);
-			return false;
-#   else /* !USE_LDAP_INIT */
+			goto fail;
+# else /* !USE_LDAP_INIT */
 			if (lmap->ldap_host != NULL)
 			{
 				syserr("Can not specify both an LDAP host and an LDAP URI in map %s",
 				       map->map_mname);
-				return false;
+				goto fail;
 			}
 			while (isascii(*++p) && isspace(*p))
 				continue;
 			lmap->ldap_uri = p;
 			break;
-#  endif /* !USE_LDAP_INIT */
+# endif /* !USE_LDAP_INIT */
 
 		  case 'h':		/* ldap host */
 			while (isascii(*++p) && isspace(*p))
@@ -4551,7 +4655,7 @@ ldapmap_parseargs(map, args)
 			{
 				syserr("Can not specify both an LDAP host and an LDAP URI in map %s",
 				       map->map_mname);
-				return false;
+				goto fail;
 			}
 			lmap->ldap_host = p;
 			break;
@@ -4603,7 +4707,7 @@ ldapmap_parseargs(map, args)
 						p, map->map_mname);
 					if (ptr != NULL)
 						*ptr = ' ';
-					return false;
+					goto fail;
 				}
 			}
 			break;
@@ -4669,7 +4773,7 @@ ldapmap_parseargs(map, args)
 						p, map->map_mname);
 					if (ptr != NULL)
 						*ptr = ' ';
-					return false;
+					goto fail;
 				}
 			}
 			break;
@@ -4704,7 +4808,7 @@ ldapmap_parseargs(map, args)
 						p, map->map_mname);
 					if (ptr != NULL)
 						*ptr = ' ';
-					return false;
+					goto fail;
 				}
 			}
 			break;
@@ -4748,7 +4852,7 @@ ldapmap_parseargs(map, args)
 				syserr("LDAP version %d exceeds max of %d in map %s",
 				       lmap->ldap_version, LDAP_VERSION_MAX,
 				       map->map_mname);
-				return false;
+				goto fail;
 			}
 # endif /* LDAP_VERSION_MAX */
 # ifdef LDAP_VERSION_MIN
@@ -4757,7 +4861,7 @@ ldapmap_parseargs(map, args)
 				syserr("LDAP version %d is lower than min of %d in map %s",
 				       lmap->ldap_version, LDAP_VERSION_MIN,
 				       map->map_mname);
-				return false;
+				goto fail;
 			}
 # endif /* LDAP_VERSION_MIN */
 			break;
@@ -4864,7 +4968,7 @@ ldapmap_parseargs(map, args)
 			{
 				syserr("LDAP map: cannot open secret %s",
 				       ldapmap_dequote(lmap->ldap_secret));
-				return false;
+				goto fail;
 			}
 			lmap->ldap_secret = sfgets(m_tmp, sizeof(m_tmp),
 						   sfd, TimeOuts.to_fileopen,
@@ -4874,7 +4978,7 @@ ldapmap_parseargs(map, args)
 			{
 				syserr("LDAP map: secret in %s too long",
 				       ldapmap_dequote(lmap->ldap_secret));
-				return false;
+				goto fail;
 			}
 			if (lmap->ldap_secret != NULL &&
 			    strlen(m_tmp) > 0)
@@ -4904,7 +5008,7 @@ ldapmap_parseargs(map, args)
 
 		  default:	       /* Should NEVER get here */
 			syserr("LDAP map: Illegal value in lmap method");
-			return false;
+			goto fail;
 			/* NOTREACHED */
 			break;
 		}
@@ -4944,7 +5048,7 @@ ldapmap_parseargs(map, args)
 		if (!bitset(MCF_OPTFILE, map->map_class->map_cflags))
 		{
 			syserr("No filter given in map %s", map->map_mname);
-			return false;
+			goto fail;
 		}
 	}
 
@@ -4980,7 +5084,7 @@ ldapmap_parseargs(map, args)
 			{
 				syserr("Too many return attributes in %s (max %d)",
 				       map->map_mname, LDAPMAP_MAX_ATTR);
-				return false;
+				goto fail;
 			}
 			if (*v != '\0')
 			{
@@ -5005,7 +5109,7 @@ ldapmap_parseargs(map, args)
 				use = i;
 
 				/* allow override on "objectClass" type */
-				if (sm_strcasecmp(v, "objectClass") == 0 &&
+				if (SM_STRCASEEQ(v, "objectClass") &&
 				    lmap->ldap_attr_type[0] == SM_LDAP_ATTR_OBJCLASS)
 				{
 					use = 0;
@@ -5019,11 +5123,11 @@ ldapmap_parseargs(map, args)
 
 					for (j = 1; j < i; j++)
 					{
-						if (sm_strcasecmp(v, lmap->ldap_attr[j]) == 0)
+						if (SM_STRCASEEQ(v, lmap->ldap_attr[j]))
 						{
 							syserr("Duplicate attribute (%s) in %s",
 							       v, map->map_mname);
-							return false;
+							goto fail;
 						}
 					}
 
@@ -5043,22 +5147,22 @@ ldapmap_parseargs(map, args)
 
 				if (type != NULL && *type != '\0')
 				{
-					if (sm_strcasecmp(type, "dn") == 0)
+					if (SM_STRCASEEQ(type, "dn"))
 					{
 						recurse = true;
 						lmap->ldap_attr_type[use] = SM_LDAP_ATTR_DN;
 					}
-					else if (sm_strcasecmp(type, "filter") == 0)
+					else if (SM_STRCASEEQ(type, "filter"))
 					{
 						recurse = true;
 						lmap->ldap_attr_type[use] = SM_LDAP_ATTR_FILTER;
 					}
-					else if (sm_strcasecmp(type, "url") == 0)
+					else if (SM_STRCASEEQ(type, "url"))
 					{
 						recurse = true;
 						lmap->ldap_attr_type[use] = SM_LDAP_ATTR_URL;
 					}
-					else if (sm_strcasecmp(type, "normal") == 0)
+					else if (SM_STRCASEEQ(type, "normal"))
 					{
 						lmap->ldap_attr_type[use] = SM_LDAP_ATTR_NORMAL;
 						normalseen = true;
@@ -5067,7 +5171,7 @@ ldapmap_parseargs(map, args)
 					{
 						syserr("Unknown attribute type (%s) in %s",
 						       type, map->map_mname);
-						return false;
+						goto fail;
 					}
 				}
 				else
@@ -5087,17 +5191,20 @@ ldapmap_parseargs(map, args)
 		{
 			syserr("LDAP recursion requested in %s but no returnable attribute given",
 			       map->map_mname);
-			return false;
+			goto fail;
 		}
 		if (recurse && lmap->ldap_attrsonly == LDAPMAP_TRUE)
 		{
 			syserr("LDAP recursion requested in %s can not be used with -n",
 			       map->map_mname);
-			return false;
+			goto fail;
 		}
 	}
 	map->map_db1 = (ARBPTR_T) lmap;
 	return true;
+  fail:
+	SM_FREE(lmap_alloc);
+	return false;
 }
 
 /*
@@ -5387,12 +5494,12 @@ ph_timeout(unused)
 }
 
 static void
-#if NPH_VERSION >= 10200
+# if NPH_VERSION >= 10200
 ph_map_send_debug(appdata, text)
 	void *appdata;
-#else
+# else
 ph_map_send_debug(text)
-#endif
+# endif
 	char *text;
 {
 	if (LogLevel > 9)
@@ -5403,12 +5510,12 @@ ph_map_send_debug(text)
 }
 
 static void
-#if NPH_VERSION >= 10200
+# if NPH_VERSION >= 10200
 ph_map_recv_debug(appdata, text)
 	void *appdata;
-#else
+# else
 ph_map_recv_debug(text)
-#endif
+# endif
 	char *text;
 {
 	if (LogLevel > 10)
@@ -5488,9 +5595,9 @@ ph_map_open(map, mode)
 		if (ph_open(&(pmap->ph), host,
 			    PH_OPEN_ROUNDROBIN|PH_OPEN_DONTID,
 			    ph_map_send_debug, ph_map_recv_debug
-#if NPH_VERSION >= 10200
+# if NPH_VERSION >= 10200
 			    , NULL
-#endif
+# endif
 			    ) == 0
 		    && ph_id(pmap->ph, phmap_id) == 0)
 		{
@@ -5664,51 +5771,54 @@ syslog_map_parseargs(map, args)
 			priority += 4;
 
 #ifdef LOG_EMERG
-		if (sm_strcasecmp("EMERG", priority) == 0)
+		if (SM_STRCASEEQ("EMERG", priority))
 			map->map_prio = LOG_EMERG;
 		else
-#endif /* LOG_EMERG */
+#endif
 #ifdef LOG_ALERT
-		if (sm_strcasecmp("ALERT", priority) == 0)
+		if (SM_STRCASEEQ("ALERT", priority))
 			map->map_prio = LOG_ALERT;
 		else
-#endif /* LOG_ALERT */
+#endif
 #ifdef LOG_CRIT
-		if (sm_strcasecmp("CRIT", priority) == 0)
+		if (SM_STRCASEEQ("CRIT", priority))
 			map->map_prio = LOG_CRIT;
 		else
-#endif /* LOG_CRIT */
+#endif
 #ifdef LOG_ERR
-		if (sm_strcasecmp("ERR", priority) == 0)
+		if (SM_STRCASEEQ("ERR", priority))
 			map->map_prio = LOG_ERR;
 		else
-#endif /* LOG_ERR */
+#endif
 #ifdef LOG_WARNING
-		if (sm_strcasecmp("WARNING", priority) == 0)
+		if (SM_STRCASEEQ("WARNING", priority))
 			map->map_prio = LOG_WARNING;
 		else
-#endif /* LOG_WARNING */
+#endif
 #ifdef LOG_NOTICE
-		if (sm_strcasecmp("NOTICE", priority) == 0)
+		if (SM_STRCASEEQ("NOTICE", priority))
 			map->map_prio = LOG_NOTICE;
 		else
-#endif /* LOG_NOTICE */
+#endif
 #ifdef LOG_INFO
-		if (sm_strcasecmp("INFO", priority) == 0)
+		if (SM_STRCASEEQ("INFO", priority))
 			map->map_prio = LOG_INFO;
 		else
-#endif /* LOG_INFO */
+#endif
 #ifdef LOG_DEBUG
-		if (sm_strcasecmp("DEBUG", priority) == 0)
+		if (SM_STRCASEEQ("DEBUG", priority))
 			map->map_prio = LOG_DEBUG;
 		else
-#endif /* LOG_DEBUG */
+#endif
 		{
 			syserr("syslog_map_parseargs: Unknown priority %s",
 			       priority);
 			return false;
 		}
 	}
+#if _FFR_8BITENVADDR
+	map->map_mflags |= MF_KEEPXFMT;
+#endif
 	return true;
 }
 
@@ -5808,6 +5918,9 @@ dprintf_map_parseargs(map, args)
 		}
 		map->map_dbg_level = atoi(dbg_level);
 	}
+# if _FFR_8BITENVADDR
+	map->map_mflags |= MF_KEEPXFMT;
+# endif
 	return true;
 }
 
@@ -5895,23 +6008,23 @@ hes_map_lookup(map, name, av, statp)
 		char *np;
 		int nl;
 		int save_errno;
-		char nbuf[MAXNAME];
+		char nbuf[MAXNAME]; /* EAI:ok - larger buffer used if needed */
 
 		nl = strlen(name);
 		if (nl < sizeof(nbuf) - 1)
 			np = nbuf;
 		else
-			np = xalloc(strlen(name) + 2);
+			np = xalloc(nl + 2);
 		np[0] = '\\';
-		(void) sm_strlcpy(&np[1], name, (sizeof(nbuf)) - 1);
+		(void) sm_strlcpy(&np[1], name, sizeof(nbuf) - 1);
 # ifdef HESIOD_INIT
 		hp = hesiod_resolve(HesiodContext, np, map->map_file);
 # else
 		hp = hes_resolve(np, map->map_file);
-# endif /* HESIOD_INIT */
+# endif
 		save_errno = errno;
 		if (np != nbuf)
-			sm_free(np); /* XXX */
+			SM_FREE(np); /* XXX */
 		errno = save_errno;
 	}
 	else
@@ -6079,7 +6192,7 @@ ni_getcanonname(name, hbsize, statp)
 {
 	char *vptr;
 	char *ptr;
-	char nbuf[MAXNAME + 1];
+	char nbuf[MAXNAME + 1];	/* EAI:hostname */
 
 	if (tTd(38, 20))
 		sm_dprintf("ni_getcanonname(%s)\n", name);
@@ -6250,13 +6363,13 @@ text_map_lookup(map, name, av, statp)
 	int key_idx;
 	bool found_it;
 	long sff = map->map_sff;
-	char search_key[MAXNAME + 1];
+	char search_key[MAXNAME + 1];	/* EAI:ok */
 	char linebuf[MAXLINE];
-	char buf[MAXNAME + 1];
+	char buf[MAXNAME + 1];	/* EAI:ok */
 
 	found_it = false;
 	if (tTd(38, 20))
-		sm_dprintf("text_map_lookup(%s, %s)\n", map->map_mname,  name);
+		sm_dprintf("text_map_lookup(%s, %s)\n", map->map_mname, name);
 
 	buflen = strlen(name);
 	if (buflen > sizeof(search_key) - 1)
@@ -6264,7 +6377,7 @@ text_map_lookup(map, name, av, statp)
 	memmove(search_key, name, buflen);
 	search_key[buflen] = '\0';
 	if (!bitset(MF_NOFOLDCASE, map->map_mflags))
-		makelower(search_key);
+		makelower_buf(search_key, search_key, sizeof(search_key));
 
 	f = safefopen(map->map_file, O_RDONLY, FileMode, sff);
 	if (f == NULL)
@@ -6287,7 +6400,7 @@ text_map_lookup(map, name, av, statp)
 		if (p != NULL)
 			*p = '\0';
 		p = get_column(linebuf, key_idx, delim, buf, sizeof(buf));
-		if (p != NULL && sm_strcasecmp(search_key, p) == 0)
+		if (p != NULL && SM_STRCASEEQ(search_key, p))
 		{
 			found_it = true;
 			break;
@@ -6327,8 +6440,8 @@ text_getcanonname(name, hbsize, statp)
 	char *dot;
 	SM_FILE_T *f;
 	char linebuf[MAXLINE];
-	char cbuf[MAXNAME + 1];
-	char nbuf[MAXNAME + 1];
+	char cbuf[MAXNAME + 1];	/* EAI:hostname */
+	char nbuf[MAXNAME + 1];	/* EAI:hostname */
 
 	if (tTd(38, 20))
 		sm_dprintf("text_getcanonname(%s)\n", name);
@@ -6675,19 +6788,19 @@ user_map_open(map, mode)
 	if (map->map_valcolnm == NULL)
 		/* EMPTY */
 		/* nothing */ ;
-	else if (sm_strcasecmp(map->map_valcolnm, "name") == 0)
+	else if (SM_STRCASEEQ(map->map_valcolnm, "name"))
 		map->map_valcolno = 1;
-	else if (sm_strcasecmp(map->map_valcolnm, "passwd") == 0)
+	else if (SM_STRCASEEQ(map->map_valcolnm, "passwd"))
 		map->map_valcolno = 2;
-	else if (sm_strcasecmp(map->map_valcolnm, "uid") == 0)
+	else if (SM_STRCASEEQ(map->map_valcolnm, "uid"))
 		map->map_valcolno = 3;
-	else if (sm_strcasecmp(map->map_valcolnm, "gid") == 0)
+	else if (SM_STRCASEEQ(map->map_valcolnm, "gid"))
 		map->map_valcolno = 4;
-	else if (sm_strcasecmp(map->map_valcolnm, "gecos") == 0)
+	else if (SM_STRCASEEQ(map->map_valcolnm, "gecos"))
 		map->map_valcolno = 5;
-	else if (sm_strcasecmp(map->map_valcolnm, "dir") == 0)
+	else if (SM_STRCASEEQ(map->map_valcolnm, "dir"))
 		map->map_valcolno = 6;
-	else if (sm_strcasecmp(map->map_valcolnm, "shell") == 0)
+	else if (SM_STRCASEEQ(map->map_valcolnm, "shell"))
 		map->map_valcolno = 7;
 	else
 	{
@@ -7005,7 +7118,7 @@ switch_map_open(map, mode)
 	for (mapno = 0; mapno < nmaps; mapno++)
 	{
 		register STAB *s;
-		char nbuf[MAXNAME + 1];
+		char nbuf[MAXNAME + 1];	/* EAI:not relevant (map name) */
 
 		if (maptype[mapno] == NULL)
 			continue;
@@ -7397,6 +7510,9 @@ regex_map_init(map, ap)
 		if (*p != '\0')
 			*p++ = '\0';
 	}
+# if _FFR_8BITENVADDR
+	(void) dequote_internal_chars(p, p, strlen(p) + 1);
+# endif
 	if (tTd(38, 3))
 		sm_dprintf("regex_map_init: compile '%s' 0x%x\n", p, pflags);
 
@@ -7435,8 +7551,9 @@ regex_map_init(map, ap)
 		if (substrings >= MAX_MATCH)
 		{
 			syserr("too many substrings, %d max", MAX_MATCH);
-			sm_free(map_p->regex_pattern_buf); /* XXX */
-			sm_free(map_p); /* XXX */
+			SM_FREE(map_p->regex_pattern_buf); /* XXX */
+			SM_FREE(map_p); /* XXX */
+			SM_FREE(fields);
 			return false;
 		}
 		if (sub_param != NULL && sub_param[0] != '\0')
@@ -7444,7 +7561,12 @@ regex_map_init(map, ap)
 			/* optional parameter -sfields */
 			if (parse_fields(sub_param, fields,
 					 MAX_MATCH + 1, substrings) == -1)
+			{
+				SM_FREE(map_p->regex_pattern_buf); /* XXX */
+				SM_FREE(map_p); /* XXX */
+				SM_FREE(fields);
 				return false;
+			}
 		}
 		else
 		{
@@ -7498,7 +7620,8 @@ regex_map_lookup(map, name, av, statp)
 	{
 		char **cpp;
 
-		sm_dprintf("regex_map_lookup: key '%s'\n", name);
+		sm_dprintf("regex_map_lookup: name=%s, key='%s'\n",
+			map->map_mname, name);
 		for (cpp = av; cpp != NULL && *cpp != NULL; cpp++)
 			sm_dprintf("regex_map_lookup: arg '%s'\n", *cpp);
 	}
@@ -7521,7 +7644,7 @@ regex_map_lookup(map, name, av, statp)
 	if (map_p->regex_subfields != NULL)
 	{
 		/* option -s */
-		static char retbuf[MAXNAME];
+		static char retbuf[MAXNAME];	/* EAI:not relevant */
 		int fields[MAX_MATCH + 1];
 		bool first = true;
 		int anglecnt = 0, cmntcnt = 0, spacecnt = 0;
@@ -7620,9 +7743,7 @@ regex_map_lookup(map, name, av, statp)
 				  map->map_mname, name);
 			return NULL;
 		}
-
 		*dp = '\0';
-
 		return regex_map_rewrite(map, retbuf, strlen(retbuf), av);
 	}
 	return regex_map_rewrite(map, "", (size_t)0, av);
@@ -7681,7 +7802,7 @@ nsd_map_lookup(map, name, av, statp)
 	int buflen, r;
 	char *p;
 	ns_map_t *ns_map;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 	char buf[MAXLINE];
 
 	if (tTd(38, 20))
@@ -7693,7 +7814,7 @@ nsd_map_lookup(map, name, av, statp)
 	memmove(keybuf, name, buflen);
 	keybuf[buflen] = '\0';
 	if (!bitset(MF_NOFOLDCASE, map->map_mflags))
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 
 	ns_map = ns_map_t_find(map->map_file);
 	if (ns_map == NULL)
@@ -7861,7 +7982,7 @@ arpa_map_lookup(map, name, av, statp)
 	memset(result, '\0', sizeof(result));
 	rval = NULL;
 
-# if NETINET6
+#if NETINET6
 	if (sm_strncasecmp(name, "IPv6:", 5) == 0)
 	{
 		struct in6_addr in6_addr;
@@ -7890,8 +8011,8 @@ arpa_map_lookup(map, name, av, statp)
 		}
 	}
 	else
-# endif /* NETINET6 */
-# if NETINET
+#endif /* NETINET6 */
+#if NETINET
 	{
 		struct in_addr in_addr;
 
@@ -7907,7 +8028,7 @@ arpa_map_lookup(map, name, av, statp)
 			*statp = EX_OK;
 		}
 	}
-# endif /* NETINET */
+#endif /* NETINET */
 	if (r < 0)
 		*statp = EX_UNAVAILABLE;
 	if (tTd(38, 2))
@@ -7986,7 +8107,7 @@ setopt_map_lookup(map, name, av, statp)
 	/* check for valid number? */
 
 	/* use a table? */
-	if (sm_strcasecmp(name, "LogLevel") == 0)
+	if (SM_STRCASEEQ(name, "LogLevel"))
 	{
 		LogLevel = val;
 		sm_dprintf("LogLevel=%d\n", val);
@@ -8101,16 +8222,16 @@ socket_map_open(map, mode)
 # endif /* NETUNIX */
 		}
 # if NETUNIX
-		else if (sm_strcasecmp(p, "unix") == 0 ||
-			 sm_strcasecmp(p, "local") == 0)
+		else if (SM_STRCASEEQ(p, "unix") ||
+			 SM_STRCASEEQ(p, "local"))
 			addr.sa.sa_family = AF_UNIX;
 # endif /* NETUNIX */
 # if NETINET
-		else if (sm_strcasecmp(p, "inet") == 0)
+		else if (SM_STRCASEEQ(p, "inet"))
 			addr.sa.sa_family = AF_INET;
 # endif /* NETINET */
 # if NETINET6
-		else if (sm_strcasecmp(p, "inet6") == 0)
+		else if (SM_STRCASEEQ(p, "inet6"))
 			addr.sa.sa_family = AF_INET6;
 # endif /* NETINET6 */
 		else
@@ -8129,24 +8250,24 @@ socket_map_open(map, mode)
 	else
 	{
 		colon = p;
-#if NETUNIX
+# if NETUNIX
 		/* default to AF_UNIX */
 		addr.sa.sa_family = AF_UNIX;
-#else /* NETUNIX */
-# if NETINET
+# else /* NETUNIX */
+#  if NETINET
 		/* default to AF_INET */
 		addr.sa.sa_family = AF_INET;
-# else /* NETINET */
-#  if NETINET6
+#  else /* NETINET */
+#   if NETINET6
 		/* default to AF_INET6 */
 		addr.sa.sa_family = AF_INET6;
-#  else /* NETINET6 */
+#   else /* NETINET6 */
 		syserr("socket map \"%s\": unknown socket type %s",
 		       map->map_mname, p);
 		return false;
-#  endif /* NETINET6 */
-# endif /* NETINET */
-#endif /* NETUNIX */
+#   endif /* NETINET6 */
+#  endif /* NETINET */
+# endif /* NETUNIX */
 	}
 
 # if NETUNIX
@@ -8508,7 +8629,7 @@ socket_map_close(map)
 }
 
 /*
-** SOCKET_MAP_LOOKUP -- look up a datum in a SOCKET table
+**  SOCKET_MAP_LOOKUP -- look up a datum in a SOCKET table
 */
 
 char *
@@ -8522,7 +8643,7 @@ socket_map_lookup(map, name, av, statp)
 	int ret;
 	char *replybuf, *rval, *value, *status, *key;
 	SM_FILE_T *f;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 
 	replybuf = NULL;
 	rval = NULL;
@@ -8538,7 +8659,7 @@ socket_map_lookup(map, name, av, statp)
 			nettolen = sizeof(keybuf) - 1;
 		memmove(keybuf, name, nettolen);
 		keybuf[nettolen] = '\0';
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 		key = keybuf;
 	}
 	else
@@ -8659,15 +8780,13 @@ socket_map_lookup(map, name, av, statp)
 			*statp = EX_PROTOCOL;
 	}
 
-	if (replybuf != NULL)
-		sm_free(replybuf);
+	SM_FREE(replybuf);
 	return rval;
 
   errcl:
 	socket_map_close(map);
   error:
-	if (replybuf != NULL)
-		sm_free(replybuf);
+	SM_FREE(replybuf);
 	return rval;
 }
 #endif /* SOCKETMAP */
diff --git a/src/mci.c b/src/mci.c
index a50fd8ed0fe2..c134bd87e8c0 100644
--- a/src/mci.c
+++ b/src/mci.c
@@ -249,9 +249,7 @@ mci_uncache(mcislot, doquit)
 
 		mci->mci_retryrcpt = false;
 		mci->mci_tolist = NULL;
-#if PIPELINING
 		mci->mci_okrcpts = 0;
-#endif
 	}
 
 	SM_FREE(mci->mci_status);
@@ -389,9 +387,7 @@ mci_get(host, m)
 	/* initialize per-message data */
 	mci->mci_retryrcpt = false;
 	mci->mci_tolist = NULL;
-#if PIPELINING
 	mci->mci_okrcpts = 0;
-#endif
 	mci->mci_flags &= ~MCIF_NOTSTICKY;
 
 	if (mci->mci_rpool == NULL)
@@ -1204,7 +1200,7 @@ mci_traverse_persistent(action, pathname)
 		struct dirent *e;
 		char newpath[MAXPATHLEN];
 #if MAXPATHLEN <= MAXNAMLEN - 3
- ERROR "MAXPATHLEN <= MAXNAMLEN - 3"
+# ERROR "MAXPATHLEN <= MAXNAMLEN - 3"
 #endif
 
 		if ((d = opendir(pathname)) == NULL)
@@ -1590,14 +1586,14 @@ mci_generate_persistent_path(host, path, pathlen, createflag)
 	if (host[0] == '[')
 	{
 		bool good = false;
-# if NETINET6
+#if NETINET6
 		if (anynet_pton(AF_INET6, t_host, &in6_addr) == 1)
 			good = true;
-# endif
-# if NETINET
+#endif
+#if NETINET
 		if (inet_addr(t_host) != INADDR_NONE)
 			good = true;
-# endif
+#endif
 		if (!good)
 			return -1;
 	}
diff --git a/src/milter.c b/src/milter.c
index ba783c4c61db..215a52003a00 100644
--- a/src/milter.c
+++ b/src/milter.c
@@ -16,6 +16,9 @@ SM_RCSID("@(#)$Id: milter.c,v 8.281 2013-11-22 20:51:56 ca Exp $")
 # include 
 # include 
 # include 
+# if _FFR_8BITENVADDR
+#  include 
+# endif
 
 # include 
 # include 
@@ -175,11 +178,7 @@ static size_t MilterMaxDataSize = MILTER_MAX_DATA_SIZE;
 		sm_syslog(LOG_ERR, e->e_id, msg, dfname, sm_errstring(save_errno)); \
 	if (SuperSafe == SAFE_REALLY) \
 	{ \
-		if (e->e_dfp != NULL) \
-		{ \
-			(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT); \
-			e->e_dfp = NULL; \
-		} \
+		SM_CLOSE_FP(e->e_dfp);	\
 		e->e_flags &= ~EF_HAS_DF; \
 	} \
 	errno = save_errno; \
@@ -537,8 +536,9 @@ milter_write(m, cmd, buf, len, to, e, where)
 	{
 		if (tTd(64, 5))
 		{
-			sm_dprintf("milter_write(%s): length %ld out of range, cmd=%c\n",
-				m->mf_name, (long) len, command);
+			sm_dprintf("milter_write(%s): length %ld out of range, mds=%ld, cmd=%c\n",
+				m->mf_name, (long) len,
+				(long) MilterMaxDataSize, command);
 			sm_dprintf("milter_write(%s): buf=%s\n",
 				m->mf_name, str2prt(buf));
 		}
@@ -661,7 +661,7 @@ milter_open(m, parseonly, e)
 	struct hostent *hp = NULL;
 	SOCKADDR addr;
 
-	if (m->mf_conn == NULL || m->mf_conn[0] == '\0')
+	if (SM_IS_EMPTY(m->mf_conn))
 	{
 		if (tTd(64, 5))
 			sm_dprintf("X%s: empty or missing socket information\n",
@@ -711,16 +711,16 @@ milter_open(m, parseonly, e)
 # endif /* NETUNIX */
 		}
 # if NETUNIX
-		else if (sm_strcasecmp(p, "unix") == 0 ||
-			 sm_strcasecmp(p, "local") == 0)
+		else if (SM_STRCASEEQ(p, "unix") ||
+			 SM_STRCASEEQ(p, "local"))
 			addr.sa.sa_family = AF_UNIX;
 # endif
 # if NETINET
-		else if (sm_strcasecmp(p, "inet") == 0)
+		else if (SM_STRCASEEQ(p, "inet"))
 			addr.sa.sa_family = AF_INET;
 # endif
 # if NETINET6
-		else if (sm_strcasecmp(p, "inet6") == 0)
+		else if (SM_STRCASEEQ(p, "inet6"))
 			addr.sa.sa_family = AF_INET6;
 # endif
 		else
@@ -1249,11 +1249,11 @@ milter_setup(line)
 	m->mf_timeout[SMFTO_WRITE] = (time_t) 10;
 	m->mf_timeout[SMFTO_READ] = (time_t) 10;
 	m->mf_timeout[SMFTO_EOM] = (time_t) 300;
-#if _FFR_MILTER_CHECK
+# if _FFR_MILTER_CHECK
 	m->mf_mta_prot_version = SMFI_PROT_VERSION;
 	m->mf_mta_prot_flags = SMFI_CURR_PROT;
 	m->mf_mta_actions = SMFI_CURR_ACTS;
-#endif /* _FFR_MILTER_CHECK */
+# endif /* _FFR_MILTER_CHECK */
 
 	/* now scan through and assign info from the fields */
 	while (*p != '\0')
@@ -1271,6 +1271,8 @@ milter_setup(line)
 		if (*p++ != '=')
 		{
 			syserr("X%s: `=' expected", m->mf_name);
+			/* this should not be reached, but just in case */
+			SM_FREE(m);
 			return;
 		}
 		while (SM_ISSPACE(*p))
@@ -1301,7 +1303,7 @@ milter_setup(line)
 			milter_parse_timeouts(p, m);
 			break;
 
-#if _FFR_MILTER_CHECK
+# if _FFR_MILTER_CHECK
 		  case 'a':
 			m->mf_mta_actions = strtoul(p, NULL, 0);
 			break;
@@ -1311,7 +1313,7 @@ milter_setup(line)
 		  case 'v':
 			m->mf_mta_prot_version = strtoul(p, NULL, 0);
 			break;
-#endif /* _FFR_MILTER_CHECK */
+# endif /* _FFR_MILTER_CHECK */
 
 		  default:
 			syserr("X%s: unknown filter equate %c=",
@@ -1601,7 +1603,7 @@ milter_set_option(name, val, sticky)
 
 	for (mo = MilterOptTab; mo->mo_name != NULL; mo++)
 	{
-		if (sm_strcasecmp(mo->mo_name, name) == 0)
+		if (SM_STRCASEEQ(mo->mo_name, name))
 			break;
 	}
 
@@ -1710,7 +1712,7 @@ milter_reopen_df(e)
 		/* close read-only data file */
 		if (bitset(EF_HAS_DF, e->e_flags) && e->e_dfp != NULL)
 		{
-			(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT);
+			SM_CLOSE_FP(e->e_dfp);
 			e->e_flags &= ~EF_HAS_DF;
 		}
 
@@ -1891,7 +1893,7 @@ milter_send_macros(m, macros, cmd, e)
 	ssize_t s;
 
 	/* sanity check */
-	if (macros == NULL || macros[0] == NULL)
+	if (NULL == macros || NULL == macros[0])
 		return;
 
 	/* put together data */
@@ -1905,7 +1907,13 @@ milter_send_macros(m, macros, cmd, e)
 		if (v == NULL)
 			continue;
 		expand(v, exp, sizeof(exp), e);
-		s += strlen(macros[i]) + 1 + strlen(exp) + 1;
+		s += strlen(macros[i]) + 1 +
+# if _FFR_8BITENVADDR
+			ilenx(exp)
+# else
+			strlen(exp)
+# endif
+			+ 1;
 	}
 
 	if (s < 0)
@@ -1923,6 +1931,9 @@ milter_send_macros(m, macros, cmd, e)
 		if (v == NULL)
 			continue;
 		expand(v, exp, sizeof(exp), e);
+# if _FFR_8BITENVADDR
+		dequote_internal_chars(exp, exp, sizeof(exp));
+# endif
 
 		if (tTd(64, 10))
 			sm_dprintf("milter_send_macros(%s, %c): %s=%s\n",
@@ -2385,21 +2396,21 @@ milter_negotiate(m, e, milters)
 		return -1;
 	}
 
-#if _FFR_MILTER_CHECK
+# if _FFR_MILTER_CHECK
 	mta_prot_vers = m->mf_mta_prot_version;
 	mta_prot_flags = m->mf_mta_prot_flags;
 	mta_actions = m->mf_mta_actions;
-#else /* _FFR_MILTER_CHECK */
+# else /* _FFR_MILTER_CHECK */
 	mta_prot_vers = SMFI_PROT_VERSION;
 	mta_prot_flags = SMFI_CURR_PROT;
 	mta_actions = SMFI_CURR_ACTS;
-#endif /* _FFR_MILTER_CHECK */
-#if _FFR_MDS_NEGOTIATE
+# endif /* _FFR_MILTER_CHECK */
+# if _FFR_MDS_NEGOTIATE
 	if (MilterMaxDataSize == MILTER_MDS_256K)
 		mta_prot_flags |= SMFIP_MDS_256K;
 	else if (MilterMaxDataSize == MILTER_MDS_1M)
 		mta_prot_flags |= SMFIP_MDS_1M;
-#endif /* _FFR_MDS_NEGOTIATE */
+# endif /* _FFR_MDS_NEGOTIATE */
 
 	fvers = htonl(mta_prot_vers);
 	pflags = htonl(mta_prot_flags);
@@ -2424,7 +2435,10 @@ milter_negotiate(m, e, milters)
 	response = milter_read(m, &rcmd, &rlen, m->mf_timeout[SMFTO_READ], e,
 				"negotiate");
 	if (m->mf_state == SMFS_ERROR)
+	{
+		SM_FREE(response);
 		return -1;
+	}
 
 	if (rcmd != SMFIC_OPTNEG)
 	{
@@ -2513,8 +2527,8 @@ milter_negotiate(m, e, milters)
 		goto error;
 	}
 
-#if _FFR_MDS_NEGOTIATE
-#define MDSWARNING(sz) \
+# if _FFR_MDS_NEGOTIATE
+#  define MDSWARNING(sz) \
 	do	\
 	{	\
 		sm_syslog(LOG_WARNING, NOQID,	\
@@ -2545,7 +2559,7 @@ milter_negotiate(m, e, milters)
 	else if (MilterMaxDataSize != MILTER_MDS_64K)
 		MDSWARNING(MILTER_MDS_64K);
 	m->mf_pflags &= ~SMFI_INTERNAL;
-#endif /* _FFR_MDS_NEGOTIATE */
+# endif /* _FFR_MDS_NEGOTIATE */
 
 	/* check for protocol feature mismatch */
 	if ((m->mf_pflags & mta_prot_flags) != m->mf_pflags)
@@ -2785,10 +2799,10 @@ milter_body(m, e, state)
 		/*  Change LF to CRLF */
 		if (c == '\n')
 		{
-#if !_FFR_MILTER_CONVERT_ALL_LF_TO_CRLF
+# if !_FFR_MILTER_CONVERT_ALL_LF_TO_CRLF
 			/* Not a CRLF already? */
 			if (prevchar != '\r')
-#endif
+# endif
 			{
 				/* Room for CR now? */
 				if (bp + 2 > &buf[sizeof(buf)])
@@ -2973,14 +2987,14 @@ milter_addheader(m, response, rlen, e)
 
 	for (h = e->e_header; h != NULL; h = h->h_link)
 	{
-		if (sm_strcasecmp(h->h_field, response) == 0 &&
+		if (SM_STRCASEEQ(h->h_field, response) &&
 		    !bitset(H_USER, h->h_flags) &&
 		    !bitset(H_TRACE, h->h_flags))
 			break;
 	}
 
 	mh_v_len = 0;
-	mh_value = quote_internal_chars(val, NULL, &mh_v_len);
+	mh_value = quote_internal_chars(val, NULL, &mh_v_len, NULL);
 
 	/* add to e_msgsize */
 	e->e_msgsize += strlen(response) + 2 + strlen(val);
@@ -2995,7 +3009,7 @@ milter_addheader(m, response, rlen, e)
 				  "Milter (%s) change: default header %s value with %s",
 				  m->mf_name, h->h_field, mh_value);
 		if (bitset(SMFIP_HDR_LEADSPC, m->mf_pflags))
-			h->h_value = mh_value;
+			h->h_value = mh_value;	/* XXX must be allocated from rpool? */
 		else
 		{
 			h->h_value = addleadingspace(mh_value, e->e_rpool);
@@ -3096,7 +3110,7 @@ milter_insheader(m, response, rlen, e)
 			  "Milter (%s) insert (%d): header: %s: %s",
 			   m->mf_name, idx, field, val);
 	mh_v_len = 0;
-	mh_value = quote_internal_chars(val, NULL, &mh_v_len);
+	mh_value = quote_internal_chars(val, NULL, &mh_v_len, NULL);
 	insheader(idx, newstr(field), mh_value, H_USER, e,
 		!bitset(SMFIP_HDR_LEADSPC, m->mf_pflags));
 	SM_FREE(mh_value);
@@ -3168,12 +3182,12 @@ milter_changeheader(m, response, rlen, e)
 	}
 
 	mh_v_len = 0;
-	mh_value = quote_internal_chars(val, NULL, &mh_v_len);
+	mh_value = quote_internal_chars(val, NULL, &mh_v_len, NULL);
 
 	sysheader = NULL;
 	for (h = e->e_header; h != NULL; h = h->h_link)
 	{
-		if (sm_strcasecmp(h->h_field, field) == 0)
+		if (SM_STRCASEEQ(h->h_field, field))
 		{
 			if (bitset(H_USER, h->h_flags) && --index <= 0)
 			{
@@ -3300,7 +3314,7 @@ milter_changeheader(m, response, rlen, e)
 	else
 	{
 		if (bitset(SMFIP_HDR_LEADSPC, m->mf_pflags))
-			h->h_value = mh_value;
+			h->h_value = mh_value;	/* XXX must be allocated from rpool? */
 		else
 		{
 			h->h_value = addleadingspace(mh_value, e->e_rpool);
@@ -3515,6 +3529,7 @@ milter_addrcpt_par(response, rlen, e, mname)
 	olderrors = Errors;
 
 	/* how to set ESMTP arguments? */
+/* XXX argv[0] must be [i] */
 	a = parseaddr(argv[0], NULLADDR, RF_COPYALL, ' ', &delimptr, e, true);
 
 	if (a != NULL && olderrors == Errors)
@@ -3998,7 +4013,7 @@ milter_connect(hostname, addr, e, state)
 	else
 		milter_per_connection_check(e);
 
-#if !_FFR_MILTER_CONNECT_REPLYCODE
+# if !_FFR_MILTER_CONNECT_REPLYCODE
 	/*
 	**  SMFIR_REPLYCODE can't work with connect due to
 	**  the requirements of SMTP.  Therefore, ignore the
@@ -4023,7 +4038,7 @@ milter_connect(hostname, addr, e, state)
 			response = NULL;
 		}
 	}
-#endif /* !_FFR_MILTER_CONNECT_REPLYCODE */
+# endif /* !_FFR_MILTER_CONNECT_REPLYCODE */
 	return response;
 }
 
@@ -4683,8 +4698,7 @@ milter_data(e, state)
 
 		if (dfopen)
 		{
-			(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT);
-			e->e_dfp = NULL;
+			SM_CLOSE_FP(e->e_dfp);
 			e->e_flags &= ~EF_HAS_DF;
 			dfopen = false;
 		}
diff --git a/src/mime.c b/src/mime.c
index 48849d6a48ea..126304cb9819 100644
--- a/src/mime.c
+++ b/src/mime.c
@@ -15,6 +15,7 @@
 #include 
 
 SM_RCSID("@(#)$Id: mime.c,v 8.149 2013-11-22 20:51:56 ca Exp $")
+#include 
 
 /*
 **  MIME support.
@@ -256,18 +257,18 @@ mime8to7(mci, header, e, boundaries, flags, level)
 	**	Do a recursive descent into the message.
 	*/
 
-	if (sm_strcasecmp(type, "multipart") == 0 &&
+	if (SM_STRCASEEQ(type, "multipart") &&
 	    (!bitset(M87F_NO8BIT, flags) || bitset(M87F_NO8TO7, flags)) &&
 	    !bitset(EF_TOODEEP, e->e_flags)
 	   )
 	{
 
-		if (sm_strcasecmp(subtype, "digest") == 0)
+		if (SM_STRCASEEQ(subtype, "digest"))
 			flags |= M87F_DIGEST;
 
 		for (i = 0; i < argc; i++)
 		{
-			if (sm_strcasecmp(argv[i].a_field, "boundary") == 0)
+			if (SM_STRCASEEQ(argv[i].a_field, "boundary"))
 				break;
 		}
 		if (i >= argc || argv[i].a_value == NULL)
@@ -393,7 +394,7 @@ mime8to7(mci, header, e, boundaries, flags, level)
 	**	Class 's' is predefined to have "rfc822" only.
 	*/
 
-	if (sm_strcasecmp(type, "message") == 0)
+	if (SM_STRCASEEQ(type, "message"))
 	{
 		if (!wordinclass(subtype, 's') ||
 		    bitset(EF_TOODEEP, e->e_flags))
@@ -493,7 +494,7 @@ mime8to7(mci, header, e, boundaries, flags, level)
 			type == NULL ? "[none]" : type,
 			subtype == NULL ? "[none]" : subtype);
 	}
-	if (cte != NULL && sm_strcasecmp(cte, "binary") == 0)
+	if (cte != NULL && SM_STRCASEEQ(cte, "binary"))
 		sectionsize = sectionhighbits;
 	linelen = 0;
 	bp = buf;
@@ -902,9 +903,9 @@ mimeboundary(line, boundaries)
 
 	/* strip off trailing whitespace */
 	while (i > 0 && (line[i - 1] == ' ' || line[i - 1] == '\t'
-#if _FFR_MIME_CR_OK
+# if _FFR_MIME_CR_OK
 		|| line[i - 1] == '\r'
-#endif
+# endif
 	       ))
 		i--;
 	savec = line[i];
@@ -1095,7 +1096,7 @@ mime7to8(mci, header, e)
 	*/
 
 	pxflags = PXLF_MAPFROM;
-	if (sm_strcasecmp(cte, "base64") == 0)
+	if (SM_STRCASEEQ(cte, "base64"))
 	{
 		int c1, c2, c3, c4;
 
@@ -1132,16 +1133,16 @@ mime7to8(mci, header, e)
 			c1 = CHAR64(c1);
 			c2 = CHAR64(c2);
 
-#if MIME7TO8_OLD
-#define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \
+# if MIME7TO8_OLD
+#  define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \
 			++fbufp;
-#else /* MIME7TO8_OLD */
-#define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \
+# else /* MIME7TO8_OLD */
+#  define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \
 		{					\
 			++fbufp;			\
 			pxflags |= PXLF_NOADDEOL;	\
 		}
-#endif /* MIME7TO8_OLD */
+# endif /* MIME7TO8_OLD */
 
 #define PUTLINE64	\
 	do		\
diff --git a/src/newaliases.0 b/src/newaliases.0
index 49ff2b0cba3b..d8952ee6628c 100644
--- a/src/newaliases.0
+++ b/src/newaliases.0
@@ -1,34 +1,34 @@
-NEWALIASES(1)                                                    NEWALIASES(1)
+NEWALIASES(1)               General Commands Manual              NEWALIASES(1)
 
 
 
-NAME
+NNAAMMEE
        newaliases - rebuild the data base for the mail aliases file
 
-SYNOPSIS
-       newaliases
+SSYYNNOOPPSSIISS
+       nneewwaalliiaasseess
 
-DESCRIPTION
-       Newaliases  rebuilds  the  random access data base for the mail aliases
+DDEESSCCRRIIPPTTIIOONN
+       NNeewwaalliiaasseess  rebuilds  the  random access data base for the mail aliases
        file /etc/mail/aliases.  It must be run each time this file is  changed
        in order for the change to take effect.
 
-       Newaliases is identical to ``sendmail -bi''.
+       NNeewwaalliiaasseess is identical to ``sendmail -bi''.
 
-       The newaliases utility exits 0 on success, and >0 if an error occurs.
+       The nneewwaalliiaasseess utility exits 0 on success, and >0 if an error occurs.
 
-       Notice:  do  not  use  makemap to create the aliases data base, because
-       newaliases puts a special token into the data base that is required  by
-       sendmail.
+       Notice:  do  nnoott  use  mmaakkeemmaapp to create the aliases data base, because
+       nneewwaalliiaasseess puts a special token into the data base that is required  by
+       sseennddmmaaiill..
 
-FILES
+FFIILLEESS
        /etc/mail/aliases   The mail aliases file
 
-SEE ALSO
+SSEEEE AALLSSOO
        aliases(5), sendmail(8)
 
-HISTORY
-       The newaliases command appeared in 4.0BSD.
+HHIISSTTOORRYY
+       The nneewwaalliiaasseess command appeared in 4.0BSD.
 
 
 
diff --git a/src/parseaddr.c b/src/parseaddr.c
index 58dde0f92465..f73a2688309f 100644
--- a/src/parseaddr.c
+++ b/src/parseaddr.c
@@ -16,6 +16,7 @@
 SM_RCSID("@(#)$Id: parseaddr.c,v 8.407 2013-11-22 20:51:56 ca Exp $")
 
 #include 
+#include 
 #include "map.h"
 
 static void	allocaddr __P((ADDRESS *, int, char *, ENVELOPE *));
@@ -42,7 +43,7 @@ static bool	hasctrlchar __P((register char *, bool, bool));
 **	of 'berkeley' -- to be transmitted over the arpanet.
 **
 **	Parameters:
-**		addr -- the address to parse.
+**		addr -- the address to parse. [i]
 **		a -- a pointer to the address descriptor buffer.
 **			If NULL, an address will be created.
 **		flags -- describe detail for parsing.  See RF_ definitions
@@ -85,6 +86,14 @@ parseaddr(addr, a, flags, delim, delimptr, e, isrcpt)
 	/*
 	**  Initialize and prescan address.
 	*/
+#if _FFR_8BITENVADDR
+	if (bitset(RF_IS_EXT, flags) && addr != NULL)
+	{
+		int len = 0;
+
+		addr = quote_internal_chars(addr, NULL, &len, NULL);
+	}
+#endif
 
 	e->e_to = addr;
 	if (tTd(20, 1))
@@ -145,6 +154,13 @@ parseaddr(addr, a, flags, delim, delimptr, e, isrcpt)
 	*/
 
 	a = buildaddr(pvp, a, flags, e);
+#if _FFR_8BITENVADDR
+	{
+		int len = 0;
+
+		a->q_user = quote_internal_chars(a->q_user, NULL, &len, e->e_rpool); /* EAI: ok */
+	}
+#endif
 
 	if (hasctrlchar(a->q_user, isrcpt, true))
 	{
@@ -239,6 +255,7 @@ parseaddr(addr, a, flags, delim, delimptr, e, isrcpt)
 
 	return a;
 }
+
 /*
 **  INVALIDADDR -- check for address containing characters used for macros
 **
@@ -264,7 +281,7 @@ invalidaddr(addr, delimptr, isrcpt)
 	bool result = false;
 	char savedelim = '\0';
 	char *b = addr;
-	int len = 0;
+	XLENDECL
 
 	if (delimptr != NULL)
 	{
@@ -275,7 +292,7 @@ invalidaddr(addr, delimptr, isrcpt)
 	}
 	for (; *addr != '\0'; addr++)
 	{
-#if !_FFR_EAI
+#if !USE_EAI
 		if (!EightBitAddrOK && (*addr & 0340) == 0200)
 		{
 			setstat(EX_USAGE);
@@ -283,18 +300,22 @@ invalidaddr(addr, delimptr, isrcpt)
 			*addr = BAD_CHAR_REPLACEMENT;
 		}
 #endif
-		if (++len > MAXNAME - 1)
+		XLEN(*addr);
+		if (xlen > MAXNAME - 1)	/* EAI:ok */
 		{
 			char saved = *addr;
 
 			*addr = '\0';
 			usrerr("553 5.1.0 Address \"%s\" too long (%d bytes max)",
-			       b, MAXNAME - 1);
+			       b, MAXNAME - 1);	/* EAI:ok */
 			*addr = saved;
 			result = true;
 			goto delim;
 		}
 	}
+#if USE_EAI
+	/* check for valid UTF8 string? */
+#endif
 	if (result)
 	{
 		if (isrcpt)
@@ -309,6 +330,7 @@ invalidaddr(addr, delimptr, isrcpt)
 		*delimptr = savedelim;	/* restore old character at delimptr */
 	return result;
 }
+
 /*
 **  HASCTRLCHAR -- check for address containing meta-characters
 **
@@ -327,6 +349,9 @@ invalidaddr(addr, delimptr, isrcpt)
 **		true -- if the address has any "weird" characters or
 **			non-printable characters or if a quote is unbalanced.
 **		false -- otherwise.
+**
+**	Side Effects:
+**		Might invoke shorten_rfc822_string() to change addr in place.
 */
 
 static bool
@@ -335,21 +360,22 @@ hasctrlchar(addr, isrcpt, complain)
 	bool isrcpt, complain;
 {
 	bool quoted = false;
-	int len = 0;
 	char *result = NULL;
 	char *b = addr;
+	XLENDECL
 
 	if (addr == NULL)
 		return false;
 	for (; *addr != '\0'; addr++)
 	{
-		if (++len > MAXNAME - 1)
+		XLEN(*addr);
+		if (xlen > MAXNAME - 1)	/* EAI:ok */
 		{
 			if (complain)
 			{
-				(void) shorten_rfc822_string(b, MAXNAME - 1);
+				(void) shorten_rfc822_string(b, MAXNAME - 1);	/* EAI:ok */
 				usrerr("553 5.1.0 Address \"%s\" too long (%d bytes max)",
-				       b, MAXNAME - 1);
+				       b, MAXNAME - 1);	/* EAI:ok */
 				return true;
 			}
 			result = "too long";
@@ -372,15 +398,13 @@ hasctrlchar(addr, isrcpt, complain)
 				break;
 			}
 		}
-#if !_FFR_EAI
-		if (!EightBitAddrOK && (*addr & 0340) == 0200)
+		if (!SMTPUTF8 && !EightBitAddrOK && (*addr & 0340) == 0200)
 		{
 			setstat(EX_USAGE);
 			result = "8-bit character";
 			*addr = BAD_CHAR_REPLACEMENT;
 			continue;
 		}
-#endif
 	}
 	if (quoted)
 		result = "unbalanced quote"; /* unbalanced quote */
@@ -395,6 +419,7 @@ hasctrlchar(addr, isrcpt, complain)
 	}
 	return result != NULL;
 }
+
 /*
 **  ALLOCADDR -- do local allocations of address on demand.
 **
@@ -690,6 +715,7 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 	char *saveto = CurEnv->e_to;
 	static char *av[MAXATOM + 1];
 	static bool firsttime = true;
+	XLENDECL
 
 	if (firsttime)
 	{
@@ -744,6 +770,7 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 	{
 		/* read a token */
 		tok = q;
+		XLENRESET;
 		for (;;)
 		{
 			/* store away any old lookahead character */
@@ -754,6 +781,8 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 				{
 	addrtoolong:
 					usrerr("553 5.1.1 Address too long");
+
+					/* ilenx()? */
 					if (strlen(addr) > MAXNAME)
 						addr[MAXNAME] = '\0';
 	returnnull:
@@ -764,6 +793,8 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 						*delimptr = p;
 					}
 					CurEnv->e_to = saveto;
+					if (tTd(22, 12))
+						sm_dprintf("prescan: ==> NULL\n");
 					return NULL;
 				}
 
@@ -773,6 +804,7 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 				    !EightBitAddrOK)
 					c &= 0x7f;
 #endif /* !ALLOW_255 */
+				XLEN(c);
 				*q++ = c;
 			}
 
@@ -838,6 +870,7 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 					if (q >= &pvpbuf[pvpbsize - 5])
 						goto addrtoolong;
 					*q++ = '\\';
+					XLEN('\\');
 					continue;
 				}
 			}
@@ -943,7 +976,7 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 				usrerr("553 5.1.0 prescan: too many tokens");
 				goto returnnull;
 			}
-			if (q - tok > MAXNAME)
+			if (xlen > MAXNAME)	/* EAI:ok */
 			{
 				usrerr("553 5.1.0 prescan: token too long");
 				goto returnnull;
@@ -995,7 +1028,7 @@ prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab, ignore)
 **	and try over again.
 **
 **	Parameters:
-**		pvp -- pointer to token vector.
+**		pvp -- pointer to token vector. [i]
 **		ruleset -- the ruleset to use for rewriting.
 **		reclevel -- recursion level (to catch loops).
 **		e -- the current envelope.
@@ -1241,7 +1274,7 @@ rewrite(pvp, ruleset, reclevel, e, maxatom)
 
 			  default:
 				/* must have exact match */
-				if (sm_strcasecmp(rp, ap))
+				if (!SM_STRCASEEQ(rp, ap))
 					goto backup;
 				avp++;
 				break;
@@ -1406,7 +1439,7 @@ rewrite(pvp, ruleset, reclevel, e, maxatom)
 						sm_dprintf("rewrite: RHS $&{%s} => \"%s\"\n",
 							macname(rp[1]),
 							mval == NULL ? "(NULL)" : mval);
-					if (mval == NULL || *mval == '\0')
+					if (SM_IS_EMPTY(mval))
 						continue;
 
 					/* save the remainder of the input */
@@ -1543,7 +1576,7 @@ rewrite(pvp, ruleset, reclevel, e, maxatom)
 				{
 					cataddr(xpvp, NULL, replac,
 						&pvpbuf[sizeof(pvpbuf)] - replac,
-						'\0', false);
+						'\0', true);
 					if (arg_rvp <
 					    &argvect[MAX_MAP_ARGS - 1])
 						*++arg_rvp = replac;
@@ -1567,7 +1600,7 @@ rewrite(pvp, ruleset, reclevel, e, maxatom)
 			{
 				cataddr(xpvp, NULL, replac,
 					&pvpbuf[sizeof(pvpbuf)] - replac,
-					'\0', false);
+					'\0', true);
 				if (arg_rvp < &argvect[MAX_MAP_ARGS - 1])
 					*++arg_rvp = replac;
 			}
@@ -1670,6 +1703,7 @@ rewrite(pvp, ruleset, reclevel, e, maxatom)
 	}
 	return rstat;
 }
+
 /*
 **  CALLSUBR -- call subroutines in rewrite vector
 **
@@ -1786,8 +1820,8 @@ callsubr(pvp, reclevel, e)
 **
 **	Parameters:
 **		smap -- the map to use for the lookup.
-**		key -- the key to look up.
-**		argvect -- arguments to pass to the map lookup.
+**		key -- the key to look up. [x]
+**		argvect -- arguments to pass to the map lookup. [x]
 **		pstat -- a pointer to an integer in which to store the
 **			status from the lookup.
 **		e -- the current envelope.
@@ -1979,8 +2013,8 @@ buildaddr(tv, a, flags, e)
 	register char *p;
 	char *mname;
 	char **hostp;
-	char hbuf[MAXNAME + 1];
-	static char ubuf[MAXNAME + 2];
+	char hbuf[MAXNAME + 1];	/* EAI:ok */
+	static char ubuf[MAXNAME_I + 2];
 
 	if (tTd(24, 5))
 	{
@@ -2047,12 +2081,12 @@ buildaddr(tv, a, flags, e)
 	if (tv == hostp)
 		hostp = NULL;
 	else if (hostp != NULL)
-		cataddr(hostp, tv - 1, hbuf, sizeof(hbuf), '\0', false);
+		cataddr(hostp, tv - 1, hbuf, sizeof(hbuf), '\0', true);
 	cataddr(++tv, NULL, ubuf, sizeof(ubuf), ' ', false);
 	--maxatom;
 
 	/* save away the host name */
-	if (sm_strcasecmp(mname, "error") == 0)
+	if (SM_STRCASEEQ(mname, "error"))
 	{
 		/* Set up triplet for use by -bv */
 		a->q_mailer = &errormailer;
@@ -2077,7 +2111,7 @@ buildaddr(tv, a, flags, e)
 			else
 			{
 				for (ep = ErrorCodes; ep->ec_name != NULL; ep++)
-					if (sm_strcasecmp(ep->ec_name, hbuf) == 0)
+					if (SM_STRCASEEQ(ep->ec_name, hbuf))
 						break;
 				setstat(ep->ec_code);
 			}
@@ -2123,7 +2157,7 @@ buildaddr(tv, a, flags, e)
 
 	for (mp = Mailer; (m = *mp++) != NULL; )
 	{
-		if (sm_strcasecmp(m->m_name, mname) == 0)
+		if (SM_STRCASEEQ(m->m_name, mname))
 			break;
 	}
 	if (m == NULL)
@@ -2198,9 +2232,9 @@ buildaddr(tv, a, flags, e)
 	*/
 
 	if (a->q_host != NULL && !bitnset(M_HST_UPPER, m->m_flags))
-		makelower(a->q_host);
+		makelower_a(&a->q_host, e->e_rpool);
 	if (!bitnset(M_USR_UPPER, m->m_flags))
-		makelower(a->q_user);
+		makelower_a(&a->q_user, e->e_rpool);
 
 	if (tTd(24, 6))
 	{
@@ -2214,7 +2248,7 @@ buildaddr(tv, a, flags, e)
 **  CATADDR -- concatenate pieces of addresses (putting in  subs)
 **
 **	Parameters:
-**		pvp -- parameter vector to rebuild.
+**		pvp -- parameter vector to rebuild. [i]
 **		evp -- last parameter to include.  Can be NULL to
 **			use entire pvp.
 **		buf -- buffer to build the string into.
@@ -2223,7 +2257,7 @@ buildaddr(tv, a, flags, e)
 **			'\0': SpaceSub.
 **			NOSPACESEP: no separator
 **		external -- convert to external form?
-**			(no metacharacters; METAQUOTEs removed, see below)
+**			(undo "meta quoting")
 **
 **	Returns:
 **		none.
@@ -2242,9 +2276,6 @@ buildaddr(tv, a, flags, e)
 **	The cataddr routine needs to be aware of whether it is producing
 **	an internal or external form as output (it only takes internal
 **	form as input).
-**
-**	The parseaddr routine has a similar issue on input, but that
-**	is flagged on the basis of which token table is passed in.
 */
 
 void
@@ -2453,7 +2484,6 @@ static struct qflags	AddressFlags[] =
 	{ "QBYNRELAY",		QBYNRELAY	},
 	{ "QINTBCC",		QINTBCC		},
 	{ "QDYNMAILER",		QDYNMAILER	},
-	{ "QRCPTOK",		QRCPTOK		},
 	{ "QSECURE",		QSECURE		},
 	{ "QTHISPASS",		QTHISPASS	},
 	{ "QRCPTOK",		QRCPTOK		},
@@ -2644,11 +2674,12 @@ emptyaddr(a)
 	return a->q_paddr == NULL || strcmp(a->q_paddr, "<>") == 0 ||
 	       a->q_user == NULL || strcmp(a->q_user, "<>") == 0;
 }
+
 /*
 **  REMOTENAME -- return the name relative to the current mailer
 **
 **	Parameters:
-**		name -- the name to translate.
+**		name -- the name to translate. [i]
 **		m -- the mailer that we want to do rewriting relative to.
 **		flags -- fine tune operations.
 **		pstat -- pointer to status word.
@@ -2656,10 +2687,7 @@ emptyaddr(a)
 **
 **	Returns:
 **		the text string representing this address relative to
-**			the receiving mailer.
-**
-**	Side Effects:
-**		none.
+**			the receiving mailer. [i]
 **
 **	Warnings:
 **		The text string returned is tucked away locally;
@@ -2678,8 +2706,8 @@ remotename(name, m, flags, pstat, e)
 	char *SM_NONVOLATILE fancy;
 	char *oldg;
 	int rwset;
-	static char buf[MAXNAME + 1];
-	char lbuf[MAXNAME + 1];
+	static char buf[MAXNAME_I + 1];
+	char lbuf[MAXNAME_I + 1];
 	char pvpbuf[PSBUFSIZE];
 	char addrtype[4];
 
@@ -3096,6 +3124,7 @@ dequote_map(map, name, av, statp)
 **
 **	Returns:
 **		EX_OK -- if the rwset doesn't resolve to $#error
+**			or is not defined
 **		else -- the failure status (message printed)
 */
 
diff --git a/src/queue.c b/src/queue.c
index 526b40469486..42ac3eb603fd 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -16,19 +16,23 @@
 
 SM_RCSID("@(#)$Id: queue.c,v 8.1000 2013-11-22 20:51:56 ca Exp $")
 
+#include 
 #include 
+#if _FFR_DMTRIGGER
+# include 
+#endif
 
-# define RELEASE_QUEUE	(void) 0
-# define ST_INODE(st)	(st).st_ino
+#define RELEASE_QUEUE	(void) 0
+#define ST_INODE(st)	(st).st_ino
 
-#  define sm_file_exists(errno) ((errno) == EEXIST)
+#define sm_file_exists(errno) ((errno) == EEXIST)
 
-# if HASFLOCK && defined(O_EXLOCK)
-#   define SM_OPEN_EXLOCK 1
-#   define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL|O_EXLOCK)
-# else
-#  define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL)
-# endif
+#if HASFLOCK && defined(O_EXLOCK)
+# define SM_OPEN_EXLOCK 1
+# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL|O_EXLOCK)
+#else
+# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL)
+#endif
 
 #ifndef SM_OPEN_EXLOCK
 # define SM_OPEN_EXLOCK 0
@@ -43,6 +47,7 @@ SM_RCSID("@(#)$Id: queue.c,v 8.1000 2013-11-22 20:51:56 ca Exp $")
 **	QF_VERSION == 8 is  sendmail 8.13
 */
 
+/* XREF: op.me: QUEUE FILE FORMAT: V */
 #define QF_VERSION	8	/* version number of this queue format */
 
 static char	queue_letter __P((ENVELOPE *, int));
@@ -141,22 +146,16 @@ static int	sm_strshufflecmp __P((char *, char *));
 static void	init_shuffle_alphabet __P(());
 #endif
 
-/*
-**  Note: workcmpf?() don't use a prototype because it will cause a conflict
-**  with the qsort() call (which expects something like
-**  int (*compar)(const void *, const void *), not (WORK *, WORK *))
-*/
-
-static int	workcmpf0();
-static int	workcmpf1();
-static int	workcmpf2();
-static int	workcmpf3();
-static int	workcmpf4();
+static int	workcmpf0 __P((const void *, const void *));
+static int	workcmpf1 __P((const void *, const void *));
+static int	workcmpf2 __P((const void *, const void *));
+static int	workcmpf3 __P((const void *, const void *));
+static int	workcmpf4 __P((const void *, const void *));
 static int	randi = 3;	/* index for workcmpf5() */
-static int	workcmpf5();
-static int	workcmpf6();
+static int	workcmpf5 __P((const void *, const void *));
+static int	workcmpf6 __P((const void *, const void *));
 #if _FFR_RHS
-static int	workcmpf7();
+static int	workcmpf7 __P((const void *, const void *));
 #endif
 
 #if RANDOMSHIFT
@@ -333,8 +332,10 @@ hash_q(p, h)
 **
 **	Parameters:
 **		e -- the envelope to queue up.
-**		announce -- if true, tell when you are queueing up.
-**		msync -- if true, then fsync() if SuperSafe interactive mode.
+**		flags -- QUP_FL_*:
+**			QUP_FL_ANNOUNCE -- tell when queueing up.
+**			QUP_FL_MSYNC -- fsync() if SuperSafe interactive mode.
+**			QUP_FL_UNLOCK -- invoke unlockqueue().
 **
 **	Returns:
 **		none.
@@ -345,10 +346,9 @@ hash_q(p, h)
 */
 
 void
-queueup(e, announce, msync)
+queueup(e, flags)
 	register ENVELOPE *e;
-	bool announce;
-	bool msync;
+	unsigned int flags;
 {
 	register SM_FILE_T *tfp;
 	register HDR *h;
@@ -378,7 +378,9 @@ queueup(e, announce, msync)
 			if (bitset(S_IWGRP, QueueFileMode))		\
 				(void) umask(oldumask);			\
 		} while (0)
-
+#define QUP_ANNOUNCE bitset(QUP_FL_ANNOUNCE, flags)
+#define QUP_MSYNC bitset(QUP_FL_MSYNC, flags)
+#define QUP_UNLOCK bitset(QUP_FL_UNLOCK, flags)
 
 	newid = (e->e_id == NULL) || !bitset(EF_INQUEUE, e->e_flags);
 	(void) sm_strlcpy(tf, queuename(e, NEWQFL_LETTER), sizeof(tf));
@@ -523,7 +525,7 @@ queueup(e, announce, msync)
 			       queuename(e, DATAFL_LETTER), (long) geteuid());
 		}
 		if (e->e_dfp != NULL &&
-		    SuperSafe == SAFE_INTERACTIVE && msync)
+		    SuperSafe == SAFE_INTERACTIVE && QUP_MSYNC)
 		{
 			if (tTd(40,32))
 				sm_syslog(LOG_INFO, e->e_id,
@@ -578,7 +580,8 @@ queueup(e, announce, msync)
 
 		if (SuperSafe == SAFE_REALLY ||
 		    SuperSafe == SAFE_REALLY_POSTMILTER ||
-		    (SuperSafe == SAFE_INTERACTIVE && msync))
+		    (SuperSafe == SAFE_INTERACTIVE &&
+		     QUP_MSYNC))
 		{
 			if (tTd(40,32))
 				sm_syslog(LOG_INFO, e->e_id,
@@ -673,7 +676,7 @@ queueup(e, announce, msync)
 		*p++ = 'n';
 	if (bitset(EF_SPLIT, e->e_flags))
 		*p++ = 's';
-#if _FFR_EAI
+#if USE_EAI
 	if (e->e_smtputf8)
 		*p++ = 'e';
 #endif
@@ -751,7 +754,7 @@ queueup(e, announce, msync)
 		(void) sm_io_putc(tfp, SM_TIME_DEFAULT, ':');
 		(void) sm_io_fprintf(tfp, SM_TIME_DEFAULT, "%s\n",
 				     denlstring(q->q_paddr, true, false));
-		if (announce)
+		if (QUP_ANNOUNCE)
 		{
 			char *tag = "queued";
 
@@ -890,7 +893,7 @@ queueup(e, announce, msync)
 	if (sm_io_flush(tfp, SM_TIME_DEFAULT) != 0 ||
 	    ((SuperSafe == SAFE_REALLY ||
 	      SuperSafe == SAFE_REALLY_POSTMILTER ||
-	      (SuperSafe == SAFE_INTERACTIVE && msync)) &&
+	      (SuperSafe == SAFE_INTERACTIVE && QUP_MSYNC)) &&
 	     fsync(sm_io_getinfo(tfp, SM_IO_WHAT_FD, NULL)) < 0) ||
 	    sm_io_error(tfp))
 	{
@@ -980,7 +983,35 @@ queueup(e, announce, msync)
 
 	if (tTd(40, 1))
 		sm_dprintf("<<<<< done queueing %s <<<<<\n\n", e->e_id);
+#if _FFR_DMTRIGGER
+	if (SM_TRIGGER == e->e_sendmode && !SM_IS_EMPTY(e->e_id))
+	{
+		char buf[64];
+
+		if (QUP_UNLOCK)
+			unlockqueue(e);
+		(void) sm_snprintf(buf, sizeof(buf), "N:%d:%d:%s",
+			e->e_qgrp, e->e_qdir, e->e_id);
+		i = sm_notify_snd(buf, strlen(buf));
+		sm_syslog(LOG_DEBUG, e->e_id, "queueup: mode=%c, id=%s, unlock=%d, snd=%d",
+			e->e_sendmode, e->e_id, QUP_UNLOCK, i);
+		if (i < 0)
+		{
+			/*
+			**  What to do about this?
+			**  Notify caller (change return type)?
+			**  A queue runner will eventually pick it up.
+			*/
+
+			sm_syslog(LOG_ERR, e->e_id, "queueup: notify_snd=%d",
+				i);
+		}
+	}
+#endif /* _FFR_DMTRIGGER */
 	return;
+#undef QUP_ANNOUNCE
+#undef QUP_MSYNC
+#undef QUP_UNLOCK
 }
 
 /*
@@ -1517,7 +1548,7 @@ runqueue(forkflag, verbose, persistent, runall)
 		int wasblocked;
 
 		/*
-		**  If MaxQueueChildren active then test whether the start
+		**  If MaxQueueChildren is active then test whether the start
 		**  of the next queue group's additional queue runners (maximum)
 		**  will result in MaxQueueChildren being exceeded.
 		**
@@ -1529,9 +1560,13 @@ runqueue(forkflag, verbose, persistent, runall)
 #if _FFR_QUEUE_SCHED_DBG
 		if (tTd(69, 10))
 			sm_syslog(LOG_INFO, NOQID,
-				"rq: curnum=%d, MaxQueueChildren=%d, CurRunners=%d, WorkGrp[curnum].wg_maxact=%d",
-				curnum, MaxQueueChildren, CurRunners,
-				WorkGrp[curnum].wg_maxact);
+				"rq: i=%d, curnum=%d, MaxQueueChildren=%d, CurRunners=%d, WorkGrp[curnum].wg_maxact=%d, skip=%d",
+				i, curnum, MaxQueueChildren, CurRunners,
+				WorkGrp[curnum].wg_maxact,
+				MaxQueueChildren > 0 &&
+				CurRunners + WorkGrp[curnum].wg_maxact >
+					MaxQueueChildren
+				);
 #endif /* _FFR_QUEUE_SCHED_DBG */
 		if (MaxQueueChildren > 0 &&
 		    CurRunners + WorkGrp[curnum].wg_maxact > MaxQueueChildren)
@@ -1641,8 +1676,8 @@ skip_domains(skip)
 			if (WorkQ->w_host != NULL &&
 			    WorkQ->w_next->w_host != NULL)
 			{
-				if (sm_strcasecmp(WorkQ->w_host,
-						WorkQ->w_next->w_host) != 0)
+				if (!SM_STRCASEEQ(WorkQ->w_host,
+						WorkQ->w_next->w_host))
 					n++;
 			}
 			else
@@ -1718,7 +1753,7 @@ runner_work(e, sequenceno, didfork, skip, njobs)
 		{
 			oldgroup = sm_heap_group();
 			sm_heap_newgroup();
-			sm_dprintf("run_queue_group() heap group #%d\n",
+			sm_dprintf("runner_work(): heap group #%d\n",
 				sm_heap_group());
 		}
 #endif /* SM_HEAP_CHECK */
@@ -1756,9 +1791,8 @@ runner_work(e, sequenceno, didfork, skip, njobs)
 				if (WorkQ->w_host != NULL &&
 				    WorkQ->w_next->w_host != NULL)
 				{
-					if (sm_strcasecmp(WorkQ->w_host,
-							WorkQ->w_next->w_host)
-								!= 0)
+					if (!SM_STRCASEEQ(WorkQ->w_host,
+							WorkQ->w_next->w_host))
 						seqjump = skip_domains(skip);
 					else
 						WorkQ = WorkQ->w_next;
@@ -1779,6 +1813,7 @@ runner_work(e, sequenceno, didfork, skip, njobs)
 		}
 		else
 #endif /* _FFR_SKIP_DOMAINS */
+		/* "else" in #if code above */
 		{
 			for (n = 0; n < skip && WorkQ != NULL; n++)
 				WorkQ = WorkQ->w_next;
@@ -1846,9 +1881,9 @@ runner_work(e, sequenceno, didfork, skip, njobs)
 			}
 			if (tTd(63, 100))
 				sm_syslog(LOG_DEBUG, NOQID,
-					  "runqueue %s dowork(%s)",
+					  "runqueue %s dowork(%s) pid=%d",
 					  qid_printqueue(w->w_qgrp, w->w_qdir),
-					  w->w_name + 2);
+					  w->w_name + 2, (int) CurrentPid);
 
 			(void) dowork(w->w_qgrp, w->w_qdir, w->w_name + 2,
 				      ForkQueueRuns, false, e);
@@ -1869,7 +1904,7 @@ runner_work(e, sequenceno, didfork, skip, njobs)
 			int sl;
 
 			sl = tTdlevel(76) - 100;
-			sm_dprintf("run_work_group: sleep=%d\n", sl);
+			sm_dprintf("runner_work(): sleep=%d\n", sl);
 			sleep(sl);
 		}
 #endif
@@ -2078,7 +2113,7 @@ run_work_group(wgrp, flags)
 
 	/*
 	**  Here is where we choose the queue group from the work group.
-	**  The caller of the "domorework" label must setup a new envelope.
+	**  The caller of the "domorework" label must set up a new envelope.
 	*/
 
 	endgrp = WorkGrp[wgrp].wg_curqgrp; /* to not spin endlessly */
@@ -2143,7 +2178,6 @@ run_work_group(wgrp, flags)
 	**  Start making passes through the queue.
 	**	First, read and sort the entire queue.
 	**	Then, process the work in that order.
-	**		But if you take too long, start over.
 	*/
 
 	for (i = 0; i < Queue[qgrp]->qg_numqueues; i++)
@@ -2170,7 +2204,6 @@ run_work_group(wgrp, flags)
 	njobs = sortq(Queue[qgrp]->qg_maxlist);
 	Queue[qgrp]->qg_curnum = qdir; /* update */
 
-
 	if (!Verbose && bitnset(QD_FORK, Queue[qgrp]->qg_flags))
 	{
 		int loop, maxrunners;
@@ -2224,11 +2257,10 @@ run_work_group(wgrp, flags)
 				mci_flush(false, NULL);
 #if _FFR_SKIP_DOMAINS
 				if (QueueSortOrder == QSO_BYHOST)
-				{
 					sequenceno += skip_domains(1);
-				}
 				else
 #endif /* _FFR_SKIP_DOMAINS */
+				/* "else" in #if code above */
 				{
 					/* for the skip */
 					WorkQ = WorkQ->w_next;
@@ -2329,6 +2361,7 @@ run_work_group(wgrp, flags)
 	/* free memory allocated by newenvelope() above */
 	sm_rpool_free(rpool);
 	QueueEnvelope.e_rpool = NULL;
+	QueueEnvelope.e_id = NULL; /* might be allocated from rpool */
 
 	/* Are there still more queues in the work group to process? */
 	if (endgrp != WorkGrp[wgrp].wg_curqgrp)
@@ -2609,7 +2642,7 @@ gatherq(qgrp, qdir, doall, full, more, pnentries)
 	{
 		SM_FILE_T *cf;
 		int qfver = 0;
-		char lbuf[MAXNAME + 1];
+		char lbuf[MAXNAME_I + 1];
 		struct stat sbuf;
 
 		if (tTd(41, 50))
@@ -2844,13 +2877,15 @@ gatherq(qgrp, qdir, doall, full, more, pnentries)
 				if (w->w_host == NULL &&
 				    (p = strrchr(&lbuf[1], '@')) != NULL)
 				{
+					char *str;
 #if _FFR_RHS
 					if (QueueSortOrder == QSO_BYSHUFFLE)
 						w->w_host = newstr(&p[1]);
 					else
 #endif
 						w->w_host = strrev(&p[1]);
-					makelower(w->w_host);
+					str = makelower_a(&w->w_host, NULL);
+					ASSIGN_IFDIFF(w->w_host, str);
 					i &= ~NEED_H;
 				}
 				if (QueueLimitRecipient == NULL)
@@ -2960,6 +2995,8 @@ gatherq(qgrp, qdir, doall, full, more, pnentries)
 
 	if (pnentries != NULL)
 		*pnentries = nentries;
+	if (tTd(41, 2))
+		sm_dprintf("gatherq: %s=%d\n", qd, i);
 	return i;
 }
 /*
@@ -3046,8 +3083,8 @@ sortq(max)
 					WorkList[i].w_lock = true;
 				else if (WorkList[i].w_host != NULL &&
 					 w->w_host != NULL &&
-					 sm_strcasecmp(WorkList[i].w_host,
-						       w->w_host) == 0)
+					 SM_STRCASEEQ(WorkList[i].w_host,
+						       w->w_host))
 					WorkList[i].w_lock = true;
 				else
 					break;
@@ -3237,23 +3274,22 @@ grow_wlist(qgrp, qdir)
 **  WORKCMPF0 -- simple priority-only compare function.
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
-**		-1 if a < b
-**		 0 if a == b
-**		+1 if a > b
-**
+**		-1 if av < bv
+**		 0 if av == bv
+**		+1 if av > bv
 */
 
 static int
-workcmpf0(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf0(av, bv)
+	const void *av;
+	const void *bv;
 {
-	long pa = a->w_pri;
-	long pb = b->w_pri;
+	long pa = ((WORK *)av)->w_pri;
+	long pb = ((WORK *)bv)->w_pri;
 
 	if (pa == pb)
 		return 0;
@@ -3268,22 +3304,23 @@ workcmpf0(a, b)
 **	Sorts on host name, lock status, and priority in that order.
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
-**		<0 if a < b
-**		 0 if a == b
-**		>0 if a > b
-**
+**		<0 if av < bv
+**		 0 if av == bv
+**		>0 if av > bv
 */
 
 static int
-workcmpf1(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf1(av, bv)
+	const void *av;
+	const void *bv;
 {
 	int i;
+	WORK *a = (WORK *)av;
+	WORK *b = (WORK *)bv;
 
 	/* host name */
 	if (a->w_host != NULL && b->w_host == NULL)
@@ -3307,22 +3344,23 @@ workcmpf1(a, b)
 **	Sorts on lock status, host name, and priority in that order.
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
-**		<0 if a < b
-**		 0 if a == b
-**		>0 if a > b
-**
+**		<0 if av < bv
+**		 0 if av == bv
+**		>0 if av > bv
 */
 
 static int
-workcmpf2(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf2(av, bv)
+	const void *av;
+	const void *bv;
 {
 	int i;
+	WORK *a = (WORK *)av;
+	WORK *b = (WORK *)bv;
 
 	/* lock status */
 	if (a->w_lock != b->w_lock)
@@ -3344,21 +3382,23 @@ workcmpf2(a, b)
 **  WORKCMPF3 -- simple submission-time-only compare function.
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
-**		-1 if a < b
-**		 0 if a == b
-**		+1 if a > b
-**
+**		-1 if av < bv
+**		 0 if av == bv
+**		+1 if av > bv
 */
 
 static int
-workcmpf3(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf3(av, bv)
+	const void *av;
+	const void *bv;
 {
+	WORK *a = (WORK *)av;
+	WORK *b = (WORK *)bv;
+
 	if (a->w_ctime > b->w_ctime)
 		return 1;
 	else if (a->w_ctime < b->w_ctime)
@@ -3370,29 +3410,31 @@ workcmpf3(a, b)
 **  WORKCMPF4 -- compare based on file name
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
-**		-1 if a < b
-**		 0 if a == b
-**		+1 if a > b
-**
+**		-1 if av < bv
+**		 0 if av == bv
+**		+1 if av > bv
 */
 
 static int
-workcmpf4(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf4(av, bv)
+	const void *av;
+	const void *bv;
 {
+	WORK *a = (WORK *)av;
+	WORK *b = (WORK *)bv;
+
 	return strcmp(a->w_name, b->w_name);
 }
 /*
 **  WORKCMPF5 -- compare based on assigned random number
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
 **		randomly 1/-1
@@ -3400,10 +3442,13 @@ workcmpf4(a, b)
 
 /* ARGSUSED0 */
 static int
-workcmpf5(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf5(av, bv)
+	const void *av;
+	const void *bv;
 {
+	WORK *a = (WORK *)av;
+	WORK *b = (WORK *)bv;
+
 	if (strlen(a->w_name) < randi || strlen(b->w_name) < randi)
 		return -1;
 	return a->w_name[randi] - b->w_name[randi];
@@ -3412,21 +3457,23 @@ workcmpf5(a, b)
 **  WORKCMPF6 -- simple modification-time-only compare function.
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
-**		-1 if a < b
-**		 0 if a == b
-**		+1 if a > b
-**
+**		-1 if av < bv
+**		 0 if av == bv
+**		+1 if av > bv
 */
 
 static int
-workcmpf6(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf6(av, bv)
+	const void *av;
+	const void *bv;
 {
+	WORK *a = (WORK *)av;
+	WORK *b = (WORK *)bv;
+
 	if (a->w_mtime > b->w_mtime)
 		return 1;
 	else if (a->w_mtime < b->w_mtime)
@@ -3441,22 +3488,23 @@ workcmpf6(a, b)
 **	Sorts on lock status, host name, and priority in that order.
 **
 **	Parameters:
-**		a -- the first argument.
-**		b -- the second argument.
+**		av -- the first argument.
+**		bv -- the second argument.
 **
 **	Returns:
-**		<0 if a < b
-**		 0 if a == b
-**		>0 if a > b
-**
+**		<0 if av < bv
+**		 0 if av == bv
+**		>0 if av > bv
 */
 
 static int
-workcmpf7(a, b)
-	register WORK *a;
-	register WORK *b;
+workcmpf7(av, bv)
+	const void *av;
+	const void *bv;
 {
 	int i;
+	WORK *a = (WORK *)av;
+	WORK *b = (WORK *)bv;
 
 	/* lock status */
 	if (a->w_lock != b->w_lock)
@@ -3596,7 +3644,7 @@ dowork(qgrp, qdir, id, forkflag, requeueflag, e)
 	SM_RPOOL_T *rpool;
 
 	if (tTd(40, 1))
-		sm_dprintf("dowork(%s/%s)\n", qid_printqueue(qgrp, qdir), id);
+		sm_dprintf("dowork(%s/%s), forkflag=%d\n", qid_printqueue(qgrp, qdir), id, forkflag);
 
 	/*
 	**  Fork for work.
@@ -3732,7 +3780,12 @@ dowork(qgrp, qdir, id, forkflag, requeueflag, e)
 		eatheader(e, requeueflag, true);
 
 		if (requeueflag)
-			queueup(e, false, false);
+			queueup(e, QUP_FL_NONE);
+
+		if (tTd(40, 9))
+			sm_dprintf("dowork(%s/%s), forkflag=%d, pid=%d, CurRunners=%d\n",
+				qid_printqueue(qgrp, qdir), id, forkflag,
+				(int) CurrentPid, CurRunners);
 
 		/* do the delivery */
 		sendall(e, SM_DELIVER);
@@ -3916,7 +3969,7 @@ doworklist(el, forkflag, requeueflag)
 			eatheader(&e, requeueflag, true);
 
 			if (requeueflag)
-				queueup(&e, false, false);
+				queueup(&e, QUP_FL_NONE);
 
 			/* do the delivery */
 			sendall(&e, SM_DELIVER);
@@ -4010,7 +4063,7 @@ readqf(e, openonly)
 		if (tTd(40, 8))
 			sm_dprintf("%s: locked\n", e->e_id);
 		if (LogLevel > 19)
-			sm_syslog(LOG_DEBUG, e->e_id, "locked");
+			sm_syslog(LOG_DEBUG, e->e_id, "queueup: locked");
 		(void) sm_io_close(qfp, SM_TIME_DEFAULT);
 		RELEASE_QUEUE;
 		return false;
@@ -4318,11 +4371,11 @@ readqf(e, openonly)
 					e->e_flags |= EF_WARNING;
 					break;
 
-#if _FFR_EAI
+#if USE_EAI
 				  case 'e':	/* message requires EAI */
 					e->e_smtputf8 = true;
 					break;
-#endif /* _FFR_EAI */
+#endif /* USE_EAI */
 				}
 			}
 			break;
@@ -4469,6 +4522,7 @@ readqf(e, openonly)
 				qflags |= QPRIMARY;
 			macdefine(&e->e_macro, A_PERM, macid("{addr_type}"),
 				((qflags & QINTBCC) != 0) ? "e b" : "e r");
+/* XXX p must be [i] */
 			if (*p != '\0')
 				q = parseaddr(++p, NULLADDR, RF_COPYALL, '\0',
 						NULL, e, true);
@@ -4585,26 +4639,6 @@ readqf(e, openonly)
 	/* other checks? */
 #endif /* _FFR_QF_PARANOIA */
 
-#if _FFR_EAI
-	/*
-	**  If this message originates from something other than
-	**  srvrsmtp.c, then it might use UTF8 addresses but not be
-	**  marked.  We'll just add the mark so we're sure that it
-	**  either can be delivered or will be returned.
-	*/
-
-	if (!e->e_smtputf8)
-	{
-		ADDRESS *q;
-
-		for (q = e->e_sendqueue; q != NULL; q = q->q_next)
-			if (!addr_is_ascii(q->q_paddr) && !e->e_smtputf8)
-				e->e_smtputf8 = true;
-		if (!addr_is_ascii(e->e_from.q_paddr) && !e->e_smtputf8)
-			e->e_smtputf8 = true;
-	}
-#endif /* _FFR_EAI */
-
 	/* possibly set ${dsn_ret} macro */
 	if (bitset(EF_RET_PARAM, e->e_flags))
 	{
@@ -4951,7 +4985,7 @@ print_single_queue(qgrp, qdir)
 		(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
 			")\n-----Q-ID----- --Size-- -Priority- ---Q-Time--- --------Sender/Recipient--------\n");
 	else
-		(void) sm_io_fprintf(smioout,  SM_TIME_DEFAULT,
+		(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
 			")\n-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------\n");
 	for (w = WorkQ; w != NULL; w = w->w_next)
 	{
@@ -4962,7 +4996,7 @@ print_single_queue(qgrp, qdir)
 		int qfver;
 		char quarmsg[MAXLINE];
 		char statmsg[MAXLINE];
-		char bodytype[MAXNAME + 1];
+		char bodytype[MAXNAME + 1];	/* EAI:ok */
 		char qf[MAXPATHLEN];
 
 		if (StopRequest)
@@ -5013,11 +5047,7 @@ print_single_queue(qgrp, qdir)
 				if (stat(df, &st) >= 0)
 					dfsize = st.st_size;
 			}
-			if (e.e_lockfp != NULL)
-			{
-				(void) sm_io_close(e.e_lockfp, SM_TIME_DEFAULT);
-				e.e_lockfp = NULL;
-			}
+			SM_CLOSE_FP(e.e_lockfp);
 			clearenvelope(&e, false, e.e_rpool);
 			sm_rpool_free(e.e_rpool);
 		}
@@ -5489,8 +5519,12 @@ assign_queueid(e)
 	idbuf[5] = QueueIdChars[tm->tm_sec % QIC_LEN_R];
 	idbuf[6] = QueueIdChars[seq / QIC_LEN];
 	idbuf[7] = QueueIdChars[seq % QIC_LEN];
-	(void) sm_snprintf(&idbuf[8], sizeof(idbuf) - 8, "%06d",
-			   (int) LastQueuePid);
+	if (tTd(78, 100))
+		(void) sm_snprintf(&idbuf[8], sizeof(idbuf) - 8, "%07d",
+				   (int) LastQueuePid);
+	else
+		(void) sm_snprintf(&idbuf[8], sizeof(idbuf) - 8, "%06d",
+				   (int) LastQueuePid);
 	e->e_id = sm_rpool_strdup_x(e->e_rpool, idbuf);
 	macdefine(&e->e_macro, A_PERM, 'i', e->e_id);
 #if 0
@@ -5561,9 +5595,7 @@ unlockqueue(e)
 
 
 	/* if there is a lock file in the envelope, close it */
-	if (e->e_lockfp != NULL)
-		(void) sm_io_close(e->e_lockfp, SM_TIME_DEFAULT);
-	e->e_lockfp = NULL;
+	SM_CLOSE_FP(e->e_lockfp);
 
 	/* don't create a queue id if we don't already have one */
 	if (e->e_id == NULL)
@@ -5606,7 +5638,7 @@ setctluser(user, qfver, e)
 	**  See if this clears our concept of controlling user.
 	*/
 
-	if (user == NULL || *user == '\0')
+	if (SM_IS_EMPTY(user))
 		return NULL;
 
 	/*
@@ -5690,7 +5722,7 @@ loseqfile(e, why)
 	if (sm_strlcpy(buf, p, sizeof(buf)) >= sizeof(buf))
 		return;
 	if (!bitset(EF_INQUEUE, e->e_flags))
-		queueup(e, false, true);
+		queueup(e, QUP_FL_MSYNC);
 	else if (QueueMode == QM_LOST)
 		loseit = false;
 
@@ -5705,11 +5737,7 @@ loseqfile(e, why)
 			sm_syslog(LOG_ALERT, e->e_id,
 				  "Losing %s: %s", buf, why);
 	}
-	if (e->e_dfp != NULL)
-	{
-		(void) sm_io_close(e->e_dfp, SM_TIME_DEFAULT);
-		e->e_dfp = NULL;
-	}
+	SM_CLOSE_FP(e->e_dfp);
 	e->e_flags &= ~EF_HAS_DF;
 }
 /*
@@ -6682,7 +6710,7 @@ disk_status(out, prefix)
 **		none.
 */
 
-#if _FFR_USE_SEM_LOCKING && SM_CONF_SEM
+# if _FFR_USE_SEM_LOCKING && SM_CONF_SEM
 static int SemId = -1;		/* Semaphore Id */
 int SemKey = SM_SEM_KEY;
 #  define SEM_LOCK(r)	\
@@ -6691,16 +6719,16 @@ int SemKey = SM_SEM_KEY;
 		if (SemId >= 0)	\
 			r = sm_sem_acq(SemId, 0, 1);	\
 	} while (0)
-# define SEM_UNLOCK(r)	\
+#  define SEM_UNLOCK(r)	\
 	do	\
 	{	\
 		if (SemId >= 0 && r >= 0)	\
 			r = sm_sem_rel(SemId, 0, 1);	\
 	} while (0)
-#else /* _FFR_USE_SEM_LOCKING && SM_CONF_SEM */
-# define SEM_LOCK(r)
-# define SEM_UNLOCK(r)
-#endif /* _FFR_USE_SEM_LOCKING && SM_CONF_SEM */
+# else /* _FFR_USE_SEM_LOCKING && SM_CONF_SEM */
+#  define SEM_LOCK(r)
+#  define SEM_UNLOCK(r)
+# endif /* _FFR_USE_SEM_LOCKING && SM_CONF_SEM */
 
 static void init_sem __P((bool));
 
@@ -6708,8 +6736,8 @@ static void
 init_sem(owner)
 	bool owner;
 {
-#if _FFR_USE_SEM_LOCKING
-#if SM_CONF_SEM
+# if _FFR_USE_SEM_LOCKING
+#  if SM_CONF_SEM
 	SemId = sm_sem_start(SemKey, 1, 0, owner);
 	if (SemId < 0)
 	{
@@ -6728,8 +6756,8 @@ init_sem(owner)
 				"key=%ld, sm_semsetowner=%d, RunAsUid=%ld, RunAsGid=%ld",
 				(long) SemKey, r, (long) RunAsUid, (long) RunAsGid);
 	}
-#endif /* SM_CONF_SEM */
-#endif /* _FFR_USE_SEM_LOCKING */
+#  endif /* SM_CONF_SEM */
+# endif /* _FFR_USE_SEM_LOCKING */
 	return;
 }
 
@@ -6749,12 +6777,12 @@ static void
 stop_sem(owner)
 	bool owner;
 {
-#if _FFR_USE_SEM_LOCKING
-#if SM_CONF_SEM
+# if _FFR_USE_SEM_LOCKING
+#  if SM_CONF_SEM
 	if (owner && SemId >= 0)
 		sm_sem_stop(SemId);
-#endif
-#endif /* _FFR_USE_SEM_LOCKING */
+#  endif
+# endif /* _FFR_USE_SEM_LOCKING */
 	return;
 }
 
@@ -6823,7 +6851,7 @@ occ_exceeded(e, mci, host, addr)
 }
 
 /*
-**  OCC_CLOSE -- "close" an outgoing connection: up connection status
+**  OCC_CLOSE -- "close" an outgoing connection: update connection status
 **
 **	Parameters:
 **		e -- envelope
@@ -6962,7 +6990,7 @@ write_key_file(keypath, key)
 	SM_FILE_T *keyf;
 
 	ok = false;
-	if (keypath == NULL || *keypath == '\0')
+	if (SM_IS_EMPTY(keypath))
 		return ok;
 	sff = SFF_NOLINK|SFF_ROOTOK|SFF_REGONLY|SFF_CREAT;
 	if (TrustedUid != 0 && RealUid == TrustedUid)
@@ -6977,7 +7005,7 @@ write_key_file(keypath, key)
 	{
 		if (geteuid() == 0 && RunAsUid != 0)
 		{
-#  if HASFCHOWN
+# if HASFCHOWN
 			int fd;
 
 			fd = keyf->f_file;
@@ -6989,7 +7017,7 @@ write_key_file(keypath, key)
 					  "ownership change on %s to %ld failed: %s",
 					  keypath, (long) RunAsUid, sm_errstring(err));
 			}
-#  endif /* HASFCHOWN */
+# endif /* HASFCHOWN */
 		}
 		ok = sm_io_fprintf(keyf, SM_TIME_DEFAULT, "%ld\n", key) !=
 		     SM_IO_EOF;
@@ -7018,7 +7046,7 @@ read_key_file(keypath, key)
 	long sff, n;
 	SM_FILE_T *keyf;
 
-	if (keypath == NULL || *keypath == '\0')
+	if (SM_IS_EMPTY(keypath))
 		return key;
 	sff = SFF_NOLINK|SFF_ROOTOK|SFF_REGONLY;
 	if (RealUid == 0 || (TrustedUid != 0 && RealUid == TrustedUid))
@@ -7245,7 +7273,7 @@ setup_queues(owner)
 	/* Provide space for trailing '/' */
 	if (len >= sizeof(basedir) - 1)
 	{
-		syserr("QueueDirectory: path too long: %d,  max %d",
+		syserr("QueueDirectory: path too long: %d, max %d",
 			len, (int) sizeof(basedir) - 1);
 		ExitStat = EX_CONFIG;
 		return;
@@ -7676,7 +7704,7 @@ makequeue(line, qdef)
 
 	if (qg->qg_qdir == NULL)
 	{
-		if (QueueDir == NULL || *QueueDir == '\0')
+		if (SM_IS_EMPTY(QueueDir))
 		{
 			syserr("QueueDir must be defined before queue groups");
 			return;
@@ -7803,7 +7831,7 @@ cmpidx(a, b)
 **  result in more than one queue group per work group. In such a case
 **  the number of running queue groups in that work group will have no
 **  more than the work group maximum number of runners (a "fair" portion
-**  of MaxQueueRunners). All queue groups within a work group will get a
+**  of MaxQueueRun). All queue groups within a work group will get a
 **  chance at running.
 **
 **	Parameters:
@@ -7899,8 +7927,8 @@ makeworkgroups()
 	{
 		h = si[i].sg_idx;
 		if (tTd(41, 49))
-			sm_dprintf("sortqg: i=%d, j=%d, h=%d, skip=%d\n",
-				i, j, h, IS_BOUNCE_QUEUE(h));
+			sm_dprintf("sortqg: i=%d, j=%d, h=%d, runners=%d, skip=%d\n",
+				i, j, h, Queue[h]->qg_maxqrun, IS_BOUNCE_QUEUE(h));
 		SKIP_BOUNCE_QUEUE(h);
 
 		/* a to-and-fro packing scheme, continue from last position */
@@ -8015,7 +8043,7 @@ dup_df(old, new)
 		**  and a bounce mail is sent that is split.
 		*/
 
-		queueup(old, false, true);
+		queueup(old, QUP_FL_MSYNC);
 	}
 	SM_REQUIRE(ISVALIDQGRP(old->e_qgrp) && ISVALIDQDIR(old->e_qdir));
 	SM_REQUIRE(ISVALIDQGRP(new->e_qgrp) && ISVALIDQDIR(new->e_qdir));
@@ -9055,7 +9083,7 @@ quarantine_queue(reason, qgrplimit)
 
 	if (reason != NULL)
 	{
-		/* clean it */
+		/* clean it; leak does not matter: one time invocation */
 		reason = newstr(denlstring(reason, true, true));
 	}
 
@@ -9102,7 +9130,7 @@ quarantine_queue(reason, qgrplimit)
 				if (StopRequest)
 					stop_sendmail();
 
-				/* setup envelope */
+				/* set up envelope */
 				clearenvelope(&e, true, sm_rpool_new_x(NULL));
 				e.e_id = WorkList[i].w_name + 2;
 				e.e_qgrp = qgrp;
@@ -9141,3 +9169,141 @@ quarantine_queue(reason, qgrplimit)
 					     changed == 1 ? "" : "s");
 	}
 }
+
+#if _FFR_DMTRIGGER
+/*
+**  QM -- queue "manager"
+**
+**	Parameters:
+**		none.
+**
+**	Results:
+**		false on error
+**
+**	Side Effects:
+**		fork()s and runs as process to deliver queue entries
+*/
+
+bool
+qm()
+{
+	int r;
+	pid_t pid;
+	long tmo;
+
+	sm_syslog(LOG_DEBUG, NOQID, "queue manager: start");
+
+	(void) sm_blocksignal(SIGCHLD);
+	(void) sm_signal(SIGCHLD, reapchild);
+
+	pid = dofork();
+	if (pid == -1)
+	{
+		const char *msg = "queue manager -- fork() failed";
+		const char *err = sm_errstring(errno);
+
+		if (LogLevel > 8)
+			sm_syslog(LOG_INFO, NOQID, "%s: %s",
+				  msg, err);
+		(void) sm_releasesignal(SIGCHLD);
+		return false;
+	}
+	if (pid != 0)
+	{
+		/* parent -- pick up intermediate zombie */
+		(void) sm_releasesignal(SIGCHLD);
+		return true;
+	}
+
+/* XXX put this into a macro/function because it is used several times? */
+	/* child -- clean up signals */
+
+	/* Reset global flags */
+	RestartRequest = NULL;
+	RestartWorkGroup = false;
+	ShutdownRequest = NULL;
+	PendingSignal = 0;
+	CurrentPid = getpid();
+	close_sendmail_pid();
+
+	/*
+	**  Initialize exception stack and default exception
+	**  handler for child process.
+	*/
+
+	sm_exc_newthread(fatal_error);
+	clrcontrol();
+	proc_list_clear();
+
+	/* Add parent process as first child item */
+	proc_list_add(CurrentPid, "Queue manager", PROC_QM, 0, -1, NULL);
+	(void) sm_releasesignal(SIGCHLD);
+	(void) sm_signal(SIGCHLD, SIG_DFL);
+	(void) sm_signal(SIGHUP, SIG_DFL);
+	(void) sm_signal(SIGTERM, intsig);
+
+	/* drop privileges */
+	if (geteuid() == (uid_t) 0)
+		(void) drop_privileges(false);
+	disconnect(1, NULL);
+	QuickAbort = false;
+
+	r = sm_notify_start(true, 0);
+	if (r != 0)
+		syserr("sm_notify_start() failed=%d", r);
+
+	/*
+	**  Initially wait indefinitely, then only wait
+	**  until something needs to get done (not yet implemented).
+	*/
+
+	tmo = -1;
+	while (true)
+	{
+		char buf[64];
+		ENVELOPE *e;
+		SM_RPOOL_T *rpool;
+
+/*
+**  TODO: This should try to receive multiple ids:
+**  after it got one, check for more with a very short timeout
+**  and collect them in a list.
+**  but them some other code should be used to run all of them.
+*/
+
+		sm_syslog(LOG_DEBUG, NOQID, "queue manager: rcv=start");
+		r = sm_notify_rcv(buf, sizeof(buf), tmo);
+		if (-ETIMEDOUT == r)
+		{
+			sm_syslog(LOG_DEBUG, NOQID, "queue manager: rcv=timed_out");
+			continue;
+		}
+		if (r < 0)
+		{
+			sm_syslog(LOG_DEBUG, NOQID, "queue manager: rcv=%d", r);
+			goto end;
+		}
+		if (r > 0 && r < sizeof(buf))
+			buf[r] = '\0';
+		buf[sizeof(buf) - 1] = '\0';
+		sm_syslog(LOG_DEBUG, NOQID, "queue manager: got=%s", buf);
+		CurEnv = &QueueEnvelope;
+		rpool = sm_rpool_new_x(NULL);
+		e = newenvelope(&QueueEnvelope, CurEnv, rpool);
+		e->e_flags = BlankEnvelope.e_flags;
+		e->e_parent = NULL;
+		r = sm_io_sscanf(buf, "N:%d:%d:%s", &e->e_qgrp, &e->e_qdir, e->e_id);
+		if (r != 3)
+		{
+			sm_syslog(LOG_DEBUG, NOQID, "queue manager: buf=%s, scan=%d", buf, r);
+			goto end;
+		}
+		dowork(e->e_qgrp, e->e_qdir, e->e_id, true, false, e);
+	}
+
+  end:
+	sm_syslog(LOG_DEBUG, NOQID, "queue manager: stop");
+	finis(false, false, EX_OK);
+	return false;
+}
+#endif /* _FFR_DMTRIGGER */
diff --git a/src/ratectrl.c b/src/ratectrl.c
index 6b9d5c4af3fa..bfbf7d57990a 100644
--- a/src/ratectrl.c
+++ b/src/ratectrl.c
@@ -228,7 +228,7 @@ gen_hash(saddr)
 		}
 	}
 #else /* HASH_ALG == 1 */
-# ERROR: unsupported HASH_ALG
+# ERROR "unsupported HASH_ALG"
 	hv = ((hv << 1) ^ (*p & 0377)) % cctx->cc_size; ???
 #endif /* HASH_ALG == 1 */
 
@@ -424,7 +424,7 @@ conn_limits(e, now, saddr, clflags, hashary, ratelimit, conclimit)
 	logit = true;
 #endif
 #if RATECTL_DEBUG || _FFR_OCC
-#if _FFR_OCC
+# if _FFR_OCC
 	if (!exceeded)
 	{
 		if (prv != NULL)
@@ -433,7 +433,7 @@ conn_limits(e, now, saddr, clflags, hashary, ratelimit, conclimit)
 			++*pcv;
 	}
 	logit = exceeded || LogLevel > 11;
-#endif
+# endif
 	if (logit)
 		sm_syslog(LOG_DEBUG, e != NULL ? e->e_id : NOQID,
 			"conn_limits: addr=%s, flags=0x%x, rate=%d/%d, conc=%d/%d, exc=%d",
@@ -556,13 +556,13 @@ dump_ch(fp)
 		bool valid;
 
 		valid = false;
-#if NETINET
+# if NETINET
 		valid = (ch->ch_Family == AF_INET);
 		if (valid)
 			sm_io_fprintf(fp, SM_TIME_DEFAULT, "ip=%s ",
 				inet_ntoa(ch->ch_Addr4));
-#endif /* NETINET */
-#if NETINET6
+# endif /* NETINET */
+# if NETINET6
 		if (ch->ch_Family == AF_INET6)
 		{
 			char buf[64], *str;
@@ -573,7 +573,7 @@ dump_ch(fp)
 				sm_io_fprintf(fp, SM_TIME_DEFAULT, "ip=%s ",
 					str);
 		}
-#endif /* NETINET6 */
+# endif /* NETINET6 */
 		if (!valid)
 			continue;
 
@@ -589,9 +589,9 @@ dump_ch(fp)
 
 		sm_io_fprintf(fp, SM_TIME_DEFAULT, "time=%ld cnt=%d ",
 			(long) ch->ch_LTime, cnt);
-#if _FFR_OCC
+# if _FFR_OCC
 		sm_io_fprintf(fp, SM_TIME_DEFAULT, "oc=%d", ch->ch_oc);
-#endif
+# endif
 		sm_io_fprintf(fp, SM_TIME_DEFAULT, "\n");
 	}
 	sm_io_flush(fp, SM_TIME_DEFAULT);
diff --git a/src/readcf.c b/src/readcf.c
index e6f62961f220..47c9777cc33b 100644
--- a/src/readcf.c
+++ b/src/readcf.c
@@ -63,7 +63,7 @@ initbouncequeue()
 	STAB *s;
 
 	BounceQueue = NOQGRP;
-	if (bouncequeue == NULL || bouncequeue[0] == '\0')
+	if (SM_IS_EMPTY(bouncequeue))
 		return;
 
 	s = stab(bouncequeue, ST_QUEUE, ST_FIND);
@@ -247,11 +247,13 @@ readcf(cfname, safe, e)
 			if (rwp == NULL)
 			{
 				RewriteRules[ruleset] = rwp =
-					(struct rewrite *) xalloc(sizeof(*rwp));
+					(struct rewrite *) sm_malloc_tagged_x(sizeof(*rwp),
+								"rwr1", 1, 0);
 			}
 			else
 			{
-				rwp->r_next = (struct rewrite *) xalloc(sizeof(*rwp));
+				rwp->r_next = (struct rewrite *) sm_malloc_tagged_x(sizeof(*rwp),
+								"rwr2", 2, 0);
 				rwp = rwp->r_next;
 			}
 			rwp->r_next = NULL;
@@ -531,6 +533,14 @@ readcf(cfname, safe, e)
 			mid = macid_parse(&bp[1], &ep);
 			if (mid == 0)
 				break;
+#if USE_EAI && 0
+			if ('j' == mid && !addr_is_ascii(ep))
+			{
+				usrerr("hostname %s must be ASCII", ep);
+				finis(false, true, EX_CONFIG);
+				/* NOTREACHED */
+			}
+#endif
 			p = munchstring(ep, NULL, '\0');
 			macdefine(&e->e_macro, A_TEMP, mid, p);
 			break;
@@ -548,6 +558,9 @@ readcf(cfname, safe, e)
 					break;
 				expand(ep, exbuf, sizeof(exbuf), e);
 				p = exbuf;
+#if _FFR_8BITENVADDR
+				dequote_internal_chars(p, exbuf, sizeof(exbuf));
+#endif
 			}
 			else
 			{
@@ -833,7 +846,7 @@ translate_dollars(ibp, obp, bsp)
 		sm_dprintf(")\n");
 	}
 
-	bp = quote_internal_chars(ibp, obp, bsp);
+	bp = quote_internal_chars(ibp, obp, bsp, NULL);
 
 	for (p = bp; *p != '\0'; p++)
 	{
@@ -1381,7 +1394,7 @@ makemailer(line)
 	static int nextmailer = 0;	/* "free" index into Mailer struct */
 
 	/* allocate a mailer and set up defaults */
-	m = (struct mailer *) xalloc(sizeof(*m));
+	m = (struct mailer *) sm_malloc_tagged_x(sizeof(*m), "mailer", 0, 0);
 	memset((char *) m, '\0', sizeof(*m));
 	errno = 0; /* avoid bogus error text */
 
@@ -1561,12 +1574,12 @@ makemailer(line)
 				if (*p == '\0')
 					p = NULL;
 			}
-			if (m->m_addrtype == NULL || *m->m_addrtype == '\0')
+			if (SM_IS_EMPTY(m->m_addrtype))
 				m->m_addrtype = "rfc822";
 
 			/* extract diagnostic type; default to "smtp" */
 			m->m_diagtype = p;
-			if (m->m_diagtype == NULL || *m->m_diagtype == '\0')
+			if (SM_IS_EMPTY(m->m_diagtype))
 				m->m_diagtype = "smtp";
 			break;
 
@@ -1577,11 +1590,11 @@ makemailer(line)
 				struct passwd *pw;
 
 				while (*p != '\0' && isascii(*p) &&
-# if _FFR_DOTTED_USERNAMES
+#if _FFR_DOTTED_USERNAMES
 				       (isalnum(*p) || strchr(SM_PWN_CHARS, *p) != NULL))
-# else
+#else
 				       (isalnum(*p) || strchr("-_", *p) != NULL))
-# endif
+#endif
 					p++;
 				while (SM_ISSPACE(*p))
 					*p++ = '\0';
@@ -1987,7 +2000,7 @@ makeargv(p)
 	argv[i++] = NULL;
 
 	/* now make a copy of the argv */
-	avp = (char **) xalloc(sizeof(*avp) * i);
+	avp = (char **) sm_malloc_tagged_x(sizeof(*avp) * i, "makeargv", 0, 0);
 	memmove((char *) avp, (char *) argv, sizeof(*avp) * i);
 
 	return avp;
@@ -2114,137 +2127,137 @@ static struct ssl_options
 } SSL_Option[] =
 {
 /* Workaround for bugs are turned on by default (as well as some others) */
-#ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
+# ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
 	{ "SSL_OP_MICROSOFT_SESS_ID_BUG",	SSL_OP_MICROSOFT_SESS_ID_BUG	},
-#endif
-#ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG
+# endif
+# ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG
 	{ "SSL_OP_NETSCAPE_CHALLENGE_BUG",	SSL_OP_NETSCAPE_CHALLENGE_BUG	},
-#endif
-#ifdef SSL_OP_LEGACY_SERVER_CONNECT
+# endif
+# ifdef SSL_OP_LEGACY_SERVER_CONNECT
 	{ "SSL_OP_LEGACY_SERVER_CONNECT",	SSL_OP_LEGACY_SERVER_CONNECT	},
-#endif
-#ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
+# endif
+# ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
 	{ "SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG",	SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG	},
-#endif
-#ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
+# endif
+# ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
 	{ "SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG",	SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG	},
-#endif
-#ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
+# endif
+# ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
 	{ "SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER",	SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER	},
-#endif
-#ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING
+# endif
+# ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING
 	{ "SSL_OP_MSIE_SSLV2_RSA_PADDING",	SSL_OP_MSIE_SSLV2_RSA_PADDING	},
-#endif
-#ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG
+# endif
+# ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG
 	{ "SSL_OP_SSLEAY_080_CLIENT_DH_BUG",	SSL_OP_SSLEAY_080_CLIENT_DH_BUG	},
-#endif
-#ifdef SSL_OP_TLS_D5_BUG
+# endif
+# ifdef SSL_OP_TLS_D5_BUG
 	{ "SSL_OP_TLS_D5_BUG",	SSL_OP_TLS_D5_BUG	},
-#endif
-#ifdef SSL_OP_TLS_BLOCK_PADDING_BUG
+# endif
+# ifdef SSL_OP_TLS_BLOCK_PADDING_BUG
 	{ "SSL_OP_TLS_BLOCK_PADDING_BUG",	SSL_OP_TLS_BLOCK_PADDING_BUG	},
-#endif
-#ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
+# endif
+# ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
 	{ "SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS",	SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS	},
-#endif
-#ifdef SSL_OP_ALL
+# endif
+# ifdef SSL_OP_ALL
 	{ "SSL_OP_ALL",	SSL_OP_ALL	},
-#endif
-#ifdef SSL_OP_NO_QUERY_MTU
+# endif
+# ifdef SSL_OP_NO_QUERY_MTU
 	{ "SSL_OP_NO_QUERY_MTU",	SSL_OP_NO_QUERY_MTU	},
-#endif
-#ifdef SSL_OP_COOKIE_EXCHANGE
+# endif
+# ifdef SSL_OP_COOKIE_EXCHANGE
 	{ "SSL_OP_COOKIE_EXCHANGE",	SSL_OP_COOKIE_EXCHANGE	},
-#endif
-#ifdef SSL_OP_NO_TICKET
+# endif
+# ifdef SSL_OP_NO_TICKET
 	{ "SSL_OP_NO_TICKET",	SSL_OP_NO_TICKET	},
-#endif
-#ifdef SSL_OP_CISCO_ANYCONNECT
+# endif
+# ifdef SSL_OP_CISCO_ANYCONNECT
 	{ "SSL_OP_CISCO_ANYCONNECT",	SSL_OP_CISCO_ANYCONNECT	},
-#endif
-#ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
+# endif
+# ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
 	{ "SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION",	SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION	},
-#endif
-#ifdef SSL_OP_NO_COMPRESSION
+# endif
+# ifdef SSL_OP_NO_COMPRESSION
 	{ "SSL_OP_NO_COMPRESSION",	SSL_OP_NO_COMPRESSION	},
-#endif
-#ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
+# endif
+# ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
 	{ "SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION",	SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION	},
-#endif
-#ifdef SSL_OP_SINGLE_ECDH_USE
+# endif
+# ifdef SSL_OP_SINGLE_ECDH_USE
 	{ "SSL_OP_SINGLE_ECDH_USE",	SSL_OP_SINGLE_ECDH_USE	},
-#endif
-#ifdef SSL_OP_SINGLE_DH_USE
+# endif
+# ifdef SSL_OP_SINGLE_DH_USE
 	{ "SSL_OP_SINGLE_DH_USE",	SSL_OP_SINGLE_DH_USE	},
-#endif
-#ifdef SSL_OP_EPHEMERAL_RSA
+# endif
+# ifdef SSL_OP_EPHEMERAL_RSA
 	{ "SSL_OP_EPHEMERAL_RSA",	SSL_OP_EPHEMERAL_RSA	},
-#endif
-#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
+# endif
+# ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
 	{ "SSL_OP_CIPHER_SERVER_PREFERENCE",	SSL_OP_CIPHER_SERVER_PREFERENCE	},
-#endif
-#ifdef SSL_OP_TLS_ROLLBACK_BUG
+# endif
+# ifdef SSL_OP_TLS_ROLLBACK_BUG
 	{ "SSL_OP_TLS_ROLLBACK_BUG",	SSL_OP_TLS_ROLLBACK_BUG	},
-#endif
-#ifdef SSL_OP_NO_SSLv2
+# endif
+# ifdef SSL_OP_NO_SSLv2
 	{ "SSL_OP_NO_SSLv2",	SSL_OP_NO_SSLv2	},
-#endif
-#ifdef SSL_OP_NO_SSLv3
+# endif
+# ifdef SSL_OP_NO_SSLv3
 	{ "SSL_OP_NO_SSLv3",	SSL_OP_NO_SSLv3	},
-#endif
-#ifdef SSL_OP_NO_TLSv1
+# endif
+# ifdef SSL_OP_NO_TLSv1
 	{ "SSL_OP_NO_TLSv1",	SSL_OP_NO_TLSv1	},
-#endif
-#ifdef SSL_OP_NO_TLSv1_3
+# endif
+# ifdef SSL_OP_NO_TLSv1_3
 	{ "SSL_OP_NO_TLSv1_3",	SSL_OP_NO_TLSv1_3	},
-#endif
-#ifdef SSL_OP_NO_TLSv1_2
+# endif
+# ifdef SSL_OP_NO_TLSv1_2
 	{ "SSL_OP_NO_TLSv1_2",	SSL_OP_NO_TLSv1_2	},
-#endif
-#ifdef SSL_OP_NO_TLSv1_1
+# endif
+# ifdef SSL_OP_NO_TLSv1_1
 	{ "SSL_OP_NO_TLSv1_1",	SSL_OP_NO_TLSv1_1	},
-#endif
-#ifdef SSL_OP_PKCS1_CHECK_1
+# endif
+# ifdef SSL_OP_PKCS1_CHECK_1
 	{ "SSL_OP_PKCS1_CHECK_1",	SSL_OP_PKCS1_CHECK_1	},
-#endif
-#ifdef SSL_OP_PKCS1_CHECK_2
+# endif
+# ifdef SSL_OP_PKCS1_CHECK_2
 	{ "SSL_OP_PKCS1_CHECK_2",	SSL_OP_PKCS1_CHECK_2	},
-#endif
-#ifdef SSL_OP_NETSCAPE_CA_DN_BUG
+# endif
+# ifdef SSL_OP_NETSCAPE_CA_DN_BUG
 	{ "SSL_OP_NETSCAPE_CA_DN_BUG",	SSL_OP_NETSCAPE_CA_DN_BUG	},
-#endif
-#ifdef SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
+# endif
+# ifdef SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
 	{ "SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG",	SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG	},
-#endif
-#ifdef SSL_OP_CRYPTOPRO_TLSEXT_BUG
+# endif
+# ifdef SSL_OP_CRYPTOPRO_TLSEXT_BUG
 	{ "SSL_OP_CRYPTOPRO_TLSEXT_BUG",	SSL_OP_CRYPTOPRO_TLSEXT_BUG	},
-#endif
-#ifdef SSL_OP_TLSEXT_PADDING
+# endif
+# ifdef SSL_OP_TLSEXT_PADDING
 	{ "SSL_OP_TLSEXT_PADDING",	SSL_OP_TLSEXT_PADDING	},
-#endif
-#ifdef SSL_OP_NO_RENEGOTIATION
-	{ "SSL_OP_NO_RENEGOTIATION",    SSL_OP_NO_RENEGOTIATION },
-#endif
-#ifdef SSL_OP_NO_ANTI_REPLAY
+# endif
+# ifdef SSL_OP_NO_RENEGOTIATION
+	{ "SSL_OP_NO_RENEGOTIATION",	SSL_OP_NO_RENEGOTIATION },
+# endif
+# ifdef SSL_OP_NO_ANTI_REPLAY
 	{ "SSL_OP_NO_ANTI_REPLAY",	SSL_OP_NO_ANTI_REPLAY },
-#endif
-#ifdef SSL_OP_ALLOW_NO_DHE_KEX
+# endif
+# ifdef SSL_OP_ALLOW_NO_DHE_KEX
 	{ "SSL_OP_ALLOW_NO_DHE_KEX",	SSL_OP_ALLOW_NO_DHE_KEX },
-#endif
-#ifdef SSL_OP_NO_ENCRYPT_THEN_MAC
+# endif
+# ifdef SSL_OP_NO_ENCRYPT_THEN_MAC
 	{ "SSL_OP_NO_ENCRYPT_THEN_MAC",	SSL_OP_NO_ENCRYPT_THEN_MAC },
-#endif
-#ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT
+# endif
+# ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT
 	{ "SSL_OP_ENABLE_MIDDLEBOX_COMPAT",	SSL_OP_ENABLE_MIDDLEBOX_COMPAT },
-#endif
-#ifdef SSL_OP_PRIORITIZE_CHACHA
+# endif
+# ifdef SSL_OP_PRIORITIZE_CHACHA
 	{ "SSL_OP_PRIORITIZE_CHACHA",	SSL_OP_PRIORITIZE_CHACHA },
-#endif
+# endif
 	{ NULL,		0		}
 };
 
 /*
-** READSSLOPTIONS  -- read SSL_OP_* values
+**  READSSLOPTIONS  -- read SSL_OP_* values
 **
 **	Parameters:
 **		opt -- name of option (can be NULL)
@@ -2256,8 +2269,8 @@ static struct ssl_options
 **		0 on success.
 */
 
-#define SSLOPERR_NAN	1
-#define SSLOPERR_NOTFOUND	2
+# define SSLOPERR_NAN	1
+# define SSLOPERR_NOTFOUND	2
 
 static int readssloptions __P((char *, char *, unsigned long *, int ));
 
@@ -2314,7 +2327,7 @@ readssloptions(opt, val, pssloptions, delim)
 			for (sslopts = SSL_Option;
 			     sslopts->sslopt_name != NULL; sslopts++)
 			{
-				if (sm_strcasecmp(q, sslopts->sslopt_name) == 0)
+				if (SM_STRCASEEQ(q, sslopts->sslopt_name))
 				{
 					sslopt_val = sslopts->sslopt_bits;
 					break;
@@ -2341,7 +2354,7 @@ readssloptions(opt, val, pssloptions, delim)
 }
 
 /*
-** GET_TLS_SE_OPTIONS -- get TLS session options (from ruleset)
+**  GET_TLS_SE_FEATURES -- get TLS session features (from ruleset)
 **
 **	Parameters:
 **		e -- envelope
@@ -2350,40 +2363,44 @@ readssloptions(opt, val, pssloptions, delim)
 **		srv -- server?
 **
 **	Returns:
-**		0 on success.
+**		EX_OK on success.
 */
 
 int
-get_tls_se_options(e, ssl, tlsi_ctx, srv)
+get_tls_se_features(e, ssl, tlsi_ctx, srv)
 	ENVELOPE *e;
 	SSL *ssl;
 	tlsi_ctx_T *tlsi_ctx;
 	bool srv;
 {
-	bool saveQuickAbort, saveSuprErrs, ok;
+	bool saveQuickAbort, saveSuprErrs;
 	char *optionlist, *opt, *val;
 	char *keyfile, *certfile;
 	size_t len, i;
-	int ret;
+	int ret, rv;
 
-#  define who (srv ? "server" : "client")
-#  define NAME_C_S macvalue(macid(srv ? "{client_name}" : "{server_name}"), e)
-#  define ADDR_C_S macvalue(macid(srv ? "{client_addr}" : "{server_addr}"), e)
-#  define WHICH srv ? "srv" : "clt"
+# define who (srv ? "server" : "client")
+# define NAME_C_S macvalue(macid(srv ? "{client_name}" : "{server_name}"), e)
+# define ADDR_C_S macvalue(macid(srv ? "{client_addr}" : "{server_addr}"), e)
+# define WHICH srv ? "srv" : "clt"
 
-	ret = 0;
+	SM_REQUIRE(ssl != NULL);
+	rv = EX_OK;
 	keyfile = certfile = opt = val = NULL;
 	saveQuickAbort = QuickAbort;
 	saveSuprErrs = SuprErrs;
 	SuprErrs = true;
 	QuickAbort = false;
+# if _FFR_MTA_STS
+	SM_FREE(STS_SNI);
+# endif
 
 	optionlist = NULL;
-	ok = rscheck(srv ? "tls_srv_features" : "tls_clt_features",
+	rv = rscheck(srv ? "tls_srv_features" : "tls_clt_features",
 		     NAME_C_S, ADDR_C_S, e,
 		     RSF_RMCOMM|RSF_ADDR|RSF_STRING,
-		     5, NULL, NOQID, NULL, &optionlist) == EX_OK;
-	if (!ok && LogLevel > 8)
+		     5, NULL, NOQID, NULL, &optionlist);
+	if (EX_OK != rv && LogLevel > 8)
 	{
 		sm_syslog(LOG_NOTICE, NOQID,
 			  "rscheck(tls_%s_features)=failed, relay=%s [%s], errors=%d",
@@ -2392,20 +2409,19 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 	}
 	QuickAbort = saveQuickAbort;
 	SuprErrs = saveSuprErrs;
-	if (ok && LogLevel > 9)
+	if (EX_OK == rv && LogLevel > 9)
 	{
 		sm_syslog(LOG_INFO, NOQID,
 			  "tls_%s_features=%s, relay=%s [%s]",
 			  WHICH, optionlist, NAME_C_S, ADDR_C_S);
 	}
-	if (!ok || optionlist == NULL || (len = strlen(optionlist)) < 2)
+	if (EX_OK != rv || optionlist == NULL || (len = strlen(optionlist)) < 2)
 	{
 		if (LogLevel > 9)
 			sm_syslog(LOG_INFO, NOQID,
-				  "tls_%s_features=empty, relay=%s [%s]",
-				  WHICH, NAME_C_S, ADDR_C_S);
-
-		return ok ? 0 : 1;
+				  "tls_%s_features=empty, stat=%d, relay=%s [%s]",
+				  WHICH, rv, NAME_C_S, ADDR_C_S);
+		return rv;
 	}
 
 	i = 0;
@@ -2421,7 +2437,7 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 				  WHICH, NAME_C_S, ADDR_C_S);
 
 			/* this is not treated as error! */
-			return 0;
+			return EX_OK;
 		}
 		i = 1;
 	}
@@ -2432,7 +2448,7 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 			sm_syslog(LOG_INFO, NOQID,	\
 				  "tls_%s_features=invalid_syntax, opt=%s, relay=%s [%s]",	\
 				  WHICH, opt, NAME_C_S, ADDR_C_S);	\
-		return -1;	\
+		goto fail;	\
 	} while (0)
 
 #  define CHECKLEN	\
@@ -2482,7 +2498,7 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 				  "tls_%s_features=parsed, %s=%s, relay=%s [%s]",
 				  WHICH, opt, val, NAME_C_S, ADDR_C_S);
 
-		if (sm_strcasecmp(opt, "options") == 0)
+		if (SM_STRCASEEQ(opt, "options"))
 		{
 			unsigned long ssloptions;
 
@@ -2490,22 +2506,25 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 			ret = readssloptions(NULL, val, &ssloptions, ';');
 			if (ret == 0)
 				(void) SSL_set_options(ssl, (long) ssloptions);
-			else if (LogLevel > 8)
+			else
 			{
-				sm_syslog(LOG_WARNING, NOQID,
-					  "tls_%s_features=%s, error=%s, relay=%s [%s]",
-					  WHICH, val,
-					  (ret == SSLOPERR_NAN) ? "not a number" :
-					  ((ret == SSLOPERR_NOTFOUND) ? "SSL_OP not found" :
-					  "unknown"),
-					  NAME_C_S, ADDR_C_S);
+				if (LogLevel > 8)
+				{
+					sm_syslog(LOG_WARNING, NOQID,
+						  "tls_%s_features=%s, error=%s, relay=%s [%s]",
+						  WHICH, val,
+						  (ret == SSLOPERR_NAN) ? "not a number" :
+						  ((ret == SSLOPERR_NOTFOUND) ? "SSL_OP not found" :
+						  "unknown"),
+						  NAME_C_S, ADDR_C_S);
+				}
+				goto fail;
 			}
 		}
-		else if (sm_strcasecmp(opt, "cipherlist") == 0)
+		else if (SM_STRCASEEQ(opt, "cipherlist"))
 		{
 			if (SSL_set_cipher_list(ssl, val) <= 0)
 			{
-				ret = 1;
 				if (LogLevel > 7)
 				{
 					sm_syslog(LOG_WARNING, NOQID,
@@ -2514,9 +2533,27 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 
 					tlslogerr(LOG_WARNING, 9, who);
 				}
+				goto fail;
 			}
 		}
-		else if (sm_strcasecmp(opt, "flags") == 0)
+# if MTA_HAVE_TLSv1_3
+		else if (SM_STRCASEEQ(opt, "ciphersuites"))
+		{
+			if (SSL_set_ciphersuites(ssl, val) <= 0)
+			{
+				if (LogLevel > 7)
+				{
+					sm_syslog(LOG_WARNING, NOQID,
+						  "STARTTLS=%s, error: SSL_set_ciphersuites(%s) failed",
+						  who, val);
+
+					tlslogerr(LOG_WARNING, 9, who);
+				}
+				goto fail;
+			}
+		}
+# endif /* MTA_HAVE_TLSv1_3 */
+		else if (SM_STRCASEEQ(opt, "flags"))
 		{
 			char *p;
 
@@ -2526,19 +2563,45 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 					setbitn(bitidx(*p), tlsi_ctx->tlsi_flags);
 			}
 		}
-		else if (sm_strcasecmp(opt, "keyfile") == 0)
+		else if (SM_STRCASEEQ(opt, "keyfile"))
 			keyfile = val;
-		else if (sm_strcasecmp(opt, "certfile") == 0)
+		else if (SM_STRCASEEQ(opt, "certfile"))
 			certfile = val;
+# if _FFR_MTA_STS
+		else if (sm_strcasecmp(opt, "servername") == 0 &&
+			 sm_strcasecmp(val, "hostname") == 0)
+		{
+			char *sn;
+
+			sn = macvalue(macid("{server_name}"), e);
+			if (sn == NULL)
+				STS_SNI = NULL;
+			else
+				STS_SNI = sm_strdup(sn);
+		}
+		else if (sm_strcasecmp(opt, "servername") == 0)
+		{
+			if (LogLevel > 7)
+			{
+				sm_syslog(LOG_INFO, NOQID,
+					  "tls_%s_features=servername, invalid_value=%s, relay=%s [%s]",
+					  WHICH, val, NAME_C_S, ADDR_C_S);
+			}
+			goto fail;
+		}
+		else if (sm_strcasecmp(opt, "sts") == 0 &&
+			 sm_strcasecmp(val, "secure") == 0)
+			setbitn(bitidx(TLSI_FL_STS_NOFB2CLR), tlsi_ctx->tlsi_flags);
+# endif /* _FFR_MTA_STS */
 		else
 		{
-			ret = 1;
 			if (LogLevel > 7)
 			{
 				sm_syslog(LOG_INFO, NOQID,
 					  "tls_%s_features=unknown_option, opt=%s, relay=%s [%s]",
 					  WHICH, opt, NAME_C_S, ADDR_C_S);
 			}
+			goto fail;
 		}
 
 	} while (optionlist[i] != '\0' && i < len);
@@ -2552,20 +2615,23 @@ get_tls_se_options(e, ssl, tlsi_ctx, srv)
 	}
 	else if (keyfile != NULL || certfile != NULL)
 	{
-		ret = 1;
 		if (LogLevel > 7)
 		{
 			sm_syslog(LOG_INFO, NOQID,
 				  "tls_%s_features=only_one_of_CertFile/KeyFile_specified, relay=%s [%s]",
 				  WHICH, NAME_C_S, ADDR_C_S);
 		}
+		goto fail;
 	}
 
-	return ret;
-#  undef who
-#  undef NAME_C_S
-#  undef ADDR_C_S
-#  undef WHICH
+	return rv;
+
+  fail:
+	return EX_CONFIG;
+# undef who
+# undef NAME_C_S
+# undef ADDR_C_S
+# undef WHICH
 }
 #endif /* STARTTLS */
 
@@ -2871,7 +2937,7 @@ static struct optioninfo
 #define O_CRLPATH	0xd7
 	{ "CRLPath",		O_CRLPATH,	OI_NONE	},
 #define O_HELONAME 0xd8
-	{ "HeloName",   O_HELONAME,     OI_NONE },
+	{ "HeloName",		O_HELONAME,	OI_NONE },
 #if _FFR_MEMSTAT
 # define O_REFUSELOWMEM	0xd9
 	{ "RefuseLowMem",	O_REFUSELOWMEM,	OI_NONE },
@@ -2892,7 +2958,7 @@ static struct optioninfo
 #endif
 #if _FFR_EIGHT_BIT_ADDR_OK
 # if !ALLOW_255
-#  ERROR FFR_EIGHT_BIT_ADDR_OK requires _ALLOW_255
+#  ERROR "_FFR_EIGHT_BIT_ADDR_OK requires ALLOW_255"
 # endif
 # define O_EIGHT_BIT_ADDR_OK	0xdf
 	{ "EightBitAddrOK",	O_EIGHT_BIT_ADDR_OK,	OI_NONE },
@@ -2970,13 +3036,24 @@ static struct optioninfo
 
 #if _FFR_CLIENTCA
 #define O_CLTCACERTFILE	0xf5
-	{ "ClientCACertFile",			O_CLTCACERTFILE, OI_NONE },
+	{ "ClientCACertFile",	O_CLTCACERTFILE, OI_NONE },
 #define O_CLTCACERTPATH	0xf6
-	{ "ClientCACertPath",			O_CLTCACERTPATH, OI_NONE },
+	{ "ClientCACertPath",	O_CLTCACERTPATH, OI_NONE },
 #endif
 #if _FFR_TLS_ALTNAMES
 # define O_CHECKALTNAMES 0xf7
-	{ "SetCertAltnames",			O_CHECKALTNAMES, OI_NONE },
+	{ "SetCertAltnames",	O_CHECKALTNAMES, OI_NONE },
+#endif
+#define O_SMTPUTF8	0xf8
+	{ "SmtpUTF8",	O_SMTPUTF8,	OI_NONE },
+#if _FFR_MTA_STS
+# define O_MTASTS	0xf9
+	{ "StrictTransportSecurity",	O_MTASTS,	OI_NONE	},
+#endif
+
+#if MTA_HAVE_TLSv1_3
+#define O_CIPHERSUITES	0xfa
+	{ "CipherSuites",		O_CIPHERSUITES,	OI_NONE	},
 #endif
 
 	{ NULL,				'\0',		OI_NONE	}
@@ -3265,6 +3342,9 @@ setoption(opt, val, safe, sticky, e)
 #if _FFR_DM_ONE
 		/* deliver first TA in background, then queue */
 		  case SM_DM_ONE:
+#endif
+#if _FFR_DMTRIGGER
+		  case SM_TRIGGER:
 #endif
 			set_delivery_mode(*val, e);
 			break;
@@ -3368,19 +3448,19 @@ setoption(opt, val, safe, sticky, e)
 				p++;
 			if (*p != '\0')
 				*p++ = '\0';
-			if (sm_strcasecmp(q, "HasWildcardMX") == 0)
+			if (SM_STRCASEEQ(q, "HasWildcardMX"))
 			{
 				HasWildcardMX = !clearmode;
 				continue;
 			}
-			if (sm_strcasecmp(q, "WorkAroundBrokenAAAA") == 0)
+			if (SM_STRCASEEQ(q, "WorkAroundBrokenAAAA"))
 			{
 				WorkAroundBrokenAAAA = !clearmode;
 				continue;
 			}
 			for (rfp = ResolverFlags; rfp->rf_name != NULL; rfp++)
 			{
-				if (sm_strcasecmp(q, rfp->rf_name) == 0)
+				if (SM_STRCASEEQ(q, rfp->rf_name))
 					break;
 			}
 			if (rfp->rf_name == NULL)
@@ -3482,7 +3562,7 @@ setoption(opt, val, safe, sticky, e)
 
 			for (pv = PrivacyValues; pv->pv_name != NULL; pv++)
 			{
-				if (sm_strcasecmp(val, pv->pv_name) == 0)
+				if (SM_STRCASEEQ(val, pv->pv_name))
 					break;
 			}
 			if (pv->pv_name == NULL)
@@ -3572,11 +3652,11 @@ setoption(opt, val, safe, sticky, e)
 	  case 'u':		/* set default uid */
 		for (p = val; *p != '\0'; p++)
 		{
-# if _FFR_DOTTED_USERNAMES
+#if _FFR_DOTTED_USERNAMES
 			if (*p == '/' || *p == ':')
-# else
+#else
 			if (*p == '.' || *p == '/' || *p == ':')
-# endif
+#endif
 			{
 				*p++ = '\0';
 				break;
@@ -3606,14 +3686,14 @@ setoption(opt, val, safe, sticky, e)
 			}
 		}
 
-# ifdef UID_MAX
+#ifdef UID_MAX
 		if (DefUid > UID_MAX)
 		{
 			syserr("readcf: option u: uid value (%ld) > UID_MAX (%ld); ignored",
 				(long)DefUid, (long)UID_MAX);
 			break;
 		}
-# endif /* UID_MAX */
+#endif /* UID_MAX */
 
 		/* handle the group if it is there */
 		if (*p == '\0')
@@ -3745,15 +3825,15 @@ setoption(opt, val, safe, sticky, e)
 		break;
 
 	  case O_NORCPTACTION:	/* what to do if no recipient */
-		if (sm_strcasecmp(val, "none") == 0)
+		if (SM_STRCASEEQ(val, "none"))
 			NoRecipientAction = NRA_NO_ACTION;
-		else if (sm_strcasecmp(val, "add-to") == 0)
+		else if (SM_STRCASEEQ(val, "add-to"))
 			NoRecipientAction = NRA_ADD_TO;
-		else if (sm_strcasecmp(val, "add-apparently-to") == 0)
+		else if (SM_STRCASEEQ(val, "add-apparently-to"))
 			NoRecipientAction = NRA_ADD_APPARENTLY_TO;
-		else if (sm_strcasecmp(val, "add-bcc") == 0)
+		else if (SM_STRCASEEQ(val, "add-bcc"))
 			NoRecipientAction = NRA_ADD_BCC;
-		else if (sm_strcasecmp(val, "add-to-undisclosed") == 0)
+		else if (SM_STRCASEEQ(val, "add-to-undisclosed"))
 			NoRecipientAction = NRA_ADD_TO_UNDISCLOSED;
 		else
 			syserr("Invalid NoRecipientAction: %s", val);
@@ -3908,11 +3988,11 @@ setoption(opt, val, safe, sticky, e)
 	  case O_RUNASUSER:	/* run bulk of code as this user */
 		for (p = val; *p != '\0'; p++)
 		{
-# if _FFR_DOTTED_USERNAMES
+#if _FFR_DOTTED_USERNAMES
 			if (*p == '/' || *p == ':')
-# else
+#else
 			if (*p == '.' || *p == '/' || *p == ':')
-# endif
+#endif
 			{
 				*p++ = '\0';
 				break;
@@ -3948,14 +4028,14 @@ setoption(opt, val, safe, sticky, e)
 						     (long) EffGid,
 						     (long) pw->pw_gid);
 		}
-# ifdef UID_MAX
+#ifdef UID_MAX
 		if (RunAsUid > UID_MAX)
 		{
 			syserr("readcf: option RunAsUser: uid value (%ld) > UID_MAX (%ld); ignored",
 				(long) RunAsUid, (long) UID_MAX);
 			break;
 		}
-# endif /* UID_MAX */
+#endif /* UID_MAX */
 		if (*p != '\0')
 		{
 			if (isascii(*p) && isdigit(*p))
@@ -4023,7 +4103,7 @@ setoption(opt, val, safe, sticky, e)
 			for (dbs = DontBlameSendmailValues;
 			     dbs->dbs_name != NULL; dbs++)
 			{
-				if (sm_strcasecmp(val, dbs->dbs_name) == 0)
+				if (SM_STRCASEEQ(val, dbs->dbs_name))
 					break;
 			}
 			if (dbs->dbs_name == NULL)
@@ -4037,7 +4117,7 @@ setoption(opt, val, safe, sticky, e)
 		break;
 
 	  case O_DPI:
-		if (sm_strcasecmp(val, "loopback") == 0)
+		if (SM_STRCASEEQ(val, "loopback"))
 			DontProbeInterfaces = DPI_SKIPLOOPBACK;
 		else if (atobool(val))
 			DontProbeInterfaces = DPI_PROBENONE;
@@ -4123,11 +4203,11 @@ setoption(opt, val, safe, sticky, e)
 		break;
 
 	  case O_TRUSTUSER:
-# if !HASFCHOWN && !defined(_FFR_DROP_TRUSTUSER_WARNING)
+#if !HASFCHOWN && !defined(_FFR_DROP_TRUSTUSER_WARNING)
 		if (!UseMSP)
 			(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
 					     "readcf: option TrustedUser may cause problems on systems\n        which do not support fchown() if UseMSP is not set.\n");
-# endif /* !HASFCHOWN && !defined(_FFR_DROP_TRUSTUSER_WARNING) */
+#endif /* !HASFCHOWN && !defined(_FFR_DROP_TRUSTUSER_WARNING) */
 		if (isascii(*val) && isdigit(*val))
 			TrustedUid = atoi(val);
 		else
@@ -4145,14 +4225,14 @@ setoption(opt, val, safe, sticky, e)
 				TrustedUid = pw->pw_uid;
 		}
 
-# ifdef UID_MAX
+#ifdef UID_MAX
 		if (TrustedUid > UID_MAX)
 		{
 			syserr("readcf: option TrustedUser: uid value (%ld) > UID_MAX (%ld)",
 				(long) TrustedUid, (long) UID_MAX);
 			TrustedUid = 0;
 		}
-# endif /* UID_MAX */
+#endif /* UID_MAX */
 		break;
 
 	  case O_MAXMIMEHDRLEN:
@@ -4270,11 +4350,11 @@ setoption(opt, val, safe, sticky, e)
 				SASLOpts |= SASL_SEC_FORWARD_SECRECY;
 				break;
 
-#  if SASL >= 20101
+# if SASL >= 20101
 			  case 'm':
 				SASLOpts |= SASL_SEC_MUTUAL_AUTH;
 				break;
-#  endif /* SASL >= 20101 */
+# endif /* SASL >= 20101 */
 
 			  case 'p':
 				SASLOpts |= SASL_SEC_NOPLAINTEXT;
@@ -4337,18 +4417,23 @@ setoption(opt, val, safe, sticky, e)
 		SET_STRING_EXP(CACertFile);
 	  case O_CACERTPATH:
 		SET_STRING_EXP(CACertPath);
-#if _FFR_CLIENTCA
+# if _FFR_CLIENTCA
 	  case O_CLTCACERTFILE:
 		SET_STRING_EXP(CltCACertFile);
 	  case O_CLTCACERTPATH:
 		SET_STRING_EXP(CltCACertPath);
-#endif
+# endif
 	  case O_DHPARAMS:
 		SET_STRING_EXP(DHParams);
 	  case O_CIPHERLIST:
 		SET_STRING_EXP(CipherList);
+# if MTA_HAVE_TLSv1_3
+	  case O_CIPHERSUITES:
+		SET_STRING_EXP(CipherSuites);
+# endif
 	  case O_DIG_ALG:
 		SET_STRING_EXP(CertFingerprintAlgorithm);
+# if !defined(OPENSSL_NO_ENGINE)
 	  case O_SSLENGINEPATH:
 		SET_STRING_EXP(SSLEnginePath);
 	  case O_SSLENGINE:
@@ -4365,6 +4450,15 @@ setoption(opt, val, safe, sticky, e)
 		if (strcmp(SSLEngine, "chil") == 0)
 			SSLEngineprefork = true;
 		break;
+# else /* !defined(OPENSSL_NO_ENGINE) */
+	  case O_SSLENGINEPATH:
+	  case O_SSLENGINE:
+		(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+				     "Warning: Option: %s ignored -- not supported: OPENSSL_NO_ENGINE\n",
+				     OPTNAME);
+		/* XXX fail? */
+		break;
+# endif /* !defined(OPENSSL_NO_ENGINE) */
 	  case O_SRV_SSL_OPTIONS:
 		pssloptions = &Srv_SSL_Options;
 	  case O_CLT_SSL_OPTIONS:
@@ -4445,10 +4539,10 @@ setoption(opt, val, safe, sticky, e)
 	  case O_CLTKEYFILE:
 	  case O_CACERTFILE:
 	  case O_CACERTPATH:
-#if _FFR_CLIENTCA
+# if _FFR_CLIENTCA
 	  case O_CLTCACERTFILE:
 	  case O_CLTCACERTPATH:
-#endif
+# endif
 	  case O_DHPARAMS:
 	  case O_SRV_SSL_OPTIONS:
 	  case O_CLT_SSL_OPTIONS:
@@ -4654,7 +4748,7 @@ setoption(opt, val, safe, sticky, e)
 
 #if DANE
 	  case O_DANE:
-		if (sm_strcasecmp(val, "always") == 0)
+		if (SM_STRCASEEQ(val, "always"))
 			Dane = DANE_ALWAYS;
 		else
 			Dane = atobool(val) ? DANE_SECURE : DANE_NEVER;
@@ -4673,11 +4767,33 @@ setoption(opt, val, safe, sticky, e)
 		break;
 #endif
 
-# if _FFR_TLS_ALTNAMES
+#if _FFR_TLS_ALTNAMES
 	  case O_CHECKALTNAMES:
 		SetCertAltnames = atobool(val);
 		break;
-# endif
+#endif
+	  case O_SMTPUTF8:
+#if USE_EAI
+		/* hack for testing */
+		if (isascii(*val) && isdigit(*val))
+			SMTPUTF8 = (int) strtol(val, NULL, 0);
+		else
+			SMTPUTF8 = atobool(val);
+#else
+		if (atobool(val))
+			syserr("readcf: option: %s set but no USE_EAI support",
+				     OPTNAME);
+		else
+			(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+				     "Warning: Option: %s requires USE_EAI support\n",
+				     OPTNAME);
+#endif
+		break;
+#if _FFR_MTA_STS
+	  case O_MTASTS:
+		MTASTS = atobool(val);
+		break;
+#endif
 
 	  default:
 		if (tTd(37, 1))
@@ -5069,7 +5185,7 @@ settimeout(name, val, sticky)
 
 	for (to = TimeOutTab; to->to_name != NULL; to++)
 	{
-		if (sm_strcasecmp(to->to_name, name) == 0)
+		if (SM_STRCASEEQ(to->to_name, name))
 			break;
 	}
 
@@ -5423,3 +5539,25 @@ inittimeouts(val, sticky)
 		}
 	}
 }
+
+/*
+**  SHOWCFOPTS -- show cf options
+**
+**	Parameters:
+**		none
+**
+**	Returns:
+**		none.
+*/
+
+void
+showcfopts()
+{
+	struct optioninfo *o;
+
+	for (o = OptionTab; o->o_name != NULL; o++)
+	{
+		(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+			"%s\n", o->o_name);
+	}
+}
diff --git a/src/recipient.c b/src/recipient.c
index eb325a6de385..a118f38c7168 100644
--- a/src/recipient.c
+++ b/src/recipient.c
@@ -15,6 +15,11 @@
 
 SM_RCSID("@(#)$Id: recipient.c,v 8.351 2013-11-22 20:51:56 ca Exp $")
 
+#include 
+#if _FFR_8BITENVADDR
+# include 
+#endif
+
 static void	includetimeout __P((int));
 static ADDRESS	*self_reference __P((ADDRESS *));
 static int	sortexpensive __P((ADDRESS *, ADDRESS *));
@@ -172,7 +177,7 @@ sendtolist(list, ctladdr, sendq, aliaslevel, e)
 	char *endp;
 	char *oldto = e->e_to;
 	char *SM_NONVOLATILE bufp;
-	char buf[MAXNAME + 1];
+	char buf[MAXNAME + 1];	/* EAI: ok, uses bufp dynamically expanded */
 
 	if (list == NULL)
 	{
@@ -225,6 +230,7 @@ sendtolist(list, ctladdr, sendq, aliaslevel, e)
 			while ((SM_ISSPACE(*p)) || *p == ',')
 				p++;
 			SM_ASSERT(p < endp);
+/* XXX p must be [i] */
 			a = parseaddr(p, NULLADDR, RF_COPYALL, delimiter,
 				      &delimptr, e, true);
 			p = delimptr;
@@ -342,7 +348,7 @@ removefromlist(list, sendq, e)
 	char *p;
 	char *oldto = e->e_to;
 	char *SM_NONVOLATILE bufp;
-	char buf[MAXNAME + 1];
+	char buf[MAXNAME + 1];	/* EAI: ok, uses bufp dynamically expanded */
 
 	if (list == NULL)
 	{
@@ -377,13 +383,17 @@ removefromlist(list, sendq, e)
 	{
 		(void) sm_strlcpy(bufp, denlstring(list, false, true), i);
 
-#if _FFR_ADDR_TYPE_MODES
+# if _FFR_ADDR_TYPE_MODES
 		if (AddrTypeModes)
 			macdefine(&e->e_macro, A_PERM, macid("{addr_type}"),
 				  "e r d");
 		else
-#endif /* _FFR_ADDR_TYPE_MODES */
-		macdefine(&e->e_macro, A_PERM, macid("{addr_type}"), "e r");
+# endif /* _FFR_ADDR_TYPE_MODES */
+		/* "else" in #if code above */
+		{
+			macdefine(&e->e_macro, A_PERM, macid("{addr_type}"),
+				  "e r");
+		}
 		for (p = bufp; *p != '\0'; )
 		{
 			ADDRESS a;	/* parsed address to be removed */
@@ -394,6 +404,7 @@ removefromlist(list, sendq, e)
 			/* parse the address */
 			while ((SM_ISSPACE(*p)) || *p == ',')
 				p++;
+			/* XXX p must be [i] */
 			if (parseaddr(p, &a, RF_COPYALL|RF_RM_ADDR,
 				      delimiter, &delimptr, e, true) == NULL)
 			{
@@ -467,7 +478,8 @@ recipient(new, sendq, aliaslevel, e)
 	int findusercount;
 	bool initialdontsend;
 	char *buf;
-	char buf0[MAXNAME + 1];		/* unquoted image of the user name */
+	char buf0[MAXNAME + 1]; /* EAI: ok, uses bufp dynamically expanded */
+		/* unquoted image of the user name */
 	sortfn_t *sortfn;
 
 	p = NULL;
@@ -508,8 +520,8 @@ recipient(new, sendq, aliaslevel, e)
 		p = e->e_from.q_mailer->m_addrtype;
 		if (p == NULL)
 			p = "rfc822";
-#if _FFR_EAI
-		if (sm_strcasecmp(p, "rfc822") == 0 &&
+#if USE_EAI
+		if (SM_STRCASEEQ(p, "rfc822") &&
 		    !addr_is_ascii(q->q_user))
 			p = "utf-8";
 #endif
@@ -1237,10 +1249,10 @@ finduser(name, fuzzyp, user)
 	(void) setpwent();
 	while ((pw = getpwent()) != NULL)
 	{
-		char buf[MAXNAME + 1];
+		char buf[MAXNAME + 1];	/* EAI: ok: for pw_gecos */
 
 # if 0
-		if (sm_strcasecmp(pw->pw_name, name) == 0)
+		if (SM_STRCASEEQ(pw->pw_name, name))
 		{
 			if (tTd(29, 4))
 				sm_dprintf("found (case wrapped)\n");
@@ -1249,7 +1261,7 @@ finduser(name, fuzzyp, user)
 # endif /* 0 */
 
 		sm_pwfullname(pw->pw_gecos, pw->pw_name, buf, sizeof(buf));
-		if (strchr(buf, ' ') != NULL && sm_strcasecmp(buf, name) == 0)
+		if (strchr(buf, ' ') != NULL && SM_STRCASEEQ(buf, name))
 		{
 			if (tTd(29, 4))
 				sm_dprintf("fuzzy matches %s\n", pw->pw_name);
@@ -1941,8 +1953,41 @@ sendtoargv(argv, e)
 {
 	register char *p;
 
+#if USE_EAI
+	if (!e->e_smtputf8)
+	{
+		char **av;
+
+		av = argv;
+		while ((p = *av++) != NULL)
+		{
+			if (!addr_is_ascii(p))
+			{
+				e->e_smtputf8 = true;
+				break;
+			}
+		}
+	}
+#endif /* USE_EAI */
+
 	while ((p = *argv++) != NULL)
+	{
+#if USE_EAI
+		if (e->e_smtputf8)
+		{
+			int len = 0;
+
+			if (!SMTPUTF8 && !asciistr(p))
+			{
+				usrerr("non-ASCII recipient address %s requires SMTPUTF8",
+					p);
+				finis(false, true, EX_USAGE);
+			}
+			p = quote_internal_chars(p, NULL, &len, NULL);
+		}
+#endif /* USE_EAI */
 		(void) sendtolist(p, NULLADDR, &e->e_sendqueue, 0, e);
+	}
 }
 
 /*
diff --git a/src/savemail.c b/src/savemail.c
index 945bcd702e51..0bf91fd5e06b 100644
--- a/src/savemail.c
+++ b/src/savemail.c
@@ -15,6 +15,8 @@
 
 SM_RCSID("@(#)$Id: savemail.c,v 8.319 2013-11-22 20:51:56 ca Exp $")
 
+#include 
+
 static bool	errbody __P((MCI *, ENVELOPE *, char *));
 static bool	pruneroute __P((char *));
 
@@ -513,7 +515,7 @@ returntosender(msg, returnq, flags, e)
 	static int returndepth = 0;
 	register ADDRESS *q;
 	char *p;
-	char buf[MAXNAME + 1];
+	char buf[MAXNAME + 1];	/* EAI:ok */
 
 	if (returnq == NULL)
 		return -1;
@@ -685,6 +687,7 @@ returntosender(msg, returnq, flags, e)
 
 	/* fake up an address header for the from person */
 	expand("\201n", buf, sizeof(buf), e);
+/* XXX buf must be [i] */
 	if (parseaddr(buf, &ee->e_from,
 		      RF_COPYALL|RF_SENDERADDR, '\0', NULL, e, false) == NULL)
 	{
@@ -697,6 +700,12 @@ returntosender(msg, returnq, flags, e)
 	ee->e_from.q_flags |= QPINGONFAILURE;
 	ee->e_sender = ee->e_from.q_paddr;
 
+#if USE_EAI
+	/* always? when is this really needed? */
+	if (e->e_smtputf8)
+		ee->e_smtputf8 = true;
+#endif
+
 	/* push state into submessage */
 	CurEnv = ee;
 	macdefine(&ee->e_macro, A_PERM, 'f', "\201n");
@@ -774,7 +783,7 @@ dsntypename(addrtype, addr)
 {
 	if (sm_strcasecmp(addrtype, "rfc822") != 0)
 		return addrtype;
-#if _FFR_EAI
+#if USE_EAI
 	if (!addr_is_ascii(addr))
 		return "utf-8";
 #endif
@@ -1120,13 +1129,13 @@ errbody(mci, e, separator)
 		(void) sm_strlcpyn(buf, sizeof(buf), 2, "--", e->e_msgboundary);
 		if (!putline("", mci) ||
 		    !putline(buf, mci) ||
-#if _FFR_EAI
-		    !putline(e->e_parent->e_smtputf8
-			     ? "Content-Type: message/global-delivery-status"
-			     : "Content-Type: message/delivery-status", mci) ||
-#else
-		    !putline("Content-Type: message/delivery-status", mci) ||
-#endif
+		    !putline(
+# if USE_EAI
+			e->e_parent->e_smtputf8
+			? "Content-Type: message/global-delivery-status"
+			:
+# endif
+			"Content-Type: message/delivery-status", mci) ||
 		    !putline("", mci))
 			goto writeerr;
 
@@ -1261,7 +1270,7 @@ errbody(mci, e, separator)
 				else
 					p = "rfc822";
 
-				if (sm_strcasecmp(p, "rfc822") == 0 &&
+				if (SM_STRCASEEQ(p, "rfc822") &&
 				    strchr(q->q_user, '@') == NULL)
 				{
 					(void) sm_snprintf(actual,
@@ -1294,7 +1303,7 @@ errbody(mci, e, separator)
 									   actual);
 			}
 
-#if _FFR_EAI
+# if USE_EAI
 			if (sm_strncasecmp("rfc822;", q->q_finalrcpt, 7) == 0 &&
 			    !addr_is_ascii(q->q_user))
 			{
@@ -1309,7 +1318,7 @@ errbody(mci, e, separator)
 				q->q_finalrcpt = sm_rpool_strdup_x(e->e_rpool,
 								   utf8rcpt);
 			}
-#endif
+# endif /* USE_EAI */
 
 			if (q->q_finalrcpt != NULL)
 			{
@@ -1436,21 +1445,20 @@ errbody(mci, e, separator)
 
 			if (!putline(buf, mci))
 				goto writeerr;
-#if _FFR_EAI
+#if USE_EAI
 			if (e->e_parent->e_smtputf8)
 				(void) sm_strlcpyn(buf, sizeof(buf), 2,
 						   "Content-Type: message/global",
 						   sendbody ? "" : "-headers");
 			else
+#endif /* USE_EAI */
+			/* "else" in #if code above */
+			{
 				(void) sm_strlcpyn(buf, sizeof(buf), 2,
-						   "Content-Type: ",
+						"Content-Type: ",
 						sendbody ? "message/rfc822"
 							 : "text/rfc822-headers");
-#else /* _FFR_EAI */
-			(void) sm_strlcpyn(buf, sizeof(buf), 2, "Content-Type: ",
-					sendbody ? "message/rfc822"
-						 : "text/rfc822-headers");
-#endif /* _FFR_EAI */
+			}
 			if (!putline(buf, mci))
 				goto writeerr;
 
@@ -1800,7 +1808,7 @@ isatom(s)
 {
 	int c;
 
-	if (s == NULL || *s == '\0')
+	if (SM_IS_EMPTY(s))
 		return false;
 	while ((c = *s++) != '\0')
 	{
diff --git a/src/sendmail.0 b/src/sendmail.0
index 60ab1cd02314..8eceedd6790b 100644
--- a/src/sendmail.0
+++ b/src/sendmail.0
@@ -1,28 +1,28 @@
-SENDMAIL(8)                                                        SENDMAIL(8)
+SENDMAIL(8)                 System Manager's Manual                SENDMAIL(8)
 
 
 
-NAME
+NNAAMMEE
        sendmail - an electronic mail transport agent
 
-SYNOPSIS
-       sendmail [flags] [address ...]
-       newaliases
-       mailq [-v]
-       hoststat
-       purgestat
-       smtpd
+SSYYNNOOPPSSIISS
+       sseennddmmaaiill [_f_l_a_g_s] [_a_d_d_r_e_s_s _._._.]
+       nneewwaalliiaasseess
+       mmaaiillqq [--vv]
+       hhoossttssttaatt
+       ppuurrggeessttaatt
+       ssmmttppdd
 
-DESCRIPTION
-       Sendmail sends a message to one or more recipients, routing the message
-       over whatever networks are necessary.  Sendmail does internetwork  for-
+DDEESSCCRRIIPPTTIIOONN
+       SSeennddmmaaiill sends a message to one or more _r_e_c_i_p_i_e_n_t_s_, routing the message
+       over whatever networks are necessary.  SSeennddmmaaiill does internetwork  for-
        warding as necessary to deliver the message to the correct place.
 
-       Sendmail  is  not  intended as a user interface routine; other programs
-       provide user-friendly front ends; sendmail is used only to deliver pre-
+       SSeennddmmaaiill  is  not  intended as a user interface routine; other programs
+       provide user-friendly front ends; sseennddmmaaiill is used only to deliver pre-
        formatted messages.
 
-       With  no  flags, sendmail reads its standard input up to an end-of-file
+       With  no  flags, sseennddmmaaiill reads its standard input up to an end-of-file
        or a line consisting only of a single dot and sends a copy of the  mes-
        sage  found  there  to  all of the addresses listed.  It determines the
        network(s) to use based on the syntax and contents of the addresses.
@@ -33,231 +33,237 @@ SENDMAIL(8)                                                        SENDMAIL(8)
        e.g.,  if  `john'  sends to `group', and `group' includes `john' in the
        expansion, then the letter will also be delivered to `john'.
 
-   Parameters
-       -Ac    Use submit.cf even if the operation mode does  not  indicate  an
+   PPaarraammeetteerrss
+       --AAcc    Use submit.cf even if the operation mode does  not  indicate  an
               initial mail submission.
 
-       -Am    Use  sendmail.cf even if the operation mode indicates an initial
+       --AAmm    Use  sendmail.cf even if the operation mode indicates an initial
               mail submission.
 
-       -Btype Set the body type to type.  Current legal  values  are  7BIT  or
+       --BB_t_y_p_e Set the body type to _t_y_p_e.  Current legal  values  are  7BIT  or
               8BITMIME.
 
-       -ba    Go  into  ARPANET  mode.  All input lines must end with a CR-LF,
+       --bbaa    Go  into  ARPANET  mode.  All input lines must end with a CR-LF,
               and all messages will be generated with  a  CR-LF  at  the  end.
               Also,  the ``From:'' and ``Sender:'' fields are examined for the
               name of the sender.
 
-       -bC    Check the configuration file.
+       --bbCC    Check the configuration file.
 
-       -bd    Run as a daemon.  Sendmail will fork and run in background  lis-
+       --bbdd    Run as a daemon.  SSeennddmmaaiill will fork and run in background  lis-
               tening on socket 25 for incoming SMTP connections.  This is nor-
               mally run from /etc/rc.
 
-       -bD    Same as -bd except runs in foreground.
+       --bbDD    Same as --bbdd except runs in foreground.
 
-       -bh    Print the persistent host status database.
+       --bbhh    Print the persistent host status database.
 
-       -bH    Purge expired entries from the persistent host status  database.
+       --bbHH    Purge expired entries from the persistent host status database.
 
-       -bi    Initialize the alias database.
+       --bbii    Initialize the alias database.
 
-       -bm    Deliver mail in the usual way (default).
+       --bbmm    Deliver mail in the usual way (default).
 
-       -bp    Print a listing of the queue(s).
+       --bbpp    Print a listing of the queue(s).
 
-       -bP    Print  number  of  entries  in the queue(s); only available with
+       --bbPP    Print number of entries in the  queue(s);  only  available  with
               shared memory support.
 
-       -bs    Use the SMTP protocol as described in RFC821 on  standard  input
-              and  output.   This  flag  implies all the operations of the -ba
+       --bbss    Use  the  SMTP protocol as described in RFC821 on standard input
+              and output.  This flag implies all the  operations  of  the  --bbaa
               flag that are compatible with SMTP.
 
-       -bt    Run in address test mode.  This mode reads addresses  and  shows
-              the  steps  in  parsing;  it is used for debugging configuration
-              tables.
+       --bbtt    Run  in  address test mode.  This mode reads addresses and shows
+              the steps in parsing; it is used for debugging configuration ta-
+              bles.
 
-       -bv    Verify names only - do not try to collect or deliver a  message.
-              Verify  mode  is  normally  used for validating users or mailing
+       --bbvv    Verify  names only - do not try to collect or deliver a message.
+              Verify mode is normally used for  validating  users  or  mailing
               lists.
 
-       -Cfile Use  alternate  configuration  file.   Sendmail  gives  up   any
-              enhanced  (set-user-ID  or set-group-ID) privileges if an alter-
-              nate configuration file is specified.
+       --CC_f_i_l_e Use  alternate  configuration  file.   SSeennddmmaaiill gives up any en-
+              hanced (set-user-ID or set-group-ID) privileges if an  alternate
+              configuration file is specified.
 
-       -D logfile
-              Send debugging output to the indicated log file instead of  std-
+       --DD _l_o_g_f_i_l_e
+              Send  debugging output to the indicated log file instead of std-
               out.
 
-       -dcategory.level...
-              Set  the  debugging  flag  for  category  to level.  Category is
-              either an integer or a name specifying the topic, and  level  an
-              integer  specifying  the  level  of  debugging  output  desired.
-              Higher levels generally mean more output.  More  than  one  flag
-              can  be  specified  by  separating  them with commas.  A list of
-              numeric debugging categories can be found in the TRACEFLAGS file
-              in the sendmail source distribution.
-              The  option -d0.1 prints the version of sendmail and the options
+       --dd_c_a_t_e_g_o_r_y.._l_e_v_e_l_._._.
+              Set the debugging flag for _c_a_t_e_g_o_r_y to _l_e_v_e_l.  _C_a_t_e_g_o_r_y  is  ei-
+              ther an integer or a name specifying the topic, and _l_e_v_e_l an in-
+              teger specifying the level of debugging output desired.   Higher
+              levels  generally  mean  more output.  More than one flag can be
+              specified by separating them with commas.  A list of numeric de-
+              bugging  categories  can  be found in the TRACEFLAGS file in the
+              sendmail source distribution.
+              The option --dd00..11 prints the version of sseennddmmaaiill and the  options
               it was compiled with.
-              Most other categories are only useful with, and  documented  in,
-              sendmail's source code.
+              Most  other  categories are only useful with, and documented in,
+              sseennddmmaaiill's source code.
 
-       -Ffullname
+       --FF_f_u_l_l_n_a_m_e
               Set the full name of the sender.
 
-       -fname Sets  the name of the ``from'' person (i.e., the envelope sender
+       --ff_n_a_m_e Sets the name of the ``from'' person (i.e., the envelope  sender
               of the mail).  This address may also be used in the From: header
-              if  that header is missing during initial submission.  The enve-
+              if that header is missing during initial submission.  The  enve-
               lope sender address is used as the recipient for delivery status
-              notifications  and may also appear in a Return-Path: header.  -f
-              should only be used by ``trusted'' users (normally root, daemon,
-              and  network)  or  if the person you are trying to become is the
-              same as the person you  are.   Otherwise,  an  X-Authentication-
+              notifications and may also appear in a Return-Path: header.   --ff
+              should only be used by ``trusted'' users (normally _r_o_o_t, _d_a_e_m_o_n,
+              and _n_e_t_w_o_r_k) or if the person you are trying to  become  is  the
+              same  as  the  person  you are.  Otherwise, an X-Authentication-
               Warning header will be added to the message.
 
-       -G     Relay  (gateway) submission of a message, e.g., when rmail calls
-              sendmail .
+       --GG     Relay (gateway) submission of a message, e.g., when rrmmaaiill  calls
+              sseennddmmaaiill ..
 
-       -hN    Set the hop count to N.  The hop count is incremented every time
-              the  mail  is  processed.   When it reaches a limit, the mail is
-              returned with an error message, the victim of an aliasing  loop.
+       --hh_N    Set the hop count to _N.  The hop count is incremented every time
+              the mail is processed.  When it reaches a limit, the mail is re-
+              turned  with  an  error message, the victim of an aliasing loop.
               If  not  specified,  ``Received:''  lines  in  the  message  are
               counted.
 
-       -i     Do not strip a leading dot from lines in incoming messages,  and
+       --ii     Do  not strip a leading dot from lines in incoming messages, and
               do not treat a dot on a line by itself as the end of an incoming
-              message.  This should be set if you  are  reading  data  from  a
+              message.   This  should  be  set  if you are reading data from a
               file.
 
-       -L tag Set  the identifier used in syslog messages to the supplied tag.
+       --LL _t_a_g Set the identifier used in syslog messages to the supplied _t_a_g.
 
-       -N dsn Set delivery status notification conditions to dsn, which can be
+       --NN _d_s_n Set delivery status notification conditions to _d_s_n, which can be
               `never'  for  no  notifications or a comma separated list of the
               values `failure' to be notified if delivery failed,  `delay'  to
               be notified if delivery is delayed, and `success' to be notified
               when the message is successfully delivered.
 
-       -n     Don't do aliasing.
+       --nn     Don't do aliasing.
 
-       -O option=value
-              Set option option to the specified value.  This form  uses  long
+       --OO _o_p_t_i_o_n=_v_a_l_u_e
+              Set option _o_p_t_i_o_n to the specified _v_a_l_u_e.  This form  uses  long
               names.  See below for more details.
 
-       -ox value
-              Set  option  x  to  the  specified value.  This form uses single
+       --oo_x _v_a_l_u_e
+              Set  option  _x  to  the  specified _v_a_l_u_e.  This form uses single
               character names only.  The short names are not described in this
-              manual  page;  see the Sendmail Installation and Operation Guide
+              manual  page;  see the _S_e_n_d_m_a_i_l _I_n_s_t_a_l_l_a_t_i_o_n _a_n_d _O_p_e_r_a_t_i_o_n _G_u_i_d_e
               for details.
 
-       -pprotocol
+       --pp_p_r_o_t_o_c_o_l
               Set the name of the protocol used to receive the message.   This
               can be a simple protocol name such as ``UUCP'' or a protocol and
               hostname, such as ``UUCP:ucbvax''.
 
-       -q[time]
-              Process saved messages in the queue at given intervals.  If time
-              is  omitted,  process the queue once.  Time is given as a tagged
+       --qq[_t_i_m_e]
+              Process saved messages in the queue at given intervals.  If _t_i_m_e
+              is  omitted,  process the queue once.  _T_i_m_e is given as a tagged
               number, with `s' being seconds, `m' being minutes (default), `h'
               being  hours, `d' being days, and `w' being weeks.  For example,
               `-q1h30m' or `-q90m' would both set  the  timeout  to  one  hour
-              thirty  minutes.   By  default,  sendmail  will run in the back-
-              ground.  This option can be used safely with -bd.
+              thirty  minutes.   By  default,  sseennddmmaaiill  will run in the back-
+              ground.  This option can be used safely with --bbdd.
 
-       -qp[time]
-              Similar to -qtime, except that instead of periodically forking a
+       --qqpp[_t_i_m_e]
+              Similar to --qq_t_i_m_e, except that instead of periodically forking a
               child  to  process the queue, sendmail forks a single persistent
               child for each queue  that  alternates  between  processing  the
               queue and sleeping.  The sleep time is given as the argument; it
               defaults to 1 second.  The process will always sleep at least  5
               seconds if the queue was empty in the previous queue run.
 
-       -qf    Process  saved messages in the queue once and do not fork(), but
+       --qqf    Process  saved messages in the queue once and do not fork(), but
               run in the foreground.
 
-       -qGname
-              Process jobs in queue group called name only.
+       --qqG_n_a_m_e
+              Process jobs in queue group called _n_a_m_e only.
 
-       -q[!]Isubstr
-              Limit processed jobs to those containing substr as  a  substring
-              of the queue id or not when !  is specified.
+       --qq[_!]I_s_u_b_s_t_r
+              Limit processed jobs to those containing _s_u_b_s_t_r as  a  substring
+              of the queue id or not when _!  is specified.
 
-       -q[!]Qsubstr
-              Limit  processed jobs to quarantined jobs containing substr as a
-              substring of the quarantine reason or not when !  is  specified.
+       --qq[_!]Q_s_u_b_s_t_r
+              Limit  processed jobs to quarantined jobs containing _s_u_b_s_t_r as a
+              substring of the quarantine reason or not when _!  is specified.
 
-       -q[!]Rsubstr
-              Limit  processed  jobs to those containing substr as a substring
-              of one of the recipients or not when !  is specified.
+       --qq[_!]R_s_u_b_s_t_r
+              Limit processed jobs to those containing _s_u_b_s_t_r as  a  substring
+              of one of the recipients or not when _!  is specified.
 
-       -q[!]Ssubstr
-              Limit processed jobs to those containing substr as  a  substring
-              of the sender or not when !  is specified.
+       --qq[_!]S_s_u_b_s_t_r
+              Limit  processed  jobs to those containing _s_u_b_s_t_r as a substring
+              of the sender or not when _!  is specified.
 
-       -Q[reason]
+       --QQ[reason]
               Quarantine a normal queue items with the given reason or unquar-
-              antine quarantined queue items if  no  reason  is  given.   This
-              should  only  be  used  with some sort of item matching using as
-              described above.
+              antine  quarantined  queue  items  if  no reason is given.  This
+              should only be used with some sort of item matching using as de-
+              scribed above.
 
-       -R return
-              Set the amount of the message to  be  returned  if  the  message
-              bounces.   The  return  parameter  can  be  `full' to return the
-              entire message or `hdrs' to return only  the  headers.   In  the
-              latter case also local bounces return only the headers.
+       --RR _r_e_t_u_r_n
+              Set  the  amount  of  the  message to be returned if the message
+              bounces.  The _r_e_t_u_r_n parameter can be `full' to return  the  en-
+              tire  message or `hdrs' to return only the headers.  In the lat-
+              ter case also local bounces return only the headers.
 
-       -rname An alternate and obsolete form of the -f flag.
+       --rr_n_a_m_e An alternate and obsolete form of the --ff flag.
 
-       -t     Read  message  for recipients.  To:, Cc:, and Bcc: lines will be
-              scanned for recipient addresses.  The Bcc: line will be  deleted
+       --tt     Read message for recipients.  To:, Cc:, and Bcc: lines  will  be
+              scanned  for recipient addresses.  The Bcc: line will be deleted
               before transmission.
 
-       -V envid
+       --UU     If a mail submission via the command line requires  the  use  of
+              the  SSMMTTPPUUTTFF88  argument  for  the  MMAAIILL command, e.g., because a
+              header uses UTF-8 encoding, but the  addresses  on  the  command
+              line  are all ASCII, then this option must be used.  Only avail-
+              able if EEAAII support is enabled, and the SSMMTTPPUUTTFF88 option is set.
+
+       --VV _e_n_v_i_d
               Set the original envelope id.  This is propagated across SMTP to
               servers that support DSNs and is returned in DSN-compliant error
               messages.
 
-       -v     Go  into verbose mode.  Alias expansions will be announced, etc.
+       --vv     Go into verbose mode.  Alias expansions will be announced, etc.
 
-       -X logfile
+       --XX _l_o_g_f_i_l_e
               Log all traffic in and out of mailers in the indicated log file.
               This  should  only be used as a last resort for debugging mailer
               bugs.  It will log a lot of data very quickly.
 
-       --     Stop processing command flags and use the rest of the  arguments
+       ----     Stop processing command flags and use the rest of the  arguments
               as addresses.
 
-   Options
+   OOppttiioonnss
        There  are  also  a number of processing options that may be set.  Nor-
        mally these will only be used by a system administrator.   Options  may
-       be  set either on the command line using the -o flag (for short names),
-       the -O flag (for long names), or in the configuration file.  This is  a
+       be  set either on the command line using the --oo flag (for short names),
+       the --OO flag (for long names), or in the configuration file.  This is  a
        partial  list  limited to those options that are likely to be useful on
        the command line and only shows the long names;  for  a  complete  list
-       (and  details),  consult the Sendmail Installation and Operation Guide.
+       (and  details),  consult the _S_e_n_d_m_a_i_l _I_n_s_t_a_l_l_a_t_i_o_n _a_n_d _O_p_e_r_a_t_i_o_n _G_u_i_d_e.
        The options are:
 
-       AliasFile=file
+       AliasFile=_f_i_l_e
               Use alternate alias file.
 
        HoldExpensive
               On mailers that are  considered  ``expensive''  to  connect  to,
               don't initiate immediate connection.  This requires queueing.
 
-       CheckpointInterval=N
-              Checkpoint  the  queue  file after every N successful deliveries
+       CheckpointInterval=_N
+              Checkpoint  the  queue  file after every _N successful deliveries
               (default 10).  This avoids excessive duplicate  deliveries  when
               sending to long mailing lists interrupted by system crashes.
 
-       DeliveryMode=x
-              Set the delivery mode to x.  Delivery modes are `i' for interac-
+       DeliveryMode=_x
+              Set the delivery mode to _x.  Delivery modes are `i' for interac-
               tive (synchronous) delivery, `b' for  background  (asynchronous)
               delivery, `q' for queue only - i.e., actual delivery is done the
               next time the queue is run, and `d' for deferred - the  same  as
               `q'  except that database lookups for maps which have set the -D
               option (default for the host map) are avoided.
 
-       ErrorMode=x
-              Set error processing to mode x.  Valid modes  are  `m'  to  mail
+       ErrorMode=_x
+              Set error processing to mode _x.  Valid modes  are  `m'  to  mail
               back  the error message, `w' to ``write'' back the error message
               (or mail it back if the sender is not logged in), `p'  to  print
               the  errors  on  the terminal (default), `q' to throw away error
@@ -265,14 +271,14 @@ SENDMAIL(8)                                                        SENDMAIL(8)
               processing  for  the BerkNet.  If the text of the message is not
               mailed back by modes `m' or `w' and if the sender  is  local  to
               this  machine,  a  copy  of  the message is appended to the file
-              dead.letter in the sender's home directory.
+              _d_e_a_d_._l_e_t_t_e_r in the sender's home directory.
 
        SaveFromLine
               Save UNIX-style From lines at the front of messages.
 
-       MaxHopCount=N
-              The maximum number of times a  message  is  allowed  to  ``hop''
-              before we decide it is in a loop.
+       MaxHopCount=_N
+              The maximum number of times a message is allowed to ``hop''  be-
+              fore we decide it is in a loop.
 
        IgnoreDots
               Do  not  take dots on a line by themselves as a message termina-
@@ -282,110 +288,106 @@ SENDMAIL(8)                                                        SENDMAIL(8)
               Send error messages in MIME format.  If not set, the DSN (Deliv-
               ery Status Notification) SMTP extension is disabled.
 
-       ConnectionCacheTimeout=timeout
+       ConnectionCacheTimeout=_t_i_m_e_o_u_t
               Set connection cache timeout.
 
-       ConnectionCacheSize=N
+       ConnectionCacheSize=_N
               Set connection cache size.
 
-       LogLevel=n
+       LogLevel=_n
               The log level.
 
-       MeToo=False
+       MeToo=_F_a_l_s_e
               Don't send to ``me'' (the sender) if I am in an alias expansion.
 
        CheckAliases
-              Validate the right hand side of aliases during  a  newaliases(1)
+              Validate  the  right hand side of aliases during a newaliases(1)
               command.
 
        OldStyleHeaders
-              If  set,  this  message may have old style headers.  If not set,
+              If set, this message may have old style headers.   If  not  set,
               this message is guaranteed to have new style headers (i.e., com-
-              mas  instead  of spaces between addresses).  If set, an adaptive
-              algorithm is used that will correctly determine the header  for-
+              mas instead of spaces between addresses).  If set,  an  adaptive
+              algorithm  is used that will correctly determine the header for-
               mat in most cases.
 
-       QueueDirectory=queuedir
+       QueueDirectory=_q_u_e_u_e_d_i_r
               Select the directory in which to queue messages.
 
-       StatusFile=file
+       StatusFile=_f_i_l_e
               Save statistics in the named file.
 
-       Timeout.queuereturn=time
-              Set  the  timeout  on  undelivered  messages in the queue to the
-              specified time.  After delivery has failed (e.g., because  of  a
-              host  being  down) for this amount of time, failed messages will
+       Timeout.queuereturn=_t_i_m_e
+              Set the timeout on undelivered messages  in  the  queue  to  the
+              specified  time.   After delivery has failed (e.g., because of a
+              host being down) for this amount of time, failed  messages  will
               be returned to the sender.  The default is five days.
 
-       UserDatabaseSpec=userdatabase
-              If set, a user database is consulted to get forwarding  informa-
-              tion.   You  can consider this an adjunct to the aliasing mecha-
-              nism, except that the database is intended  to  be  distributed;
-              aliases  are local to a particular host.  This may not be avail-
-              able if your sendmail does not have the USERDB  option  compiled
+       UserDatabaseSpec=_u_s_e_r_d_a_t_a_b_a_s_e
+              If  set, a user database is consulted to get forwarding informa-
+              tion.  You can consider this an adjunct to the  aliasing  mecha-
+              nism,  except  that  the database is intended to be distributed;
+              aliases are local to a particular host.  This may not be  avail-
+              able  if  your sendmail does not have the USERDB option compiled
               in.
 
        ForkEachJob
-              Fork  each  job during queue runs.  May be convenient on memory-
+              Fork each job during queue runs.  May be convenient  on  memory-
               poor machines.
 
        SevenBitInput
               Strip incoming messages to seven bits.
 
-       EightBitMode=mode
+       EightBitMode=_m_o_d_e
               Set the handling of eight bit input to seven bit destinations to
-              mode: m (mimefy) will convert to seven-bit MIME format, p (pass)
-              will pass it as eight  bits  (but  violates  protocols),  and  s
+              _m_o_d_e: m (mimefy) will convert to seven-bit MIME format, p (pass)
+              will  pass  it  as  eight  bits  (but violates protocols), and s
               (strict) will bounce the message.
 
-       MinQueueAge=timeout
-              Sets  how  long a job must ferment in the queue between attempts
+       MinQueueAge=_t_i_m_e_o_u_t
+              Sets how long a job must ferment in the queue  between  attempts
               to send it.
 
-       DefaultCharSet=charset
-              Sets the default character set used to label 8-bit data that  is
+       DefaultCharSet=_c_h_a_r_s_e_t
+              Sets  the default character set used to label 8-bit data that is
               not otherwise labelled.
 
-       DialDelay=sleeptime
-              If  opening  a connection fails, sleep for sleeptime seconds and
-              try again.  Useful on dial-on-demand sites.
-
-       NoRecipientAction=action
+       NoRecipientAction=_a_c_t_i_o_n
               Set the behaviour when there are no recipient headers (To:,  Cc:
-              or  Bcc:)  in  the  message  to  action: none leaves the message
-              unchanged, add-to adds a To: header with  the  envelope  recipi-
-              ents,  add-apparently-to  adds an Apparently-To: header with the
-              envelope recipients, add-bcc adds an empty Bcc: header, and add-
-              to-undisclosed  adds  a  header reading `To: undisclosed-recipi-
+              or  Bcc:)  in the message to _a_c_t_i_o_n: none leaves the message un-
+              changed, add-to adds a To: header with the envelope  recipients,
+              add-apparently-to  adds  an Apparently-To: header with the enve-
+              lope recipients, add-bcc adds an empty Bcc: header, and  add-to-
+              undisclosed  adds  a  header  reading  `To:  undisclosed-recipi-
               ents:;'.
 
-       MaxDaemonChildren=N
+       MaxDaemonChildren=_N
               Sets the maximum number of children that an incoming SMTP daemon
-              will allow to spawn at any time to N.
+              will allow to spawn at any time to _N.
 
-       ConnectionRateThrottle=N
+       ConnectionRateThrottle=_N
               Sets  the  maximum  number of connections per second to the SMTP
-              port to N.
+              port to _N.
 
        In aliases, the first character of a name may  be  a  vertical  bar  to
        cause  interpretation  of the rest of the name as a command to pipe the
-       mail to.  It may be necessary to quote the name to keep  sendmail  from
+       mail to.  It may be necessary to quote the name to keep  sseennddmmaaiill  from
        suppressing  the  blanks from between arguments.  For example, a common
        alias is:
 
               msgs: "|/usr/bin/msgs -s"
 
-       Aliases may also have the syntax ``:include:filename'' to ask  sendmail
+       Aliases may also have the syntax ``:include:_f_i_l_e_n_a_m_e'' to ask  sseennddmmaaiill
        to read the named file for a list of recipients.  For example, an alias
        such as:
 
               poets: ":include:/usr/local/lib/poets.list"
 
-       would read /usr/local/lib/poets.list for the list of  addresses  making
+       would read _/_u_s_r_/_l_o_c_a_l_/_l_i_b_/_p_o_e_t_s_._l_i_s_t for the list of  addresses  making
        up the group.
 
-       Sendmail  returns an exit status describing what it did.  The codes are
-       defined in <sysexits.h>:
+       SSeennddmmaaiill  returns an exit status describing what it did.  The codes are
+       defined in <_s_y_s_e_x_i_t_s_._h>:
 
        EX_OK  Successful completion on all addresses.
 
@@ -410,30 +412,27 @@ SENDMAIL(8)                                                        SENDMAIL(8)
        EX_TEMPFAIL
               Message could not be sent immediately, but was queued.
 
-       If invoked as newaliases, sendmail will rebuild the alias database.  If
-       invoked  as  mailq, sendmail will print the contents of the mail queue.
-       If invoked as hoststat, sendmail will print the persistent host  status
-       database.  If invoked as purgestat, sendmail will purge expired entries
-       from the persistent host status database.  If invoked as  smtpd,  send-
-       mail will act as a daemon, as if the -bd option were specified.
+       If invoked as nneewwaalliiaasseess, sseennddmmaaiill will rebuild the alias database.  If
+       invoked  as  mmaaiillqq, sseennddmmaaiill will print the contents of the mail queue.
+       If invoked as hhoossttssttaatt, sseennddmmaaiill will print the persistent host  status
+       database.  If invoked as ppuurrggeessttaatt, sseennddmmaaiill will purge expired entries
+       from the persistent host status database.  If invoked as  ssmmttppdd,  sseenndd--
+       mmaaiill will act as a daemon, as if the --bbdd option were specified.
 
-NOTES
-       sendmail  often  gets  blamed  for  many problems that are actually the
-       result of other problems, such as overly permissive modes  on  directo-
-       ries.  For this reason, sendmail checks the modes on system directories
-       and files to determine if they can be trusted.  Although  these  checks
-       can be turned off and your system security reduced by setting the Dont-
-       BlameSendmail option, the permission problems  should  be  fixed.   For
-       more information, see:
+NNOOTTEESS
+       sseennddmmaaiill  often gets blamed for many problems that are actually the re-
+       sult of other problems, such as overly permissive modes on directories.
+       For  this  reason,  sseennddmmaaiill checks the modes on system directories and
+       files to determine if they can be trusted.  Although these  checks  can
+       be  turned  off  and  your system security reduced by setting the DDoonntt--
+       BBllaammeeSSeennddmmaaiill option, the permission problems  should  be  fixed.   For
+       more information, see the _S_e_n_d_m_a_i_l _I_n_s_t_a_l_l_a_t_i_o_n _a_n_d _O_p_e_r_a_t_i_o_n _G_u_i_d_e
 
-       http://www.sendmail.org/tips/DontBlameSendmail.html
-
-FILES
-       Except  for  the  file /etc/mail/sendmail.cf itself the following path-
-       names are all specified in /etc/mail/sendmail.cf.  Thus,  these  values
+FFIILLEESS
+       Except  for  the  file _/_e_t_c_/_m_a_i_l_/_s_e_n_d_m_a_i_l_._c_f itself the following path-
+       names are all specified in _/_e_t_c_/_m_a_i_l_/_s_e_n_d_m_a_i_l_._c_f.  Thus,  these  values
        are only approximations.
 
-
         /etc/mail/aliases
               raw data for alias names
 
@@ -452,19 +451,19 @@ SENDMAIL(8)                                                        SENDMAIL(8)
         /var/spool/mqueue/*
               temp files
 
-SEE ALSO
+SSEEEE AALLSSOO
        binmail(1),  mail(1),  rmail(1),  syslog(3),  aliases(5),  mailaddr(7),
        rc(8)
 
-       DARPA Internet Request For Comments RFC819, RFC821,  RFC822.   Sendmail
-       Installation and Operation Guide, No. 8, SMM.
+       DARPA Internet Request For Comments _R_F_C_8_1_9, _R_F_C_8_2_1,  _R_F_C_8_2_2.   _S_e_n_d_m_a_i_l
+       _I_n_s_t_a_l_l_a_t_i_o_n _a_n_d _O_p_e_r_a_t_i_o_n _G_u_i_d_e, No. 8, SMM.
 
        http://www.sendmail.org/
 
        US Patent Numbers 6865671, 6986037.
 
-HISTORY
-       The sendmail command appeared in 4.2BSD.
+HHIISSTTOORRYY
+       The sseennddmmaaiill command appeared in 4.2BSD.
 
 
 
diff --git a/src/sendmail.8 b/src/sendmail.8
index 9e0b9affb7b9..6b10fac4ebc5 100644
--- a/src/sendmail.8
+++ b/src/sendmail.8
@@ -33,37 +33,37 @@ sendmail
 .B Sendmail
 sends a message to one or more
 .I recipients,
-routing the message over whatever networks 
+routing the message over whatever networks
 are necessary.
 .B Sendmail
-does internetwork forwarding as necessary 
+does internetwork forwarding as necessary
 to deliver the message to the correct place.
 .PP
 .B Sendmail
-is not intended as a user interface routine; 
-other programs provide user-friendly 
+is not intended as a user interface routine;
+other programs provide user-friendly
 front ends;
 .B sendmail
 is used only to deliver pre-formatted messages.
 .PP
 With no flags,
 .B sendmail
-reads its standard input 
-up to an end-of-file 
-or a line consisting only of a single dot 
+reads its standard input
+up to an end-of-file
+or a line consisting only of a single dot
 and sends a copy of the message found there
-to all of the addresses listed.  
-It determines the network(s) to use 
+to all of the addresses listed.
+It determines the network(s) to use
 based on the syntax and contents of the addresses.
 .PP
-Local addresses are looked up in a file 
+Local addresses are looked up in a file
 and aliased appropriately.
-Aliasing can be prevented by preceding the address 
+Aliasing can be prevented by preceding the address
 with a backslash.
-Beginning with 8.10, the sender is included in any alias 
-expansions, e.g., 
-if `john' sends to `group', 
-and `group' includes `john' in the expansion, 
+Beginning with 8.10, the sender is included in any alias
+expansions, e.g.,
+if `john' sends to `group',
+and `group' includes `john' in the expansion,
 then the letter will also be delivered to `john'.
 .SS Parameters
 .TP
@@ -78,18 +78,19 @@ an initial mail submission.
 .BI \-B type
 Set the body type to
 .IR type .
-Current legal values are 
-7BIT 
-or  
+Current legal values are
+7BIT
+or
 8BITMIME.
 .TP
 .B \-ba
-Go into 
-ARPANET 
-mode.  All input lines must end with a CR-LF, 
-and all messages will be generated with a CR-LF at the end.  
-Also, 
-the ``From:'' and ``Sender:'' 
+Go into
+ARPANET
+mode.
+All input lines must end with a CR-LF,
+and all messages will be generated with a CR-LF at the end.
+Also,
+the ``From:'' and ``Sender:''
 fields are examined for the name of the sender.
 .TP
 .B \-bC
@@ -98,11 +99,11 @@ Check the configuration file.
 .B \-bd
 Run as a daemon.
 .B Sendmail
-will fork and run in background 
+will fork and run in background
 listening on socket 25 for incoming
-SMTP 
-connections.  
-This is normally run from 
+SMTP
+connections.
+This is normally run from
 /etc/rc.
 .TP
 .B \-bD
@@ -130,24 +131,24 @@ Print number of entries in the queue(s);
 only available with shared memory support.
 .TP
 .B \-bs
-Use the 
-SMTP 
-protocol as described in 
-RFC821 
-on standard input and output.  
+Use the
+SMTP
+protocol as described in
+RFC821
+on standard input and output.
 This flag implies all the operations of the
 .B \-ba
-flag that are compatible with 
+flag that are compatible with
 SMTP.
 .TP
 .B \-bt
-Run in address test mode.  
-This mode reads addresses and shows the steps in parsing; 
+Run in address test mode.
+This mode reads addresses and shows the steps in parsing;
 it is used for debugging configuration tables.
 .TP
 .B \-bv
 Verify names only \- do not try to collect or deliver a message.
-Verify mode is normally used for validating 
+Verify mode is normally used for validating
 users or mailing lists.
 .TP
 .BI \-C file
@@ -188,7 +189,7 @@ source code.
 Set the full name of the sender.
 .TP
 .BI \-f name
-Sets the name of the ``from'' person 
+Sets the name of the ``from'' person
 (i.e., the envelope sender of the mail).
 This address may also be used in the From: header
 if that header is missing during initial submission.
@@ -196,13 +197,13 @@ The envelope sender address is used as the recipient
 for delivery status notifications
 and may also appear in a Return-Path: header.
 .B \-f
-should only be used 
-by ``trusted'' users 
+should only be used
+by ``trusted'' users
 (normally
 .IR root ", " daemon ,
 and
 .IR network )
-or if the person you are trying to become 
+or if the person you are trying to become
 is the same as the person you are.
 Otherwise,
 an X-Authentication-Warning header
@@ -218,12 +219,11 @@ calls
 .BI \-h N
 Set the hop count to
 .IR N .
-The hop count is incremented every time the mail is 
-processed.
-When it reaches a limit, 
+The hop count is incremented every time the mail is processed.
+When it reaches a limit,
 the mail is returned with an error message,
-the victim of an aliasing loop.  
-If not specified, 
+the victim of an aliasing loop.
+If not specified,
 ``Received:'' lines in the message are counted.
 .TP
 .B \-i
@@ -239,21 +239,21 @@ Set the identifier used in syslog messages to the supplied
 .BI "\-N " dsn
 Set delivery status notification conditions to
 .IR dsn ,
-which can be 
-`never' 
-for no notifications 
-or a comma separated list of the values 
-`failure' 
-to be notified if delivery failed, 
+which can be
+`never'
+for no notifications
+or a comma separated list of the values
+`failure'
+to be notified if delivery failed,
 `delay'
-to be notified if delivery is delayed, and 
-`success' 
+to be notified if delivery is delayed, and
+`success'
 to be notified when the message is successfully delivered.
 .TP
 .B \-n
 Don't do aliasing.
 .TP
-\fB\-O\fP \fIoption\fR=\fIvalue\fR 
+\fB\-O\fP \fIoption\fR=\fIvalue\fR
 Set option
 .I option
 to the specified
@@ -265,40 +265,40 @@ Set option
 .I x
 to the specified
 .IR value .
-This form uses single character names only.  
-The short names are not described in this manual page; 
+This form uses single character names only.
+The short names are not described in this manual page;
 see the
 .I "Sendmail Installation and Operation Guide"
 for details.
 .TP
 .BI \-p protocol
-Set the name of the protocol used to receive the message.  
-This can be a simple protocol name such as ``UUCP'' 
+Set the name of the protocol used to receive the message.
+This can be a simple protocol name such as ``UUCP''
 or a protocol and hostname, such as ``UUCP:ucbvax''.
 .TP
-\fB\-q\fR[\fItime\fR] 
-Process saved messages in the queue at given intervals.  
+\fB\-q\fR[\fItime\fR]
+Process saved messages in the queue at given intervals.
 If
 .I time
 is omitted, process the queue once.
 .I Time
-is given as a tagged number, 
-with 
-`s' 
-being seconds, 
-`m' 
-being minutes (default), 
-`h' 
-being hours, 
-`d' 
-being days, 
-and 
-`w' 
+is given as a tagged number,
+with
+`s'
+being seconds,
+`m'
+being minutes (default),
+`h'
+being hours,
+`d'
+being days,
+and
+`w'
 being weeks.
-For example, 
-`\-q1h30m' 
-or 
-`\-q90m' 
+For example,
+`\-q1h30m'
+or
+`\-q90m'
 would both set the timeout to one hour thirty minutes.
 By default,
 .B sendmail
@@ -306,7 +306,7 @@ will run in the background.
 This option can be used safely with
 .BR \-bd .
 .TP
-\fB\-qp\fR[\fItime\fR] 
+\fB\-qp\fR[\fItime\fR]
 Similar to \fB\-q\fItime\fR,
 except that instead of periodically forking a child to process the queue,
 sendmail forks a single persistent child for each queue
@@ -359,15 +359,15 @@ This should only be used with some sort of item matching using
 as described above.
 .TP
 .BI "\-R " return
-Set the amount of the message to be returned 
+Set the amount of the message to be returned
 if the message bounces.
 The
 .I return
-parameter can be 
-`full' 
-to return the entire message or 
-`hdrs' 
-to return only the headers.  
+parameter can be
+`full'
+to return the entire message or
+`hdrs'
+to return only the headers.
 In the latter case also local bounces return only the headers.
 .TP
 .BI \-r name
@@ -376,23 +376,39 @@ An alternate and obsolete form of the
 flag.
 .TP
 .B \-t
-Read message for recipients.  
-To:, Cc:, and Bcc: lines will be scanned for recipient addresses.  
+Read message for recipients.
+To:, Cc:, and Bcc: lines will be scanned for recipient addresses.
 The Bcc: line will be deleted before transmission.
 .TP
+.B \-U
+If a mail submission via the command line requires the use of the
+.B SMTPUTF8
+argument for the
+.B MAIL
+command,
+e.g., because a header uses UTF-8 encoding,
+but the addresses on the command line are all ASCII,
+then this option must be used.
+Only available if
+.B EAI
+support is enabled,
+and the
+.B SMTPUTF8
+option is set.
+.TP
 .BI "\-V " envid
-Set the original envelope id.  
-This is propagated across SMTP to servers that support DSNs 
+Set the original envelope id.
+This is propagated across SMTP to servers that support DSNs
 and is returned in DSN-compliant error messages.
 .TP
 .B \-v
-Go into verbose mode.  
+Go into verbose mode.
 Alias expansions will be announced, etc.
 .TP
 .BI "\-X " logfile
 Log all traffic in and out of mailers in the indicated log file.
-This should only be used as a last resort 
-for debugging mailer bugs.  
+This should only be used as a last resort
+for debugging mailer bugs.
 It will log a lot of data very quickly.
 .TP
 .B \-\-
@@ -400,17 +416,17 @@ Stop processing command flags and use the rest of the arguments as
 addresses.
 .SS Options
 There are also a number of processing options that may be set.
-Normally these will only be used by a system administrator.  
-Options may be set either on the command line 
+Normally these will only be used by a system administrator.
+Options may be set either on the command line
 using the
 .B \-o
 flag (for short names), the
 .B \-O
-flag (for long names), 
-or in the configuration file.  
+flag (for long names),
+or in the configuration file.
 This is a partial list limited to those options that are likely to be useful
-on the command line 
-and only shows the long names; 
+on the command line
+and only shows the long names;
 for a complete list (and details), consult the
 .IR "Sendmail Installation and Operation Guide" .
 The options are:
@@ -418,63 +434,62 @@ The options are:
 .RI AliasFile= file
 Use alternate alias file.
 .TP
-HoldExpensive 
-On mailers that are considered ``expensive'' to connect to, 
-don't initiate immediate connection.  
+HoldExpensive
+On mailers that are considered ``expensive'' to connect to,
+don't initiate immediate connection.
 This requires queueing.
 .TP
 .RI CheckpointInterval= N
 Checkpoint the queue file after every
 .I N
-successful deliveries (default 10).  
-This avoids excessive duplicate deliveries 
-when sending to long mailing lists 
+successful deliveries (default 10).
+This avoids excessive duplicate deliveries
+when sending to long mailing lists
 interrupted by system crashes.
 .ne 1i
 .TP
 .RI DeliveryMode= x
 Set the delivery mode to
 .IR x .
-Delivery modes are 
-`i' 
-for interactive (synchronous) delivery, 
+Delivery modes are
+`i'
+for interactive (synchronous) delivery,
 `b'
-for background (asynchronous) delivery, 
-`q' 
+for background (asynchronous) delivery,
+`q'
 for queue only \- i.e.,
-actual delivery is done the next time the queue is run, and 
+actual delivery is done the next time the queue is run, and
 `d'
-for deferred \- the same as 
-`q' 
+for deferred \- the same as
+`q'
 except that database lookups for maps which have set the \-D option
 (default for the host map) are avoided.
 .TP
 .RI ErrorMode= x
 Set error processing to mode
 .IR x .
-Valid modes are 
-`m' 
-to mail back the error message, 
-`w' 
+Valid modes are
+`m'
+to mail back the error message,
+`w'
 to ``write''
-back the error message 
-(or mail it back if the sender is not logged in), 
-`p' 
-to print the errors on the terminal 
-(default), 
-`q' 
-to throw away error messages 
-(only exit status is returned), 
-and 
+back the error message
+(or mail it back if the sender is not logged in),
+`p'
+to print the errors on the terminal
+(default),
+`q'
+to throw away error messages
+(only exit status is returned),
+and
 `e'
-to do special processing for the BerkNet.  
-If the text of the message is not mailed back 
-by 
-modes
+to do special processing for the BerkNet.
+If the text of the message is not mailed back
+by modes
 `m'
 or
 `w'
-and if the sender is local to this machine, 
+and if the sender is local to this machine,
 a copy of the message is appended to the file
 .I dead.letter
 in the sender's home directory.
@@ -485,16 +500,16 @@ UNIX-style
 From lines at the front of messages.
 .TP
 .RI MaxHopCount= N
-The maximum number of times a message is allowed to ``hop'' 
+The maximum number of times a message is allowed to ``hop''
 before we decide it is in a loop.
 .TP
 IgnoreDots
-Do not take dots on a line by themselves 
+Do not take dots on a line by themselves
 as a message terminator.
 .TP
 SendMimeErrors
-Send error messages in MIME format.  
-If not set, the DSN (Delivery Status Notification) SMTP extension 
+Send error messages in MIME format.
+If not set, the DSN (Delivery Status Notification) SMTP extension
 is disabled.
 .TP
 .RI ConnectionCacheTimeout= timeout
@@ -515,12 +530,12 @@ newaliases(1)
 command.
 .TP
 OldStyleHeaders
-If set, this message may have 
-old style headers.  
-If not set, 
-this message is guaranteed to have new style headers 
-(i.e., commas instead of spaces between addresses).  
-If set, an adaptive algorithm is used that will correctly 
+If set, this message may have
+old style headers.
+If not set,
+this message is guaranteed to have new style headers
+(i.e., commas instead of spaces between addresses).
+If set, an adaptive algorithm is used that will correctly
 determine the header format in most cases.
 .TP
 .RI QueueDirectory= queuedir
@@ -530,24 +545,24 @@ Select the directory in which to queue messages.
 Save statistics in the named file.
 .TP
 .RI Timeout.queuereturn= time
-Set the timeout on undelivered messages in the queue to the specified time.  
-After delivery has failed 
-(e.g., because of a host being down) 
-for this amount of time, 
-failed messages will be returned to the sender.  
+Set the timeout on undelivered messages in the queue to the specified time.
+After delivery has failed
+(e.g., because of a host being down)
+for this amount of time,
+failed messages will be returned to the sender.
 The default is five days.
 .TP
 .RI UserDatabaseSpec= userdatabase
 If set, a user database is consulted to get forwarding information.
-You can consider this an adjunct to the aliasing mechanism, 
-except that the database is intended to be distributed; 
-aliases are local to a particular host.  
+You can consider this an adjunct to the aliasing mechanism,
+except that the database is intended to be distributed;
+aliases are local to a particular host.
 This may not be available if your sendmail does not have the
 USERDB
 option compiled in.
 .TP
 ForkEachJob
-Fork each job during queue runs.  
+Fork each job during queue runs.
 May be convenient on memory-poor machines.
 .TP
 SevenBitInput
@@ -559,7 +574,7 @@ Set the handling of eight bit input to seven bit destinations to
 m
 (mimefy) will convert to seven-bit MIME format,
 p
-(pass) will pass it as eight bits (but violates protocols), 
+(pass) will pass it as eight bits (but violates protocols),
 and
 s
 (strict) will bounce the message.
@@ -568,16 +583,9 @@ s
 Sets how long a job must ferment in the queue between attempts to send it.
 .TP
 .RI DefaultCharSet= charset
-Sets the default character set used to label 8-bit data 
+Sets the default character set used to label 8-bit data
 that is not otherwise labelled.
 .TP
-.RI DialDelay= sleeptime
-If opening a connection fails, 
-sleep for
-.I sleeptime
-seconds and try again.  
-Useful on dial-on-demand sites.
-.TP
 .RI NoRecipientAction= action
 Set the behaviour when there are no recipient headers (To:, Cc: or
 Bcc:) in the message to
@@ -603,15 +611,14 @@ will allow to spawn at any time to
 Sets the maximum number of connections per second to the SMTP port to
 .IR N .
 .PP
-In aliases, 
-the first character of a name may be 
-a vertical bar to cause interpretation of 
-the rest of the name as a command 
-to pipe the mail to.  
-It may be necessary to quote the name 
-to keep
+In aliases,
+the first character of a name may be
+a vertical bar to cause interpretation of
+the rest of the name as a command
+to pipe the mail to.
+It may be necessary to quote the name to keep
 .B sendmail
-from suppressing the blanks from between arguments. 
+from suppressing the blanks from between arguments.
 For example, a common alias is:
 .IP
 msgs: "|/usr/bin/msgs -s"
@@ -620,7 +627,7 @@ Aliases may also have the syntax
 .RI ``:include: filename ''
 to ask
 .B sendmail
-to read the named file for a list of recipients.  
+to read the named file for a list of recipients.
 For example, an alias such as:
 .IP
 poets: ":include:/usr/local/lib/poets.list"
@@ -630,8 +637,7 @@ would read
 for the list of addresses making up the group.
 .PP
 .B Sendmail
-returns an exit status 
-describing what it did.  
+returns an exit status describing what it did.
 The codes are defined in
 .RI < sysexits.h >:
 .TP
@@ -642,18 +648,18 @@ EX_NOUSER
 User name not recognized.
 .TP
 EX_UNAVAILABLE
-Catchall meaning necessary resources 
+Catchall meaning necessary resources
 were not available.
 .TP
 EX_SYNTAX
 Syntax error in address.
 .TP
 EX_SOFTWARE
-Internal software error, 
+Internal software error,
 including bad arguments.
 .TP
 EX_OSERR
-Temporary operating system error, 
+Temporary operating system error,
 such as
 ``cannot fork''.
 .TP
@@ -661,7 +667,7 @@ EX_NOHOST
 Host name not recognized.
 .TP
 EX_TEMPFAIL
-Message could not be sent immediately, 
+Message could not be sent immediately,
 but was queued.
 .PP
 If invoked as
@@ -699,15 +705,14 @@ and your system security reduced by setting the
 .BR DontBlameSendmail
 option,
 the permission problems should be fixed.
-For more information, see:
-
-.I http://www.sendmail.org/tips/DontBlameSendmail.html
+For more information, see the
+.I "Sendmail Installation and Operation Guide"
 .SH FILES
 Except for the file
 .I /etc/mail/sendmail.cf
 itself the following pathnames are all specified in
 .IR /etc/mail/sendmail.cf .
-Thus, 
+Thus,
 these values are only approximations.
 .PP
 .TP
@@ -737,7 +742,7 @@ aliases(5),
 mailaddr(7),
 rc(8)
 .PP
-DARPA 
+DARPA
 Internet Request For Comments
 .IR RFC819 ,
 .IR RFC821 ,
diff --git a/src/sendmail.h b/src/sendmail.h
index e6cf45df0151..ae7ed3a368d0 100644
--- a/src/sendmail.h
+++ b/src/sendmail.h
@@ -36,9 +36,6 @@
 #include 
 #include 
 #include 
-#ifdef EX_OK
-# undef EX_OK			/* for SVr4.2 SMP */
-#endif
 
 #include "sendmail/sendmail.h"
 
@@ -47,7 +44,20 @@
 # if _FFR_TLSA_DANE && !defined(DANE)
 #  define DANE _FFR_TLSA_DANE
 # endif
-#endif
+#else /* STARTTLS */
+# if DANE
+#  ERROR "DANE set but STARTTLS not defined"
+# endif
+# if _FFR_TLS_ALTNAMES
+#  ERROR "_FFR_TLS_ALTNAMES set but STARTTLS not defined"
+# endif
+# if _FFR_TLSFB2CLEAR
+#   ERROR "_FFR_TLSFB2CLEAR set but STARTTLS not defined"
+# endif
+# if _FFR_TLS_USE_CERTIFICATE_CHAIN_FILE
+#  ERROR "_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE set but STARTTLS not defined"
+# endif
+#endif /* STARTTLS */
 
 /* profiling? */
 #if MONCONTROL
@@ -65,6 +75,7 @@ SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.1104 2013-11-22 20:5
 #include "bf.h"
 #include "timers.h"
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -125,9 +136,42 @@ SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.1104 2013-11-22 20:5
 # endif
 #endif /* HESIOD */
 
-#if _FFR_EAI && !defined(ALLOW_255)
+#if USE_EAI && !defined(ALLOW_255)
 # define ALLOW_255 1
 #endif
+#if _FFR_EAI && _FFR_EIGHT_BIT_ADDR_OK
+# ERROR "Cannot enable both of these FFRs: _FFR_EAI _FFR_EIGHT_BIT_ADDR_OK"
+#endif
+
+#if _FFR_OCC && !SM_CONF_SHM
+# ERROR "_FFR_OCC requires SM_CONF_SHM"
+#endif
+
+#if _FFR_SM_LDAP_DBG && !(LDAPMAP && defined(LBER_OPT_LOG_PRINT_FN))
+# ERROR "_FFR_SM_LDAP_DBG requires LDAPMAP and LBER_OPT_LOG_PRINT_FN"
+#endif
+
+#if _FFR_LOG_MORE1 > 1 || _FFR_LOG_MORE2 > 1
+# if _FFR_LOG_MORE1 != _FFR_LOG_MORE2
+#  ERROR "_FFR_LOG_MORE1 != _FFR_LOG_MORE2"
+# endif
+#endif
+
+#if LDAP_NETWORK_TIMEOUT && !(LDAPMAP && defined(LDAP_OPT_NETWORK_TIMEOUT))
+# ERROR "LDAP_NETWORK_TIMEOUT requires LDAPMAP"
+#endif
+
+#if _FFR_VRFY_TRUSTED_FIRST && !defined(X509_V_FLAG_TRUSTED_FIRST)
+# ERROR "_FFR_VRFY_TRUSTED_FIRST set but X509_V_FLAG_TRUSTED_FIRST not defined"
+#endif
+
+#if _FFR_8BITENVADDR
+# define MAXNAME_I ((MAXNAME) * 2)
+#else
+# define MAXNAME_I MAXNAME
+#endif
+
+#define SM_IS_EMPTY(s)	(NULL == (s) || '\0' == *(s))
 
 #if STARTTLS
 # if DANE
@@ -147,7 +191,7 @@ struct dane_vrfy_ctx_S
 
 typedef struct dane_tlsa_S dane_tlsa_T, *dane_tlsa_P;
 typedef struct dane_vrfy_ctx_S dane_vrfy_ctx_T, *dane_vrfy_ctx_P;
-# endif
+# endif /* DANE */
 
 /* TLS information context */
 struct tlsi_ctx_S
@@ -163,8 +207,11 @@ typedef struct tlsi_ctx_S tlsi_ctx_T, *tlsi_ctx_P;
 /* TLS information context flags */
 #define TLSI_FL_CRLREQ	'R'	/* CRL required */
 #define TLSI_FL_FB2CLR	'C'	/* fall back to clear text is ok */
-#define TLSI_FL_NOFB2CLR	'c'	/* do not fall back to clear text */
+#define TLSI_FL_NOFB2CLR 'c'	/* do not fall back to clear text */
 #define TLSI_FL_NODANE	'd'	/* do not use/lookup DANE */
+#define TLSI_FL_NOSTS	'M'	/* do not use/lookup STS */
+/* internal */
+#define TLSI_FL_STS_NOFB2CLR	0x01	/* no clear text: STS is used */
 #define SM_TLSI_IS(tlsi_ctx, flag)	\
 	(((tlsi_ctx) != NULL) && bitnset((flag), (tlsi_ctx)->tlsi_flags))
 
@@ -172,12 +219,12 @@ typedef struct tlsi_ctx_S tlsi_ctx_T, *tlsi_ctx_P;
 # if _FFR_LOG_MORE1 > 1 || _FFR_LOG_MORE2 > 1
 #  define LOG_MORE_2(buf, bp)	\
 	p = macvalue(macid("{tls_version}"), e);	\
-	if (p == NULL || *p == '\0')	\
+	if (SM_IS_EMPTY(p))	\
 		p = "NONE";	\
 	(void) sm_snprintf(bp, SPACELEFT(buf, bp), ", tls_version=%.10s", p); \
 	bp += strlen(bp);	\
 	p = macvalue(macid("{cipher}"), e);	\
-	if (p == NULL || *p == '\0')	\
+	if (SM_IS_EMPTY(p))	\
 		p = "NONE";	\
 	(void) sm_snprintf(bp, SPACELEFT(buf, bp), ", cipher=%.20s", p); \
 	bp += strlen(bp);
@@ -187,7 +234,7 @@ typedef struct tlsi_ctx_S tlsi_ctx_T, *tlsi_ctx_P;
 
 # define LOG_MORE(buf, bp)	\
 	p = macvalue(macid("{verify}"), e);	\
-	if (p == NULL || *p == '\0')	\
+	if (SM_IS_EMPTY(p))	\
 		p = "NONE";	\
 	(void) sm_snprintf(bp, SPACELEFT(buf, bp), ", tls_verify=%.20s", p);	\
 	bp += strlen(bp);	\
@@ -218,14 +265,14 @@ typedef int (*sasl_callback_ft)(void);
 #   define SASL SASL_VERSION
 #  else /* SASL == 1 || SASL == 2 */
 #   if SASL != SASL_VERSION
-  ERROR README: -DSASL (SASL) does not agree with the version of the CYRUS_SASL library (SASL_VERSION)
-  ERROR README: see README!
+#    ERROR "README: -DSASL (SASL) does not agree with the version of the CYRUS_SASL library (SASL_VERSION)"
+#    ERROR "README: see README!"
 #   endif /* SASL != SASL_VERSION */
 #  endif /* SASL == 1 || SASL == 2 */
 # else /* defined(SASL_VERSION_MAJOR) && defined(SASL_VERSION_MINOR) && defined(SASL_VERSION_STEP) */
 #  if SASL == 1
-  ERROR README: please set -DSASL to the version of the CYRUS_SASL library
-  ERROR README: see README!
+#   ERROR "README: please set -DSASL to the version of the CYRUS_SASL library"
+#   ERROR "README: see README!"
 #  endif /* SASL == 1 */
 # endif /* defined(SASL_VERSION_MAJOR) && defined(SASL_VERSION_MINOR) && defined(SASL_VERSION_STEP) */
 #endif /* SASL */
@@ -358,6 +405,7 @@ typedef struct address ADDRESS;
 #define QDYNMAILER	0x00080000	/* "dynamic mailer" */
 #define QSECURE		0x00100000	/* DNSSEC ok */
 #define QQUEUED		0x00200000	/* queued */
+#define QINTREPLY	0x00400000	/* internally rejected (delivery) */
 #define QTHISPASS	0x40000000	/* temp: address set this pass */
 #define QRCPTOK		0x80000000	/* recipient() processed address */
 
@@ -423,6 +471,11 @@ typedef struct address ADDRESS;
 #define QS_IS_DEAD(s)		((s) >= QS_DONTSEND)
 #define QS_IS_TEMPFAIL(s)	((s) == QS_QUEUEUP || (s) == QS_RETRY)
 
+#define QUP_FL_NONE	0x0000
+#define QUP_FL_ANNOUNCE	0x0001
+#define QUP_FL_MSYNC	0x0002
+#define QUP_FL_UNLOCK	0x0004
+
 #define NULLADDR	((ADDRESS *) NULL)
 
 extern ADDRESS	NullAddress;	/* a null (template) address [main.c] */
@@ -509,9 +562,6 @@ struct mailer
 	short	m_qgrp;		/* queue group for this mailer */
 #if DANE
 	unsigned short	m_port;	/* port (if appropriate for mailer) */
-# define M_PORT(m)	((m)->m_port)
-#else
-# define M_PORT(m)	(-1)
 #endif
 };
 
@@ -633,8 +683,8 @@ struct queuegrp
 
 	char	*qg_qdir;	/* common component of queue directory */
 	short	qg_index;	/* queue number internally, index in Queue[] */
-	int	qg_maxqrun;	/* max # of jobs in 1 queuerun */
-	int	qg_numqueues;	/* number of queues in this queue */
+	int	qg_maxqrun;	/* max # of jobs in one queuerun */
+	int	qg_numqueues;	/* number of queues in this queue group */
 
 	/*
 	**  qg_queueintvl == 0 denotes that no individual value is used.
@@ -662,7 +712,7 @@ struct queuegrp
 #endif /* 0 */
 };
 
-/* bits for qg_flags (XXX: unused as of now) */
+/* bits for qg_flags */
 #define QD_DEFINED	((char) 1)	/* queue group has been defined */
 #define QD_FORK		'f'	/* fork queue runs */
 
@@ -717,7 +767,7 @@ extern bool	filesys_free __P((long));
 	(SASL_SEC_FORWARD_SECRECY & SASL_SEC_MASK) == 0 || \
 	(SASL_SEC_NOANONYMOUS & SASL_SEC_MASK) == 0 || \
 	(SASL_SEC_PASS_CREDENTIALS & SASL_SEC_MASK) == 0
-ERROR: change SASL_SEC_MASK_ notify sendmail.org!
+#   ERROR "change SASL_SEC_MASK notify sendmail.org!"
 #  endif /* SASL_SEC_NOPLAINTEXT & SASL_SEC_MASK) == 0 ... */
 # endif /* SASL >= 20101 */
 # define MAXOUTLEN 8192	/* length of output buffer, should be 2^n */
@@ -791,8 +841,8 @@ MCI
 	bool		mci_retryrcpt;	/* tempfail for at least one rcpt */
 	char		*mci_tolist;	/* list of valid recipients */
 	SM_RPOOL_T	*mci_rpool;	/* resource pool */
-#if PIPELINING
 	int		mci_okrcpts;	/* number of valid recipients */
+#if PIPELINING
 	ADDRESS		*mci_nextaddr;	/* next address for pipelined status */
 #endif
 #if SASL
@@ -853,7 +903,7 @@ MCI
 #else
 # define MCIF_NOTSTICKY	0
 #endif
-#if _FFR_EAI
+#if USE_EAI
 # define MCIF_EAI	0x40000000	/* SMTPUTF8 supported */
 #else
 # define MCIF_EAI	0x00000000	/* for MCIF_EXTENS */
@@ -946,6 +996,9 @@ extern struct hdrinfo	HdrInfo[];
 #define H_STRIPCOMM	0x00010000	/* header check: strip comments */
 #define H_BINDLATE	0x00020000	/* only expand macros at deliver */
 #define H_USER		0x00040000	/* header came from the user/SMTP */
+#if _FFR_MTA_MODE
+# define H_ASIS		0x10000000
+#endif
 
 /* bits for chompheader() */
 #define CHHDR_DEF	0x0001	/* default header */
@@ -998,8 +1051,8 @@ struct envelope
 	ADDRESS		e_from;		/* the person it is from */
 	char		*e_sender;	/* e_from.q_paddr w comments stripped */
 	char		**e_fromdomain;	/* the domain part of the sender */
-#if _FFR_EAI
-	bool		e_smtputf8; /* whether the sender demanded SMTPUTF8 */
+#if USE_EAI
+	bool		e_smtputf8;	/* requires SMTPUTF8? */
 #endif
 	ADDRESS		*e_sendqueue;	/* list of message recipients */
 	ADDRESS		*e_errorqueue;	/* the queue for error responses */
@@ -1186,8 +1239,13 @@ struct rewrite
 **		cannot conflict.
 */
 
-/* "out of band" indicator */
-/* sm/sendmail.h #define METAQUOTE ((unsigned char)0377) quotes the next octet */
+/*
+**  "out of band" indicator
+**  sm/sendmail.h #define METAQUOTE ((unsigned char)0377)
+**  quotes the next octet
+**  range: ((ch) & 0340) == 0200
+**  see #define SM_MM_QUOTE(ch) in libsm/util.c
+*/
 
 /* left hand side items */
 #define MATCHZANY	((unsigned char)0220)	/* match zero or more tokens */
@@ -1429,6 +1487,7 @@ MAP
 #define MF_OPENBOGUS	0x00800000	/* open failed, don't call map_close */
 #define MF_CLOSING	0x01000000	/* map is being closed */
 #define MF_SECURE	0x02000000	/* DNSSEC result is "secure" */
+#define MF_KEEPXFMT	0x04000000	/* keep [x] format */
 
 #define DYNOPENMAP(map) \
 	do		\
@@ -1603,6 +1662,7 @@ extern bool	iptostring __P((SOCKADDR *, SOCKADDR_LEN_T, char *, unsigned));
 #define PROC_QUEUE_CHILD	3
 #define PROC_CONTROL		4
 #define PROC_CONTROL_CHILD	5
+#define PROC_QM			6
 
 /* functions */
 extern void	proc_list_add __P((pid_t, char *, int, int, int, SOCKADDR *));
@@ -1753,6 +1813,7 @@ extern void	stabapply __P((void (*)(STAB *, int), int));
 #define MD_PURGESTAT	'H'		/* purge persistent host stat info */
 #define MD_QUEUERUN	'q'		/* queue run */
 #define MD_CHECKCONFIG	'C'		/* check configuration file */
+#define MD_SHOWCONFIG	'O'		/* show cf options */
 
 #if _FFR_LOCAL_DAEMON
 EXTERN bool	LocalDaemon;
@@ -1776,12 +1837,18 @@ EXTERN bool	V6LoopbackAddrFound;	/* found an IPv6 loopback address */
 /* values for e_sendmode -- send modes */
 #define SM_DELIVER	'i'		/* interactive delivery */
 #if _FFR_PROXY
-#define SM_PROXY_REQ	's'		/* synchronous mode requested */
-#define SM_PROXY	'S'		/* synchronous mode activated */
+# define SM_PROXY_REQ	's'		/* synchronous mode requested */
+# define SM_PROXY	'S'		/* synchronous mode activated */
 #endif
 #define SM_FORK		'b'		/* deliver in background */
 #if _FFR_DM_ONE
-#define SM_DM_ONE	'o' /* deliver first TA in background, then queue */
+# define SM_DM_ONE	'o' /* deliver first TA in background, then queue */
+#endif
+#if _FFR_DMTRIGGER
+# define SM_TRIGGER	't'		/* queue and tell "queue manager" */
+# define IS_SM_TRIGGER(m)	((m) == SM_TRIGGER)
+#else
+# define IS_SM_TRIGGER(m)	false
 #endif
 #define SM_QUEUE	'q'		/* queue, don't deliver */
 #define SM_DEFER	'd'		/* defer map lookups as well as queue */
@@ -1793,7 +1860,7 @@ EXTERN bool	V6LoopbackAddrFound;	/* found an IPv6 loopback address */
 # define SM_IS_INTERACTIVE(m)	((m) == SM_DELIVER)
 #endif
 
-#define WILL_BE_QUEUED(m)	((m) == SM_QUEUE || (m) == SM_DEFER)
+#define WILL_BE_QUEUED(m)	((m) == SM_QUEUE || (m) == SM_DEFER || IS_SM_TRIGGER(m))
 
 /* used only as a parameter to sendall */
 #define SM_DEFAULT	'\0'		/* unspecified, use SendMode */
@@ -1851,9 +1918,10 @@ extern void	set_delivery_mode __P((int, ENVELOPE *));
 #define PRIV_NOBODYRETN		0x00100000	/* do not return bodies on bounces */
 #define PRIV_NORECEIPTS		0x00200000	/* disallow return receipts */
 #define PRIV_NOACTUALRECIPIENT	0x00400000 /* no X-Actual-Recipient in DSNs */
+#define PRIV_NOREFLECTION	0x00800000 /* do not show original command */
 
 /* don't give no info, anyway, anyhow (in the main SMTP transaction) */
-#define PRIV_GOAWAY		0x0000ffff
+#define PRIV_GOAWAY		(0x0000ffff|PRIV_NOREFLECTION)
 
 /* struct defining such things */
 struct prival
@@ -1878,6 +1946,7 @@ EXTERN unsigned long	PrivacyFlags;	/* privacy flags */
 #define RF_COPYALL		(RF_COPYPARSE|RF_COPYPADDR)
 #define RF_COPYNONE		0
 #define RF_RM_ADDR		0x040	/* address to be removed */
+#define RF_IS_EXT		0x100	/* address is in external format */
 
 /*
 **  Flags passed to rscheck
@@ -2035,15 +2104,14 @@ struct termescape
 #define D_CANONREQ	'c'	/* canonification required (cf) */
 #define D_IFNHELO	'h'	/* use if name for HELO */
 #define D_FQMAIL	'f'	/* fq sender address required (cf) */
-#if _FFR_EAI
-#define D_EAI		'I'	/* EAI supported */
-#endif
 #define D_FQRCPT	'r'	/* fq recipient address required (cf) */
 #define D_SMTPS		's'	/* SMTP over SSL (smtps) */
 #define D_UNQUALOK	'u'	/* unqualified address is ok (cf) */
 #define D_NOAUTH	'A'	/* no AUTH */
 #define D_NOCANON	'C'	/* no canonification (cf) */
+#define D_NODANE	'D'	/* no DANE (client) */
 #define D_NOETRN	'E'	/* no ETRN (MSA) */
+#define D_NOSTS		'M'	/* no MTA-STS (client) */
 #define D_NOTLS		'S'	/* don't use STARTTLS */
 #define D_ETRNONLY	((char)0x01)	/* allow only ETRN (disk low) */
 #define D_OPTIONAL	'O'	/* optional socket */
@@ -2157,7 +2225,7 @@ extern char	*qid_printname __P((ENVELOPE *));
 extern char	*qid_printqueue __P((int, int));
 extern void	quarantine_queue __P((char *, int));
 extern char	*queuename __P((ENVELOPE *, int));
-extern void	queueup __P((ENVELOPE *, bool, bool));
+extern void	queueup __P((ENVELOPE *, unsigned int));
 extern bool	runqueue __P((bool, bool, bool, bool));
 extern bool	run_work_group __P((int, int));
 extern void	set_def_queueval __P((QUEUEGRP *, bool));
@@ -2173,6 +2241,9 @@ extern void	sync_dir __P((char *, bool));
 #else
 # define SYNC_DIR(path, panic) ((void) 0)
 #endif
+#if _FFR_DMTRIGGER
+extern bool	qm __P((void));
+#endif
 
 /*
 **  Timeouts
@@ -2462,6 +2533,10 @@ EXTERN char	*MessageAccept; /* "Message accepted for delivery" reply text */
 #endif
 
 EXTERN int	MimeMode;	/* MIME processing mode */
+#if _FFR_MTA_STS
+EXTERN bool	MTASTS;
+EXTERN char	*STS_SNI;
+#endif
 EXTERN int	NoRecipientAction;
 
 #if SM_CONF_SHM
@@ -2481,6 +2556,11 @@ EXTERN long	RefuseLowMem;	/* low memory refusing connections */
 EXTERN char	*MemoryResource;/* memory resource to look up */
 #endif /* _FFR_MEMSTAT */
 EXTERN int	SuperSafe;	/* be extra careful, even if expensive */
+#if USE_EAI
+EXTERN int	SMTPUTF8;	/* enable SMTPUTF8 support */
+#else
+# define SMTPUTF8	false
+#endif
 EXTERN int	VendorCode;	/* vendor-specific operation enhancements */
 EXTERN int	Verbose;	/* set if blow-by-blow desired */
 EXTERN gid_t	DefGid;		/* default gid to run as */
@@ -2604,6 +2684,7 @@ extern void NR_PRINTFLIKE(2, 3)	usrerrenh __P((char *, const char *, ...));
 extern void NR_PRINTFLIKE(1, 2)	usrerr __P((const char *, ...));
 extern int	isenhsc __P((const char *, int));
 extern int	extenhsc __P((const char *, int, char *));
+extern int	skipaddrhost __P((const char *, bool));
 
 /* alias file */
 extern void	alias __P((ADDRESS *, ADDRESS **, int, ENVELOPE *));
@@ -2625,6 +2706,7 @@ extern void	smtp __P((char *volatile, BITMAP256, ENVELOPE *volatile));
 #if SASL
 extern int	smtpauth __P((MAILER *, MCI *, ENVELOPE *));
 #endif
+extern void	smtpclrse __P((ENVELOPE *));
 extern int	smtpdata __P((MAILER *, MCI *, ENVELOPE *, ADDRESS *, time_t));
 extern int	smtpgetstat __P((MAILER *, MCI *, ENVELOPE *));
 extern int	smtpmailfrom __P((MAILER *, MCI *, ENVELOPE *));
@@ -2766,7 +2848,8 @@ extern bool	lockfile __P((int, char *, char *, int));
 extern void	log_sendmail_pid __P((ENVELOPE *));
 extern void	logundelrcpts __P((ENVELOPE *, char *, int, bool));
 extern char	lower __P((int));
-extern void	makelower __P((char *));
+extern char	*makelower_a __P((char **, SM_RPOOL_T *));
+extern void	makelower_buf __P((char *, char *, int));
 extern int	makeconnection_ds __P((char *, MCI *));
 #if DANE
 extern int	makeconnection __P((char *, volatile unsigned int, MCI *, ENVELOPE *, time_t, unsigned long *));
@@ -2779,7 +2862,13 @@ extern void	mark_work_group_restart __P((int, int));
 extern MCI	*mci_new __P((SM_RPOOL_T *));
 extern char	*munchstring __P((char *, char **, int));
 extern struct hostent	*myhostname __P((char *, int));
+#if SM_HEAP_CHECK > 2
+extern char	*newstr_tagged __P((const char *, char *, int, int));
+# define newstr(str) newstr_tagged(str, "newstr:" __FILE__, __LINE__, SmHeapGroup)
+#else
 extern char	*newstr __P((const char *));
+# define newstr_tagged(str, file, line, grp) newstr(str)
+#endif
 #if NISPLUS
 extern char	*nisplus_default_domain __P((void));	/* extern for Sun */
 #endif
@@ -2826,6 +2915,7 @@ extern char	*sfgets __P((char *, int, SM_FILE_T *, time_t, char *));
 extern char	*shortenstring __P((const char *, size_t));
 extern char	*shorten_hostname __P((char []));
 extern bool	shorten_rfc822_string __P((char *, size_t));
+extern void	showcfopts __P((void));
 extern void	shutdown_daemon __P((void));
 extern void	sm_closefrom __P((int lowest, int highest));
 extern void	sm_close_on_exec __P((int lowest, int highest));
@@ -2886,13 +2976,35 @@ extern bool	xtextok __P((char *));
 extern int	xunlink __P((char *));
 extern char	*xuntextify __P((char *));
 
-#if _FFR_EAI
+#define ASSIGN_IFDIFF(old, new)		\
+	do				\
+	{				\
+		if ((new) != (old))	\
+		{			\
+			SM_FREE(old);	\
+			old = new;	\
+			new = NULL;	\
+		}			\
+	} while (0);
+
+#if USE_EAI
 extern bool	addr_is_ascii __P((const char *));
+extern const char	*hn2alabel __P((const char *));
 #endif
 
 #if _FFR_RCPTFLAGS
 extern bool	newmodmailer __P((ADDRESS *, int));
 #endif
 
+#define SM_CLOSE_FP(fp)			\
+	do				\
+	{				\
+		if ((fp) != NULL)	\
+		{			\
+			(void) sm_io_close((fp), SM_TIME_DEFAULT);	\
+			fp = NULL;	\
+		}			\
+	} while (0);
+
 #undef EXTERN
 #endif /* ! _SENDMAIL_H */
diff --git a/src/sfsasl.c b/src/sfsasl.c
index 3335608e450c..7e6b1d141532 100644
--- a/src/sfsasl.c
+++ b/src/sfsasl.c
@@ -154,11 +154,7 @@ sasl_close(fp)
 	so = (struct sasl_obj *) fp->f_cookie;
 	if (so == NULL)
 		return 0;
-	if (so->fp != NULL)
-	{
-		sm_io_close(so->fp, SM_TIME_DEFAULT);
-		so->fp = NULL;
-	}
+	SM_CLOSE_FP(so->fp);
 	sm_free(so);
 	so = NULL;
 	return 0;
@@ -544,11 +540,7 @@ tls_close(fp)
 	so = (struct tls_obj *) fp->f_cookie;
 	if (so == NULL)
 		return 0;
-	if (so->fp != NULL)
-	{
-		sm_io_close(so->fp, SM_TIME_DEFAULT);
-		so->fp = NULL;
-	}
+	SM_CLOSE_FP(so->fp);
 	sm_free(so);
 	so = NULL;
 	return 0;
@@ -672,11 +664,11 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeout, err, where)
 }
 
 /* errno to force refill() etc to stop (see IS_IO_ERROR()) */
-#ifdef ETIMEDOUT
-# define SM_ERR_TIMEOUT	ETIMEDOUT
-#else
-# define SM_ERR_TIMEOUT	EIO
-#endif
+# ifdef ETIMEDOUT
+#  define SM_ERR_TIMEOUT	ETIMEDOUT
+# else
+#  define SM_ERR_TIMEOUT	EIO
+# endif
 
 /*
 **  SET_TLS_RD_TMO -- read secured information for the caller
@@ -770,10 +762,10 @@ tls_read(fp, buf, size)
 		err = "syscall error";
 		break;
 	  case SSL_ERROR_SSL:
-#if DEAL_WITH_ERROR_SSL
+# if DEAL_WITH_ERROR_SSL
 		if (r == 0 && errno == 0) /* out of protocol EOF found */
 			break;
-#endif
+# endif
 		err = "generic SSL error";
 
 		if (LogLevel > 9)
@@ -787,11 +779,11 @@ tls_read(fp, buf, size)
 			tlslogerr(pri, 9, "read");
 		}
 
-#if DEAL_WITH_ERROR_SSL
+# if DEAL_WITH_ERROR_SSL
 		/* avoid repeated calls? */
 		if (r == 0)
 			r = -1;
-#endif
+# endif
 		break;
 	}
 	if (err != NULL)
@@ -898,11 +890,11 @@ tls_write(fp, buf, size)
 */
 		tlslogerr(LOG_WARNING, 9, "write");
 
-#if DEAL_WITH_ERROR_SSL
+# if DEAL_WITH_ERROR_SSL
 		/* avoid repeated calls? */
 		if (r == 0)
 			r = -1;
-#endif
+# endif
 		break;
 	}
 	if (err != NULL)
diff --git a/src/sm_resolve.c b/src/sm_resolve.c
index 79e4168715a3..977b34103550 100644
--- a/src/sm_resolve.c
+++ b/src/sm_resolve.c
@@ -42,6 +42,7 @@
  */
 
 #include 
+#include 
 #if DNSMAP || DANE
 # if NAMED_BIND
 #  if NETINET
@@ -111,7 +112,7 @@ dns_string_to_type(name)
 	struct stot *p = stot;
 
 	for (p = stot; p->st_name != NULL; p++)
-		if (sm_strcasecmp(name, p->st_name) == 0)
+		if (SM_STRCASEEQ(name, p->st_name))
 			return p->st_type;
 	return -1;
 }
@@ -461,13 +462,16 @@ parse_dns_reply(data, len, flags)
 
 #  if DNSSEC_TEST
 
-#include 
+#   include 
+#   if _FFR_8BITENVADDR
+#    include 
+#   endif
 
 static int gen_dns_reply __P((unsigned char *, int, unsigned char *,
 		const char *, int, const char *, int, int, int, int,
 		const char *, int, int, int));
 static int dnscrtrr __P((const char *, const char *, int, char *, int,
-	unsigned int, int *, int *, unsigned char *, int,  unsigned char *));
+	unsigned int, int *, int *, unsigned char *, int, unsigned char *));
 
 /*
 **  HERRNO2TXT -- return error text for h_errno
@@ -548,6 +552,16 @@ gen_dns_reply(buf, buflen, bufpos, query, qtype, domain, class, type, ttl, size,
 	int n;
 	static unsigned char *dnptrs[20], **dpp, **lastdnptr;
 
+#define DN_COMP_CHK	do	\
+	{	\
+		if (n < 0)	\
+		{	\
+			if (tTd(8, 91))	\
+				sm_dprintf("gen_dns_reply: dn_comp=%d\n", n); \
+			return n;	\
+		}	\
+	} while (0)
+
 	SM_REQUIRE(NULL != buf);
 	SM_REQUIRE(buflen >= HFIXEDSZ);
 	SM_REQUIRE(query != NULL);
@@ -579,8 +593,7 @@ gen_dns_reply(buf, buflen, bufpos, query, qtype, domain, class, type, ttl, size,
 		hp->ancount = 0;
 
 		n = dn_comp(query, cp, ep - cp - QFIXEDSZ, dnptrs, lastdnptr);
-		if (n < 0)
-			return n;
+		DN_COMP_CHK;
 		cp += n;
 		PUTSHORT(qtype, cp);
 		PUTSHORT(class, cp);
@@ -588,10 +601,14 @@ gen_dns_reply(buf, buflen, bufpos, query, qtype, domain, class, type, ttl, size,
 	hp->ad = ad;
 
 	if (ep - cp < QFIXEDSZ)
+	{
+		if (tTd(8, 91))
+			sm_dprintf("gen_dns_reply: ep-cp=%ld\n",
+				(long) (ep - cp));
 		return (-1);
+	}
 	n = dn_comp(domain, cp, ep - cp - QFIXEDSZ, dnptrs, lastdnptr);
-	if (n < 0)
-		return n;
+	DN_COMP_CHK;
 	cp += n;
 	PUTSHORT(type, cp);
 	PUTSHORT(class, cp);
@@ -605,8 +622,7 @@ gen_dns_reply(buf, buflen, bufpos, query, qtype, domain, class, type, ttl, size,
 	{
 	  case T_MX:
 		n = dn_comp(data, cp + 4, ep - cp - QFIXEDSZ, dnptrs, lastdnptr);
-		if (n < 0)
-			return n;
+		DN_COMP_CHK;
 		PUTSHORT(n + 2, cp);
 		PUTSHORT(pref, cp);
 		cp += n;
@@ -622,8 +638,7 @@ gen_dns_reply(buf, buflen, bufpos, query, qtype, domain, class, type, ttl, size,
 
 	  case T_CNAME:
 		n = dn_comp(data, cp + 2, ep - cp - QFIXEDSZ, dnptrs, lastdnptr);
-		if (n < 0)
-			return n;
+		DN_COMP_CHK;
 		PUTSHORT(n, cp);
 		cp += n;
 		break;
@@ -672,7 +687,7 @@ setherrnofromstring(str, prc)
 	int *prc;
 {
 	SM_SET_H_ERRNO(0);
-	if (str == NULL || *str == '\0')
+	if (SM_IS_EMPTY(str))
 		return 0;
 	if (strstr(str, "herrno:") == NULL)
 		return 0;
@@ -710,7 +725,7 @@ int
 getttlfromstring(str)
 	const char *str;
 {
-	if (str == NULL || *str == '\0')
+	if (SM_IS_EMPTY(str))
 		return 0;
 #define TTL_PRE "ttl="
 	if (strstr(str, TTL_PRE) == NULL)
@@ -718,6 +733,33 @@ getttlfromstring(str)
 	return strtoul(str + strlen(TTL_PRE), NULL, 10);
 }
 
+/*
+**  DNS_SETNS -- set one NS in resolver context
+**
+**	Parameters:
+**		ns -- (IPv4 address of) nameserver
+**		port -- nameserver port
+**
+**	Returns:
+**		None.
+*/
+
+static void dns_setns __P((struct in_addr *, unsigned int));
+
+static void
+dns_setns(ns, port)
+	struct in_addr *ns;
+	unsigned int port;
+{
+	_res.nsaddr_list[0].sin_family = AF_INET;
+	_res.nsaddr_list[0].sin_addr = *ns;
+	if (port != 0)
+		_res.nsaddr_list[0].sin_port = htons(port);
+	_res.nscount = 1;
+	if (tTd(8, 61))
+		sm_dprintf("dns_setns(%s,%u)\n", inet_ntoa(*ns), port);
+}
+
 /*
 **  NSPORTIP -- parse port@IPv4 and set NS accordingly
 **
@@ -746,7 +788,7 @@ nsportip(p)
 	unsigned short port;
 	struct in_addr nsip;
 
-	if (p == NULL || *p == '\0')
+	if (SM_IS_EMPTY(p))
 		return -1;
 
 	port = 0;
@@ -778,31 +820,6 @@ nsportip(p)
 	return r > 0 ? 0 : -1;
 }
 
-/*
-**  DNS_SETNS -- set one NS in resolver context
-**
-**	Parameters:
-**		ns -- (IPv4 address of) nameserver
-**		port -- nameserver port
-**
-**	Returns:
-**		None.
-*/
-
-void
-dns_setns(ns, port)
-	struct in_addr *ns;
-	unsigned int port;
-{
-	_res.nsaddr_list[0].sin_family = AF_INET;
-	_res.nsaddr_list[0].sin_addr = *ns;
-	if (port != 0)
-		_res.nsaddr_list[0].sin_port = htons(port);
-	_res.nscount = 1;
-	if (tTd(8, 61))
-		sm_dprintf("dns_setns(%s,%u)\n", inet_ntoa(*ns), port);
-}
-
 #   if defined(T_TLSA)
 /*
 **  HEX2BIN -- convert hex string to binary TLSA RR
@@ -914,7 +931,7 @@ dnscrtrr(domain, query, qtype, value, rr_type, flags, herr, adp, answer, anslen,
 	char rhs[MAXLINE];
 
 	rlen = -1;
-	if (NULL == value || '\0' == *value)
+	if (SM_IS_EMPTY(value))
 		return rlen;
 	SM_REQUIRE(adp != NULL);
 	(void) sm_strlcpy(rhs, value, sizeof(rhs));
@@ -997,8 +1014,8 @@ dnscrtrr(domain, query, qtype, value, rr_type, flags, herr, adp, answer, anslen,
 				query, qtype, domain, C_IN, rr_type, ttl,
 				strlen(token) + 1, token, 0, pref, ad);
 			if (tTd(8, 50))
-				sm_dprintf("dnscrtrr: mx=%s, pref=%d\n",
-					token, pref);
+				sm_dprintf("dnscrtrr: mx=%s, pref=%d, rlen=%d\n",
+					token, pref, rlen);
 		}
 
 #   ifdef T_TLSA
@@ -1059,7 +1076,13 @@ tstdns_search(domain, class, type, answer, anslen)
 	const char *tag;
 	char *av[2];
 	STAB *map;
-	char key[MAXNAME + 16];
+#   if _FFR_8BITENVADDR
+	char qbuf[MAXNAME_I];
+	char *qdomain;
+#   else
+#    define qdomain domain
+#   endif
+	char key[MAXNAME_I + 16];
 	char rhs[MAXLINE];
 	unsigned char *anspos;
 
@@ -1067,7 +1090,7 @@ tstdns_search(domain, class, type, answer, anslen)
 	herr = 0;
 	if (class != C_IN)
 		goto error;
-	if (NULL == domain || '\0' == *domain)
+	if (SM_IS_EMPTY(domain))
 		goto error;
 	tag = rr_type2tag(type);
 	if (tag == NULL)
@@ -1075,7 +1098,17 @@ tstdns_search(domain, class, type, answer, anslen)
 	maprcode = EX_OK;
 	ad = -1;
 	flags = 0;
+#   if _FFR_8BITENVADDR
+	if (tTd(8, 62))
+		sm_dprintf("domain=%s\n", domain);
+	(void) dequote_internal_chars((char *)domain, qbuf, sizeof(qbuf));
+	query = qbuf;
+	qdomain = qbuf;
+	if (tTd(8, 63))
+		sm_dprintf("qdomain=%s\n", qdomain);
+#   else
 	query = domain;
+#   endif /* _FFR_8BITENVADDR */
 	anspos = NULL;
 
 	map = stab("access", ST_MAP, ST_FIND);
@@ -1100,17 +1133,17 @@ tstdns_search(domain, class, type, answer, anslen)
 	do {	\
 		int len;	\
 				\
-		len = strlen(domain);	\
+		len = strlen(qdomain);	\
 		av[0] = key;	\
 		av[1] = NULL;	\
-		snprintf(key, sizeof(key), "%s:%s", tag, domain); \
+		snprintf(key, sizeof(key), "%s:%s", tag, qdomain); \
 		p = (*map->s_map.map_class->map_lookup)(&map->s_map, key, av, \
 			&maprcode);	\
 		if (p != NULL)	\
 			break;	\
-		if (!tTd(8, 112) || (len > 0 && '.' == domain[len - 1])) \
+		if (!tTd(8, 112) || (len > 0 && '.' == qdomain[len - 1])) \
 			break;	\
-		snprintf(key, sizeof(key), "%s:%s.", tag, domain); \
+		snprintf(key, sizeof(key), "%s:%s.", tag, qdomain); \
 		p = (*map->s_map.map_class->map_lookup)(&map->s_map, key, av, \
 			&maprcode);	\
 	} while (0)
@@ -1138,7 +1171,7 @@ tstdns_search(domain, class, type, answer, anslen)
 			{
 				sm_dprintf("cname lookup key=%s, value=%s, ad=%d\n",
 					key, p, ad);
-				rlen = dnscrtrr(domain, query, type, p, T_CNAME,
+				rlen = dnscrtrr(qdomain, query, type, p, T_CNAME,
 						flags, &herr, &ad, answer,
 						anslen, anspos);
 				if (rlen < 0)
@@ -1156,9 +1189,9 @@ tstdns_search(domain, class, type, answer, anslen)
 
 		/* skip (leading) ad/ttl: look for last ' ' */
 		if ((last = strrchr(p, ' ')) != NULL && last[1] != '\0')
-			domain = last + 1;
+			qdomain = last + 1;
 		else
-			domain = p;
+			qdomain = p;
 		++cnt;
 	}
 	if (NULL == p)
@@ -1179,7 +1212,7 @@ tstdns_search(domain, class, type, answer, anslen)
 			if (p != NULL)
 			{
 				sm_dprintf("access map lookup failed key=%s:%s, but found key=%s\n",
-					tag, domain, key);
+					tag, qdomain, key);
 				herr = NO_DATA;
 				goto error;
 			}
@@ -1190,7 +1223,7 @@ tstdns_search(domain, class, type, answer, anslen)
 	}
 	if (found_cname && (flags & RR_ONLY_CNAME) != 0)
 		return rlen;
-	rlen = dnscrtrr(domain,  query, type, p, type, flags, &herr, &ad,
+	rlen = dnscrtrr(qdomain, query, type, p, type, flags, &herr, &ad,
 			answer, anslen, anspos);
 	if (rlen < 0)
 		goto error;
@@ -1229,12 +1262,12 @@ tstdns_querydomain(name, domain, class, type, answer, anslen)
 	unsigned char *answer;
 	int anslen;
 {
-	char query[MAXNAME];
+	char query[MAXNAME_I];
 	int len;
 
 	if (NULL == name)
 		goto error;
-	if (NULL == domain || '\0' == *domain)
+	if (SM_IS_EMPTY(domain))
 		return tstdns_search(name, class, type, answer, anslen);
 
 	len = snprintf(query, sizeof(query), "%s.%s", name, domain);
@@ -1458,10 +1491,9 @@ dns2he(dr, family)
 #    define IN_ADDRSZ INADDRSZ
 #   endif
 	static char he_addrs[SM_MAX_ADDRS * IN_ADDRSZ];
-	static char he_name[MAXNAME];
+	static char he_name[MAXNAME_I];
 	static bool he_init = false;
 	struct hostent *h;
-	struct in_addr ia;
 	int i;
 	size_t sz;
 #   if NETINET6 && DNSSEC_TEST
@@ -1573,6 +1605,8 @@ dns2he(dr, family)
 #   if DNSSEC_TEST
 	if (tTd(8, 16))
 	{
+		struct in_addr ia;
+
 		for (i = 0; h->h_addr_list[i] != NULL && i < SM_MAX_ADDRS; i++)
 		{
 			char *addr;
diff --git a/src/sm_resolve.h b/src/sm_resolve.h
index ffff41168944..3e4b90993cef 100644
--- a/src/sm_resolve.h
+++ b/src/sm_resolve.h
@@ -173,7 +173,6 @@ int tstdns_querydomain  __P((const char *, const char *, int, int, unsigned char
 #   endif
 SMR_EXTERN char *NameSearchList;
 #   undef SMR_EXTERN
-extern void	dns_setns __P((struct in_addr *, unsigned int));
 extern int	nsportip __P((char *));
 #  endif /* DNSSEC_TEST*/
 
diff --git a/src/srvrsmtp.c b/src/srvrsmtp.c
index b6263079a90e..bd416c3ebdaa 100644
--- a/src/srvrsmtp.c
+++ b/src/srvrsmtp.c
@@ -19,6 +19,10 @@
 
 SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.1016 2013-11-22 20:51:56 ca Exp $")
 
+#include 
+#if _FFR_8BITENVADDR
+# include 
+#endif
 #include 
 #include 
 
@@ -32,7 +36,6 @@ static int saslmechs __P((sasl_conn_t *, char **));
 #endif
 #if STARTTLS
 # include 
-# include 
 
 static SSL_CTX	*srv_ctx = NULL;	/* TLS server context */
 static SSL	*srv_ssl = NULL;	/* per connection context */
@@ -67,9 +70,10 @@ static bool	NotFirstDelivery = false;
 #define SRV_REQ_AUTH	0x0400	/* require AUTH */
 #define SRV_REQ_SEC	0x0800	/* require security - equiv to AuthOptions=p */
 #define SRV_TMP_FAIL	0x1000	/* ruleset caused a temporary failure */
-#if _FFR_EAI
-# define SRV_OFFER_EAI	0x2000	/* offer SMTPUTF* */
+#if USE_EAI
+# define SRV_OFFER_EAI	0x2000	/* offer SMTPUTF8 */
 #endif
+#define SRV_NO_HTTP_CMD	0x4000	/* always reject HTTP commands */
 
 static unsigned int	srvfeatures __P((ENVELOPE *, char *, unsigned int));
 
@@ -81,32 +85,32 @@ static char	*skipword __P((char *volatile, char *));
 static void	setup_smtpd_io __P((void));
 
 #if SASL
-#  ifndef MAX_AUTH_USER_LEN
-#   define MAX_AUTH_USER_LEN 256
-#  endif
-#  ifndef MAX_AUTH_LOG_LEN
-#   define MAX_AUTH_LOG_LEN 64
-#  endif
+# ifndef MAX_AUTH_USER_LEN
+#  define MAX_AUTH_USER_LEN 256
+# endif
+# ifndef MAX_AUTH_LOG_LEN
+#  define MAX_AUTH_LOG_LEN 64
+# endif
 static void get_sasl_user __P((char *, unsigned int, const char *, char *out, size_t));
-#  define RESET_AUTH_FAIL_LOG_USER	\
+# define RESET_AUTH_FAIL_LOG_USER	\
 	do	\
 	{	\
 		(void) memset(auth_user, 0, sizeof(auth_user));	\
 		(void) memset(auth_user_tmp, 0, sizeof(auth_user_tmp));	\
 		auth_user_len = 0;	\
 	} while (0)
-#  define SET_AUTH_USER_TMP(s, len)	\
+# define SET_AUTH_USER_TMP(s, len)	\
 	do	\
 	{	\
 		auth_user_len = SM_MIN(len, MAX_AUTH_USER_LEN-1);	\
 		(void) memcpy(auth_user_tmp, s, auth_user_len);	\
 	} while (0)
-#  define SET_AUTH_USER	\
+# define SET_AUTH_USER	\
 	get_sasl_user(auth_user_tmp, auth_user_len, auth_type, auth_user, sizeof(auth_user))
-#  define SET_AUTH_USER_CONDITIONALLY	\
+# define SET_AUTH_USER_CONDITIONALLY	\
 		if ('\0' == auth_user[0])	\
 			SET_AUTH_USER;
-#  define LOG_AUTH_FAIL_USER ", user=", (int)MAX_AUTH_LOG_LEN, auth_user
+# define LOG_AUTH_FAIL_USER ", user=", (int)MAX_AUTH_LOG_LEN, auth_user
 # if SASL >= 20000
 static int reset_saslconn __P((sasl_conn_t **_conn, char *_hostname,
 				char *_remoteip, char *_localip,
@@ -159,7 +163,7 @@ extern ENVELOPE	BlankEnvelope;
 #define SKIP_SPACE(s)	while (SM_ISSPACE(*s))	\
 				(s)++
 
-#if _FFR_EAI
+#if USE_EAI
 /*
 **  ADDR_IS_ASCII -- check whether an address is 100% printable ASCII
 **
@@ -174,13 +178,32 @@ extern ENVELOPE	BlankEnvelope;
 
 bool
 addr_is_ascii(a)
-	const char * a;
+	const char *a;
 {
 	while (a != NULL && *a != '\0' && *a >= ' ' && (unsigned char)*a < 127)
 		a++;
 	return (a != NULL && *a == '\0');
 }
-#endif
+
+# define CHECK_UTF8_ADDR(a, q)	\
+	do	\
+	{	\
+		q = NULL;	\
+		if (addr_is_ascii(a))	\
+			break;	\
+		if (!SMTPUTF8)	\
+			break;	\
+		if (!e->e_smtputf8)	\
+			q = "553 5.6.7 Address requires SMTPUTF8";	\
+		else	\
+		{	\
+			char str[MAXNAME];	\
+			dequote_internal_chars(a, str, sizeof(str));	\
+			if (!utf8_valid(str, strlen(str)) && SMTPUTF8 <= 1) \
+				q = "553 5.6.7 Address not valid UTF8";	\
+		}	\
+	} while (0)
+#endif /* USE_EAI */
 
 /*
 **  PARSE_ESMTP_ARGS -- parse ESMTP arguments (for MAIL, RCPT)
@@ -270,7 +293,7 @@ parse_esmtp_args(e, addr_st, p, delimptr, which, args, esmtp_args)
 **  ADDRCPT -- Add a rcpt to sendq list
 **
 **	Parameters:
-**		rcpt -- rcpt
+**		rcpt -- rcpt [i]
 **		sendq -- a pointer to the head of a queue to put
 **			these people into.
 **		e -- the envelope in which to add these recipients.
@@ -300,6 +323,7 @@ addrcpt(rcpt, sendq, e)
 	SM_TRY
 	{
 		macdefine(&e->e_macro, A_PERM, macid("{addr_type}"), "e b");
+/* XXX rcpt must be [i] */
 		a = parseaddr(rcpt, NULLADDR, RF_COPYALL, ' ', NULL, e, true);
 		if (a == NULL)
 			return 0;
@@ -390,7 +414,7 @@ rcptmods(rcpt, e)
 	SM_REQUIRE(e != NULL);
 
 	fl = macvalue(macid("{rcpt_flags}"), e);
-	if (fl == NULL || *fl == '\0')
+	if (SM_IS_EMPTY(fl))
 		return;
 	if (tTd(25, 1))
 		sm_dprintf("rcptmods: rcpt=%s, flags=%s\n", rcpt->q_paddr, fl);
@@ -555,7 +579,7 @@ static char	*CurSmtpClient;		/* who's at the other end of channel */
 # define MAXSHIFT 8
 #endif
 #if MAXSHIFT > 31
- ERROR _MAXSHIFT > 31 is invalid
+# ERROR "MAXSHIFT > 31 is invalid"
 #endif
 
 
@@ -782,7 +806,7 @@ do								\
 #else
 # define auth_active	false
 #endif
-#if _FFR_EAI
+#if USE_EAI
 #define GET_PROTOCOL()					\
 	(e->e_smtputf8					\
 	    ? (auth_active				\
@@ -791,15 +815,25 @@ do								\
 	    : (auth_active				\
 		? (tls_active ? "ESMTPSA" : "ESMTPA")	\
 		: (tls_active ? "ESMTPS"  : "ESMTP")))
-#else /* _FFR_EAI */
+#else /* USE_EAI */
 #define GET_PROTOCOL()					\
 	(auth_active					\
 	    ? (tls_active ? "ESMTPSA" : "ESMTPA")	\
 	    : (tls_active ? "ESMTPS"  : "ESMTP"))
-#endif /* _FFR_EAI */
+#endif /* USE_EAI */
 
 static bool SevenBitInput_Saved;	/* saved version of SevenBitInput */
 
+#if _FFR_NOREFLECT
+# define SHOWCMDINREPLY(inp) (bitset(PRIV_NOREFLECTION, PrivacyFlags) ? \
+		"(suppressed)" : inp)
+# define SHOWSHRTCMDINREPLY(inp) (bitset(PRIV_NOREFLECTION, PrivacyFlags) ? \
+		"(suppressed)" : shortenstring(inp, MAXSHORTSTR))
+#else
+# define SHOWCMDINREPLY(inp) inp
+# define SHOWSHRTCMDINREPLY(inp) shortenstring(inp, MAXSHORTSTR)
+#endif
+
 void
 smtp(nullserver, d_flags, e)
 	char *volatile nullserver;
@@ -840,7 +874,7 @@ smtp(nullserver, d_flags, e)
 	char *args[MAXSMTPARGS];
 	char inp[MAXINPLINE];
 #if MAXINPLINE < MAXLINE
- ERROR _MAXINPLINE must NOT be less than _MAXLINE: MAXINPLINE < MAXLINE
+# ERROR "MAXINPLINE must NOT be less than MAXLINE"
 #endif
 	char cmdbuf[MAXLINE];
 #if SASL
@@ -892,7 +926,7 @@ smtp(nullserver, d_flags, e)
 # if _FFR_NO_PIPE
 	int np_log = 0;
 # endif
-#endif /* PIPELINING */
+#endif
 	volatile time_t log_delay = (time_t) 0;
 #if MILTER
 	volatile bool milter_cmd_done, milter_cmd_safe;
@@ -947,7 +981,7 @@ smtp(nullserver, d_flags, e)
 #if PIPELINING
 	/* auto-flush output when reading input */
 	(void) sm_io_autoflush(InChannel, OutChannel);
-#endif /* PIPELINING */
+#endif
 
 	sm_setproctitle(true, e, "server %s startup", CurSmtpClient);
 
@@ -974,9 +1008,9 @@ smtp(nullserver, d_flags, e)
 		| (bitset(TLS_I_NO_VRFY, TLS_Srv_Opts) ? SRV_NONE
 						       : SRV_VRFY_CLT)
 #endif
-#if _FFR_EAI
-		| SRV_OFFER_EAI
-#endif /* _FFR_EAI */
+#if USE_EAI
+		| (SMTPUTF8 ? SRV_OFFER_EAI : 0)
+#endif
 		;
 	if (nullserver == NULL)
 	{
@@ -1231,7 +1265,7 @@ smtp(nullserver, d_flags, e)
 		response = milter_connect(q, RealHostAddr, e, &state);
 		switch (state)
 		{
-#if _FFR_MILTER_CONNECT_REPLYCODE
+# if _FFR_MILTER_CONNECT_REPLYCODE
 		  case SMFIR_REPLYCODE:
 			if (*response == '5')
 			{
@@ -1295,9 +1329,9 @@ smtp(nullserver, d_flags, e)
 				break;
 			}
 
-#else /* _FFR_MILTER_CONNECT_REPLYCODE */
+# else /* _FFR_MILTER_CONNECT_REPLYCODE */
 		  case SMFIR_REPLYCODE:	/* REPLYCODE shouldn't happen */
-#endif /* _FFR_MILTER_CONNECT_REPLYCODE */
+# endif /* _FFR_MILTER_CONNECT_REPLYCODE */
 		  case SMFIR_REJECT:
 			if (MilterLogLevel > 3)
 				sm_syslog(LOG_INFO, e->e_id,
@@ -1567,7 +1601,7 @@ smtp(nullserver, d_flags, e)
 		}
 #endif /* SASL */
 
-		if (first)
+		if (first || bitset(SRV_NO_HTTP_CMD, features))
 		{
 			size_t cmdlen;
 			int idx;
@@ -1584,8 +1618,11 @@ smtp(nullserver, d_flags, e)
 				    SM_ISSPACE(inp[cmdlen]))
 				{
 					/* Open proxy, drop it */
-					message("421 4.7.0 %s Rejecting open proxy %s",
-						MyHostName, CurSmtpClient);
+					message("421 4.7.0 %s %s %s",
+						MyHostName,
+						first ? "Rejecting open proxy"
+							: "HTTP command",
+						CurSmtpClient);
 					sm_syslog(LOG_INFO, e->e_id,
 						  "%s: probable open proxy: command=%.40s",
 						  CurSmtpClient, inp);
@@ -1710,10 +1747,10 @@ smtp(nullserver, d_flags, e)
 						  xtextify(user, "<>\")"));
 				}
 
-# if 0
+#  if 0
 				/* get realm? */
 				sasl_getprop(conn, SASL_REALM, (void **) &data);
-# endif
+#  endif
 
 				/* get security strength (features) */
 				result = sasl_getprop(conn, SASL_SSF,
@@ -1871,7 +1908,7 @@ smtp(nullserver, d_flags, e)
 		/* decode command */
 		for (c = CmdTab; c->cmd_name != NULL; c++)
 		{
-			if (sm_strcasecmp(c->cmd_name, cmdbuf) == 0)
+			if (SM_STRCASEEQ(c->cmd_name, cmdbuf))
 				break;
 		}
 
@@ -2212,10 +2249,11 @@ smtp(nullserver, d_flags, e)
 				tlslogerr(LOG_WARNING, 8, "server");
 				goto tls_done;
 			}
-			if (get_tls_se_options(e, srv_ssl, &tlsi_ctx, true)
-			    != 0)
+			if (get_tls_se_features(e, srv_ssl, &tlsi_ctx, true)
+			    != EX_OK)
 			{
-				message("454 4.3.3 TLS not available: error setting options");
+				/* do not offer too much info to client */
+				message("454 4.3.3 TLS curently not available");
 				SMTLSFAILED;
 			}
 			r = SSL_set_ex_data(srv_ssl, TLSsslidx, &tlsi_ctx);
@@ -2341,6 +2379,7 @@ smtp(nullserver, d_flags, e)
 			SuprErrs = saveSuprErrs;
 
 			tls_ok_srv = false;	/* don't offer STARTTLS again */
+			first = true;
 			n_helo = 0;
 # if SASL
 			if (sasl_ok)
@@ -2450,7 +2489,7 @@ smtp(nullserver, d_flags, e)
 			}
 
 			/* check for long domain name (hides Received: info) */
-			if (strlen(p) > MAXNAME)
+			if (strlen(p) > MAXNAME) /* EAI:ok:EHLO name must be ASCII */
 			{
 				usrerr("501 Invalid domain name");
 				if (LogLevel > 9)
@@ -2635,10 +2674,10 @@ smtp(nullserver, d_flags, e)
 			if (SendMIMEErrors && bitset(SRV_OFFER_DSN, features))
 				message("250-DSN");
 #endif
-#if _FFR_EAI
+#if USE_EAI
 			if (bitset(SRV_OFFER_EAI, features))
 				message("250-SMTPUTF8");
-#endif /* _FFR_EAI */
+#endif
 			if (bitset(SRV_OFFER_ETRN, features))
 				message("250-ETRN");
 #if SASL
@@ -2751,15 +2790,35 @@ smtp(nullserver, d_flags, e)
 		    SM_TRY
 		    {
 			extern char *FullName;
+#if _FFR_8BITENVADDR
+			char *origp;
+			char iaddr[MAXLINE * 2];
+			int len;
+#else
+# define origp	p
+#endif
 
 			QuickAbort = true;
 			SM_FREE(FullName);
+#if _FFR_8BITENVADDR
+			len = sizeof(iaddr);
+			origp = p;
+
+			/* HACK!!!! p is more than the address! */
+			p = quote_internal_chars(p, iaddr, &len, NULL);
+#endif
 
 			/* must parse sender first */
 			delimptr = NULL;
 			setsender(p, e, &delimptr, ' ', false);
 			if (delimptr != NULL && *delimptr != '\0')
+			{
 				*delimptr++ = '\0';
+#if _FFR_8BITENVADDR
+				len = sizeof(iaddr) - (delimptr - iaddr);
+				(void) dequote_internal_chars(delimptr, delimptr, len);
+#endif
+			}
 			if (Errors > 0)
 				sm_exc_raisenew_x(&EtypeQuickAbort, 1);
 
@@ -2808,12 +2867,12 @@ smtp(nullserver, d_flags, e)
 			/* now parse ESMTP arguments */
 			e->e_msgsize = 0;
 			addr = p;
-			parse_esmtp_args(e, NULL, p, delimptr, "MAIL", args,
+			parse_esmtp_args(e, NULL, origp, delimptr, "MAIL", args,
 					mail_esmtp_args);
 			if (Errors > 0)
 				sm_exc_raisenew_x(&EtypeQuickAbort, 1);
 
-#if _FFR_EAI
+#if USE_EAI
 			if (e->e_smtputf8)
 			{
 				protocol = GET_PROTOCOL();
@@ -2821,9 +2880,11 @@ smtp(nullserver, d_flags, e)
 			}
 
 			/* UTF8 addresses are only legal with SMTPUTF8 */
-			if (!e->e_smtputf8 && !addr_is_ascii(e->e_from.q_paddr))
+/* XXX different error if SMTPUTF8 is not enabled? */
+			CHECK_UTF8_ADDR(e->e_from.q_paddr, q);
+			if (q != NULL)
 			{
-				usrerr("553 5.6.7 That address requires SMTPUTF8");
+				usrerr(q);
 				sm_exc_raisenew_x(&EtypeQuickAbort, 1);
 			}
 #endif
@@ -3011,6 +3072,12 @@ smtp(nullserver, d_flags, e)
 			SmtpPhase = "server RCPT";
 		    SM_TRY
 		    {
+#if _FFR_8BITENVADDR
+			char iaddr[MAXLINE * 2];
+			int len;
+			char *origp;
+#endif
+
 			QuickAbort = true;
 			LogUsrErrs = true;
 
@@ -3054,6 +3121,13 @@ smtp(nullserver, d_flags, e)
 				goto rcpt_done;
 			macdefine(&e->e_macro, A_PERM,
 				macid("{addr_type}"), "e r");
+#if _FFR_8BITENVADDR
+			len = sizeof(iaddr);
+			origp = p;
+
+			/* HACK!!!! p is more than the address! */
+			p = quote_internal_chars(p, iaddr, &len, NULL);
+#endif
 			a = parseaddr(p, NULLADDR, RF_COPYALL, ' ', &delimptr,
 				      e, true);
 			macdefine(&e->e_macro, A_PERM,
@@ -3065,16 +3139,23 @@ smtp(nullserver, d_flags, e)
 				usrerr("501 5.0.0 Missing recipient");
 				goto rcpt_done;
 			}
-#if _FFR_EAI
-			if (!e->e_smtputf8 && !addr_is_ascii(a->q_paddr))
+#if USE_EAI
+			CHECK_UTF8_ADDR(a->q_paddr, q);
+			if (q != NULL)
 			{
-				usrerr("553 5.6.7 Address requires SMTPUTF8");
+				usrerr(q);
 				goto rcpt_done;
 			}
 #endif
 
 			if (delimptr != NULL && *delimptr != '\0')
+			{
 				*delimptr++ = '\0';
+#if _FFR_8BITENVADDR
+				len = sizeof(iaddr) - (delimptr - iaddr);
+				(void) dequote_internal_chars(delimptr, delimptr, len);
+#endif
+			}
 
 			/* put resulting triple from parseaddr() into macros */
 			if (a->q_mailer != NULL)
@@ -3100,8 +3181,8 @@ smtp(nullserver, d_flags, e)
 				goto rcpt_done;
 
 			/* now parse ESMTP arguments */
-			addr = p;
-			parse_esmtp_args(e, a, p, delimptr, "RCPT", args,
+			addr = sm_rpool_strdup_x(e->e_rpool, p);
+			parse_esmtp_args(e, a, origp, delimptr, "RCPT", args,
 					rcpt_esmtp_args);
 			if (Errors > 0)
 				goto rcpt_done;
@@ -3533,10 +3614,31 @@ smtp(nullserver, d_flags, e)
 			help(p, e);
 			break;
 
+#define CHECK_OTHER(type) do	\
+	{							\
+		bool saveQuickAbort = QuickAbort;		\
+		extern char MsgBuf[];				\
+		int rsc;					\
+		QuickAbort = false;				\
+		if ((rsc = rscheck("check_other", inp, type, e,	\
+			    RSF_UNSTRUCTURED, 3, NULL, NOQID, NULL, NULL)) \
+			!= EX_OK ||				\
+		    Errors > 0)					\
+		{						\
+			if (strncmp(MsgBuf, "421 ", 4) == 0)	\
+			{					\
+				e->e_sendqueue = NULL;		\
+				goto doquit;			\
+			}					\
+		}						\
+		QuickAbort = saveQuickAbort;			\
+	} while (0)
+
 		  case CMDNOOP:		/* noop -- do nothing */
 			DELAY_CONN("NOOP");
 			STOP_IF_ATTACK(checksmtpattack(&n_noop, MaxNOOPCommands,
 							true, "NOOP", e));
+			CHECK_OTHER("2");
 			message("250 2.0.0 OK");
 			break;
 
@@ -3609,6 +3711,27 @@ smtp(nullserver, d_flags, e)
 			if (tTd(93, 100))
 			{
 				/* return to handle next connection */
+#if SM_HEAP_CHECK
+# define SM_HC_TRIGGER "heapdump"
+				if (sm_debug_active(&SmHeapCheck, 2)
+				    && access(SM_HC_TRIGGER, F_OK) == 0
+				   )
+				{
+					SM_FILE_T *out;
+
+					remove(SM_HC_TRIGGER);
+					out = sm_io_open(SmFtStdio,
+						SM_TIME_DEFAULT, SM_HC_TRIGGER ".heap",
+						SM_IO_APPEND, NULL);
+					if (out != NULL)
+					{
+						(void) sm_io_fprintf(out, SM_TIME_DEFAULT, "----------------------\n");
+						sm_heap_report(out,
+							sm_debug_level(&SmHeapCheck) - 1);
+						(void) sm_io_close(out, SM_TIME_DEFAULT);
+					}
+				}
+#endif /* SM_HEAP_CHECK */
 				return;
 			}
 			finis(true, true, ExitStat);
@@ -3628,6 +3751,7 @@ smtp(nullserver, d_flags, e)
 			}
 			STOP_IF_ATTACK(checksmtpattack(&n_noop, MaxNOOPCommands,
 							true, "VERB", e));
+			CHECK_OTHER("2");
 			Verbose = 1;
 			set_delivery_mode(SM_DELIVER, e);
 			message("250 2.0.0 Verbose mode");
@@ -3635,12 +3759,14 @@ smtp(nullserver, d_flags, e)
 
 #if SMTPDEBUG
 		  case CMDDBGQSHOW:	/* show queues */
+			CHECK_OTHER("2");
 			(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
 					     "Send Queue=");
 			printaddr(smioout, e->e_sendqueue, true);
 			break;
 
 		  case CMDDBGDEBUG:	/* set debug mode */
+			CHECK_OTHER("2");
 			tTsetup(tTdvect, sizeof(tTdvect), "0-99.1");
 			tTflag(p);
 			message("200 2.0.0 Debug set");
@@ -3696,18 +3822,21 @@ smtp(nullserver, d_flags, e)
 			}
 #endif /* MILTER && SMFI_VERSION > 2 */
 
+			CHECK_OTHER("5");
 			usrerr("500 5.5.1 Command unrecognized: \"%s\"",
-			       shortenstring(inp, MAXSHORTSTR));
+			       SHOWSHRTCMDINREPLY(inp));
 			break;
 
 		  case CMDUNIMPL:
 			DELAY_CONN("Unimpl");
+			CHECK_OTHER("5");
 			usrerr("502 5.5.1 Command not implemented: \"%s\"",
-			       shortenstring(inp, MAXSHORTSTR));
+			       SHOWSHRTCMDINREPLY(inp));
 			break;
 
 		  default:
 			DELAY_CONN("default");
+			CHECK_OTHER("5");
 			errno = 0;
 			syserr("500 5.5.0 smtp: unknown code %d", c->cmd_code);
 			break;
@@ -3794,10 +3923,10 @@ smtp_data(smtp, e)
 					  response);
 				LogUsrErrs = false;
 			}
-#if _FFR_MILTER_ENHSC
+# if _FFR_MILTER_ENHSC
 			if (ISSMTPCODE(response))
 				(void) extenhsc(response + 4, ' ', e->e_enhsc);
-#endif
+# endif
 
 			/* Can't use ("%s", ...) due to usrerr() requirements */
 			usrerr(response);
@@ -3816,10 +3945,10 @@ smtp_data(smtp, e)
 					  "Milter: cmd=data, reject=550 5.7.1 Command rejected");
 				LogUsrErrs = false;
 			}
-#if _FFR_MILTER_ENHSC
+# if _FFR_MILTER_ENHSC
 			(void) sm_strlcpy(e->e_enhsc, "5.7.1",
 					 sizeof(e->e_enhsc));
-#endif
+# endif
 			usrerr("550 5.7.1 Command rejected");
 			return true;
 
@@ -3838,9 +3967,9 @@ smtp_data(smtp, e)
 					  MSG_TEMPFAIL);
 				LogUsrErrs = false;
 			}
-#if _FFR_MILTER_ENHSC
+# if _FFR_MILTER_ENHSC
 			(void) extenhsc(MSG_TEMPFAIL + 4, ' ', e->e_enhsc);
-#endif
+# endif
 			/* Can't use ("%s", ...) due to usrerr() requirements */
 			usrerr(MSG_TEMPFAIL);
 			return true;
@@ -3917,10 +4046,10 @@ smtp_data(smtp, e)
 					  "Milter: data, reject=%s",
 					  response);
 			milteraccept = false;
-#if _FFR_MILTER_ENHSC
+# if _FFR_MILTER_ENHSC
 			if (ISSMTPCODE(response))
 				(void) extenhsc(response + 4, ' ', e->e_enhsc);
-#endif
+# endif
 			/* Can't use ("%s", ...) due to usrerr() requirements */
 			usrerr(response);
 			if (strncmp(response, "421 ", 4) == 0
@@ -3950,9 +4079,9 @@ smtp_data(smtp, e)
 					  "Milter: data, reject=%s",
 					  MSG_TEMPFAIL);
 			milteraccept = false;
-#if _FFR_MILTER_ENHSC
+# if _FFR_MILTER_ENHSC
 			(void) extenhsc(MSG_TEMPFAIL + 4, ' ', e->e_enhsc);
-#endif
+# endif
 			/* Can't use ("%s", ...) due to usrerr() requirements */
 			usrerr(MSG_TEMPFAIL);
 			break;
@@ -4173,6 +4302,10 @@ smtp_data(smtp, e)
 	}
 #endif /* _FFR_PROXY */
 
+#if _FFR_DMTRIGGER
+	if (SM_TRIGGER == e->e_sendmode)
+		doublequeue = true;
+#endif
 	for (ee = e; ee != NULL; ee = ee->e_sibling)
 	{
 		/* make sure we actually do delivery */
@@ -4183,8 +4316,15 @@ smtp_data(smtp, e)
 
 		if (doublequeue)
 		{
+			unsigned int qup_flags;
+
+			qup_flags = QUP_FL_MSYNC;
+#if _FFR_DMTRIGGER
+			if (IS_SM_TRIGGER(ee->e_sendmode))
+				qup_flags |= QUP_FL_UNLOCK;
+#endif
 			/* make sure it is in the queue */
-			queueup(ee, false, true);
+			queueup(ee, qup_flags);
 		}
 		else
 		{
@@ -4305,6 +4445,7 @@ smtp_data(smtp, e)
 		}
 		else
 #endif /* _FFR_MSG_ACCEPT */
+		/* "else" in #if code above */
 		message("250 2.0.0 %s Message accepted for delivery", id);
 #if _FFR_PROXY
 	}
@@ -4319,6 +4460,20 @@ smtp_data(smtp, e)
 		sm_getla();
 		for (ee = e; ee != NULL; ee = ee->e_sibling)
 		{
+#if _FFR_DMTRIGGER
+			if (SM_TRIGGER == ee->e_sendmode)
+			{
+				sm_syslog(LOG_DEBUG, ee->e_id,
+					"smtp: doublequeue, mode=%c", ee->e_sendmode);
+				ee->e_sendmode = SM_DELIVER;
+
+				/* close all the queue files */
+				/* almost the same as below */
+				closexscript(ee);
+				SM_CLOSE_FP(ee->e_dfp);
+				continue;
+			}
+#endif /* _FFR_DMTRIGGER */
 			if (WILL_BE_QUEUED(ee->e_sendmode))
 				continue;
 			if (shouldqueue(ee->e_msgpriority, ee->e_ctime))
@@ -4336,11 +4491,7 @@ smtp_data(smtp, e)
 
 			/* close all the queue files */
 			closexscript(ee);
-			if (ee->e_dfp != NULL)
-			{
-				(void) sm_io_close(ee->e_dfp, SM_TIME_DEFAULT);
-				ee->e_dfp = NULL;
-			}
+			SM_CLOSE_FP(ee->e_dfp);
 			unlockqueue(ee);
 		}
 		if (anything_to_send)
@@ -4353,6 +4504,9 @@ smtp_data(smtp, e)
 
 			(void) sm_io_flush(OutChannel, SM_TIME_DEFAULT);
 #endif /* PIPELINING */
+#if _FFR_DMTRIGGER
+			sm_syslog(LOG_DEBUG, e->e_id, "smtp: doublequeue=send");
+#endif
 			(void) doworklist(e, true, true);
 		}
 	}
@@ -4453,6 +4607,10 @@ logundelrcpts(e, msg, level, all)
 #if _FFR_MILTER_ENHSC
 			    (a->q_status == NULL && e->e_enhsc[0] != '\0')
 			    ? e->e_enhsc :
+#endif
+/* not yet documented or tested */
+#if _FFR_USE_E_STATUS
+			    (NULL == a->q_status) ? e->e_status :
 #endif
 			    a->q_status,
 			    msg, NULL, (time_t) 0, e, a, EX_OK /* ??? */);
@@ -4635,7 +4793,7 @@ skipword(p, w)
 	{
 	  syntax:
 		usrerr("501 5.5.2 Syntax error in parameters scanning \"%s\"",
-			shortenstring(firstp, MAXSHORTSTR));
+			SHOWSHRTCMDINREPLY(firstp));
 		return NULL;
 	}
 	*p++ = '\0';
@@ -4714,7 +4872,7 @@ mail_esmtp_args(a, kp, vp, e)
 	char *vp;
 	ENVELOPE *e;
 {
-	if (sm_strcasecmp(kp, "size") == 0)
+	if (SM_STRCASEEQ(kp, "size"))
 	{
 		if (vp == NULL)
 		{
@@ -4735,29 +4893,30 @@ mail_esmtp_args(a, kp, vp, e)
 			/* NOTREACHED */
 		}
 	}
-	else if (sm_strcasecmp(kp, "body") == 0)
+	else if (SM_STRCASEEQ(kp, "body"))
 	{
 		if (vp == NULL)
 		{
 			usrerr("501 5.5.2 BODY requires a value");
 			/* NOTREACHED */
 		}
-		else if (sm_strcasecmp(vp, "8bitmime") == 0)
+		else if (SM_STRCASEEQ(vp, "8bitmime"))
 		{
 			SevenBitInput = false;
 		}
-		else if (sm_strcasecmp(vp, "7bit") == 0)
+		else if (SM_STRCASEEQ(vp, "7bit"))
 		{
 			SevenBitInput = true;
 		}
 		else
 		{
-			usrerr("501 5.5.4 Unknown BODY type %s", vp);
+			usrerr("501 5.5.4 Unknown BODY type %s",
+				SHOWCMDINREPLY(vp));
 			/* NOTREACHED */
 		}
 		e->e_bodytype = sm_rpool_strdup_x(e->e_rpool, vp);
 	}
-	else if (sm_strcasecmp(kp, "envid") == 0)
+	else if (SM_STRCASEEQ(kp, "envid"))
 	{
 		if (!bitset(SRV_OFFER_DSN, e->e_features))
 		{
@@ -4783,7 +4942,7 @@ mail_esmtp_args(a, kp, vp, e)
 		macdefine(&e->e_macro, A_PERM,
 			macid("{dsn_envid}"), e->e_envid);
 	}
-	else if (sm_strcasecmp(kp, "ret") == 0)
+	else if (SM_STRCASEEQ(kp, "ret"))
 	{
 		if (!bitset(SRV_OFFER_DSN, e->e_features))
 		{
@@ -4801,17 +4960,18 @@ mail_esmtp_args(a, kp, vp, e)
 			/* NOTREACHED */
 		}
 		e->e_flags |= EF_RET_PARAM;
-		if (sm_strcasecmp(vp, "hdrs") == 0)
+		if (SM_STRCASEEQ(vp, "hdrs"))
 			e->e_flags |= EF_NO_BODY_RETN;
 		else if (sm_strcasecmp(vp, "full") != 0)
 		{
-			usrerr("501 5.5.2 Bad argument \"%s\" to RET", vp);
+			usrerr("501 5.5.2 Bad argument \"%s\" to RET",
+				SHOWCMDINREPLY(vp));
 			/* NOTREACHED */
 		}
 		macdefine(&e->e_macro, A_TEMP, macid("{dsn_ret}"), vp);
 	}
 #if SASL
-	else if (sm_strcasecmp(kp, "auth") == 0)
+	else if (SM_STRCASEEQ(kp, "auth"))
 	{
 		int len;
 		char *q;
@@ -4897,7 +5057,7 @@ mail_esmtp_args(a, kp, vp, e)
 	**  We maybe could add this to the list of server_features.
 	*/
 
-	else if (sm_strcasecmp(kp, "by") == 0 && DeliverByMin >= 0)
+	else if (SM_STRCASEEQ(kp, "by") && DeliverByMin >= 0)
 	{
 		char *s;
 
@@ -4913,7 +5073,8 @@ mail_esmtp_args(a, kp, vp, e)
 		    e->e_deliver_by > 999999999l ||
 		    e->e_deliver_by < -999999999l)
 		{
-			usrerr("501 5.5.2 BY=%s out of range", vp);
+			usrerr("501 5.5.2 BY=%s out of range",
+				SHOWCMDINREPLY(vp));
 			/* NOTREACHED */
 		}
 		if (s == NULL || *s != ';')
@@ -4964,12 +5125,12 @@ mail_esmtp_args(a, kp, vp, e)
 
 		/* XXX: check whether more characters follow? */
 	}
-#if _FFR_EAI
-	else if (sm_strcasecmp(kp, "smtputf8") == 0)
+#if USE_EAI
+	else if (SM_STRCASEEQ(kp, "smtputf8"))
 	{
 		if (!bitset(SRV_OFFER_EAI, e->e_features))
 		{
-			usrerr("504 5.7.0 Sorry, SMTPUTF8 not supported/enabled");
+			usrerr("504 5.7.0 Sorry, SMTPUTF8 not supported");
 			/* NOTREACHED */
 		}
 		e->e_smtputf8 = true;
@@ -4977,7 +5138,8 @@ mail_esmtp_args(a, kp, vp, e)
 #endif
 	else
 	{
-		usrerr("555 5.5.4 %s parameter unrecognized", kp);
+		usrerr("555 5.5.4 %s parameter unrecognized",
+			SHOWCMDINREPLY(kp));
 		/* NOTREACHED */
 	}
 }
@@ -5002,7 +5164,7 @@ rcpt_esmtp_args(a, kp, vp, e)
 	char *vp;
 	ENVELOPE *e;
 {
-	if (sm_strcasecmp(kp, "notify") == 0)
+	if (SM_STRCASEEQ(kp, "notify"))
 	{
 		char *p;
 
@@ -5020,7 +5182,7 @@ rcpt_esmtp_args(a, kp, vp, e)
 		a->q_flags |= QHASNOTIFY;
 		macdefine(&e->e_macro, A_TEMP, macid("{dsn_notify}"), vp);
 
-		if (sm_strcasecmp(vp, "never") == 0)
+		if (SM_STRCASEEQ(vp, "never"))
 			return;
 		for (p = vp; p != NULL; vp = p)
 		{
@@ -5029,23 +5191,23 @@ rcpt_esmtp_args(a, kp, vp, e)
 			s = p = strchr(p, ',');
 			if (p != NULL)
 				*p++ = '\0';
-			if (sm_strcasecmp(vp, "success") == 0)
+			if (SM_STRCASEEQ(vp, "success"))
 				a->q_flags |= QPINGONSUCCESS;
-			else if (sm_strcasecmp(vp, "failure") == 0)
+			else if (SM_STRCASEEQ(vp, "failure"))
 				a->q_flags |= QPINGONFAILURE;
-			else if (sm_strcasecmp(vp, "delay") == 0)
+			else if (SM_STRCASEEQ(vp, "delay"))
 				a->q_flags |= QPINGONDELAY;
 			else
 			{
 				usrerr("501 5.5.4 Bad argument \"%s\"  to NOTIFY",
-					vp);
+					SHOWCMDINREPLY(vp));
 				/* NOTREACHED */
 			}
 			if (s != NULL)
 				*s = ',';
 		}
 	}
-	else if (sm_strcasecmp(kp, "orcpt") == 0)
+	else if (SM_STRCASEEQ(kp, "orcpt"))
 	{
 		char *p;
 
@@ -5071,6 +5233,26 @@ rcpt_esmtp_args(a, kp, vp, e)
 			/* NOTREACHED */
 		}
 		*p = '\0';
+#if USE_EAI
+		if (SM_STRCASEEQ(vp, "utf-8"))
+		{
+			/* XXX check syntax of p+1 ! */
+			if (!xtextok(p + 1) &&
+			    uxtext_unquote(p + 1, NULL, MAXNAME_I) <= 0)
+			{
+				*p = ';';
+				usrerr("501 5.5.4 Syntax error in UTF-8 ORCPT parameter value");
+				/* NOTREACHED */
+			}
+# if 0
+complicated... see grammar!
+RFC 6533 Internationalized Delivery Status and Disposition Notifications
+utf-8-enc-addr = utf-8-addr-xtext / utf-8-addr-unitext / utf-8-address
+# endif
+		}
+		else
+#endif /* USE_EAI */
+		/* "else" in #if code above */
 		if (!isatom(vp) || !xtextok(p + 1))
 		{
 			*p = ';';
@@ -5082,7 +5264,8 @@ rcpt_esmtp_args(a, kp, vp, e)
 	}
 	else
 	{
-		usrerr("555 5.5.4 %s parameter unrecognized", kp);
+		usrerr("555 5.5.4 %s parameter unrecognized",
+			SHOWCMDINREPLY(kp));
 		/* NOTREACHED */
 	}
 }
@@ -5121,7 +5304,7 @@ printvrfyaddr(a, last, vrfy)
 	{
 		if ((a->q_mailer == NULL ||
 		     a->q_mailer->m_addrtype == NULL ||
-		     sm_strcasecmp(a->q_mailer->m_addrtype, "rfc822") == 0) &&
+		     SM_STRCASEEQ(a->q_mailer->m_addrtype, "rfc822")) &&
 		    strchr(a->q_user, '@') == NULL)
 			(void) sm_strlcpy(&fmtbuf[OFFF], "<%s@%s>",
 				       sizeof(fmtbuf) - OFFF);
@@ -5134,7 +5317,7 @@ printvrfyaddr(a, last, vrfy)
 	{
 		if ((a->q_mailer == NULL ||
 		     a->q_mailer->m_addrtype == NULL ||
-		     sm_strcasecmp(a->q_mailer->m_addrtype, "rfc822") == 0) &&
+		     SM_STRCASEEQ(a->q_mailer->m_addrtype, "rfc822")) &&
 		    strchr(a->q_user, '@') == NULL)
 			(void) sm_strlcpy(&fmtbuf[OFFF], "%s <%s@%s>",
 				       sizeof(fmtbuf) - OFFF);
@@ -5329,7 +5512,8 @@ static struct
 	{ 'C',	SRV_REQ_SEC	},
 	{ 'D',	SRV_OFFER_DSN	},
 	{ 'E',	SRV_OFFER_ETRN	},
-#if _FFR_EAI
+	{ 'H',	SRV_NO_HTTP_CMD	},
+#if USE_EAI
 	{ 'I',	SRV_OFFER_EAI	},
 #endif
 	{ 'L',	SRV_REQ_AUTH	},
@@ -5429,6 +5613,7 @@ help(topic, e)
 {
 	register SM_FILE_T *hf;
 	register char *p;
+	char *lstr;
 	int len;
 	bool noinfo;
 	bool first = true;
@@ -5453,14 +5638,20 @@ help(topic, e)
 		return;
 	}
 
-	if (topic == NULL || *topic == '\0')
+	lstr = NULL;
+	if (SM_IS_EMPTY(topic))
 	{
 		topic = "smtp";
 		noinfo = false;
 	}
 	else
 	{
-		makelower(topic);
+
+		lstr = makelower_a(&topic, NULL);
+		if (lstr != topic)
+			topic = lstr;
+		else
+			lstr = NULL;
 		noinfo = true;
 	}
 
@@ -5530,6 +5721,7 @@ help(topic, e)
 	}
 
 	(void) sm_io_close(hf, SM_TIME_DEFAULT);
+	SM_FREE(lstr);
 }
 
 #if SASL
@@ -5545,6 +5737,7 @@ help(topic, e)
 **		SASL result
 */
 
+#ifdef __STDC__
 static int
 reset_saslconn(sasl_conn_t **conn, char *hostname,
 # if SASL >= 20000
@@ -5554,6 +5747,9 @@ reset_saslconn(sasl_conn_t **conn, char *hostname,
 	       struct sockaddr_in *saddr_r, struct sockaddr_in *saddr_l,
 	       sasl_external_properties_t * ext_ssf)
 # endif /* SASL >= 20000 */
+#else /* __STDC__ */
+# ERROR "SASL requires __STDC__"
+#endif /* __STDC__ */
 {
 	int result;
 
@@ -5645,14 +5841,14 @@ get_sasl_user(val, len, auth_type, user, user_len)
 	SM_ASSERT(user_len > 0);
 
 	*user = '\0';
-	if (NULL == auth_type || '\0' == *auth_type)
+	if (SM_IS_EMPTY(auth_type))
 		return;
 	if (0 == len)
 		return;
 
 # define DIGMD5U	"username=\""
 # define DIGMD5U_L	(sizeof(DIGMD5U) - 1)
-	if (sm_strcasecmp(auth_type, "digest-md5") == 0 &&
+	if (SM_STRCASEEQ(auth_type, "digest-md5") &&
 	    strncmp(val, DIGMD5U, DIGMD5U_L) == 0)
 	{
 		char *s;
@@ -5678,7 +5874,7 @@ get_sasl_user(val, len, auth_type, user, user_len)
 			}
 		}
 	}
-	else if (sm_strcasecmp(auth_type, "cram-md5") == 0)
+	else if (SM_STRCASEEQ(auth_type, "cram-md5"))
 	{
 		char *s;
 
@@ -5692,8 +5888,8 @@ get_sasl_user(val, len, auth_type, user, user_len)
 		}
 	}
 
-	else if (sm_strcasecmp(auth_type, "plain") == 0 ||
-		 sm_strcasecmp(auth_type, "login") == 0)
+	else if (SM_STRCASEEQ(auth_type, "plain") ||
+		 SM_STRCASEEQ(auth_type, "login"))
 	{
 		/*
 		**  RFC 4616: The PLAIN Simple Authentication and
diff --git a/src/stab.c b/src/stab.c
index 6835662ae855..3fe1c7d60a00 100644
--- a/src/stab.c
+++ b/src/stab.c
@@ -15,6 +15,10 @@
 
 SM_RCSID("@(#)$Id: stab.c,v 8.92 2013-11-22 20:51:56 ca Exp $")
 
+#include 
+#if USE_EAI
+# include 
+#endif
 #if DANE
 # include 
 #endif
@@ -62,8 +66,23 @@ stab(name, type, op)
 	*/
 
 	hfunc = type;
-	for (p = name; *p != '\0'; p++)
-		hfunc = ((hfunc << 1) ^ (SM_LOWER(*p) & 0377)) % STABSIZE;
+#if USE_EAI
+	if (!addr_is_ascii(name))
+	{
+		char *lower, *cstr;
+
+		lower = sm_lowercase(name);
+		for (cstr = lower; *cstr != '\0'; cstr++)
+			hfunc = ((hfunc << 1) ^ ((*cstr) & 0377)) % STABSIZE;
+	}
+	else
+#endif
+	/* "else" in #if code above */
+	{
+		for (p = name; *p != '\0'; p++)
+			hfunc = ((hfunc << 1) ^ (SM_LOWER(*p) & 0377)) %
+				STABSIZE;
+	}
 
 	if (tTd(36, 9))
 		sm_dprintf("(hfunc=%d) ", hfunc);
@@ -78,7 +97,7 @@ stab(name, type, op)
 	else
 	{
 		while ((s = *ps) != NULL &&
-		       (s->s_symtype != type || sm_strcasecmp(name, s->s_name)))
+		       (s->s_symtype != type || !SM_STRCASEEQ(name, s->s_name)))
 			ps = &s->s_next;
 	}
 
diff --git a/src/stats.c b/src/stats.c
index 382382d53de5..7abe49a5b4e2 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -136,7 +136,7 @@ poststats(sfile)
 	static bool entered = false;
 	long sff = SFF_REGONLY|SFF_OPENASROOT;
 	struct statistics stats;
-	extern off_t lseek();
+	extern off_t lseek __P((int, off_t, int));
 
 	if (sfile == NULL || *sfile == '\0' || !GotStats || entered)
 		return;
diff --git a/src/tls.c b/src/tls.c
index 696d32fbb6df..e2cac7632288 100644
--- a/src/tls.c
+++ b/src/tls.c
@@ -13,7 +13,6 @@
 SM_RCSID("@(#)$Id: tls.c,v 8.127 2013-11-27 02:51:11 gshapiro Exp $")
 
 #if STARTTLS
-# include 
 # include 
 # include 
 # include 
@@ -24,12 +23,19 @@ SM_RCSID("@(#)$Id: tls.c,v 8.127 2013-11-27 02:51:11 gshapiro Exp $")
 # if _FFR_TLS_ALTNAMES
 #  include 
 # endif
+# include 
 
 # if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER <= 0x00907000L
-# ERROR: OpenSSL version OPENSSL_VERSION_NUMBER is unsupported.
+#  ERROR "OpenSSL version OPENSSL_VERSION_NUMBER is unsupported."
 # endif
 
-# if OPENSSL_VERSION_NUMBER >= 0x10100000L && OPENSSL_VERSION_NUMBER < 0x20000000L
+/*
+**  *SSL version numbers:
+**  OpenSSL 0.9 - 1.1 (so far), 3.0 (in alpha)
+**  LibreSSL 2.0 (0x20000000L - part of "These will never change")
+*/
+
+# if (OPENSSL_VERSION_NUMBER >= 0x10100000L && OPENSSL_VERSION_NUMBER < 0x20000000L) || OPENSSL_VERSION_NUMBER >= 0x30000000L
 #  define MTA_HAVE_DH_set0_pqg 1
 #  define MTA_HAVE_DSA_GENERATE_EX	1
 
@@ -228,7 +234,7 @@ tls_rand_init(randfile, logl)
 	/* set default values */
 	ok = false;
 	done = RI_FAIL;
-	randdef = (randfile == NULL || *randfile == '\0') ? RF_MISS : RF_OK;
+	randdef = (SM_IS_EMPTY(randfile)) ? RF_MISS : RF_OK;
 #  if EGD
 	if (randdef == RF_OK && sm_strncasecmp(randfile, "egd:", 4) == 0)
 	{
@@ -244,6 +250,7 @@ tls_rand_init(randfile, logl)
 	}
 	else
 #  endif /* EGD */
+	/* "else" in #if code above */
 	if (randdef == RF_OK && sm_strncasecmp(randfile, "file:", 5) == 0)
 	{
 		int fd;
@@ -1160,17 +1167,16 @@ inittls(ctx, req, options, srv, certfile, keyfile, cacertpath, cacertfile, dhpar
 	if (tTd(96, 101) || getenv("SSL_MODE_AUTO_RETRY") != NULL)
 			SSL_CTX_set_mode(*ctx, SSL_MODE_AUTO_RETRY);
 	else
-#  endif
+#  endif /* _FFR_TESTS */
+	/* "else" in #if code above */
 	SSL_CTX_clear_mode(*ctx, SSL_MODE_AUTO_RETRY);
 # endif /* defined(SSL_MODE_AUTO_RETRY) && OPENSSL_VERSION_NUMBER >= 0x10100000L && OPENSSL_VERSION_NUMBER < 0x20000000L */
 
-
 # if TLS_NO_RSA
 	/* turn off backward compatibility, required for no-rsa */
 	SSL_CTX_set_options(*ctx, SSL_OP_NO_SSLv2);
 # endif
 
-
 # if !TLS_NO_RSA && MTA_RSA_TMP_CB
 	/*
 	**  Create a temporary RSA key
@@ -1561,6 +1567,25 @@ inittls(ctx, req, options, srv, certfile, keyfile, cacertpath, cacertfile, dhpar
 		}
 	}
 
+# if MTA_HAVE_TLSv1_3
+	/* install our own cipher suites */
+	if (!SM_IS_EMPTY(CipherSuites))
+	{
+		if (SSL_CTX_set_ciphersuites(*ctx, CipherSuites) <= 0)
+		{
+			if (LogLevel > 7)
+			{
+				sm_syslog(LOG_WARNING, NOQID,
+					  "STARTTLS=%s, error: SSL_CTX_set_ciphersuites(%s) failed, suites ignored",
+					  who, CipherSuites);
+
+				tlslogerr(LOG_WARNING, 9, who);
+			}
+			/* failure if setting to this suites is required? */
+		}
+	}
+# endif /* MTA_HAVE_TLSv1_3 */
+
 	if (LogLevel > 12)
 		sm_syslog(LOG_INFO, NOQID, "STARTTLS=%s, init=%d", who, ok);
 
@@ -1796,7 +1821,7 @@ tls_get_info(ssl, srv, host, mac, certreq)
 	if (cert != NULL)
 	{
 		X509_NAME *subj, *issuer;
-		char buf[MAXNAME];
+		char buf[MAXNAME];	/* EAI: not affected */
 
 		subj = X509_get_subject_name(cert);
 		issuer = X509_get_issuer_name(cert);
@@ -1885,6 +1910,7 @@ tls_get_info(ssl, srv, host, mac, certreq)
 	}
 	else
 # endif /* if DANE */
+	/* "else" in #if code above */
 	switch (verifyok)
 	{
 	  case X509_V_OK:
@@ -2535,7 +2561,7 @@ x509_verify_cb(ok, ctx)
 	return ok;
 }
 
-# if !USE_OPENSSL_ENGINE
+# if !USE_OPENSSL_ENGINE && !defined(OPENSSL_NO_ENGINE)
 /*
 **  TLS_SET_ENGINE -- set up ENGINE if needed
 **
@@ -2568,8 +2594,14 @@ TLS_set_engine(id, isprefork)
 			TLSEngineInitialized);
 	if (TLSEngineInitialized)
 		return 1;
-	if (id == NULL || *id == '\0')
+	if (SM_IS_EMPTY(id))
 		return 1;
+#  if !defined(ENGINE_METHOD_ALL)
+	if (LogLevel > 9)
+		sm_syslog(LOG_NOTICE, NOQID,
+			"engine=%s, status=engines_not_support", id)
+	goto error;
+#  endif
 
 	/* is this the "right time" to initialize the engine? */
 	if (isprefork != SSLEngineprefork)
@@ -2654,5 +2686,5 @@ TLS_set_engine(id, isprefork)
 		ENGINE_free(e);
 	return 0;
 }
-# endif /* !USE_OPENSSL_ENGINE */
+# endif /* !USE_OPENSSL_ENGINE && !defined(OPENSSL_NO_ENGINE) */
 #endif /* STARTTLS */
diff --git a/src/tls.h b/src/tls.h
index 0e03b81933a9..5ca6d7eab734 100644
--- a/src/tls.h
+++ b/src/tls.h
@@ -11,7 +11,6 @@
 #ifndef _TLS_H
 # define _TLS_H 1
 
-
 #if STARTTLS
 # include 
 # if !TLS_NO_RSA
@@ -28,6 +27,16 @@
 #  define TLS_version_num SSLeay
 # endif
 
+#ifndef MTA_HAVE_TLSv1_3
+/*
+**  HACK: if openssl can disable TLSv1_3 then "assume" it supports all
+**   related functions!
+*/
+# ifdef SSL_OP_NO_TLSv1_3
+#  define MTA_HAVE_TLSv1_3 1
+# endif
+#endif
+
 #ifdef _DEFINE
 # define EXTERN
 #else
@@ -67,7 +76,7 @@ struct dane_tlsa_S
 	char		*dane_tlsa_sni;
 };
 
-# define TLSAFLNONE	0x00000000	/* currently unused */
+# define TLSAFLNONE	0x00000000
 /* Dane Mode */
 # define TLSAFLALWAYS	0x00000001
 # define TLSAFLSECURE	0x00000002
@@ -127,7 +136,10 @@ struct dane_tlsa_S
 #define TLS_I_RSA_TMP	0x00000100	/* RSA TMP must be generated */
 #define TLS_I_USE_KEY	0x00000200	/* private key must usable */
 #define TLS_I_USE_CERT	0x00000400	/* certificate must be usable */
-#define TLS_I_VRFY_PATH	0x00000800	/* load verify path must succeed */
+/*
+not "read" anywhere
+#define TLS_I_VRFY_PATH	0x00000800	* load verify path must succeed *
+*/
 #define TLS_I_VRFY_LOC	0x00001000	/* load verify default must succeed */
 #define TLS_I_CACHE	0x00002000	/* require cache */
 #define TLS_I_TRY_DH	0x00004000	/* try DH certificate */
@@ -150,7 +162,7 @@ struct dane_tlsa_S
 			  TLS_I_USE_KEY | TLS_I_USE_CERT | TLS_I_CACHE)
 
 /* server requirements */
-#define TLS_I_SRV	(TLS_I_SRV_CERT | TLS_I_RSA_TMP | TLS_I_VRFY_PATH | \
+#define TLS_I_SRV	(TLS_I_SRV_CERT | TLS_I_RSA_TMP | /*TLS_I_VRFY_PATH|*/ \
 			 TLS_I_VRFY_LOC | TLS_I_TRY_DH | TLS_I_CACHE)
 
 /* client requirements */
@@ -175,7 +187,7 @@ struct dane_tlsa_S
 
 /* functions */
 extern int	endtls __P((SSL **, const char *));
-extern int	get_tls_se_options __P((ENVELOPE *, SSL *, tlsi_ctx_T *, bool));
+extern int	get_tls_se_features __P((ENVELOPE *, SSL *, tlsi_ctx_T *, bool));
 extern int	init_tls_library __P((bool _fipsmode));
 extern bool	inittls __P((SSL_CTX **, unsigned long, unsigned long, bool, char *, char *, char *, char *, char *));
 extern bool	initclttls __P((bool));
@@ -201,6 +213,9 @@ EXTERN char	*CltCACertFile;	/* file with CA certificate */
 EXTERN char	*CltCertFile;	/* file with client certificate */
 EXTERN char	*CltKeyFile;	/* file with client private key */
 EXTERN char	*CipherList;	/* list of ciphers */
+#if MTA_HAVE_TLSv1_3
+EXTERN char	*CipherSuites;	/* cipher suites */
+#endif
 EXTERN char	*CertFingerprintAlgorithm;	/* name of fingerprint alg */
 EXTERN const EVP_MD	*EVP_digest;	/* digest for cert fp */
 EXTERN char	*DHParams;	/* file with DH parameters */
@@ -220,7 +235,11 @@ EXTERN bool	SSLEngineprefork;
 # if USE_OPENSSL_ENGINE
 #define TLS_set_engine(id, prefork) SSL_set_engine(id)
 # else
+#  if !defined(OPENSSL_NO_ENGINE)
 int TLS_set_engine __P((const char *, bool));
+#  else
+#define TLS_set_engine(id, prefork)	1
+#  endif
 # endif
 
 extern int	set_tls_rd_tmo __P((int));
diff --git a/src/tlsh.c b/src/tlsh.c
index 4b968268cca0..56dad3568e4f 100644
--- a/src/tlsh.c
+++ b/src/tlsh.c
@@ -57,6 +57,8 @@ data2hex(buf, blen, hex, hlen)
 	return h;
 }
 
+# if DANE
+
 /*
 **  TLS_DATA_MD -- calculate MD for data
 **
@@ -102,8 +104,6 @@ tls_data_md(buf, len, md)
 	return (int)md_len;
 }
 
-#if DANE
-
 /*
 **  PUBKEY_FP -- get public key fingerprint
 **
@@ -153,7 +153,10 @@ pubkey_fp(cert, mdalg, fp)
 
 	md = EVP_get_digestbyname(mdalg);
 	if (NULL == md)
+	{
+		SM_FREE(buf);
 		return DANE_VRFY_FAIL;
+	}
 	len = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &end);
 	r = tls_data_md(buf, len, md);
 	if (r < 0)
@@ -196,7 +199,7 @@ dane_tlsa_chk(rr, len, host, log)
 	SM_ASSERT(rr != NULL);
 
 	alg = (int)rr[2];
-	if ((int)rr[0] == 3 && (int)rr[1] == 1 && (alg >= 0 || alg <= 2))
+	if ((int)rr[0] == 3 && (int)rr[1] == 1 && (alg >= 0 && alg <= 2))
 		return alg;
 	if (log && LogLevel > 9)
 		sm_syslog(LOG_NOTICE, NOQID,
@@ -258,6 +261,6 @@ dane_tlsa_free(dane_tlsa)
 	return 0;
 
 }
-#endif /* DANE */
+# endif /* DANE */
 
 #endif /* STARTTLS */
diff --git a/src/trace.c b/src/trace.c
index afc43a5cf4bd..7e4d18fb624c 100644
--- a/src/trace.c
+++ b/src/trace.c
@@ -204,7 +204,7 @@ void
 tTflag(s)
 	register char *s;
 {
-	if (s == NULL || *s == '\0')
+	if (SM_IS_EMPTY(s))
 		s = DefFlags;
 
 	for (;;)
diff --git a/src/udb.c b/src/udb.c
index 00ee857ffe40..0542952c7e28 100644
--- a/src/udb.c
+++ b/src/udb.c
@@ -160,7 +160,7 @@ udbexpand(a, sendq, aliaslevel, e)
 	}
 
 	/* short circuit the process if no chance of a match */
-	if (UdbSpec == NULL || UdbSpec[0] == '\0')
+	if (SM_IS_EMPTY(UdbSpec))
 		return EX_OK;
 
 	/* extract user to do userdb matching on */
@@ -192,7 +192,7 @@ udbexpand(a, sendq, aliaslevel, e)
 # endif
 		char userbuf[MEMCHUNKSIZE];
 # if HESIOD && HES_GETMAILHOST
-		char pobuf[MAXNAME];
+		char pobuf[MAXNAME];	/* EAI:should be ok, no UTF8? */
 # endif
 # if defined(NEWDB) && DB_VERSION_MAJOR > 1
 		DBC *dbc = NULL;
@@ -615,7 +615,7 @@ udbmatch(user, field, rpool)
 	}
 
 	/* short circuit if no spec */
-	if (UdbSpec == NULL || UdbSpec[0] == '\0')
+	if (SM_IS_EMPTY(UdbSpec))
 		return NULL;
 
 	/* short circuit name begins with '\\' since it can't possibly match */
@@ -845,15 +845,13 @@ udb_map_lookup(map, name, av, statp)
 	char *val;
 	char *key;
 	char *SM_NONVOLATILE result = NULL;
-	char keybuf[MAXNAME + 1];
+	char keybuf[MAXNAME + 1];	/* EAI:ok */
 
 	if (tTd(28, 20) || tTd(38, 20))
 		sm_dprintf("udb_map_lookup(%s, %s)\n", map->map_mname, name);
 
 	if (bitset(MF_NOFOLDCASE, map->map_mflags))
-	{
 		key = name;
-	}
 	else
 	{
 		int keysize = strlen(name);
@@ -862,7 +860,7 @@ udb_map_lookup(map, name, av, statp)
 			keysize = sizeof(keybuf) - 1;
 		memmove(keybuf, name, keysize);
 		keybuf[keysize] = '\0';
-		makelower(keybuf);
+		makelower_buf(keybuf, keybuf, sizeof(keybuf));
 		key = keybuf;
 	}
 	val = udbmatch(key, map->map_file, NULL);
@@ -876,6 +874,8 @@ udb_map_lookup(map, name, av, statp)
 	SM_FINALLY
 		sm_free(val);
 	SM_END_TRY
+	if (key != name && key != keybuf)
+		SM_FREE(key);
 	return result;
 }
 /*
@@ -968,7 +968,7 @@ _udbx_init(e)
 # if HESIOD
 		  case 'h':	/* use hesiod */
 		  case 'H':
-			if (sm_strcasecmp(spec, "hesiod") != 0)
+			if (!SM_STRCASEEQ(spec, "hesiod"))
 				goto badspec;
 			up->udb_type = UDB_HESIOD;
 			up->udb_pid = CurrentPid;
@@ -997,13 +997,13 @@ _udbx_init(e)
 #  else /* DB_VERSION_MAJOR < 2 */
 			{
 				int flags = DB_RDONLY;
-#  if DB_VERSION_MAJOR > 2
+#   if DB_VERSION_MAJOR > 2
 				int ret;
-#  endif /* DB_VERSION_MAJOR > 2 */
+#   endif /* DB_VERSION_MAJOR > 2 */
 
 				SM_DB_FLAG_ADD(flags);
 				up->udb_dbp = NULL;
-#  if DB_VERSION_MAJOR > 2
+#   if DB_VERSION_MAJOR > 2
 				ret = db_create(&up->udb_dbp, NULL, 0);
 				if (ret != 0)
 				{
@@ -1022,20 +1022,20 @@ _udbx_init(e)
 								0644);
 					if (ret != 0)
 					{
-#ifdef DB_OLD_VERSION
+#    ifdef DB_OLD_VERSION
 						if (ret == DB_OLD_VERSION)
 							ret = EINVAL;
-#endif
+#    endif
 						(void) up->udb_dbp->close(up->udb_dbp, 0);
 						up->udb_dbp = NULL;
 					}
 				}
 				errno = ret;
-#  else /* DB_VERSION_MAJOR > 2 */
+#   else /* DB_VERSION_MAJOR > 2 */
 				errno = db_open(up->udb_dbname, DB_BTREE,
 						flags, 0644, NULL,
 						NULL, &up->udb_dbp);
-#  endif /* DB_VERSION_MAJOR > 2 */
+#   endif /* DB_VERSION_MAJOR > 2 */
 			}
 #  endif /* DB_VERSION_MAJOR < 2 */
 			if (up->udb_dbp == NULL)
@@ -1274,7 +1274,7 @@ hes_udb_get(key, info)
 		return 1;
 	}
 #  else /* HESIOD_INIT */
-	if (hp == NULL || hp[0] == NULL)
+	if (SM_IS_EMPTY(hp))
 	{
 		/* network problem or timeout */
 		if (hes_error() == HES_ER_NET)
diff --git a/src/usersmtp.c b/src/usersmtp.c
index b4ff5ccbc80a..5fe079176eaf 100644
--- a/src/usersmtp.c
+++ b/src/usersmtp.c
@@ -15,8 +15,7 @@
 
 SM_RCSID("@(#)$Id: usersmtp.c,v 8.488 2013-11-22 20:51:57 ca Exp $")
 
-#include 
-
+#include 
 
 static void	esmtp_check __P((char *, bool, MAILER *, MCI *, ENVELOPE *));
 static void	helo_options __P((char *, bool, MAILER *, MCI *, ENVELOPE *));
@@ -43,6 +42,34 @@ extern void	sm_sasl_free __P((void *));
 static char	SmtpMsgBuffer[MAXLINE];		/* buffer for commands */
 static char	SmtpReplyBuffer[MAXLINE];	/* buffer for replies */
 static bool	SmtpNeedIntro;		/* need "while talking" in transcript */
+
+/*
+**  SMTPCCLRSE -- clear session related data in envelope
+**
+**	Parameters:
+**		e -- the envelope.
+**
+**	Returns:
+**		none.
+*/
+
+void
+smtpclrse(e)
+	ENVELOPE *e;
+{
+	SmtpError[0] = '\0';
+	e->e_rcode = 0;
+	e->e_renhsc[0] = '\0';
+	e->e_text = NULL;
+
+	/*
+	**  Reset to avoid access to potentially dangling pointer
+	**  via macvalue().
+	*/
+
+	e->e_mci = NULL;
+}
+
 /*
 **  SMTPINIT -- initialize SMTP.
 **
@@ -73,7 +100,7 @@ smtpinit(m, mci, e, onlyhelo)
 	register char *p;
 	register char *hn;
 #if _FFR_EXPAND_HELONAME
-	char hnbuf[MAXNAME + 1];
+	char hnbuf[MAXNAME + 1];	/* EAI:ok:EHLO name must be ASCII */
 #endif
 	char *enhsc;
 
@@ -225,7 +252,7 @@ smtpinit(m, mci, e, onlyhelo)
 		*p = '\0';
 	if (!bitnset(M_NOLOOPCHECK, m->m_flags) &&
 	    !bitnset(M_LMTP, m->m_flags) &&
-	    sm_strcasecmp(&SmtpReplyBuffer[4], MyHostName) == 0)
+	    SM_STRCASEEQ(&SmtpReplyBuffer[4], MyHostName))
 	{
 		syserr("553 5.3.5 %s config error: mail loops back to me (MX problem?)",
 			CurHostName);
@@ -340,9 +367,9 @@ str_union(s1, s2, rpool)
 	char *hr, *h1, *h, *res;
 	int l1, l2, rl;
 
-	if (s1 == NULL || *s1 == '\0')
+	if (SM_IS_EMPTY(s1))
 		return s2;
-	if (s2 == NULL || *s2 == '\0')
+	if (SM_IS_EMPTY(s2))
 		return s1;
 	l1 = strlen(s1);
 	l2 = strlen(s2);
@@ -455,43 +482,43 @@ helo_options(line, firstline, m, mci, e)
 	p = strpbrk(line, " =");
 	if (p != NULL)
 		*p++ = '\0';
-	if (sm_strcasecmp(line, "size") == 0)
+	if (SM_STRCASEEQ(line, "size"))
 	{
 		mci->mci_flags |= MCIF_SIZE;
 		if (p != NULL)
 			mci->mci_maxsize = atol(p);
 	}
-	else if (sm_strcasecmp(line, "8bitmime") == 0)
+	else if (SM_STRCASEEQ(line, "8bitmime"))
 	{
 		mci->mci_flags |= MCIF_8BITMIME;
 		mci->mci_flags &= ~MCIF_7BIT;
 	}
-	else if (sm_strcasecmp(line, "expn") == 0)
+	else if (SM_STRCASEEQ(line, "expn"))
 		mci->mci_flags |= MCIF_EXPN;
-	else if (sm_strcasecmp(line, "dsn") == 0)
+	else if (SM_STRCASEEQ(line, "dsn"))
 		mci->mci_flags |= MCIF_DSN;
-	else if (sm_strcasecmp(line, "enhancedstatuscodes") == 0)
+	else if (SM_STRCASEEQ(line, "enhancedstatuscodes"))
 		mci->mci_flags |= MCIF_ENHSTAT;
-	else if (sm_strcasecmp(line, "pipelining") == 0)
+	else if (SM_STRCASEEQ(line, "pipelining"))
 		mci->mci_flags |= MCIF_PIPELINED;
-	else if (sm_strcasecmp(line, "verb") == 0)
+	else if (SM_STRCASEEQ(line, "verb"))
 		mci->mci_flags |= MCIF_VERB;
-#if _FFR_EAI
-	else if (sm_strcasecmp(line, "smtputf8") == 0)
+#if USE_EAI
+	else if (SM_STRCASEEQ(line, "smtputf8"))
 		mci->mci_flags |= MCIF_EAI;
-#endif /* _FFR_EAI */
+#endif
 #if STARTTLS
-	else if (sm_strcasecmp(line, "starttls") == 0)
+	else if (SM_STRCASEEQ(line, "starttls"))
 		mci->mci_flags |= MCIF_TLS;
 #endif
-	else if (sm_strcasecmp(line, "deliverby") == 0)
+	else if (SM_STRCASEEQ(line, "deliverby"))
 	{
 		mci->mci_flags |= MCIF_DLVR_BY;
 		if (p != NULL)
 			mci->mci_min_by = atol(p);
 	}
 #if SASL
-	else if (sm_strcasecmp(line, "auth") == 0)
+	else if (SM_STRCASEEQ(line, "auth"))
 	{
 		if (p != NULL && *p != '\0' &&
 		    !bitset(MCIF_AUTH2, mci->mci_flags))
@@ -745,10 +772,10 @@ readauth(filename, safe, sai, rpool)
 	char *s;
 	char buf[MAXLINE];
 
-	if (filename == NULL || filename[0] == '\0')
+	if (SM_IS_EMPTY(filename))
 		return EX_UNAVAILABLE;
 
-#if !_FFR_ALLOW_SASLINFO
+# if !_FFR_ALLOW_SASLINFO
 	/*
 	**  make sure we don't use a program that is not
 	**  accessible to the user who specified a different authinfo file.
@@ -780,7 +807,8 @@ readauth(filename, safe, sai, rpool)
 				       (void *) &fd, SM_IO_RDONLY, NULL);
 	}
 	else
-#endif /* !_FFR_ALLOW_SASLINFO */
+# endif /* !_FFR_ALLOW_SASLINFO */
+	/* "else" in #if code above */
 	{
 		pid = -1;
 		sff = SFF_REGONLY|SFF_SAFEDIRPATH|SFF_NOWLINK
@@ -790,7 +818,7 @@ readauth(filename, safe, sai, rpool)
 		if (DontLockReadFiles)
 			sff |= SFF_NOLOCK;
 
-#if _FFR_ALLOW_SASLINFO
+# if _FFR_ALLOW_SASLINFO
 		/*
 		**  XXX: make sure we don't read or open files that are not
 		**  accessible to the user who specified a different authinfo
@@ -798,10 +826,10 @@ readauth(filename, safe, sai, rpool)
 		*/
 
 		sff |= SFF_MUSTOWN;
-#else /* _FFR_ALLOW_SASLINFO */
+# else /* _FFR_ALLOW_SASLINFO */
 		if (safe)
 			sff |= SFF_OPENASROOT;
-#endif /* _FFR_ALLOW_SASLINFO */
+# endif /* _FFR_ALLOW_SASLINFO */
 
 		f = safefopen(filename, O_RDONLY, 0, sff);
 	}
@@ -1138,9 +1166,9 @@ getsimple(context, id, result, len)
 	unsigned *len;
 {
 	char *h, *s;
-# if SASL > 10509
+#  if SASL > 10509
 	bool addrealm;
-# endif
+#  endif
 	size_t l;
 	SASL_AI_T *sai;
 	char *authid = NULL;
@@ -1189,10 +1217,10 @@ getsimple(context, id, result, len)
 
 	  case SASL_CB_AUTHNAME:
 		h = (*sai)[SASL_AUTHID];
-# if SASL > 10509
+#  if SASL > 10509
 		/* XXX maybe other mechanisms too?! */
 		addrealm = (*sai)[SASL_MECH] != NULL &&
-			   sm_strcasecmp((*sai)[SASL_MECH], "CRAM-MD5") == 0;
+			   SM_STRCASEEQ((*sai)[SASL_MECH], "cram-md5");
 
 		/*
 		**  Add realm to authentication id unless authid contains
@@ -1238,7 +1266,7 @@ getsimple(context, id, result, len)
 				authid = (*sai)[SASL_ID_REALM];
 		}
 		else
-# endif /* SASL > 10509 */
+#  endif /* SASL > 10509 */
 			authid = h;
 		l = strlen(authid) + 1;
 		s = sm_sasl_malloc(l);
@@ -1325,38 +1353,38 @@ getsecret(conn, context, id, psecret)
 */
 
 int
-#if SASL > 10515
+# if SASL > 10515
 safesaslfile(context, file, type)
-#else
+# else
 safesaslfile(context, file)
-#endif
+# endif
 	void *context;
 # if SASL >= 20000
 	const char *file;
 # else
 	char *file;
 # endif
-#if SASL > 10515
-# if SASL >= 20000
+# if SASL > 10515
+#  if SASL >= 20000
 	sasl_verify_type_t type;
-# else
+#  else
 	int type;
+#  endif
 # endif
-#endif
 {
 	long sff;
 	int r;
-#if SASL <= 10515
+# if SASL <= 10515
 	size_t len;
-#endif
+# endif
 	char *p;
 
-	if (file == NULL || *file == '\0')
+	if (SM_IS_EMPTY(file))
 		return SASL_OK;
 	if (tTd(95, 16))
 		sm_dprintf("safesaslfile=%s\n", file);
 	sff = SFF_SAFEDIRPATH|SFF_NOWLINK|SFF_NOWWFILES|SFF_ROOTOK;
-#if SASL <= 10515
+# if SASL <= 10515
 	if ((p = strrchr(file, '/')) == NULL)
 		p = file;
 	else
@@ -1372,7 +1400,7 @@ safesaslfile(context, file)
 		if (!bitnset(DBS_GROUPWRITABLESASLDBFILE, DontBlameSendmail))
 			sff |= SFF_NOGWFILES;
 	}
-#else /* SASL <= 10515 */
+# else /* SASL <= 10515 */
 	/* files containing passwords should be not readable */
 	if (type == SASL_VRFY_PASSWD)
 	{
@@ -1383,7 +1411,7 @@ safesaslfile(context, file)
 		if (!bitnset(DBS_GROUPWRITABLESASLDBFILE, DontBlameSendmail))
 			sff |= SFF_NOGWFILES;
 	}
-#endif /* SASL <= 10515 */
+# endif /* SASL <= 10515 */
 
 	p = (char *) file;
 	if ((r = safefile(p, RunAsUid, RunAsGid, RunAsUserName, sff,
@@ -1429,7 +1457,7 @@ saslgetrealm(context, id, availrealms, result)
 		sm_syslog(LOG_INFO, NOQID,
 			  "AUTH=client, realm=%s, available realms=%s",
 			  r == NULL ? "" : r,
-			  (availrealms == NULL || *availrealms == NULL)
+			  (NULL == availrealms || SM_IS_EMPTY(*availrealms))
 				? "" : *availrealms);
 
 	/* check whether context is in list */
@@ -1474,9 +1502,9 @@ iteminlist(item, list, delim)
 	char *s;
 	int len;
 
-	if (list == NULL || *list == '\0')
+	if (SM_IS_EMPTY(list))
 		return NULL;
-	if (item == NULL || *item == '\0')
+	if (SM_IS_EMPTY(item))
 		return NULL;
 	s = list;
 	len = strlen(item);
@@ -1516,7 +1544,7 @@ removemech(rem, list, rpool)
 
 	if (list == NULL)
 		return NULL;
-	if (rem == NULL || *rem == '\0')
+	if (SM_IS_EMPTY(rem))
 	{
 		/* take out what? */
 		return NULL;
@@ -1596,9 +1624,9 @@ attemptauth(m, mci, e, sai)
 
 	/* MUST NOT be a multiple of 4: bug in some sasl_encode64() versions */
 	char in64[MAXOUTLEN + 1];
-#if NETINET || (NETINET6 && SASL >= 20000)
+# if NETINET || (NETINET6 && SASL >= 20000)
 	extern SOCKADDR CurHostAddr;
-#endif
+# endif
 
 	/* no mechanism selected (yet) */
 	(*sai)[SASL_MECH] = NULL;
@@ -1633,9 +1661,9 @@ attemptauth(m, mci, e, sai)
 	/* XXX should these be options settable via .cf ? */
 	ssp.max_ssf = MaxSLBits;
 	ssp.maxbufsize = MAXOUTLEN;
-#  if 0
+# if 0
 	ssp.security_flags = SASL_SEC_NOPLAINTEXT;
-#  endif
+# endif
 	saslresult = sasl_setprop(mci->mci_conn, SASL_SEC_PROPS, &ssp);
 	if (saslresult != SASL_OK)
 		return EX_TEMPFAIL;
@@ -1776,8 +1804,8 @@ attemptauth(m, mci, e, sai)
 	if (out == NULL
 		/* login and digest-md5 up to 1.5.28 set out="" */
 	    || (outlen == 0 &&
-		(sm_strcasecmp(mechusing, "LOGIN") == 0 ||
-		 sm_strcasecmp(mechusing, "DIGEST-MD5") == 0))
+		(SM_STRCASEEQ(mechusing, "login") ||
+		 SM_STRCASEEQ(mechusing, "digest-md5")))
 	   )
 	{
 		/* no initial response */
@@ -1962,9 +1990,9 @@ smtpauth(m, mci, e)
 	callbacks[CB_USER_IDX].context = (void *) &mci->mci_sai;
 	callbacks[CB_AUTHNAME_IDX].context = (void *) &mci->mci_sai;
 	callbacks[CB_GETREALM_IDX].context = (void *) &mci->mci_sai;
-#if 0
+# if 0
 	callbacks[CB_SAFESASL_IDX].context = (void *) &mci->mci_sai;
-#endif
+# endif
 
 	/* set default value for realm */
 	if ((mci->mci_sai)[SASL_DEFREALM] == NULL)
@@ -2013,6 +2041,9 @@ smtpauth(m, mci, e)
 **		m -- the mailer.
 **		mci -- the mailer connection structure.
 **		e -- the envelope (including the sender to specify).
+**
+**	Returns:
+**		exit status corresponding to mail status.
 */
 
 int
@@ -2025,8 +2056,11 @@ smtpmailfrom(m, mci, e)
 	char *bufp;
 	char *bodytype;
 	char *enhsc;
-	char buf[MAXNAME + 1];
+	char buf[MAXNAME_I + 1];
 	char optbuf[MAXLINE];
+#if _FFR_8BITENVADDR
+	int len, nlen;
+#endif
 
 	if (tTd(18, 2))
 		sm_dprintf("smtpmailfrom: CurHost=%s\n", CurHostName);
@@ -2044,18 +2078,42 @@ smtpmailfrom(m, mci, e)
 		return EX_TEMPFAIL;
 	}
 
-#if _FFR_EAI
-	/*
-	**  Abort right away if the message needs SMTPUTF8 and the
-	**  server does not advertise SMTPUTF8.
-	*/
+#if USE_EAI
+	if (bitset(EF_RESPONSE, e->e_flags) &&
+	    !bitnset(M_NO_NULL_FROM, m->m_flags))
+		buf[0] = '\0';
+	else
+	{
+		expand("\201g", buf, sizeof(buf), e);
+		if (!addr_is_ascii(buf) && !e->e_smtputf8)
+			e->e_smtputf8 = true;
+	}
 
-	if (e->e_smtputf8 && !bitset(MCIF_EAI, mci->mci_flags)) {
-		usrerrenh("5.6.7", "%s does not support SMTPUTF8", CurHostName);
-		mci_setstat(mci, EX_NOTSTICKY, "5.6.7", NULL);
+	if (e->e_smtputf8 && !SMTPUTF8)
+	{
+		extern char MsgBuf[];
+
+		/* XREF: format must be coordinated with giveresponse() */
+		usrerrenh("5.6.7", "504 SMTPUTF8 required but not enabled");
+		mci_setstat(mci, EX_NOTSTICKY, "5.6.7", MsgBuf);
 		return EX_DATAERR;
 	}
-#endif /* _FFR_EAI */
+
+	/*
+	**  Abort right away if the message needs SMTPUTF8
+	**  but the server does not advertise it.
+	*/
+
+	if (e->e_smtputf8 && !bitset(MCIF_EAI, mci->mci_flags))
+	{
+		extern char MsgBuf[];
+
+		/* XREF: format must be coordinated with giveresponse() */
+		usrerrenh("5.6.7", "504 SMTPUTF8 required but not offered");
+		mci_setstat(mci, EX_NOTSTICKY, "5.6.7", MsgBuf);
+		return EX_DATAERR;
+	}
+#endif /* USE_EAI */
 
 	/* set up appropriate options to include */
 	if (bitset(MCIF_SIZE, mci->mci_flags) && e->e_msgsize > 0)
@@ -2070,13 +2128,14 @@ smtpmailfrom(m, mci, e)
 		bufp = optbuf;
 	}
 
-#if _FFR_EAI
-	if (e->e_smtputf8) {
+#if USE_EAI
+	if (e->e_smtputf8)
+	{
 		(void) sm_snprintf(bufp, SPACELEFT(optbuf, bufp),
 				 " SMTPUTF8");
 		bufp += strlen(bufp);
 	}
-#endif /* _FFR_EAI */
+#endif /* USE_EAI */
 
 	bodytype = e->e_bodytype;
 	if (bitset(MCIF_8BITMIME, mci->mci_flags))
@@ -2191,11 +2250,24 @@ smtpmailfrom(m, mci, e)
 
 	mci->mci_state = MCIS_MAIL;
 
+#if !USE_EAI
 	if (bitset(EF_RESPONSE, e->e_flags) &&
 	    !bitnset(M_NO_NULL_FROM, m->m_flags))
 		buf[0] = '\0';
 	else
 		expand("\201g", buf, sizeof(buf), e);
+#endif /* !USE_EAI */
+#if _FFR_8BITENVADDR
+	if (tTd(18, 11))
+		sm_dprintf("mail_expand=%s\n", buf);
+	len = sizeof(buf);
+	nlen = dequote_internal_chars(buf, buf, len);
+	/* check length! but that's a bit late... */
+	if (nlen > MAXNAME)
+		sm_syslog(LOG_ERR, e->e_id, "MAIL too long: %d", nlen);
+	if (tTd(18, 11))
+		sm_dprintf("mail2=%s\n", buf);
+#endif /* _FFR_8BITENVADDR */
 	if (buf[0] == '<')
 	{
 		/* strip off  (put back on below) */
@@ -2313,6 +2385,11 @@ smtprcpt(to, m, mci, e, ctladdr, xstart)
 {
 	char *bufp;
 	char optbuf[MAXLINE];
+	char *rcpt;
+#if _FFR_8BITENVADDR
+	char buf[MAXNAME + 1];	/* EAI:ok */
+	int len, nlen;
+#endif
 
 #if PIPELINING
 	/*
@@ -2329,7 +2406,7 @@ smtprcpt(to, m, mci, e, ctladdr, xstart)
 		if (r != EX_OK)
 		{
 			markfailure(e, mci->mci_nextaddr, mci, r, false);
-			giveresponse(r, mci->mci_nextaddr->q_status,  m, mci,
+			giveresponse(r, mci->mci_nextaddr->q_status, m, mci,
 				     ctladdr, xstart, e, to);
 		}
 		mci->mci_nextaddr = mci->mci_nextaddr->q_pchain;
@@ -2414,7 +2491,21 @@ smtprcpt(to, m, mci, e, ctladdr, xstart)
 		}
 	}
 
-	smtpmessage("RCPT To:<%s>%s", m, mci, to->q_user, optbuf);
+	rcpt = to->q_user;
+#if _FFR_8BITENVADDR
+	if (tTd(18, 11))
+		sm_dprintf("rcpt=%s\n", rcpt);
+	len = sizeof(buf);
+	nlen = dequote_internal_chars(rcpt, buf, len);
+	rcpt = buf;
+	/* check length! but that's a bit late... */
+	if (nlen > MAXNAME)
+		sm_syslog(LOG_ERR, e->e_id, "RCPT too long: %d", nlen);
+	if (tTd(18, 11))
+		sm_dprintf("rcpt2=%s\n", rcpt);
+#endif /* _FFR_8BITENVADDR */
+
+	smtpmessage("RCPT To:<%s>%s", m, mci, rcpt, optbuf);
 	mci->mci_state = MCIS_RCPT;
 
 	SmtpPhase = mci->mci_phase = "client RCPT";
@@ -2497,9 +2588,7 @@ smtprcptstat(to, m, mci, e)
 			*t = '\0';
 			mci->mci_tolist = t;
 		}
-#if PIPELINING
 		mci->mci_okrcpts++;
-#endif
 		return EX_OK;
 	}
 	else if (r == 550)
@@ -2641,11 +2730,8 @@ smtpdata(m, mci, e, ctladdr, xstart)
 	else if (REPLYTYPE(r) == 5)
 	{
 		smtprset(m, mci, e);
-#if PIPELINING
-		if (mci->mci_okrcpts <= 0)
-			return mci->mci_retryrcpt ? EX_TEMPFAIL
-						  : EX_UNAVAILABLE;
-#endif
+		if (mci->mci_okrcpts <= 0 && mci->mci_retryrcpt)
+			return EX_TEMPFAIL;
 		return EX_UNAVAILABLE;
 	}
 	else if (REPLYTYPE(r) != 3)
@@ -2660,59 +2746,49 @@ smtpdata(m, mci, e, ctladdr, xstart)
 		smtprset(m, mci, e);
 		mci_setstat(mci, EX_PROTOCOL, ENHSCN(enhsc, "5.5.1"),
 			    SmtpReplyBuffer);
-#if PIPELINING
-		if (mci->mci_okrcpts <= 0)
-			return mci->mci_retryrcpt ? EX_TEMPFAIL
-						  : EX_PROTOCOL;
-#endif
+		if (mci->mci_okrcpts <= 0 && mci->mci_retryrcpt)
+			return EX_TEMPFAIL;
 		return EX_PROTOCOL;
 	}
 
-#if PIPELINING
 	if (mci->mci_okrcpts > 0)
 	{
-#endif
+		/*
+		**  Set timeout around data writes.  Make it at least
+		**  large enough for DNS timeouts on all recipients
+		**  plus some fudge factor.  The main thing is
+		**  that it should not be infinite.
+		*/
 
-	/*
-	**  Set timeout around data writes.  Make it at least large
-	**  enough for DNS timeouts on all recipients plus some fudge
-	**  factor.  The main thing is that it should not be infinite.
-	*/
+		if (tTd(18, 101))
+		{
+			/* simulate a DATA timeout */
+			timeout = 10;
+		}
+		else
+			timeout = DATA_PROGRESS_TIMEOUT * 1000;
+		sm_io_setinfo(mci->mci_out, SM_IO_WHAT_TIMEOUT, &timeout);
 
-	if (tTd(18, 101))
-	{
-		/* simulate a DATA timeout */
-		timeout = 10;
+		/*
+		**  Output the actual message.
+		*/
+
+		if (!(*e->e_puthdr)(mci, e->e_header, e, M87F_OUTER))
+			goto writeerr;
+
+		if (tTd(18, 101))
+		{
+			/* simulate a DATA timeout */
+			(void) sleep(2);
+		}
+
+		if (!(*e->e_putbody)(mci, e, NULL))
+			goto writeerr;
+
+		/*
+		**  Cleanup after sending message.
+		*/
 	}
-	else
-		timeout = DATA_PROGRESS_TIMEOUT * 1000;
-	sm_io_setinfo(mci->mci_out, SM_IO_WHAT_TIMEOUT, &timeout);
-
-
-	/*
-	**  Output the actual message.
-	*/
-
-	if (!(*e->e_puthdr)(mci, e->e_header, e, M87F_OUTER))
-		goto writeerr;
-
-	if (tTd(18, 101))
-	{
-		/* simulate a DATA timeout */
-		(void) sleep(2);
-	}
-
-	if (!(*e->e_putbody)(mci, e, NULL))
-		goto writeerr;
-
-	/*
-	**  Cleanup after sending message.
-	*/
-
-
-#if PIPELINING
-	}
-#endif
 
 #if _FFR_CATCH_BROKEN_MTAS
 	if (sm_io_getinfo(mci->mci_in, SM_IO_IS_READABLE, NULL) > 0)
@@ -2918,10 +2994,6 @@ smtpquit(m, mci, e)
 	if (CurHostName == NULL)
 		CurHostName = MyHostName;
 
-#if PIPELINING
-	mci->mci_okrcpts = 0;
-#endif
-
 	/*
 	**	Suppress errors here -- we may be processing a different
 	**	job when we do the quit connection, and we don't want the
@@ -2995,10 +3067,6 @@ smtprset(m, mci, e)
 	if (CurHostName == NULL)
 		CurHostName = MyHostName;
 
-#if PIPELINING
-	mci->mci_okrcpts = 0;
-#endif
-
 	/*
 	**  Check if connection is gone, if so
 	**  it's a tempfail and we use mci_errno
@@ -3299,17 +3367,16 @@ reply(m, mci, e, timeout, pfunc, enhstat, rtype)
 			continue;
 		}
 		if (REPLYTYPE(r) > 3 && firstline
-# if _FFR_PROXY
+#if _FFR_PROXY
 		    &&
 		    (e->e_sendmode != SM_PROXY
 		     || (e->e_sendmode == SM_PROXY
 			 && (e->e_rcode == 0 || REPLYTYPE(e->e_rcode) < 5))
 		    )
-# endif
+#endif
 		   )
 		{
 			int o = -1;
-# if PIPELINING
 			/*
 			**  ignore error iff: DATA, 5xy error, but we had
 			**  "retryable" recipients. XREF: smtpdata()
@@ -3317,7 +3384,6 @@ reply(m, mci, e, timeout, pfunc, enhstat, rtype)
 
 			if (!(rtype == XS_DATA && REPLYTYPE(r) == 5 &&
 			      mci->mci_okrcpts <= 0 && mci->mci_retryrcpt))
-# endif /* PIPELINING */
 			{
 				o = extenhsc(bufp + 4, ' ', enhstatcode);
 				if (o > 0)
@@ -3352,6 +3418,31 @@ reply(m, mci, e, timeout, pfunc, enhstat, rtype)
 					, rtype, e->e_text);
 			}
 		}
+#if _FFR_REPLY_MULTILINE
+# if _FFR_REPLY_MULTILINE > 200
+#  define MLLIMIT _FFR_REPLY_MULTILINE
+# else
+#  define MLLIMIT 1024
+# endif
+		if ((REPLYTYPE(r) > 3 && !firstline && e->e_text != NULL &&
+		    rtype != XS_QUIT) || tTd(87, 101))
+		{
+			int len;
+			char *new;
+
+			/* skip the same stuff or use o? */
+			/* but o is a local variable in the block above */
+			len = strlen(e->e_text) + strlen(bufp) + 3;
+			if (len < MLLIMIT &&
+			    (new = (char *) sm_rpool_malloc(e->e_rpool, len))
+				!= NULL)
+			{
+				sm_strlcpyn(new, len, 3, e->e_text, "; ",
+					bufp /* + o */);
+				e->e_text = new;
+			}
+		}
+#endif /* _FFR_REPLY_MULTILINE */
 
 		firstline = false;
 
diff --git a/src/util.c b/src/util.c
index 1cf6ddd811e7..c923298a576c 100644
--- a/src/util.c
+++ b/src/util.c
@@ -16,32 +16,50 @@
 SM_RCSID("@(#)$Id: util.c,v 8.427 2013-11-22 20:51:57 ca Exp $")
 
 #include 
-#include 
 #include 
+#if USE_EAI
+# include 
+#endif
 
 /*
 **  NEWSTR -- Create a copy of a C string
 **
 **	Parameters:
-**		s -- the string to copy.
+**		s -- the string to copy. [A]
 **
 **	Returns:
 **		pointer to newly allocated string.
 */
 
 char *
+#if SM_HEAP_CHECK > 2
+newstr_tagged(s, tag, line, group)
+	const char *s;
+	char *tag;
+	int line;
+	int group;
+#else
 newstr(s)
 	const char *s;
+# define tag  "newstr"
+# define line 0
+# define group 0
+#endif
 {
 	size_t l;
 	char *n;
 
 	l = strlen(s);
 	SM_ASSERT(l + 1 > l);
-	n = xalloc(l + 1);
+	n = sm_malloc_tagged_x(l + 1, tag, line, group);
 	sm_strlcpy(n, s, l + 1);
 	return n;
 }
+#if SM_HEAP_CHECK <= 2
+# undef tag
+# undef line
+# undef group
+#endif
 
 /*
 **  ADDQUOTES -- Adds quotes & quote bits to a string.
@@ -49,7 +67,7 @@ newstr(s)
 **	Runs through a string and adds backslashes and quote bits.
 **
 **	Parameters:
-**		s -- the string to modify.
+**		s -- the string to modify. [A]
 **		rpool -- resource pool from which to allocate result
 **
 **	Returns:
@@ -96,9 +114,10 @@ addquotes(s, rpool)
 /*
 **  STRIPBACKSLASH -- Strip all leading backslashes from a string, provided
 **	the following character is alpha-numerical.
-**
 **	This is done in place.
 **
+**	XXX: This may be a problem for EAI?
+**
 **	Parameters:
 **		s -- the string to strip.
 **
@@ -112,7 +131,7 @@ stripbackslash(s)
 {
 	char *p, *q, c;
 
-	if (s == NULL || *s == '\0')
+	if (SM_IS_EMPTY(s))
 		return;
 	p = q = s;
 	while (*p == '\\' && (p[1] == '\\' || (isascii(p[1]) && isalnum(p[1]))))
@@ -130,8 +149,11 @@ stripbackslash(s)
 **	are only found inside comments, quoted strings, or backslash
 **	escaped.  Also verified balanced quotes and parenthesis.
 **
+**	XXX: This may be a problem for EAI? MustQuoteChars is used.
+**	If this returns false, current callers just invoke addquotes().
+**
 **	Parameters:
-**		s -- the string to modify.
+**		s -- the string to modify. [A]
 **
 **	Returns:
 **		true iff the string is RFC822 compliant, false otherwise.
@@ -189,7 +211,7 @@ rfc822_string(s)
 **	comments and quotes.
 **
 **	Parameters:
-**		string -- the string to shorten
+**		string -- the string to shorten [A]
 **		length -- the maximum size, 0 if no maximum
 **
 **	Returns:
@@ -295,11 +317,10 @@ shorten_rfc822_string(string, length)
 **  FIND_CHARACTER -- find an unquoted character in an RFC822 string
 **
 **	Find an unquoted, non-commented character in an RFC822
-**	string and return a pointer to its location in the
-**	string.
+**	string and return a pointer to its location in the string.
 **
 **	Parameters:
-**		string -- the string to search
+**		string -- the string to search [A]
 **		character -- the character to find
 **
 **	Returns:
@@ -379,9 +400,9 @@ check_bodytype(bodytype)
 	/* check body type for legality */
 	if (bodytype == NULL)
 		return BODYTYPE_NONE;
-	if (sm_strcasecmp(bodytype, "7BIT") == 0)
+	if (SM_STRCASEEQ(bodytype, "7bit"))
 		return BODYTYPE_7BIT;
-	if (sm_strcasecmp(bodytype, "8BITMIME") == 0)
+	if (SM_STRCASEEQ(bodytype, "8bitmime"))
 		return BODYTYPE_8BITMIME;
 	return BODYTYPE_ILLEGAL;
 }
@@ -390,7 +411,7 @@ check_bodytype(bodytype)
 **  TRUNCATE_AT_DELIM -- truncate string at a delimiter and append "..."
 **
 **	Parameters:
-**		str -- string to truncate
+**		str -- string to truncate [A]
 **		len -- maximum length (including '\0') (0 for unlimited)
 **		delim -- delimiter character
 **
@@ -507,13 +528,21 @@ copyplist(list, copycont, rpool)
 
 	vp++;
 
-	newvp = (char **) sm_rpool_malloc_x(rpool, (vp - list) * sizeof(*vp));
+	/*
+	**  Hack: rpool is NULL if invoked from readcf(),
+	**  so "ignore" the allocation by setting group to 0.
+	*/
+
+	newvp = (char **) sm_rpool_malloc_tagged_x(rpool,
+				(vp - list) * sizeof(*vp), "copyplist", 0,
+				NULL == rpool ? 0 : 1);
 	memmove((char *) newvp, (char *) list, (int) (vp - list) * sizeof(*vp));
 
 	if (copycont)
 	{
 		for (vp = newvp; *vp != NULL; vp++)
-			*vp = sm_rpool_strdup_x(rpool, *vp);
+			*vp = sm_rpool_strdup_tagged_x(rpool, *vp,
+					"copyplist", 0, NULL == rpool ? 0 : 1);
 	}
 
 	return newvp;
@@ -720,6 +749,27 @@ printav(fp, av)
 {
 	while (*av != NULL)
 	{
+#if _FFR_8BITENVADDR
+		if (tTd(0, 9))
+		{
+			char *cp;
+			unsigned char v;
+
+			for (cp = *av++; *cp != '\0'; cp++) {
+				v = (unsigned char)(*cp & 0x00ff);
+				sm_dprintf("%c", v);
+# if 0
+				if (isascii(v) && isprint(v))
+					sm_dprintf("%c", v);
+				else
+					sm_dprintf("\\x%hhx", v);
+# endif
+			}
+			if (*av != NULL)
+				sm_dprintf(" ");
+			continue;
+		}
+#endif /* _FFR_8BITENVADDR */
 		if (tTd(0, 44))
 			sm_dprintf("\n\t%08lx=", (unsigned long) *av);
 		else
@@ -729,6 +779,8 @@ printav(fp, av)
 		else
 			xputs(fp, *av++);
 	}
+
+	/* don't print this if invoked directly (not via xputs())? */
 	(void) sm_io_putc(fp, SM_TIME_DEFAULT, '\n');
 }
 
@@ -737,7 +789,7 @@ printav(fp, av)
 **
 **	Parameters:
 **		fp -- output file pointer.
-**		s -- string to put.
+**		s -- string to put. [A]
 **
 **	Returns:
 **		none.
@@ -757,6 +809,17 @@ xputs(fp, s)
 	extern struct metamac MetaMacros[];
 	static SM_DEBUG_T DebugANSI = SM_DEBUG_INITIALIZER("ANSI",
 		"@(#)$Debug: ANSI - enable reverse video in debug output $");
+#if _FFR_8BITENVADDR
+	if (tTd(0, 9))
+	{
+		char *av[2];
+
+		av[0] = (char *) s;
+		av[1] = NULL;
+		printav(fp, av);
+		return;
+	}
+#endif
 
 	/*
 	**  TermEscape is set here, rather than in main(),
@@ -917,42 +980,123 @@ xputs(fp, s)
 }
 
 /*
-**  MAKELOWER -- Translate a line into lower case
+**  MAKELOWER_A -- Translate a line into lower case
 **
 **	Parameters:
-**		p -- the string to translate.  If NULL, return is
-**			immediate.
+**		pp -- pointer to the string to translate (modified in place if possible). [A]
+**		rpool -- rpool to use to reallocate string if needed
+**			(if NULL: uses sm_malloc() internally)
 **
 **	Returns:
-**		none.
+**		lower cased string
 **
 **	Side Effects:
-**		String pointed to by p is translated to lower case.
+**		String pointed to by pp is translated to lower case if possible.
 */
 
-void
-makelower(p)
-	register char *p;
+char *
+makelower_a(pp, rpool)
+	char **pp;
+	SM_RPOOL_T *rpool;
 {
-	register char c;
+	char c;
+	char *orig, *p;
 
+	SM_REQUIRE(pp != NULL);
+	p = *pp;
 	if (p == NULL)
-		return;
+		return p;
+	orig = p;
+
+#if USE_EAI
+	if (!addr_is_ascii(p))
+	{
+		char *new;
+
+		new = sm_lowercase(p);
+		if (new == p)
+			return p;
+		*pp = sm_rpool_strdup_tagged_x(rpool, new, "makelower", 0, 1);
+		return *pp;
+	}
+#endif /* USE_EAI */
 	for (; (c = *p) != '\0'; p++)
 		if (isascii(c) && isupper(c))
 			*p = tolower(c);
+	return orig;
+}
+
+
+#if 0
+makelower: Optimization for EAI case?
+
+	unsigned char ch;
+
+	while ((ch = (unsigned char)*str) != '\0' && ch < 127)
+	{
+		if (isascii(c) && isupper(c))
+			*str = tolower(ch);
+		++str;
+	}
+	if ('\0' == ch)
+		return orig;
+	handle UTF-8 case: invoke sm_lowercase() etc
+#endif /* 0 */
+
+/*
+**  MAKELOWER_BUF -- Translate a line into lower case
+**
+**	Parameters:
+**		str -- string to translate. [A]
+**		buf -- where to place lower case version.
+**		buflen -- size of buf
+**
+**	Returns:
+**		nothing
+**
+**	Side Effects:
+**		String pointed to by str is translated to lower case if possible.
+**
+**	Note:
+**		if str is lower cased in place and str == buf (same pointer),
+**		then it is not explicitly copied.
+*/
+
+void
+makelower_buf(str, buf, buflen)
+	char *str;
+	char *buf;
+	int buflen;
+{
+	char *lower;
+
+	SM_REQUIRE(buf != NULL);
+	if (str == NULL)
+		return;
+	lower = makelower_a(&str, NULL);
+	if (lower != str || str != buf)
+	{
+		sm_strlcpy(buf, lower, buflen);
+		if (lower != str)
+			SM_FREE(lower);
+	}
+	return;
 }
 
 /*
 **  FIXCRLF -- fix  in line.
 **
+**	XXX: Could this be a problem for EAI? That is, can there
+**		be a string with \n and the previous octet is \n
+**		but is part of a UTF8 "char"?
+**
 **	Looks for the  combination and turns it into the
 **	UNIX canonical  character.  It only takes one line,
 **	i.e., it is assumed that the first  found is the end
 **	of the line.
 **
 **	Parameters:
-**		line -- the line to fix.
+**		line -- the line to fix. [A]
 **		stripnl -- if true, strip the newline also.
 **
 **	Returns:
@@ -986,7 +1130,7 @@ fixcrlf(line, stripnl)
 **	as appropriate) at the end of the string.
 **
 **	Parameters:
-**		l -- line to put.
+**		l -- line to put. (should be [x])
 **		mci -- the mailer connection information.
 **
 **	Returns:
@@ -1011,7 +1155,7 @@ putline(l, mci)
 **	as appropriate) at the end of the string.
 **
 **	Parameters:
-**		l -- line to put.
+**		l -- line to put. (should be [x])
 **		len -- the length of the line.
 **		mci -- the mailer connection information.
 **		pxflags -- flag bits:
@@ -1264,6 +1408,7 @@ xunlink(f)
 **
 **	Parameters:
 **		buf -- place to put the input line.
+**			(can be [A], but should be [x])
 **		siz -- size of buf.
 **		fp -- file to read from.
 **		timeout -- the timeout before error occurs.
@@ -1372,6 +1517,7 @@ sfgets(buf, siz, fp, timeout, during)
 **
 **	Parameters:
 **		buf -- place to put result.
+**			(can be [A], but should be [x])
 **		np -- pointer to bytes available; will be updated with
 **			the actual buffer size (not number of bytes filled)
 **			on return.
@@ -1500,7 +1646,7 @@ bool
 atobool(s)
 	register char *s;
 {
-	if (s == NULL || *s == '\0' || strchr("tTyY", *s) != NULL)
+	if (SM_IS_EMPTY(s) || strchr("tTyY", *s) != NULL)
 		return true;
 	return false;
 }
@@ -1583,8 +1729,9 @@ bitzerop(map)
 **
 **	Parameters:
 **		icase -- ignore case?
-**		a -- possible substring.
-**		b -- possible superstring.
+**		a -- possible substring. [A]
+**		b -- possible superstring. [A]
+**		(both must be the same format: X or Q)
 **
 **	Returns:
 **		true if a is contained in b (case insensitive).
@@ -1961,6 +2108,8 @@ dumpfd(fd, printclosed, logit)
 **
 **	Parameters:
 **		host -- the host to shorten (stripped in place).
+**		[EAI: matched against $m: must be same format;
+**		conversion needed?]
 **
 **	Returns:
 **		place where string was truncated, NULL if not truncated.
@@ -2192,7 +2341,7 @@ prog_open(argv, pfd, e)
 **  GET_COLUMN -- look up a Column in a line buffer
 **
 **	Parameters:
-**		line -- the raw text line to search.
+**		line -- the raw text line to search. [A]
 **		col -- the column number to fetch.
 **		delim -- the delimiter between columns.  If null,
 **			use white space.
@@ -2264,10 +2413,11 @@ get_column(line, col, delim, buf, buflen)
 
 /*
 **  CLEANSTRCPY -- copy string keeping out bogus characters
+**	XXX: This may be a problem for EAI?
 **
 **	Parameters:
 **		t -- "to" string.
-**		f -- "from" string.
+**		f -- "from" string. [A]
 **		l -- length of space available in "to" string.
 **
 **	Returns:
@@ -2304,7 +2454,7 @@ cleanstrcpy(t, f, l)
 **  DENLSTRING -- convert newlines in a string to spaces
 **
 **	Parameters:
-**		s -- the input string
+**		s -- the input string [A]
 **		strict -- if set, don't permit continuation lines.
 **		logattacks -- if set, log attempted attacks.
 **
@@ -2361,8 +2511,8 @@ denlstring(s, strict, logattacks)
 **  STRREPLNONPRT -- replace "unprintable" characters in a string with subst
 **
 **	Parameters:
-**		s -- string to manipulate (in place)
-**		subst -- character to use as replacement
+**		s -- string to manipulate (in place) [A]
+**		c -- character to use as replacement
 **
 **	Returns:
 **		true iff string did not contain "unprintable" characters
@@ -2398,7 +2548,7 @@ strreplnonprt(s, c)
 **	support.
 **
 **	Parameters:
-**		pathname -- pathname to check for directory-ness.
+**		pathname -- pathname to check for directory-ness. [x]
 **		createflag -- if set, create directory if needed.
 **
 **	Returns:
@@ -2984,8 +3134,8 @@ xconnect(inchannel)
 	if (i == 0)
 		return D_XCNCT;
 	delim = *p;
-	if (i > MAXNAME)
-		b[MAXNAME] = '\0';
+	if (i > MAXNAME)	/* EAI:ok */
+		b[MAXNAME] = '\0';	/* EAI:ok */
 	else
 		b[i] = '\0';
 	SM_FREE(RealHostName);
diff --git a/src/version.c b/src/version.c
index 1cb5140b0521..8619c58ee355 100644
--- a/src/version.c
+++ b/src/version.c
@@ -15,4 +15,4 @@
 
 SM_RCSID("@(#)$Id: version.c,v 8.250 2014-01-27 12:55:16 ca Exp $")
 
-char	Version[] = "8.16.1";
+char	Version[] = "8.17.1";
diff --git a/test/t_dropgid.c b/test/t_dropgid.c
index 28fdfeed90f5..7f583c6619ce 100644
--- a/test/t_dropgid.c
+++ b/test/t_dropgid.c
@@ -20,10 +20,11 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_dropgid.c,v 1.7 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 static void
 printgids(str, r, e)
@@ -37,17 +38,17 @@ printgids(str, r, e)
 /* define only one of these */
 #if HASSETEGID
 # define SETGIDCALL	"setegid"
-#endif /* HASSETEGID */
+#endif
 #if HASSETREGID
 # define SETGIDCALL	"setregid"
-#endif /* HASSETREGID */
+#endif
 #if HASSETRESGID
 # define SETGIDCALL	"setresgid"
-#endif /* HASSETRESGID */
+#endif
 
 #ifndef SETGIDCALL
 #  define SETGIDCALL	"setgid"
-#endif /* ! SETGIDCALL */
+#endif
 
 int
 main(argc, argv)
@@ -139,13 +140,13 @@ main(argc, argv)
 		       SETGIDCALL);
 #if !HASSETEGID
 		printf("Maybe compile with -DHASSETEGID and try again\n");
-#endif /* !HASSETEGID */
+#endif
 #if !HASSETREGID
 		printf("Maybe compile with -DHASSETREGID and try again\n");
-#endif /* !HASSETREGID */
+#endif
 #if !HASSETRESGID
 		printf("Maybe compile with -DHASSETRESGID and try again\n");
-#endif /* !HASSETRESGID */
+#endif
 		exit(1);
 	}
 
diff --git a/test/t_exclopen.c b/test/t_exclopen.c
index 978508fa8b57..57fdd2a80cad 100644
--- a/test/t_exclopen.c
+++ b/test/t_exclopen.c
@@ -40,14 +40,17 @@
 
 #include 
 #include 
+#include 
+#include 
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_exclopen.c,v 8.7 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 static char Attacker[128];
 static char Attackee[128];
diff --git a/test/t_pathconf.c b/test/t_pathconf.c
index f03875391acc..72dd7e4ed5f1 100644
--- a/test/t_pathconf.c
+++ b/test/t_pathconf.c
@@ -19,15 +19,17 @@
 #include 
 #include 
 #include 
+#include 
 #include 
+#include 
 #ifdef EX_OK
 # undef EX_OK		/* unistd.h may have another use for this */
-#endif /* EX_OK */
+#endif
 #include 
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_pathconf.c,v 8.7 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 int
 main(argc, argv)
diff --git a/test/t_seteuid.c b/test/t_seteuid.c
index be4ab17fe8cb..06b02ef7f97b 100644
--- a/test/t_seteuid.c
+++ b/test/t_seteuid.c
@@ -24,14 +24,15 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_seteuid.c,v 8.9 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 #ifdef __hpux
 # define seteuid(e)	setresuid(-1, e, -1)
-#endif /* __hpux */
+#endif
 
 static void
 printuids(str, r, e)
diff --git a/test/t_setgid.c b/test/t_setgid.c
index 642907440712..ff704a38e3c5 100644
--- a/test/t_setgid.c
+++ b/test/t_setgid.c
@@ -20,10 +20,11 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_setgid.c,v 1.7 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 static void
 printgids(str, r, e)
@@ -54,17 +55,17 @@ main(argc, argv)
 
 #if SM_CONF_SETREGID
 	res = setregid(effgid, effgid);
-#else /* SM_CONF_SETREGID */
+#else
 	res = setgid(effgid);
-#endif /* SM_CONF_SETREGID */
+#endif
 
 	printf("setgid(%d)=%d %s\n", (int) effgid, res,
 		res < 0 ? "failure" : "ok");
 #if SM_CONF_SETREGID
 	printgids("after setregid()", effgid, effgid);
-#else /* SM_CONF_SETREGID */
+#else
 	printgids("after setgid()", effgid, effgid);
-#endif /* SM_CONF_SETREGID */
+#endif
 
 	if (getegid() != effgid)
 	{
@@ -107,9 +108,9 @@ main(argc, argv)
 		printf("\nThis system cannot use %s to set the real gid to the effective gid\nand clear the saved gid.\n",
 #if SM_CONF_SETREGID
 			"setregid"
-#else /* SM_CONF_SETREGID */
+#else
 			"setgid"
-#endif /* SM_CONF_SETREGID */
+#endif
 			);
 		exit(1);
 	}
diff --git a/test/t_setreuid.c b/test/t_setreuid.c
index 46fcb5f3ee97..fab01e65841c 100644
--- a/test/t_setreuid.c
+++ b/test/t_setreuid.c
@@ -21,14 +21,15 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_setreuid.c,v 8.10 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 #ifdef __hpux
 # define setreuid(r, e)	setresuid(r, e, -1)
-#endif /* __hpux */
+#endif
 
 static void
 printuids(str, r, e)
diff --git a/test/t_setuid.c b/test/t_setuid.c
index 627db2d0d0d0..672739a14c9d 100644
--- a/test/t_setuid.c
+++ b/test/t_setuid.c
@@ -23,10 +23,11 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_setuid.c,v 8.8 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 static void
 printuids(str, r, e)
diff --git a/test/t_snprintf.c b/test/t_snprintf.c
index f690f611a162..bcf7f038a3ad 100644
--- a/test/t_snprintf.c
+++ b/test/t_snprintf.c
@@ -13,7 +13,7 @@
 
 #ifndef lint
 static char id[] = "@(#)$Id: t_snprintf.c,v 8.5 2013-11-22 20:52:01 ca Exp $";
-#endif /* ! lint */
+#endif
 
 #define TEST_STRING	"1234567890"
 
diff --git a/vacation/vacation.0 b/vacation/vacation.0
index c3138e6b69d2..eb296cf4f5e7 100644
--- a/vacation/vacation.0
+++ b/vacation/vacation.0
@@ -1,21 +1,21 @@
-VACATION(1)                                                        VACATION(1)
+VACATION(1)                 General Commands Manual                VACATION(1)
 
 
 
-NAME
+NNAAMMEE
        vacation - E-mail auto-responder
 
-SYNOPSIS
-       vacation  [-a alias] [-C cffile] [-d] [-f database] [-i] [-I] [-j] [-l]
-       [-m message] [-R returnaddr] [-r interval] [-s address] [-t time]  [-U]
-       [-x] [-z] login
+SSYYNNOOPPSSIISS
+       vvaaccaattiioonn  [--aa _a_l_i_a_s] [--CC _c_f_f_i_l_e] [--dd] [--ff _d_a_t_a_b_a_s_e] [--ii] [--II] [--jj] [--ll]
+       [--mm _m_e_s_s_a_g_e] [--RR _r_e_t_u_r_n_a_d_d_r] [--rr _i_n_t_e_r_v_a_l] [--ss _a_d_d_r_e_s_s] [--tt _t_i_m_e]  [--UU]
+       [--xx] [--zz] _l_o_g_i_n
 
-DESCRIPTION
-       Vacation  returns  a message, ~/.vacation.msg by default, to the sender
+DDEESSCCRRIIPPTTIIOONN
+       VVaaccaattiioonn  returns  a message, _~_/_._v_a_c_a_t_i_o_n_._m_s_g by default, to the sender
        informing them that you are currently not reading your mail.  The  mes-
-       sage  is  only  sent  to  each  sender  once per reply interval (see -r
-       below).  The intended use is in a .forward  file.   For  example,  your
-       .forward file might have:
+       sage  is  only  sent to each sender once per reply interval (see --rr be-
+       low).  The intended use is in a _._f_o_r_w_a_r_d file.  For example, your _._f_o_r_-
+       _w_a_r_d file might have:
 
               \eric, "|/usr/bin/vacation -a allman eric"
 
@@ -24,90 +24,90 @@ VACATION(1)                                                        VACATION(1)
 
        Available options:
 
-       -a alias
-              Handle messages for alias in the same manner as  those  received
+       --aa _a_l_i_a_s
+              Handle messages for _a_l_i_a_s in the same manner as  those  received
               for the user's login name.
 
-       -C cfpath
-              Specify  pathname  of  the  sendmail  configuration  file.  This
-              option is ignored if -U is specified.  This option  defaults  to
-              the   standard   sendmail   configuration   file,   located   at
-              /etc/mail/sendmail.cf on most systems.
+       --CC _c_f_p_a_t_h
+              Specify  pathname  of the sendmail configuration file.  This op-
+              tion is ignored if --UU is specified.  This option defaults to the
+              standard sendmail configuration file, located at /etc/mail/send-
+              mail.cf on most systems.
 
-       -d     Send error/debug messages to stderr instead of  syslog.   Other-
-              wise,  fatal  errors,  such  as  calling vacation with incorrect
-              arguments, or with non-existent logins, are logged in the system
+       --dd     Send error/debug messages to stderr instead of  syslog.   Other-
+              wise,  fatal errors, such as calling vvaaccaattiioonn with incorrect ar-
+              guments, or with non-existent _l_o_g_i_ns, are logged in  the  system
               log file, using syslog(8).  This should only be used on the com-
-              mand line, not in your .forward file.
+              mand line, not in your _._f_o_r_w_a_r_d file.
 
-       -f filename
-              Use filename as name of the database instead  of  ~/.vacation.db
-              or  ~/.vacation.{dir,pag}.  Unless the filename starts with / it
+       --ff _f_i_l_e_n_a_m_e
+              Use _f_i_l_e_n_a_m_e as name of the database instead  of  _~_/_._v_a_c_a_t_i_o_n_._d_b
+              or  _~_/_._v_a_c_a_t_i_o_n_._{_d_i_r_,_p_a_g_}.  Unless the _f_i_l_e_n_a_m_e starts with / it
               is relative to ~.
 
-       -i     Initialize the vacation  database  files.   It  should  be  used
-              before  you modify your .forward file.  This should only be used
-              on the command line, not in your .forward file.
+       --ii     Initialize the vacation database files.  It should be  used  be-
+              fore you modify your _._f_o_r_w_a_r_d file.  This should only be used on
+              the command line, not in your _._f_o_r_w_a_r_d file.
 
-       -I     Same as -i (for backwards compatibility).  This should  only  be
-              used on the command line, not in your .forward file.
+       --II     Same as --ii (for backwards compatibility).  This should  only  be
+              used on the command line, not in your _._f_o_r_w_a_r_d file.
 
-       -j     Respond to the message regardless of whether the login is listed
+       --jj     Respond to the message regardless of whether the login is listed
               as a recipient for the message.  Do not use this flag unless you
               are  sure  of the consequences.  For example, this will cause to
               reply to mailing list messages which may result in removing  you
               from the list.
 
-       -l     List  the  content  of  the vacation database file including the
-              address and the associated time of  the  last  auto-response  to
-              that address.  This should only be used on the command line, not
-              in your .forward file.
+       --ll     List the content of the vacation database file including the ad-
+              dress and the associated time of the last auto-response to  that
+              address.   This  should only be used on the command line, not in
+              your _._f_o_r_w_a_r_d file.
 
-       -m filename
-              Use filename as name of the file containing the message to  send
-              instead  of  ~/.vacation.msg.  Unless the filename starts with /
+       --mm _f_i_l_e_n_a_m_e
+              Use _f_i_l_e_n_a_m_e as name of the file containing the message to  send
+              instead  of  _~_/_._v_a_c_a_t_i_o_n_._m_s_g.  Unless the _f_i_l_e_n_a_m_e starts with /
               it is relative to ~.
 
-       -R returnaddr
+       --RR _r_e_t_u_r_n_a_d_d_r
               Set the reply envelope sender address
 
-       -r interval
-              Set the reply interval to interval days.   The  default  is  one
+       --rr _i_n_t_e_r_v_a_l
+              Set the reply interval to _i_n_t_e_r_v_a_l days.   The  default  is  one
               week.   An interval of ``0'' or ``infinite'' (actually, any non-
-              numeric character) will never send more than one reply.  The  -r
+              numeric character) will never send more than one reply.  The  --rr
               option  should  only  be used when the vacation database is ini-
-              tialized (see -i above).
+              tialized (see --ii above).
 
-       -s address
-              Use address instead of the incoming message  sender  address  on
-              the From line as the recipient for the vacation message.
+       --ss _a_d_d_r_e_s_s
+              Use _a_d_d_r_e_s_s instead of the incoming message  sender  address  on
+              the _F_r_o_m line as the recipient for the vacation message.
 
-       -t time
+       --tt _t_i_m_e
               Ignored,  available  only  for compatibility with Sun's vacation
               program.
 
-       -U     Do not attempt to lookup login in the password file.  The -f and
+       --UU     Do not attempt to lookup _l_o_g_i_n in the password file.  The -f and
               -m options must be used to specify the database and message file
               since there is no home directory for the  default  settings  for
               these options.
 
-       -x     Reads  an  exclusion  list  from  stdin  (one address per line).
+       --xx     Reads  an  exclusion  list  from  stdin  (one address per line).
               Mails coming from an address in this exclusion list won't get  a
-              reply  by  vacation.  It is possible to exclude complete domains
+              reply  by  vvaaccaattiioonn.  It is possible to exclude complete domains
               by specifying ``@domain'' as  element  of  the  exclusion  list.
-              This  should only be used on the command line, not in your .for-
-              ward file.
+              This  should only be used on the command line, not in your _._f_o_r_-
+              _w_a_r_d file.
 
-       -z     Set the sender of the vacation message to ``<>'' instead of  the
+       --zz     Set the sender of the vacation message to ``<>'' instead of  the
               user.   This  probably violates the RFCs since vacation messages
-              are not required  by  a  standards-track  RFC  to  have  a  null
-              reverse-path.
+              are not required by a standards-track RFC to  have  a  null  re-
+              verse-path.
 
-       Vacation  reads  the  first  line  from  the  standard input for a UNIX
+       VVaaccaattiioonn  reads  the  first  line  from  the  standard input for a UNIX
        ``From'' line to  determine  the  sender.   Sendmail(8)  includes  this
        ``From'' line automatically.
 
-       No message will be sent unless login (or an alias supplied using the -a
+       No message will be sent unless _l_o_g_i_n (or an _a_l_i_a_s supplied using the --aa
        option) is part of either the ``To:'' or ``Cc:'' headers of  the  mail.
        No   messages   from   ``???-REQUEST'',  ``???-RELAY'',  ``???-OWNER'',
        ``OWNER-???'', ``Postmaster'', ``UUCP'', ``MAILER'',  or  ``MAILER-DAE-
@@ -115,9 +115,9 @@ VACATION(1)                                                        VACATION(1)
        is a notification sent  if  a  ``Precedence:  bulk''  or  ``Precedence:
        junk''  line is included in the mail headers.  The people who have sent
        you messages are maintained as a db(3) or dbm(3) database in  the  file
-       .vacation.db or .vacation.{dir,pag} in your home directory.
+       _._v_a_c_a_t_i_o_n_._d_b or _._v_a_c_a_t_i_o_n_._{_d_i_r_,_p_a_g_} in your home directory.
 
-       Vacation expects a file .vacation.msg, in your home directory, contain-
+       VVaaccaattiioonn expects a file _._v_a_c_a_t_i_o_n_._m_s_g, in your home directory, contain-
        ing a message to be sent back to each sender.  It should be  an  entire
        message (including headers).  For example, it might contain:
 
@@ -130,7 +130,7 @@ VACATION(1)                                                        VACATION(1)
               please contact Keith Bostic .
               --eric
 
-FILES
+FFIILLEESS
        ~/.vacation.db    default database file for db(3)
 
        ~/.vacation.{dir,pag}
@@ -138,11 +138,11 @@ VACATION(1)                                                        VACATION(1)
 
        ~/.vacation.msg   default message to send
 
-SEE ALSO
+SSEEEE AALLSSOO
        sendmail(8), syslog(8)
 
-HISTORY
-       The vacation command appeared in 4.3BSD.
+HHIISSTTOORRYY
+       The vvaaccaattiioonn command appeared in 4.3BSD.
 
 
 
diff --git a/vacation/vacation.1 b/vacation/vacation.1
index 237368c9840c..158fab1a7366 100644
--- a/vacation/vacation.1
+++ b/vacation/vacation.1
@@ -30,9 +30,9 @@ vacation
 .RB [ \-l ]
 .RB [ \-m
 .IR message ]
-.RB [ \-R 
+.RB [ \-R
 .IR returnaddr ]
-.RB [ \-r 
+.RB [ \-r
 .IR interval ]
 .RB [ \-s
 .IR address ]
@@ -168,7 +168,7 @@ above).
 Use
 .I address
 instead of the incoming message sender address on the
-.I From 
+.I From
 line as the recipient for the vacation message.
 .TP
 .BI \-t " time"
@@ -176,7 +176,7 @@ Ignored, available only for compatibility with Sun's
 vacation program.
 .TP
 .B \-U
-Do not attempt to lookup 
+Do not attempt to lookup
 .I login
 in the password file.
 The -f and -m options must be used to specify the database and message file
@@ -264,7 +264,7 @@ Precedence: bulk
 I am on vacation until July 22.  If you have something urgent,
 please contact Keith Bostic .
 --eric
-.fi 
+.fi
 .SH FILES
 .TP 1.8i
 ~/.vacation.db
diff --git a/vacation/vacation.c b/vacation/vacation.c
index 72032748d624..4ddd1a0e9bc2 100644
--- a/vacation/vacation.c
+++ b/vacation/vacation.c
@@ -28,16 +28,14 @@ SM_IDSTR(id, "@(#)$Id: vacation.c,v 8.148 2013-11-22 20:52:02 ca Exp $")
 #include 
 #include 
 #include 
-#ifdef EX_OK
-# undef EX_OK		/* unistd.h may have another use for this */
-#endif
+#include 
 #include 
 
 #include 
 #include 
-#include "sendmail/sendmail.h"
+#include 
 #include 
-#include "libsmdb/smdb.h"
+#include 
 
 #define ONLY_ONCE	((time_t) 0)	/* send at most one reply */
 #define INTERVAL_UNDEF	((time_t) (-1))	/* no value given */
@@ -176,11 +174,11 @@ main(argc, argv)
 			    "Unknown UID %d", (int) RealUid);
 	RunAsUserName = RealUserName = rnamebuf;
 
-# ifdef LOG_MAIL
+#ifdef LOG_MAIL
 	openlog("vacation", LOG_PID, LOG_MAIL);
-# else
+#else
 	openlog("vacation", LOG_PID);
-# endif
+#endif
 
 	opterr = 0;
 	initdb = false;
@@ -650,8 +648,7 @@ nsearch(name, str)
 		**  matching "eric" to "".
 		*/
 
-		if (tolower(*s) == tolower(*name) &&
-		    strncasecmp(name, s, len) == 0 &&
+		if (SM_STRNCASEEQ(name, s, len) &&
 		    (s == str || !isascii(*(s - 1)) || !isalnum(*(s - 1))) &&
 		    (!isascii(*(s + len)) || !isalnum(*(s + len))))
 			return true;