This commit was generated by cvs2svn to compensate for changes in r173340,
which included commits to RCS files with non-trunk default branches.
This commit is contained in:
commit
b834e0522a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=173341
@ -1,4 +1,4 @@
|
|||||||
# $Id: CACerts,v 8.1 2004/03/01 22:05:47 ca Exp $
|
# $Id: CACerts,v 8.3 2007/06/11 22:04:46 ca Exp $
|
||||||
# This file contains some CA certificates that are used to sign the
|
# This file contains some CA certificates that are used to sign the
|
||||||
# certificates of mail servers of members of the sendmail consortium
|
# certificates of mail servers of members of the sendmail consortium
|
||||||
# who may reply to questions etc sent to sendmail.org.
|
# who may reply to questions etc sent to sendmail.org.
|
||||||
@ -73,73 +73,6 @@ iTMZxC4pWjmnDueb0kzHuX1qPrQAg4bTFij9rVVlYE4UAkbT
|
|||||||
-----END CERTIFICATE-----
|
-----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:
|
Certificate:
|
||||||
Data:
|
Data:
|
||||||
Version: 3 (0x2)
|
Version: 3 (0x2)
|
||||||
@ -210,93 +143,94 @@ xBJlUbs98fcltM0L9lt6YSWtBgoBVdxxBSkNc+kwUb7T4bKJ/A8o9wZ1lhs0deAH
|
|||||||
Certificate:
|
Certificate:
|
||||||
Data:
|
Data:
|
||||||
Version: 3 (0x2)
|
Version: 3 (0x2)
|
||||||
Serial Number: 0 (0x0)
|
Serial Number:
|
||||||
|
fa:7c:2c:80:29:3f:c2:64
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
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
|
Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2007/emailAddress=ca+ca-rsa2007@esmtp.org
|
||||||
Validity
|
Validity
|
||||||
Not Before: Aug 7 15:56:45 2003 GMT
|
Not Before: May 4 02:07:56 2007 GMT
|
||||||
Not After : Aug 6 15:56:45 2006 GMT
|
Not After : May 3 02:07:56 2010 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: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2007/emailAddress=ca+ca-rsa2007@esmtp.org
|
||||||
Subject Public Key Info:
|
Subject Public Key Info:
|
||||||
Public Key Algorithm: rsaEncryption
|
Public Key Algorithm: rsaEncryption
|
||||||
RSA Public Key: (2048 bit)
|
RSA Public Key: (2048 bit)
|
||||||
Modulus (2048 bit):
|
Modulus (2048 bit):
|
||||||
00:aa:37:0f:09:a9:1c:e3:1a:0c:fe:bd:6c:37:a4:
|
00:b0:28:91:31:af:82:ce:72:ef:36:ab:7d:e9:b1:
|
||||||
cf:87:db:af:6b:b4:19:d4:11:db:c6:56:ca:39:80:
|
f5:77:66:38:4b:38:1f:5f:3d:12:d3:c8:fd:9a:f4:
|
||||||
c6:a4:38:b0:bc:ac:7e:be:71:30:86:2c:dc:fa:b5:
|
d4:f6:b8:90:f9:26:5f:29:f7:43:f9:34:ec:65:62:
|
||||||
fd:58:23:a0:c1:ad:11:53:85:ca:fb:e6:d8:7e:28:
|
01:bb:64:f1:5d:ea:75:04:3d:92:65:60:a2:06:62:
|
||||||
eb:84:3b:cd:a3:fa:28:a5:cb:c7:b2:54:99:3e:40:
|
fa:88:ca:d8:20:50:c8:1e:38:53:b5:18:dd:b7:bd:
|
||||||
2a:27:43:4b:0c:26:4b:af:97:3d:92:82:d9:eb:2c:
|
c7:08:35:4c:d9:dc:c6:97:56:37:b6:65:33:74:5a:
|
||||||
7f:77:fd:b8:cd:7e:1e:04:81:17:3c:e2:44:68:ce:
|
b2:c3:85:08:2b:b7:26:70:ff:38:02:1a:67:6a:d0:
|
||||||
88:66:02:90:24:35:24:c4:4c:ad:77:04:1a:3a:d5:
|
49:18:10:4b:f8:db:af:06:9c:b1:a8:82:a1:b1:75:
|
||||||
59:28:28:03:da:03:9d:f4:2e:52:6e:b5:36:96:4b:
|
d2:52:9b:53:0c:ca:a7:e3:15:38:79:6d:a1:f5:ef:
|
||||||
14:f8:fc:8e:c6:d3:9b:e2:80:90:8b:71:d7:d0:5c:
|
7c:8b:fd:bd:04:78:f9:e8:1e:b9:92:ea:74:d7:45:
|
||||||
43:b2:49:f1:5a:26:f3:5d:9e:3b:01:98:db:e3:ed:
|
1e:4c:c8:bd:f4:5c:fc:1a:7f:e7:31:c6:ab:cb:78:
|
||||||
5e:8d:dd:cf:aa:68:9d:0b:c9:e2:4e:fc:16:44:72:
|
c7:4d:2f:b5:72:10:35:27:4a:1a:fa:53:19:f8:a7:
|
||||||
93:07:62:18:05:c1:47:81:3c:3d:e4:e4:22:da:2c:
|
59:63:eb:e9:15:ab:dc:71:69:8c:42:1c:96:4e:89:
|
||||||
d6:4a:44:52:06:7a:83:b5:e9:52:38:97:2f:75:a6:
|
80:66:c9:9e:21:d5:3d:08:19:74:a5:f5:07:a0:ae:
|
||||||
5c:6f:87:8a:8d:83:f4:d0:04:a5:34:18:5e:a1:06:
|
de:79:af:fd:42:c2:79:7e:8c:f8:39:22:3b:c3:c4:
|
||||||
16:b3:54:ce:64:47:ca:70:56:a3:6f:b9:7f:af:91:
|
58:3b:d0:0d:e6:a9:11:b6:a2:cd:2e:e5:16:66:fd:
|
||||||
76:78:70:b4:ab:ae:8e:d5:22:26:57:b1:ba:e7:4b:
|
7e:65:33:94:b0:36:80:27:f5:80:76:a9:e5:df:f2:
|
||||||
18:21
|
cf:ef
|
||||||
Exponent: 65537 (0x10001)
|
Exponent: 65537 (0x10001)
|
||||||
X509v3 extensions:
|
X509v3 extensions:
|
||||||
X509v3 Subject Key Identifier:
|
X509v3 Subject Key Identifier:
|
||||||
3A:12:03:DB:0F:9E:28:45:A6:34:8D:38:AB:BA:47:8C:2A:A0:E4:2E
|
B2:49:6B:52:45:EE:90:36:D2:79:47:03:33:D9:A0:BA:80:50:DA:1C
|
||||||
X509v3 Authority Key Identifier:
|
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
|
keyid:B2:49:6B:52:45:EE:90:36:D2:79:47:03:33:D9:A0:BA:80:50:DA:1C
|
||||||
DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2003/emailAddress=ca+ca-rsa2003@esmtp.org
|
DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2007/emailAddress=ca+ca-rsa2007@esmtp.org
|
||||||
serial:00
|
serial:FA:7C:2C:80:29:3F:C2:64
|
||||||
|
|
||||||
X509v3 Basic Constraints:
|
X509v3 Basic Constraints:
|
||||||
CA:TRUE
|
CA:TRUE
|
||||||
X509v3 Subject Alternative Name:
|
X509v3 Subject Alternative Name:
|
||||||
email:ca+ca-rsa2003@esmtp.org
|
email:ca+ca-rsa2007@esmtp.org
|
||||||
X509v3 Issuer Alternative Name:
|
X509v3 Issuer Alternative Name:
|
||||||
email:ca+ca-rsa2003@esmtp.org
|
email:ca+ca-rsa2007@esmtp.org
|
||||||
Signature Algorithm: md5WithRSAEncryption
|
Signature Algorithm: md5WithRSAEncryption
|
||||||
96:83:b6:54:93:df:38:d0:48:a7:a1:c8:08:c9:0f:e9:80:05:
|
98:98:7c:d3:d0:5b:72:47:15:e6:22:68:bb:78:0e:78:66:e9:
|
||||||
e3:7e:c3:61:51:88:7b:7a:bb:24:b0:69:a3:22:e4:98:38:da:
|
56:16:d8:bc:9d:5a:dc:27:29:fb:91:2d:6a:21:35:18:56:b4:
|
||||||
c8:c3:eb:52:70:63:e2:66:f2:59:ef:56:be:aa:7c:87:6e:94:
|
4f:2a:09:c0:08:6f:9a:59:2b:2e:72:9a:fb:50:ba:c7:a9:91:
|
||||||
85:d4:71:ba:35:f7:ee:d0:6e:52:1d:1f:e4:fd:2f:e2:70:31:
|
a0:f9:6c:be:cf:78:42:43:02:70:53:97:ba:6a:e3:da:17:e8:
|
||||||
5d:b7:8b:13:cc:70:10:21:fa:34:29:8f:8d:d8:4a:c7:0f:b2:
|
1f:c7:3a:5b:e7:bc:eb:e5:24:4c:f5:cf:61:34:1e:20:ed:17:
|
||||||
36:e7:1e:1e:46:d1:11:84:80:7c:bb:24:c4:63:be:2a:24:53:
|
63:ef:81:d3:9e:25:fe:cc:05:19:cc:8a:82:c9:4c:3a:b5:6b:
|
||||||
74:0c:89:e0:6a:f4:08:63:bf:54:d3:0a:d9:fc:fe:6c:de:4f:
|
49:51:76:46:02:aa:60:bb:c4:b9:61:48:33:da:79:8d:46:a3:
|
||||||
97:61:08:a0:10:92:eb:af:06:ec:50:86:c4:cc:6b:31:32:60:
|
06:20:98:f3:b2:db:3b:ad:c9:1d:0e:97:3d:b7:14:19:d3:7d:
|
||||||
25:7a:09:47:f8:42:7a:a2:d5:90:fa:48:be:bf:0a:e1:03:b8:
|
04:8b:6a:81:e0:11:5b:e1:35:a3:ff:2f:11:86:1c:31:85:7a:
|
||||||
56:24:b9:12:e9:ba:09:30:47:be:a5:8e:a2:92:a4:dc:a6:a7:
|
fd:3f:36:ef:99:25:46:2e:b0:cb:43:45:4a:ec:be:d3:3f:a4:
|
||||||
c6:29:39:65:6e:64:4a:1b:b2:c3:07:29:f5:c0:7e:78:e0:22:
|
77:9b:79:cc:ce:92:63:a5:d9:ed:db:a0:9d:5d:7c:d7:80:f6:
|
||||||
9b:98:d4:87:91:ca:e1:66:9d:2f:70:f1:4c:a5:8e:2e:68:52:
|
c9:41:fb:02:96:8e:fd:f3:da:05:9d:81:a7:25:da:26:35:3b:
|
||||||
b3:bd:95:76:56:40:0e:46:47:e4:b3:ec:aa:3c:e8:86:96:5a:
|
a9:0c:8c:f5:a7:5d:48:ec:87:c7:7a:60:51:76:f2:de:9b:14:
|
||||||
ed:fa:c9:10:95:53:04:13:71:01:91:ce:cd:3a:51:c6:30:e9:
|
2b:55:8a:43:df:99:19:f3:eb:e7:03:e6:a7:a2:a2:28:dd:d5:
|
||||||
48:49:64:a3
|
07:6a:3f:f7
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIFFzCCA/+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBpTELMAkGA1UEBhMCVVMx
|
MIIFJzCCBA+gAwIBAgIJAPp8LIApP8JkMA0GCSqGSIb3DQEBBAUAMIGlMQswCQYD
|
||||||
EzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCEJlcmtlbGV5MRQwEgYDVQQK
|
|
||||||
EwtFbmRtYWlsIE9yZzEMMAoGA1UECxMDTVRBMSIwIAYDVQQDExlDbGF1cyBBc3Nt
|
|
||||||
YW5uIENBIFJTQSAyMDAzMSYwJAYJKoZIhvcNAQkBFhdjYStjYS1yc2EyMDAzQGVz
|
|
||||||
bXRwLm9yZzAeFw0wMzA4MDcxNTU2NDVaFw0wNjA4MDYxNTU2NDVaMIGlMQswCQYD
|
|
||||||
VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIQmVya2VsZXkx
|
VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIQmVya2VsZXkx
|
||||||
FDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNNVEExIjAgBgNVBAMTGUNs
|
FDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNNVEExIjAgBgNVBAMTGUNs
|
||||||
YXVzIEFzc21hbm4gQ0EgUlNBIDIwMDMxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz
|
YXVzIEFzc21hbm4gQ0EgUlNBIDIwMDcxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz
|
||||||
YTIwMDNAZXNtdHAub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
YTIwMDdAZXNtdHAub3JnMB4XDTA3MDUwNDAyMDc1NloXDTEwMDUwMzAyMDc1Nlow
|
||||||
qjcPCakc4xoM/r1sN6TPh9uva7QZ1BHbxlbKOYDGpDiwvKx+vnEwhizc+rX9WCOg
|
gaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMREwDwYDVQQHEwhC
|
||||||
wa0RU4XK++bYfijrhDvNo/oopcvHslSZPkAqJ0NLDCZLr5c9koLZ6yx/d/24zX4e
|
ZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAKBgNVBAsTA01UQTEiMCAG
|
||||||
BIEXPOJEaM6IZgKQJDUkxEytdwQaOtVZKCgD2gOd9C5SbrU2lksU+PyOxtOb4oCQ
|
A1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwNzEmMCQGCSqGSIb3DQEJARYX
|
||||||
i3HX0FxDsknxWibzXZ47AZjb4+1ejd3PqmidC8niTvwWRHKTB2IYBcFHgTw95OQi
|
Y2ErY2EtcnNhMjAwN0Blc210cC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||||
2izWSkRSBnqDtelSOJcvdaZcb4eKjYP00ASlNBheoQYWs1TOZEfKcFajb7l/r5F2
|
ggEKAoIBAQCwKJExr4LOcu82q33psfV3ZjhLOB9fPRLTyP2a9NT2uJD5Jl8p90P5
|
||||||
eHC0q66O1SImV7G650sYIQIDAQABo4IBTjCCAUowHQYDVR0OBBYEFDoSA9sPnihF
|
NOxlYgG7ZPFd6nUEPZJlYKIGYvqIytggUMgeOFO1GN23vccINUzZ3MaXVje2ZTN0
|
||||||
pjSNOKu6R4wqoOQuMIHSBgNVHSMEgcowgceAFDoSA9sPnihFpjSNOKu6R4wqoOQu
|
WrLDhQgrtyZw/zgCGmdq0EkYEEv4268GnLGogqGxddJSm1MMyqfjFTh5baH173yL
|
||||||
oYGrpIGoMIGlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8G
|
/b0EePnoHrmS6nTXRR5MyL30XPwaf+cxxqvLeMdNL7VyEDUnShr6Uxn4p1lj6+kV
|
||||||
A1UEBxMIQmVya2VsZXkxFDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNN
|
q9xxaYxCHJZOiYBmyZ4h1T0IGXSl9Qegrt55r/1Cwnl+jPg5IjvDxFg70A3mqRG2
|
||||||
VEExIjAgBgNVBAMTGUNsYXVzIEFzc21hbm4gQ0EgUlNBIDIwMDMxJjAkBgkqhkiG
|
os0u5RZm/X5lM5SwNoAn9YB2qeXf8s/vAgMBAAGjggFWMIIBUjAdBgNVHQ4EFgQU
|
||||||
9w0BCQEWF2NhK2NhLXJzYTIwMDNAZXNtdHAub3JnggEAMAwGA1UdEwQFMAMBAf8w
|
sklrUkXukDbSeUcDM9mguoBQ2hwwgdoGA1UdIwSB0jCBz4AUsklrUkXukDbSeUcD
|
||||||
IgYDVR0RBBswGYEXY2ErY2EtcnNhMjAwM0Blc210cC5vcmcwIgYDVR0SBBswGYEX
|
M9mguoBQ2hyhgaukgagwgaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9y
|
||||||
Y2ErY2EtcnNhMjAwM0Blc210cC5vcmcwDQYJKoZIhvcNAQEEBQADggEBAJaDtlST
|
bmlhMREwDwYDVQQHEwhCZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAK
|
||||||
3zjQSKehyAjJD+mABeN+w2FRiHt6uySwaaMi5Jg42sjD61JwY+Jm8lnvVr6qfIdu
|
BgNVBAsTA01UQTEiMCAGA1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwNzEm
|
||||||
lIXUcbo19+7QblIdH+T9L+JwMV23ixPMcBAh+jQpj43YSscPsjbnHh5G0RGEgHy7
|
MCQGCSqGSIb3DQEJARYXY2ErY2EtcnNhMjAwN0Blc210cC5vcmeCCQD6fCyAKT/C
|
||||||
JMRjviokU3QMieBq9Ahjv1TTCtn8/mzeT5dhCKAQkuuvBuxQhsTMazEyYCV6CUf4
|
ZDAMBgNVHRMEBTADAQH/MCIGA1UdEQQbMBmBF2NhK2NhLXJzYTIwMDdAZXNtdHAu
|
||||||
Qnqi1ZD6SL6/CuEDuFYkuRLpugkwR76ljqKSpNymp8YpOWVuZEobssMHKfXAfnjg
|
b3JnMCIGA1UdEgQbMBmBF2NhK2NhLXJzYTIwMDdAZXNtdHAub3JnMA0GCSqGSIb3
|
||||||
IpuY1IeRyuFmnS9w8Uylji5oUrO9lXZWQA5GR+Sz7Ko86IaWWu36yRCVUwQTcQGR
|
DQEBBAUAA4IBAQCYmHzT0FtyRxXmImi7eA54ZulWFti8nVrcJyn7kS1qITUYVrRP
|
||||||
zs06UcYw6UhJZKM=
|
KgnACG+aWSsucpr7ULrHqZGg+Wy+z3hCQwJwU5e6auPaF+gfxzpb57zr5SRM9c9h
|
||||||
|
NB4g7Rdj74HTniX+zAUZzIqCyUw6tWtJUXZGAqpgu8S5YUgz2nmNRqMGIJjzsts7
|
||||||
|
rckdDpc9txQZ030Ei2qB4BFb4TWj/y8RhhwxhXr9PzbvmSVGLrDLQ0VK7L7TP6R3
|
||||||
|
m3nMzpJjpdnt26CdXXzXgPbJQfsClo7989oFnYGnJdomNTupDIz1p11I7IfHemBR
|
||||||
|
dvLemxQrVYpD35kZ8+vnA+anoqIo3dUHaj/3
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
@ -12,13 +12,13 @@ sendmail/SECURITY for more installation information.
|
|||||||
2. Create any necessary site configuration build files, as noted in
|
2. Create any necessary site configuration build files, as noted in
|
||||||
devtools/Site/README.
|
devtools/Site/README.
|
||||||
|
|
||||||
3. In the sendmail/ directory, run "sh Build" (see sendmail/README for
|
3. In the sendmail/ directory, run "sh ./Build" (see sendmail/README for
|
||||||
details).
|
details).
|
||||||
|
|
||||||
4. Change to the cf/cf/ directory (that's not a typo): Copy whichever .mc
|
4. Change to the cf/cf/ directory (that's not a typo): Copy whichever .mc
|
||||||
file best matches your environment to sendmail.mc. Next, tailor it
|
file best matches your environment to sendmail.mc. Next, tailor it
|
||||||
as explained in cf/README. Then run
|
as explained in cf/README. Then run
|
||||||
"sh Build sendmail.cf".
|
"sh ./Build sendmail.cf".
|
||||||
|
|
||||||
5. Back up your current /etc/mail/sendmail.cf and the sendmail binary (whose
|
5. Back up your current /etc/mail/sendmail.cf and the sendmail binary (whose
|
||||||
location varies from operating system to operating system, but is usually
|
location varies from operating system to operating system, but is usually
|
||||||
@ -26,21 +26,21 @@ sendmail/SECURITY for more installation information.
|
|||||||
|
|
||||||
6. Install sendmail.cf as /etc/mail/sendmail.cf and submit.cf as
|
6. Install sendmail.cf as /etc/mail/sendmail.cf and submit.cf as
|
||||||
/etc/mail/submit.cf. This can be done in the cf/cf by using
|
/etc/mail/submit.cf. This can be done in the cf/cf by using
|
||||||
"sh Build install-cf".
|
"sh ./Build install-cf".
|
||||||
|
|
||||||
Please read sendmail/SECURITY before continuing; you have to create a
|
Please read sendmail/SECURITY before continuing; you have to create a
|
||||||
new user smmsp and a new group smmsp for the default installation.
|
new user smmsp and a new group smmsp for the default installation.
|
||||||
Then install the sendmail binary built in step 3 by cd-ing back to
|
Then install the sendmail binary built in step 3 by cd-ing back to
|
||||||
sendmail/ and running "sh Build install".
|
sendmail/ and running "sh ./Build install".
|
||||||
|
|
||||||
7. For each of the associated sendmail utilities (makemap, mailstats,
|
7. For each of the associated sendmail utilities (makemap, mailstats,
|
||||||
etc.), read the README in the utility's directory if it exists. When
|
etc.), read the README in the utility's directory if it exists. When
|
||||||
you are ready to install it, back up your installed version and type "sh
|
you are ready to install it, back up your installed version and type
|
||||||
Build install".
|
"sh ./Build install".
|
||||||
|
|
||||||
8. If you are upgrading from an older version of sendmail and are using any
|
8. If you are upgrading from an older version of sendmail and are using any
|
||||||
database maps, be sure to rebuild them with the new version of makemap,
|
database maps, be sure to rebuild them with the new version of makemap,
|
||||||
in case you are now using a different (and thereby incompatible) version
|
in case you are now using a different (and thereby incompatible) version
|
||||||
of Berkeley DB.
|
of Berkeley DB.
|
||||||
|
|
||||||
$Revision: 8.15 $, Last updated $Date: 2002/05/28 18:09:25 $
|
$Revision: 8.16 $, Last updated $Date: 2007/10/03 21:00:28 $
|
||||||
|
@ -1,11 +1,76 @@
|
|||||||
SENDMAIL RELEASE NOTES
|
SENDMAIL RELEASE NOTES
|
||||||
$Id: RELEASE_NOTES,v 8.1888 2007/04/03 23:28:40 ca Exp $
|
$Id: RELEASE_NOTES,v 8.1909 2007/10/31 16:04:13 ca Exp $
|
||||||
|
|
||||||
|
|
||||||
This listing shows the version of the sendmail binary, the version
|
This listing shows the version of the sendmail binary, the version
|
||||||
of the sendmail configuration files, the date of release, and a
|
of the sendmail configuration files, the date of release, and a
|
||||||
summary of the changes in that release.
|
summary of the changes in that release.
|
||||||
|
|
||||||
|
8.14.2/8.14.2 2007/11/01
|
||||||
|
If a message was queued and it contained 8 bit characters in
|
||||||
|
a From: or To: header, then those characters could be
|
||||||
|
"mistaken" for internal control characters during a queue
|
||||||
|
run and trigger various consistency checks. Problem
|
||||||
|
noted by Neil Rickert of Northern Illinois University.
|
||||||
|
If MaxMimeHeaderLength is set to a value greater than 0 (which
|
||||||
|
it is by default) then even if the Linelimit parameter
|
||||||
|
is 0, sendmail corrupted in the non-transfer-encoding
|
||||||
|
case every MAXLINE-1 characters. Patch from John Gardiner
|
||||||
|
Myers of Proofpoint.
|
||||||
|
Setting the suboption DeliveryMode for DaemonPortOptions did not
|
||||||
|
work in earlier 8.14 versions.
|
||||||
|
Note: DeliveryMode=interactive is silently converted to
|
||||||
|
background if a milter can reject or delete a recipient.
|
||||||
|
Prior to 8.14 this happened only if milter could delete
|
||||||
|
recipients.
|
||||||
|
ClientRate should trigger when the limit was exceeded (as
|
||||||
|
documented), not when it was reached. Patch from
|
||||||
|
John Beck of Sun Microsystems.
|
||||||
|
Force a queue run for -qGqueuegroup even if no runners are
|
||||||
|
specified (R=0) and forking (F=f) is requested.
|
||||||
|
When multiple results are requested for a DNS map lookup
|
||||||
|
(-z and -Z), return only those that are relevant for
|
||||||
|
the query (not also those in the "additional section".)
|
||||||
|
If the message transfer time to sendmail (when acting as server)
|
||||||
|
exceeds Timeout.queuewarn or Timeout.queuereturn and
|
||||||
|
the message is refused (by a milter), sendmail previously
|
||||||
|
created a delivery status notification (DSN). Patch
|
||||||
|
from Doug Heath of The Hertz Corporation.
|
||||||
|
A code change in Cyrus-SASL 2.1.22 for sasl_decode64() requires
|
||||||
|
the MTA to deal with some input (i.e., "=") itself.
|
||||||
|
Problem noted by Eliot Lear.
|
||||||
|
sendmail counted a delivery as successful if PIPELINING is
|
||||||
|
compiled in but not offered by the server and the
|
||||||
|
delivery failed temporarily. Patch from Werner Wiethege.
|
||||||
|
If getting the result of an LDAP query times out then close the
|
||||||
|
map so it will be reopened on the next lookup. This
|
||||||
|
should help "failover" configurations that specify more
|
||||||
|
than one LDAP server.
|
||||||
|
If check_compat returns $#discard then a "savemail panic" could
|
||||||
|
be triggered under some circumstances (e.g., requiring
|
||||||
|
a system which does not have the compile time flag
|
||||||
|
HASFLOCK set). Based on patch by Motonori Nakamura
|
||||||
|
of National Institute of Informatics, Japan.
|
||||||
|
If a milter rejected a recipient, the count for nrcpts= in the
|
||||||
|
logfile entry might have been wrong. Problem found by
|
||||||
|
Petra Humann of TU Dresden.
|
||||||
|
If a milter invoked smfi_chgfrom() where ESMTP arguments are not
|
||||||
|
NULL, the message body was lost. Patch from Motonori
|
||||||
|
Nakamura of National Institute of Informatics, Japan.
|
||||||
|
sendmail(8) had a bogus space in -qGname. Patch from Peng Haitao.
|
||||||
|
CONTRIB: buildvirtuser: Preserve ownership and permissions when
|
||||||
|
replacing files.
|
||||||
|
CONTRIB: buildvirtuser: Skip dot-files (e.g., .cvsignore) when
|
||||||
|
reading the /etc/mail/virtusers/ directory.
|
||||||
|
CONTRIB: buildvirtuser: Emit warnings instead of exiting where
|
||||||
|
appropriate.
|
||||||
|
LIBMILTER: Fix ABI backwards compatibility so milters compiled
|
||||||
|
against an older libmilter.so shared library can use an
|
||||||
|
8.14 libmilter.so shared library.
|
||||||
|
LIBMILTER: smfi_version() did not properly extract the patchlevel
|
||||||
|
from the version number, however, the returned value was
|
||||||
|
correct for the current libmilter version.
|
||||||
|
|
||||||
8.14.1/8.14.1 2007/04/03
|
8.14.1/8.14.1 2007/04/03
|
||||||
Even though a milter rejects a recipient the MTA will still keep
|
Even though a milter rejects a recipient the MTA will still keep
|
||||||
it in its list of recipients and deliver to it if the
|
it in its list of recipients and deliver to it if the
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
#####
|
#####
|
||||||
##### SENDMAIL CONFIGURATION FILE
|
##### SENDMAIL CONFIGURATION FILE
|
||||||
#####
|
#####
|
||||||
##### built by ca@nother.smi.sendmail.com on Tue Apr 3 16:32:55 PDT 2007
|
##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007
|
||||||
##### in /extra/home/ca/sm-8.14.1/OpenSource/sendmail-8.14.1/cf/cf
|
##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf
|
||||||
##### using ../ as configuration include directory
|
##### using ../ as configuration include directory
|
||||||
#####
|
#####
|
||||||
######################################################################
|
######################################################################
|
||||||
@ -35,7 +35,7 @@
|
|||||||
##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ #####
|
##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ #####
|
||||||
|
|
||||||
|
|
||||||
##### $Id: proto.m4,v 8.730 2007/02/01 18:50:03 ca Exp $ #####
|
##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ #####
|
||||||
|
|
||||||
# level 10 config file format
|
# level 10 config file format
|
||||||
V10/Berkeley
|
V10/Berkeley
|
||||||
@ -114,7 +114,7 @@ D{MTAHost}[127.0.0.1]
|
|||||||
|
|
||||||
|
|
||||||
# Configuration version number
|
# Configuration version number
|
||||||
DZ8.14.1/Submit
|
DZ8.14.2/Submit
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
divert(-1)
|
divert(-1)
|
||||||
#
|
#
|
||||||
# Copyright (c) 1999-2002, 2004 Sendmail, Inc. and its suppliers.
|
# Copyright (c) 1999-2002, 2004, 2007 Sendmail, Inc. and its suppliers.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# By using this file, you agree to the terms and conditions set
|
# By using this file, you agree to the terms and conditions set
|
||||||
@ -10,7 +10,7 @@ divert(-1)
|
|||||||
#
|
#
|
||||||
|
|
||||||
divert(0)
|
divert(0)
|
||||||
VERSIONID(`$Id: ldap_routing.m4,v 8.14 2004/02/18 02:45:11 gshapiro Exp $')
|
VERSIONID(`$Id: ldap_routing.m4,v 8.15 2007/05/01 17:38:25 ca Exp $')
|
||||||
divert(-1)
|
divert(-1)
|
||||||
|
|
||||||
# Check first two arguments. If they aren't set, may need to warn in proto.m4
|
# Check first two arguments. If they aren't set, may need to warn in proto.m4
|
||||||
|
@ -13,7 +13,7 @@ divert(-1)
|
|||||||
#
|
#
|
||||||
divert(0)
|
divert(0)
|
||||||
|
|
||||||
VERSIONID(`$Id: proto.m4,v 8.730 2007/02/01 18:50:03 ca Exp $')
|
VERSIONID(`$Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $')
|
||||||
|
|
||||||
# level CF_LEVEL config file format
|
# level CF_LEVEL config file format
|
||||||
V`'CF_LEVEL/ifdef(`VENDOR_NAME', `VENDOR_NAME', `Berkeley')
|
V`'CF_LEVEL/ifdef(`VENDOR_NAME', `VENDOR_NAME', `Berkeley')
|
||||||
@ -2962,9 +2962,9 @@ ifdef(`_ATMPF_', `dnl tempfail?
|
|||||||
R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
|
R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
|
||||||
dnl use the generic routine (for now)
|
dnl use the generic routine (for now)
|
||||||
R<0> $@ OK no limit
|
R<0> $@ OK no limit
|
||||||
R<$+> $: <$1> $| $(arith l $@ $&{client_rate} $@ $1 $)
|
R<$+> $: <$1> $| $(arith l $@ $1 $@ $&{client_rate} $)
|
||||||
dnl log this? Connection rate $&{client_rate} exceeds limit $1.
|
dnl log this? Connection rate $&{client_rate} exceeds limit $1.
|
||||||
R<$+> $| FALSE $#error $@ 4.3.2 $: _RATE_CONTROL_REPLY Connection rate limit exceeded.
|
R<$+> $| TRUE $#error $@ 4.3.2 $: _RATE_CONTROL_REPLY Connection rate limit exceeded.
|
||||||
')')
|
')')
|
||||||
|
|
||||||
ifdef(`_CONN_CONTROL_',`dnl
|
ifdef(`_CONN_CONTROL_',`dnl
|
||||||
@ -2984,9 +2984,9 @@ ifdef(`_ATMPF_', `dnl tempfail?
|
|||||||
R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
|
R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
|
||||||
dnl use the generic routine (for now)
|
dnl use the generic routine (for now)
|
||||||
R<0> $@ OK no limit
|
R<0> $@ OK no limit
|
||||||
R<$+> $: <$1> $| $(arith l $@ $&{client_connections} $@ $1 $)
|
R<$+> $: <$1> $| $(arith l $@ $1 $@ $&{client_connections} $)
|
||||||
dnl log this: Open connections $&{client_connections} exceeds limit $1.
|
dnl log this: Open connections $&{client_connections} exceeds limit $1.
|
||||||
R<$+> $| FALSE $#error $@ 4.3.2 $: _CONN_CONTROL_REPLY Too many open connections.
|
R<$+> $| TRUE $#error $@ 4.3.2 $: _CONN_CONTROL_REPLY Too many open connections.
|
||||||
')')
|
')')
|
||||||
|
|
||||||
undivert(9)dnl LOCAL_RULESETS
|
undivert(9)dnl LOCAL_RULESETS
|
||||||
|
@ -11,8 +11,8 @@ divert(-1)
|
|||||||
# the sendmail distribution.
|
# the sendmail distribution.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
VERSIONID(`$Id: version.m4,v 8.178 2007/04/03 21:21:18 ca Exp $')
|
VERSIONID(`$Id: version.m4,v 8.186 2007/10/31 16:04:13 ca Exp $')
|
||||||
#
|
#
|
||||||
divert(0)
|
divert(0)
|
||||||
# Configuration version number
|
# Configuration version number
|
||||||
DZ8.14.1`'ifdef(`confCF_VERSION', `/confCF_VERSION')
|
DZ8.14.2`'ifdef(`confCF_VERSION', `/confCF_VERSION')
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
# Copyright (c) 1999-2003 Gregory Neil Shapiro. All Rights Reserved.
|
# Copyright (c) 1999-2004, 2007 Gregory Neil Shapiro. All Rights Reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions
|
# modification, are permitted provided that the following conditions
|
||||||
@ -27,7 +27,7 @@
|
|||||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
# SUCH DAMAGE.
|
# SUCH DAMAGE.
|
||||||
|
|
||||||
# $Id: buildvirtuser,v 1.6 2003/03/15 23:30:09 gshapiro Exp $
|
# $Id: buildvirtuser,v 1.8 2007/10/08 18:44:15 gshapiro Exp $
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
@ -70,30 +70,21 @@ to take affect.
|
|||||||
|
|
||||||
=head1 EXAMPLES
|
=head1 EXAMPLES
|
||||||
|
|
||||||
Here are some example files from the /etc/mail/virtusers/ directory:
|
Here is an example file from the /etc/mail/virtusers/ directory:
|
||||||
|
|
||||||
=head2 /etc/mail/virtusers/bsdunix.org:
|
=head2 /etc/mail/virtusers/example.org:
|
||||||
|
|
||||||
# Services
|
# Services
|
||||||
MAILER-DAEMON gshapiro+bounce.$DOMAIN@gshapiro.net
|
MAILER-DAEMON gshapiro+bounce.$DOMAIN@example.net
|
||||||
postmaster gshapiro+$LHS.$DOMAIN@gshapiro.net
|
postmaster gshapiro+$LHS.$DOMAIN@example.net
|
||||||
webmaster gshapiro+$LHS.$DOMAIN@gshapiro.net
|
webmaster gshapiro+$LHS.$DOMAIN@example.net
|
||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
error:nouser No such user
|
error:nouser No such user
|
||||||
|
|
||||||
# Users
|
# Users
|
||||||
gshapiro gshapiro+$DOMAIN@gshapiro.net
|
gshapiro gshapiro+$DOMAIN@example.net
|
||||||
bob robert@smtp.org
|
zoe zoe@example.com
|
||||||
|
|
||||||
=head2 /etc/mail/virtusers/smtp.org:
|
|
||||||
|
|
||||||
# Defaults
|
|
||||||
gshapiro+$DOMAIN@gshapiro.net
|
|
||||||
|
|
||||||
# Users
|
|
||||||
john john@wookie.org
|
|
||||||
nancy n@milter.com
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@ -102,6 +93,7 @@ Gregory Neil Shapiro E<lt>F<gshapiro@gshapiro.net>E<gt>
|
|||||||
=cut
|
=cut
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use File::stat;
|
||||||
use Getopt::Std;
|
use Getopt::Std;
|
||||||
|
|
||||||
my $makemap = "/usr/sbin/makemap";
|
my $makemap = "/usr/sbin/makemap";
|
||||||
@ -117,6 +109,18 @@ my $newest = 0;
|
|||||||
my ($lhs, $domain, $key, $value);
|
my ($lhs, $domain, $key, $value);
|
||||||
my $opts = {};
|
my $opts = {};
|
||||||
|
|
||||||
|
sub preserve_perms ($$)
|
||||||
|
{
|
||||||
|
my $old = shift;
|
||||||
|
my $new = shift;
|
||||||
|
my $st;
|
||||||
|
|
||||||
|
$st = stat($old);
|
||||||
|
return if (!defined($st));
|
||||||
|
chmod($st->mode, $new) || warn "Could not chmod($st->mode, $new): $!\n";
|
||||||
|
chown($st->uid, $st->gid, $new) || warn "Could not chmod($st->uid, $st->gid, $new): $!\n";
|
||||||
|
}
|
||||||
|
|
||||||
getopts('ft', $opts) || die "Usage: $0 [-f] [-t]\n";
|
getopts('ft', $opts) || die "Usage: $0 [-f] [-t]\n";
|
||||||
|
|
||||||
if ($opts->{t})
|
if ($opts->{t})
|
||||||
@ -131,9 +135,12 @@ closedir(VIRTS) || die "Could not close directory $virts: $!\n";
|
|||||||
|
|
||||||
foreach $domain (@virts)
|
foreach $domain (@virts)
|
||||||
{
|
{
|
||||||
|
next if ($domain =~ m/^\./);
|
||||||
open(DOMAIN, "$virts/$domain") || die "Could not open file $virts/$domain: $!\n";
|
open(DOMAIN, "$virts/$domain") || die "Could not open file $virts/$domain: $!\n";
|
||||||
my $line = 0;
|
my $line = 0;
|
||||||
my $mtime = (stat(DOMAIN))[9] || 0;
|
my $mtime = 0;
|
||||||
|
my $st = stat("$virts/$domain");
|
||||||
|
$mtime = $st->mtime if (defined($st));
|
||||||
if ($mtime > $newest)
|
if ($mtime > $newest)
|
||||||
{
|
{
|
||||||
$newest = $mtime;
|
$newest = $mtime;
|
||||||
@ -160,7 +167,7 @@ LINE: while (<DOMAIN>)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
die "Bogus line $line in $virts/$domain\n";
|
warn "Bogus line $line in $virts/$domain\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variable subsitution
|
# Variable subsitution
|
||||||
@ -172,7 +179,9 @@ LINE: while (<DOMAIN>)
|
|||||||
close(DOMAIN) || die "Could not close $virts/$domain: $!\n";
|
close(DOMAIN) || die "Could not close $virts/$domain: $!\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
my $virtmtime = (stat($virt))[9] || 0;
|
my $virtmtime = 0;
|
||||||
|
my $st = stat($virt);
|
||||||
|
$virtmtime = $st->mtime if (defined($st));
|
||||||
if ($opts->{f} || $virtmtime < $newest)
|
if ($opts->{f} || $virtmtime < $newest)
|
||||||
{
|
{
|
||||||
print STDOUT "Rebuilding $virt\n";
|
print STDOUT "Rebuilding $virt\n";
|
||||||
@ -191,14 +200,17 @@ if ($opts->{f} || $virtmtime < $newest)
|
|||||||
print MAKEMAP "$key\t\t$virt{$key}\n";
|
print MAKEMAP "$key\t\t$virt{$key}\n";
|
||||||
}
|
}
|
||||||
close(MAKEMAP) || die "Could not close makemap ($?): $!\n";
|
close(MAKEMAP) || die "Could not close makemap ($?): $!\n";
|
||||||
|
preserve_perms($virt, $newvirt);
|
||||||
rename($newvirt, $virt) || die "Could not rename $newvirt to $virt: $!\n";
|
rename($newvirt, $virt) || die "Could not rename $newvirt to $virt: $!\n";
|
||||||
|
|
||||||
open(VIRTHOST, ">$newvirthosts") || die "Could not open file $newvirthosts: $!\n";
|
open(VIRTHOST, ">$newvirthosts") || die "Could not open file $newvirthosts: $!\n";
|
||||||
foreach $domain (sort @virts)
|
foreach $domain (sort @virts)
|
||||||
{
|
{
|
||||||
|
next if ($domain =~ m/^\./);
|
||||||
print VIRTHOST "$domain\n";
|
print VIRTHOST "$domain\n";
|
||||||
}
|
}
|
||||||
close(VIRTHOST) || die "Could not close $newvirthosts: $!\n";
|
close(VIRTHOST) || die "Could not close $newvirthosts: $!\n";
|
||||||
|
preserve_perms($virthosts, $newvirthosts);
|
||||||
rename($newvirthosts, $virthosts) || die "Could not rename $newvirthosts to $virthosts: $!\n";
|
rename($newvirthosts, $virthosts) || die "Could not rename $newvirthosts to $virthosts: $!\n";
|
||||||
}
|
}
|
||||||
exit 0;
|
exit 0;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
.\" the sendmail distribution.
|
.\" the sendmail distribution.
|
||||||
.\"
|
.\"
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: op.me,v 8.739 2007/03/22 17:56:01 ca Exp $
|
.\" $Id: op.me,v 8.741 2007/06/22 23:08:59 ca Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" eqn op.me | pic | troff -me
|
.\" eqn op.me | pic | troff -me
|
||||||
.\"
|
.\"
|
||||||
@ -90,7 +90,7 @@ Sendmail, Inc.
|
|||||||
.de Ve
|
.de Ve
|
||||||
Version \\$2
|
Version \\$2
|
||||||
..
|
..
|
||||||
.Ve $Revision: 8.739 $
|
.Ve $Revision: 8.741 $
|
||||||
.rm Ve
|
.rm Ve
|
||||||
.sp
|
.sp
|
||||||
For Sendmail Version 8.14
|
For Sendmail Version 8.14
|
||||||
@ -6939,6 +6939,10 @@ The
|
|||||||
.b \-v
|
.b \-v
|
||||||
command line flag sets this to
|
command line flag sets this to
|
||||||
.b i .
|
.b i .
|
||||||
|
Note: for internal reasons,
|
||||||
|
``i'' does not work
|
||||||
|
if a milter is enabled which can reject or delete recipients.
|
||||||
|
In that case the mode will be changed to ``b''.
|
||||||
.ip DialDelay=\fIsleeptime\fP
|
.ip DialDelay=\fIsleeptime\fP
|
||||||
[no short name]
|
[no short name]
|
||||||
Dial-on-demand network connections can see timeouts
|
Dial-on-demand network connections can see timeouts
|
||||||
@ -8932,7 +8936,8 @@ The server responds with a status indicator and the result (if any):
|
|||||||
<status> ' ' <result>
|
<status> ' ' <result>
|
||||||
.)b
|
.)b
|
||||||
|
|
||||||
The status indicator is one of the following upper case words:
|
The status indicator specifies the result of the lookup operation itself
|
||||||
|
and is one of the following upper case words:
|
||||||
.(b
|
.(b
|
||||||
.ta 9n
|
.ta 9n
|
||||||
OK the key was found, result contains the looked up value
|
OK the key was found, result contains the looked up value
|
||||||
@ -8944,13 +8949,19 @@ PERM a permanent failure occured
|
|||||||
|
|
||||||
In case of errors (status TEMP, TIMEOUT or PERM) the result field may
|
In case of errors (status TEMP, TIMEOUT or PERM) the result field may
|
||||||
contain an explanatory message.
|
contain an explanatory message.
|
||||||
|
However, the explanatory message is not used any further by
|
||||||
|
.i sendmail .
|
||||||
|
|
||||||
Example replies:
|
Example replies:
|
||||||
.(b
|
.(b
|
||||||
31:OK resolved.address@example.com,
|
31:OK resolved.address@example.com,
|
||||||
.)b
|
.)b
|
||||||
|
|
||||||
in case of a successful lookup, or:
|
.(b
|
||||||
|
56:OK error:550 5.7.1 User does not accept mail from sender,
|
||||||
|
.)b
|
||||||
|
|
||||||
|
in case of successful lookups, or:
|
||||||
.(b
|
.(b
|
||||||
8:NOTFOUND,
|
8:NOTFOUND,
|
||||||
.)b
|
.)b
|
||||||
@ -8960,7 +8971,7 @@ in case the key was not found, or:
|
|||||||
55:TEMP this text explains that we had a temporary failure,
|
55:TEMP this text explains that we had a temporary failure,
|
||||||
.)b
|
.)b
|
||||||
|
|
||||||
in case of a failure.
|
in case of a temporary map lookup failure.
|
||||||
|
|
||||||
The socket map uses the same syntax as milters
|
The socket map uses the same syntax as milters
|
||||||
(see Section "X \*- Mail Filter (Milter) Definitions")
|
(see Section "X \*- Mail Filter (Milter) Definitions")
|
||||||
@ -11424,7 +11435,7 @@ replace it with a blank sheet for double-sided output.
|
|||||||
.\".sz 10
|
.\".sz 10
|
||||||
.\"Eric Allman
|
.\"Eric Allman
|
||||||
.\".sp
|
.\".sp
|
||||||
.\"Version $Revision: 8.739 $
|
.\"Version $Revision: 8.741 $
|
||||||
.\".ce 0
|
.\".ce 0
|
||||||
.bp 3
|
.bp 3
|
||||||
.ce
|
.ce
|
||||||
|
@ -22,7 +22,7 @@ SM_UNUSED(static char copyright[]) =
|
|||||||
#endif /* ! lint */
|
#endif /* ! lint */
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
SM_UNUSED(static char id[]) = "@(#)$Id: editmap.c,v 1.24 2004/08/03 18:40:10 ca Exp $";
|
SM_UNUSED(static char id[]) = "@(#)$Id: editmap.c,v 1.25 2007/05/11 18:50:35 ca Exp $";
|
||||||
#endif /* ! lint */
|
#endif /* ! lint */
|
||||||
|
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ uid_t RealUid;
|
|||||||
gid_t RealGid;
|
gid_t RealGid;
|
||||||
char *RealUserName;
|
char *RealUserName;
|
||||||
uid_t RunAsUid;
|
uid_t RunAsUid;
|
||||||
uid_t RunAsGid;
|
gid_t RunAsGid;
|
||||||
char *RunAsUserName;
|
char *RunAsUserName;
|
||||||
int Verbose = 2;
|
int Verbose = 2;
|
||||||
bool DontInitGroups = false;
|
bool DontInitGroups = false;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* the sendmail distribution.
|
* the sendmail distribution.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* $Id: conf.h,v 1.132 2007/03/21 23:56:18 ca Exp $
|
* $Id: conf.h,v 1.134 2007/09/24 23:05:37 ca Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -458,6 +458,9 @@ typedef int pid_t;
|
|||||||
# if SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210)
|
# if SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210)
|
||||||
# define HASUNSETENV 1 /* unsetenv() added in S10 */
|
# define HASUNSETENV 1 /* unsetenv() added in S10 */
|
||||||
# endif /* SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210) */
|
# endif /* SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210) */
|
||||||
|
# if SOLARIS >= 21100 || (SOLARIS < 10000 && SOLARIS >= 211)
|
||||||
|
# define GETLDAPALIASBYNAME_VERSION 2 /* changed in S11 */
|
||||||
|
# endif /* SOLARIS >= 21100 || (SOLARIS < 10000 && SOLARIS >= 211) */
|
||||||
# ifndef HASGETUSERSHELL
|
# ifndef HASGETUSERSHELL
|
||||||
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */
|
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */
|
||||||
# endif /* ! HASGETUSERSHELL */
|
# endif /* ! HASGETUSERSHELL */
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2003, 2005, 2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 2001-2003, 2005-2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* By using this file, you agree to the terms and conditions set
|
* 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
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
* the sendmail distribution.
|
* the sendmail distribution.
|
||||||
*
|
*
|
||||||
* $Id: ldap.h,v 1.32 2006/08/30 22:56:58 ca Exp $
|
* $Id: ldap.h,v 1.33 2007/10/10 00:06:44 ca Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SM_LDAP_H
|
#ifndef SM_LDAP_H
|
||||||
@ -91,6 +91,10 @@ struct sm_ldap_struct
|
|||||||
/* ldapmap_lookup options */
|
/* ldapmap_lookup options */
|
||||||
char ldap_attrsep;
|
char ldap_attrsep;
|
||||||
|
|
||||||
|
# if _FFR_LDAP_NETWORK_TIMEOUT
|
||||||
|
struct timeval ldap_networktmo;
|
||||||
|
# endif /* _FFR_LDAP_NETWORK_TIMEOUT */
|
||||||
|
|
||||||
/* Linked list of maps sharing the same LDAP binding */
|
/* Linked list of maps sharing the same LDAP binding */
|
||||||
void *ldap_next;
|
void *ldap_next;
|
||||||
};
|
};
|
||||||
|
@ -36,8 +36,12 @@
|
|||||||
#define SM_TAILQ_H_
|
#define SM_TAILQ_H_
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* $Id: tailq.h,v 1.2 2007/06/29 23:09:57 ca Exp $
|
||||||
|
*
|
||||||
* This file is a modified copy of queue.h from a BSD system:
|
* This file is a modified copy of queue.h from a BSD system:
|
||||||
* we only need tail queues here.
|
* we only need tail queues here.
|
||||||
|
* We do not use queue.h directly because there is a conflict with
|
||||||
|
* some versions of that file on some OSs.
|
||||||
*
|
*
|
||||||
* A tail queue is headed by a pair of pointers, one to the head of the
|
* A tail queue is headed by a pair of pointers, one to the head of the
|
||||||
* list and the other to the tail of the list. The elements are doubly
|
* list and the other to the tail of the list. The elements are doubly
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<HEAD><TITLE>xxfi_unknown</TITLE></HEAD>
|
<HEAD><TITLE>xxfi_unknown</TITLE></HEAD>
|
||||||
<BODY>
|
<BODY>
|
||||||
<!--
|
<!--
|
||||||
$Id: xxfi_unknown.html,v 1.3 2006/12/21 18:30:36 ca Exp $
|
$Id: xxfi_unknown.html,v 1.4 2007/04/23 16:30:42 ca Exp $
|
||||||
-->
|
-->
|
||||||
<H1>xxfi_unknown</H1>
|
<H1>xxfi_unknown</H1>
|
||||||
|
|
||||||
@ -53,12 +53,12 @@ that is either unknown or not implemented by the MTA.
|
|||||||
<TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR>
|
<TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR>
|
||||||
<TR valign="top">
|
<TR valign="top">
|
||||||
<TD>SMFIS_TEMPFAIL</TD>
|
<TD>SMFIS_TEMPFAIL</TD>
|
||||||
<TD>Reject this message with a temporary error.
|
<TD>Reject this command with a temporary error.
|
||||||
</TD>
|
</TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR valign="top">
|
<TR valign="top">
|
||||||
<TD>SMFIS_REJECT</TD>
|
<TD>SMFIS_REJECT</TD>
|
||||||
<TD>Reject this message.
|
<TD>Reject this command.
|
||||||
</TD>
|
</TD>
|
||||||
</TR>
|
</TR>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: engine.c,v 8.157 2007/03/26 18:10:04 ca Exp $")
|
SM_RCSID("@(#)$Id: engine.c,v 8.159 2007/04/23 22:22:50 ca Exp $")
|
||||||
|
|
||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: listener.c,v 8.122 2006/11/02 17:54:44 ca Exp $")
|
SM_RCSID("@(#)$Id: listener.c,v 8.124 2007/04/23 22:22:50 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** listener.c -- threaded network listener
|
** listener.c -- threaded network listener
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: main.c,v 8.81 2006/11/02 18:31:43 ca Exp $")
|
SM_RCSID("@(#)$Id: main.c,v 8.83 2007/04/23 22:22:50 ca Exp $")
|
||||||
|
|
||||||
#define _DEFINE 1
|
#define _DEFINE 1
|
||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <sm/gen.h>
|
||||||
|
SM_RCSID("@(#)$Id: monitor.c,v 8.7 2007/04/23 16:26:28 ca Exp $")
|
||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
|
|
||||||
#if _FFR_THREAD_MONITOR
|
#if _FFR_THREAD_MONITOR
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999-2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1999-2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* By using this file, you agree to the terms and conditions set
|
* By using this file, you agree to the terms and conditions set
|
||||||
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: smfi.c,v 8.82 2007/01/20 06:37:19 ca Exp $")
|
SM_RCSID("@(#)$Id: smfi.c,v 8.83 2007/04/23 16:44:39 ca Exp $")
|
||||||
#include <sm/varargs.h>
|
#include <sm/varargs.h>
|
||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
|
|
||||||
@ -884,6 +884,6 @@ smfi_version(major, minor, patchlevel)
|
|||||||
if (minor != NULL)
|
if (minor != NULL)
|
||||||
*minor = SM_LM_VRS_MINOR(SMFI_VERSION);
|
*minor = SM_LM_VRS_MINOR(SMFI_VERSION);
|
||||||
if (patchlevel != NULL)
|
if (patchlevel != NULL)
|
||||||
*patchlevel = SM_LM_VRS_MINOR(SMFI_VERSION);
|
*patchlevel = SM_LM_VRS_PLVL(SMFI_VERSION);
|
||||||
return MI_SUCCESS;
|
return MI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 2001-2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* By using this file, you agree to the terms and conditions set
|
* By using this file, you agree to the terms and conditions set
|
||||||
@ -11,7 +11,7 @@
|
|||||||
#define LDAP_DEPRECATED 1
|
#define LDAP_DEPRECATED 1
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: ldap.c,v 1.78 2006/08/30 22:56:59 ca Exp $")
|
SM_RCSID("@(#)$Id: ldap.c,v 1.80 2007/10/12 00:19:44 ca Exp $")
|
||||||
|
|
||||||
#if LDAPMAP
|
#if LDAPMAP
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
@ -1103,26 +1103,25 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
|
|||||||
if (save_errno != LDAP_SUCCESS)
|
if (save_errno != LDAP_SUCCESS)
|
||||||
{
|
{
|
||||||
statp = EX_TEMPFAIL;
|
statp = EX_TEMPFAIL;
|
||||||
if (ret != 0)
|
switch (save_errno)
|
||||||
{
|
{
|
||||||
switch (save_errno)
|
|
||||||
{
|
|
||||||
#ifdef LDAP_SERVER_DOWN
|
#ifdef LDAP_SERVER_DOWN
|
||||||
case LDAP_SERVER_DOWN:
|
case LDAP_SERVER_DOWN:
|
||||||
#endif /* LDAP_SERVER_DOWN */
|
#endif /* LDAP_SERVER_DOWN */
|
||||||
case LDAP_TIMEOUT:
|
case LDAP_TIMEOUT:
|
||||||
case LDAP_UNAVAILABLE:
|
case ETIMEDOUT:
|
||||||
|
case LDAP_UNAVAILABLE:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** server disappeared,
|
** server disappeared,
|
||||||
** try reopen on next search
|
** try reopen on next search
|
||||||
*/
|
*/
|
||||||
|
|
||||||
statp = EX_RESTART;
|
statp = EX_RESTART;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
save_errno += E_LDAPBASE;
|
|
||||||
}
|
}
|
||||||
|
if (ret != 0)
|
||||||
|
save_errno += E_LDAPBASE;
|
||||||
SM_LDAP_ERROR_CLEANUP();
|
SM_LDAP_ERROR_CLEANUP();
|
||||||
errno = save_errno;
|
errno = save_errno;
|
||||||
return statp;
|
return statp;
|
||||||
@ -1272,6 +1271,7 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
|
|||||||
case LDAP_SERVER_DOWN:
|
case LDAP_SERVER_DOWN:
|
||||||
#endif /* LDAP_SERVER_DOWN */
|
#endif /* LDAP_SERVER_DOWN */
|
||||||
case LDAP_TIMEOUT:
|
case LDAP_TIMEOUT:
|
||||||
|
case ETIMEDOUT:
|
||||||
case LDAP_UNAVAILABLE:
|
case LDAP_UNAVAILABLE:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1370,6 +1370,9 @@ sm_ldap_setopts(ld, lmap)
|
|||||||
ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
|
ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
|
||||||
ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &lmap->ldap_sizelimit);
|
ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &lmap->ldap_sizelimit);
|
||||||
ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &lmap->ldap_timelimit);
|
ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &lmap->ldap_timelimit);
|
||||||
|
# if _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT)
|
||||||
|
ldap_set_option(ld, LDAP_OPT_NETWORK_TIMEOUT, &lmap->ldap_networktmo);
|
||||||
|
# endif /* _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) */
|
||||||
# ifdef LDAP_OPT_RESTART
|
# ifdef LDAP_OPT_RESTART
|
||||||
ldap_set_option(ld, LDAP_OPT_RESTART, LDAP_OPT_ON);
|
ldap_set_option(ld, LDAP_OPT_RESTART, LDAP_OPT_ON);
|
||||||
# endif /* LDAP_OPT_RESTART */
|
# endif /* LDAP_OPT_RESTART */
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: mpeix.c,v 1.6 2002/05/24 20:50:14 gshapiro Exp $")
|
SM_RCSID("@(#)$Id: mpeix.c,v 1.7 2007/05/11 18:51:22 gshapiro Exp $")
|
||||||
|
|
||||||
#ifdef MPE
|
#ifdef MPE
|
||||||
/*
|
/*
|
||||||
@ -506,7 +506,7 @@ sendmail_mpe_emuluid()
|
|||||||
** emulated egid if present, else true egid.
|
** emulated egid if present, else true egid.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static uid_t sendmail_mpe_egid = -1;
|
static gid_t sendmail_mpe_egid = -1;
|
||||||
|
|
||||||
#undef getegid
|
#undef getegid
|
||||||
gid_t
|
gid_t
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
dnl $Id: Makefile.m4,v 8.107 2007/01/09 00:04:09 ca Exp $
|
dnl $Id: Makefile.m4,v 8.112 2007/10/17 21:29:43 ca Exp $
|
||||||
include(confBUILDTOOLSDIR`/M4/switch.m4')
|
include(confBUILDTOOLSDIR`/M4/switch.m4')
|
||||||
|
|
||||||
define(`confREQUIRE_LIBSM', `true')
|
define(`confREQUIRE_LIBSM', `true')
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
#include <sm/time.h>
|
#include <sm/time.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: deliver.c,v 8.1012 2007/03/29 21:20:15 ca Exp $")
|
SM_RCSID("@(#)$Id: deliver.c,v 8.1015 2007/10/17 21:35:30 ca Exp $")
|
||||||
|
|
||||||
#if HASSETUSERCONTEXT
|
#if HASSETUSERCONTEXT
|
||||||
# include <login_cap.h>
|
# include <login_cap.h>
|
||||||
@ -495,7 +495,7 @@ sendall(e, mode)
|
|||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
if (tTd(13, 29))
|
if (tTd(13, 29))
|
||||||
sm_dprintf("No deliveries: auto-queuing\n");
|
sm_dprintf("No deliveries: auto-queueing\n");
|
||||||
mode = SM_QUEUE;
|
mode = SM_QUEUE;
|
||||||
now = curtime();
|
now = curtime();
|
||||||
|
|
||||||
@ -3293,6 +3293,8 @@ deliver(e, firstto)
|
|||||||
ok = (*e->e_puthdr)(mci, e->e_header, e, M87F_OUTER);
|
ok = (*e->e_puthdr)(mci, e->e_header, e, M87F_OUTER);
|
||||||
if (ok)
|
if (ok)
|
||||||
ok = (*e->e_putbody)(mci, e, NULL);
|
ok = (*e->e_putbody)(mci, e, NULL);
|
||||||
|
if (ok && bitset(MCIF_INLONGLINE, mci->mci_flags))
|
||||||
|
ok = putline("", mci);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Ignore an I/O error that was caused by EPIPE.
|
** Ignore an I/O error that was caused by EPIPE.
|
||||||
@ -3404,6 +3406,7 @@ deliver(e, firstto)
|
|||||||
/* No recipients in list and no missing responses? */
|
/* No recipients in list and no missing responses? */
|
||||||
if (tobuf[0] == '\0'
|
if (tobuf[0] == '\0'
|
||||||
# if PIPELINING
|
# if PIPELINING
|
||||||
|
&& bitset(MCIF_PIPELINED, mci->mci_flags)
|
||||||
&& mci->mci_nextaddr == NULL
|
&& mci->mci_nextaddr == NULL
|
||||||
# endif /* PIPELINING */
|
# endif /* PIPELINING */
|
||||||
)
|
)
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: envelope.c,v 8.302 2006/11/10 23:12:52 ca Exp $")
|
SM_RCSID("@(#)$Id: envelope.c,v 8.304 2007/04/18 17:15:49 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CLRSESSENVELOPE -- clear session oriented data in an envelope
|
** CLRSESSENVELOPE -- clear session oriented data in an envelope
|
||||||
@ -75,7 +75,7 @@ newenvelope(e, parent, rpool)
|
|||||||
register ENVELOPE *parent;
|
register ENVELOPE *parent;
|
||||||
SM_RPOOL_T *rpool;
|
SM_RPOOL_T *rpool;
|
||||||
{
|
{
|
||||||
int sendmode;
|
int sendmode, dm;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This code used to read:
|
** This code used to read:
|
||||||
@ -86,8 +86,16 @@ newenvelope(e, parent, rpool)
|
|||||||
** This meant macvalue() could go into an infinite loop.
|
** This meant macvalue() could go into an infinite loop.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
dm = DM_NOTSET;
|
||||||
if (parent != NULL)
|
if (parent != NULL)
|
||||||
|
{
|
||||||
|
char *str;
|
||||||
|
|
||||||
sendmode = parent->e_sendmode;
|
sendmode = parent->e_sendmode;
|
||||||
|
str = macvalue(macid("{deliveryMode}"), parent);
|
||||||
|
if (str != NULL)
|
||||||
|
dm = (int) str[0];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
sendmode = DM_NOTSET;
|
sendmode = DM_NOTSET;
|
||||||
|
|
||||||
@ -105,9 +113,18 @@ newenvelope(e, parent, rpool)
|
|||||||
e->e_parent = parent;
|
e->e_parent = parent;
|
||||||
assign_queueid(e);
|
assign_queueid(e);
|
||||||
e->e_ctime = curtime();
|
e->e_ctime = curtime();
|
||||||
|
#if _FFR_SESSID
|
||||||
|
e->e_sessid = e->e_id;
|
||||||
|
#endif /* _FFR_SESSID */
|
||||||
if (parent != NULL)
|
if (parent != NULL)
|
||||||
{
|
{
|
||||||
e->e_msgpriority = parent->e_msgsize;
|
e->e_msgpriority = parent->e_msgsize;
|
||||||
|
#if _FFR_SESSID
|
||||||
|
if (parent->e_sessid != NULL)
|
||||||
|
e->e_sessid = sm_rpool_strdup_x(rpool,
|
||||||
|
parent->e_sessid);
|
||||||
|
#endif /* _FFR_SESSID */
|
||||||
|
|
||||||
if (parent->e_quarmsg == NULL)
|
if (parent->e_quarmsg == NULL)
|
||||||
{
|
{
|
||||||
e->e_quarmsg = NULL;
|
e->e_quarmsg = NULL;
|
||||||
@ -128,6 +145,8 @@ newenvelope(e, parent, rpool)
|
|||||||
(void) sm_io_flush(CurEnv->e_xfp, SM_TIME_DEFAULT);
|
(void) sm_io_flush(CurEnv->e_xfp, SM_TIME_DEFAULT);
|
||||||
if (sendmode != DM_NOTSET)
|
if (sendmode != DM_NOTSET)
|
||||||
e->e_sendmode = sendmode;
|
e->e_sendmode = sendmode;
|
||||||
|
if (dm != DM_NOTSET)
|
||||||
|
set_delivery_mode(dm, e);
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2001, 2003, 2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2001, 2003, 2006, 2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: macro.c,v 8.102 2006/12/21 23:06:10 ca Exp $")
|
SM_RCSID("@(#)$Id: macro.c,v 8.107 2007/08/06 22:29:02 ca Exp $")
|
||||||
|
|
||||||
#include <sm/sendmail.h>
|
#include <sm/sendmail.h>
|
||||||
#if MAXMACROID != (BITMAPBITS - 1)
|
#if MAXMACROID != (BITMAPBITS - 1)
|
||||||
@ -21,8 +21,67 @@ SM_RCSID("@(#)$Id: macro.c,v 8.102 2006/12/21 23:06:10 ca Exp $")
|
|||||||
#endif /* MAXMACROID != (BITMAPBITS - 1) */
|
#endif /* MAXMACROID != (BITMAPBITS - 1) */
|
||||||
|
|
||||||
static char *MacroName[MAXMACROID + 1]; /* macro id to name table */
|
static char *MacroName[MAXMACROID + 1]; /* macro id to name table */
|
||||||
int NextMacroId = 0240; /* codes for long named macros */
|
|
||||||
|
/*
|
||||||
|
** Codes for long named macros.
|
||||||
|
** See also macname():
|
||||||
|
* if not ASCII printable, look up the name *
|
||||||
|
if (n <= 0x20 || n > 0x7f)
|
||||||
|
** First use 1 to NEXTMACROID_L, then use NEXTMACROID_H to MAXMACROID.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NEXTMACROID_L 037
|
||||||
|
#define NEXTMACROID_H 0240
|
||||||
|
|
||||||
|
#if _FFR_MORE_MACROS
|
||||||
|
/* table for next id in non-printable ASCII range: disallow some value */
|
||||||
|
static int NextMIdTable[] =
|
||||||
|
{
|
||||||
|
/* 0 nul */ 1,
|
||||||
|
/* 1 soh */ 2,
|
||||||
|
/* 2 stx */ 3,
|
||||||
|
/* 3 etx */ 4,
|
||||||
|
/* 4 eot */ 5,
|
||||||
|
/* 5 enq */ 6,
|
||||||
|
/* 6 ack */ 7,
|
||||||
|
/* 7 bel */ 8,
|
||||||
|
/* 8 bs */ 14,
|
||||||
|
/* 9 ht */ -1,
|
||||||
|
/* 10 nl */ -1,
|
||||||
|
/* 11 vt */ -1,
|
||||||
|
/* 12 np */ -1,
|
||||||
|
/* 13 cr */ -1,
|
||||||
|
/* 14 so */ 15,
|
||||||
|
/* 15 si */ 16,
|
||||||
|
/* 16 dle */ 17,
|
||||||
|
/* 17 dc1 */ 18,
|
||||||
|
/* 18 dc2 */ 19,
|
||||||
|
/* 19 dc3 */ 20,
|
||||||
|
/* 20 dc4 */ 21,
|
||||||
|
/* 21 nak */ 22,
|
||||||
|
/* 22 syn */ 23,
|
||||||
|
/* 23 etb */ 24,
|
||||||
|
/* 24 can */ 25,
|
||||||
|
/* 25 em */ 26,
|
||||||
|
/* 26 sub */ 27,
|
||||||
|
/* 27 esc */ 28,
|
||||||
|
/* 28 fs */ 29,
|
||||||
|
/* 29 gs */ 30,
|
||||||
|
/* 30 rs */ 31,
|
||||||
|
/* 31 us */ 32,
|
||||||
|
/* 32 sp */ -1,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NEXTMACROID(mid) ( \
|
||||||
|
(mid < NEXTMACROID_L) ? (NextMIdTable[mid]) : \
|
||||||
|
((mid < NEXTMACROID_H) ? NEXTMACROID_H : (mid + 1)))
|
||||||
|
|
||||||
|
int NextMacroId = 1; /* codes for long named macros */
|
||||||
/* see sendmail.h: Special characters in rewriting rules. */
|
/* see sendmail.h: Special characters in rewriting rules. */
|
||||||
|
#else /* _FFR_MORE_MACROS */
|
||||||
|
int NextMacroId = 0240; /* codes for long named macros */
|
||||||
|
#define NEXTMACROID(mid) ((mid) + 1)
|
||||||
|
#endif /* _FFR_MORE_MACROS */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -603,7 +662,7 @@ macid_parse(p, ep)
|
|||||||
syserr("Macro/class name ({%s}) too long (%d chars max)",
|
syserr("Macro/class name ({%s}) too long (%d chars max)",
|
||||||
mbuf, (int) (sizeof(mbuf) - 1));
|
mbuf, (int) (sizeof(mbuf) - 1));
|
||||||
}
|
}
|
||||||
else if (mbuf[1] == '\0')
|
else if (mbuf[1] == '\0' && mbuf[0] >= 0x20)
|
||||||
{
|
{
|
||||||
/* ${x} == $x */
|
/* ${x} == $x */
|
||||||
mid = bitidx(mbuf[0]);
|
mid = bitidx(mbuf[0]);
|
||||||
@ -627,7 +686,8 @@ macid_parse(p, ep)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
MacroName[NextMacroId] = s->s_name;
|
MacroName[NextMacroId] = s->s_name;
|
||||||
s->s_macro = mid = NextMacroId++;
|
s->s_macro = mid = NextMacroId;
|
||||||
|
NextMacroId = NEXTMACROID(NextMacroId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
|
@ -26,7 +26,7 @@ SM_UNUSED(static char copyright[]) =
|
|||||||
The Regents of the University of California. All rights reserved.\n";
|
The Regents of the University of California. All rights reserved.\n";
|
||||||
#endif /* ! lint */
|
#endif /* ! lint */
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: main.c,v 8.962 2006/12/19 19:47:37 ca Exp $")
|
SM_RCSID("@(#)$Id: main.c,v 8.963 2007/06/29 20:07:37 ca Exp $")
|
||||||
|
|
||||||
|
|
||||||
#if NETINET || NETINET6
|
#if NETINET || NETINET6
|
||||||
@ -2362,7 +2362,33 @@ main(argc, argv, envp)
|
|||||||
|
|
||||||
if (QueueIntvl > 0)
|
if (QueueIntvl > 0)
|
||||||
{
|
{
|
||||||
(void) runqueue(true, false, queuepersistent, true);
|
#if _FFR_RUNPQG
|
||||||
|
if (qgrp != NOQGRP)
|
||||||
|
{
|
||||||
|
int rwgflags = RWG_NONE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
** To run a specific queue group mark it to
|
||||||
|
** be run, select the work group it's in and
|
||||||
|
** increment the work counter.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (i = 0; i < NumQueue && Queue[i] != NULL;
|
||||||
|
i++)
|
||||||
|
Queue[i]->qg_nextrun = (time_t) -1;
|
||||||
|
Queue[qgrp]->qg_nextrun = 0;
|
||||||
|
if (Verbose)
|
||||||
|
rwgflags |= RWG_VERBOSE;
|
||||||
|
if (queuepersistent)
|
||||||
|
rwgflags |= RWG_PERSISTENT;
|
||||||
|
rwgflags |= RWG_FORCE;
|
||||||
|
(void) run_work_group(Queue[qgrp]->qg_wgrp,
|
||||||
|
rwgflags);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif /* _FFR_RUNPQG */
|
||||||
|
(void) runqueue(true, false, queuepersistent,
|
||||||
|
true);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** If queuepersistent but not in daemon mode then
|
** If queuepersistent but not in daemon mode then
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1992, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1992, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: map.c,v 8.696 2007/04/03 21:33:14 ca Exp $")
|
SM_RCSID("@(#)$Id: map.c,v 8.699 2007/10/10 00:06:45 ca Exp $")
|
||||||
|
|
||||||
#if LDAPMAP
|
#if LDAPMAP
|
||||||
# include <sm/ldap.h>
|
# include <sm/ldap.h>
|
||||||
@ -3567,10 +3567,17 @@ ldapmap_lookup(map, name, av, statp)
|
|||||||
if (VendorCode == VENDOR_SUN &&
|
if (VendorCode == VENDOR_SUN &&
|
||||||
strcmp(map->map_mname, "aliases.ldap") == 0)
|
strcmp(map->map_mname, "aliases.ldap") == 0)
|
||||||
{
|
{
|
||||||
char answer[MAXNAME + 1];
|
|
||||||
int rc;
|
int rc;
|
||||||
|
#if defined(GETLDAPALIASBYNAME_VERSION) && (GETLDAPALIASBYNAME_VERSION >= 2)
|
||||||
|
extern char *__getldapaliasbyname();
|
||||||
|
char *answer;
|
||||||
|
|
||||||
|
answer = __getldapaliasbyname(name, &rc);
|
||||||
|
#else
|
||||||
|
char answer[MAXNAME + 1];
|
||||||
|
|
||||||
rc = __getldapaliasbyname(name, answer, sizeof(answer));
|
rc = __getldapaliasbyname(name, answer, sizeof(answer));
|
||||||
|
#endif
|
||||||
if (rc != 0)
|
if (rc != 0)
|
||||||
{
|
{
|
||||||
if (tTd(38, 20))
|
if (tTd(38, 20))
|
||||||
@ -3587,6 +3594,9 @@ ldapmap_lookup(map, name, av, statp)
|
|||||||
result = map_rewrite(map, name, strlen(name), NULL);
|
result = map_rewrite(map, name, strlen(name), NULL);
|
||||||
else
|
else
|
||||||
result = map_rewrite(map, answer, strlen(answer), av);
|
result = map_rewrite(map, answer, strlen(answer), av);
|
||||||
|
#if defined(GETLDAPALIASBYNAME_VERSION) && (GETLDAPALIASBYNAME_VERSION >= 2)
|
||||||
|
free(answer);
|
||||||
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#endif /* defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && ... */
|
#endif /* defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && ... */
|
||||||
@ -3965,6 +3975,26 @@ ldapmap_parseargs(map, args)
|
|||||||
break;
|
break;
|
||||||
switch (*++p)
|
switch (*++p)
|
||||||
{
|
{
|
||||||
|
case 'A':
|
||||||
|
map->map_mflags |= MF_APPEND;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'a':
|
||||||
|
map->map_app = ++p;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'D':
|
||||||
|
map->map_mflags |= MF_DEFER;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f':
|
||||||
|
map->map_mflags |= MF_NOFOLDCASE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'm':
|
||||||
|
map->map_mflags |= MF_MATCHONLY;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'N':
|
case 'N':
|
||||||
map->map_mflags |= MF_INCLNULL;
|
map->map_mflags |= MF_INCLNULL;
|
||||||
map->map_mflags &= ~MF_TRY0NULL;
|
map->map_mflags &= ~MF_TRY0NULL;
|
||||||
@ -3978,24 +4008,12 @@ ldapmap_parseargs(map, args)
|
|||||||
map->map_mflags |= MF_OPTIONAL;
|
map->map_mflags |= MF_OPTIONAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'f':
|
|
||||||
map->map_mflags |= MF_NOFOLDCASE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'm':
|
|
||||||
map->map_mflags |= MF_MATCHONLY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'A':
|
|
||||||
map->map_mflags |= MF_APPEND;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'q':
|
case 'q':
|
||||||
map->map_mflags |= MF_KEEPQUOTES;
|
map->map_mflags |= MF_KEEPQUOTES;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'a':
|
case 'S':
|
||||||
map->map_app = ++p;
|
map->map_spacesub = *++p;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'T':
|
case 'T':
|
||||||
@ -4006,14 +4024,6 @@ ldapmap_parseargs(map, args)
|
|||||||
map->map_mflags |= MF_NODEFER;
|
map->map_mflags |= MF_NODEFER;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'S':
|
|
||||||
map->map_spacesub = *++p;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'D':
|
|
||||||
map->map_mflags |= MF_DEFER;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'z':
|
case 'z':
|
||||||
if (*++p != '\\')
|
if (*++p != '\\')
|
||||||
map->map_coldelim = *p;
|
map->map_coldelim = *p;
|
||||||
@ -4036,40 +4046,6 @@ ldapmap_parseargs(map, args)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
/* Start of ldapmap specific args */
|
/* Start of ldapmap specific args */
|
||||||
case 'V':
|
|
||||||
if (*++p != '\\')
|
|
||||||
lmap->ldap_attrsep = *p;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (*++p)
|
|
||||||
{
|
|
||||||
case 'n':
|
|
||||||
lmap->ldap_attrsep = '\n';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 't':
|
|
||||||
lmap->ldap_attrsep = '\t';
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
lmap->ldap_attrsep = '\\';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'k': /* search field */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_filter = p;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'v': /* attr to return */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_attr[0] = p;
|
|
||||||
lmap->ldap_attr[1] = NULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '1':
|
case '1':
|
||||||
map->map_mflags |= MF_SINGLEMATCH;
|
map->map_mflags |= MF_SINGLEMATCH;
|
||||||
break;
|
break;
|
||||||
@ -4080,6 +4056,130 @@ ldapmap_parseargs(map, args)
|
|||||||
break;
|
break;
|
||||||
# endif /* _FFR_LDAP_SINGLEDN */
|
# endif /* _FFR_LDAP_SINGLEDN */
|
||||||
|
|
||||||
|
case 'b': /* search base */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_base = p;
|
||||||
|
break;
|
||||||
|
|
||||||
|
# if _FFR_LDAP_NETWORK_TIMEOUT
|
||||||
|
case 'c': /* network (connect) timeout */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_networktmo.tv_sec = atoi(p);
|
||||||
|
break;
|
||||||
|
# endif /* _FFR_LDAP_NETWORK_TIMEOUT */
|
||||||
|
|
||||||
|
case 'd': /* Dn to bind to server as */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_binddn = p;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'H': /* Use LDAP URI */
|
||||||
|
# if !USE_LDAP_INIT
|
||||||
|
syserr("Must compile with -DUSE_LDAP_INIT to use LDAP URIs (-H) in map %s",
|
||||||
|
map->map_mname);
|
||||||
|
return false;
|
||||||
|
# else /* !USE_LDAP_INIT */
|
||||||
|
if (lmap->ldap_host != NULL)
|
||||||
|
{
|
||||||
|
syserr("Can not specify both an LDAP host and an LDAP URI in map %s",
|
||||||
|
map->map_mname);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_uri = p;
|
||||||
|
break;
|
||||||
|
# endif /* !USE_LDAP_INIT */
|
||||||
|
|
||||||
|
case 'h': /* ldap host */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
if (lmap->ldap_uri != NULL)
|
||||||
|
{
|
||||||
|
syserr("Can not specify both an LDAP host and an LDAP URI in map %s",
|
||||||
|
map->map_mname);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
lmap->ldap_host = p;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'K':
|
||||||
|
lmap->ldap_multi_args = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'k': /* search field */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_filter = p;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l': /* time limit */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_timelimit = atoi(p);
|
||||||
|
lmap->ldap_timeout.tv_sec = lmap->ldap_timelimit;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'M': /* Method for binding */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (sm_strncasecmp(p, "LDAP_AUTH_", 10) == 0)
|
||||||
|
p += 10;
|
||||||
|
|
||||||
|
for (lam = LDAPAuthMethods;
|
||||||
|
lam != NULL && lam->lam_name != NULL; lam++)
|
||||||
|
{
|
||||||
|
if (sm_strncasecmp(p, lam->lam_name,
|
||||||
|
strlen(lam->lam_name)) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (lam->lam_name != NULL)
|
||||||
|
lmap->ldap_method = lam->lam_code;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* bad config line */
|
||||||
|
if (!bitset(MCF_OPTFILE,
|
||||||
|
map->map_class->map_cflags))
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
|
||||||
|
if ((ptr = strchr(p, ' ')) != NULL)
|
||||||
|
*ptr = '\0';
|
||||||
|
syserr("Method for binding must be [none|simple|krbv4] (not %s) in map %s",
|
||||||
|
p, map->map_mname);
|
||||||
|
if (ptr != NULL)
|
||||||
|
*ptr = ' ';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'n': /* retrieve attribute names only */
|
||||||
|
lmap->ldap_attrsonly = LDAPMAP_TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This is a string that is dependent on the
|
||||||
|
** method used defined by 'M'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
case 'P': /* Secret password for binding */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_secret = p;
|
||||||
|
secretread = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'p': /* ldap port */
|
||||||
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_port = atoi(p);
|
||||||
|
break;
|
||||||
|
|
||||||
/* args stolen from ldapsearch.c */
|
/* args stolen from ldapsearch.c */
|
||||||
case 'R': /* don't auto chase referrals */
|
case 'R': /* don't auto chase referrals */
|
||||||
# ifdef LDAP_REFERRALS
|
# ifdef LDAP_REFERRALS
|
||||||
@ -4089,10 +4189,6 @@ ldapmap_parseargs(map, args)
|
|||||||
# endif /* LDAP_REFERRALS */
|
# endif /* LDAP_REFERRALS */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'n': /* retrieve attribute names only */
|
|
||||||
lmap->ldap_attrsonly = LDAPMAP_TRUE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'r': /* alias dereferencing */
|
case 'r': /* alias dereferencing */
|
||||||
while (isascii(*++p) && isspace(*p))
|
while (isascii(*++p) && isspace(*p))
|
||||||
continue;
|
continue;
|
||||||
@ -4163,114 +4259,33 @@ ldapmap_parseargs(map, args)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'h': /* ldap host */
|
case 'V':
|
||||||
while (isascii(*++p) && isspace(*p))
|
if (*++p != '\\')
|
||||||
continue;
|
lmap->ldap_attrsep = *p;
|
||||||
if (lmap->ldap_uri != NULL)
|
|
||||||
{
|
|
||||||
syserr("Can not specify both an LDAP host and an LDAP URI in map %s",
|
|
||||||
map->map_mname);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
lmap->ldap_host = p;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'b': /* search base */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_base = p;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'p': /* ldap port */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_port = atoi(p);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'l': /* time limit */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_timelimit = atoi(p);
|
|
||||||
lmap->ldap_timeout.tv_sec = lmap->ldap_timelimit;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Z':
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_sizelimit = atoi(p);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'd': /* Dn to bind to server as */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_binddn = p;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'M': /* Method for binding */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (sm_strncasecmp(p, "LDAP_AUTH_", 10) == 0)
|
|
||||||
p += 10;
|
|
||||||
|
|
||||||
for (lam = LDAPAuthMethods;
|
|
||||||
lam != NULL && lam->lam_name != NULL; lam++)
|
|
||||||
{
|
|
||||||
if (sm_strncasecmp(p, lam->lam_name,
|
|
||||||
strlen(lam->lam_name)) == 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (lam->lam_name != NULL)
|
|
||||||
lmap->ldap_method = lam->lam_code;
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* bad config line */
|
switch (*++p)
|
||||||
if (!bitset(MCF_OPTFILE,
|
|
||||||
map->map_class->map_cflags))
|
|
||||||
{
|
{
|
||||||
char *ptr;
|
case 'n':
|
||||||
|
lmap->ldap_attrsep = '\n';
|
||||||
|
break;
|
||||||
|
|
||||||
if ((ptr = strchr(p, ' ')) != NULL)
|
case 't':
|
||||||
*ptr = '\0';
|
lmap->ldap_attrsep = '\t';
|
||||||
syserr("Method for binding must be [none|simple|krbv4] (not %s) in map %s",
|
break;
|
||||||
p, map->map_mname);
|
|
||||||
if (ptr != NULL)
|
default:
|
||||||
*ptr = ' ';
|
lmap->ldap_attrsep = '\\';
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
case 'v': /* attr to return */
|
||||||
** This is a string that is dependent on the
|
|
||||||
** method used defined above.
|
|
||||||
*/
|
|
||||||
|
|
||||||
case 'P': /* Secret password for binding */
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
|
||||||
continue;
|
|
||||||
lmap->ldap_secret = p;
|
|
||||||
secretread = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'H': /* Use LDAP URI */
|
|
||||||
# if !USE_LDAP_INIT
|
|
||||||
syserr("Must compile with -DUSE_LDAP_INIT to use LDAP URIs (-H) in map %s",
|
|
||||||
map->map_mname);
|
|
||||||
return false;
|
|
||||||
# else /* !USE_LDAP_INIT */
|
|
||||||
if (lmap->ldap_host != NULL)
|
|
||||||
{
|
|
||||||
syserr("Can not specify both an LDAP host and an LDAP URI in map %s",
|
|
||||||
map->map_mname);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
while (isascii(*++p) && isspace(*p))
|
while (isascii(*++p) && isspace(*p))
|
||||||
continue;
|
continue;
|
||||||
lmap->ldap_uri = p;
|
lmap->ldap_attr[0] = p;
|
||||||
|
lmap->ldap_attr[1] = NULL;
|
||||||
break;
|
break;
|
||||||
# endif /* !USE_LDAP_INIT */
|
|
||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
/* -w should be for passwd, -P should be for version */
|
/* -w should be for passwd, -P should be for version */
|
||||||
@ -4297,8 +4312,10 @@ ldapmap_parseargs(map, args)
|
|||||||
# endif /* LDAP_VERSION_MIN */
|
# endif /* LDAP_VERSION_MIN */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'K':
|
case 'Z':
|
||||||
lmap->ldap_multi_args = true;
|
while (isascii(*++p) && isspace(*p))
|
||||||
|
continue;
|
||||||
|
lmap->ldap_sizelimit = atoi(p);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: milter.c,v 8.267 2007/02/27 22:21:12 ca Exp $")
|
SM_RCSID("@(#)$Id: milter.c,v 8.269 2007/06/06 17:26:12 ca Exp $")
|
||||||
|
|
||||||
#if MILTER
|
#if MILTER
|
||||||
# include <sm/sendmail.h>
|
# include <sm/sendmail.h>
|
||||||
@ -51,7 +51,8 @@ static void milter_quit_filter __P((struct milter *, ENVELOPE *));
|
|||||||
static void milter_abort_filter __P((struct milter *, ENVELOPE *));
|
static void milter_abort_filter __P((struct milter *, ENVELOPE *));
|
||||||
static void milter_send_macros __P((struct milter *, char **, int,
|
static void milter_send_macros __P((struct milter *, char **, int,
|
||||||
ENVELOPE *));
|
ENVELOPE *));
|
||||||
static int milter_negotiate __P((struct milter *, ENVELOPE *));
|
static int milter_negotiate __P((struct milter *, ENVELOPE *,
|
||||||
|
milters_T *));
|
||||||
static void milter_per_connection_check __P((ENVELOPE *));
|
static void milter_per_connection_check __P((ENVELOPE *));
|
||||||
static char *milter_headers __P((struct milter *, ENVELOPE *, char *));
|
static char *milter_headers __P((struct milter *, ENVELOPE *, char *));
|
||||||
static void milter_addheader __P((struct milter *, char *, ssize_t,
|
static void milter_addheader __P((struct milter *, char *, ssize_t,
|
||||||
@ -1790,41 +1791,6 @@ milter_reset_df(e)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
** MILTER_CAN_DELRCPTS -- can any milter filters delete recipients?
|
|
||||||
**
|
|
||||||
** Parameters:
|
|
||||||
** none
|
|
||||||
**
|
|
||||||
** Returns:
|
|
||||||
** true if any filter deletes recipients, false otherwise
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool
|
|
||||||
milter_can_delrcpts()
|
|
||||||
{
|
|
||||||
bool can = false;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (tTd(64, 10))
|
|
||||||
sm_dprintf("milter_can_delrcpts:");
|
|
||||||
|
|
||||||
for (i = 0; InputFilters[i] != NULL; i++)
|
|
||||||
{
|
|
||||||
struct milter *m = InputFilters[i];
|
|
||||||
|
|
||||||
if (bitset(SMFIF_DELRCPT, m->mf_fflags))
|
|
||||||
{
|
|
||||||
can = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tTd(64, 10))
|
|
||||||
sm_dprintf("%s\n", can ? "true" : "false");
|
|
||||||
|
|
||||||
return can;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** MILTER_QUIT_FILTER -- close down a single filter
|
** MILTER_QUIT_FILTER -- close down a single filter
|
||||||
**
|
**
|
||||||
@ -2406,15 +2372,17 @@ milter_getsymlist(m, buf, rlen, offset)
|
|||||||
** Parameters:
|
** Parameters:
|
||||||
** m -- milter filter structure.
|
** m -- milter filter structure.
|
||||||
** e -- current envelope.
|
** e -- current envelope.
|
||||||
|
** milters -- milters structure.
|
||||||
**
|
**
|
||||||
** Returns:
|
** Returns:
|
||||||
** 0 on success, -1 otherwise
|
** 0 on success, -1 otherwise
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
milter_negotiate(m, e)
|
milter_negotiate(m, e, milters)
|
||||||
struct milter *m;
|
struct milter *m;
|
||||||
ENVELOPE *e;
|
ENVELOPE *e;
|
||||||
|
milters_T *milters;
|
||||||
{
|
{
|
||||||
char rcmd;
|
char rcmd;
|
||||||
mi_int32 fvers, fflags, pflags;
|
mi_int32 fvers, fflags, pflags;
|
||||||
@ -2583,6 +2551,12 @@ milter_negotiate(m, e)
|
|||||||
milter_getsymlist(m, response, rlen, MILTER_OPTLEN);
|
milter_getsymlist(m, response, rlen, MILTER_OPTLEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bitset(SMFIF_DELRCPT, m->mf_fflags))
|
||||||
|
milters->mis_flags |= MIS_FL_DEL_RCPT;
|
||||||
|
if (!bitset(SMFIP_NORCPT, m->mf_pflags) &&
|
||||||
|
!bitset(SMFIP_NR_RCPT, m->mf_pflags))
|
||||||
|
milters->mis_flags |= MIS_FL_REJ_RCPT;
|
||||||
|
|
||||||
if (tTd(64, 5))
|
if (tTd(64, 5))
|
||||||
sm_dprintf("milter_negotiate(%s): received: version %u, fflags 0x%x, pflags 0x%x\n",
|
sm_dprintf("milter_negotiate(%s): received: version %u, fflags 0x%x, pflags 0x%x\n",
|
||||||
m->mf_name, m->mf_fvers, m->mf_fflags, m->mf_pflags);
|
m->mf_name, m->mf_fvers, m->mf_fflags, m->mf_pflags);
|
||||||
@ -3784,6 +3758,7 @@ milter_replbody(response, rlen, newfilter, e)
|
|||||||
** Parameters:
|
** Parameters:
|
||||||
** e -- current envelope.
|
** e -- current envelope.
|
||||||
** state -- return state from response.
|
** state -- return state from response.
|
||||||
|
** milters -- milters structure.
|
||||||
**
|
**
|
||||||
** Returns:
|
** Returns:
|
||||||
** true iff at least one filter is active
|
** true iff at least one filter is active
|
||||||
@ -3791,15 +3766,17 @@ milter_replbody(response, rlen, newfilter, e)
|
|||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
bool
|
bool
|
||||||
milter_init(e, state)
|
milter_init(e, state, milters)
|
||||||
ENVELOPE *e;
|
ENVELOPE *e;
|
||||||
char *state;
|
char *state;
|
||||||
|
milters_T *milters;
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (tTd(64, 10))
|
if (tTd(64, 10))
|
||||||
sm_dprintf("milter_init\n");
|
sm_dprintf("milter_init\n");
|
||||||
|
|
||||||
|
memset(milters, '\0', sizeof(*milters));
|
||||||
*state = SMFIR_CONTINUE;
|
*state = SMFIR_CONTINUE;
|
||||||
if (InputFilters[0] == NULL)
|
if (InputFilters[0] == NULL)
|
||||||
{
|
{
|
||||||
@ -3821,7 +3798,7 @@ milter_init(e, state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m->mf_sock < 0 ||
|
if (m->mf_sock < 0 ||
|
||||||
milter_negotiate(m, e) < 0 ||
|
milter_negotiate(m, e, milters) < 0 ||
|
||||||
m->mf_state == SMFS_ERROR)
|
m->mf_state == SMFS_ERROR)
|
||||||
{
|
{
|
||||||
if (tTd(64, 5))
|
if (tTd(64, 5))
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: mime.c,v 8.146 2006/08/16 16:52:11 ca Exp $")
|
SM_RCSID("@(#)$Id: mime.c,v 8.147 2007/09/26 23:29:11 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** MIME support.
|
** MIME support.
|
||||||
@ -525,10 +525,14 @@ mime8to7(mci, header, e, boundaries, flags, level)
|
|||||||
while (sm_io_fgets(e->e_dfp, SM_TIME_DEFAULT, buf, sizeof(buf))
|
while (sm_io_fgets(e->e_dfp, SM_TIME_DEFAULT, buf, sizeof(buf))
|
||||||
!= NULL)
|
!= NULL)
|
||||||
{
|
{
|
||||||
bt = mimeboundary(buf, boundaries);
|
if (!bitset(MCIF_INLONGLINE, mci->mci_flags))
|
||||||
if (bt != MBT_NOTSEP)
|
{
|
||||||
break;
|
bt = mimeboundary(buf, boundaries);
|
||||||
if (!putline(buf, mci))
|
if (bt != MBT_NOTSEP)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!putxline(buf, strlen(buf), mci,
|
||||||
|
PXLF_MAPFROM|PXLF_NOADDEOL))
|
||||||
goto writeerr;
|
goto writeerr;
|
||||||
}
|
}
|
||||||
if (sm_io_eof(e->e_dfp))
|
if (sm_io_eof(e->e_dfp))
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: parseaddr.c,v 8.400 2006/12/21 00:24:06 ca Exp $")
|
SM_RCSID("@(#)$Id: parseaddr.c,v 8.401 2007/09/27 23:33:59 ca Exp $")
|
||||||
|
|
||||||
#include <sm/sendmail.h>
|
#include <sm/sendmail.h>
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
@ -217,7 +217,7 @@ parseaddr(addr, a, flags, delim, delimptr, e, isrcpt)
|
|||||||
if (e->e_sendmode == SM_DEFER)
|
if (e->e_sendmode == SM_DEFER)
|
||||||
msg = "Deferring message until queue run";
|
msg = "Deferring message until queue run";
|
||||||
if (tTd(20, 1))
|
if (tTd(20, 1))
|
||||||
sm_dprintf("parseaddr: queuing message\n");
|
sm_dprintf("parseaddr: queueing message\n");
|
||||||
message(msg);
|
message(msg);
|
||||||
if (e->e_message == NULL && e->e_sendmode != SM_DEFER)
|
if (e->e_message == NULL && e->e_sendmode != SM_DEFER)
|
||||||
e->e_message = sm_rpool_strdup_x(e->e_rpool, msg);
|
e->e_message = sm_rpool_strdup_x(e->e_rpool, msg);
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
#include <sm/sem.h>
|
#include <sm/sem.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: queue.c,v 8.972 2007/03/29 22:55:17 ca Exp $")
|
SM_RCSID("@(#)$Id: queue.c,v 8.975 2007/06/18 20:08:40 ca Exp $")
|
||||||
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
|
||||||
@ -427,7 +427,7 @@ queueup(e, announce, msync)
|
|||||||
break;
|
break;
|
||||||
if (LogLevel > 0 && (i % 32) == 0)
|
if (LogLevel > 0 && (i % 32) == 0)
|
||||||
sm_syslog(LOG_ALERT, e->e_id,
|
sm_syslog(LOG_ALERT, e->e_id,
|
||||||
"queueup: cannot create %s, uid=%d: %s",
|
"queueup: cannot create %s, euid=%d: %s",
|
||||||
tf, (int) geteuid(),
|
tf, (int) geteuid(),
|
||||||
sm_errstring(errno));
|
sm_errstring(errno));
|
||||||
}
|
}
|
||||||
@ -845,8 +845,8 @@ queueup(e, announce, msync)
|
|||||||
|
|
||||||
if (bitset(H_FROM, h->h_flags))
|
if (bitset(H_FROM, h->h_flags))
|
||||||
oldstyle = false;
|
oldstyle = false;
|
||||||
|
commaize(h, h->h_value, oldstyle, &mcibuf, e,
|
||||||
commaize(h, h->h_value, oldstyle, &mcibuf, e);
|
PXLF_HEADER);
|
||||||
|
|
||||||
TrafficLogFile = savetrace;
|
TrafficLogFile = savetrace;
|
||||||
}
|
}
|
||||||
@ -2147,6 +2147,14 @@ run_work_group(wgrp, flags)
|
|||||||
|
|
||||||
maxrunners = Queue[qgrp]->qg_maxqrun;
|
maxrunners = Queue[qgrp]->qg_maxqrun;
|
||||||
|
|
||||||
|
/*
|
||||||
|
** If no runners are configured for this group but
|
||||||
|
** the queue is "forced" then lets use 1 runner.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (maxrunners == 0 && bitset(RWG_FORCE, flags))
|
||||||
|
maxrunners = 1;
|
||||||
|
|
||||||
/* No need to have more runners then there are jobs */
|
/* No need to have more runners then there are jobs */
|
||||||
if (maxrunners > njobs)
|
if (maxrunners > njobs)
|
||||||
maxrunners = njobs;
|
maxrunners = njobs;
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
#include <sm/sendmail.h>
|
#include <sm/sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: readcf.c,v 8.663 2006/10/05 20:58:59 ca Exp $")
|
SM_RCSID("@(#)$Id: readcf.c,v 8.664 2007/07/10 17:01:22 ca Exp $")
|
||||||
|
|
||||||
#if NETINET || NETINET6
|
#if NETINET || NETINET6
|
||||||
# include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
@ -2245,6 +2245,10 @@ static struct optioninfo
|
|||||||
# define O_EIGHT_BIT_ADDR_OK 0xdf
|
# define O_EIGHT_BIT_ADDR_OK 0xdf
|
||||||
{ "EightBitAddrOK", O_EIGHT_BIT_ADDR_OK, OI_NONE },
|
{ "EightBitAddrOK", O_EIGHT_BIT_ADDR_OK, OI_NONE },
|
||||||
#endif /* _FFR_EIGHT_BIT_ADDR_OK */
|
#endif /* _FFR_EIGHT_BIT_ADDR_OK */
|
||||||
|
#if _FFR_ADDR_TYPE_MODES
|
||||||
|
# define O_ADDR_TYPE_MODES 0xe0
|
||||||
|
{ "AddrTypeModes", O_ADDR_TYPE_MODES, OI_NONE },
|
||||||
|
#endif /* _FFR_ADDR_TYPE_MODES */
|
||||||
|
|
||||||
{ NULL, '\0', OI_NONE }
|
{ NULL, '\0', OI_NONE }
|
||||||
};
|
};
|
||||||
@ -3807,6 +3811,12 @@ setoption(opt, val, safe, sticky, e)
|
|||||||
break;
|
break;
|
||||||
#endif /* _FFR_EIGHT_BIT_ADDR_OK */
|
#endif /* _FFR_EIGHT_BIT_ADDR_OK */
|
||||||
|
|
||||||
|
#if _FFR_ADDR_TYPE_MODES
|
||||||
|
case O_ADDR_TYPE_MODES:
|
||||||
|
AddrTypeModes = atobool(val);
|
||||||
|
break;
|
||||||
|
#endif /* _FFR_ADDR_TYPE_MODES */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (tTd(37, 1))
|
if (tTd(37, 1))
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: recipient.c,v 8.348 2007/03/19 21:33:09 ca Exp $")
|
SM_RCSID("@(#)$Id: recipient.c,v 8.349 2007/07/10 17:01:22 ca Exp $")
|
||||||
|
|
||||||
static void includetimeout __P((int));
|
static void includetimeout __P((int));
|
||||||
static ADDRESS *self_reference __P((ADDRESS *));
|
static ADDRESS *self_reference __P((ADDRESS *));
|
||||||
@ -377,6 +377,12 @@ removefromlist(list, sendq, e)
|
|||||||
{
|
{
|
||||||
(void) sm_strlcpy(bufp, denlstring(list, false, true), i);
|
(void) sm_strlcpy(bufp, denlstring(list, false, true), i);
|
||||||
|
|
||||||
|
#if _FFR_ADDR_TYPE_MODES
|
||||||
|
if (AddrTypeModes)
|
||||||
|
macdefine(&e->e_macro, A_PERM, macid("{addr_type}"),
|
||||||
|
"e r d");
|
||||||
|
else
|
||||||
|
#endif /* _FFR_ADDR_TYPE_MODES */
|
||||||
macdefine(&e->e_macro, A_PERM, macid("{addr_type}"), "e r");
|
macdefine(&e->e_macro, A_PERM, macid("{addr_type}"), "e r");
|
||||||
for (p = bufp; *p != '\0'; )
|
for (p = bufp; *p != '\0'; )
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
#ifdef _DEFINE
|
#ifdef _DEFINE
|
||||||
# ifndef lint
|
# ifndef lint
|
||||||
SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.1042 2007/02/27 22:21:13 ca Exp $";
|
SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.1052 2007/10/05 23:06:30 ca Exp $";
|
||||||
# endif /* ! lint */
|
# endif /* ! lint */
|
||||||
#endif /* _DEFINE */
|
#endif /* _DEFINE */
|
||||||
|
|
||||||
@ -324,7 +324,8 @@ typedef struct address ADDRESS;
|
|||||||
(s) == QS_RETRY)
|
(s) == QS_RETRY)
|
||||||
#define QS_IS_ATTEMPTED(s) ((s) == QS_QUEUEUP || \
|
#define QS_IS_ATTEMPTED(s) ((s) == QS_QUEUEUP || \
|
||||||
(s) == QS_RETRY || \
|
(s) == QS_RETRY || \
|
||||||
(s) == QS_SENT)
|
(s) == QS_SENT || \
|
||||||
|
(s) == QS_DISCARDED)
|
||||||
#define QS_IS_DEAD(s) ((s) >= QS_DONTSEND)
|
#define QS_IS_DEAD(s) ((s) >= QS_DONTSEND)
|
||||||
|
|
||||||
|
|
||||||
@ -728,6 +729,7 @@ MCI
|
|||||||
#if _FFR_IGNORE_EXT_ON_HELO
|
#if _FFR_IGNORE_EXT_ON_HELO
|
||||||
# define MCIF_HELO 0x00800000 /* we used HELO: ignore extensions */
|
# define MCIF_HELO 0x00800000 /* we used HELO: ignore extensions */
|
||||||
#endif /* _FFR_IGNORE_EXT_ON_HELO */
|
#endif /* _FFR_IGNORE_EXT_ON_HELO */
|
||||||
|
#define MCIF_INLONGLINE 0x01000000 /* in the middle of a long line */
|
||||||
#define MCIF_ONLY_EHLO 0x10000000 /* use only EHLO in smtpinit */
|
#define MCIF_ONLY_EHLO 0x10000000 /* use only EHLO in smtpinit */
|
||||||
|
|
||||||
/* states */
|
/* states */
|
||||||
@ -824,7 +826,7 @@ extern struct hdrinfo HdrInfo[];
|
|||||||
/* functions */
|
/* functions */
|
||||||
extern void addheader __P((char *, char *, int, ENVELOPE *, bool));
|
extern void addheader __P((char *, char *, int, ENVELOPE *, bool));
|
||||||
extern unsigned long chompheader __P((char *, int, HDR **, ENVELOPE *));
|
extern unsigned long chompheader __P((char *, int, HDR **, ENVELOPE *));
|
||||||
extern bool commaize __P((HDR *, char *, bool, MCI *, ENVELOPE *));
|
extern bool commaize __P((HDR *, char *, bool, MCI *, ENVELOPE *, int));
|
||||||
extern HDR *copyheader __P((HDR *, SM_RPOOL_T *));
|
extern HDR *copyheader __P((HDR *, SM_RPOOL_T *));
|
||||||
extern void eatheader __P((ENVELOPE *, bool, bool));
|
extern void eatheader __P((ENVELOPE *, bool, bool));
|
||||||
extern char *hvalue __P((char *, HDR *));
|
extern char *hvalue __P((char *, HDR *));
|
||||||
@ -894,6 +896,9 @@ struct envelope
|
|||||||
char *e_bodytype; /* type of message body */
|
char *e_bodytype; /* type of message body */
|
||||||
SM_FILE_T *e_dfp; /* data file */
|
SM_FILE_T *e_dfp; /* data file */
|
||||||
char *e_id; /* code for this entry in queue */
|
char *e_id; /* code for this entry in queue */
|
||||||
|
#if _FFR_SESSID
|
||||||
|
char *e_sessid; /* session ID for this envelope */
|
||||||
|
#endif /* _FFR_SESSID */
|
||||||
int e_qgrp; /* queue group (index into queues) */
|
int e_qgrp; /* queue group (index into queues) */
|
||||||
int e_qdir; /* index into queue directories */
|
int e_qdir; /* index into queue directories */
|
||||||
int e_dfqgrp; /* data file queue group index */
|
int e_dfqgrp; /* data file queue group index */
|
||||||
@ -1725,6 +1730,17 @@ struct milter
|
|||||||
#endif /* _FFR_MILTER_CHECK */
|
#endif /* _FFR_MILTER_CHECK */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct milters
|
||||||
|
{
|
||||||
|
mi_int32 mis_flags; /* filter flags */
|
||||||
|
};
|
||||||
|
typedef struct milters milters_T;
|
||||||
|
|
||||||
|
#define MIS_FL_NONE 0x00000000 /* no requirements... */
|
||||||
|
#define MIS_FL_DEL_RCPT 0x00000001 /* can delete rcpt */
|
||||||
|
#define MIS_FL_REJ_RCPT 0x00000002 /* can reject rcpt */
|
||||||
|
|
||||||
|
|
||||||
/* MTA flags */
|
/* MTA flags */
|
||||||
# define SMF_REJECT 'R' /* Reject connection on filter fail */
|
# define SMF_REJECT 'R' /* Reject connection on filter fail */
|
||||||
# define SMF_TEMPFAIL 'T' /* tempfail connection on failure */
|
# define SMF_TEMPFAIL 'T' /* tempfail connection on failure */
|
||||||
@ -2082,10 +2098,7 @@ extern unsigned char tTdvect[100]; /* trace vector */
|
|||||||
** The "no queue id" queue id for sm_syslog
|
** The "no queue id" queue id for sm_syslog
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NOQID "*~*"
|
#define NOQID ""
|
||||||
|
|
||||||
/* use id or NOQID (to avoid NOQUEUE in logfile) */
|
|
||||||
#define E_ID(id) ((id) == NULL ? NOQID : (id))
|
|
||||||
|
|
||||||
#define CURHOSTNAME (CurHostName == NULL ? "local" : CurHostName)
|
#define CURHOSTNAME (CurHostName == NULL ? "local" : CurHostName)
|
||||||
|
|
||||||
@ -2161,6 +2174,9 @@ extern unsigned char tTdvect[100]; /* trace vector */
|
|||||||
** Global variables.
|
** Global variables.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if _FFR_ADDR_TYPE_MODES
|
||||||
|
EXTERN bool AddrTypeModes; /* addr_type: extra "mode" information */
|
||||||
|
#endif /* _FFR_ADDR_TYPE_MODES */
|
||||||
EXTERN bool AllowBogusHELO; /* allow syntax errors on HELO command */
|
EXTERN bool AllowBogusHELO; /* allow syntax errors on HELO command */
|
||||||
EXTERN bool CheckAliases; /* parse addresses during newaliases */
|
EXTERN bool CheckAliases; /* parse addresses during newaliases */
|
||||||
#if _FFR_QUEUE_RUN_PARANOIA
|
#if _FFR_QUEUE_RUN_PARANOIA
|
||||||
@ -2435,8 +2451,7 @@ extern int opencontrolsocket __P((void));
|
|||||||
extern void milter_config __P((char *, struct milter **, int));
|
extern void milter_config __P((char *, struct milter **, int));
|
||||||
extern void milter_setup __P((char *));
|
extern void milter_setup __P((char *));
|
||||||
extern void milter_set_option __P((char *, char *, bool));
|
extern void milter_set_option __P((char *, char *, bool));
|
||||||
extern bool milter_can_delrcpts __P((void));
|
extern bool milter_init __P((ENVELOPE *, char *, milters_T *));
|
||||||
extern bool milter_init __P((ENVELOPE *, char *));
|
|
||||||
extern void milter_quit __P((ENVELOPE *));
|
extern void milter_quit __P((ENVELOPE *));
|
||||||
extern void milter_abort __P((ENVELOPE *));
|
extern void milter_abort __P((ENVELOPE *));
|
||||||
extern char *milter_connect __P((char *, SOCKADDR, ENVELOPE *, char *));
|
extern char *milter_connect __P((char *, SOCKADDR, ENVELOPE *, char *));
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
# if NAMED_BIND
|
# if NAMED_BIND
|
||||||
# include "sm_resolve.h"
|
# include "sm_resolve.h"
|
||||||
|
|
||||||
SM_RCSID("$Id: sm_resolve.c,v 8.34 2006/08/15 23:24:58 ca Exp $")
|
SM_RCSID("$Id: sm_resolve.c,v 8.35 2007/06/25 16:20:14 ca Exp $")
|
||||||
|
|
||||||
static struct stot
|
static struct stot
|
||||||
{
|
{
|
||||||
@ -168,6 +168,7 @@ parse_dns_reply(data, len)
|
|||||||
int len;
|
int len;
|
||||||
{
|
{
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
|
ushort ans_cnt, ui;
|
||||||
int status;
|
int status;
|
||||||
size_t l;
|
size_t l;
|
||||||
char host[MAXHOSTNAMELEN];
|
char host[MAXHOSTNAMELEN];
|
||||||
@ -196,11 +197,15 @@ parse_dns_reply(data, len)
|
|||||||
dns_free_data(r);
|
dns_free_data(r);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ans_cnt = ntohs((ushort) r->dns_r_h.ancount);
|
||||||
|
|
||||||
p += status;
|
p += status;
|
||||||
GETSHORT(r->dns_r_q.dns_q_type, p);
|
GETSHORT(r->dns_r_q.dns_q_type, p);
|
||||||
GETSHORT(r->dns_r_q.dns_q_class, p);
|
GETSHORT(r->dns_r_q.dns_q_class, p);
|
||||||
rr = &r->dns_r_head;
|
rr = &r->dns_r_head;
|
||||||
while (p < data + len)
|
ui = 0;
|
||||||
|
while (p < data + len && ui < ans_cnt)
|
||||||
{
|
{
|
||||||
int type, class, ttl, size, txtlen;
|
int type, class, ttl, size, txtlen;
|
||||||
|
|
||||||
@ -210,6 +215,7 @@ parse_dns_reply(data, len)
|
|||||||
dns_free_data(r);
|
dns_free_data(r);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
++ui;
|
||||||
p += status;
|
p += status;
|
||||||
GETSHORT(type, p);
|
GETSHORT(type, p);
|
||||||
GETSHORT(class, p);
|
GETSHORT(class, p);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -17,7 +17,7 @@
|
|||||||
# include <libmilter/mfdef.h>
|
# include <libmilter/mfdef.h>
|
||||||
#endif /* MILTER */
|
#endif /* MILTER */
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.960 2007/02/07 20:18:47 ca Exp $")
|
SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.967 2007/10/01 16:22:14 ca Exp $")
|
||||||
|
|
||||||
#include <sm/time.h>
|
#include <sm/time.h>
|
||||||
#include <sm/fdset.h>
|
#include <sm/fdset.h>
|
||||||
@ -349,14 +349,18 @@ static SM_DEBUG_T DebugLeakSmtp = SM_DEBUG_INITIALIZER("leak_smtp",
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
bool sm_gotmail; /* mail command received */
|
bool sm_gotmail; /* mail command received */
|
||||||
unsigned int sm_nrcpts; /* number of successful RCPT commands */
|
unsigned int sm_nrcpts; /* number of successful RCPT commands */
|
||||||
bool sm_discard;
|
bool sm_discard;
|
||||||
#if MILTER
|
#if MILTER
|
||||||
bool sm_milterize;
|
bool sm_milterize;
|
||||||
bool sm_milterlist; /* any filters in the list? */
|
bool sm_milterlist; /* any filters in the list? */
|
||||||
|
milters_T sm_milters;
|
||||||
|
|
||||||
|
/* e_nrcpts from envelope before recipient() call */
|
||||||
|
unsigned int sm_e_nrcpts_orig;
|
||||||
#endif /* MILTER */
|
#endif /* MILTER */
|
||||||
char *sm_quarmsg; /* carry quarantining across messages */
|
char *sm_quarmsg; /* carry quarantining across messages */
|
||||||
} SMTP_T;
|
} SMTP_T;
|
||||||
|
|
||||||
static bool smtp_data __P((SMTP_T *, ENVELOPE *));
|
static bool smtp_data __P((SMTP_T *, ENVELOPE *));
|
||||||
@ -907,7 +911,7 @@ smtp(nullserver, d_flags, e)
|
|||||||
char state;
|
char state;
|
||||||
|
|
||||||
/* initialize mail filter connection */
|
/* initialize mail filter connection */
|
||||||
smtp.sm_milterlist = milter_init(e, &state);
|
smtp.sm_milterlist = milter_init(e, &state, &smtp.sm_milters);
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case SMFIR_REJECT:
|
case SMFIR_REJECT:
|
||||||
@ -1285,7 +1289,7 @@ smtp(nullserver, d_flags, e)
|
|||||||
{
|
{
|
||||||
authenticating = SASL_NOT_AUTH;
|
authenticating = SASL_NOT_AUTH;
|
||||||
|
|
||||||
/* rfc 2254 4. */
|
/* RFC 2554 4. */
|
||||||
message("501 5.0.0 AUTH aborted");
|
message("501 5.0.0 AUTH aborted");
|
||||||
RESET_SASLCONN;
|
RESET_SASLCONN;
|
||||||
continue;
|
continue;
|
||||||
@ -1304,7 +1308,7 @@ smtp(nullserver, d_flags, e)
|
|||||||
{
|
{
|
||||||
authenticating = SASL_NOT_AUTH;
|
authenticating = SASL_NOT_AUTH;
|
||||||
|
|
||||||
/* rfc 2254 4. */
|
/* RFC 2554 4. */
|
||||||
message("501 5.5.4 cannot decode AUTH parameter %s",
|
message("501 5.5.4 cannot decode AUTH parameter %s",
|
||||||
inp);
|
inp);
|
||||||
# if SASL >= 20000
|
# if SASL >= 20000
|
||||||
@ -1658,7 +1662,21 @@ smtp(nullserver, d_flags, e)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ismore)
|
/*
|
||||||
|
** RFC 2554 4.
|
||||||
|
** Unlike a zero-length client answer to a
|
||||||
|
** 334 reply, a zero- length initial response
|
||||||
|
** is sent as a single equals sign ("=").
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (ismore && *q == '=' && *(q + 1) == '\0')
|
||||||
|
{
|
||||||
|
/* will be free()d, don't use in=""; */
|
||||||
|
in = xalloc(1);
|
||||||
|
*in = '\0';
|
||||||
|
inlen = 0;
|
||||||
|
}
|
||||||
|
else if (ismore)
|
||||||
{
|
{
|
||||||
/* could this be shorter? XXX */
|
/* could this be shorter? XXX */
|
||||||
# if SASL >= 20000
|
# if SASL >= 20000
|
||||||
@ -2503,6 +2521,7 @@ smtp(nullserver, d_flags, e)
|
|||||||
(void) memset(&addr_st, '\0', sizeof(addr_st));
|
(void) memset(&addr_st, '\0', sizeof(addr_st));
|
||||||
a = NULL;
|
a = NULL;
|
||||||
milter_rcpt_added = false;
|
milter_rcpt_added = false;
|
||||||
|
smtp.sm_e_nrcpts_orig = e->e_nrcpts;
|
||||||
#endif
|
#endif
|
||||||
if (BadRcptThrottle > 0 &&
|
if (BadRcptThrottle > 0 &&
|
||||||
n_badrcpts >= BadRcptThrottle)
|
n_badrcpts >= BadRcptThrottle)
|
||||||
@ -2558,13 +2577,18 @@ smtp(nullserver, d_flags, e)
|
|||||||
#if MILTER
|
#if MILTER
|
||||||
/*
|
/*
|
||||||
** Do not expand recipients at RCPT time (in the call
|
** Do not expand recipients at RCPT time (in the call
|
||||||
** to recipient()). If they are expanded, it
|
** to recipient()) if a milter can delete or reject
|
||||||
** is impossible for removefromlist() to figure
|
** a RCPT. If they are expanded, it is impossible
|
||||||
** out the expanded members of the original
|
** for removefromlist() to figure out the expanded
|
||||||
** recipient and mark them as QS_DONTSEND.
|
** members of the original recipient and mark them
|
||||||
|
** as QS_DONTSEND.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
e->e_flags |= EF_VRFYONLY;
|
if (!(smtp.sm_milterlist && smtp.sm_milterize &&
|
||||||
|
!bitset(EF_DISCARD, e->e_flags)) &&
|
||||||
|
(smtp.sm_milters.mis_flags &
|
||||||
|
(MIS_FL_DEL_RCPT|MIS_FL_REJ_RCPT)) != 0)
|
||||||
|
e->e_flags |= EF_VRFYONLY;
|
||||||
milter_cmd_done = false;
|
milter_cmd_done = false;
|
||||||
milter_cmd_safe = false;
|
milter_cmd_safe = false;
|
||||||
#endif /* MILTER */
|
#endif /* MILTER */
|
||||||
@ -2799,6 +2823,8 @@ smtp(nullserver, d_flags, e)
|
|||||||
{
|
{
|
||||||
(void) removefromlist(addr, &e->e_sendqueue, e);
|
(void) removefromlist(addr, &e->e_sendqueue, e);
|
||||||
milter_cmd_fail = false;
|
milter_cmd_fail = false;
|
||||||
|
if (smtp.sm_e_nrcpts_orig < e->e_nrcpts)
|
||||||
|
e->e_nrcpts = smtp.sm_e_nrcpts_orig;
|
||||||
}
|
}
|
||||||
#endif /* MILTER */
|
#endif /* MILTER */
|
||||||
}
|
}
|
||||||
@ -3557,8 +3583,19 @@ smtp_data(smtp, e)
|
|||||||
|
|
||||||
if (aborting)
|
if (aborting)
|
||||||
{
|
{
|
||||||
|
ADDRESS *q;
|
||||||
|
|
||||||
/* Log who the mail would have gone to */
|
/* Log who the mail would have gone to */
|
||||||
logundelrcpts(e, e->e_message, 8, false);
|
logundelrcpts(e, e->e_message, 8, false);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** If something above refused the message, we still haven't
|
||||||
|
** accepted responsibility for it. Don't send DSNs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (q = e->e_sendqueue; q != NULL; q = q->q_next)
|
||||||
|
q->q_flags &= ~Q_PINGFLAGS;
|
||||||
|
|
||||||
flush_errors(true);
|
flush_errors(true);
|
||||||
buffer_errors();
|
buffer_errors();
|
||||||
goto abortmessage;
|
goto abortmessage;
|
||||||
@ -4026,8 +4063,7 @@ reset_mail_esmtp_args(e)
|
|||||||
macdefine(&e->e_macro, A_PERM, macid("{dsn_envid}"), NULL);
|
macdefine(&e->e_macro, A_PERM, macid("{dsn_envid}"), NULL);
|
||||||
|
|
||||||
/* "ret" */
|
/* "ret" */
|
||||||
e->e_flags &= EF_RET_PARAM;
|
e->e_flags &= ~(EF_RET_PARAM|EF_NO_BODY_RETN);
|
||||||
e->e_flags &= EF_NO_BODY_RETN;
|
|
||||||
macdefine(&e->e_macro, A_TEMP, macid("{dsn_ret}"), NULL);
|
macdefine(&e->e_macro, A_TEMP, macid("{dsn_ret}"), NULL);
|
||||||
|
|
||||||
#if SASL
|
#if SASL
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: usersmtp.c,v 8.469 2006/12/13 20:11:15 ca Exp $")
|
SM_RCSID("@(#)$Id: usersmtp.c,v 8.470 2007/10/17 21:35:30 ca Exp $")
|
||||||
|
|
||||||
#include <sysexits.h>
|
#include <sysexits.h>
|
||||||
|
|
||||||
@ -2703,8 +2703,9 @@ smtpdata(m, mci, e, ctladdr, xstart)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* terminate the message */
|
/* terminate the message */
|
||||||
if (sm_io_fprintf(mci->mci_out, SM_TIME_DEFAULT, ".%s", m->m_eol) ==
|
if (sm_io_fprintf(mci->mci_out, SM_TIME_DEFAULT, "%s.%s",
|
||||||
SM_IO_EOF)
|
bitset(MCIF_INLONGLINE, mci->mci_flags) ? m->m_eol : "",
|
||||||
|
m->m_eol) == SM_IO_EOF)
|
||||||
goto writeerr;
|
goto writeerr;
|
||||||
if (TrafficLogFile != NULL)
|
if (TrafficLogFile != NULL)
|
||||||
(void) sm_io_fprintf(TrafficLogFile, SM_TIME_DEFAULT,
|
(void) sm_io_fprintf(TrafficLogFile, SM_TIME_DEFAULT,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: util.c,v 8.410 2006/12/18 18:36:44 ca Exp $")
|
SM_RCSID("@(#)$Id: util.c,v 8.413 2007/09/26 23:29:11 ca Exp $")
|
||||||
|
|
||||||
#include <sm/sendmail.h>
|
#include <sm/sendmail.h>
|
||||||
#include <sysexits.h>
|
#include <sysexits.h>
|
||||||
@ -1154,7 +1154,8 @@ putxline(l, len, mci, pxflags)
|
|||||||
|
|
||||||
/* output last part */
|
/* output last part */
|
||||||
if (l[0] == '.' && slop == 0 &&
|
if (l[0] == '.' && slop == 0 &&
|
||||||
bitnset(M_XDOT, mci->mci_mailer->m_flags))
|
bitnset(M_XDOT, mci->mci_mailer->m_flags) &&
|
||||||
|
!bitset(MCIF_INLONGLINE, mci->mci_flags))
|
||||||
{
|
{
|
||||||
if (sm_io_putc(mci->mci_out, SM_TIME_DEFAULT, '.') ==
|
if (sm_io_putc(mci->mci_out, SM_TIME_DEFAULT, '.') ==
|
||||||
SM_IO_EOF)
|
SM_IO_EOF)
|
||||||
@ -1169,7 +1170,8 @@ putxline(l, len, mci, pxflags)
|
|||||||
else if (l[0] == 'F' && slop == 0 &&
|
else if (l[0] == 'F' && slop == 0 &&
|
||||||
bitset(PXLF_MAPFROM, pxflags) &&
|
bitset(PXLF_MAPFROM, pxflags) &&
|
||||||
strncmp(l, "From ", 5) == 0 &&
|
strncmp(l, "From ", 5) == 0 &&
|
||||||
bitnset(M_ESCFROM, mci->mci_mailer->m_flags))
|
bitnset(M_ESCFROM, mci->mci_mailer->m_flags) &&
|
||||||
|
!bitset(MCIF_INLONGLINE, mci->mci_flags))
|
||||||
{
|
{
|
||||||
if (sm_io_putc(mci->mci_out, SM_TIME_DEFAULT, '>') ==
|
if (sm_io_putc(mci->mci_out, SM_TIME_DEFAULT, '>') ==
|
||||||
SM_IO_EOF)
|
SM_IO_EOF)
|
||||||
@ -1188,13 +1190,19 @@ putxline(l, len, mci, pxflags)
|
|||||||
if (TrafficLogFile != NULL)
|
if (TrafficLogFile != NULL)
|
||||||
(void) sm_io_putc(TrafficLogFile, SM_TIME_DEFAULT,
|
(void) sm_io_putc(TrafficLogFile, SM_TIME_DEFAULT,
|
||||||
'\n');
|
'\n');
|
||||||
if ((!bitset(PXLF_NOADDEOL, pxflags) || !noeol) &&
|
if ((!bitset(PXLF_NOADDEOL, pxflags) || !noeol))
|
||||||
sm_io_fputs(mci->mci_out, SM_TIME_DEFAULT,
|
|
||||||
mci->mci_mailer->m_eol) == SM_IO_EOF)
|
|
||||||
{
|
{
|
||||||
dead = true;
|
mci->mci_flags &= ~MCIF_INLONGLINE;
|
||||||
break;
|
if (sm_io_fputs(mci->mci_out, SM_TIME_DEFAULT,
|
||||||
|
mci->mci_mailer->m_eol) == SM_IO_EOF)
|
||||||
|
{
|
||||||
|
dead = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
mci->mci_flags |= MCIF_INLONGLINE;
|
||||||
|
|
||||||
if (l < end && *l == '\n')
|
if (l < end && *l == '\n')
|
||||||
{
|
{
|
||||||
if (*++l != ' ' && *l != '\t' && *l != '\0' &&
|
if (*++l != ' ' && *l != '\t' && *l != '\0' &&
|
||||||
@ -2813,7 +2821,14 @@ count_open_connections(hostaddr)
|
|||||||
|
|
||||||
if (hostaddr == NULL)
|
if (hostaddr == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
n = 0;
|
|
||||||
|
/*
|
||||||
|
** Initialize to 1 instead of 0 because this code gets called
|
||||||
|
** before proc_list_add() gets called, so we (the daemon child
|
||||||
|
** for this connection) don't count ourselves.
|
||||||
|
*/
|
||||||
|
|
||||||
|
n = 1;
|
||||||
for (i = 0; i < ProcListSize; i++)
|
for (i = 0; i < ProcListSize; i++)
|
||||||
{
|
{
|
||||||
if (ProcListVec[i].proc_pid == NO_PID)
|
if (ProcListVec[i].proc_pid == NO_PID)
|
||||||
|
@ -13,6 +13,6 @@
|
|||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: version.c,v 8.191 2007/04/03 21:21:18 ca Exp $")
|
SM_RCSID("@(#)$Id: version.c,v 8.199 2007/10/31 16:04:12 ca Exp $")
|
||||||
|
|
||||||
char Version[] = "8.14.1";
|
char Version[] = "8.14.2";
|
||||||
|
@ -20,7 +20,7 @@ SM_IDSTR(copyright,
|
|||||||
The Regents of the University of California. All rights reserved.\n\
|
The Regents of the University of California. All rights reserved.\n\
|
||||||
Copyright (c) 1983 Eric P. Allman. All rights reserved.\n")
|
Copyright (c) 1983 Eric P. Allman. All rights reserved.\n")
|
||||||
|
|
||||||
SM_IDSTR(id, "@(#)$Id: vacation.c,v 8.143 2006/12/19 19:00:43 ca Exp $")
|
SM_IDSTR(id, "@(#)$Id: vacation.c,v 8.144 2007/05/11 18:50:36 ca Exp $")
|
||||||
|
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -46,7 +46,7 @@ uid_t RealUid;
|
|||||||
gid_t RealGid;
|
gid_t RealGid;
|
||||||
char *RealUserName;
|
char *RealUserName;
|
||||||
uid_t RunAsUid;
|
uid_t RunAsUid;
|
||||||
uid_t RunAsGid;
|
gid_t RunAsGid;
|
||||||
char *RunAsUserName;
|
char *RunAsUserName;
|
||||||
int Verbose = 2;
|
int Verbose = 2;
|
||||||
bool DontInitGroups = false;
|
bool DontInitGroups = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user