Import sendmail 8.13.1

This commit is contained in:
Gregory Neil Shapiro 2004-08-01 01:04:57 +00:00
parent 323f6dcb88
commit e92d3f3ffe
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/sendmail/dist/; revision=132943
213 changed files with 8590 additions and 2993 deletions

302
contrib/sendmail/CACerts Normal file
View File

@ -0,0 +1,302 @@
# $Id: CACerts,v 8.1 2004/03/01 22:05:47 ca Exp $
# 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
# a certificate signed by one of these CA certificates.
#
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=US, ST=California, L=Berkeley, O=Sendmail Consortium, CN=Certificate Authority/emailAddress=certificates@sendmail.org
Validity
Not Before: Feb 1 21:51:47 2003 GMT
Not After : Jan 31 21:51:47 2008 GMT
Subject: C=US, ST=California, L=Berkeley, O=Sendmail Consortium, CN=Certificate Authority/emailAddress=certificates@sendmail.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:9a:fb:dc:4c:a3:58:21:1b:84:78:0a:53:56:b3:
8d:84:05:b7:db:dd:d7:81:ea:dd:c1:ab:d4:be:d9:
2b:12:e0:6d:3a:31:d5:f0:7b:13:fc:d8:da:09:0b:
71:11:8e:b9:48:c4:ab:ae:f5:9c:4c:e2:04:27:8e:
c8:03:3a:aa:00:8b:46:f2:79:09:ae:65:b2:9a:66:
e7:ac:a9:ea:32:f7:4a:4e:fd:da:41:48:34:5a:9d:
b0:42:ea:55:40:17:27:5e:67:9e:e5:ce:dc:84:6d:
1d:48:37:23:11:68:9d:a8:d4:58:02:05:ea:88:35:
bd:0d:b6:28:d5:cd:d4:d8:95
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
DE:CD:6E:B8:89:34:06:3D:E9:CD:A7:FE:45:4F:4E:FB:E1:8D:E7:79
X509v3 Authority Key Identifier:
keyid:DE:CD:6E:B8:89:34:06:3D:E9:CD:A7:FE:45:4F:4E:FB:E1:8D:E7:79
DirName:/C=US/ST=California/L=Berkeley/O=Sendmail Consortium/CN=Certificate Authority/emailAddress=certificates@sendmail.org
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
66:92:b9:57:17:3b:6a:0e:72:b1:85:29:53:9f:11:68:a0:0d:
79:43:d0:7c:48:73:b9:71:09:50:08:02:03:0b:28:0c:33:9a:
00:ac:94:69:4f:bc:0f:45:6b:f5:3a:ca:6a:87:a1:7f:28:f7:
9a:c4:b6:b0:f3:dc:a3:eb:42:95:9f:99:19:f8:b8:84:6d:f1:
1d:bc:9f:f0:a0:cc:60:2d:00:6b:17:55:33:16:85:d1:73:e1:
00:59:89:33:19:c4:2e:29:5a:39:a7:0e:e7:9b:d2:4c:c7:b9:
7d:6a:3e:b4:00:83:86:d3:16:28:fd:ad:55:65:60:4e:14:02:
46:d3
-----BEGIN CERTIFICATE-----
MIIDsDCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnTELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCEJlcmtlbGV5MRwwGgYDVQQK
ExNTZW5kbWFpbCBDb25zb3J0aXVtMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRo
b3JpdHkxKDAmBgkqhkiG9w0BCQEWGWNlcnRpZmljYXRlc0BzZW5kbWFpbC5vcmcw
HhcNMDMwMjAxMjE1MTQ3WhcNMDgwMTMxMjE1MTQ3WjCBnTELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCEJlcmtlbGV5MRwwGgYDVQQK
ExNTZW5kbWFpbCBDb25zb3J0aXVtMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRo
b3JpdHkxKDAmBgkqhkiG9w0BCQEWGWNlcnRpZmljYXRlc0BzZW5kbWFpbC5vcmcw
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJr73EyjWCEbhHgKU1azjYQFt9vd
14Hq3cGr1L7ZKxLgbTox1fB7E/zY2gkLcRGOuUjEq671nEziBCeOyAM6qgCLRvJ5
Ca5lsppm56yp6jL3Sk792kFINFqdsELqVUAXJ15nnuXO3IRtHUg3IxFonajUWAIF
6og1vQ22KNXN1NiVAgMBAAGjgf0wgfowHQYDVR0OBBYEFN7NbriJNAY96c2n/kVP
Tvvhjed5MIHKBgNVHSMEgcIwgb+AFN7NbriJNAY96c2n/kVPTvvhjed5oYGjpIGg
MIGdMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMI
QmVya2VsZXkxHDAaBgNVBAoTE1NlbmRtYWlsIENvbnNvcnRpdW0xHjAcBgNVBAMT
FUNlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYGCSqGSIb3DQEJARYZY2VydGlmaWNh
dGVzQHNlbmRtYWlsLm9yZ4IBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUA
A4GBAGaSuVcXO2oOcrGFKVOfEWigDXlD0HxIc7lxCVAIAgMLKAwzmgCslGlPvA9F
a/U6ymqHoX8o95rEtrDz3KPrQpWfmRn4uIRt8R28n/CgzGAtAGsXVTMWhdFz4QBZ
iTMZxC4pWjmnDueb0kzHuX1qPrQAg4bTFij9rVVlYE4UAkbT
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=US, ST=California, L=Emeryville, O=gshapiro.net, CN=Certificate Authority/emailAddress=certificates@gshapiro.net
Validity
Not Before: Jan 1 04:39:54 2002 GMT
Not After : Dec 31 04:39:54 2006 GMT
Subject: C=US, ST=California, L=Emeryville, O=gshapiro.net, CN=Certificate Authority/emailAddress=certificates@gshapiro.net
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:aa:dd:a2:fe:3b:fa:2f:5c:3d:f1:e1:d4:1d:55:
04:27:6b:01:62:00:d7:02:cb:74:47:69:84:d7:c6:
c5:71:55:79:35:3a:a8:ce:de:48:23:53:80:3c:cd:
54:2e:e9:fe:b1:76:5a:be:cb:fd:2d:dc:a3:36:c5:
c7:1e:4e:ef:76:f0:55:8f:a0:a5:f8:07:c5:52:1d:
a2:42:81:4d:8a:c8:42:3f:f3:01:80:f9:46:35:a6:
bc:c0:9b:9f:33:8b:49:9b:1d:87:8f:19:48:15:21:
23:57:df:6e:4d:03:ed:ae:9f:0b:91:b7:a9:47:66:
f1:0d:1b:1c:5d:b4:57:60:c7
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
A0:6D:E0:06:AF:61:94:B4:C6:84:15:B4:8B:74:22:67:4A:43:60:CA
X509v3 Authority Key Identifier:
keyid:A0:6D:E0:06:AF:61:94:B4:C6:84:15:B4:8B:74:22:67:4A:43:60:CA
DirName:/C=US/ST=California/L=Emeryville/O=gshapiro.net/CN=Certificate Authority/emailAddress=certificates@gshapiro.net
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
87:27:d2:2a:3a:dc:04:cd:ef:e8:7b:1c:34:47:2e:13:34:a5:
08:f9:4d:df:d8:e1:6d:e6:9a:db:38:ee:20:6d:4a:ae:6f:1e:
bc:71:61:a4:b4:d6:40:24:ee:65:ca:e9:81:5a:ef:ee:62:57:
70:05:46:91:6b:d0:c6:a6:e9:38:65:ae:ea:50:b3:5c:27:c4:
7a:bd:95:8c:cb:45:ef:fc:fc:99:e5:6a:61:c3:44:77:d8:1f:
d6:b4:17:44:15:9a:bc:26:5b:ec:4e:29:5d:fd:cf:61:f3:be:
91:a4:3b:51:e6:73:5b:17:82:9d:5a:56:2c:63:c2:f1:d6:a2:
4c:5a
-----BEGIN CERTIFICATE-----
MIIDoTCCAwqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBmDELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCkVtZXJ5dmlsbGUxFTATBgNV
BAoTDGdzaGFwaXJvLm5ldDEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MSgwJgYJKoZIhvcNAQkBFhljZXJ0aWZpY2F0ZXNAZ3NoYXBpcm8ubmV0MB4XDTAy
MDEwMTA0Mzk1NFoXDTA2MTIzMTA0Mzk1NFowgZgxCzAJBgNVBAYTAlVTMRMwEQYD
VQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpFbWVyeXZpbGxlMRUwEwYDVQQKEwxn
c2hhcGlyby5uZXQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYG
CSqGSIb3DQEJARYZY2VydGlmaWNhdGVzQGdzaGFwaXJvLm5ldDCBnzANBgkqhkiG
9w0BAQEFAAOBjQAwgYkCgYEAqt2i/jv6L1w98eHUHVUEJ2sBYgDXAst0R2mE18bF
cVV5NTqozt5II1OAPM1ULun+sXZavsv9LdyjNsXHHk7vdvBVj6Cl+AfFUh2iQoFN
ishCP/MBgPlGNaa8wJufM4tJmx2HjxlIFSEjV99uTQPtrp8LkbepR2bxDRscXbRX
YMcCAwEAAaOB+DCB9TAdBgNVHQ4EFgQUoG3gBq9hlLTGhBW0i3QiZ0pDYMowgcUG
A1UdIwSBvTCBuoAUoG3gBq9hlLTGhBW0i3QiZ0pDYMqhgZ6kgZswgZgxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpFbWVyeXZpbGxl
MRUwEwYDVQQKEwxnc2hhcGlyby5uZXQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1
dGhvcml0eTEoMCYGCSqGSIb3DQEJARYZY2VydGlmaWNhdGVzQGdzaGFwaXJvLm5l
dIIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAIcn0io63ATN7+h7
HDRHLhM0pQj5Td/Y4W3mmts47iBtSq5vHrxxYaS01kAk7mXK6YFa7+5iV3AFRpFr
0Mam6ThlrupQs1wnxHq9lYzLRe/8/JnlamHDRHfYH9a0F0QVmrwmW+xOKV39z2Hz
vpGkO1Hmc1sXgp1aVixjwvHWokxa
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=US, ST=Illinois, L=De Kalb, O=Northern Illinois University, OU=Computer Science, CN=Neil Rickert/emailAddress=rickert@cs.niu.edu
Validity
Not Before: May 12 00:40:50 2000 GMT
Not After : May 20 00:40:50 2010 GMT
Subject: C=US, ST=Illinois, L=De Kalb, O=Northern Illinois University, OU=Computer Science, CN=Neil Rickert/emailAddress=rickert@cs.niu.edu
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:b1:1b:49:06:ef:3f:44:e0:93:ad:8c:a7:f7:21:
7c:87:cb:da:35:f6:4b:a2:fd:8a:a0:07:5b:cc:6a:
9b:89:33:fc:24:f5:b1:24:59:5a:25:50:fd:16:d7:
d4:bc:c7:04:1d:df:90:9b:5e:c3:a8:e9:8b:7d:a3:
5d:9a:e9:7f:e5:2b:ea:15:a7:ad:ba:58:26:0a:11:
49:4f:da:9a:67:7f:b0:a6:66:f4:27:b6:61:4e:3c:
c8:3e:a0:2f:6a:b4:0e:15:d6:39:f8:92:60:85:df:
a6:34:f3:fa:a4:a5:e4:47:49:e7:87:a4:a5:5c:8e:
6a:2f:13:76:5f:29:f3:64:73
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
B6:31:78:BB:7E:AA:4D:A1:5D:FD:A2:24:18:C6:90:5A:2D:2F:19:48
X509v3 Authority Key Identifier:
keyid:B6:31:78:BB:7E:AA:4D:A1:5D:FD:A2:24:18:C6:90:5A:2D:2F:19:48
DirName:/C=US/ST=Illinois/L=De Kalb/O=Northern Illinois University/OU=Computer Science/CN=Neil Rickert/emailAddress=rickert@cs.niu.edu
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
60:69:23:65:97:51:5c:06:a4:42:cb:00:e7:9a:dc:39:70:c3:
d3:5d:bf:0f:e0:04:54:4d:d9:dc:12:57:12:6c:67:fd:5b:b0:
39:63:ea:c4:12:65:51:bb:3d:f1:f7:25:b4:cd:0b:f6:5b:7a:
61:25:ad:06:0a:01:55:dc:71:05:29:0d:73:e9:30:51:be:d3:
e1:b2:89:fc:0f:28:f7:06:75:96:1b:34:75:e0:07:e5:3b:b3:
0b:28:24:e5:79:ea:55:39:e7:d2:ee:ec:63:b4:e4:c6:ee:cb:
15:d0:c8:eb:3b:4f:36:10:a4:6a:c0:6b:03:e8:29:72:c7:a7:
10:00
-----BEGIN CERTIFICATE-----
MIID5TCCA06gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBrjELMAkGA1UEBhMCVVMx
ETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdEZSBLYWxiMSUwIwYDVQQKExxO
b3J0aGVybiBJbGxpbm9pcyBVbml2ZXJzaXR5MRkwFwYDVQQLExBDb21wdXRlciBT
Y2llbmNlMRUwEwYDVQQDEwxOZWlsIFJpY2tlcnQxITAfBgkqhkiG9w0BCQEWEnJp
Y2tlcnRAY3Mubml1LmVkdTAeFw0wMDA1MTIwMDQwNTBaFw0xMDA1MjAwMDQwNTBa
MIGuMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0Rl
IEthbGIxJTAjBgNVBAoTHE5vcnRoZXJuIElsbGlub2lzIFVuaXZlcnNpdHkxGTAX
BgNVBAsTEENvbXB1dGVyIFNjaWVuY2UxFTATBgNVBAMTDE5laWwgUmlja2VydDEh
MB8GCSqGSIb3DQEJARYScmlja2VydEBjcy5uaXUuZWR1MIGfMA0GCSqGSIb3DQEB
AQUAA4GNADCBiQKBgQCxG0kG7z9E4JOtjKf3IXyHy9o19kui/YqgB1vMapuJM/wk
9bEkWVolUP0W19S8xwQd35CbXsOo6Yt9o12a6X/lK+oVp626WCYKEUlP2ppnf7Cm
ZvQntmFOPMg+oC9qtA4V1jn4kmCF36Y08/qkpeRHSeeHpKVcjmovE3ZfKfNkcwID
AQABo4IBDzCCAQswHQYDVR0OBBYEFLYxeLt+qk2hXf2iJBjGkFotLxlIMIHbBgNV
HSMEgdMwgdCAFLYxeLt+qk2hXf2iJBjGkFotLxlIoYG0pIGxMIGuMQswCQYDVQQG
EwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0RlIEthbGIxJTAjBgNV
BAoTHE5vcnRoZXJuIElsbGlub2lzIFVuaXZlcnNpdHkxGTAXBgNVBAsTEENvbXB1
dGVyIFNjaWVuY2UxFTATBgNVBAMTDE5laWwgUmlja2VydDEhMB8GCSqGSIb3DQEJ
ARYScmlja2VydEBjcy5uaXUuZWR1ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
AQEEBQADgYEAYGkjZZdRXAakQssA55rcOXDD012/D+AEVE3Z3BJXEmxn/VuwOWPq
xBJlUbs98fcltM0L9lt6YSWtBgoBVdxxBSkNc+kwUb7T4bKJ/A8o9wZ1lhs0deAH
5TuzCygk5XnqVTnn0u7sY7Tkxu7LFdDI6ztPNhCkasBrA+gpcsenEAA=
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2003/emailAddress=ca+ca-rsa2003@esmtp.org
Validity
Not Before: Aug 7 15:56:45 2003 GMT
Not After : Aug 6 15:56:45 2006 GMT
Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2003/emailAddress=ca+ca-rsa2003@esmtp.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:aa:37:0f:09:a9:1c:e3:1a:0c:fe:bd:6c:37:a4:
cf:87:db:af:6b:b4:19:d4:11:db:c6:56:ca:39:80:
c6:a4:38:b0:bc:ac:7e:be:71:30:86:2c:dc:fa:b5:
fd:58:23:a0:c1:ad:11:53:85:ca:fb:e6:d8:7e:28:
eb:84:3b:cd:a3:fa:28:a5:cb:c7:b2:54:99:3e:40:
2a:27:43:4b:0c:26:4b:af:97:3d:92:82:d9:eb:2c:
7f:77:fd:b8:cd:7e:1e:04:81:17:3c:e2:44:68:ce:
88:66:02:90:24:35:24:c4:4c:ad:77:04:1a:3a:d5:
59:28:28:03:da:03:9d:f4:2e:52:6e:b5:36:96:4b:
14:f8:fc:8e:c6:d3:9b:e2:80:90:8b:71:d7:d0:5c:
43:b2:49:f1:5a:26:f3:5d:9e:3b:01:98:db:e3:ed:
5e:8d:dd:cf:aa:68:9d:0b:c9:e2:4e:fc:16:44:72:
93:07:62:18:05:c1:47:81:3c:3d:e4:e4:22:da:2c:
d6:4a:44:52:06:7a:83:b5:e9:52:38:97:2f:75:a6:
5c:6f:87:8a:8d:83:f4:d0:04:a5:34:18:5e:a1:06:
16:b3:54:ce:64:47:ca:70:56:a3:6f:b9:7f:af:91:
76:78:70:b4:ab:ae:8e:d5:22:26:57:b1:ba:e7:4b:
18:21
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
3A:12:03:DB:0F:9E:28:45:A6:34:8D:38:AB:BA:47:8C:2A:A0:E4:2E
X509v3 Authority Key Identifier:
keyid:3A:12:03:DB:0F:9E:28:45:A6:34:8D:38:AB:BA:47:8C:2A:A0:E4:2E
DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2003/emailAddress=ca+ca-rsa2003@esmtp.org
serial:00
X509v3 Basic Constraints:
CA:TRUE
X509v3 Subject Alternative Name:
email:ca+ca-rsa2003@esmtp.org
X509v3 Issuer Alternative Name:
email:ca+ca-rsa2003@esmtp.org
Signature Algorithm: md5WithRSAEncryption
96:83:b6:54:93:df:38:d0:48:a7:a1:c8:08:c9:0f:e9:80:05:
e3:7e:c3:61:51:88:7b:7a:bb:24:b0:69:a3:22:e4:98:38:da:
c8:c3:eb:52:70:63:e2:66:f2:59:ef:56:be:aa:7c:87:6e:94:
85:d4:71:ba:35:f7:ee:d0:6e:52:1d:1f:e4:fd:2f:e2:70:31:
5d:b7:8b:13:cc:70:10:21:fa:34:29:8f:8d:d8:4a:c7:0f:b2:
36:e7:1e:1e:46:d1:11:84:80:7c:bb:24:c4:63:be:2a:24:53:
74:0c:89:e0:6a:f4:08:63:bf:54:d3:0a:d9:fc:fe:6c:de:4f:
97:61:08:a0:10:92:eb:af:06:ec:50:86:c4:cc:6b:31:32:60:
25:7a:09:47:f8:42:7a:a2:d5:90:fa:48:be:bf:0a:e1:03:b8:
56:24:b9:12:e9:ba:09:30:47:be:a5:8e:a2:92:a4:dc:a6:a7:
c6:29:39:65:6e:64:4a:1b:b2:c3:07:29:f5:c0:7e:78:e0:22:
9b:98:d4:87:91:ca:e1:66:9d:2f:70:f1:4c:a5:8e:2e:68:52:
b3:bd:95:76:56:40:0e:46:47:e4:b3:ec:aa:3c:e8:86:96:5a:
ed:fa:c9:10:95:53:04:13:71:01:91:ce:cd:3a:51:c6:30:e9:
48:49:64:a3
-----BEGIN CERTIFICATE-----
MIIFFzCCA/+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBpTELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCEJlcmtlbGV5MRQwEgYDVQQK
EwtFbmRtYWlsIE9yZzEMMAoGA1UECxMDTVRBMSIwIAYDVQQDExlDbGF1cyBBc3Nt
YW5uIENBIFJTQSAyMDAzMSYwJAYJKoZIhvcNAQkBFhdjYStjYS1yc2EyMDAzQGVz
bXRwLm9yZzAeFw0wMzA4MDcxNTU2NDVaFw0wNjA4MDYxNTU2NDVaMIGlMQswCQYD
VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIQmVya2VsZXkx
FDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNNVEExIjAgBgNVBAMTGUNs
YXVzIEFzc21hbm4gQ0EgUlNBIDIwMDMxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz
YTIwMDNAZXNtdHAub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
qjcPCakc4xoM/r1sN6TPh9uva7QZ1BHbxlbKOYDGpDiwvKx+vnEwhizc+rX9WCOg
wa0RU4XK++bYfijrhDvNo/oopcvHslSZPkAqJ0NLDCZLr5c9koLZ6yx/d/24zX4e
BIEXPOJEaM6IZgKQJDUkxEytdwQaOtVZKCgD2gOd9C5SbrU2lksU+PyOxtOb4oCQ
i3HX0FxDsknxWibzXZ47AZjb4+1ejd3PqmidC8niTvwWRHKTB2IYBcFHgTw95OQi
2izWSkRSBnqDtelSOJcvdaZcb4eKjYP00ASlNBheoQYWs1TOZEfKcFajb7l/r5F2
eHC0q66O1SImV7G650sYIQIDAQABo4IBTjCCAUowHQYDVR0OBBYEFDoSA9sPnihF
pjSNOKu6R4wqoOQuMIHSBgNVHSMEgcowgceAFDoSA9sPnihFpjSNOKu6R4wqoOQu
oYGrpIGoMIGlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8G
A1UEBxMIQmVya2VsZXkxFDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNN
VEExIjAgBgNVBAMTGUNsYXVzIEFzc21hbm4gQ0EgUlNBIDIwMDMxJjAkBgkqhkiG
9w0BCQEWF2NhK2NhLXJzYTIwMDNAZXNtdHAub3JnggEAMAwGA1UdEwQFMAMBAf8w
IgYDVR0RBBswGYEXY2ErY2EtcnNhMjAwM0Blc210cC5vcmcwIgYDVR0SBBswGYEX
Y2ErY2EtcnNhMjAwM0Blc210cC5vcmcwDQYJKoZIhvcNAQEEBQADggEBAJaDtlST
3zjQSKehyAjJD+mABeN+w2FRiHt6uySwaaMi5Jg42sjD61JwY+Jm8lnvVr6qfIdu
lIXUcbo19+7QblIdH+T9L+JwMV23ixPMcBAh+jQpj43YSscPsjbnHh5G0RGEgHy7
JMRjviokU3QMieBq9Ahjv1TTCtn8/mzeT5dhCKAQkuuvBuxQhsTMazEyYCV6CUf4
Qnqi1ZD6SL6/CuEDuFYkuRLpugkwR76ljqKSpNymp8YpOWVuZEobssMHKfXAfnjg
IpuY1IeRyuFmnS9w8Uylji5oUrO9lXZWQA5GR+Sz7Ko86IaWWu36yRCVUwQTcQGR
zs06UcYw6UhJZKM=
-----END CERTIFICATE-----

View File

@ -241,4 +241,4 @@ Kresolve sequence dnsmx canon
be used if set instead of LOCAL_RELAY ($R). This will be fixed in a
future version.
$Revision: 8.55.2.1 $, Last updated $Date: 2002/12/18 22:38:48 $
$Revision: 8.56 $, Last updated $Date: 2002/12/18 22:39:06 $

View File

@ -33,7 +33,7 @@ each of the following conditions is met:
forth as paragraph 6 below, in the documentation and/or other materials
provided with the distribution. For the purposes of binary distribution
the "Copyright Notice" refers to the following language:
"Copyright (c) 1998-2003 Sendmail, Inc. All rights reserved."
"Copyright (c) 1998-2004 Sendmail, Inc. All rights reserved."
4. Neither the name of Sendmail, Inc. nor the University of California nor
the names of their contributors may be used to endorse or promote
@ -76,4 +76,4 @@ each of the following conditions is met:
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
$Revision: 8.11.2.1 $, Last updated $Date: 2003/04/19 14:30:36 $
$Revision: 8.13 $, Last updated $Date: 2004/05/11 23:57:57 $

View File

@ -1022,4 +1022,4 @@ SIXqPke2iCW6+zdG1T/gS5T9T9/Lf2c9FQf0FjURAi3ynDA2RBLA5FDsI8v3
=dbDm
-----END PGP PUBLIC KEY BLOCK-----
$Revision: 8.13.2.4 $, Last updated $Date: 2004/01/13 21:18:06 $
$Revision: 8.17 $, Last updated $Date: 2004/01/13 21:17:49 $

View File

@ -463,4 +463,4 @@ sendmail Source for the sendmail program itself.
test Some test scripts (currently only for compilation aids).
vacation Source for the vacation program. NOT PART OF SENDMAIL!
$Revision: 8.90.2.1 $, Last updated $Date: 2002/11/09 23:32:28 $
$Revision: 8.91 $, Last updated $Date: 2002/11/09 23:33:07 $

View File

@ -1,11 +1,474 @@
SENDMAIL RELEASE NOTES
$Id: RELEASE_NOTES,v 8.1340.2.189 2004/01/18 17:50:57 ca Exp $
$Id: RELEASE_NOTES,v 8.1679 2004/07/30 18:03:07 ca Exp $
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.13.1/8.13.1 2004/07/30
Using the default AliasFile ldap: specification would cause the
objectClasses of the LDAP response to be included in the
alias expansion. Problem noted by Brenden Conte of
Rensselaer Polytechnic Institute.
Fix support for a fallback smart host for system where DNS is
(partially) available. From John Beck of Sun Microsystems.
Fix SuperSafe=PostMilter behavior when a milter replaces a body
but the data file is not yet stored on disk because it is
smaller than the size of the memory buffer. Problem noted
by David Russell.
Fix certificate revocation list support; if a CRL was specified
but the other side presented a cert that was signed by
a different (trusted) CA than the one which issued the CRL,
verification would always fail. Problem noted by Al Smith.
Run mailer programs as the RunAsUser when RunAsUser is set and
the F=S mailer flag is set without a U= mailer equate.
Problem noted by John Gardiner Myers of Proofpoint.
${nbadrcpts} was off by one if BadRcptThrottle is zero.
Patch from Sung-hoon Choi of DreamWiz Inc.
CONFIG: Emit a warning if FEATURE(`access_db') is used after
FEATURE(`greet_pause') because then the latter will not
use the access map. Note: if no default value is given
for FEATURE(`greet_pause') then it issues an error if
FEATURE(`access_db') is not specified before it.
Problem noted by Alexander Dalloz of University of
Bielefeld.
CONFIG: Invoke ruleset Local_greet_pause if FEATURE(`greet_pause')
is used to give more flexibility for local changes.
Portability:
Fix a 64 bit problem in the socket map code. Problem
noted by Geoff Adams.
NetBSD 2.0F has closefrom(3). Patch from Andrew Brown.
NetBSD can use sysctl(3) to get the number of CPUs in
a system. Patch from Andrew Brown.
Add a README file in doc/op/ to explain potential
incompatibilities with various *roff related
tools. Problem tracked down by Per Hedeland.
New Files:
doc/op/README
8.13.0/8.13.0 2004/06/20
Do not include AUTH data in a bounce to avoid leaking confidential
information. See also cf/README about MSP and the section
"Providing SMTP AUTH Data when sendmail acts as Client".
Problem noted by Neil Rickert of Northern Illinois
University.
Fix compilation error in libsm/clock.c for -D_FFR_SLEEP_USE_SELECT=n
and -DSM_CONF_SETITIMER=0. Problem noted by Juergen Georgi
of RUS University of Stuttgart.
Fix bug in conversion from 8bit to quoted-printable. Problem found
by Christof Haerens, patch from Per Hedeland.
Add support for LDAP recursion based on types given to attribute
specifications in an LDAP map definition. This allows
LDAP queries to return a new query, a DN, or an LDAP
URL which will in turn be queried. See the ``LDAP
Recursion'' section of doc/op/op.me for more information.
Based on patch from Andrew Baucom.
Extend the default LDAP specifications for AliasFile
(O AliasFile=ldap:) and file classes (F{X}@LDAP) to
include support for LDAP recursion via new attributes.
See ``USING LDAP FOR ALIASES, MAPS, and CLASSES'' section
of cf/README for more information.
New option for LDAP maps: the -w option allows you to specify the
LDAP API/protocol version to use. The default depends on
the LDAP library.
New option for LDAP maps: the -H option allows you to specify an
LDAP URI instead of specifying the LDAP server via -h host
and -p port. This also allows for the use of LDAP over
SSL and connections via named sockets if your LDAP
library supports it.
New compile time flag SM_CONF_LDAP_INITIALIZE: set this if
ldap_initialize(3) is available (and LDAPMAP is set).
If MaxDaemonChildren is set and a command is repeated too often
during a SMTP session then terminate it just like it is
done for too many bad SMTP commands.
Basic connection rate control support has been added: the daemon
maintains the number of incoming connections per client
IP address and total in the macros {client_rate} and
{total_rate}, respectively. These macros can be used
in the cf file to impose connection rate limits.
A new option ConnectionRateWindowSize (default: 60s)
determines the length of the interval for which the
number of connections is stored. Based on patch from
Jose Marcio Martins da Cruz, Ecole des Mines de Paris.
Add optional protection from open proxies and SMTP slammers which
send SMTP traffic without waiting for the SMTP greeting.
If enabled by the new ruleset greet_pause (see
FEATURE(`greet_pause')), sendmail will wait the specified
amount of time before sending the initial 220 SMTP
greeting. If any traffic is received before then, a 554
SMTP response is sent and all SMTP commands are rejected
during that connection.
If 32 NOOP (or unknown/bad) commands are issued by a client the SMTP
server could sleep for a very long time. Fix based on
patch from Tadashi Kobayashi of IIJ.
Fix a potential memory leak in persistent queue runners if the
number of entries in the queue exceeds the limit of jobs.
Problem noted by Steve Hubert of University of Washington.
Do not use 4.7.1 as enhanced status code because some broken systems
misinterpret it as a permanent error.
New value for SuperSafe: PostMilter which will delay fsync() until
all milters accepted the mail. This can increase
performance if many mails are rejected by milters due to
body scans. Based on patch from David F. Skoll.
New macro {msg_id} which contains the value of the Message-Id:
header, whether provided by the client or generated by
sendmail.
New macro {client_connections} which contains the number of open
connections in the SMTP server for the client IP address.
Based on patch from Jose Marcio Martins da Cruz, Ecole des
Mines de Paris.
sendmail will now remove its pidfile when it exits. This was done
to prevent confusion caused by running sendmail stop
scripts two or more times, where the second and subsequent
runs would report misleading error messages about sendmail's
pid no longer existing. See section 1.3.15 of doc/op/op.me
for a discussion of the implications of this, including
how to correct broken scripts which may have depended on
the old behavior. From John Beck of Sun Microsystems.
Support per-daemon input filter lists which override the default
filter list specified in InputMailFilters. The filters
can be listed in the I= equate of DaemonPortOptions.
Do not add all domain prefixes of the hostname to class 'w'. If
your configuration relies on this behavior, you have to
add those names to class 'w' yourself. Problem noted
by Sander Eerkes.
Support message quarantining in the mail queue. Quarantined
messages are not run on normal queue displays or runs
unless specifically requested with -qQ. Quarantined queue
files are named with an hf prefix instead of a qf prefix.
The -q command line option now can specify which queue to display
or run. -qQ operates on quarantined queue items. -qL
operates on lost queue items.
Restricted mail queue runs and displays can be done based on the
quarantined reason using -qQtext to run or display
quarantined items if the quarantine reason contains the
given text. Similarly, -q!Qtext will run or display
quarantined items which do not have the given text in the
quarantine reason.
Items in the queue can be quarantined or unquarantined using the
new -Q option. See doc/op/op.me for more information.
When displaying the quarantine mailq with 'mailq -qQ', the
quarantine reason is shown in a new line prefixed by
"QUARANTINE:".
A new error code for the $#error mailer, $@ quarantine, can be used
to quarantine messages in check_* (except check_compat) and
header check rulesets. The $: of the mailer triplet will
be used for the quarantine reason.
Add a new quarantine count to the mailstats collected.
Add a new macro ${quarantine} which is the quarantine reason for a
message if it is quarantined.
New map type "socket" for a trivial query protocol over UNIX domain
or TCP sockets (requires compile time option SOCKETMAP).
See sendmail/README and doc/op/op.me for details as well as
socketmapServer.pl and socketmapClient.pl in contrib.
Code donated by Bastiaan Bakker of LifeLine Networks.
Define new macro ${client_ptr} which holds the result of the PTR
lookup for the client IP address. Note: this is the same
as ${client_name} if and only if ${client_resolve} is OK.
Add a new macro ${nbadrcpts} which contains the number of bad
recipients received so far in a transaction.
Call check_relay with the value of ${client_name} to deal with bogus
DNS entries. See also FEATURE(`use_client_ptr'). Problem
noted by Kai Schlichting.
Treat Delivery-Receipt-To: headers the same as Return-Receipt-To:
headers (turn them into DSNs). Delivery-Receipt-To: is
apparently used by SIMS (Sun Internet Mail System).
Enable connection caching for LPC mailers. Patch from Christophe
Wolfhugel of France Telecom Oleane.
Do not silently truncate long strings in address rewriting.
Add support for Cyrus SASL version 2. From Kenneth Murchison of
Oceana Matrix Ltd.
Add a new AuthOption=m flag to require the use of mechanisms which
support mutual authentication. From Kenneth Murchison of
Oceana Matrix Ltd.
Fix logging of TLS related problems (introduced in 8.12.11).
The macros {auth_author} and {auth_authen} are stored in xtext
format just like the STARTTLS related macros to avoid
problems with parsing them. Problem noted by Pierangelo
Masarati of SysNet s.n.c.
New option AuthRealm to set the authentication realm that is
passed to the Cyrus SASL library. Patch from Gary Mills
of the University of Manitoba.
Enable AUTH mechanism EXTERNAL if STARTTLS verification was
successful, otherwise relaying would be allowed if
EXTERNAL is listed in TRUST_AUTH_MECH() and STARTTLS
is active.
Add basic support for certificate revocation lists. Note: if a
CRLFile is specified but the file is unusable, STARTTLS
is disabled. Based on patch by Ralf Hornik.
Enable workaround for inconsistent Cyrus SASLv1 API for mechanisms
DIGEST-MD5 and LOGIN.
Write pid to file also if sendmail only acts as persistent queue
runner. Proposed by Gary Mills of the University of Manitoba.
Keep daemon pid file(s) locked so other daemons don't try to
overwrite each other's pid files.
Increase maximum length of logfile fields for {cert_subject} and
{cert_issuer} from 128 to 256. Requested by Christophe
Wolfhugel of France Telecom.
Log the TLS verification message on the STARTTLS= log line at
LogLevel 12 or higher.
If the MSP is invoked with the verbose option (-v) then it will
try to use the SMTP command VERB to propagate this option
to the MTA which in turn will show the delivery just like
it was done before the default 8.12 separation of MSP and
MTA. Based on patch by Per Hedeland.
If a daemon is refusing connections for longer than the time specified
by the new option RejectLogInterval (default: 3 hours) due
to high load, log this information. Patch from John Beck
of Sun Microsystems.
Remove the ability for non-trusted users to raise the value of
CheckpointInterval on the command line.
New mailer flag 'B' to strip leading backslashes, which is a
subset of the functionality of the 's' flag.
New mailer flag 'W' to ignore long term host status information.
Patch from Juergen Georgi of RUS University of Stuttgart.
Enable generic mail filter API (milter) by default. To turn
it off, add -DMILTER=0 to the compile time options.
An internal SMTP session discard flag was lost after an RSET/HELO/EHLO
causing subsequent messages to be sent instead of being
discarded. This also caused milter callbacks to be called
out of order after the SMTP session was reset.
New option RequiresDirfsync to turn off the compile time flag
REQUIRES_DIR_FSYNC at runtime. See sendmail/README for
further information.
New command line option -D logfile to send debug output to
the indicated log file instead of stdout.
Add Timeout.queuereturn.dsn and Timeout.queuewarn.dsn to control
queue return and warning times for delivery status
notifications.
New queue sort order option: 'n'one for not sorting the queue entries
at all.
Several more return values for ruleset srv_features have been added
to enable/disable certain features in the server per
connection. See doc/op/op.me for details.
Support for SMTP over SSL (smtps), activated by Modifier=s
for DaemonPortOptions.
Continue with DNS lookups on ECONNREFUSED and TRY_AGAIN when
trying to canonify hostnames. Suggested by Neil Rickert
of Northern Illinois University.
Add support for a fallback smart host (option FallbackSmartHost) to
be tried as a last resort after all other fallbacks. This
is designed for sites with partial DNS (e.g., an accurate
view of inside the company, but an incomplete view of
outside). From John Beck of Sun Microsystems.
Enable timeout for STARTTLS even if client does not start the TLS
handshake. Based on patch by Andrey J. Melnikoff.
Remove deprecated -v option for PH map, use -k instead. Patch from
Mark Roth of the University of Illinois at Urbana-Champaign.
libphclient is version 1.2.x by default, if version 1.1.x is required
then compile with -DNPH_VERSION=10100. Patch from Mark Roth
of the University of Illinois at Urbana-Champaign.
Add Milter.macros.eom, allowing macros to be sent to milter
applications for use in the xxfi_eom() callback.
New macro {time} which contains the output of the time(3) function,
i.e., the number of seconds since 0 hours, 0 minutes,
0 seconds, January 1, 1970, Coordinated Universal Time (UTC).
If check_relay sets the reply code to "421" the SMTP server will
terminate the SMTP session with a 421 error message.
Get rid of dead code that tried to access the environment variable
HOSTALIASES.
Deprecate the use of ErrorMode=write. To enable this in 8.13
compile with -DUSE_TTYPATH=1.
Header check rulesets using $>+ (do not strip comments) will get
the header value passed in without balancing quotes,
parentheses, and angle brackets. Based on patch from
Oleg Bulyzhin.
Do not complain and fix up unbalanced quotes, parentheses, and
angle brackets when reading in rulesets. This allows
rules to be written for header checks to catch strings
that contain quotes, parentheses, and/or angle brackets.
Based on patch from Oleg Bulyzhin.
Do not close socket when accept(2) in the daemon encounters
some temporary errors like ECONNABORTED.
Added list of CA certificates that are used by members of the
sendmail consortium, see CACerts.
Portability:
Two new compile options have been added:
HASCLOSEFROM System has closefrom(3).
HASFDWALK System has fdwalk(3).
Based on patch from John Beck of Sun Microsystems.
The Linux kernel version 2.4 series has a broken flock() so
change to using fcntl() locking until they can fix
it. Be sure to update other sendmail related
programs to match locking techniques.
New compile time option NEEDINTERRNO which should be set
if <errno.h> does not declare errno itself.
Support for UNICOS/mk and UNICOS/mp added, some changes for
UNICOS. Patches contributed by Aaron Davis and
Brian Ginsbach, Cray Inc., and Manu Mahonen of
Center for Scientific Computing.
Add support for Darwin 7.0/Mac OS X 10.3 (a.k.a. Panther).
Extend support to Darwin 7.x/Mac OS X 10.3 (a.k.a. Panther).
Remove path from compiler definition for Interix because
Interix 3.0 and 3.5 put gcc in different locations.
Also use <sys/mkdev.h> to get the correct
major()/minor() definitions. Based on feedback
from Mark Funkenhauser.
CONFIG: Add support for LDAP recursion to the default LDAP searches
for maps via new attributes. See the ``USING LDAP FOR
ALIASES, MAPS, and CLASSES'' section of cf/README and
cf/sendmail.schema for more information.
CONFIG: Make sure confTRUSTED_USER is valid even if confRUN_AS_USER
is of the form "user:group" when used for submit.mc.
Problem noted by Carsten P. Gehrke, patch from Neil Rickert
of Northern Illinois University.
CONFIG: Add a new access DB value of QUARANTINE:reason which
instructs the check_* (except check_compat) to quarantine
the message using the given reason.
CONFIG: Use "dns -R A" as map type for dnsbl (just as for enhdnsbl)
instead of "host" to avoid problem with looking up other
DNS records than just A.
CONFIG: New option confCONNECTION_RATE_WINDOW_SIZE to define the
length of the interval for which the number of incoming
connections is maintained.
CONFIG: New FEATURE(`ratecontrol') to set the limits for connection
rate control for individual hosts or nets.
CONFIG: New FEATURE(`conncontrol') to set the limits for the
number of open SMTP connections for individual hosts or nets.
CONFIG: New FEATURE(`greet_pause') enables open proxy and SMTP
slamming protection described above. The feature can
take an argument specifying the milliseconds to wait and/or
use the access database to look the pause time based on
client hostname, domain, IP address, or subnet.
CONFIG: New FEATURE(`use_client_ptr') to have check_relay use
$&{client_ptr} as its first argument. This is useful for
rejections based on the unverified hostname of client,
which turns on the same behavior as in earlier sendmail
versions when delay_checks was not in use. See also entry
above about check_relay being invoked with ${client_name}.
CONFIG: New option confREJECT_LOG_INTERVAL to specify the log
interval when refusing connections for this long.
CONFIG: Remove quotes around usage of confREJECT_MSG; in some cases
this requires a change in a mc file. Requested by
Ted Roberts of Electronic Data Systems.
CONFIG: New option confAUTH_REALM to set the authentication realm
that is passed to the Cyrus SASL library. Patch from
Gary Mills of the University of Manitoba.
CONFIG: Rename the (internal) classes {tls}/{src} to {Tls}/{Src}
to follow the naming conventions.
CONFIG: Add a third optional argument to local_lmtp to specify
the A= argument.
CONFIG: Remove the f flag from the default mailer flags of
local_lmtp.
CONFIG: New option confREQUIRES_DIR_FSYNC to turn off the compile
time flag REQUIRES_DIR_FSYNC at runtime.
CONFIG: New LOCAL_UUCP macro to insert rules into the generated
cf file at the same place where MAILER(`uucp') inserts
its rules.
CONFIG: New options confTO_QUEUERETURN_DSN and confTO_QUEUEWARN_DSN
to control queue return and warning times for delivery
status notifications.
CONFIG: New option confFALLBACK_SMARTHOST to define FallbackSmartHost.
CONFIG: Add the mc file which has been used to create the cf
file to the end of the cf file when using make in cf/cf/.
Patch from Richard Rognlie.
CONFIG: FEATURE(nodns) has been removed, it was a no-op since 8.9.
Use ServiceSwitchFile to turn off DNS lookups, see
doc/op/op.me.
CONFIG: New option confMILTER_MACROS_EOM (sendmail Milter.macros.eom
option) defines macros to be sent to milter applications for
use in the xxfi_eom() callback.
CONFIG: New option confCRL to specify file which contains
certificate revocations lists.
CONFIG: Add a new value (sendertoo) for the third argument to
FEATURE(`ldap_routing') which will reject the SMTP
MAIL From: command if the sender address doesn't exist
in LDAP. See cf/README for more information.
CONFIG: Add a fifth argument to FEATURE(`ldap_routing') which
instructs the rulesets on whether or not to do a domain
lookup if a full address lookup doesn't match. See cf/README
for more information.
CONFIG: Add a sixth argument to FEATURE(`ldap_routing') which
instructs the rulesets on whether or not to queue the mail
or give an SMTP temporary error if the LDAP server can't be
reached. See cf/README for more information. Based on
patch from Billy Ray Miller of Caterpillar.
CONFIG: Experimental support for MTAMark, see cf/README for details.
CONFIG: New option confMESSAGEID_HEADER to define a different
Message-Id: header format. Patch from Bastiaan Bakker
of LifeLine Networks.
CONTRIB: New version of cidrexpand which uses Net::CIDR. From
Derek J. Balling.
CONTRIB: oldbind.compat.c has been removed due to security problems.
Found by code inspection done by Reasoning, Inc.
DEVTOOLS: Add an example file for devtools/Site/, contributed
by Neil Rickert of Northern Illinois University.
LIBMILTER: Add new function smfi_quarantine() which allows the
filter's EOM routine to quarantine the current message.
Filters which use this function must include the
SMFIF_QUARANTINE flag in the registered smfiDesc structure.
LIBMILTER: If a milter sets the reply code to "421", the SMTP server
will terminate the SMTP session with that error.
LIBMILTER: Upon filter shutdown, libmilter will not remove a
named socket in the file system if it is running as root.
LIBMILTER: Add new function smfi_progress() which allows the filter
to notify the MTA that an EOM operation is still in progress,
resetting the timeout.
LIBMILTER: Add new function smfi_opensocket() which allows the filter
to attempt to establish the interface socket, and detect
failure to do so before calling smfi_main().
LIBMILTER: Add new function smfi_setmlreply() which allows the
filter to return a multi-line SMTP reply.
LIBMILTER: Deal with more temporary errors in accept() by ignoring
them instead of stopping after too many occurred.
Suggested by James Carlson of Sun Microsystems.
LIBMILTER: Fix a descriptor leak in the sample program found in
docs/sample.html. Reported by Dmitry Adamushko.
LIBMILTER: The sample program also needs to use SMFIF_ADDRCPT.
Reported by Carl Byington of 510 Software Group.
LIBMILTER: Document smfi_stop() and smfi_setdbg(). Patches
from Bryan Costales.
LIBMILTER: New compile time option SM_CONF_POLL; define this if
poll(2) should be used instead of select(2).
LIBMILTER: New function smfi_insheader() and related protocol
amendments to support header insertion operations.
MAIL.LOCAL: Add support for hashed mail directories, see
mail.local/README. Contributed by Chris Adams of HiWAAY
Informations Services.
MAILSTATS: Display quarantine message counts.
MAKEMAP: Add new flag -D to specify the comment character to use
instead of '#'.
VACATION: Add new flag -j to auto-respond to messages regardless of
whether or not the recipient is listed in the To: or Cc:
headers.
VACATION: Add new flag -R to specify the envelope sender address
for the auto-response message.
New Files:
CACerts
cf/feature/conncontrol.m4
cf/feature/greet_pause.m4
cf/feature/mtamark.m4
cf/feature/ratecontrol.m4
cf/feature/use_client_ptr.m4
cf/ostype/unicos.m4
cf/ostype/unicosmk.m4
cf/ostype/unicosmp.m4
contrib/socketmapClient.pl
contrib/socketmapServer.pl
devtools/OS/Darwin.7.0
devtools/OS/UNICOS-mk
devtools/OS/UNICOS-mp
devtools/Site/site.config.m4.sample
include/sm/os/sm_os_unicos.h
include/sm/os/sm_os_unicosmk.h
include/sm/os/sm_os_unicosmp.h
libmilter/docs/smfi_insheader.html
libmilter/docs/smfi_progress.html
libmilter/docs/smfi_quarantine.html
libmilter/docs/smfi_setdbg.html
libmilter/docs/smfi_setmlreply.html
libmilter/docs/smfi_stop.html
sendmail/ratectrl.c
Deleted Files:
cf/feature/nodns.m4
contrib/oldbind.compat.c
devtools/OS/CRAYT3E.2.0.x
devtools/OS/CRAYTS.10.0.x
libsm/vsprintf.c
Renamed Files:
devtools/OS/Darwin.7.0 => devtools/OS/Darwin.7.x
8.12.11/8.12.11 2004/01/18
Use QueueFileMode when opening qf files. This error was a
regression in 8.12.10. Problem detected and diagnosed

View File

@ -28,6 +28,7 @@ MASQUERADING AND RELAYING
USING LDAP FOR ALIASES, MAPS, AND CLASSES
LDAP ROUTING
ANTI-SPAM CONFIGURATION CONTROL
CONNECTION CONTROL
STARTTLS
SMTP AUTHENTICATION
ADDING NEW MAILERS OR RULESETS
@ -76,7 +77,7 @@ Let's examine a typical .mc file:
divert(-1)
#
# Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -130,8 +131,8 @@ definition appropriate for your environment.
These describe the mailers used at the default CS site. The local
mailer is always included automatically. Beware: MAILER declarations
should always be at the end of the configuration file. The general
rules are that the order should be:
should only be followed by LOCAL_* sections. The general rules are
that the order should be:
VERSIONID
OSTYPE
@ -1051,6 +1052,12 @@ local_lmtp Use an LMTP capable local mailer. The argument to this
LMTP capable. The path to mail.local is set by the
confEBINDIR m4 variable -- making the default
LOCAL_MAILER_PATH /usr/libexec/mail.local.
If a different LMTP capable mailer is used, its pathname
can be specified as second parameter and the arguments
passed to it (A=) as third parameter, e.g.,
FEATURE(`local_lmtp', `/usr/local/bin/lmtp', `lmtp')
WARNING: This feature sets LOCAL_MAILER_FLAGS unconditionally,
i.e., without respecting any definitions in an OSTYPE setting.
@ -1226,6 +1233,13 @@ 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.
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,
which turns on the same behavior as in earlier sendmail
versions when delay_checks was not in use. See doc/op/op.*
about check_relay, {client_name}, and {client_ptr}.
dnsbl Turns on rejection of hosts found in an DNS based rejection
list. If an argument is provided it is used as the domain
in which blocked hosts are listed; otherwise it defaults to
@ -1299,6 +1313,67 @@ enhdnsbl Enhanced version of dnsbl (see above). Further arguments
will be logged).
ratecontrol Enable simple ruleset to do connection rate control
checking. This requires entries in access_db of the form
ClientRate:IP.ADD.RE.SS LIMIT
The RHS specifies the maximum number of connections
(an integer number) over the time interval defined
by ConnectionRateWindowSize, where 0 means unlimited.
Take the following example:
ClientRate:10.1.2.3 4
ClientRate:127.0.0.1 0
ClientRate: 10
10.1.2.3 can only make up to 4 connections, the
general limit it 10, and 127.0.0.1 can make an unlimited
number of connections per ConnectionRateWindowSize.
See also CONNECTION CONTROL.
conncontrol Enable a simple check of the number of incoming SMTP
connections. This requires entries in access_db of the
form
ClientConn:IP.ADD.RE.SS LIMIT
The RHS specifies the maximum number of open connections
(an integer number).
Take the following example:
ClientConn:10.1.2.3 4
ClientConn:127.0.0.1 0
ClientConn: 10
10.1.2.3 can only have up to 4 open connections, the
general limit it 10, and 127.0.0.1 does not have any
explicit limit.
See also CONNECTION CONTROL.
mtamark Experimental support for "Marking Mail Transfer Agents in
Reverse DNS with TXT RRs" (MTAMark), see
draft-stumpf-dns-mtamark-01. Optional arguments are:
1. Error message, default:
550 Rejected: $&{client_addr} not listed as MTA
2. Temporary lookup failures are ignored unless a second
argument is given, which must be either `t' or a full
error message.
3. Lookup prefix, default: _perm._smtp._srv. This should
not be changed unless the draft changes it.
Example:
FEATURE(`mtamark', `', `t')
lookupdotdomain Look up also .domain in the access map. This allows to
match only subdomains. It does not work well with
FEATURE(`relay_hosts_only'), because most lookups for
@ -1393,6 +1468,32 @@ queuegroup A simple example how to select a queue group based
Note: please read the warning in doc/op/op.me about
queue groups and possible queue manipulations.
greet_pause Adds the greet_pause ruleset which enables open proxy
and SMTP slamming protection. The feature can take an
argument specifying the milliseconds to wait:
FEATURE(`greet_pause', `5000') dnl 5 seconds
If FEATURE(`access_db') is enabled, an access database
lookup with the GreetPause tag is done using client
hostname, domain, IP address, or subnet to determine the
pause time:
GreetPause:my.domain 0
GreetPause:example.com 5000
GreetPause:10.1.2 2000
GreetPause:127.0.0.1 0
When using FEATURE(`access_db'), the optional
FEATURE(`greet_pause') argument becomes the default if
nothing is found in the access database. A ruleset called
Local_greet_pause can be used for local modifications, e.g.,
LOCAL_RULESETS
SLocal_greet_pause
R$* $: $&{daemon_flags}
R$* a $* $# 0
+-------+
| HACKS |
+-------+
@ -1461,6 +1562,9 @@ The second example demonstrates that you can use two names on the
same line; these are usually aliases for the same host (or are at
least in the same company).
The macro LOCAL_UUCP can be used to add rules into the generated
cf file at the place where MAILER(`uucp') inserts its rules. This
should only be used if really necessary.
+--------------------+
| USING UUCP MAILERS |
@ -1787,7 +1891,8 @@ declared as follows:
(|(sendmailMTACluster=${sendmailMTACluster})
(sendmailMTAHost=$j))
(sendmailMTAKey=%0))
-v sendmailMTAAliasValue
-v sendmailMTAAliasValue,sendmailMTAAliasSearch:FILTER:sendmailMTAAliasObject,sendmailMTAAliasURL:URL:sendmailMTAAliasObject
NOTE: The macros shown above ${sendmailMTACluster} and $j are not actually
used when the binary expands the `ldap:' token as the AliasFile option is
@ -1893,7 +1998,7 @@ For example, FEATURE(`mailertable', `LDAP') would use the map definition:
(|(sendmailMTACluster=${sendmailMTACluster})
(sendmailMTAHost=$j))
(sendmailMTAKey=%0))
-1 -v sendmailMTAMapValue
-1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject
An example LDAP LDIF entry using this map might be:
@ -1960,7 +2065,7 @@ specification:
(sendmailMTAClassName=R)
(|(sendmailMTACluster=${sendmailMTACluster})
(sendmailMTAHost=$j)))
-v sendmailMTAClassValue
-v sendmailMTAClassValue,sendmailMTAClassSearch:FILTER:sendmailMTAClass,sendmailMTAClassURL:URL:sendmailMTAClass
NOTE: The macros shown above ${sendmailMTACluster} and $j are not actually
used when the binary expands the `@LDAP' token as class declarations are
@ -2053,18 +2158,25 @@ and will not reject addresses not found by the LDAP lookup. However,
this behavior can be changed by giving additional arguments to the FEATURE()
command:
FEATURE(`ldap_routing', <mailHost>, <mailRoutingAddress>, <bounce>, <detail>)
FEATURE(`ldap_routing', <mailHost>, <mailRoutingAddress>, <bounce>,
<detail>, <nodomain>, <tempfail>)
where <mailHost> is a map definition describing how to lookup an alternative
mail host for a particular address; <mailRoutingAddress> is a map definition
describing how to lookup an alternative address for a particular address;
the <bounce> argument, if present and not the word "passthru", dictates
that mail should be bounced if neither a mailHost nor mailRoutingAddress
is found; and <detail> indicates what actions to take if the address
is found, if set to "sendertoo", the sender will be rejected if not
found in LDAP; and <detail> indicates what actions to take if the address
contains +detail information -- `strip' tries the lookup with the +detail
and if no matches are found, strips the +detail and tries the lookup again;
`preserve', does the same as `strip' but if a mailRoutingAddress match is
found, the +detail information is copied to the new address.
found, the +detail information is copied to the new address; the <nodomain>
argument, if present, will prevent the @domain lookup if the full
address is not found in LDAP; the <tempfail> argument, if set to
"tempfail", instructs the rules to give an SMTP 4XX temporary
error if the LDAP server gives the MTA a temporary failure, or if set to
"queue" (the default), the MTA will locally queue the mail.
The default <mailHost> map definition is:
@ -2237,12 +2349,11 @@ access map. If an optional argument `domain' (this is the literal
word `domain', not a placeholder) is given, the domain portion of
the mail sender is also checked to allowing relaying. This option
only works together with the tag From: for the LHS of the access
map entries (see below: Finer control...). This feature allows
spammers to abuse your mail server by specifying a return address
that you enabled in your access file. This may be harder to figure
out for spammers, but it should not be used unless necessary.
Instead use SMTP AUTH or STARTTLS to allow relaying for roaming
users.
map entries. This feature allows spammers to abuse your mail server
by specifying a return address that you enabled in your access file.
This may be harder to figure out for spammers, but it should not
be used unless necessary. Instead use SMTP AUTH or STARTTLS to
allow relaying for roaming users.
If source routing is used in the recipient address (e.g.,
@ -2338,12 +2449,13 @@ The table itself uses e-mail addresses, domain names, and network
numbers as keys. Note that IPv6 addresses must be prefaced with "IPv6:".
For example,
spammer@aol.com REJECT
cyberspammer.com REJECT
TLD REJECT
192.168.212 REJECT
IPv6:2002:c0a8:02c7 RELAY
IPv6:2002:c0a8:51d2::23f4 REJECT
From:spammer@aol.com REJECT
From:cyberspammer.com REJECT
Connect:cyberspammer.com REJECT
Connect:TLD REJECT
Connect:192.168.212 REJECT
Connect:IPv6:2002:c0a8:02c7 RELAY
Connect:IPv6:2002:c0a8:51d2::23f4 REJECT
would refuse mail from spammer@aol.com, any user from cyberspammer.com
(or any host within the cyberspammer.com domain), any host in the entire
@ -2351,6 +2463,41 @@ top level domain TLD, 192.168.212.* network, and the IPv6 address
2002:c0a8:51d2::23f4. It would allow relay for the IPv6 network
2002:c0a8:02c7::/48.
Entries in the access map should be tagged according to their type.
Three tags are available:
Connect: connection information (${client_addr}, ${client_name})
From: envelope sender
To: envelope recipient
Notice: untagged entries are deprecated.
If the required item is looked up in a map, it will be tried first
with the corresponding tag in front, then (as fallback to enable
backward compatibility) without any tag, unless the specific feature
requires a tag. For example,
From:spammer@some.dom REJECT
To:friend.domain RELAY
Connect:friend.domain OK
Connect:from.domain RELAY
From:good@another.dom OK
From:another.dom REJECT
This would deny mails from spammer@some.dom but you could still
send mail to that address even if FEATURE(`blacklist_recipients')
is enabled. Your system will allow relaying to friend.domain, but
not from it (unless enabled by other means). Connections from that
domain will be allowed even if it ends up in one of the DNS based
rejection lists. Relaying is enabled from from.domain but not to
it (since relaying is based on the connection information for
outgoing relaying, the tag Connect: must be used; for incoming
relaying, which is based on the recipient address, To: must be
used). The last two entries allow mails from good@another.dom but
reject mail from all other addresses with another.dom as domain
part.
The value part of the map can contain:
OK Accept mail even if other rules in the running
@ -2377,38 +2524,46 @@ The value part of the map can contain:
"any text" is a message to return for the command.
The string should be quoted to avoid surprises,
e.g., sendmail may remove spaces otherwise.
This type is deprecated, use one the two
This type is deprecated, use one of the two
ERROR: entries below instead.
ERROR:### any text
as above, but useful to mark error messages as such.
ERROR:D.S.N:### any text
where D.S.N is an RFC 1893 compliant error code
and the rest as above.
QUARANTINE:any text
Quarantine the message using the given text as the
quarantining reason.
For example:
cyberspammer.com ERROR:"550 We don't accept mail from spammers"
okay.cyberspammer.com OK
sendmail.org RELAY
128.32 RELAY
IPv6:1:2:3:4:5:6:7 RELAY
[127.0.0.3] OK
[IPv6:1:2:3:4:5:6:7:8] OK
From:cyberspammer.com ERROR:"550 We don't accept mail from spammers"
From:okay.cyberspammer.com OK
Connect:sendmail.org RELAY
To:sendmail.org RELAY
Connect:128.32 RELAY
Connect:128.32.2 SKIP
Connect:IPv6:1:2:3:4:5:6:7 RELAY
Connect:suspicious.example.com QUARANTINE:Mail from suspicious host
Connect:[127.0.0.3] OK
Connect:[IPv6:1:2:3:4:5:6:7:8] OK
would accept mail from okay.cyberspammer.com, but would reject mail from
all other hosts at cyberspammer.com with the indicated message. It would
allow relaying mail from and to any hosts in the sendmail.org domain, and
allow relaying from the 128.32.*.* network and the IPv6 1:2:3:4:5:6:7:*
network. The latter two entries are for checks against ${client_name} if
the IP address doesn't resolve to a hostname (or is considered as "may be
forged"). That is, using square brackets means these are host names,
not network numbers.
would accept mail from okay.cyberspammer.com, but would reject mail
from all other hosts at cyberspammer.com with the indicated message.
It would allow relaying mail from and to any hosts in the sendmail.org
domain, and allow relaying from the IPv6 1:2:3:4:5:6:7:* network
and from the 128.32.*.* network except for the 128.32.2.* network,
which shows how SKIP is useful to exempt subnets/subdomains. The
last two entries are for checks against ${client_name} if the IP
address doesn't resolve to a hostname (or is considered as "may be
forged"). That is, using square brackets means these are host
names, not network numbers.
Warning: if you change the RFC 821 compliant error code from the default
value of 550, then you should probably also change the RFC 1893 compliant
error code to match it. For example, if you use
user@example.com ERROR:450 mailbox full
To:user@example.com ERROR:450 mailbox full
the error returned would be "450 5.0.0 mailbox full" which is wrong.
Use "ERROR:4.2.2:450 mailbox full" instead.
@ -2427,7 +2582,7 @@ hosts listed in class {R} to be fully qualified host names.
You can also use the access database to block sender addresses based on
the username portion of the address. For example:
FREE.STEALTH.MAILER@ ERROR:550 Spam not accepted
From:FREE.STEALTH.MAILER@ ERROR:550 Spam not accepted
Note that you must include the @ after the username to signify that
this database entry is for checking only the username portion of the
@ -2440,24 +2595,24 @@ If you use:
then you can add entries to the map for local users, hosts in your
domains, or addresses in your domain which should not receive mail:
badlocaluser@ ERROR:550 Mailbox disabled for this username
host.mydomain.com ERROR:550 That host does not accept mail
user@otherhost.mydomain.com ERROR:550 Mailbox disabled for this recipient
To:badlocaluser@ ERROR:550 Mailbox disabled for badlocaluser
To:host.my.TLD ERROR:550 That host does not accept mail
To:user@other.my.TLD ERROR:550 Mailbox disabled for this recipient
This would prevent a recipient of badlocaluser@mydomain.com, any
user at host.mydomain.com, and the single address
user@otherhost.mydomain.com from receiving mail. Please note: a
local username must be now tagged with an @ (this is consistent
with the check of the sender address, and hence it is possible to
distinguish between hostnames and usernames). Enabling this feature
will keep you from sending mails to all addresses that have an
error message or REJECT as value part in the access map. Taking
the example from above:
This would prevent a recipient of badlocaluser in any of the local
domains (class {w}), any user at host.my.TLD, and the single address
user@other.my.TLD from receiving mail. Please note: a local username
must be now tagged with an @ (this is consistent with the check of
the sender address, and hence it is possible to distinguish between
hostnames and usernames). Enabling this feature will keep you from
sending mails to all addresses that have an error message or REJECT
as value part in the access map. Taking the example from above:
spammer@aol.com REJECT
cyberspammer.com REJECT
Mail can't be sent to spammer@aol.com or anyone at cyberspammer.com.
That's why tagged entries should be used.
There are several DNS based blacklists, the first of which was
the RBL (``Realtime Blackhole List'') run by the MAPS project,
@ -2533,46 +2688,12 @@ regex map:
These rules are called with the original arguments of the corresponding
check_* ruleset. If the local ruleset returns $#OK, no further checking
is done by the features described above and the mail is accepted. If the
local ruleset resolves to a mailer (such as $#error or $#discard), the
appropriate action is taken. Otherwise, the results of the local
rewriting are ignored.
Finer control by using tags for the LHS of the access map
---------------------------------------------------------
Read this section only if the options listed so far are not sufficient
for your purposes. There is now the option to tag entries in the
access map according to their type. Three tags are available:
Connect: connection information (${client_addr}, ${client_name})
From: envelope sender
To: envelope recipient
If the required item is looked up in a map, it will be tried first
with the corresponding tag in front, then (as fallback to enable
backward compatibility) without any tag, unless the specific feature
requires a tag. For example,
From:spammer@some.dom REJECT
To:friend.domain RELAY
Connect:friend.domain OK
Connect:from.domain RELAY
From:good@another.dom OK
From:another.dom REJECT
This would deny mails from spammer@some.dom but you could still
send mail to that address even if FEATURE(`blacklist_recipients')
is enabled. Your system will allow relaying to friend.domain, but
not from it (unless enabled by other means). Connections from that
domain will be allowed even if it ends up in one of the DNS based
rejection lists. Relaying is enabled from from.domain but not to
it (since relaying is based on the connection information for
outgoing relaying, the tag Connect: must be used; for incoming
relaying, which is based on the recipient address, To: must be
used). The last two entries allow mails from good@another.dom but
reject mail from all other addresses with another.dom as domain
part.
is done by the features described above and the mail is accepted. If
the local ruleset resolves to a mailer (such as $#error or $#discard),
the appropriate action is taken. Other results starting with $# are
interpreted by sendmail and may lead to unspecified behavior. Note: do
NOT create a mailer with the name OK. Return values that do not start
with $# are ignored, i.e., normal processing continues.
Delay all checks
----------------
@ -2677,6 +2798,8 @@ to $&{currHeader}.
2. There are no default rulesets coming with this distribution of
sendmail. You can either write your own or you can search the
WWW for examples, e.g., http://www.digitalanswers.org/check_local/
3. When using a default ruleset for headers, the name of the header
currently being checked can be found in the $&{hdr_name} macro.
After all of the headers are read, the check_eoh ruleset will be called for
any final header-related checks. The ruleset is called with the number of
@ -2711,6 +2834,38 @@ probably not be used in production.
# Otherwise, reject the mail
R$* $#error $: 553 Header Error
+--------------------+
| CONNECTION CONTROL |
+--------------------+
The features ratecontrol and conncontrol allow to establish connection
limits per client IP address or net. These features can limit the
rate of connections (connections per time unit) or the number of
incoming SMTP connections, respectively. If enabled, appropriate
rulesets are called at the end of check_relay, i.e., after DNS
blacklists and generic access_db operations. The features require
FEATURE(`access_db') to be listed earlier in the mc file.
Note: FEATURE(`delay_checks') delays those connection control checks
after a recipient address has been received, hence making these
connection control features less useful. To run the checks as early
as possible, specify the parameter `nodelay', e.g.,
FEATURE(`ratecontrol', `nodelay')
In that case, FEATURE(`delay_checks') has no effect on connection
control (and it must be specified earlier in the mc file).
An optional second argument `terminate' specifies whether the
rulesets should return the error code 421 which will cause
sendmail to terminate the session with that error if it is
returned from check_relay, i.e., not delayed as explained in
the previous paragraph. Example:
FEATURE(`ratecontrol', `nodelay', `terminate')
+----------+
| STARTTLS |
+----------+
@ -2774,6 +2929,7 @@ If it is SUBJECT, the DN of the cert subject is looked up next in the
access map using the tag CERTSUBJECT. If the value is RELAY, relaying
is allowed.
To make things a bit more flexible (or complicated), the values for
${cert_issuer} and ${cert_subject} can be optionally modified by regular
expressions defined in the m4 variables _CERT_REGEX_ISSUER_ and
_CERT_REGEX_SUBJECT_, respectively. To avoid problems with those macros in
@ -2818,8 +2974,11 @@ Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org SUBJECT
CertSubject:/C=US/ST=California/O=endmail.org/OU=private/CN=
DeathStar/Email=deathstar@endmail.org RELAY
Note: line breaks have been inserted after "CN=" for readability,
each tagged entry must be one (long) line in the access map.
Notes:
- line breaks have been inserted after "CN=" for readability,
each tagged entry must be one (long) line in the access map.
- if OpenSSL 0.9.7 or newer is used then the "Email=" part of a DN
is replaced by "emailAddress=".
Of course it is also possible to write a simple ruleset that allows
relaying for everyone who can present a cert that can be verified, e.g.,
@ -2952,7 +3111,7 @@ R$* $: $&{auth_type}
R$+ $# OK
which checks whether a user has successfully authenticated using
any available mechanism. Depending on the setup of the CYRUS SASL
any available mechanism. Depending on the setup of the Cyrus SASL
library, more sophisticated rulesets might be required, e.g.,
SLocal_check_rcpt
@ -2980,6 +3139,9 @@ If the selected mechanism provides a security layer the number of
bits used for the key of the symmetric cipher is stored in the
macro ${auth_ssf}.
Providing SMTP AUTH Data when sendmail acts as Client
-----------------------------------------------------
If sendmail acts as client, it needs some information how to
authenticate against another MTA. This information can be provided
by the ruleset authinfo or by the option DefaultAuthInfo. The
@ -2991,6 +3153,12 @@ only performed if the access map is used; if the authinfo feature
is used then only up to three lookups are performed (two exact
matches, one default).
Note: If your daemon does client authentication when sending, and
if it uses either PLAIN or LOGIN authentication, then you *must*
prevent ordinary users from seeing verbose output. Do NOT install
sendmail set-user-ID. Use PrivacyOptions to turn off verbose output
("goaway" works for this).
Notice: the default configuration file causes the option DefaultAuthInfo
to fail since the ruleset authinfo is in the .cf file. If you really
want to use DefaultAuthInfo (it is deprecated) then you have to
@ -3341,12 +3509,17 @@ off, do so.
+--------------------------------+
There are a large number of configuration options that don't normally
need to be changed. However, if you feel you need to tweak them, you
can define the following M4 variables. This list is shown in four
columns: the name you define, the default value for that definition,
the option or macro that is affected (either Ox for an option or Dx
for a macro), and a brief description. Greater detail of the semantics
can be found in the Installation and Operations Guide.
need to be changed. However, if you feel you need to tweak them,
you can define the following M4 variables. Note that some of these
variables require formats that are defined in RFC 2821 or RFC 2822.
Before changing them you need to make sure you do not violate those
(and other relevant) RFCs.
This list is shown in four columns: the name you define, the default
value for that definition, the option or macro that is affected
(either Ox for an option or Dx for a macro), and a brief description.
Greater detail of the semantics can be found in the Installation
and Operations Guide.
Some options are likely to be deprecated in future versions -- that is,
the option is only included to provide back-compatibility. These are
@ -3358,7 +3531,7 @@ be ``double quoted, like this phrase'' to avoid having the comma
confuse things. This is common for alias file definitions and for
the read timeout.
M4 Variable Name Configuration Description & [Default]
M4 Variable Name Configuration [Default] & Description
================ ============= =======================
confMAILER_NAME $n macro [MAILER-DAEMON] The sender name used
for internally generated outgoing
@ -3387,6 +3560,9 @@ confRECEIVED_HEADER Received:
The format of the Received: header
in messages passed through this host.
It is unwise to try to change this.
confMESSAGEID_HEADER Message-Id: [<$t.$i@$j>] The format of an
internally generated Message-Id:
header.
confCW_FILE Fw class [/etc/mail/local-host-names] Name
of file used to get the local
additions to class {w} (local host
@ -3590,6 +3766,10 @@ confTO_QUEUERETURN_NONURGENT
Timeout.queuereturn.non-urgent
[undefined] As above, for non-urgent
(low) priority messages.
confTO_QUEUERETURN_DSN
Timeout.queuereturn.dsn
[undefined] As above, for delivery
status notification messages.
confTO_QUEUEWARN Timeout.queuewarn
[4h] The timeout before a warning
message is sent to the sender telling
@ -3605,6 +3785,10 @@ confTO_QUEUEWARN_NONURGENT
Timeout.queuewarn.non-urgent
[undefined] As above, for non-urgent
(low) priority messages.
confTO_QUEUEWARN_DSN
Timeout.queuewarn.dsn
[undefined] As above, for delivery
status notification messages.
confTO_HOSTSTATUS Timeout.hoststatus
[30m] How long information about host
statuses will be maintained before it
@ -3653,6 +3837,8 @@ confUSERDB_SPEC UserDatabaseSpec
[undefined] User database
specification.
confFALLBACK_MX FallbackMXhost [undefined] Fallback MX host.
confFALLBACK_SMARTHOST FallbackSmartHost
[undefined] Fallback smart host.
confTRY_NULL_MX_LIST TryNullMXList [False] If this host is the best MX
for a host and other arrangements
haven't been made, try connecting
@ -3670,6 +3856,8 @@ confREFUSE_LA RefuseLA [varies] Load average at which
numproc) where numproc is the
number of processors online (if
that can be determined).
confREJECT_LOG_INTERVAL RejectLogInterval [3h] Log interval when
refusing connections for this long.
confDELAY_LA DelayLA [0] Load average at which sendmail
will sleep for one second on most
SMTP commands and before accepting
@ -3688,7 +3876,6 @@ confMAX_HEADERS_LENGTH MaxHeadersLength
confMAX_MIME_HEADER_LENGTH MaxMimeHeaderLength
[undefined] Maximum length of
certain MIME header field values.
If not set, sendmail uses 2048/1024.
confCONNECTION_RATE_THROTTLE ConnectionRateThrottle
[undefined] The maximum number of
connections permitted per second per
@ -3696,6 +3883,10 @@ confCONNECTION_RATE_THROTTLE ConnectionRateThrottle
are accepted, further connections
will be delayed. If not set or <= 0,
there is no limit.
confCONNECTION_RATE_WINDOW_SIZE ConnectionRateWindowSize
[60s] Define the length of the
interval for which the number of
incoming connections is maintained.
confWORK_RECIPIENT_FACTOR
RecipientFactor [30000] Cost of each recipient.
confSEPARATE_PROC ForkEachJob [False] Run all deliveries in a
@ -3768,7 +3959,7 @@ confMAX_QUEUE_CHILDREN MaxQueueChildren
of concurrent queue runners active.
This is to keep system resources used
within a reasonable limit. Relates to
Queue Groups and ForkAllJobs.
Queue Groups and ForkEachJob.
confMAX_RUNNERS_PER_QUEUE MaxRunnersPerQueue
[1] Only active when MaxQueueChildren
defined. Controls the maximum number
@ -3909,7 +4100,11 @@ confAUTH_MECHANISMS AuthMechanisms [GSSAPI KERBEROS_V4 DIGEST-MD5
authentication mechanisms will be the
intersection of this list and the list
of available mechanisms as determined
by the CYRUS SASL library.
by the Cyrus SASL library.
confAUTH_REALM AuthRealm [undefined] The authentication realm
that is passed to the Cyrus SASL
library. If no realm is specified,
$j is used.
confDEF_AUTH_INFO DefaultAuthInfo [undefined] Name of file that contains
authentication information for
outgoing connections. This file must
@ -3973,6 +4168,10 @@ confCLIENT_CERT ClientCertFile [undefined] File containing the
confCLIENT_KEY ClientKeyFile [undefined] File containing the
private key belonging to the client
cert.
confCRL CRLFile [undefined] File containing certificate
revocation status, useful for X.509v3
authentication. Note that CRL requires
at least OpenSSL version 0.9.7.
confDH_PARAMETERS DHParameters [undefined] File containing the
DH parameters.
confRAND_FILE RandFile [undefined] File containing random
@ -3992,6 +4191,10 @@ confUSE_MSP UseMSP [false] Use as mail submission
program, see sendmail/SECURITY.
confDELIVER_BY_MIN DeliverByMin [0] Minimum time for Deliver By
SMTP Service Extension (RFC 2852).
confREQUIRES_DIR_FSYNC RequiresDirfsync [true] RequiresDirfsync can
be used to turn off the compile time
flag REQUIRES_DIR_FSYNC at runtime.
See sendmail/README for details.
confSHARED_MEMORY_KEY SharedMemoryKey [0] Key for shared memory.
confFAST_SPLIT FastSplit [1] If set to a value greater than
zero, the initial MX lookups on
@ -4035,6 +4238,9 @@ confMILTER_MACROS_ENVRCPT Milter.macros.envrcpt
[{rcpt_mailer}, {rcpt_host},
{rcpt_addr}] Macros to transmit to
milters after RCPT TO command.
confMILTER_MACROS_EOM Milter.macros.eom
[{msg_id}] Macros to transmit to
milters after DATA command.
See also the description of OSTYPE for some parameters that can be
@ -4177,6 +4383,12 @@ adding the following to your sendmail.mc file:
R$* $: $&{auth_authen}
Rsmmsp $# OK
Note: the authentication data can leak to local users who invoke
the MSP with debug options or even with -v. For that reason either
an authentication mechanism that does not show the password in the
AUTH dialogue (e.g., DIGEST-MD5) or a different authentication
method like STARTTLS should be used.
feature/msp.m4 defines almost all settings for the MSP. Most of
those should not be changed at all. Some of the features and options
can be overridden if really necessary. It is a bit tricky to do
@ -4375,4 +4587,4 @@ M4 DIVERSIONS
8 DNS based blacklists
9 special local rulesets (1 and 2)
$Revision: 8.623.2.27 $, Last updated $Date: 2004/01/11 17:58:25 $
$Revision: 8.691 $, Last updated $Date: 2004/07/19 17:47:34 $

View File

@ -1,7 +1,7 @@
#
# Makefile for configuration files.
#
# $Id: Makefile,v 8.56 2001/12/13 23:56:37 gshapiro Exp $
# $Id: Makefile,v 8.58 2003/10/20 22:01:00 ca Exp $
#
#
@ -19,6 +19,8 @@ SUBMIT= submit
MAILDIR=/etc/mail
M4= m4
CFDIR= ..
SED= sed
ECHO= echo
CHMOD= chmod
ROMODE= 444
RM= rm -f
@ -35,6 +37,8 @@ CFMODE=0444
.mc.cf:
$(RM) $@
$(M4) ${CFDIR}/m4/cf.m4 $*.mc > $@ || ( $(RM) $@ && exit 1 )
$(ECHO) "### $*.mc ###" >>$@
$(SED) -e 's/^/# /' $*.mc >>$@
$(CHMOD) $(ROMODE) $@
GENERIC=generic-bsd4.4.cf generic-hpux9.cf generic-hpux10.cf \
@ -99,6 +103,7 @@ M4FILES=\
${CFDIR}/feature/bestmx_is_local.m4 \
${CFDIR}/feature/bitdomain.m4 \
${CFDIR}/feature/blacklist_recipients.m4 \
${CFDIR}/feature/conncontrol.m4 \
${CFDIR}/feature/dnsbl.m4 \
${CFDIR}/feature/domaintable.m4 \
${CFDIR}/feature/generics_entire_domain.m4 \
@ -113,12 +118,12 @@ M4FILES=\
${CFDIR}/feature/masquerade_envelope.m4 \
${CFDIR}/feature/no_default_msa.m4 \
${CFDIR}/feature/nocanonify.m4 \
${CFDIR}/feature/nodns.m4 \
${CFDIR}/feature/notsticky.m4 \
${CFDIR}/feature/nouucp.m4 \
${CFDIR}/feature/nullclient.m4 \
${CFDIR}/feature/promiscuous_relay.m4 \
${CFDIR}/feature/redirect.m4 \
${CFDIR}/feature/ratecontrol.m4 \
${CFDIR}/feature/relay_based_on_MX.m4 \
${CFDIR}/feature/relay_entire_domain.m4 \
${CFDIR}/feature/relay_hosts_only.m4 \

View File

@ -19,16 +19,15 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: knecht.mc,v 8.55 2001/08/01 22:20:40 eric Exp $')
VERSIONID(`$Id: knecht.mc,v 8.58 2004/01/28 00:54:41 eric Exp $')
OSTYPE(bsd4.4)
DOMAIN(generic)
define(`ALIAS_FILE', ``/etc/mail/aliases, /var/listmanager/aliases'')
define(`ALIAS_FILE', ``/etc/mail/aliases, /etc/mail/lists/sendmail.org/aliases, /var/listmanager/aliases'')
define(`confFORWARD_PATH', `$z/.forward.$w:$z/.forward+$h:$z/.forward')
define(`confDEF_USER_ID', `mailnull')
define(`confHOST_STATUS_DIRECTORY', `.hoststat')
define(`confTO_ICONNECT', `10s')
define(`confCOPY_ERRORS_TO', `Postmaster')
define(`confTO_QUEUEWARN', `8h')
define(`confMIN_QUEUE_AGE', `27m')
define(`confTRUSTED_USERS', ``www listmgr'')
@ -42,9 +41,12 @@ define(`confSERVER_KEY', `CERT_DIR/MYkey.pem')
define(`confCLIENT_CERT', `CERT_DIR/MYcert.pem')
define(`confCLIENT_KEY', `CERT_DIR/MYkey.pem')
define(`CYRUS_MAILER_PATH', `/usr/local/cyrus/bin/deliver')
FEATURE(access_db)
FEATURE(local_lmtp)
FEATURE(virtusertable)
FEATURE(mailertable)
FEATURE(`nocanonify', `canonify_hosts')
CANONIFY_DOMAIN(`sendmail.org')
@ -61,8 +63,17 @@ define(`confFAST_SPLIT', `10')
dnl # 10 runners, split into at most 15 recipients per envelope
QUEUE_GROUP(`mqueue', `P=/var/spool/mqueue, R=5, r=15, F=f')
dnl # enable spam assassin
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
MAILER(local)
MAILER(smtp)
MAILER(cyrus)
LOCAL_RULE_0
Rcyrus.$+ + $+ < @ $=w . > $#cyrus $@ $2 $: $1
Rcyrus.$+ < @ $=w . > $#cyrus $: $1
LOCAL_CONFIG
#
@ -73,6 +84,7 @@ LOCAL_CONFIG
Kcheckaddress regex -a@MATCH
^([0-9]+<@(aol|msn)\.com|[0-9][^<]*<@juno\.com)\.?>
######################################################################
#
# Names that won't be allowed in a To: line (local-part and domains)
#
@ -86,18 +98,42 @@ SCheckTo
R$={RejectToLocalparts}@$* $#error $: "553 Header error"
R$*@$={RejectToDomains} $#error $: "553 Header error"
######################################################################
HMessage-Id: $>CheckMessageId
SCheckMessageId
# Record the presence of the header
R$* $: $(storage {MessageIdCheck} $@ OK $) $1
# validate syntax
R< $+ @ $+ > $@ OK
R$* $#error $: "554 Header error"
######################################################################
HReceived: $>CheckReceived
SCheckReceived
# Record the presence of any Received header
R$* $: $(storage {ReceivedCheck} $@ OK $) $1
# check syntax
R$* ......................................................... $*
$#error $: "554 Header error"
######################################################################
#
# Reject advertising subjects
#
Kadvsubj regex -b -a@MATCH ±?°í
HSubject: $>+CheckSubject
SCheckSubject
R$* $: $(advsubj $&{currHeader} $: OK $)
ROK $@ OK
R$* $#error $@ 5.7.0 $: 550 5.7.0 spam rejected.
######################################################################
#
# Reject certain senders
# Regex match to catch things in quotes
@ -159,13 +195,65 @@ LOCAL_RULESETS
KSirCamWormMarker regex -f -aSUSPECT multipart/mixed;boundary=----.+_Outlook_Express_message_boundary
HContent-Type: $>CheckContentType
######################################################################
SCheckContentType
R$+ $: $(SirCamWormMarker $1 $)
RSUSPECT $#error $: "553 Possible virus, see http://www.symantec.com/avcenter/venc/data/w32.sircam.worm@mm.html"
HContent-Disposition: $>CheckContentDisposition
######################################################################
SCheckContentDisposition
R$- $@ OK
R$- ; $+ $@ OK
R$* $#error $: "553 Illegal Content-Disposition"
#
# Sobig.F
#
LOCAL_CONFIG
Kstorage macro
LOCAL_RULESETS
######################################################################
### check for the existance of the X-MailScanner Header
HX-MailScanner: $>+CheckXMSc
D{SobigFPat}Found to be clean
D{SobigFMsg}This message may contain the Sobig.F virus.
SCheckXMSc
### if it exists, and the defined value is set, record the presence
R${SobigFPat} $* $: $(storage {SobigFCheck} $@ SobigF $) $1
R$* $@ OK
######################################################################
Scheck_eoh
# Check if a Message-Id was found
R$* $: < $&{MessageIdCheck} >
# If Message-Id was found clear the X-MailScanner store and return with OK
R< $+ > $@ OK $>ClearStorage
# Are we the first Hop?
R$* $: < $&{ReceivedCheck} >
R< $+ > $@ OK $>ClearStorage
# no Message-Id->check X-Mailscanner presence, too
R$* $: < $&{SobigFCheck} >
# clear store
R$* $: $>ClearStorage $1
# no msgid, first hop and Header found? -> reject the message
R < SobigF > $#error $: 553 ${SobigFMsg}
# No Header! Fine, take the message
R$* $@ OK
######################################################################
SClearStorage
R$* $: $(storage {SobigFCheck} $) $1
R$* $: $(storage {ReceivedCheck} $) $1
R$* $: $(storage {MessageIdCheck} $) $1
R$* $@ $1

View File

@ -1,5 +1,5 @@
#
# Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -16,6 +16,9 @@
#####
##### SENDMAIL CONFIGURATION FILE
#####
##### built by ca@wiz.smi.sendmail.com on Fri Jul 30 11:06:26 PDT 2004
##### in /extra/home/ca/sm-8.13.1/OpenSource/sendmail-8.13.1/cf/cf
##### using ../ as configuration include directory
#####
######################################################################
#####
@ -24,15 +27,15 @@
######################################################################
######################################################################
##### $Id: cfhead.m4,v 8.108.2.6 2003/12/05 02:26:47 ca Exp $ #####
##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ #####
##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ #####
##### $Id: submit.mc,v 8.6.2.7 2003/09/10 22:11:56 ca Exp $ #####
##### $Id: msp.m4,v 1.32 2002/03/26 22:02:03 ca Exp $ #####
##### $Id: submit.mc,v 8.13 2003/09/10 22:12:48 ca Exp $ #####
##### $Id: msp.m4,v 1.33 2004/02/09 22:32:38 ca Exp $ #####
##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ #####
##### $Id: proto.m4,v 8.649.2.30 2004/01/11 17:54:06 ca Exp $ #####
##### $Id: proto.m4,v 8.710 2004/07/27 17:32:48 ca Exp $ #####
# level 10 config file format
V10/Berkeley
@ -111,7 +114,7 @@ D{MTAHost}[127.0.0.1]
# Configuration version number
DZ8.12.11/Submit
DZ8.13.1/Submit
###############
@ -134,7 +137,7 @@ O AliasWait=10
O MinFreeBlocks=100
# maximum message size
#O MaxMessageSize=1000000
#O MaxMessageSize=0
# substitution for space (blank) characters
O BlankSub=.
@ -277,19 +280,19 @@ O QueueDirectory=/var/spool/clientmqueue
#O Timeout.quit=2m
#O Timeout.misc=2m
#O Timeout.command=1h
O Timeout.ident=0
#O Timeout.ident=5s
#O Timeout.fileopen=60s
#O Timeout.control=2m
O Timeout.queuereturn=5d
#O Timeout.queuereturn.normal=5d
#O Timeout.queuereturn.urgent=2d
#O Timeout.queuereturn.non-urgent=7d
#O Timeout.queuereturn.dsn=5d
O Timeout.queuewarn=4h
#O Timeout.queuewarn.normal=4h
#O Timeout.queuewarn.urgent=1h
#O Timeout.queuewarn.non-urgent=12h
#O Timeout.queuewarn.dsn=4h
#O Timeout.hoststatus=30m
#O Timeout.resolver.retrans=5s
#O Timeout.resolver.retrans.first=5s
@ -328,6 +331,9 @@ O TimeZoneSpec=
# fallback MX host
#O FallbackMXhost=fall.back.host.net
# fallback smart host
#O FallbackSmartHost=fall.back.host.net
# if we are the best MX host for a site, try it directly instead of config err
#O TryNullMXList=False
@ -337,6 +343,9 @@ O TimeZoneSpec=
# load average at which we refuse connections
#O RefuseLA=12
# log interval when refusing connections for this long
#O RejectLogInterval=3h
# load average at which we delay connections; 0 means no limit
#O DelayLA=0
@ -346,6 +355,9 @@ O TimeZoneSpec=
# maximum number of new connections per second
#O ConnectionRateThrottle=0
# Width of the window
#O ConnectionRateWindowSize=60s
# work recipient factor
#O RecipientFactor=30000
@ -418,11 +430,11 @@ O DontInitGroups=True
O RunAsUser=smmsp
# maximum number of recipients per SMTP envelope
#O MaxRecipientsPerMessage=100
#O MaxRecipientsPerMessage=0
# limit the rate recipients per SMTP envelope are accepted
# once the threshold number of recipients have been rejected
#O BadRcptThrottle=20
#O BadRcptThrottle=0
# shall we get local names from our installed interfaces?
O DontProbeInterfaces=True
@ -440,7 +452,7 @@ O TrustedUser=smmsp
#O ControlSocketName=/var/spool/mqueue/.control
# Maximum MIME header length to protect MUAs
#O MaxMimeHeaderLength=2048/1024
#O MaxMimeHeaderLength=0/0
# Maximum length of the sum of all headers
#O MaxHeadersLength=32768
@ -463,9 +475,15 @@ O PidFile=/var/spool/clientmqueue/sm-client.pid
# lookup type to find information about local mailboxes
#O MailboxDatabase=pw
# override compile time flag REQUIRES_DIR_FSYNC
#O RequiresDirfsync=true
# list of authentication mechanisms
#O AuthMechanisms=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
# Authentication realm
#O AuthRealm
# default authentication information for outgoing connections
#O DefaultAuthInfo=/etc/mail/default-auth-info
@ -494,6 +512,8 @@ O PidFile=/var/spool/clientmqueue/sm-client.pid
#O ClientCertFile
# Client private key
#O ClientKeyFile
# File containing certificate revocation lists
#O CRLFile
# DHParameters (only required if DSA/DH is used)
#O DHParameters
# Random data source (required for systems without /dev/urandom under OpenSSL)
@ -944,6 +964,8 @@ R<$+> $* $@ $2
### check_relay -- check hostname/address on SMTP startup
######################################################################
SLocal_check_relay
Scheck_relay
R$* $: $1 $| $>"Local_check_relay" $1
@ -1086,6 +1108,7 @@ R$+ < @ $* $=R > $@ RELAY
# check for local user (i.e. unqualified address)
R$* $: <?> $1
R<?> $* < @ $+ > $: <REMOTE> $1 < @ $2 >
@ -1111,7 +1134,7 @@ R$=w $@ RELAY ... and see if it is local
# check client name: first: did it resolve?
R$* $: < $&{client_resolve} >
R<TEMP> $#TEMP $@ 4.7.1 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
R<TEMP> $#TEMP $@ 4.4.0 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
R<FORGED> $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}
R<FAIL> $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name}
R$* $: <@> $&{client_name}
@ -1151,6 +1174,28 @@ R$* $#error $@ 5.7.1 $: "550 " $&{auth_authen} " not allowed to act as " $&{au
######################################################################
SLocal_Relay_Auth
######################################################################
### srv_features: which features to offer to a client?
### (done in server)
######################################################################
Ssrv_features
######################################################################
### try_tls: try to use STARTTLS?
### (done in client)
######################################################################
Stry_tls
######################################################################
### tls_rcpt: is connection with server "good" enough?
### (done in client, per recipient)
###
### Parameters:
### $1: recipient
######################################################################
Stls_rcpt
######################################################################
@ -1205,6 +1250,10 @@ Sauthinfo
SLocal_localaddr
R$+ $: $>ParseRecipient $1
R$* < @ $+ > $* $#relay $@ ${MTAHost} $: $1 < @ $2 > $3
@ -1374,3 +1423,30 @@ 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)
# #
# # Copyright (c) 2001-2003 Sendmail, 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.
# #
# #
#
# #
# # This is the prototype file for a set-group-ID sm-msp sendmail that
# # acts as a initial mail submission program.
# #
#
# divert(0)dnl
# VERSIONID(`$Id: submit.mc,v 8.13 2003/09/10 22:12:48 ca Exp $')
# define(`confCF_VERSION', `Submit')dnl
# define(`__OSTYPE__',`')dnl dirty hack to keep proto.m4 from complaining
# define(`_USE_DECNET_SYNTAX_', `1')dnl support DECnet
# define(`confTIME_ZONE', `USE_TZ')dnl
# define(`confDONT_INIT_GROUPS', `True')dnl
# dnl
# dnl If you use IPv6 only, change [127.0.0.1] to [IPv6:::1]
# FEATURE(`msp', `[127.0.0.1]')dnl

View File

@ -15,7 +15,7 @@ divert(-1)
#
divert(0)dnl
VERSIONID(`$Id: submit.mc,v 8.6.2.7 2003/09/10 22:11:56 ca Exp $')
VERSIONID(`$Id: submit.mc,v 8.13 2003/09/10 22:12:48 ca Exp $')
define(`confCF_VERSION', `Submit')dnl
define(`__OSTYPE__',`')dnl dirty hack to keep proto.m4 from complaining
define(`_USE_DECNET_SYNTAX_', `1')dnl support DECnet

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998-2002, 2004 Sendmail, Inc. and its suppliers.
# All rights reserved.
#
# By using this file, you agree to the terms and conditions set
@ -10,7 +10,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: access_db.m4,v 8.24 2002/03/06 21:50:25 ca Exp $')
VERSIONID(`$Id: access_db.m4,v 8.26 2004/06/24 18:10:02 ca Exp $')
divert(-1)
define(`_ACCESS_TABLE_', `')
@ -33,9 +33,12 @@ ifelse(defn(`_ARG_'), `', `',
')
')
')
ifdef(`_GREET_PAUSE_',
`errprint(`*** WARNING: FEATURE(`greet_pause') before FEATURE(`access_db')
greet_pause will not use access_db!')')
LOCAL_CONFIG
# Access list database (for spam stomping)
Kaccess ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE -T`'_ATMPF_ MAIL_SETTINGS_DIR`access',
defn(`_ARG_'), `LDAP', `ldap -T`'_ATMPF_ -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=access)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -T`'_ATMPF_ -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=access)(sendmailMTAKey=%0))',
defn(`_NARG_'), `', `_ARG_', `_NARG_')

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
# Copyright (c) 2000-2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
#
# By using this file, you agree to the terms and conditions set
@ -10,7 +10,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: authinfo.m4,v 1.7 2001/03/16 00:51:25 gshapiro Exp $')
VERSIONID(`$Id: authinfo.m4,v 1.9 2002/06/27 23:23:57 gshapiro Exp $')
divert(-1)
define(`_AUTHINFO_TABLE_', `')
@ -18,5 +18,5 @@ define(`_AUTHINFO_TABLE_', `')
LOCAL_CONFIG
# authinfo list database: contains info for authentication as client
Kauthinfo ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`authinfo',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=authinfo)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=authinfo)(sendmailMTAKey=%0))',
`_ARG_')

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998, 1999, 2001-2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: bitdomain.m4,v 8.28 2001/03/16 00:51:25 gshapiro Exp $')
VERSIONID(`$Id: bitdomain.m4,v 8.30 2002/06/27 23:23:57 gshapiro Exp $')
divert(-1)
define(`_BITDOMAIN_TABLE_', `')
@ -21,5 +21,5 @@ define(`_BITDOMAIN_TABLE_', `')
LOCAL_CONFIG
# BITNET mapping table
Kbitdomain ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`bitdomain',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=bitdomain)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=bitdomain)(sendmailMTAKey=%0))',
`_ARG_')

View File

@ -0,0 +1,36 @@
divert(-1)
#
# Copyright (c) 2003, 2004 Sendmail, 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(0)
VERSIONID(`$Id: conncontrol.m4,v 1.4 2004/02/19 21:31:47 ca Exp $')
divert(-1)
ifdef(`_ACCESS_TABLE_', `
define(`_CONN_CONTROL_', `1')
ifelse(defn(`_ARG_'), `', `',
strcasecmp(defn(`_ARG_'), `nodelay'), `1',
`ifdef(`_DELAY_CHECKS_',
`
define(`_CONN_CONTROL_IMMEDIATE_', `1')
define(`_CONTROL_IMMEDIATE_', `1')
',
`errprint(`*** ERROR: FEATURE(`conncontrol', `nodelay') requires FEATURE(`delay_checks')')'
)',
`errprint(`*** ERROR: unknown parameter '"defn(`_ARG_')"` for FEATURE(`conncontrol')')')
define(`_FFR_SRCHLIST_A', `1')
ifelse(len(X`'_ARG2_), `1', `',
_ARG2_, `terminate', `define(`_CONN_CONTROL_REPLY', `421')',
`errprint(`*** ERROR: FEATURE(`conncontrol'): unknown argument '"_ARG2_"
)'
)
', `errprint(`*** ERROR: FEATURE(`conncontrol') requires FEATURE(`access_db')
')')
ifdef(`_CONN_CONTROL_REPLY',,`define(`_CONN_CONTROL_REPLY', `452')')

View File

@ -9,11 +9,10 @@ divert(-1)
#
#
dnl 8.13: ifdef(`DNSBL_MAP', `', `define(`DNSBL_MAP', `dns -R A')')
ifdef(`DNSBL_MAP', `', `define(`DNSBL_MAP', `host')')
ifdef(`DNSBL_MAP', `', `define(`DNSBL_MAP', `dns -R A')')
divert(0)
ifdef(`_DNSBL_R_',`dnl',`dnl
VERSIONID(`$Id: dnsbl.m4,v 8.28 2002/05/19 21:22:40 gshapiro Exp $')
VERSIONID(`$Id: dnsbl.m4,v 8.29 2002/08/09 21:02:08 ca Exp $')
define(`_DNSBL_R_',`')
LOCAL_CONFIG
# map for DNS based blacklist lookups

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998, 1999, 2001-2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: domaintable.m4,v 8.22 2001/03/16 00:51:25 gshapiro Exp $')
VERSIONID(`$Id: domaintable.m4,v 8.24 2002/06/27 23:23:57 gshapiro Exp $')
divert(-1)
define(`_DOMAIN_TABLE_', `')
@ -21,5 +21,5 @@ define(`_DOMAIN_TABLE_', `')
LOCAL_CONFIG
# Domain table (adding domains)
Kdomaintable ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`domaintable',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=domain)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=domain)(sendmailMTAKey=%0))',
`_ARG_')

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998, 1999, 2001-2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: genericstable.m4,v 8.21 2001/03/16 00:51:26 gshapiro Exp $')
VERSIONID(`$Id: genericstable.m4,v 8.23 2002/06/27 23:23:57 gshapiro Exp $')
divert(-1)
define(`_GENERICS_TABLE_', `')
@ -21,5 +21,5 @@ define(`_GENERICS_TABLE_', `')
LOCAL_CONFIG
# Generics table (mapping outgoing addresses)
Kgenerics ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`genericstable',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=generics)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=generics)(sendmailMTAKey=%0))',
`_ARG_')

View File

@ -0,0 +1,44 @@
divert(-1)
#
# Copyright (c) 2004 Sendmail, 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(0)
VERSIONID(`$Id: greet_pause.m4,v 1.4 2004/07/06 20:49:51 ca Exp $')
divert(-1)
ifelse(len(X`'_ARG_),`1',`ifdef(`_ACCESS_TABLE_', `',
`errprint(`*** ERROR: FEATURE(`greet_pause') requires FEATURE(`access_db')
')')')
define(`_GREET_PAUSE_', `')
LOCAL_RULESETS
######################################################################
### greet_pause: lookup pause time before 220 greeting
###
### Parameters:
### $1: {client_name}
### $2: {client_addr}
######################################################################
SLocal_greet_pause
Sgreet_pause
R$* $: <$1><?> $| $>"Local_greet_pause" $1
R<$*><?> $| $#$* $#$2
R<$*><?> $| $* $: $1
ifdef(`_ACCESS_TABLE_', `dnl
R$+ $| $+ $: $>D < $1 > <?> <! GreetPause> < $2 >
R $| $+ $: $>A < $1 > <?> <! GreetPause> <> empty client_name
R<?> <$+> $: $>A < $1 > <?> <! GreetPause> <> no: another lookup
ifelse(len(X`'_ARG_),`1',
`R<?> <$*> $@',
`R<?> <$*> $# _ARG_')
R<$* <TMPF>> <$*> $@
R<$+> <$*> $# $1',`dnl
R$* $# _ARG_')

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers.
# Copyright (c) 1999-2002, 2004 Sendmail, Inc. and its suppliers.
# All rights reserved.
#
# By using this file, you agree to the terms and conditions set
@ -10,24 +10,31 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: ldap_routing.m4,v 8.10 2002/03/27 22:17:43 ca Exp $')
VERSIONID(`$Id: ldap_routing.m4,v 8.14 2004/02/18 02:45:11 gshapiro Exp $')
divert(-1)
# Check first two arguments. If they aren't set, may need to warn in proto.m4
ifelse(len(X`'_ARG1_), `1', `define(`_LDAP_ROUTING_WARN_', `yes')')
ifelse(len(X`'_ARG2_), `1', `define(`_LDAP_ROUTING_WARN_', `yes')')
ifelse(len(X`'_ARG5_), `1', `', `define(`_LDAP_ROUTE_NODOMAIN_', `yes')')
# Check for third argument to indicate how to deal with non-existant
# LDAP records
ifelse(len(X`'_ARG3_), `1', `define(`_LDAP_ROUTING_', `_PASS_THROUGH_')',
_ARG3_, `passthru', `define(`_LDAP_ROUTING_', `_PASS_THROUGH_')',
_ARG3_, `sendertoo', `define(`_LDAP_ROUTING_', `_MUST_EXIST_')define(`_LDAP_SENDER_MUST_EXIST_')',
`define(`_LDAP_ROUTING_', `_MUST_EXIST_')')
# Check for fouth argument to indicate how to deal with +detail info
# Check for fourth argument to indicate how to deal with +detail info
ifelse(len(X`'_ARG4_), `1', `',
_ARG4_, `strip', `define(`_LDAP_ROUTE_DETAIL_', `_STRIP_')',
_ARG4_, `preserve', `define(`_LDAP_ROUTE_DETAIL_', `_PRESERVE_')')
# Check for sixth argument to indicate how to deal with tempfails
ifelse(len(X`'_ARG6_), `1', `define(`_LDAP_ROUTE_MAPTEMP_', `_QUEUE_')',
_ARG6_, `tempfail', `define(`_LDAP_ROUTE_MAPTEMP_', `_TEMPFAIL_')',
_ARG6_, `queue', `define(`_LDAP_ROUTE_MAPTEMP_', `_QUEUE_')')
LOCAL_CONFIG
# LDAP routing maps
Kldapmh ifelse(len(X`'_ARG1_), `1',

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998-2000, 2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
#
# By using this file, you agree to the terms and conditions set
@ -10,7 +10,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: local_lmtp.m4,v 8.16 2000/08/18 18:58:45 ca Exp $')
VERSIONID(`$Id: local_lmtp.m4,v 8.17 2002/11/17 04:41:04 ca Exp $')
divert(-1)
ifdef(`_MAILER_local_',
@ -21,7 +21,8 @@ define(`LOCAL_MAILER_PATH',
ifelse(defn(`_ARG_'), `',
ifdef(`confEBINDIR', confEBINDIR, `/usr/libexec')`/mail.local',
_ARG_))
define(`LOCAL_MAILER_FLAGS', `PSXfmnz9')
define(`LOCAL_MAILER_ARGS', `mail.local -l')
define(`LOCAL_MAILER_FLAGS', `PSXmnz9')
define(`LOCAL_MAILER_ARGS',
ifelse(len(X`'_ARG2_), `1', `mail.local -l', _ARG2_))
define(`LOCAL_MAILER_DSN_DIAGNOSTIC_CODE', `SMTP')
define(`_LOCAL_LMTP_', `1')

View File

@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: local_procmail.m4,v 8.21.42.1 2002/11/17 04:25:07 ca Exp $')
VERSIONID(`$Id: local_procmail.m4,v 8.22 2002/11/17 04:24:19 ca Exp $')
divert(-1)
ifdef(`_MAILER_local_',

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998, 1999, 2001-2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: mailertable.m4,v 8.23 2001/03/16 00:51:26 gshapiro Exp $')
VERSIONID(`$Id: mailertable.m4,v 8.25 2002/06/27 23:23:57 gshapiro Exp $')
divert(-1)
define(`_MAILER_TABLE_', `')
@ -21,5 +21,5 @@ define(`_MAILER_TABLE_', `')
LOCAL_CONFIG
# Mailer table (overriding domains)
Kmailertable ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`mailertable',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=mailer)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=mailer)(sendmailMTAKey=%0))',
`_ARG_')

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 2000-2002 Sendmail, Inc. and its suppliers.
# Copyright (c) 2000-2002, 2004 Sendmail, Inc. and its suppliers.
# All rights reserved.
#
# By using this file, you agree to the terms and conditions set
@ -10,7 +10,7 @@ divert(-1)
#
divert(0)dnl
VERSIONID(`$Id: msp.m4,v 1.32 2002/03/26 22:02:03 ca Exp $')
VERSIONID(`$Id: msp.m4,v 1.33 2004/02/09 22:32:38 ca Exp $')
divert(-1)
undefine(`ALIAS_FILE')
define(`confDELIVERY_MODE', `i')
@ -21,7 +21,9 @@ define(`confDONT_PROBE_INTERFACES', `True')
dnl ---------------------------------------------
dnl run as this user (even if called by root)
ifdef(`confRUN_AS_USER',,`define(`confRUN_AS_USER', `smmsp')')
ifdef(`confTRUSTED_USER',,`define(`confTRUSTED_USER', confRUN_AS_USER)')
ifdef(`confTRUSTED_USER',,`define(`confTRUSTED_USER',
`ifelse(index(confRUN_AS_USER,`:'), -1, `confRUN_AS_USER',
`substr(confRUN_AS_USER,0,index(confRUN_AS_USER,`:'))')')')
dnl ---------------------------------------------
dnl This queue directory must have the same group
dnl as sendmail and it must be group-writable.

View File

@ -0,0 +1,33 @@
divert(-1)
#
# Copyright (c) 2004 Sendmail, 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(0)
ifdef(`_MTAMARK_R',`dnl',`dnl
VERSIONID(`$Id: mtamark.m4,v 1.1 2004/03/22 19:22:40 ca Exp $')
LOCAL_CONFIG
define(`_MTAMARK_R',`')dnl
# map for MTA mark
Kmtamark dns -R TXT -a. -T<TMP> -r`'ifdef(`MTAMARK_TO',`MTAMARK_TO',`5')
')
divert(-1)
define(`_MTAMARK_RR_', `ifelse(len(X`'_ARG3_),`1',`_perm._smtp._srv',`_ARG3_')')dnl
define(`_MTAMARK_MSG_', `ifelse(len(X`'_ARG_),`1',`"550 Rejected: " $`'&{client_addr} " not listed as MTA"',`_ARG_')')dnl
define(`_MTAMARK_MSG_TMP_', `ifelse(_ARG2_,`t',`"451 Temporary lookup failure of " _MTAMARK_RR_.$`'&{client_addr}',`_ARG2_')')dnl
divert(8)
# DNS based IP MTA list
R$* $: $&{client_addr}
R$-.$-.$-.$- $: <?> $(mtamark _MTAMARK_RR_.$4.$3.$2.$1.in-addr.arpa. $: OK $)
R<?>1. $: OKSOFAR
R<?>0. $#error $@ 5.7.1 $: _MTAMARK_MSG_
ifelse(len(X`'_ARG2_),`1',
`R<?>$+<TMP> $: TMPOK',
`R<?>$+<TMP> $#error $@ 4.7.1 $: _MTAMARK_MSG_TMP_')
divert(-1)

View File

@ -0,0 +1,36 @@
divert(-1)
#
# Copyright (c) 2003, 2004 Sendmail, 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(0)
VERSIONID(`$Id: ratecontrol.m4,v 1.5 2004/02/19 21:31:47 ca Exp $')
divert(-1)
ifdef(`_ACCESS_TABLE_', `
define(`_RATE_CONTROL_', `1')
ifelse(defn(`_ARG_'), `', `',
strcasecmp(defn(`_ARG_'), `nodelay'), `1',
`ifdef(`_DELAY_CHECKS_',
`
define(`_RATE_CONTROL_IMMEDIATE_', `1')
define(`_CONTROL_IMMEDIATE_', `1')
',
`errprint(`*** ERROR: FEATURE(`ratecontrol', `nodelay') requires FEATURE(`delay_checks')')'
)',
`errprint(`*** ERROR: unknown parameter '"defn(`_ARG_')"` for FEATURE(`ratecontrol')')')
define(`_FFR_SRCHLIST_A', `1')
ifelse(len(X`'_ARG2_), `1', `',
_ARG2_, `terminate', `define(`_RATE_CONTROL_REPLY', `421')',
`errprint(`*** ERROR: FEATURE(`ratecontrol'): unknown argument '"_ARG2_"
)'
)
', `errprint(`*** ERROR: FEATURE(`ratecontrol') requires FEATURE(`access_db')
')')
ifdef(`_RATE_CONTROL_REPLY',,`define(`_RATE_CONTROL_REPLY', `452')')

View File

@ -0,0 +1,21 @@
divert(-1)
#
# Copyright (c) 2004 Sendmail, 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(0)
VERSIONID(`$Id: use_client_ptr.m4,v 1.1 2004/04/20 22:27:14 ca Exp $')
divert(-1)
# if defined, check_relay will use {client_ptr} instead of whatever
# is passed in as its first argument.
define(`_USE_CLIENT_PTR_', `1')
divert(0)

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998, 1999, 2001-2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: uucpdomain.m4,v 8.27 2001/03/16 00:51:26 gshapiro Exp $')
VERSIONID(`$Id: uucpdomain.m4,v 8.29 2002/06/27 23:23:57 gshapiro Exp $')
divert(-1)
define(`_UUDOMAIN_TABLE_', `')
@ -21,5 +21,5 @@ define(`_UUDOMAIN_TABLE_', `')
LOCAL_CONFIG
# UUCP domain table
Kuudomain ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`uudomain',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=uucpdomain)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=uucpdomain)(sendmailMTAKey=%0))',
`_ARG_')

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998, 1999, 2001-2002 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: virtusertable.m4,v 8.21 2001/03/16 00:51:26 gshapiro Exp $')
VERSIONID(`$Id: virtusertable.m4,v 8.23 2002/06/27 23:23:57 gshapiro Exp $')
divert(-1)
define(`_VIRTUSER_TABLE_', `')
@ -21,5 +21,5 @@ define(`_VIRTUSER_TABLE_', `')
LOCAL_CONFIG
# Virtual user table (maps incoming users)
Kvirtuser ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`virtusertable',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=virtuser)(sendmailMTAKey=%0))',
defn(`_ARG_'), `LDAP', `ldap -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject -k (&(objectClass=sendmailMTAMapObject)(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))(sendmailMTAMapName=virtuser)(sendmailMTAKey=%0))',
`_ARG_')

View File

@ -1,5 +1,5 @@
#
# Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -302,7 +302,8 @@ define(`confMILTER_MACROS_CONNECT', ``j, _, {daemon_name}, {if_name}, {if_addr}'
define(`confMILTER_MACROS_HELO', ``{tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cert_issuer}'')
define(`confMILTER_MACROS_ENVFROM', ``i, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, {mail_mailer}, {mail_host}, {mail_addr}'')
define(`confMILTER_MACROS_ENVRCPT', ``{rcpt_mailer}, {rcpt_host}, {rcpt_addr}'')
define(`confMILTER_MACROS_EOM', `{msg_id}')
divert(0)dnl
VERSIONID(`$Id: cfhead.m4,v 8.108.2.6 2003/12/05 02:26:47 ca Exp $')
VERSIONID(`$Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $')

View File

@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: proto.m4,v 8.649.2.30 2004/01/11 17:54:06 ca Exp $')
VERSIONID(`$Id: proto.m4,v 8.710 2004/07/27 17:32:48 ca Exp $')
# level CF_LEVEL config file format
V`'CF_LEVEL/ifdef(`VENDOR_NAME', `VENDOR_NAME', `Berkeley')
@ -197,7 +197,7 @@ ifdef(`_MACRO_MAP_', `', `# macro storage map
define(`_MACRO_MAP_', `1')dnl
Kmacro macro')
# possible values for TLS_connection in access map
C{tls}VERIFY ENCR', `dnl')
C{Tls}VERIFY ENCR', `dnl')
ifdef(`_CERT_REGEX_ISSUER_', `dnl
# extract relevant part from cert issuer
KCERTIssuer regex _CERT_REGEX_ISSUER_', `dnl')
@ -261,7 +261,7 @@ _OPTION(AliasFile, `ALIAS_FILE', `MAIL_SETTINGS_DIR`'aliases')
_OPTION(MinFreeBlocks, `confMIN_FREE_BLOCKS', `100')
# maximum message size
_OPTION(MaxMessageSize, `confMAX_MESSAGE_SIZE', `1000000')
_OPTION(MaxMessageSize, `confMAX_MESSAGE_SIZE', `0')
# substitution for space (blank) characters
_OPTION(BlankSub, `confBLANK_SUB', `_')
@ -425,14 +425,12 @@ _OPTION(Timeout.queuereturn, `confTO_QUEUERETURN', `5d')
_OPTION(Timeout.queuereturn.normal, `confTO_QUEUERETURN_NORMAL', `5d')
_OPTION(Timeout.queuereturn.urgent, `confTO_QUEUERETURN_URGENT', `2d')
_OPTION(Timeout.queuereturn.non-urgent, `confTO_QUEUERETURN_NONURGENT', `7d')
ifdef(`confTO_QUEUERETURN_DSN', `dnl
O Timeout.queuereturn.dsn=confTO_QUEUERETURN_DSN')
_OPTION(Timeout.queuereturn.dsn, `confTO_QUEUERETURN_DSN', `5d')
_OPTION(Timeout.queuewarn, `confTO_QUEUEWARN', `4h')
_OPTION(Timeout.queuewarn.normal, `confTO_QUEUEWARN_NORMAL', `4h')
_OPTION(Timeout.queuewarn.urgent, `confTO_QUEUEWARN_URGENT', `1h')
_OPTION(Timeout.queuewarn.non-urgent, `confTO_QUEUEWARN_NONURGENT', `12h')
ifdef(`confTO_QUEUEWARN_DSN', `dnl
O Timeout.queuewarn.dsn=confTO_QUEUEWARN_DSN')
_OPTION(Timeout.queuewarn.dsn, `confTO_QUEUEWARN_DSN', `4h')
_OPTION(Timeout.hoststatus, `confTO_HOSTSTATUS', `30m')
_OPTION(Timeout.resolver.retrans, `confTO_RESOLVER_RETRANS', `5s')
_OPTION(Timeout.resolver.retrans.first, `confTO_RESOLVER_RETRANS_FIRST', `5s')
@ -473,6 +471,9 @@ _OPTION(UserDatabaseSpec, `confUSERDB_SPEC', `MAIL_SETTINGS_DIR`'userdb')
# fallback MX host
_OPTION(FallbackMXhost, `confFALLBACK_MX', `fall.back.host.net')
# fallback smart host
_OPTION(FallbackSmartHost, `confFALLBACK_SMARTHOST', `fall.back.host.net')
# if we are the best MX host for a site, try it directly instead of config err
_OPTION(TryNullMXList, `confTRY_NULL_MX_LIST', `False')
@ -482,6 +483,9 @@ _OPTION(QueueLA, `confQUEUE_LA', `8')
# load average at which we refuse connections
_OPTION(RefuseLA, `confREFUSE_LA', `12')
# log interval when refusing connections for this long
_OPTION(RejectLogInterval, `confREJECT_LOG_INTERVAL', `3h')
# load average at which we delay connections; 0 means no limit
_OPTION(DelayLA, `confDELAY_LA', `0')
@ -491,6 +495,9 @@ _OPTION(MaxDaemonChildren, `confMAX_DAEMON_CHILDREN', `0')
# maximum number of new connections per second
_OPTION(ConnectionRateThrottle, `confCONNECTION_RATE_THROTTLE', `0')
# Width of the window
_OPTION(ConnectionRateWindowSize, `confCONNECTION_RATE_WINDOW_SIZE', `60s')
# work recipient factor
_OPTION(RecipientFactor, `confWORK_RECIPIENT_FACTOR', `30000')
@ -565,11 +572,11 @@ _OPTION(DeadLetterDrop, `confDEAD_LETTER_DROP', `/var/tmp/dead.letter')
_OPTION(RunAsUser, `confRUN_AS_USER', `sendmail')
# maximum number of recipients per SMTP envelope
_OPTION(MaxRecipientsPerMessage, `confMAX_RCPTS_PER_MESSAGE', `100')
_OPTION(MaxRecipientsPerMessage, `confMAX_RCPTS_PER_MESSAGE', `0')
# limit the rate recipients per SMTP envelope are accepted
# once the threshold number of recipients have been rejected
_OPTION(BadRcptThrottle, `confBAD_RCPT_THROTTLE', `20')
_OPTION(BadRcptThrottle, `confBAD_RCPT_THROTTLE', `0')
# shall we get local names from our installed interfaces?
_OPTION(DontProbeInterfaces, `confDONT_PROBE_INTERFACES', `False')
@ -587,7 +594,7 @@ _OPTION(TrustedUser, `confTRUSTED_USER', `root')
_OPTION(ControlSocketName, `confCONTROL_SOCKET_NAME', `/var/spool/mqueue/.control')
# Maximum MIME header length to protect MUAs
_OPTION(MaxMimeHeaderLength, `confMAX_MIME_HEADER_LENGTH', `2048/1024')
_OPTION(MaxMimeHeaderLength, `confMAX_MIME_HEADER_LENGTH', `0/0')
# Maximum length of the sum of all headers
_OPTION(MaxHeadersLength, `confMAX_HEADERS_LENGTH', `32768')
@ -610,9 +617,15 @@ _OPTION(XscriptFileBufferSize, `confXF_BUFFER_SIZE', `4096')
# lookup type to find information about local mailboxes
_OPTION(MailboxDatabase, `confMAILBOX_DATABASE', `pw')
# override compile time flag REQUIRES_DIR_FSYNC
_OPTION(RequiresDirfsync, `confREQUIRES_DIR_FSYNC', `true')
# list of authentication mechanisms
_OPTION(AuthMechanisms, `confAUTH_MECHANISMS', `EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5')
# Authentication realm
_OPTION(AuthRealm, `confAUTH_REALM', `')
# default authentication information for outgoing connections
_OPTION(DefaultAuthInfo, `confDEF_AUTH_INFO', `MAIL_SETTINGS_DIR`'default-auth-info')
@ -635,7 +648,7 @@ _OPTION(Milter.macros.connect, `confMILTER_MACROS_CONNECT', `')
_OPTION(Milter.macros.helo, `confMILTER_MACROS_HELO', `')
_OPTION(Milter.macros.envfrom, `confMILTER_MACROS_ENVFROM', `')
_OPTION(Milter.macros.envrcpt, `confMILTER_MACROS_ENVRCPT', `')
')
_OPTION(Milter.macros.eom, `confMILTER_MACROS_EOM', `')')
# CA directory
_OPTION(CACertPath, `confCACERT_PATH', `')
@ -649,6 +662,8 @@ _OPTION(ServerKeyFile, `confSERVER_KEY', `')
_OPTION(ClientCertFile, `confCLIENT_CERT', `')
# Client private key
_OPTION(ClientKeyFile, `confCLIENT_KEY', `')
# File containing certificate revocation lists
_OPTION(CRLFile, `confCRL', `')
# DHParameters (only required if DSA/DH is used)
_OPTION(DHParameters, `confDH_PARAMETERS', `')
# Random data source (required for systems without /dev/urandom under OpenSSL)
@ -685,6 +700,7 @@ ifdef(`confTRUSTED_USERS', `T`'confTRUSTED_USERS', `dnl')
#########################
ifdef(`confFROM_HEADER',, `define(`confFROM_HEADER', `$?x$x <$g>$|$g$.')')dnl
ifdef(`confMESSAGEID_HEADER',, `define(`confMESSAGEID_HEADER', `<$t.$i@$j>')')dnl
H?P?Return-Path: <$g>
HReceived: confRECEIVED_HEADER
H?D?Resent-Date: $a
@ -694,8 +710,8 @@ H?F?From: confFROM_HEADER
H?x?Full-Name: $x
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
H?M?Resent-Message-Id: confMESSAGEID_HEADER
H?M?Message-Id: confMESSAGEID_HEADER
#
######################################################################
@ -1429,13 +1445,21 @@ ifdef(`_LDAP_ROUTING_', `dnl
### Parsed address (user < @ domain . >)
######################################################################
# SMTP operation modes
C{SMTPOpModes} s d D
SLDAPExpand
# do the LDAP lookups
R<$+><$+><$*> $: <$(ldapmra $2 $: $)> <$(ldapmh $2 $: $)> <$1> <$2> <$3>
# look for temporary failures (return original address, MTA will queue up)
R<$* <TMPF>> <$*> <$+> <$+> <$*> $@ $3
R<$*> <$* <TMPF>> <$+> <$+> <$*> $@ $3
# look for temporary failures and...
R<$* <TMPF>> <$*> <$+> <$+> <$*> $: $&{opMode} $| TMPF <$&{addr_type}> $| $3
R<$*> <$* <TMPF>> <$+> <$+> <$*> $: $&{opMode} $| TMPF <$&{addr_type}> $| $3
ifelse(_LDAP_ROUTE_MAPTEMP_, `_TEMPFAIL_', `dnl
# ... temp fail RCPT SMTP commands
R$={SMTPOpModes} $| TMPF <e r> $| $+ $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."')
# ... return original address for MTA to queue up
R$* $| TMPF <$*> $| $+ $@ $3
# if mailRoutingAddress and local or non-existant mailHost,
# return the new mailRoutingAddress
@ -1475,11 +1499,12 @@ ifdef(`_LDAP_ROUTE_DETAIL_',
# try without +detail
R<> <> <$+> <$+ + $* @ $+> <> $@ $>LDAPExpand <$1> <$2 @ $4> <+$3>')dnl
ifdef(`_LDAP_ROUTE_NODOMAIN_', `dnl', `
# if still no mailRoutingAddress and no mailHost,
# try @domain
ifelse(_LDAP_ROUTE_DETAIL_, `_PRESERVE_', `dnl
R<> <> <$+> <$+ + $* @ $+> <> $@ $>LDAPExpand <$1> <@ $4> <+$3>')
R<> <> <$+> <$+ @ $+> <$*> $@ $>LDAPExpand <$1> <@ $3> <$4>
R<> <> <$+> <$+ @ $+> <$*> $@ $>LDAPExpand <$1> <@ $3> <$4>')
# if no mailRoutingAddress and no mailHost and this was a domain attempt,
ifelse(_LDAP_ROUTING_, `_MUST_EXIST_', `dnl
@ -1487,6 +1512,9 @@ ifelse(_LDAP_ROUTING_, `_MUST_EXIST_', `dnl
R<> <> <$+> <@ $+> <$*> $: <?> < $&{addr_type} > < $1 >
# only give error for envelope recipient
R<?> <e r> <$+> $#error $@ nouser $: "550 User unknown"
ifdef(`_LDAP_SENDER_MUST_EXIST_', `dnl
# and the sender too
R<?> <e s> <$+> $#error $@ nouser $: "550 User unknown"')
R<?> <$*> <$+> $@ $2',
`dnl
# return the original address
@ -1675,7 +1703,7 @@ R<$+> <$+> $: <$1> $2',`dnl')')
ifdef(`_RELAY_MX_SERVED_', `dnl
dnl do "we" ($=w) act as backup MX server for the destination domain?
R<NO> $* < @ $+ > $: <MX> < : $(mxserved $2 $) : > < $1 < @$2 > >
R<MX> < : $* <TEMP> : > $* $#TEMP $@ 4.7.1 $: "450 Can not check MX records for recipient host " $1
R<MX> < : $* <TEMP> : > $* $#TEMP $@ 4.4.0 $: "450 Can not check MX records for recipient host " $1
dnl yes: mark it as <RELAY>
R<MX> < $* : $=w. : $* > < $+ > $: <RELAY> $4
dnl no: put old <NO> mark back
@ -1691,8 +1719,20 @@ R<$+> $* $@ $2
### check_relay -- check hostname/address on SMTP startup
######################################################################
ifdef(`_CONTROL_IMMEDIATE_',`dnl
Scheck_relay
ifdef(`_RATE_CONTROL_IMMEDIATE_',`dnl
dnl workspace: ignored...
R$* $: $>"RateControl" dummy', `dnl')
ifdef(`_CONN_CONTROL_IMMEDIATE_',`dnl
dnl workspace: ignored...
R$* $: $>"ConnControl" dummy', `dnl')
dnl')
SLocal_check_relay
Scheck`'_U_`'relay
ifdef(`_USE_CLIENT_PTR_',`dnl
R$* $| $* $: $&{client_ptr} $| $2', `dnl')
R$* $: $1 $| $>"Local_check_relay" $1
R$* $| $* $| $#$* $#$3
R$* $| $* $| $* $@ $>"Basic_check_relay" $1 $| $2
@ -1715,10 +1755,9 @@ dnl workspace: <result-of-lookup> (<>|<{client_addr}>)
R<?> <$*> $: OK found nothing
dnl workspace: <result-of-lookup> (<>|<{client_addr}>) | OK
R<$={Accept}> <$*> $@ $1 return value of lookup
R<REJECT> <$*> $#error ifdef(`confREJECT_MSG', `$: "confREJECT_MSG"', `$@ 5.7.1 $: "550 Access denied"')
R<REJECT> <$*> $#error ifdef(`confREJECT_MSG', `$: confREJECT_MSG', `$@ 5.7.1 $: "550 Access denied"')
R<DISCARD> <$*> $#discard $: discard
ifdef(`_FFR_QUARANTINE',
`R<QUARANTINE:$+> <$*> $#error $@ quarantine $: $1', `dnl')
R<QUARANTINE:$+> <$*> $#error $@ quarantine $: $1
dnl error tag
R<ERROR:$-.$-.$-:$+> <$*> $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> <$*> $#error $: $1
@ -1734,6 +1773,14 @@ R$-.$-.$-.$- $: <?> $(host $4.$3.$2.$1._RBL_. $: OK $)
R<?>OK $: OKSOFAR
R<?>$+ $#error $@ 5.7.1 $: "550 Rejected: " $&{client_addr} " listed at _RBL_"',
`dnl')
ifdef(`_RATE_CONTROL_',`dnl
ifdef(`_RATE_CONTROL_IMMEDIATE_',`', `dnl
dnl workspace: ignored...
R$* $: $>"RateControl" dummy')', `dnl')
ifdef(`_CONN_CONTROL_',`dnl
ifdef(`_CONN_CONTROL_IMMEDIATE_',`',`dnl
dnl workspace: ignored...
R$* $: $>"ConnControl" dummy')', `dnl')
undivert(8)
######################################################################
@ -1866,9 +1913,8 @@ R<PERM> $* $#error $@ 5.1.8 $: "_CODE553 Domain of sender address " $&f " does
ifdef(`_ACCESS_TABLE_', `dnl
R<$={Accept}> $* $# $1 accept from access map
R<DISCARD> $* $#discard $: discard
ifdef(`_FFR_QUARANTINE',
`R<QUARANTINE:$+> $* $#error $@ quarantine $: $1', `dnl')
R<REJECT> $* $#error ifdef(`confREJECT_MSG', `$: "confREJECT_MSG"', `$@ 5.7.1 $: "550 Access denied"')
R<QUARANTINE:$+> $* $#error $@ quarantine $: $1
R<REJECT> $* $#error ifdef(`confREJECT_MSG', `$: confREJECT_MSG', `$@ 5.7.1 $: "550 Access denied"')
dnl error tag
R<ERROR:$-.$-.$-:$+> $* $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> $* $#error $: $1
@ -2007,8 +2053,7 @@ dnl maybe we should stop checks already here (if SPAM_xyx)?
R<$={SpamTag}> <$*> $: @ $2 mark address as no match')
R<REJECT> $* $#error $@ 5.2.1 $: confRCPTREJ_MSG
R<DISCARD> $* $#discard $: discard
ifdef(`_FFR_QUARANTINE',
`R<QUARANTINE:$+> $* $#error $@ quarantine $: $1', `dnl')
R<QUARANTINE:$+> $* $#error $@ quarantine $: $1
dnl error tag
R<ERROR:$-.$-.$-:$+> $* $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> $* $#error $: $1
@ -2053,7 +2098,11 @@ dnl workspace: <Result-of-lookup | ?> <localpart<@domain>>
R<?> <$+ < @ $+ >> $: <$(access $2 $: ? $)> <$1 < @ $2 >>',`dnl')',
`R$+ < @ $* $=R > $@ RELAY
ifdef(`_ACCESS_TABLE_', `dnl
R$+ < @ $+ > $: $>D <$2> <?> <+ To> <$1 < @ $2 >>',`dnl')')
ifdef(`_RELAY_FULL_ADDR_', `dnl
R$+ < @ $+ > $: $1 < @ $2 > $| $>SearchList <+ To> $| <F:$1@$2> <D:$2> <F:$1@> <>
R$+ < @ $+ > $| <$*> $: <$3> <$1 <@ $2>>
R$+ < @ $+ > $| $* $: <$3> <$1 <@ $2>>',
`R$+ < @ $+ > $: $>D <$2> <?> <+ To> <$1 < @ $2 >>')')')
ifdef(`_ACCESS_TABLE_', `dnl
dnl workspace: <Result-of-lookup | ?> <localpart<@domain>>
R<RELAY> $* $@ RELAY
@ -2065,7 +2114,7 @@ ifdef(`_RELAY_MX_SERVED_', `dnl
# allow relaying for hosts which we MX serve
R$+ < @ $+ > $: < : $(mxserved $2 $) : > $1 < @ $2 >
dnl this must not necessarily happen if the client is checked first...
R< : $* <TEMP> : > $* $#TEMP $@ 4.7.1 $: "450 Can not check MX records for recipient host " $1
R< : $* <TEMP> : > $* $#TEMP $@ 4.4.0 $: "450 Can not check MX records for recipient host " $1
R<$* : $=w . : $*> $* $@ RELAY
R< : $* : > $* $: $2',
`dnl')
@ -2158,7 +2207,7 @@ dnl the input. otherwise these rules must "clean up" the workspace.
# check client name: first: did it resolve?
dnl input: ignored
R$* $: < $&{client_resolve} >
R<TEMP> $#TEMP $@ 4.7.1 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
R<TEMP> $#TEMP $@ 4.4.0 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
R<FORGED> $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}
R<FAIL> $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name}
dnl ${client_resolve} should be OK, so go ahead
@ -2441,11 +2490,11 @@ dnl A: recursive address lookup (LookUpAddress) [not yet required]
# class with valid marks for SearchList
dnl if A is activated: add it
C{src}E F D U ifdef(`_FFR_SRCHLIST_A', `A')
C{Src}E F D U ifdef(`_FFR_SRCHLIST_A', `A')
SSearchList
# just call the ruleset with the name of the tag... nice trick...
dnl 2 3 4
R<$+> $| <$={src}:$*> <$*> $: <$1> $| <$4> $| $>$2 <$3> <?> <$1> <>
R<$+> $| <$={Src}:$*> <$*> $: <$1> $| <$4> $| $>$2 <$3> <?> <$1> <>
dnl workspace: <o tag> $| <rest> $| <result of lookup> <>
dnl no match and nothing left: return
R<$+> $| <> $| <?> <> $@ <?>
@ -2488,7 +2537,6 @@ R$* $#error $@ 5.7.1 $: "550 " $&{auth_authen} " not allowed to act as " $&{au
######################################################################
SLocal_Relay_Auth
ifdef(`_ACCESS_TABLE_', `dnl
######################################################################
### srv_features: which features to offer to a client?
### (done in server)
@ -2498,13 +2546,14 @@ ifdef(`_LOCAL_SRV_FEATURES_', `dnl
R$* $: $1 $| $>"Local_srv_features" $1
R$* $| $#$* $#$2
R$* $| $* $: $1', `dnl')
ifdef(`_ACCESS_TABLE_', `dnl
R$* $: $>D <$&{client_name}> <?> <! SRV_FEAT_TAG> <>
R<?>$* $: $>A <$&{client_addr}> <?> <! SRV_FEAT_TAG> <>
R<?>$* $: <$(access SRV_FEAT_TAG`'_TAG_DELIM_ $: ? $)>
R<?>$* $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
R<$* _ATMPF_>$* $#temp', `dnl')
R<$+>$* $# $1
R<$+>$* $# $1')
######################################################################
### try_tls: try to use STARTTLS?
@ -2515,14 +2564,15 @@ ifdef(`_LOCAL_TRY_TLS_', `dnl
R$* $: $1 $| $>"Local_try_tls" $1
R$* $| $#$* $#$2
R$* $| $* $: $1', `dnl')
ifdef(`_ACCESS_TABLE_', `dnl
R$* $: $>D <$&{server_name}> <?> <! TLS_TRY_TAG> <>
R<?>$* $: $>A <$&{server_addr}> <?> <! TLS_TRY_TAG> <>
R<?>$* $: <$(access TLS_TRY_TAG`'_TAG_DELIM_ $: ? $)>
R<?>$* $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
R<$* _ATMPF_>$* $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
R<NO>$* $#error $@ 5.7.1 $: "550 do not try TLS with " $&{server_name} " ["$&{server_addr}"]"
R<NO>$* $#error $@ 5.7.1 $: "550 do not try TLS with " $&{server_name} " ["$&{server_addr}"]"')
######################################################################
### tls_rcpt: is connection with server "good" enough?
### (done in client, per recipient)
@ -2536,6 +2586,7 @@ ifdef(`_LOCAL_TLS_RCPT_', `dnl
R$* $: $1 $| $>"Local_tls_rcpt" $1
R$* $| $#$* $#$2
R$* $| $* $: $1', `dnl')
ifdef(`_ACCESS_TABLE_', `dnl
dnl store name of other side
R$* $: $(macro {TLS_Name} $@ $&{server_name} $) $1
dnl canonify recipient address
@ -2637,10 +2688,10 @@ R$* $| <$*>$* $: $1 $| <$2>
dnl workspace: ${verify} $| <ResultOfLookup>
# create the appropriate error codes
dnl permanent or temporary error?
R$* $| <PERM + $={tls} $*> $: $1 $| <503:5.7.0> <$2 $3>
R$* $| <TEMP + $={tls} $*> $: $1 $| <403:4.7.0> <$2 $3>
R$* $| <PERM + $={Tls} $*> $: $1 $| <503:5.7.0> <$2 $3>
R$* $| <TEMP + $={Tls} $*> $: $1 $| <403:4.7.0> <$2 $3>
dnl default case depends on TLS_PERM_ERR
R$* $| <$={tls} $*> $: $1 $| <ifdef(`TLS_PERM_ERR', `503:5.7.0', `403:4.7.0')> <$2 $3>
R$* $| <$={Tls} $*> $: $1 $| <ifdef(`TLS_PERM_ERR', `503:5.7.0', `403:4.7.0')> <$2 $3>
dnl workspace: ${verify} $| [<SMTP:ESC>] <ResultOfLookup>
# deal with TLS handshake failures: abort
RSOFTWARE $| <$-:$+> $* $#error $@ $2 $: $1 " TLS handshake failed."
@ -2650,9 +2701,9 @@ RSOFTWARE $| $* $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`
R$* $| <$*> <VERIFY> $: <$2> <VERIFY> <> $1
dnl separate optional requirements
R$* $| <$*> <VERIFY + $+> $: <$2> <VERIFY> <$3> $1
R$* $| <$*> <$={tls}:$->$* $: <$2> <$3:$4> <> $1
R$* $| <$*> <$={Tls}:$->$* $: <$2> <$3:$4> <> $1
dnl separate optional requirements
R$* $| <$*> <$={tls}:$- + $+>$* $: <$2> <$3:$4> <$5> $1
R$* $| <$*> <$={Tls}:$- + $+>$* $: <$2> <$3:$4> <$5> $1
dnl some other value in access map: accept
dnl this also allows to override the default case (if used)
R$* $| $* $@ OK
@ -2821,6 +2872,50 @@ R$* $| <?>$* $@ no no authinfo available
R$* $| <$*> <> $# $2
dnl', `dnl')')
ifdef(`_RATE_CONTROL_',`dnl
######################################################################
### RateControl:
### Parameters: ignored
### return: $#error or OK
######################################################################
SRateControl
ifdef(`_ACCESS_TABLE_', `dnl
R$* $: <A:$&{client_addr}> <E:>
dnl also look up a default value via E:
R$+ $: $>SearchList <! ClientRate> $| $1 <>
dnl found nothing: stop here
R<?> $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
dnl use the generic routine (for now)
R<0> $@ OK no limit
R<$+> $: <$1> $| $(arith l $@ $&{client_rate} $@ $1 $)
dnl log this? Connection rate $&{client_rate} exceeds limit $1.
R<$+> $| FALSE $#error $@ 4.3.2 $: _RATE_CONTROL_REPLY Connection rate limit exceeded.
')')
ifdef(`_CONN_CONTROL_',`dnl
######################################################################
### ConnControl:
### Parameters: ignored
### return: $#error or OK
######################################################################
SConnControl
ifdef(`_ACCESS_TABLE_', `dnl
R$* $: <A:$&{client_addr}> <E:>
dnl also look up a default value via E:
R$+ $: $>SearchList <! ClientConn> $| $1 <>
dnl found nothing: stop here
R<?> $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
dnl use the generic routine (for now)
R<0> $@ OK no limit
R<$+> $: <$1> $| $(arith l $@ $&{client_connections} $@ $1 $)
dnl log this: Open connections $&{client_connections} exceeds limit $1.
R<$+> $| FALSE $#error $@ 4.3.2 $: _CONN_CONTROL_REPLY Too many open connections.
')')
undivert(9)dnl LOCAL_RULESETS
#
######################################################################

View File

@ -11,8 +11,8 @@ divert(-1)
# the sendmail distribution.
#
#
VERSIONID(`$Id: version.m4,v 8.92.2.26 2004/01/13 00:29:26 ca Exp $')
VERSIONID(`$Id: version.m4,v 8.117 2004/07/30 18:03:07 ca Exp $')
#
divert(0)
# Configuration version number
DZ8.12.11`'ifdef(`confCF_VERSION', `/confCF_VERSION')
DZ8.13.1`'ifdef(`confCF_VERSION', `/confCF_VERSION')

View File

@ -21,7 +21,7 @@ POPDIVERT
### USENET Mailer specification ###
####################################
VERSIONID(`$Id: usenet.m4,v 8.21.4.1 2003/03/03 22:53:03 ca Exp $')
VERSIONID(`$Id: usenet.m4,v 8.22 2003/02/20 21:16:13 ca Exp $')
Musenet, P=USENET_MAILER_PATH, F=_MODMF_(USENET_MAILER_FLAGS, `USENET'), S=EnvFromL, R=EnvToL,
_OPTINS(`USENET_MAILER_MAX', `M=', `, ')T=X-Usenet/X-Usenet/X-Unix,_USENET_QGRP

View File

@ -0,0 +1,22 @@
divert(-1)
#
# Copyright (c) 2003 Sendmail, 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(0)
VERSIONID(`$Id: unicos.m4,v 1.1 2003/04/21 17:03:51 ca Exp $')
define(`ALIAS_FILE', `/usr/lib/aliases')
define(`HELP_FILE', `/usr/lib/sendmail.hf')
define(`QUEUE_DIR', `/usr/spool/mqueue')
define(`STATUS_FILE', `/usr/lib/sendmail.st')
MODIFY_MAILER_FLAGS(`LOCAL', `+aSPpmnxXu')
MODIFY_MAILER_FLAGS(`SMTP', `+anpeLC')
define(`LOCAL_SHELL_FLAGS', `pxehu')
define(`confPID_FILE', `/etc/sendmail.pid')dnl

View File

@ -0,0 +1,22 @@
divert(-1)
#
# Copyright (c) 2003 Sendmail, 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(0)
VERSIONID(`$Id: unicosmk.m4,v 1.1 2003/04/21 17:03:51 ca Exp $')
define(`ALIAS_FILE', `/usr/lib/aliases')
define(`HELP_FILE', `/usr/lib/sendmail.hf')
define(`QUEUE_DIR', `/usr/spool/mqueue')
define(`STATUS_FILE', `/usr/lib/sendmail.st')
MODIFY_MAILER_FLAGS(`LOCAL' , `+aSPpmnxXu')
MODIFY_MAILER_FLAGS(`SMTP', `+anpeLC')
define(`LOCAL_SHELL_FLAGS', `lsDFMpxehuo')
define(`confPID_FILE', `/etc/sendmail.pid')dnl

View File

@ -0,0 +1,27 @@
divert(-1)
#
# Copyright (c) 2003 Sendmail, 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.
#
#
#
#
# Notes:
# - In UNICOSMP seems that TZ variable is needed that correct time is marked
# to syslog
#
divert(0)
VERSIONID(`$Id: unicosmp.m4,v 1.1 2003/04/21 17:03:51 ca Exp $')
_DEFIFNOT(`LOCAL_MAILER_FLAGS', `Ehm9')dnl
ifdef(`LOCAL_MAILER_ARGS',, `define(`LOCAL_MAILER_ARGS', `mail -s -d $u')')dnl
ifdef(`QUEUE_DIR',, `define(`QUEUE_DIR', /var/spool/mqueue)')dnl
ifdef(`STATUS_FILE',, `define(`STATUS_FILE', `/var/log/sendmail.st')')dnl
define(`LOCAL_MAILER_PATH', `/usr/bin/mail')dnl
define(`confTIME_ZONE', USE_TZ)dnl
define(`confEBINDIR', `/usr/lib')dnl

View File

@ -5,13 +5,12 @@
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
# $Id: sendmail.schema,v 8.19.2.1 2002/11/20 23:13:27 gshapiro Exp $
# $Id: sendmail.schema,v 8.21 2002/11/20 23:13:50 gshapiro Exp $
# Note that this schema is experimental at this point as it has had little
# public review. Therefore, it may change in future versions. Feedback
# via sendmail@sendmail.org is encouraged.
# OID arcs for Sendmail
# enterprise: 1.3.6.1.4.1
# sendmail: enterprise.6152
@ -88,6 +87,19 @@ attributetype ( 1.3.6.1.4.1.6152.10.3.1.16
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
# attribute sendmailMTAMapSearch cis
attributetype ( 1.3.6.1.4.1.6152.10.3.1.24
NAME 'sendmailMTAMapSearch'
DESC 'recursive search for values of a map entry'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
# attribute sendmailMTAMapURL cis
attributetype ( 1.3.6.1.4.1.6152.10.3.1.25
NAME 'sendmailMTAMapURL'
DESC 'recursive search URL for values of a map entry'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
#objectClass sendmailMTAMap
# requires
@ -110,18 +122,22 @@ objectclass ( 1.3.6.1.4.1.6152.10.3.2.11
# objectClass,
# sendmailMTAMapName,
# sendmailMTAKey,
# sendmailMTAMapValue,
# allows
# sendmailMTACluster,
# sendmailMTAHost,
# sendmailMTAMapValue,
# sendmailMTAMapSearch,
# sendmailMTAMapURL,
# Description
objectclass ( 1.3.6.1.4.1.6152.10.3.2.12
NAME 'sendmailMTAMapObject'
SUP sendmailMTAMap STRUCTURAL
DESC 'Sendmail MTA map object'
MUST ( sendmailMTAMapName $ sendmailMTAKey $ sendmailMTAMapValue )
MAY ( sendmailMTACluster $ sendmailMTAHost $ Description ) )
MUST ( sendmailMTAMapName $ sendmailMTAKey )
MAY ( sendmailMTACluster $ sendmailMTAHost $
sendmailMTAMapValue $ sendmailMTAMapSearch $
sendmailMTAMapURL $ Description ) )
###########################################################################
@ -145,6 +161,19 @@ attributetype ( 1.3.6.1.4.1.6152.10.3.1.20
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
# attribute sendmailMTAAliasSearch cis
attributetype ( 1.3.6.1.4.1.6152.10.3.1.26
NAME 'sendmailMTAAliasSearch'
DESC 'recursive search for values of an alias'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
# attribute sendmailMTAAliasURL cis
attributetype ( 1.3.6.1.4.1.6152.10.3.1.27
NAME 'sendmailMTAAliasURL'
DESC 'recursive search URL for values of an alias'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
#objectClass sendmailMTAAlias
# requires
@ -166,20 +195,23 @@ objectclass ( 1.3.6.1.4.1.6152.10.3.2.13
# requires
# objectClass,
# sendmailMTAKey,
# sendmailMTAAliasValue,
# allows
# sendmailMTAAliasGrouping,
# sendmailMTACluster,
# sendmailMTAHost,
# sendmailMTAAliasValue,
# sendmailMTAAliasSearch,
# sendmailMTAAliasURL,
# Description
objectclass ( 1.3.6.1.4.1.6152.10.3.2.14
NAME 'sendmailMTAAliasObject'
SUP sendmailMTAAlias STRUCTURAL
DESC 'Sendmail MTA alias object'
MUST ( sendmailMTAKey $ sendmailMTAAliasValue )
MAY ( sendmailMTAAliasGrouping $
sendmailMTACluster $ sendmailMTAHost $ Description ) )
MUST sendmailMTAKey
MAY ( sendmailMTAAliasGrouping $ sendmailMTACluster $
sendmailMTAHost $ sendmailMTAAliasValue $
sendmailMTAAliasSearch $ sendmailMTAAliasURL $ Description ) )
###########################################################################
#
@ -201,20 +233,37 @@ attributetype ( 1.3.6.1.4.1.6152.10.3.1.23
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
# attribute sendmailMTAClassSearch cis
attributetype ( 1.3.6.1.4.1.6152.10.3.1.28
NAME 'sendmailMTAClassSearch'
DESC 'recursive search for members of a class'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
# attribute sendmailMTAClassURL cis
attributetype ( 1.3.6.1.4.1.6152.10.3.1.29
NAME 'sendmailMTAClassURL'
DESC 'recursive search URL for members of a class'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
#objectClass sendmailMTAClass
# requires
# objectClass,
# sendmailMTAClassName,
# sendmailMTAClassValue,
# allows
# sendmailMTACluster,
# sendmailMTAHost,
# sendmailMTAClassValue,
# sendmailMTAClassSearch,
# sendmailMTAClassURL,
# Description
objectclass ( 1.3.6.1.4.1.6152.10.3.2.15
NAME 'sendmailMTAClass'
SUP sendmailMTA STRUCTURAL
DESC 'Sendmail MTA class definition'
MUST ( sendmailMTAClassName $ sendmailMTAClassValue )
MAY ( sendmailMTACluster $ sendmailMTAHost $ Description ) )
MUST sendmailMTAClassName
MAY ( sendmailMTACluster $ sendmailMTAHost $
sendmailMTAClassValue $ sendmailMTAClassSearch $
sendmailMTAClassURL $ Description ) )

View File

@ -27,7 +27,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# $Id: buildvirtuser,v 1.5.2.1 2003/03/15 23:30:26 gshapiro Exp $
# $Id: buildvirtuser,v 1.6 2003/03/15 23:30:09 gshapiro Exp $
=head1 NAME

View File

@ -1,17 +1,13 @@
#!/usr/local/bin/perl -w
#!/usr/bin/perl -w
# v 0.2-very-beta
# $Id: cidrexpand,v 8.4 2002/11/22 21:13:14 ca Exp $
#
# v 0.4
#
# 17 July 2000 Derek J. Balling (dredd@megacity.org)
#
# The $SENDMAIL flag tells the code to lump networks in sendmail format
# if applicable. If this flag is disabled, cidrexpand will literally create
# a single line for each entry, which may or may not be what you want. :)
# makes for a rather large hash table...
#
#
# Acts as a preparser on /etc/mail/access_db to allow you to use address/bit
# notation. Caveat: the address portion MUST be the start address or your
# results will NOT be what what you want.
# notation.
#
# If you have two overlapping CIDR blocks with conflicting actions
# e.g. 10.2.3.128/25 REJECT and 10.2.3.143 ACCEPT
@ -22,27 +18,35 @@
#
# Modifications
# -------------
# 5 Nov 2002 Richard Rognlie (richard@sendmail.com)
# 26 Jul 2001 Derek Balling (dredd@megacity.org)
# Now uses Net::CIDR because it makes life a lot easier.
#
# 5 Nov 2002 Richard Rognlie (richard@sendmail.com)
# Added code to deal with the prefix tags that may now be included in
# the access_db
#
# Added clarification in the notes for what to do if you have
# exceptions to a larger CIDR block.
#
# usage:
# usage:
# cidrexpand < /etc/mail/access | makemap -r hash /etc/mail/access
#
# Report bugs to: dredd@megacity.org
#
# Report bugs to: <dredd@megacity.org>
#
use strict;
use Net::CIDR;
my $spaceregex = '\s+';
while (my $arg = shift @ARGV)
{
if ($arg eq '-t')
{
if ($arg eq '-t')
{
$spaceregex = shift;
}
}
}
use strict;
@ -51,109 +55,40 @@ my $SENDMAIL = 1;
while (<>)
{
my ($prefix,$left,$right,$space);
my ($prefix,$left,$right,$space);
if (! /^(|\S\S*:)(\d+\.){3}\d+\/\d\d?$spaceregex.*/ )
{
if (! /^(|\S\S*:)(\d+\.){3}\d+\/\d\d?$spaceregex.*/ )
{
print;
}
else
{
}
else
{
($prefix,$left,$space,$right) = /^(|\S\S*:)((?:\d+\.){3}\d+\/\d\d?)($spaceregex)(.*)$/;
my @new_lefts = expand_network($left);
foreach my $nl (@new_lefts)
{
print "$prefix$nl$space$right\n";
}
}
}
}
sub expand_network
{
my ($network,$mask) = split /\//, shift;
my @diffs = calc_changes($network,$mask);
my ($first,$second,$third,$fourth) = split /\./, $network;
my @rc = ();
for my $f ($first..($first+$diffs[0]))
{
if ( ( $SENDMAIL ) and ($diffs[1] == 255))
my $left_input = shift;
my @rc = ($left_input);
my ($network,$mask) = split /\//, $left_input;
if (defined $mask)
{
my @parts = split /\./, $network;
while ($#parts < 3)
{
push @rc, "$f";
push @parts, "0";
}
else
{
for my $s ($second..($second+$diffs[1]))
{
if ( ($SENDMAIL) and ($diffs[2] == 255) )
{
push @rc,"$f\.$s";
}
else
{
for my $t ($third..($third+$diffs[2]))
{
if ( ($SENDMAIL) and ($diffs[3] == 255))
{
push @rc, "$f\.$s\.$t";
}
else
{
for my $fr ($fourth..($fourth+$diffs[3]))
{
push @rc, "$f\.$s\.$t\.$fr";
}
}
}
}
}
}
}
return @rc;
}
sub calc_changes
{
my ($network,$mask) = @_;
my @octs = split /\./, $network;
my ($first,$second,$third,$fourth) = (0,0,0,0);
my $power = 32 - $mask;
if ($mask > 24)
{
$fourth = 2**$power - 1;
}
elsif ($mask > 16)
{
$fourth = 255;
$third = 2**($power-8) - 1;
}
elsif ($mask > 8)
{
$fourth = 255;
$third = 255;
$second = 2**($power-16) - 1;
}
elsif ($mask > 0)
{
$fourth = 255;
$third = 255;
$second = 255;
$first = 2**($power-24) - 1;
}
elsif ($mask == 0)
{
$fourth = 255;
$third = 255;
$second = 255;
$first = 255;
}
return ($first,$second,$third,$fourth);
my $clean_input = join '.', @parts;
$clean_input .= "/$mask";
my @octets = Net::CIDR::cidr2octets($clean_input);
@rc = @octets;
}
return @rc;
}

View File

@ -6,9 +6,9 @@
.\" the sendmail distribution.
.\"
.\"
.\" $Id: qtool.8,v 8.17 2002/01/29 21:55:49 ca Exp $
.\" $Id: qtool.8,v 8.20 2004/06/28 17:49:41 ca Exp $
.\"
.TH QTOOL 8 "$Date: 2002/01/29 21:55:49 $"
.TH QTOOL 8 "$Date: 2004/06/28 17:49:41 $"
.SH NAME
qtool
\- manipulate sendmail queues
@ -56,7 +56,7 @@ Defaults to /etc/mail/sendmail.cf.
Delete all of the messages specified by source.
.TP
\fB\-e\fP \fIperl_expression\fP
Evalute \fIperl_expression\fP for each queue file as specified
Evaluate \fIperl_expression\fP for each queue file as specified
by \fIsource\fP. If \fIperl_expression\fP evaluates to true, then that
queue file is moved. See below for more detail on \fIperl_expression\fP.
.TP
@ -102,9 +102,6 @@ The size of the control file in bytes.
\fBcreation_time\fP
The time when the control file was created.
.TP
\fBcurrent_delay\fP
Current delay for queue delay algorithm if _FFR_QUEUEDELAY is enabled.
.TP
\fBdata_file_name\fP
The data file name (deprecated).
.TP
@ -173,11 +170,7 @@ Original recipient (ORCPT= parameter).
Adjusted priority of message.
.TP
\fBquarantine_reason\fP
Quarantine reason for quarantined (held) envelopes if _FFR_QUARANTINE is
enabled.
.TP
\fBqueue_delay\fP
Queue delay algorithm if _FFR_QUEUEDELAY is enabled.
Quarantine reason for quarantined (held) envelopes.
.TP
\fBrecipient\fP
Array of character flags followed by colon and recipient name. Flags:

View File

@ -3,7 +3,7 @@
## Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
## All rights reserved.
##
## $Id: qtool.pl,v 8.27 2002/01/29 21:55:49 ca Exp $
## $Id: qtool.pl,v 8.28 2002/06/27 23:06:16 gshapiro Exp $
##
use strict;
use File::Basename;
@ -485,7 +485,6 @@ sub parse
'E' => 'error_recipient',
'F' => 'flags',
'H' => 'parse_header',
'G' => 'queue_delay',
'I' => 'inode_number',
'K' => 'next_delivery_time',
'L' => 'content-length',

View File

@ -0,0 +1,67 @@
#!/usr/bin/perl -w
#
# Contributed by Bastiaan Bakker for SOCKETMAP
# $Id: socketmapClient.pl,v 1.1 2003/05/21 15:36:33 ca Exp $
use strict;
use IO::Socket;
die "usage: $0 <connection> <mapname> <key> [<key2> ...]" if (@ARGV < 3);
my $connection = shift @ARGV;
my $mapname = shift @ARGV;
my $sock;
if ($connection =~ /tcp:(.+):([0-9]*)/) {
$sock = new IO::Socket::INET (
PeerAddr => $1,
PeerPort => $2,
Proto => 'tcp',
);
} elsif ($connection =~ /((unix)|(local)):(.+)/) {
$sock = new IO::Socket::UNIX (
Type => SOCK_STREAM,
Peer => $4
);
} else {
die "unrecognized connection specification $connection";
}
die "Could not create socket: $!\n" unless $sock;
while(my $key = shift @ARGV) {
my $request = "$mapname $key";
netstringWrite($sock, $request);
$sock->flush();
my $response = netstringRead($sock);
print "$key => $response\n";
}
$sock->close();
sub netstringWrite {
my $sock = shift;
my $data = shift;
print $sock length($data).':'.$data.',';
}
sub netstringRead {
my $sock = shift;
my $saveSeparator = $/;
$/ = ':';
my $dataLength = <$sock>;
die "cannot read netstring length" unless defined($dataLength);
chomp $dataLength;
my $data;
if ($sock->read($data, $dataLength) == $dataLength) {
($sock->getc() eq ',') or die "data misses closing ,";
} else {
die "received only ".length($data)." of $dataLength bytes";
}
$/ = $saveSeparator;
return $data;
}

View File

@ -0,0 +1,98 @@
#!/usr/bin/perl -w
#
# Contributed by Bastiaan Bakker for SOCKETMAP
# $Id: socketmapServer.pl,v 1.1 2003/05/21 15:36:33 ca Exp $
use strict;
use IO::Socket;
die "usage: $0 <connection>" if (@ARGV < 1);
my $connection = shift @ARGV;
my $sock;
if ($connection =~ /tcp:(.+):([0-9]*)/) {
$sock = new IO::Socket::INET (
LocalAddr => $1,
LocalPort => $2,
Proto => 'tcp',
Listen => 32,
ReuseAddr => 1
);
} elsif ($connection =~ /((unix)|(local)):(.+)/) {
unlink($4);
$sock = new IO::Socket::UNIX (
Type => SOCK_STREAM,
Local => $4,
Listen => 32
);
} else {
die "unrecognized connection specification $connection";
}
while(my $client = $sock->accept()) {
my $childpid = fork();
if ($childpid) {
$client->close();
} else {
die "can't fork $!" unless defined($childpid);
$sock->close();
handleConnection($client);
$client->close();
exit;
}
}
$sock->close();
sub handleConnection {
my $client = shift;
$client->autoflush(1);
while(!eof($client)) {
eval {
my $request = netstringRead($client);
my ($mapName, $key) = split(' ', $request);
my $value = mapLookup($mapName, $key);
my $result = (defined($value)) ? "OK $value" : "NOTFOUND";
netstringWrite($client, $result);
};
if ($@) {
print STDERR "$@\n";
last;
}
}
}
sub mapLookup {
my %mapping = ('bastiaan.bakker@example.com' => 'bastiaan',
'wolter.eldering@example.com' => 'wolter@other.example.com');
my $mapName = shift;
my $key = shift;
my $value = ($mapName eq "virtuser") ? $mapping{$key} : undef;
return $value;
}
sub netstringWrite {
my $sock = shift;
my $data = shift;
print $sock length($data).':'.$data.',';
}
sub netstringRead {
my $sock = shift;
my $saveSeparator = $/;
$/ = ':';
my $dataLength = <$sock>;
die "cannot read netstring length" unless defined($dataLength);
chomp $dataLength;
my $data;
if ($sock->read($data, $dataLength) == $dataLength) {
($sock->getc() eq ',') or die "data misses closing ,";
} else {
die "received only ".length($data)." of $dataLength bytes";
}
$/ = $saveSeparator;
return $data;
}

View File

@ -1,4 +1,4 @@
# $Id: Makefile,v 8.14 2002/01/07 22:24:36 gshapiro Exp $
# $Id: Makefile,v 8.15 2004/07/20 20:25:10 ca Exp $
DIR= smm/08.sendmailop
SRCS= op.me
@ -25,6 +25,7 @@ op.ps: ${SRCS}
op.txt: ${SRCS}
rm -f $@
@echo "Note: see README file in case of errors."
${PIC} ${SRCS} | ${EQNASCII} | ${ROFFASCII} | ${ULASCII} > $@
op.pdf: op.ps

View File

@ -0,0 +1,13 @@
Known Problems with some *roff versions
If you encounter the error:
Unknown escape sequence in input: 33, 133
when trying to create op.txt then set the GROFF_NO_SGR environment
variable (see grotty(1) man page), e.g.,
csh% setenv GROFF_NO_SGR 1
sh$ GROFF_NO_SGR=1; export GROFF_NO_SGR
$Id: README,v 8.1 2004/07/20 20:25:10 ca Exp $

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
dnl $Id: Makefile.m4,v 1.4.6.1 2002/06/21 21:58:27 ca Exp $
dnl $Id: Makefile.m4,v 1.5 2002/06/21 22:01:30 ca Exp $
include(confBUILDTOOLSDIR`/M4/switch.m4')
define(`confREQUIRE_LIBSM', `true')

View File

@ -1,4 +1,4 @@
.\" Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
.\" Copyright (c) 2000-2001, 2003 Sendmail, Inc. and its suppliers.
.\" All rights reserved.
.\"
.\" By using this file, you agree to the terms and conditions set
@ -6,9 +6,9 @@
.\" the sendmail distribution.
.\"
.\"
.\" $Id: editmap.8,v 1.8.4.1 2003/03/15 23:38:57 gshapiro Exp $
.\" $Id: editmap.8,v 1.9 2003/02/01 17:07:42 ca Exp $
.\"
.TH EDITMAP 8 "$Date: 2003/03/15 23:38:57 $"
.TH EDITMAP 8 "$Date: 2003/02/01 17:07:42 $"
.SH NAME
.B editmap
\- query and edit single records in database maps for sendmail

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers.
* Copyright (c) 1999-2004 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
@ -7,7 +7,7 @@
* the sendmail distribution.
*
*
* $Id: mfapi.h,v 8.44.2.4 2003/10/20 21:51:49 msk Exp $
* $Id: mfapi.h,v 8.59 2004/07/07 21:41:31 ca Exp $
*/
/*
@ -17,14 +17,23 @@
#ifndef _LIBMILTER_MFAPI_H
# define _LIBMILTER_MFAPI_H 1
# include <sys/types.h>
#ifndef SMFI_VERSION
# define SMFI_VERSION 2 /* version number */
#endif /* ! SMFI_VERSION */
# include <sys/types.h>
# include <sys/socket.h>
# include "libmilter/mfdef.h"
#include "libmilter/mfdef.h"
# define LIBMILTER_API extern
/* Only need to export C interface if used by C++ source code */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifndef _SOCK_ADDR
# define _SOCK_ADDR struct sockaddr
#endif /* ! _SOCK_ADDR */
@ -66,6 +75,19 @@ typedef int sfsistat;
# endif /* __STDC__ */
#endif /* __P */
#if SM_CONF_STDBOOL_H
# include <stdbool.h>
#else /* SM_CONF_STDBOOL_H */
# ifndef __cplusplus
# ifndef bool
# ifndef __bool_true_false_are_defined
typedef int bool;
# define __bool_true_false_are_defined 1
# endif /* ! __bool_true_false_are_defined */
# endif /* bool */
# endif /* ! __cplusplus */
#endif /* SM_CONF_STDBOOL_H */
/*
** structure describing one milter
*/
@ -105,11 +127,19 @@ struct smfiDesc
/* connection cleanup */
sfsistat (*xxfi_close) SM__P((SMFICTX *));
#if SMFI_VERSION > 2
/* any unrecognized or unimplemented command filter */
sfsistat (*xxfi_unknown) SM__P((SMFICTX *, char *));
#endif /* SMFI_VERSION > 2 */
#if SMFI_VERSION > 3
/* any unrecognized or unimplemented command filter */
sfsistat (*xxfi_data) SM__P((SMFICTX *));
#endif /* SMFI_VERSION > 3 */
};
#if _FFR_SMFI_OPENSOCKET
LIBMILTER_API int smfi_opensocket __P((bool));
#endif /* _FFR_SMFI_OPENSOCKET */
LIBMILTER_API int smfi_register __P((struct smfiDesc));
LIBMILTER_API int smfi_main __P((void));
LIBMILTER_API int smfi_setbacklog __P((int));
@ -117,8 +147,9 @@ LIBMILTER_API int smfi_setdbg __P((int));
LIBMILTER_API int smfi_settimeout __P((int));
LIBMILTER_API int smfi_setconn __P((char *));
LIBMILTER_API int smfi_stop __P((void));
#define SMFI_VERSION 2 /* version number */
#if _FFR_MAXDATASIZE
LIBMILTER_API size_t smfi_setmaxdatasize __P((size_t));
#endif /* _FFR_MAXDATASIZE */
/*
** What the filter might do -- values to be ORed together for
@ -132,9 +163,7 @@ LIBMILTER_API int smfi_stop __P((void));
#define SMFIF_ADDRCPT 0x00000004L /* filter may add recipients */
#define SMFIF_DELRCPT 0x00000008L /* filter may delete recipients */
#define SMFIF_CHGHDRS 0x00000010L /* filter may change/delete headers */
#if _FFR_QUARANTINE
# define SMFIF_QUARANTINE 0x00000020L /* filter may quarantine envelope */
#endif /* _FFR_QUARANTINE */
#define SMFIF_QUARANTINE 0x00000020L /* filter may quarantine envelope */
/*
** Continue processing message/connection.
@ -230,6 +259,16 @@ extern sfsistat xxfi_envrcpt __P((SMFICTX *, char **));
** Later arguments are the ESMTP arguments.
*/
/* unknown command filter */
extern sfsistat *xxfi_unknown __P((SMFICTX *, char *));
/*
** xxfi_unknown(ctx, arg) Invoked when SMTP command is not recognized or not
** implemented.
** char *arg; Null-terminated SMTP command
*/
/* header filter */
extern sfsistat xxfi_header __P((SMFICTX *, char *, char *));
@ -311,14 +350,12 @@ LIBMILTER_API char * smfi_getsymval __P((SMFICTX *, char *));
LIBMILTER_API int smfi_setreply __P((SMFICTX *, char *, char *, char *));
#if _FFR_MULTILINE
/*
** Alternatively, smfi_setmlreply can be called if a multi-line SMTP reply
** is needed.
*/
LIBMILTER_API int smfi_setmlreply __P((SMFICTX *, const char *, const char *, ...));
#endif /* _FFR_MULTILINE */
/*
** Set the specific reply code to be used in response to the active
@ -342,10 +379,9 @@ LIBMILTER_API int smfi_setmlreply __P((SMFICTX *, const char *, const char *, ..
LIBMILTER_API int smfi_addheader __P((SMFICTX *, char *, char *));
/*
** Add a header to the message. This header is not passed to other
** filters. It is not checked for standards compliance; the mail filter
** must ensure that no protocols are violated as a result of adding this
** header.
** Add a header to the message. It is not checked for standards
** compliance; the mail filter must ensure that no protocols are violated
** as a result of adding this header.
**
** SMFICTX *ctx; Opaque context structure
** char *headerf; Header field name
@ -365,6 +401,19 @@ LIBMILTER_API int smfi_chgheader __P((SMFICTX *, char *, int, char *));
** char *headerv; New header field value (empty for delete header)
*/
LIBMILTER_API int smfi_insheader __P((SMFICTX *, int, char *, char *));
/*
** Insert a header into the message. It is not checked for standards
** compliance; the mail filter must ensure that no protocols are violated
** as a result of adding this header.
**
** SMFICTX *ctx; Opaque context structure
** int idx; index into the header list where the insertion should happen
** char *headerh; Header field name
** char *headerv; Header field value
*/
LIBMILTER_API int smfi_addrcpt __P((SMFICTX *, char *));
/*
@ -413,7 +462,6 @@ LIBMILTER_API int smfi_replacebody __P((SMFICTX *, unsigned char *, int));
** xxfi_abort is called. This can be used to reset state.
*/
#if _FFR_QUARANTINE
/*
** Quarantine an envelope
**
@ -422,7 +470,6 @@ LIBMILTER_API int smfi_replacebody __P((SMFICTX *, unsigned char *, int));
*/
LIBMILTER_API int smfi_quarantine __P((SMFICTX *ctx, char *reason));
#endif /* _FFR_QUARANTINE */
/*
** Connection-private data (specific to an SMTP connection) can be
@ -441,5 +488,8 @@ LIBMILTER_API int smfi_setpriv __P((SMFICTX *, void *));
LIBMILTER_API void *smfi_getpriv __P((SMFICTX *));
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* ! _LIBMILTER_MFAPI_H */

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1999-2001 Sendmail, Inc. and its suppliers.
* Copyright (c) 1999-2004 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
@ -7,7 +7,7 @@
* the sendmail distribution.
*
*
* $Id: mfdef.h,v 8.11.2.1 2002/11/11 23:22:28 ca Exp $
* $Id: mfdef.h,v 8.21 2004/07/07 21:41:31 ca Exp $
*/
/*
@ -21,14 +21,11 @@
# define MILTER_LEN_BYTES 4 /* length of 32 bit integer in bytes */
# define MILTER_OPTLEN (MILTER_LEN_BYTES * 3) /* length of options */
# define MILTER_CHUNK_SIZE 65535 /* body chunk size */
# define MILTER_MAX_DATA_SIZE 65535 /* default milter command data limit */
/* These apply to SMFIF_* flags */
#define SMFI_V1_ACTS 0x0000000FL /* The actions of V1 filter */
#if _FFR_QUARANTINE
# define SMFI_V2_ACTS 0x0000003FL /* The actions of V2 filter */
#else /* _FFR_QUARANTINE */
# define SMFI_V2_ACTS 0x0000001FL /* The actions of V2 filter */
#endif /* _FFR_QUARANTINE */
#define SMFI_V2_ACTS 0x0000003FL /* The actions of V2 filter */
#define SMFI_CURR_ACTS SMFI_V2_ACTS /* The current version */
/* address families */
@ -50,6 +47,12 @@
# define SMFIC_OPTNEG 'O' /* Option negotiation */
# define SMFIC_QUIT 'Q' /* QUIT */
# define SMFIC_RCPT 'R' /* RCPT to */
# if SMFI_VERSION > 3
# define SMFIC_DATA 'T' /* DATA */
# endif /* SMFI_VERSION > 3 */
# if SMFI_VERSION > 2
# define SMFIC_UNKNOWN 'U' /* Any unknown command */
# endif /* SMFI_VERSION > 2 */
/* actions (replies) */
# define SMFIR_ADDRCPT '+' /* add recipient */
@ -62,14 +65,11 @@
# define SMFIR_PROGRESS 'p' /* progress */
# define SMFIR_REJECT 'r' /* reject */
# define SMFIR_TEMPFAIL 't' /* tempfail */
# if _FFR_MILTER_421
# define SMFIR_SHUTDOWN '4' /* 421: shutdown (internal to MTA) */
# endif /* _FFR_MILTER_421 */
# define SMFIR_SHUTDOWN '4' /* 421: shutdown (internal to MTA) */
# define SMFIR_ADDHEADER 'h' /* add header */
# define SMFIR_INSHEADER 'i' /* insert header */
# define SMFIR_REPLYCODE 'y' /* reply code etc */
# if _FFR_QUARANTINE
# define SMFIR_QUARANTINE 'q' /* quarantine */
# endif /* _FFR_QUARANTINE */
# define SMFIR_QUARANTINE 'q' /* quarantine */
/* What the MTA can send/filter wants in protocol */
# define SMFIP_NOCONNECT 0x00000001L /* MTA should not send connect info */
@ -79,9 +79,16 @@
# define SMFIP_NOBODY 0x00000010L /* MTA should not send body */
# define SMFIP_NOHDRS 0x00000020L /* MTA should not send headers */
# define SMFIP_NOEOH 0x00000040L /* MTA should not send EOH */
# if _FFR_MILTER_NOHDR_RESP
# define SMFIP_NOHREPL 0x00000080L /* No reply for headers */
# endif /* _FFR_MILTER_NOHDR_RESP */
# define SMFI_V1_PROT 0x0000003FL /* The protocol of V1 filter */
# define SMFI_V2_PROT 0x0000007FL /* The protocol of V2 filter */
# define SMFI_CURR_PROT SMFI_V2_PROT /* The current version */
# if _FFR_MILTER_NOHDR_RESP
# define SMFI_CURR_PROT 0x000000FFL /* The current version */
# else /* _FFR_MILTER_NOHDR_RESP */
# define SMFI_CURR_PROT SMFI_V2_PROT /* The current version */
# endif /* _FFR_MILTER_NOHDR_RESP */
#endif /* !_LIBMILTER_MFDEF_H */

View File

@ -7,7 +7,7 @@
* the sendmail distribution.
*
*
* $Id: milter.h,v 8.37.2.3 2003/12/02 00:19:51 msk Exp $
* $Id: milter.h,v 8.39 2003/12/02 00:21:42 msk Exp $
*/
/*
@ -25,11 +25,7 @@
typedef pthread_t sthread_t;
typedef int socket_t;
#if _FFR_MILTER_MACROS_EOM
# define MAX_MACROS_ENTRIES 5 /* max size of macro pointer array */
#else /* _FFR_MILTER_MACROS_EOM */
# define MAX_MACROS_ENTRIES 4 /* max size of macro pointer array */
#endif /* _FFR_MILTER_MACROS_EOM */
/*
** context for milter

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: smdb.h,v 8.40.2.1 2002/10/05 17:04:51 ca Exp $
* $Id: smdb.h,v 8.41 2002/09/24 19:53:28 ca Exp $
*
*/

View File

@ -10,14 +10,10 @@
* the sendmail distribution.
*
*
* $Id: mailstats.h,v 8.18 2001/11/21 13:39:10 gshapiro Exp $
* $Id: mailstats.h,v 8.19 2002/06/27 22:47:22 gshapiro Exp $
*/
#if _FFR_QUARANTINE
# define STAT_VERSION 4
#else /* _FFR_QUARANTINE */
# define STAT_VERSION 3
#endif /* _FFR_QUARANTINE */
#define STAT_VERSION 4
#define STAT_MAGIC 0x1B1DE
/*
@ -39,7 +35,5 @@ struct statistics
long stat_bt[MAXMAILERS]; /* kbytes to each mailer */
long stat_nr[MAXMAILERS]; /* # rejects by each mailer */
long stat_nd[MAXMAILERS]; /* # discards by each mailer */
#if _FFR_QUARANTINE
long stat_nq[MAXMAILERS]; /* # quarantines by each mailer */
#endif /* _FFR_QUARANTINE */
};

View File

@ -10,7 +10,7 @@
* the sendmail distribution.
*
*
* $Id: sendmail.h,v 8.67 2001/09/08 01:20:57 gshapiro Exp $
* $Id: sendmail.h,v 8.68 2002/07/01 22:18:53 gshapiro Exp $
*/
/*
@ -55,6 +55,7 @@
#define SFF_NOWRFILES 0x00010000L /* disallow o readable files */
#define SFF_NOTEXCL 0x00020000L /* creates don't need to be exclusive */
#define SFF_EXECOK 0x00040000L /* executable files are ok (E_SM_ISEXEC) */
#define SFF_NBLOCK 0x00080000L /* use a non-blocking lock */
#define SFF_NORFILES (SFF_NOGRFILES|SFF_NOWRFILES)
/* pseudo-flags */

View File

@ -7,7 +7,7 @@
* the sendmail distribution.
*
*
* $Id: bdb.h,v 1.1.2.4 2003/03/06 16:27:38 ca Exp $
* $Id: bdb.h,v 1.4 2003/03/06 16:30:05 ca Exp $
*/
#ifndef SM_BDB_H

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: cdefs.h,v 1.15.2.1 2003/12/05 22:44:17 ca Exp $
* $Id: cdefs.h,v 1.16 2003/12/05 22:45:25 ca Exp $
*/
/*

View File

@ -10,7 +10,7 @@
* the sendmail distribution.
*
*
* $Id: conf.h,v 1.90.2.20 2004/01/07 00:52:16 ca Exp $
* $Id: conf.h,v 1.116 2004/07/26 18:08:35 ca Exp $
*/
/*
@ -436,6 +436,8 @@ typedef int pid_t;
# endif /* SOLARIS >= 20800 || (SOLARIS < 10000 && SOLARIS >= 208) */
# if SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209)
# define HASURANDOMDEV 1 /* /dev/[u]random added in S9 */
# define HASCLOSEFROM 1 /* closefrom(3c) added in S9 */
# define HASFDWALK 1 /* fdwalk(3c) added in S9 */
# endif /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */
# if SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210)
# define HASUNSETENV 1 /* unsetenv() added in S10 */
@ -481,7 +483,7 @@ extern char *getenv();
# else /* SUNOS403 */
/* 4.1.x specifics */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# endif /* SUNOS403 */
@ -510,7 +512,7 @@ extern char *getenv();
# define LA_TYPE LA_DGUX
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define IP_SRCROUTE 0 /* does not have <netinet/ip_var.h> */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) */
@ -714,8 +716,7 @@ typedef int pid_t;
# endif /* NeXT */
/*
** Apple Darwin (aka Rhapsody)
**
** Apple Darwin
** Contributed by Wilfredo Sanchez <wsanchez@mit.edu>
*/
@ -725,7 +726,7 @@ typedef int pid_t;
# define HASFLOCK 1 /* has flock(2) */
# define HASUNAME 1 /* has uname(2) */
# define HASUNSETENV 1 /* has unsetenv(3) */
# define HASSETSID 1 /* has the setsid(2) */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) */
# define HASSETVBUF 1 /* has setvbuf (3) */
# define HASSETREUID 0 /* setreuid(2) unusable */
@ -794,7 +795,7 @@ extern unsigned int sleepX __P((unsigned int seconds));
# include <paths.h>
# define HASUNSETENV 1 /* has the unsetenv(3) call */
# define HASSETREUID 0 /* BSD-OS has broken setreuid(2) emulation */
# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define USESETEUID 1 /* has usable seteuid(2) call */
# define HASFCHMOD 1 /* has fchmod(2) syscall */
# define HASSETLOGIN 1 /* has setlogin(2) */
@ -842,7 +843,7 @@ extern unsigned int sleepX __P((unsigned int seconds));
# include <unix.h>
# include <sys/select.h>
# undef NGROUPS_MAX
# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define USESETEUID 1 /* has usable seteuid(2) call */
# define HASFCHMOD 1 /* has fchmod(2) syscall */
# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */
@ -876,10 +877,10 @@ extern unsigned int sleepX __P((unsigned int seconds));
# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
# include <paths.h>
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define USESETEUID 1 /* has usable seteuid(2) call */
# define HASFCHMOD 1 /* has fchmod(2) syscall */
# define HASFCHOWN 1 /* fchown(2) */
# define HASFCHOWN 1 /* has fchown(2) syscall */
# define HASUNAME 1 /* has uname(2) syscall */
# define HASSTRERROR 1 /* has strerror(3) */
# define HAS_ST_GEN 1 /* has st_gen field in stat struct */
@ -894,7 +895,12 @@ extern unsigned int sleepX __P((unsigned int seconds));
# ifndef LA_TYPE
# define LA_TYPE LA_SUBR
# endif /* ! LA_TYPE */
# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
# if defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 200040000
# undef SFS_TYPE
# define SFS_TYPE SFS_STATVFS
# else
# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
# endif
# if defined(__NetBSD__) && (NetBSD > 199307 || NetBSD0_9 > 1)
# undef SPT_TYPE
# define SPT_TYPE SPT_BUILTIN /* setproctitle is in libc */
@ -902,6 +908,17 @@ extern unsigned int sleepX __P((unsigned int seconds));
# if defined(__NetBSD__) && ((__NetBSD_Version__ > 102070000) || (NetBSD1_2 > 8) || defined(NetBSD1_4) || defined(NetBSD1_3))
# define HASURANDOMDEV 1 /* has /dev/urandom(4) */
# endif /* defined(__NetBSD__) && ((__NetBSD_Version__ > 102070000) || (NetBSD1_2 > 8) || defined(NetBSD1_4) || defined(NetBSD1_3)) */
# if defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 104170000
# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */
# endif
# if defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 200060000
# define HASCLOSEFROM 1 /* closefrom(3) added in 2.0F */
# endif
# if defined(__NetBSD__)
# define USESYSCTL 1 /* use sysctl(3) for getting ncpus */
# include <sys/param.h>
# include <sys/sysctl.h>
# endif
# if defined(__FreeBSD__)
# define HASSETLOGIN 1 /* has setlogin(2) */
# if __FreeBSD_version >= 227001
@ -949,6 +966,9 @@ extern unsigned int sleepX __P((unsigned int seconds));
# if OpenBSD >= 200012
# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */
# endif /* OpenBSD >= 200012 */
# if OpenBSD >= 200405
# define HASCLOSEFROM 1 /* closefrom(3) added in 3.5 */
# endif /* OpenBSD >= 200405 */
# endif /* defined(__OpenBSD__) */
# endif /* defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) */
@ -1365,7 +1385,11 @@ extern void *malloc();
# if LINUX_VERSION_CODE < 66399
# define HASFLOCK 0 /* flock(2) is broken after 0.99.13 */
# else /* LINUX_VERSION_CODE < 66399 */
# define HASFLOCK 1 /* flock(2) fixed after 1.3.95 */
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0))
# define HASFLOCK 1 /* flock(2) fixed after 1.3.95 */
# else /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) */
# define HASFLOCK 0 /* flock(2) is broken (again) after 2.4.0 */
# endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) */
# endif /* LINUX_VERSION_CODE < 66399 */
# endif /* ! HASFLOCK */
# ifndef LA_TYPE
@ -1379,9 +1403,7 @@ extern void *malloc();
# endif /* ! HASURANDOMDEV */
# endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)) */
# if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
# ifndef HASSTRERROR
# define HASSTRERROR 1 /* has strerror(3) */
# endif /* HASSTRERROR */
# define HASSTRERROR 1 /* has strerror(3) */
# endif /* defined(__GLIBC__) && defined(__GLIBC_MINOR__) */
# ifndef TZ_TYPE
# define TZ_TYPE TZ_NONE /* no standard for Linux */
@ -1600,22 +1622,66 @@ typedef int pid_t;
# endif /* ! _PATH_SENDMAILPID */
# endif /* _SEQUENT_ */
/*
** Cray Unicos
** Cray UNICOS, UNICOS/mk, and UNICOS/mp
**
** UNICOS:
** Ported by David L. Kensiski, Sterling Sofware <kensiski@nas.nasa.gov>
** Update Brian Ginsbach <ginsbach@cray.com>
** UNICOS/mk (Cray T3E):
** Contributed by Manu Mahonen <mailadm@csc.fi>
** of Center for Scientific Computing.
** Update Brian Ginsbach <ginsbach@cray.com>
** UNICOS/mp:
** From Aaron Davis <awd@cray.com> & Brian Ginsbach <ginsbach@cray.com>
*/
# ifdef UNICOS
# if defined(_CRAY) || defined(UNICOS) || defined(_UNICOSMP)
# define SYSTEM5 1 /* include all the System V defines */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define MAXPATHLEN PATHSIZE
# define LA_TYPE LA_ZERO
# define HASFCHMOD 1 /* has fchmod(2) syscall */
# define HASFCHOWN 1 /* has fchown(2) */
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASSETREUID 1 /* has setreuid(2) call */
# define USESETEUID 1 /* has usable seteuid(2) call */
# define HASGETDTABLESIZE 1 /* has getdtablesize(2) syscall */
# define HASSTRERROR 1 /* has strerror(3) */
# define GIDSET_T gid_t
# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
# define SFS_BAVAIL f_bfree /* alternate field name */
# endif /* UNICOS */
# define SFS_BAVAIL f_bfree /* alternate field name */
# define SAFENFSPATHCONF 1 /* pathconf(2) pessimizes on NFS filesystems */
# ifdef UNICOS
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define LA_TYPE LA_ZERO
# define _PATH_MAILDIR "/usr/spool/mail"
# define GET_IPOPT_DST(dst) *(struct in_addr *)&(dst)
# ifndef MAXPATHLEN
# define MAXPATHLEN PATHSIZE
# endif /* ! MAXPATHLEN */
# ifndef _PATH_UNIX
# ifdef UNICOSMK
# define _PATH_UNIX "/unicosmk.ar"
# else
# define _PATH_UNIX "/unicos"
# endif /* UNICOSMK */
# endif /* ! _PATH_UNIX */
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
# endif /* ! _PATH_VENDOR_CF */
# endif /* UNICOS */
# ifdef _UNICOSMP
# if defined(_SC_NPROC_ONLN) && !defined(_SC_NPROCESSORS_ONLN)
/* _SC_NPROC_ONLN is 'mpadmin -u', total # of unrestricted processors */
# define _SC_NPROCESSORS_ONLN _SC_NPROC_ONLN
# endif /* if defined(_SC_NPROC_ONLN) && !defined(_SC_NPROCESSORS_ONLN) */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define HASSETRLIMIT 1 /* has setrlimit(2) syscall */
# define LA_TYPE LA_IRIX6 /* figure out at run time */
# include <sys/cdefs.h>
# include <paths.h>
# define ARGV_T char *const *
# endif /* _UNICOSMP */
# endif /* _CRAY */
/*
** Apollo DomainOS
@ -1731,7 +1797,7 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# define __svr4__
# define SYS5SIGNALS 1
# define HASFCHOWN 1 /* has fchown(2) call */
# define HASSETSID 1
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASSETREUID 1
# define HASWAITPID 1
# define HASGETDTABLESIZE 1
@ -1781,7 +1847,7 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# define SYSTEM5 1
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define HASSETREUID 1
# define HASSETSID 1
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASINITGROUPS 1
# define GIDSET_T gid_t
# define SLEEP_T unsigned
@ -2003,7 +2069,7 @@ typedef int (*sigfunc_t)();
# ifndef __svr4__
# define __svr4__ /* use all System V Release 4 defines below */
# endif /* ! __svr4__ */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASGETUSERSHELL 1 /* DOES have getusershell(3) call in libc */
# define LA_TYPE LA_READKSYM /* use MIOC_READKSYM ioctl */
# ifndef SPT_TYPE
@ -2082,7 +2148,7 @@ extern char *getenv();
# define __svr4__ /* use all System V Release 4 defines below */
# endif /* ! __svr4__ */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define LA_TYPE LA_READKSYM /* use MIOC_READSYM ioctl */
# define SFS_TYPE SFS_USTAT /* use System V ustat(2) syscall */
# define GIDSET_T gid_t
@ -2204,19 +2270,6 @@ typedef struct msgb mblk_t;
# define SM_INT32 int /* 32bit integer */
# endif /* sinix */
/*
** CRAY T3E
**
** Contributed by Manu Mahonen <mailadm@csc.fi>
** of Center for Scientific Computing.
*/
# ifdef _CRAY
# define GET_IPOPT_DST(dst) *(struct in_addr *)&(dst)
# define _PATH_MAILDIR "/usr/spool/mail"
# if !defined(MAXPATHLEN)
# define MAXPATHLEN PATHSIZE
# endif /* !defined(MAXPATHLEN) */
# endif /* _CRAY */
/*
** Motorola 922, MC88110, UNIX SYSTEM V/88 Release 4.0 Version 4.3
@ -2227,7 +2280,7 @@ typedef struct msgb mblk_t;
# ifdef MOTO
# define HASFCHMOD 1
# define HASSETRLIMIT 0
# define HASSETSID 1
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASSETREUID 1
# define HASULIMIT 1
# define HASWAITPID 1
@ -2257,8 +2310,13 @@ typedef struct msgb mblk_t;
# undef HAVE_SYS_ERRLIST
# define sys_errlist __sys_errlist
# define sys_nerr __sys_nerr
# define major(dev) ((int)(((dev) >> 8) & 0xff))
# define minor(dev) ((int)((dev) & 0xff))
# include <sys/mkdev.h>
# ifndef major
# define major(dev) ((int)(((dev) >> 8) & 0xff))
# endif /* ! major */
# ifndef minor
# define minor(dev) ((int)((dev) & 0xff))
# endif /* ! minor */
# endif /* defined(__INTERIX) */
@ -2359,8 +2417,8 @@ typedef struct msgb mblk_t;
/* general POSIX defines */
# ifdef _POSIX_VERSION
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASWAITPID 1 /* has Posix waitpid(2) call */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASWAITPID 1 /* has POSIX waitpid(2) call */
# if _POSIX_VERSION >= 199500 && !defined(USESETEUID)
# define USESETEUID 1 /* has usable seteuid(2) call */
# endif /* _POSIX_VERSION >= 199500 && !defined(USESETEUID) */
@ -2578,7 +2636,7 @@ typedef struct msgb mblk_t;
#endif /* ! EX_NOTFOUND */
/* pseudo-code used for mci_setstat */
# define EX_NOTSTICKY -5 /* don't save persistent status */
# define EX_NOTSTICKY (-5) /* don't save persistent status */
/*

View File

@ -1,12 +1,12 @@
/*
* Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
* Copyright (c) 2000-2003 Sendmail, 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.
*
* $Id: config.h,v 1.44 2002/01/23 17:47:15 gshapiro Exp $
* $Id: config.h,v 1.46 2003/12/10 03:19:06 gshapiro Exp $
*/
/*
@ -143,8 +143,12 @@
# define SM_CONF_TEST_LLONG 1
# endif /* !SM_CONF_TEST_LLONG */
/* Does LDAP library have ldap_memfree()? */
# ifndef SM_CONF_LDAP_MEMFREE
/* LDAP Checks */
# if LDAPMAP
# include <ldap.h>
/* Does the LDAP library have ldap_memfree()? */
# ifndef SM_CONF_LDAP_MEMFREE
/*
** The new LDAP C API (draft-ietf-ldapext-ldap-c-api-04.txt) includes
@ -152,11 +156,31 @@
** of 2004 to identify the API.
*/
# if USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004
# define SM_CONF_LDAP_MEMFREE 1
# else /* USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004 */
# define SM_CONF_LDAP_MEMFREE 0
# endif /* USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004 */
# endif /* ! SM_CONF_LDAP_MEMFREE */
# if USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004
# define SM_CONF_LDAP_MEMFREE 1
# else /* USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004 */
# define SM_CONF_LDAP_MEMFREE 0
# endif /* USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004 */
# endif /* ! SM_CONF_LDAP_MEMFREE */
/* Does the LDAP library have ldap_initialize()? */
# ifndef SM_CONF_LDAP_INITIALIZE
/*
** Check for ldap_initialize() support for support for LDAP URI's with
** non-ldap:// schemes.
*/
/* OpenLDAP does it with LDAP_OPT_URI */
# ifdef LDAP_OPT_URI
# define SM_CONF_LDAP_INITIALIZE 1
# endif /* LDAP_OPT_URI */
# endif /* !SM_CONF_LDAP_INITIALIZE */
# endif /* LDAPMAP */
/* don't use strcpy() */
# ifndef DO_NOT_USE_STRCPY
# define DO_NOT_USE_STRCPY 1
# endif /* ! DO_NOT_USE_STRCPY */
#endif /* ! SM_CONFIG_H */

View File

@ -1,12 +1,12 @@
/*
* Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
* Copyright (c) 2000, 2001, 2003 Sendmail, 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.
*
* $Id: debug.h,v 1.15 2001/03/08 03:23:07 ca Exp $
* $Id: debug.h,v 1.16 2003/01/10 00:26:06 ca Exp $
*/
/*
@ -28,29 +28,26 @@ extern SM_FILE_T *
sm_debug_file __P((void));
extern void
sm_debug_setfile __P((
SM_FILE_T *));
sm_debug_setfile __P(( SM_FILE_T *));
extern void PRINTFLIKE(1, 2)
sm_dprintf __P((
char *_fmt,
...));
sm_dprintf __P((char *_fmt, ...));
extern void
sm_dflush __P((void));
extern void
sm_debug_close __P((void));
/*
** abstractions for setting and testing debug activation levels
*/
extern void
sm_debug_addsettings_x __P((
const char *));
sm_debug_addsettings_x __P((const char *));
extern void
sm_debug_addsetting_x __P((
const char *,
int));
sm_debug_addsetting_x __P((const char *, int));
# define SM_DEBUG_UNKNOWN ((SM_ATOMIC_UINT_T)(-1))
@ -123,13 +120,10 @@ struct sm_debug
# endif /* SM_DEBUG_CHECK */
extern bool
sm_debug_loadactive __P((
SM_DEBUG_T *,
int));
sm_debug_loadactive __P((SM_DEBUG_T *, int));
extern int
sm_debug_loadlevel __P((
SM_DEBUG_T *));
sm_debug_loadlevel __P((SM_DEBUG_T *));
# define SM_DEBUG_INITIALIZER(name, desc) { \
SmDebugMagic, \

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: errstring.h,v 1.4.4.3 2003/06/24 17:16:10 ca Exp $
* $Id: errstring.h,v 1.9 2003/12/10 03:19:06 gshapiro Exp $
*/
/*
@ -17,7 +17,9 @@
# define SM_ERRSTRING_H
#include <errno.h>
#if NEEDINTERRNO
extern int errno;
#endif /* NEEDINTERRNO */
/*
** These are used in a few cases where we need some special
@ -44,6 +46,7 @@ extern int errno;
#define E_DNSBASE (E_PSEUDOBASE + 20) /* base for DNS h_errno */
#define E_SMDBBASE (E_PSEUDOBASE + 40) /* base for libsmdb errors */
#define E_LDAPBASE (E_PSEUDOBASE + 70) /* base for LDAP errors */
#define E_LDAPURLBASE (E_PSEUDOBASE + 200) /* base for LDAP URL errors */
/* libsmdb */

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: fdset.h,v 1.3.10.2 2002/12/10 04:02:25 ca Exp $
* $Id: fdset.h,v 1.5 2002/12/10 19:48:19 ca Exp $
*/
#ifndef SM_FDSET_H

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: gen.h,v 1.22 2002/04/03 00:40:42 ca Exp $
* $Id: gen.h,v 1.23 2003/11/04 18:51:54 ca Exp $
*/
/*
@ -43,7 +43,7 @@
# else /* SM_CONF_STDDEF_H */
# ifndef NULL
# define NULL 0
# endif
# endif /* ! NULL */
# define offsetof(type, member) ((size_t)(&((type *)0)->member))
# endif /* SM_CONF_STDDEF_H */
@ -58,7 +58,8 @@
typedef int bool;
# define false 0
# define true 1
# endif
# define __bool_true_false_are_defined 1
# endif /* ! __cplusplus */
# endif /* SM_CONF_STDBOOL_H */
/*

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000-2003 Sendmail, Inc. and its suppliers.
* Copyright (c) 2000-2002, 2004 Sendmail, Inc. and its suppliers.
* All rights reserved.
* Copyright (c) 1990
* The Regents of the University of California. All rights reserved.
@ -11,7 +11,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: io.h,v 1.23.2.2 2003/09/05 20:35:28 ca Exp $
* $Id: io.h,v 1.24 2004/03/03 19:14:49 ca Exp $
*/
/*-
@ -34,15 +34,15 @@
#define SM_IO_RDWRTR 6 /* read-write with truncation indicated */
# define SM_IO_BINARY 0x0 /* binary mode: not used in Unix */
#define SM_IS_BINARY(mode) ((mode) & SM_IO_BINARY != 0)
#define SM_IS_BINARY(mode) (((mode) & SM_IO_BINARY) != 0)
#define SM_IO_MODE(mode) ((mode) & 0x0f)
#define SM_IO_RDWR_B (SM_IO_RDWR|SM_IO_BINARY)
#define SM_IO_RDONLY_B (SM_IO_RDONLY|SM_IO_BINARY)
#define SM_IO_WRONLY_B (SM_IO_WRONLY|SM_IO_BINARY)
#define SM_IO_APPEND_B (SM_IO_APPEND|SM_IO_BINARY)
#define SM_IO_RDWR_B (SM_IO_RDWR|SM_IO_BINARY)
#define SM_IO_RDONLY_B (SM_IO_RDONLY|SM_IO_BINARY)
#define SM_IO_WRONLY_B (SM_IO_WRONLY|SM_IO_BINARY)
#define SM_IO_APPEND_B (SM_IO_APPEND|SM_IO_BINARY)
#define SM_IO_APPENDRW_B (SM_IO_APPENDRW|SM_IO_BINARY)
#define SM_IO_RDWRTR_B (SM_IO_RDWRTR|SM_IO_BINARY)
#define SM_IO_RDWRTR_B (SM_IO_RDWRTR|SM_IO_BINARY)
/* for sm_io_fseek, et al api's (exposed) */
#define SM_IO_SEEK_SET 0

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: ldap.h,v 1.22 2002/03/05 02:17:26 ca Exp $
* $Id: ldap.h,v 1.27 2003/12/20 09:23:47 gshapiro Exp $
*/
#ifndef SM_LDAP_H
@ -32,34 +32,26 @@
# if LDAPMAP
# if _FFR_LDAP_RECURSION
/* Attribute types */
# define SM_LDAP_ATTR_NONE (-1)
# define SM_LDAP_ATTR_OBJCLASS 0
# define SM_LDAP_ATTR_NORMAL 1
# define SM_LDAP_ATTR_DN 2
# define SM_LDAP_ATTR_FILTER 3
# define SM_LDAP_ATTR_URL 4
# define SM_LDAP_ATTR_NONE (-1)
# define SM_LDAP_ATTR_OBJCLASS 0
# define SM_LDAP_ATTR_NORMAL 1
# define SM_LDAP_ATTR_DN 2
# define SM_LDAP_ATTR_FILTER 3
# define SM_LDAP_ATTR_URL 4
/* sm_ldap_results() flags */
# define SM_LDAP_SINGLEMATCH 0x0001
# define SM_LDAP_MATCHONLY 0x0002
# define SM_LDAP_USE_ALLATTR 0x0004
# endif /* _FFR_LDAP_RECURSION */
# define SM_LDAP_SINGLEMATCH 0x0001
# define SM_LDAP_MATCHONLY 0x0002
# define SM_LDAP_USE_ALLATTR 0x0004
struct sm_ldap_struct
{
/* needed for ldap_open or ldap_init */
char *ldap_target;
char *ldap_uri;
char *ldap_host;
int ldap_port;
# if _FFR_LDAP_URI
bool ldap_uri;
# endif /* _FFR_LDAP_URI */
# if _FFR_LDAP_SETVERSION
int ldap_version;
# endif /* _FFR_LDAP_SETVERSION */
pid_t ldap_pid;
/* options set in ld struct before ldap_bind_s */
@ -79,10 +71,8 @@ struct sm_ldap_struct
int ldap_scope;
char *ldap_filter;
char *ldap_attr[LDAPMAP_MAX_ATTR + 1];
# if _FFR_LDAP_RECURSION
int ldap_attr_type[LDAPMAP_MAX_ATTR + 1];
char *ldap_attr_needobjclass[LDAPMAP_MAX_ATTR + 1];
# endif /* _FFR_LDAP_RECURSION */
bool ldap_attrsonly;
/* args for ldap_result */
@ -98,11 +88,12 @@ struct sm_ldap_struct
typedef struct sm_ldap_struct SM_LDAP_STRUCT;
# if _FFR_LDAP_RECURSION
struct sm_ldap_recurse_entry
{
char *lr_search;
int lr_type;
LDAPURLDesc *lr_ludp;
char **lr_attrs;
bool lr_done;
};
@ -115,17 +106,14 @@ struct sm_ldap_recurse_list
typedef struct sm_ldap_recurse_entry SM_LDAP_RECURSE_ENTRY;
typedef struct sm_ldap_recurse_list SM_LDAP_RECURSE_LIST;
# endif /* _FFR_LDAP_RECURSION */
/* functions */
extern void sm_ldap_clear __P((SM_LDAP_STRUCT *));
extern bool sm_ldap_start __P((char *, SM_LDAP_STRUCT *));
extern int sm_ldap_search __P((SM_LDAP_STRUCT *, char *));
# if _FFR_LDAP_RECURSION
extern int sm_ldap_results __P((SM_LDAP_STRUCT *, int, int, int,
SM_RPOOL_T *, char **, int *, int *,
SM_LDAP_RECURSE_LIST *));
# endif /* _FFR_LDAP_RECURSION */
extern void sm_ldap_setopts __P((LDAP *, SM_LDAP_STRUCT *));
extern int sm_ldap_geterrno __P((LDAP *));
extern void sm_ldap_close __P((SM_LDAP_STRUCT *));

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: sm_os_aix.h,v 1.9.2.1 2003/04/28 23:11:07 ca Exp $
* $Id: sm_os_aix.h,v 1.11 2003/04/28 23:42:23 ca Exp $
*/
/*

View File

@ -0,0 +1,19 @@
/*
* Copyright (c) 2003 Sendmail, 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.
*
* $Id: sm_os_unicos.h,v 1.1 2003/04/21 17:03:51 ca Exp $
*/
/*
** Cray UNICOS
*/
#define SM_OS_NAME "unicos"
#define SM_CONF_LONGLONG 1
#define SM_CONF_SETITIMER 0

View File

@ -0,0 +1,18 @@
/*
* Copyright (c) 2003 Sendmail, 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.
*
* $Id: sm_os_unicosmk.h,v 1.1 2003/04/21 17:03:51 ca Exp $
*/
/*
** Cray UNICOS/mk
*/
#define SM_OS_NAME "unicosmk"
#define SM_CONF_LONGLONG 1

View File

@ -0,0 +1,22 @@
/*
* Copyright (c) 2003 Sendmail, 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.
*
* $Id: sm_os_unicosmp.h,v 1.1 2003/04/21 17:03:51 ca Exp $
*/
/*
** Cray UNICOS/mp
*/
#define SM_OS_NAME "unicosmp"
#define SM_CONF_LONGLONG 1
#define SM_CONF_SYS_CDEFS_H 1
#define SM_CONF_MSG 1
#define SM_CONF_SHM 1
#define SM_CONF_SEM 1

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: sm_os_unixware.h,v 1.7.2.1 2002/10/24 18:02:14 ca Exp $
* $Id: sm_os_unixware.h,v 1.8 2002/10/24 18:04:54 ca Exp $
*/
#define SM_OS_NAME "unixware"

View File

@ -1,12 +1,12 @@
/*
* Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
* Copyright (c) 2000-2001, 2003 Sendmail, 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.
*
* $Id: rpool.h,v 1.15 2001/09/04 22:41:55 ca Exp $
* $Id: rpool.h,v 1.16 2003/09/05 23:07:49 ca Exp $
*/
/*
@ -165,8 +165,12 @@ sm_rpool_malloc __P((
size_t _size));
# endif /* SM_HEAP_CHECK */
#if DO_NOT_USE_STRCPY
extern char *sm_rpool_strdup_x __P((SM_RPOOL_T *rpool, const char *s));
#else /* DO_NOT_USE_STRCPY */
# define sm_rpool_strdup_x(rpool, str) \
strcpy(sm_rpool_malloc_x(rpool, strlen(str) + 1), str)
#endif /* DO_NOT_USE_STRCPY */
extern SM_RPOOL_ATTACH_T
sm_rpool_attach_x __P((

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: shm.h,v 1.8.2.2 2003/05/17 18:34:16 ca Exp $
* $Id: shm.h,v 1.10 2003/05/17 18:34:54 ca Exp $
*/
#ifndef SM_SHM_H

View File

@ -1,12 +1,12 @@
/*
* Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
* Copyright (c) 2000-2001, 2003 Sendmail, 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.
*
* $Id: string.h,v 1.36 2001/06/17 21:31:11 ca Exp $
* $Id: string.h,v 1.38 2003/10/10 17:56:57 ca Exp $
*/
/*
@ -24,25 +24,30 @@
#define SPACELEFT(buf, ptr) (sizeof buf - ((ptr) - buf))
extern int PRINTFLIKE(3, 4)
sm_snprintf __P((
char *,
size_t,
const char *,
...));
sm_snprintf __P((char *, size_t, const char *, ...));
extern bool
sm_match __P((
const char *_str,
const char *_pattern));
sm_match __P((const char *_str, const char *_pattern));
extern char *
sm_strdup __P((
char *));
sm_strdup __P((char *));
extern char *
sm_strndup_x __P((
const char *_str,
size_t _len));
sm_strndup_x __P((const char *_str, size_t _len));
#if DO_NOT_USE_STRCPY
/* for "normal" data (free'd before end of process) */
extern char *
sm_strdup_x __P((const char *_str));
/* for data that is supposed to be persistent. */
extern char *
sm_pstrdup_x __P((const char *_str));
extern char *
sm_strdup_tagged_x __P((const char *str, char *file, int line, int group));
#else /* DO_NOT_USE_STRCPY */
/* for "normal" data (free'd before end of process) */
# define sm_strdup_x(str) strcpy(sm_malloc_x(strlen(str) + 1), str)
@ -52,35 +57,22 @@ sm_strndup_x __P((
# define sm_strdup_tagged_x(str, file, line, group) \
strcpy(sm_malloc_tagged_x(strlen(str) + 1, file, line, group), str)
#endif /* DO_NOT_USE_STRCPY */
extern char *
sm_stringf_x __P((
const char *_fmt,
...));
sm_stringf_x __P((const char *_fmt, ...));
extern char *
sm_vstringf_x __P((
const char *_fmt,
va_list _ap));
sm_vstringf_x __P((const char *_fmt, va_list _ap));
extern size_t
sm_strlcpy __P((
char *_dst,
const char *_src,
ssize_t _len));
sm_strlcpy __P((char *_dst, const char *_src, ssize_t _len));
extern size_t
sm_strlcat __P((
char *_dst,
const char *_src,
ssize_t _len));
sm_strlcat __P((char *_dst, const char *_src, ssize_t _len));
extern size_t
sm_strlcat2 __P((
char *,
const char *,
const char *,
ssize_t));
sm_strlcat2 __P((char *, const char *, const char *, ssize_t));
extern size_t
#ifdef __STDC__
@ -94,40 +86,26 @@ sm_strlcpyn __P((char *,
# if !HASSTRERROR
extern char *
strerror __P((
int _errno));
strerror __P((int _errno));
# endif /* !HASSTRERROR */
extern int
sm_strrevcmp __P((
const char *,
const char *));
sm_strrevcmp __P((const char *, const char *));
extern int
sm_strrevcasecmp __P((
const char *,
const char *));
sm_strrevcasecmp __P((const char *, const char *));
extern int
sm_strcasecmp __P((
const char *,
const char *));
sm_strcasecmp __P((const char *, const char *));
extern int
sm_strncasecmp __P((
const char *,
const char *,
size_t));
sm_strncasecmp __P((const char *, const char *, size_t));
extern LONGLONG_T
sm_strtoll __P((
const char *,
char**, int));
sm_strtoll __P((const char *, char**, int));
extern ULONGLONG_T
sm_strtoull __P((
const char *,
char**, int));
sm_strtoull __P((const char *, char**, int));
extern void
stripquotes __P((char *));

View File

@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: varargs.h,v 1.7.2.1 2002/07/29 21:43:20 gshapiro Exp $
* $Id: varargs.h,v 1.8 2002/07/29 21:31:00 gshapiro Exp $
*/
/*

View File

@ -1,4 +1,4 @@
dnl $Id: Makefile.m4,v 8.30.2.1 2002/06/21 21:58:28 ca Exp $
dnl $Id: Makefile.m4,v 8.31 2002/06/21 22:01:31 ca Exp $
include(confBUILDTOOLSDIR`/M4/switch.m4')
dnl only required for compilation of EXTRAS

View File

@ -9,11 +9,8 @@ through reference to a sample filter which is attached at the end of this
file. It is necessary to first build libmilter.a, which can be done by
issuing the './Build' command in SRCDIR/libmilter .
NOTE: If you intend to use filters in sendmail, you must compile sendmail
with -DMILTER defined. You can do this by adding the following to
your devtools/Site/site.config.m4 file:
APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')
Starting with 8.13 sendmail is compiled by default with support for
the milter API.
+----------------+
| SECURITY HINTS |
@ -23,13 +20,18 @@ Note: we strongly recommend not to run any milter as root. Libmilter
does not need root access to communicate with sendmail. It is a
good security practice to run a program only with root privileges
if really necessary. A milter should probably check first whether
it runs as root and refuse to start in that case. There is a
compile time option _FFR_MILTER_ROOT_UNSAFE which keeps libmilter
from unlinking a socket when running as root. It is recommended
to turn on this option:
it runs as root and refuse to start in that case. libmilter will
not unlink a socket when running as root.
APPENDDEF(`conf_libmilter_ENVDEF', `-D_FFR_MILTER_ROOT_UNSAFE ')
+----------------------+
| CONFIGURATION MACROS |
+----------------------+
Libmilter uses a set of C preprocessor macros to specify platform specific
features of the C compiler and standard C libraries.
SM_CONF_POLL
Set to 1 if poll(2) should be used instead of select(2).
+-------------------+
| BUILDING A FILTER |
@ -464,4 +466,4 @@ main(argc, argv)
/* eof */
$Revision: 8.35.2.2 $, Last updated $Date: 2003/05/26 04:10:06 $
$Revision: 8.40 $, Last updated $Date: 2003/12/11 18:14:34 $

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1999-2003 Sendmail, Inc. and its suppliers.
* Copyright (c) 1999-2004 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
@ -9,10 +9,36 @@
*/
#include <sm/gen.h>
SM_RCSID("@(#)$Id: comm.c,v 8.54.2.6 2003/01/03 22:14:40 ca Exp $")
SM_RCSID("@(#)$Id: comm.c,v 8.65 2004/07/07 21:41:30 ca Exp $")
#include "libmilter.h"
#include <sm/errstring.h>
#include <sys/uio.h>
static size_t Maxdatasize = MILTER_MAX_DATA_SIZE;
#if _FFR_MAXDATASIZE
/*
** SMFI_SETMAXDATASIZE -- set limit for milter data read/write.
**
** Parameters:
** sz -- new limit.
**
** Returns:
** old limit
*/
size_t
smfi_setmaxdatasize(sz)
size_t sz;
{
size_t old;
old = Maxdatasize;
Maxdatasize = sz;
return old;
}
#endif /* _FFR_MAXDATASIZE */
/*
** MI_RD_CMD -- read a command
@ -107,7 +133,7 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name)
expl = ntohl(expl) - 1;
if (expl <= 0)
return NULL;
if (expl > MILTER_CHUNK_SIZE)
if (expl > Maxdatasize)
{
*cmd = SMFIC_TOOBIG;
return NULL;
@ -195,12 +221,94 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name)
*cmd = SMFIC_UNKNERR;
return NULL;
}
/*
** RETRY_WRITEV -- Keep calling the writev() system call
** until all the data is written out or an error occurs.
**
** Parameters:
** fd -- socket descriptor
** iov -- io vector
** iovcnt -- number of elements in io vector
** must NOT exceed UIO_MAXIOV.
** timeout -- maximum time to wait
**
** Returns:
** success: number of bytes written
** otherwise: MI_FAILURE
*/
static ssize_t
retry_writev(fd, iov, iovcnt, timeout)
socket_t fd;
struct iovec *iov;
int iovcnt;
struct timeval *timeout;
{
int i;
ssize_t n, written;
FD_WR_VAR(wrs);
written = 0;
for (;;)
{
while (iovcnt > 0 && iov[0].iov_len == 0)
{
iov++;
iovcnt--;
}
if (iovcnt <= 0)
return written;
/*
** We don't care much about the timeout here,
** it's very long anyway; correct solution would be
** to take the time before the loop and reduce the
** timeout after each invocation.
** FD_SETSIZE is checked when socket is created.
*/
FD_WR_INIT(fd, wrs);
i = FD_WR_READY(fd, wrs, timeout);
if (i == 0)
return MI_FAILURE;
if (i < 0)
{
if (errno == EINTR || errno == EAGAIN)
continue;
return MI_FAILURE;
}
n = writev(fd, iov, iovcnt);
if (n == -1)
{
if (errno == EINTR || errno == EAGAIN)
continue;
return MI_FAILURE;
}
written += n;
for (i = 0; i < iovcnt; i++)
{
if (iov[i].iov_len > (unsigned int) n)
{
iov[i].iov_base = (char *)iov[i].iov_base + n;
iov[i].iov_len -= (unsigned int) n;
break;
}
n -= (int) iov[i].iov_len;
iov[i].iov_len = 0;
}
if (i == iovcnt)
return written;
}
}
/*
** MI_WR_CMD -- write a cmd to sd
**
** Parameters:
** sd -- socket descriptor
** timeout -- maximum time to wait (currently unused)
** timeout -- maximum time to wait
** cmd -- single character command to write
** buf -- buffer with further data
** len -- length of buffer (without cmd!)
@ -209,38 +317,6 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name)
** MI_SUCCESS/MI_FAILURE
*/
/*
** we don't care much about the timeout here, it's very long anyway
** FD_SETSIZE is checked when socket is created.
** XXX l == 0 ?
*/
#define MI_WR(data) \
while (sl > 0) \
{ \
FD_WR_INIT(sd, wrs); \
ret = FD_WR_READY(sd, wrs, timeout); \
if (ret == 0) \
return MI_FAILURE; \
if (ret < 0) \
{ \
if (errno == EINTR) \
continue; \
else \
return MI_FAILURE; \
} \
l = MI_SOCK_WRITE(sd, (void *) ((data) + i), sl); \
if (l < 0) \
{ \
if (errno == EINTR) \
continue; \
else \
return MI_FAILURE; \
} \
i += l; \
sl -= l; \
}
int
mi_wr_cmd(sd, timeout, cmd, buf, len)
socket_t sd;
@ -252,27 +328,32 @@ mi_wr_cmd(sd, timeout, cmd, buf, len)
size_t sl, i;
ssize_t l;
mi_int32 nl;
int ret;
FD_WR_VAR(wrs);
int iovcnt;
struct iovec iov[2];
char data[MILTER_LEN_BYTES + 1];
if (len > MILTER_CHUNK_SIZE)
if (len > Maxdatasize || (len > 0 && buf == NULL))
return MI_FAILURE;
nl = htonl(len + 1); /* add 1 for the cmd char */
(void) memcpy(data, (void *) &nl, MILTER_LEN_BYTES);
data[MILTER_LEN_BYTES] = (char) cmd;
i = 0;
sl = MILTER_LEN_BYTES + 1;
/* use writev() instead to send the whole stuff at once? */
MI_WR(data);
if (len > 0 && buf == NULL)
/* set up the vector for the size / command */
iov[0].iov_base = (void *) data;
iov[0].iov_len = sl;
iovcnt = 1;
if (len >= 0 && buf != NULL)
{
iov[1].iov_base = (void *) buf;
iov[1].iov_len = len;
iovcnt = 2;
}
l = retry_writev(sd, iov, iovcnt, timeout);
if (l == MI_FAILURE)
return MI_FAILURE;
if (len == 0 || buf == NULL)
return MI_SUCCESS;
i = 0;
sl = len;
MI_WR(buf);
return MI_SUCCESS;
}

View File

@ -1,6 +1,9 @@
<html>
<head><title>Milter API</title></head>
<body>
<!--
$Id: api.html,v 1.18 2004/04/28 23:26:51 msk Exp $
-->
<h1>Milter API</h1>
<h2>Contents</h2>
@ -26,12 +29,20 @@ href="smfi_main.html">smfi_main</a>.
<p>
<table border="1" cellspacing=0 cellpadding=2><tr bgcolor="#dddddd"><th>Function</th><th>Description</th></tr>
<tr><td><a href="smfi_opensocket.html">smfi_opensocket</a></td><td>Try to create the interface socket.</td></tr>
<tr><td><a href="smfi_register.html">smfi_register</a></td><td>Register a filter.</td></tr>
<tr><td><a href="smfi_setconn.html">smfi_setconn</a></td><td>Specify socket to use.</td></tr>
<tr><td><a href="smfi_settimeout.html">smfi_settimeout</a></td><td>Set timeout.</td></tr>
<tr><td><a href="smfi_setbacklog.html">smfi_setbacklog</a></td><td>Define the incoming <i>listen</i>(2) queue size.</td></tr>
<tr><td><a href="smfi_setdbg.html">smfi_setdbg</a></td><td>Set the milter library debugging (tracing) level.</td></tr>
<tr><td><a href="smfi_stop.html">smfi_stop</a></td><td>Cause an orderly shutdown.</td></tr>
<tr><td><a href="smfi_main.html">smfi_main</a></td><td>Hand control to libmilter.</td></tr>
</table>
@ -54,6 +65,9 @@ pointer.</td></tr>
<tr><td><a href="smfi_setreply.html">smfi_setreply</a></td><td>Set the specific
reply code to be used.</td></tr>
<tr><td><a href="smfi_setmlreply.html">smfi_setmlreply</a></td><td>Set the
specific multi-line reply to be used.</td></tr>
</table>
<h2>Message Modification Functions</h2>
@ -85,6 +99,9 @@ the message.</td><td>SMFIF_ADDHDRS</td></tr>
<tr><td><a href="smfi_chgheader.html">smfi_chgheader</a></td><td>Change or delete a header.</td><td>SMFIF_CHGHDRS</td></tr>
<tr><td><a href="smfi_insheader.html">smfi_insheader</a></td><td>Insert a
header into the message.</td><td>SMFIF_ADDHDRS</td></tr>
<tr><td><a href="smfi_addrcpt.html">smfi_addrcpt</a></td><td>Add a recipient to
the envelope.</td><td>SMFIF_ADDRCPT</td></tr>
@ -96,7 +113,29 @@ body of the message.</td><td>SMFIF_CHGBODY</td></tr>
</table>
<h2>Callbacks</h2>
<h2>Other Message Handling Functions</h2>
The following functions provide special case handling instructions for
milter or the MTA, without altering the content or status of the message.
<b>They too may only be called in <a href="xxfi_eom.html">xxfi_eom</a></b>.
All of these functions may invoke additional communication with the MTA.
They will return either MI_SUCCESS or MI_FAILURE to indicate the status of
the operation.
<p>
Note that the status returned indicates only whether or not the
filter's message was successfully sent to the MTA, not whether or not
the MTA performed the requested operation.
<p>
<table border="1" cellspacing=0 cellpadding=2><tr bgcolor="#dddddd"><th>Function</th><th>Description</th></tr>
<tr><td><a href="smfi_progress.html">smfi_progress</a></td><td>Report operation in progress.</td></tr>
<tr><td><a href="smfi_quarantine.html">smfi_quarantine</a></td><td>Quarantine a message.</td></tr>
</table>
<h2><a name="callbacks">Callbacks</a></h2>
The filter should implement one or more of the following callbacks,
which are registered via <a href="smfi_register.html">smfi_register</a>:
@ -131,7 +170,7 @@ having the indicated meanings. Any return other than one of the below
values constitutes an error, and will cause sendmail to terminate its
connection to the offending filter.
<p><a name="conn-spec"></a>Milter distinguishes between recipient-,
<p><a name="conn-spec">Milter</a> distinguishes between recipient-,
message-, and connection-oriented routines. Recipient-oriented
callbacks may affect the processing of a single message recipient;
message-oriented callbacks, a single message; connection-oriented

View File

@ -3,6 +3,9 @@
<title>Architecture</title>
</head>
<body>
<!--
$Id: design.html,v 1.11 2003/03/05 19:57:54 ca Exp $
-->
<h1>Architecture</h1>

View File

@ -4,7 +4,7 @@
</head>
<body>
<!--
$Id: index.html,v 1.10.4.1 2003/03/05 19:54:19 ca Exp $
$Id: index.html,v 1.12 2003/03/05 19:57:54 ca Exp $
-->
<h1>Filtering Mail with Sendmail</h1>

View File

@ -2,6 +2,9 @@
<head><title>Installation and Configuration</title>
</head>
<body>
<!--
$Id: installation.html,v 1.20 2003/03/05 19:57:54 ca Exp $
-->
<h1>Installation</h1>
<h2>Contents</h2>
<ul>

View File

@ -2,6 +2,9 @@
<head><title>Other Resources</title>
</head>
<body>
<!--
$Id: other.html,v 1.5 2003/03/05 19:57:54 ca Exp $
-->
FAQ? Mailing list? More sample filters?
<hr size="1">
<font size="-1">

View File

@ -4,7 +4,7 @@
</head>
<body>
<!--
$Id: overview.html,v 1.12.4.1 2003/03/05 19:54:20 ca Exp $
$Id: overview.html,v 1.14 2003/03/05 19:57:54 ca Exp $
-->
<h1>Technical Overview</h1>

View File

@ -1,6 +1,9 @@
<html>
<head><title>A Sample Filter</title></head>
<body>
<!--
$Id: sample.html,v 1.18 2004/02/27 00:49:28 msk Exp $
-->
<h1>A Sample Filter</h1>
The following sample logs each message to a separate temporary file,
@ -121,9 +124,10 @@ sfsistat
SMFICTX *ctx;
char **argv;
{
int fd = -1;
int argc = 0;
struct mlfiPriv *priv = MLFIPRIV;
char *mailaddr = <a href="smfi_getsymval.html">smfi_getsymval</a>(ctx, "{mail_addr}");
int argc = 0;
/* open a file to store this message */
if ((priv-&gt;mlfi_fname = strdup("/tmp/msg.XXXXXX")) == NULL)
@ -132,14 +136,15 @@ sfsistat
return SMFIS_TEMPFAIL;
}
if (mkstemp(priv-&gt;mlfi_fname) == -1)
if ((fd = mkstemp(priv-&gt;mlfi_fname)) == -1)
{
(void) mlfi_cleanup(ctx, FALSE);
return SMFIS_TEMPFAIL;
}
if ((priv-&gt;mlfi_fp = fopen(priv-&gt;mlfi_fname, "w+")) == NULL)
if ((priv-&gt;mlfi_fp = fdopen(fd, "w+")) == NULL)
{
(void) close(fd);
(void) mlfi_cleanup(ctx, FALSE);
return SMFIS_TEMPFAIL;
}
@ -361,7 +366,8 @@ struct smfiDesc smfilter =
{
"SampleFilter", /* filter name */
SMFI_VERSION, /* version code -- do not change */
SMFIF_ADDHDRS, /* flags */
SMFIF_ADDHDRS|SMFIF_ADDRCPT,
/* flags */
<a href="xxfi_connect.html">mlfi_connect</a>, /* connection info filter */
<a href="xxfi_helo.html">mlfi_helo</a>, /* SMTP HELO command filter */
<a href="xxfi_envfrom.html">mlfi_envfrom</a>, /* envelope sender filter */
@ -488,7 +494,7 @@ main(argc, argv)
</pre>
<hr size="1">
<font size="-1">
Copyright (c) 2000-2003 Sendmail, Inc. and its suppliers.
Copyright (c) 2000-2004 Sendmail, Inc. and its suppliers.
All rights reserved.
<br>
By using this file, you agree to the terms and conditions set

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_addheader</title></head>
<body>
<!--
$Id: smfi_addheader.html,v 1.15 2004/05/04 17:55:50 ca Exp $
-->
<h1>smfi_addheader</h1>
<table border="0" cellspacing=4 cellpadding=4>
@ -69,7 +72,7 @@ Otherwise, it returns MI_SUCCESS.
To change a header's current value, use <a
href="smfi_chgheader.html">smfi_chgheader</a>.
<li>A filter which calls smfi_addheader must have set the SMFIF_ADDHDRS flag in the smfiDesc_str passed to <a href="smfi_register.html">smfi_register</a>.
<li>For smfi_chgheader, filter order is important. <b>Later filters will see the header changes made by earlier ones.</b>
<li>For smfi_addheader, filter order is important. <b>Later filters will see the header changes made by earlier ones.</b>
<li>Neither the name nor the value of the header is checked for
standards compliance. However, each line of the header must be under
2048 characters and should be under 998 characters. If longer headers

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_addrcpt</title></head>
<body>
<!--
$Id: smfi_addrcpt.html,v 1.9 2003/10/08 17:55:00 gshapiro Exp $
-->
<h1>smfi_addrcpt</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_chgheader</title></head>
<body>
<!--
$Id: smfi_chgheader.html,v 1.15 2003/04/30 22:10:53 ca Exp $
-->
<h1>smfi_chgheader</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_delrcpt</title></head>
<body>
<!--
$Id: smfi_delrcpt.html,v 1.9 2003/10/27 15:51:12 ca Exp $
-->
<h1>smfi_delrcpt</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_getpriv</title></head>
<body>
<!--
$Id: smfi_getpriv.html,v 1.7 2003/03/05 19:57:54 ca Exp $
-->
<h1>smfi_getpriv</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_getsymval</title></head>
<body>
<!--
$Id: smfi_getsymval.html,v 1.10 2003/03/05 19:57:54 ca Exp $
-->
<h1>smfi_getsymval</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -0,0 +1,123 @@
<html>
<head><title>smfi_insheader</title></head>
<body>
<!--
$Id: smfi_insheader.html,v 1.3 2004/05/04 16:20:34 gshapiro Exp $
-->
<h1>smfi_insheader</h1>
<table border="0" cellspacing=4 cellpadding=4>
<!---------- Synopsis ----------->
<tr><th valign="top" align=left width=150>SYNOPSIS</th><td>
<pre>
#include &lt;libmilter/mfapi.h&gt;
int smfi_insheader(
SMFICTX *ctx,
int hdridx,
char *headerf,
char *headerv
);
</pre>
Prepend a header to the current message.
</td></tr>
<!----------- Description ---------->
<tr><th valign="top" align=left>DESCRIPTION</th><td>
<table border="1" cellspacing=1 cellpadding=4>
<tr align="left" valign=top>
<th width="80">Called When</th>
<td>Called only from <a href="xxfi_eom.html">xxfi_eom</a>.</td>
</tr>
<tr align="left" valign=top>
<th width="80">Effects</th>
<td>Prepends a header to the current message.</td>
</tr>
</table>
<!----------- Arguments ---------->
<tr><th valign="top" align=left>ARGUMENTS</th><td>
<table border="1" cellspacing=0>
<tr bgcolor="#dddddd"><th>Argument</th><th>Description</th></tr>
<tr valign="top"><td>ctx</td>
<td>Opaque context structure.
</td></tr>
<tr valign="top"><td>hdridx</td>
<td>The location in the internal header list where this header should
be inserted; 0 makes it the topmost header, etc.
</td></tr>
<tr valign="top"><td>headerf</td>
<td>The header name, a non-NULL, null-terminated string.
</td></tr>
<tr valign="top"><td>headerv</td>
<td>The header value to be added, a non-NULL, null-terminated string. This may be the empty string.
</td></tr>
</table>
</td></tr>
<!----------- Return values ---------->
<tr>
<th valign="top" align=left>RETURN VALUES</th>
<td>smfi_insheader returns MI_FAILURE if:
<ul><li>headerf or headerv is NULL.
<li>Adding headers in the current connection state is invalid.
<li>Memory allocation fails.
<li>A network error occurs.
<li>SMFIF_ADDHDRS was not set when <a href="smfi_register.html">smfi_register</a> was called.
</ul>
Otherwise, it returns MI_SUCCESS.
</td>
</tr>
<!----------- Notes ---------->
<tr align="left" valign=top>
<th>NOTES</th>
<td>
<ul><li>smfi_insheader does not change a message's existing headers.
To change a header's current value, use <a
href="smfi_chgheader.html">smfi_chgheader</a>.
<li>A filter which calls smfi_insheader must have set the SMFIF_ADDHDRS flag in the smfiDesc_str passed to <a href="smfi_register.html">smfi_register</a>.
<li>For smfi_insheader, filter order is important. <b>Later filters will see the header changes made by earlier ones.</b>
<li>If hdridx is a number larger than the number of headers in the message, the header will simply be appended.
<li>Neither the name nor the value of the header is checked for
standards compliance. However, each line of the header must be under
2048 characters and should be under 998 characters. If longer headers
are needed, make them multi-line. To make a multi-line header, insert
a line feed (ASCII 0x0a, or <tt>\n</tt> in C) followed by at least
one whitespace character such as a space (ASCII 0x20) or tab (ASCII 0x09,
or <tt>\t</tt> in C). The line feed should NOT be preceded by a
carriage return (ASCII 0x0d); the MTA will add this automatically.
<b>It is the filter writer's responsibility to ensure that no standards
are violated.</b>
</ul>
</td>
</tr>
<!----------- Example code ---------->
<tr>
<th valign="top" align=left>EXAMPLE</th>
<td>
<pre>
int ret;
SMFICTX *ctx;
...
ret = smfi_insheader(ctx, 0, "First", "See me?");
</pre>
</td>
</tr>
</table>
<hr size="1">
<font size="-1">
Copyright (c) 2004 Sendmail, Inc. and its suppliers.
All rights reserved.
<br>
By using this file, you agree to the terms and conditions set
forth in the LICENSE.
</font>
</body>
</html>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_main</title></head>
<body>
<!--
$Id: smfi_main.html,v 1.7 2003/03/05 19:57:54 ca Exp $
-->
<h1>smfi_main</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -0,0 +1,78 @@
<html>
<head><title>smfi_opensocket</title></head>
<body>
<!--
$Id: smfi_opensocket.html,v 1.4 2003/10/20 22:28:57 msk Exp $
-->
<h1>smfi_opensocket</h1>
<table border="0" cellspacing=4 cellpadding=4>
<!---------- Synopsis ----------->
<tr><th valign="top" align=left width=150>SYNOPSIS</th><td>
<pre>
#include &lt;libmilter/mfapi.h&gt;
int smfi_opensocket(
bool rmsocket
);
</pre>
Attempt to create the interface socket MTAs will use to connect to the
filter.
</td></tr>
<!----------- Description ---------->
<tr><th valign="top" align=left>DESCRIPTION</th><td>
<table border="1" cellspacing=1 cellpadding=4>
<tr align="left" valign=top>
<th width="80">Called When</th>
<td>Called only from program mainline, before calling
<tt>smfi_main()</tt>.</td>
</tr>
<tr align="left" valign=top>
<th width="80">Effects</th>
<td>smfi_opensocket attempts to create the socket specified previously by
a call to <tt>smfi_setconn()</tt> which will be the interface between MTAs
and the filter. This allows the calling application to ensure that the
socket can be created. If this is not called, <tt>smfi_main()</tt> will
do so implicitly. </td>
</tr>
</table>
<!----------- Arguments ---------->
<tr><th valign="top" align=left>ARGUMENTS</th><td>
<table border="1" cellspacing=0>
<tr bgcolor="#dddddd"><th>Argument</th><th>Description</th></tr>
<tr valign="top"><td>rmsocket</td>
<td>A flag indicating whether or not the library should try to
remove any existing UNIX domain socket before trying to create
a new one.
</td></tr>
</table>
</td></tr>
<!----------- Return values ---------->
<tr>
<th valign="top" align=left>RETURN VALUES</th>
<td>smfi_opensocket will fail and return MI_FAILURE if:
<ul>
<li>The interface socket could not be created for any reason.
<li><tt>rmsocket</tt> was <tt>true</tt>, and either the socket could
not be examined, or exists and could not be removed.
<li><tt>smfi_setconn()</tt> has not been called.
</ul>
Otherwise, it will return MI_SUCCESS
</td>
</tr>
</table>
<hr size="1">
<font size="-1">
Copyright (c) 2003 Sendmail, Inc. and its suppliers.
All rights reserved.
<br>
By using this file, you agree to the terms and conditions set
forth in the LICENSE.
</font>
</body>
</html>

View File

@ -0,0 +1,68 @@
<html>
<head><title>smfi_progress</title></head>
<body>
<!--
$Id: smfi_progress.html,v 1.3 2003/03/05 19:57:54 ca Exp $
-->
<h1>smfi_progress</h1>
<table border="0" cellspacing=4 cellpadding=4>
<!---------- Synopsis ----------->
<tr><th valign="top" align=left width=150>SYNOPSIS</th><td>
<pre>
#include &lt;libmilter/mfapi.h&gt;
int smfi_progress(
SMFICTX *ctx;
);
</pre>
Notify the MTA that an operation is still in progress.
</td></tr>
<!----------- Description ---------->
<tr><th valign="top" align=left>DESCRIPTION</th><td>
<table border="1" cellspacing=1 cellpadding=4>
<tr align="left" valign=top>
<th width="80">Called When</th>
<td>Called only from <a href="xxfi_eom.html">xxfi_eom</a>.</td>
</tr>
<tr align="left" valign=top>
<th width="80">Effects</th>
<td>smfi_progress notifies the MTA that the filter is still working
on a message, causing the MTA to re-start its timeouts.</td>
</tr>
</table>
<!----------- Arguments ---------->
<tr><th valign="top" align=left>ARGUMENTS</th><td>
<table border="1" cellspacing=0>
<tr bgcolor="#dddddd"><th>Argument</th><th>Description</th></tr>
<tr valign="top"><td>ctx</td>
<td>Opaque context structure.
</td></tr>
</table>
</td></tr>
<!----------- Return values ---------->
<tr>
<th valign="top" align=left>RETURN VALUES</th>
<td>smfi_progress will fail and return MI_FAILURE if:
<ul>
<li>A network error occurs.
</ul>
Otherwise, it will return MI_SUCCESS
</td>
</tr>
</table>
<hr size="1">
<font size="-1">
Copyright (c) 2003 Sendmail, Inc. and its suppliers.
All rights reserved.
<br>
By using this file, you agree to the terms and conditions set
forth in the LICENSE.
</font>
</body>
</html>

View File

@ -0,0 +1,73 @@
<html>
<head><title>smfi_quarantine</title></head>
<body>
<!--
$Id: smfi_quarantine.html,v 1.3 2003/03/05 19:57:54 ca Exp $
-->
<h1>smfi_quarantine</h1>
<table border="0" cellspacing=4 cellpadding=4>
<!---------- Synopsis ----------->
<tr><th valign="top" align=left width=150>SYNOPSIS</th><td>
<pre>
#include &lt;libmilter/mfapi.h&gt;
int smfi_quarantine(
SMFICTX *ctx;
char *reason;
);
</pre>
Quarantine the message using the given reason.
</td></tr>
<!----------- Description ---------->
<tr><th valign="top" align=left>DESCRIPTION</th><td>
<table border="1" cellspacing=1 cellpadding=4>
<tr align="left" valign=top>
<th width="80">Called When</th>
<td>Called only from <a href="xxfi_eom.html">xxfi_eom</a>.</td>
</tr>
<tr align="left" valign=top>
<th width="80">Effects</th>
<td>smfi_quarantine quarantines the message using the given reason.</td>
</tr>
</table>
<!----------- Arguments ---------->
<tr><th valign="top" align=left>ARGUMENTS</th><td>
<table border="1" cellspacing=0>
<tr bgcolor="#dddddd"><th>Argument</th><th>Description</th></tr>
<tr valign="top"><td>ctx</td>
<td>Opaque context structure.
</td></tr>
<tr valign="top"><td>reason</td>
<td>The quarantine reason, a non-NULL and non-empty null-terminated string.
</td></tr>
</table>
</td></tr>
<!----------- Return values ---------->
<tr>
<th valign="top" align=left>RETURN VALUES</th>
<td>smfi_quarantine will fail and return MI_FAILURE if:
<ul>
<li>reason is NULL or empty.
<li>A network error occurs.
<li>SMFIF_QUARANTINE was not set when <a href="smfi_register.html">smfi_register</a> was called.
</ul>
Otherwise, it will return MI_SUCCESS
</td>
</tr>
</table>
<hr size="1">
<font size="-1">
Copyright (c) 2002-2003 Sendmail, Inc. and its suppliers.
All rights reserved.
<br>
By using this file, you agree to the terms and conditions set
forth in the LICENSE.
</font>
</body>
</html>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_register</title></head>
<body>
<!--
$Id: smfi_register.html,v 1.11 2003/05/26 04:10:52 gshapiro Exp $
-->
<h1>smfi_register</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_replacebody</title></head>
<body>
<!--
$Id: smfi_replacebody.html,v 1.13 2003/03/05 19:57:54 ca Exp $
-->
<h1>smfi_replacebody</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_setbacklog</title></head>
<body>
<!--
$Id: smfi_setbacklog.html,v 1.3 2003/03/05 19:57:54 ca Exp $
-->
<h1>smfi_setbacklog</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -1,6 +1,9 @@
<html>
<head><title>smfi_setconn</title></head>
<body>
<!--
$Id: smfi_setconn.html,v 1.14 2003/05/26 05:09:16 gshapiro Exp $
-->
<h1>smfi_setconn</h1>
<table border="0" cellspacing=4 cellpadding=4>

View File

@ -0,0 +1,67 @@
<html>
<head><title>smfi_setdbg</title></head>
<body>
<!--
$Id: smfi_setdbg.html,v 1.1 2003/12/03 17:28:49 ca Exp $
-->
<h1>smfi_setdbg</h1>
<table border="0" cellspacing=4 cellpadding=4>
<!---------- Synopsis ----------->
<tr><th valign="top" align=left width=150>SYNOPSIS</th><td>
<pre>
#include &lt;libmilter/mfapi.h&gt;
int smfi_setdbg(
int level;
);
</pre>
Set the debugging (tracing) level for the milter library.
</td></tr>
<!----------- Description ---------->
<tr><th valign="top" align=left>DESCRIPTION</th><td>
<table border="1" cellspacing=1 cellpadding=4>
<tr align="left" valign=top>
<th width="80">Called When</th>
<td>Called from any any routine at any time.</td>
</tr>
<tr align="left" valign=top>
<th width="80">Effects</th>
<td>smfi_setdbg sets the milter library's internal debugging level
to a new level so that code details may be traced.
A level of zero turns off debugging. The greater
(more positive) the level the more detailed the debugging. Six is
the current, highest, useful value.</td>
</tr>
</table>
<!----------- Arguments ---------->
<tr><th valign="top" align=left>ARGUMENTS</th><td>
<table border="1" cellspacing=0>
<tr bgcolor="#dddddd"><th>Argument</th><th>Description</th></tr>
<tr valign="top"><td>level</td>
<td>The new debugging level
</td></tr>
</table>
</td></tr>
<!----------- Return values ---------->
<tr>
<th valign="top" align=left>RETURN VALUES</th>
<td>smfi_setdbg returns MI_SUCCESS by default.
</td>
</tr>
</table>
<hr size="1">
<font size="-1">
Copyright (c) 2003 Sendmail, Inc. and its suppliers.
All rights reserved.
<br>
By using this file, you agree to the terms and conditions set
forth in the LICENSE.
</font>
</body>
</html>

View File

@ -0,0 +1,147 @@
<html>
<head><title>smfi_setmlreply</title></head>
<body>
<!--
$Id: smfi_setmlreply.html,v 1.1 2004/01/01 00:32:45 gshapiro Exp $
-->
<h1>smfi_setmlreply</h1>
<table border="0" cellspacing=4 cellpadding=4>
<!---------- Synopsis ----------->
<tr><th valign="top" align=left width=150>SYNOPSIS</th><td>
<pre>
#include &lt;libmilter/mfapi.h&gt;
int smfi_setmlreply(
SMFICTX *ctx,
char *rcode,
char *xcode,
...
);
</pre>
Set the default SMTP error reply code to a multi-line response. Only 4XX
and 5XX replies are accepted.
</td></tr>
<!----------- Description ---------->
<tr><th valign="top" align=left>DESCRIPTION</th><td>
<table border="1" cellspacing=1 cellpadding=4>
<tr align="left" valign=top>
<th width="80">Called When</th>
<td>smfi_setmlreply may be called from any of the xxfi_ callbacks
other than xxfi_connect.</td>
</tr>
<tr align="left" valign=top>
<th width="80">Effects</th>
<td>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.
This code will be used on subsequent error replies resulting from actions
taken by this filter.</td>
</tr>
</table>
<!----------- Arguments ---------->
<tr><th valign="top" align=left>ARGUMENTS</th><td>
<table border="1" cellspacing=0>
<tr bgcolor="#dddddd"><th>Argument</th><th>Description</th></tr>
<tr valign="top"><td>ctx</td>
<td>Opaque context structure.
</td></tr>
<tr valign="top"><td>rcode</td>
<td>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.
</td></tr>
<tr valign="top"><td>xcode</td>
<td>The extended (RFC 1893/2034) reply code. If xcode is NULL, no
extended code is used. Otherwise, xcode must conform to RFC 1893/2034.
</td></tr>
<tr valign="top"><td>...</td>
<td>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.
</td></tr>
</table>
</td></tr>
<!----------- Example ---------->
<tr>
<th valign="top" align=left>RETURN VALUES</th>
<td>
For example, the code:<BR>
<pre>
ret = smfi_setmlreply(ctx, "550", "5.7.0",
"Spammer access rejected",
"Please see our policy at:",
"http://www.example.com/spampolicy.html",
NULL);
</pre>
<BR>would give the SMTP response:<BR>
<pre>
550-5.7.0 Spammer access rejected
550-5.7.0 Please see our policy at:
550 5.7.0 http://www.example.com/spampolicy.html
</td>
</tr>
<!----------- Return values ---------->
<tr>
<th valign="top" align=left>RETURN VALUES</th>
<td>smfi_setmlreply will fail and return MI_FAILURE if:
<ul>
<li>The rcode or xcode argument is invalid.
<li>A memory-allocation failure occurs.
<li>If any text line contains a carraige return or line feed.
<li>The length of any text line is more than MAXREPLYLEN (980).
<li>More than 32 lines of text replies are given.
</ul>
Otherwise, it return MI_SUCCESS.
</td>
</tr>
<!----------- Notes ---------->
<tr align="left" valign=top>
<th>NOTES</th>
<td>
<ul>
<li>Values passed to smfi_setmlreply are not checked for standards compliance.
<li>The message parameter should contain only printable characters,
other characters may lead to undefined behavior.
For example, CR or LF will cause the call to fail,
single '%' characters will cause the text to be ignored
(if there really should be a '%' in the string,
use '%%' just like for <tt>printf(3)</tt>).
<li>For details about reply codes and their meanings, please see RFC's
<a href="http://www.rfc-editor.org/rfc/rfc821.txt">821</a>/
<a href="http://www.rfc-editor.org/rfc/rfc2821.txt">2821</a>
and
<a href="http://www.rfc-editor.org/rfc/rfc1893.txt">1893</a>/
<a href="http://www.rfc-editor.org/rfc/rfc2034.txt">2034</a>.
<li>If the reply code (rcode) given is a '4XX' code but SMFI_REJECT is used
for the message, the custom reply is not used.
<li>Similarly, if the reply code (rcode) given is a '5XX' code but
SMFI_TEMPFAIL is used for the message, the custom reply is not used.
<BR>
Note: in neither of the last two cases an error is returned to the milter,
libmilter silently ignores the reply code.
<li>
If the milter returns SMFI_TEMPFAIL
and sets the reply code to '421',
then the SMTP server will terminate the SMTP session with a 421
error code.
</ul>
</td>
</tr>
</table>
<hr size="1">
<font size="-1">
Copyright (c) 2000, 2002-2003 Sendmail, Inc. and its suppliers.
All rights reserved.
<br>
By using this file, you agree to the terms and conditions set
forth in the LICENSE.
</font>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More