Import sendmail 8.14.2

This commit is contained in:
Gregory Neil Shapiro 2007-11-05 00:04:21 +00:00
parent dda9925afc
commit ffb836234b
45 changed files with 778 additions and 516 deletions

View File

@ -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
# certificates of mail servers of members of the sendmail consortium
# who may reply to questions etc sent to sendmail.org.
@ -73,73 +73,6 @@ iTMZxC4pWjmnDueb0kzHuX1qPrQAg4bTFij9rVVlYE4UAkbT
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=US, ST=California, L=Emeryville, O=gshapiro.net, CN=Certificate Authority/emailAddress=certificates@gshapiro.net
Validity
Not Before: Jan 1 04:39:54 2002 GMT
Not After : Dec 31 04:39:54 2006 GMT
Subject: C=US, ST=California, L=Emeryville, O=gshapiro.net, CN=Certificate Authority/emailAddress=certificates@gshapiro.net
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:aa:dd:a2:fe:3b:fa:2f:5c:3d:f1:e1:d4:1d:55:
04:27:6b:01:62:00:d7:02:cb:74:47:69:84:d7:c6:
c5:71:55:79:35:3a:a8:ce:de:48:23:53:80:3c:cd:
54:2e:e9:fe:b1:76:5a:be:cb:fd:2d:dc:a3:36:c5:
c7:1e:4e:ef:76:f0:55:8f:a0:a5:f8:07:c5:52:1d:
a2:42:81:4d:8a:c8:42:3f:f3:01:80:f9:46:35:a6:
bc:c0:9b:9f:33:8b:49:9b:1d:87:8f:19:48:15:21:
23:57:df:6e:4d:03:ed:ae:9f:0b:91:b7:a9:47:66:
f1:0d:1b:1c:5d:b4:57:60:c7
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
A0:6D:E0:06:AF:61:94:B4:C6:84:15:B4:8B:74:22:67:4A:43:60:CA
X509v3 Authority Key Identifier:
keyid:A0:6D:E0:06:AF:61:94:B4:C6:84:15:B4:8B:74:22:67:4A:43:60:CA
DirName:/C=US/ST=California/L=Emeryville/O=gshapiro.net/CN=Certificate Authority/emailAddress=certificates@gshapiro.net
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
87:27:d2:2a:3a:dc:04:cd:ef:e8:7b:1c:34:47:2e:13:34:a5:
08:f9:4d:df:d8:e1:6d:e6:9a:db:38:ee:20:6d:4a:ae:6f:1e:
bc:71:61:a4:b4:d6:40:24:ee:65:ca:e9:81:5a:ef:ee:62:57:
70:05:46:91:6b:d0:c6:a6:e9:38:65:ae:ea:50:b3:5c:27:c4:
7a:bd:95:8c:cb:45:ef:fc:fc:99:e5:6a:61:c3:44:77:d8:1f:
d6:b4:17:44:15:9a:bc:26:5b:ec:4e:29:5d:fd:cf:61:f3:be:
91:a4:3b:51:e6:73:5b:17:82:9d:5a:56:2c:63:c2:f1:d6:a2:
4c:5a
-----BEGIN CERTIFICATE-----
MIIDoTCCAwqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBmDELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCkVtZXJ5dmlsbGUxFTATBgNV
BAoTDGdzaGFwaXJvLm5ldDEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MSgwJgYJKoZIhvcNAQkBFhljZXJ0aWZpY2F0ZXNAZ3NoYXBpcm8ubmV0MB4XDTAy
MDEwMTA0Mzk1NFoXDTA2MTIzMTA0Mzk1NFowgZgxCzAJBgNVBAYTAlVTMRMwEQYD
VQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpFbWVyeXZpbGxlMRUwEwYDVQQKEwxn
c2hhcGlyby5uZXQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYG
CSqGSIb3DQEJARYZY2VydGlmaWNhdGVzQGdzaGFwaXJvLm5ldDCBnzANBgkqhkiG
9w0BAQEFAAOBjQAwgYkCgYEAqt2i/jv6L1w98eHUHVUEJ2sBYgDXAst0R2mE18bF
cVV5NTqozt5II1OAPM1ULun+sXZavsv9LdyjNsXHHk7vdvBVj6Cl+AfFUh2iQoFN
ishCP/MBgPlGNaa8wJufM4tJmx2HjxlIFSEjV99uTQPtrp8LkbepR2bxDRscXbRX
YMcCAwEAAaOB+DCB9TAdBgNVHQ4EFgQUoG3gBq9hlLTGhBW0i3QiZ0pDYMowgcUG
A1UdIwSBvTCBuoAUoG3gBq9hlLTGhBW0i3QiZ0pDYMqhgZ6kgZswgZgxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpFbWVyeXZpbGxl
MRUwEwYDVQQKEwxnc2hhcGlyby5uZXQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1
dGhvcml0eTEoMCYGCSqGSIb3DQEJARYZY2VydGlmaWNhdGVzQGdzaGFwaXJvLm5l
dIIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAIcn0io63ATN7+h7
HDRHLhM0pQj5Td/Y4W3mmts47iBtSq5vHrxxYaS01kAk7mXK6YFa7+5iV3AFRpFr
0Mam6ThlrupQs1wnxHq9lYzLRe/8/JnlamHDRHfYH9a0F0QVmrwmW+xOKV39z2Hz
vpGkO1Hmc1sXgp1aVixjwvHWokxa
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
@ -210,93 +143,94 @@ xBJlUbs98fcltM0L9lt6YSWtBgoBVdxxBSkNc+kwUb7T4bKJ/A8o9wZ1lhs0deAH
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Serial Number:
fa:7c:2c:80:29:3f:c2:64
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
Not Before: Aug 7 15:56:45 2003 GMT
Not After : Aug 6 15:56:45 2006 GMT
Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2003/emailAddress=ca+ca-rsa2003@esmtp.org
Not Before: May 4 02:07:56 2007 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 2007/emailAddress=ca+ca-rsa2007@esmtp.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:aa:37:0f:09:a9:1c:e3:1a:0c:fe:bd:6c:37:a4:
cf:87:db:af:6b:b4:19:d4:11:db:c6:56:ca:39:80:
c6:a4:38:b0:bc:ac:7e:be:71:30:86:2c:dc:fa:b5:
fd:58:23:a0:c1:ad:11:53:85:ca:fb:e6:d8:7e:28:
eb:84:3b:cd:a3:fa:28:a5:cb:c7:b2:54:99:3e:40:
2a:27:43:4b:0c:26:4b:af:97:3d:92:82:d9:eb:2c:
7f:77:fd:b8:cd:7e:1e:04:81:17:3c:e2:44:68:ce:
88:66:02:90:24:35:24:c4:4c:ad:77:04:1a:3a:d5:
59:28:28:03:da:03:9d:f4:2e:52:6e:b5:36:96:4b:
14:f8:fc:8e:c6:d3:9b:e2:80:90:8b:71:d7:d0:5c:
43:b2:49:f1:5a:26:f3:5d:9e:3b:01:98:db:e3:ed:
5e:8d:dd:cf:aa:68:9d:0b:c9:e2:4e:fc:16:44:72:
93:07:62:18:05:c1:47:81:3c:3d:e4:e4:22:da:2c:
d6:4a:44:52:06:7a:83:b5:e9:52:38:97:2f:75:a6:
5c:6f:87:8a:8d:83:f4:d0:04:a5:34:18:5e:a1:06:
16:b3:54:ce:64:47:ca:70:56:a3:6f:b9:7f:af:91:
76:78:70:b4:ab:ae:8e:d5:22:26:57:b1:ba:e7:4b:
18:21
00:b0:28:91:31:af:82:ce:72:ef:36:ab:7d:e9:b1:
f5:77:66:38:4b:38:1f:5f:3d:12:d3:c8:fd:9a:f4:
d4:f6:b8:90:f9:26:5f:29:f7:43:f9:34:ec:65:62:
01:bb:64:f1:5d:ea:75:04:3d:92:65:60:a2:06:62:
fa:88:ca:d8:20:50:c8:1e:38:53:b5:18:dd:b7:bd:
c7:08:35:4c:d9:dc:c6:97:56:37:b6:65:33:74:5a:
b2:c3:85:08:2b:b7:26:70:ff:38:02:1a:67:6a:d0:
49:18:10:4b:f8:db:af:06:9c:b1:a8:82:a1:b1:75:
d2:52:9b:53:0c:ca:a7:e3:15:38:79:6d:a1:f5:ef:
7c:8b:fd:bd:04:78:f9:e8:1e:b9:92:ea:74:d7:45:
1e:4c:c8:bd:f4:5c:fc:1a:7f:e7:31:c6:ab:cb:78:
c7:4d:2f:b5:72:10:35:27:4a:1a:fa:53:19:f8:a7:
59:63:eb:e9:15:ab:dc:71:69:8c:42:1c:96:4e:89:
80:66:c9:9e:21:d5:3d:08:19:74:a5:f5:07:a0:ae:
de:79:af:fd:42:c2:79:7e:8c:f8:39:22:3b:c3:c4:
58:3b:d0:0d:e6:a9:11:b6:a2:cd:2e:e5:16:66:fd:
7e:65:33:94:b0:36:80:27:f5:80:76:a9:e5:df:f2:
cf:ef
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
3A:12:03:DB:0F:9E:28:45:A6:34:8D:38:AB:BA:47:8C:2A:A0:E4:2E
B2:49:6B:52:45:EE:90:36:D2:79:47:03:33:D9:A0:BA:80:50:DA:1C
X509v3 Authority Key Identifier:
keyid:3A:12:03:DB:0F:9E:28:45:A6:34:8D:38:AB:BA:47:8C:2A:A0:E4:2E
DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2003/emailAddress=ca+ca-rsa2003@esmtp.org
serial:00
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 2007/emailAddress=ca+ca-rsa2007@esmtp.org
serial:FA:7C:2C:80:29:3F:C2:64
X509v3 Basic Constraints:
CA:TRUE
CA:TRUE
X509v3 Subject Alternative Name:
email:ca+ca-rsa2003@esmtp.org
email:ca+ca-rsa2007@esmtp.org
X509v3 Issuer Alternative Name:
email:ca+ca-rsa2003@esmtp.org
email:ca+ca-rsa2007@esmtp.org
Signature Algorithm: md5WithRSAEncryption
96:83:b6:54:93:df:38:d0:48:a7:a1:c8:08:c9:0f:e9:80:05:
e3:7e:c3:61:51:88:7b:7a:bb:24:b0:69:a3:22:e4:98:38:da:
c8:c3:eb:52:70:63:e2:66:f2:59:ef:56:be:aa:7c:87:6e:94:
85:d4:71:ba:35:f7:ee:d0:6e:52:1d:1f:e4:fd:2f:e2:70:31:
5d:b7:8b:13:cc:70:10:21:fa:34:29:8f:8d:d8:4a:c7:0f:b2:
36:e7:1e:1e:46:d1:11:84:80:7c:bb:24:c4:63:be:2a:24:53:
74:0c:89:e0:6a:f4:08:63:bf:54:d3:0a:d9:fc:fe:6c:de:4f:
97:61:08:a0:10:92:eb:af:06:ec:50:86:c4:cc:6b:31:32:60:
25:7a:09:47:f8:42:7a:a2:d5:90:fa:48:be:bf:0a:e1:03:b8:
56:24:b9:12:e9:ba:09:30:47:be:a5:8e:a2:92:a4:dc:a6:a7:
c6:29:39:65:6e:64:4a:1b:b2:c3:07:29:f5:c0:7e:78:e0:22:
9b:98:d4:87:91:ca:e1:66:9d:2f:70:f1:4c:a5:8e:2e:68:52:
b3:bd:95:76:56:40:0e:46:47:e4:b3:ec:aa:3c:e8:86:96:5a:
ed:fa:c9:10:95:53:04:13:71:01:91:ce:cd:3a:51:c6:30:e9:
48:49:64:a3
98:98:7c:d3:d0:5b:72:47:15:e6:22:68:bb:78:0e:78:66:e9:
56:16:d8:bc:9d:5a:dc:27:29:fb:91:2d:6a:21:35:18:56:b4:
4f:2a:09:c0:08:6f:9a:59:2b:2e:72:9a:fb:50:ba:c7:a9:91:
a0:f9:6c:be:cf:78:42:43:02:70:53:97:ba:6a:e3:da:17:e8:
1f:c7:3a:5b:e7:bc:eb:e5:24:4c:f5:cf:61:34:1e:20:ed:17:
63:ef:81:d3:9e:25:fe:cc:05:19:cc:8a:82:c9:4c:3a:b5:6b:
49:51:76:46:02:aa:60:bb:c4:b9:61:48:33:da:79:8d:46:a3:
06:20:98:f3:b2:db:3b:ad:c9:1d:0e:97:3d:b7:14:19:d3:7d:
04:8b:6a:81:e0:11:5b:e1:35:a3:ff:2f:11:86:1c:31:85:7a:
fd:3f:36:ef:99:25:46:2e:b0:cb:43:45:4a:ec:be:d3:3f:a4:
77:9b:79:cc:ce:92:63:a5:d9:ed:db:a0:9d:5d:7c:d7:80:f6:
c9:41:fb:02:96:8e:fd:f3:da:05:9d:81:a7:25:da:26:35:3b:
a9:0c:8c:f5:a7:5d:48:ec:87:c7:7a:60:51:76:f2:de:9b:14:
2b:55:8a:43:df:99:19:f3:eb:e7:03:e6:a7:a2:a2:28:dd:d5:
07:6a:3f:f7
-----BEGIN CERTIFICATE-----
MIIFFzCCA/+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBpTELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCEJlcmtlbGV5MRQwEgYDVQQK
EwtFbmRtYWlsIE9yZzEMMAoGA1UECxMDTVRBMSIwIAYDVQQDExlDbGF1cyBBc3Nt
YW5uIENBIFJTQSAyMDAzMSYwJAYJKoZIhvcNAQkBFhdjYStjYS1yc2EyMDAzQGVz
bXRwLm9yZzAeFw0wMzA4MDcxNTU2NDVaFw0wNjA4MDYxNTU2NDVaMIGlMQswCQYD
MIIFJzCCBA+gAwIBAgIJAPp8LIApP8JkMA0GCSqGSIb3DQEBBAUAMIGlMQswCQYD
VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIQmVya2VsZXkx
FDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNNVEExIjAgBgNVBAMTGUNs
YXVzIEFzc21hbm4gQ0EgUlNBIDIwMDMxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz
YTIwMDNAZXNtdHAub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
qjcPCakc4xoM/r1sN6TPh9uva7QZ1BHbxlbKOYDGpDiwvKx+vnEwhizc+rX9WCOg
wa0RU4XK++bYfijrhDvNo/oopcvHslSZPkAqJ0NLDCZLr5c9koLZ6yx/d/24zX4e
BIEXPOJEaM6IZgKQJDUkxEytdwQaOtVZKCgD2gOd9C5SbrU2lksU+PyOxtOb4oCQ
i3HX0FxDsknxWibzXZ47AZjb4+1ejd3PqmidC8niTvwWRHKTB2IYBcFHgTw95OQi
2izWSkRSBnqDtelSOJcvdaZcb4eKjYP00ASlNBheoQYWs1TOZEfKcFajb7l/r5F2
eHC0q66O1SImV7G650sYIQIDAQABo4IBTjCCAUowHQYDVR0OBBYEFDoSA9sPnihF
pjSNOKu6R4wqoOQuMIHSBgNVHSMEgcowgceAFDoSA9sPnihFpjSNOKu6R4wqoOQu
oYGrpIGoMIGlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8G
A1UEBxMIQmVya2VsZXkxFDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNN
VEExIjAgBgNVBAMTGUNsYXVzIEFzc21hbm4gQ0EgUlNBIDIwMDMxJjAkBgkqhkiG
9w0BCQEWF2NhK2NhLXJzYTIwMDNAZXNtdHAub3JnggEAMAwGA1UdEwQFMAMBAf8w
IgYDVR0RBBswGYEXY2ErY2EtcnNhMjAwM0Blc210cC5vcmcwIgYDVR0SBBswGYEX
Y2ErY2EtcnNhMjAwM0Blc210cC5vcmcwDQYJKoZIhvcNAQEEBQADggEBAJaDtlST
3zjQSKehyAjJD+mABeN+w2FRiHt6uySwaaMi5Jg42sjD61JwY+Jm8lnvVr6qfIdu
lIXUcbo19+7QblIdH+T9L+JwMV23ixPMcBAh+jQpj43YSscPsjbnHh5G0RGEgHy7
JMRjviokU3QMieBq9Ahjv1TTCtn8/mzeT5dhCKAQkuuvBuxQhsTMazEyYCV6CUf4
Qnqi1ZD6SL6/CuEDuFYkuRLpugkwR76ljqKSpNymp8YpOWVuZEobssMHKfXAfnjg
IpuY1IeRyuFmnS9w8Uylji5oUrO9lXZWQA5GR+Sz7Ko86IaWWu36yRCVUwQTcQGR
zs06UcYw6UhJZKM=
YXVzIEFzc21hbm4gQ0EgUlNBIDIwMDcxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz
YTIwMDdAZXNtdHAub3JnMB4XDTA3MDUwNDAyMDc1NloXDTEwMDUwMzAyMDc1Nlow
gaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMREwDwYDVQQHEwhC
ZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAKBgNVBAsTA01UQTEiMCAG
A1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwNzEmMCQGCSqGSIb3DQEJARYX
Y2ErY2EtcnNhMjAwN0Blc210cC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQCwKJExr4LOcu82q33psfV3ZjhLOB9fPRLTyP2a9NT2uJD5Jl8p90P5
NOxlYgG7ZPFd6nUEPZJlYKIGYvqIytggUMgeOFO1GN23vccINUzZ3MaXVje2ZTN0
WrLDhQgrtyZw/zgCGmdq0EkYEEv4268GnLGogqGxddJSm1MMyqfjFTh5baH173yL
/b0EePnoHrmS6nTXRR5MyL30XPwaf+cxxqvLeMdNL7VyEDUnShr6Uxn4p1lj6+kV
q9xxaYxCHJZOiYBmyZ4h1T0IGXSl9Qegrt55r/1Cwnl+jPg5IjvDxFg70A3mqRG2
os0u5RZm/X5lM5SwNoAn9YB2qeXf8s/vAgMBAAGjggFWMIIBUjAdBgNVHQ4EFgQU
sklrUkXukDbSeUcDM9mguoBQ2hwwgdoGA1UdIwSB0jCBz4AUsklrUkXukDbSeUcD
M9mguoBQ2hyhgaukgagwgaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9y
bmlhMREwDwYDVQQHEwhCZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAK
BgNVBAsTA01UQTEiMCAGA1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwNzEm
MCQGCSqGSIb3DQEJARYXY2ErY2EtcnNhMjAwN0Blc210cC5vcmeCCQD6fCyAKT/C
ZDAMBgNVHRMEBTADAQH/MCIGA1UdEQQbMBmBF2NhK2NhLXJzYTIwMDdAZXNtdHAu
b3JnMCIGA1UdEgQbMBmBF2NhK2NhLXJzYTIwMDdAZXNtdHAub3JnMA0GCSqGSIb3
DQEBBAUAA4IBAQCYmHzT0FtyRxXmImi7eA54ZulWFti8nVrcJyn7kS1qITUYVrRP
KgnACG+aWSsucpr7ULrHqZGg+Wy+z3hCQwJwU5e6auPaF+gfxzpb57zr5SRM9c9h
NB4g7Rdj74HTniX+zAUZzIqCyUw6tWtJUXZGAqpgu8S5YUgz2nmNRqMGIJjzsts7
rckdDpc9txQZ030Ei2qB4BFb4TWj/y8RhhwxhXr9PzbvmSVGLrDLQ0VK7L7TP6R3
m3nMzpJjpdnt26CdXXzXgPbJQfsClo7989oFnYGnJdomNTupDIz1p11I7IfHemBR
dvLemxQrVYpD35kZ8+vnA+anoqIo3dUHaj/3
-----END CERTIFICATE-----

View File

@ -12,13 +12,13 @@ sendmail/SECURITY for more installation information.
2. Create any necessary site configuration build files, as noted in
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).
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
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
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
/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
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
sendmail/ and running "sh Build install".
sendmail/ and running "sh ./Build install".
7. For each of the associated sendmail utilities (makemap, mailstats,
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
Build install".
you are ready to install it, back up your installed version and type
"sh ./Build install".
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,
in case you are now using a different (and thereby incompatible) version
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 $

View File

@ -1,11 +1,76 @@
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
of the sendmail configuration files, the date of release, and a
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
Even though a milter rejects a recipient the MTA will still keep
it in its list of recipients and deliver to it if the

View File

@ -16,8 +16,8 @@
#####
##### SENDMAIL CONFIGURATION FILE
#####
##### built by ca@nother.smi.sendmail.com on Tue Apr 3 16:32:55 PDT 2007
##### in /extra/home/ca/sm-8.14.1/OpenSource/sendmail-8.14.1/cf/cf
##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007
##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf
##### 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: 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
V10/Berkeley
@ -114,7 +114,7 @@ D{MTAHost}[127.0.0.1]
# Configuration version number
DZ8.14.1/Submit
DZ8.14.2/Submit
###############

View File

@ -1,6 +1,6 @@
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.
#
# By using this file, you agree to the terms and conditions set
@ -10,7 +10,7 @@ divert(-1)
#
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)
# Check first two arguments. If they aren't set, may need to warn in proto.m4

View File

@ -13,7 +13,7 @@ divert(-1)
#
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
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')
dnl use the generic routine (for now)
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.
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
@ -2984,9 +2984,9 @@ ifdef(`_ATMPF_', `dnl tempfail?
R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
dnl use the generic routine (for now)
R<0> $@ OK no limit
R<$+> $: <$1> $| $(arith l $@ $&{client_connections} $@ $1 $)
R<$+> $: <$1> $| $(arith l $@ $1 $@ $&{client_connections} $)
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

View File

@ -11,8 +11,8 @@ divert(-1)
# 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)
# Configuration version number
DZ8.14.1`'ifdef(`confCF_VERSION', `/confCF_VERSION')
DZ8.14.2`'ifdef(`confCF_VERSION', `/confCF_VERSION')

View File

@ -1,6 +1,6 @@
#!/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
# 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
# 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
@ -70,30 +70,21 @@ to take affect.
=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
MAILER-DAEMON gshapiro+bounce.$DOMAIN@gshapiro.net
postmaster gshapiro+$LHS.$DOMAIN@gshapiro.net
webmaster gshapiro+$LHS.$DOMAIN@gshapiro.net
MAILER-DAEMON gshapiro+bounce.$DOMAIN@example.net
postmaster gshapiro+$LHS.$DOMAIN@example.net
webmaster gshapiro+$LHS.$DOMAIN@example.net
# Defaults
error:nouser No such user
# Users
gshapiro gshapiro+$DOMAIN@gshapiro.net
bob robert@smtp.org
=head2 /etc/mail/virtusers/smtp.org:
# Defaults
gshapiro+$DOMAIN@gshapiro.net
# Users
john john@wookie.org
nancy n@milter.com
gshapiro gshapiro+$DOMAIN@example.net
zoe zoe@example.com
=head1 AUTHOR
@ -102,6 +93,7 @@ Gregory Neil Shapiro E<lt>F<gshapiro@gshapiro.net>E<gt>
=cut
use strict;
use File::stat;
use Getopt::Std;
my $makemap = "/usr/sbin/makemap";
@ -117,6 +109,18 @@ my $newest = 0;
my ($lhs, $domain, $key, $value);
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";
if ($opts->{t})
@ -131,9 +135,12 @@ closedir(VIRTS) || die "Could not close directory $virts: $!\n";
foreach $domain (@virts)
{
next if ($domain =~ m/^\./);
open(DOMAIN, "$virts/$domain") || die "Could not open file $virts/$domain: $!\n";
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)
{
$newest = $mtime;
@ -160,7 +167,7 @@ LINE: while (<DOMAIN>)
}
else
{
die "Bogus line $line in $virts/$domain\n";
warn "Bogus line $line in $virts/$domain\n";
}
# Variable subsitution
@ -172,7 +179,9 @@ LINE: while (<DOMAIN>)
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)
{
print STDOUT "Rebuilding $virt\n";
@ -191,14 +200,17 @@ if ($opts->{f} || $virtmtime < $newest)
print MAKEMAP "$key\t\t$virt{$key}\n";
}
close(MAKEMAP) || die "Could not close makemap ($?): $!\n";
preserve_perms($virt, $newvirt);
rename($newvirt, $virt) || die "Could not rename $newvirt to $virt: $!\n";
open(VIRTHOST, ">$newvirthosts") || die "Could not open file $newvirthosts: $!\n";
foreach $domain (sort @virts)
{
next if ($domain =~ m/^\./);
print VIRTHOST "$domain\n";
}
close(VIRTHOST) || die "Could not close $newvirthosts: $!\n";
preserve_perms($virthosts, $newvirthosts);
rename($newvirthosts, $virthosts) || die "Could not rename $newvirthosts to $virthosts: $!\n";
}
exit 0;

View File

@ -9,7 +9,7 @@
.\" 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
.\"
@ -90,7 +90,7 @@ Sendmail, Inc.
.de Ve
Version \\$2
..
.Ve $Revision: 8.739 $
.Ve $Revision: 8.741 $
.rm Ve
.sp
For Sendmail Version 8.14
@ -6939,6 +6939,10 @@ The
.b \-v
command line flag sets this to
.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
[no short name]
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>
.)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
.ta 9n
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
contain an explanatory message.
However, the explanatory message is not used any further by
.i sendmail .
Example replies:
.(b
31:OK resolved.address@example.com,
.)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
8:NOTFOUND,
.)b
@ -8960,7 +8971,7 @@ in case the key was not found, or:
55:TEMP this text explains that we had a temporary failure,
.)b
in case of a failure.
in case of a temporary map lookup failure.
The socket map uses the same syntax as milters
(see Section "X \*- Mail Filter (Milter) Definitions")
@ -11424,7 +11435,7 @@ replace it with a blank sheet for double-sided output.
.\".sz 10
.\"Eric Allman
.\".sp
.\"Version $Revision: 8.739 $
.\"Version $Revision: 8.741 $
.\".ce 0
.bp 3
.ce

View File

@ -22,7 +22,7 @@ SM_UNUSED(static char copyright[]) =
#endif /* ! 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 */
@ -46,7 +46,7 @@ uid_t RealUid;
gid_t RealGid;
char *RealUserName;
uid_t RunAsUid;
uid_t RunAsGid;
gid_t RunAsGid;
char *RunAsUserName;
int Verbose = 2;
bool DontInitGroups = false;

View File

@ -10,7 +10,7 @@
* 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)
# define HASUNSETENV 1 /* unsetenv() added in S10 */
# 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
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */
# endif /* ! HASGETUSERSHELL */

View File

@ -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.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: 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
@ -91,6 +91,10 @@ struct sm_ldap_struct
/* ldapmap_lookup options */
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 */
void *ldap_next;
};

View File

@ -36,8 +36,12 @@
#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:
* 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
* list and the other to the tail of the list. The elements are doubly

View File

@ -2,7 +2,7 @@
<HEAD><TITLE>xxfi_unknown</TITLE></HEAD>
<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>
@ -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 valign="top">
<TD>SMFIS_TEMPFAIL</TD>
<TD>Reject this message with a temporary error.
<TD>Reject this command with a temporary error.
</TD>
</TR>
<TR valign="top">
<TD>SMFIS_REJECT</TD>
<TD>Reject this message.
<TD>Reject this command.
</TD>
</TR>
</TABLE>

View File

@ -9,7 +9,7 @@
*/
#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"

View File

@ -9,7 +9,7 @@
*/
#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

View File

@ -9,7 +9,7 @@
*/
#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
#include "libmilter.h"

View File

@ -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"
#if _FFR_THREAD_MONITOR

View File

@ -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.
*
* By using this file, you agree to the terms and conditions set
@ -9,7 +9,7 @@
*/
#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 "libmilter.h"
@ -884,6 +884,6 @@ smfi_version(major, minor, patchlevel)
if (minor != NULL)
*minor = SM_LM_VRS_MINOR(SMFI_VERSION);
if (patchlevel != NULL)
*patchlevel = SM_LM_VRS_MINOR(SMFI_VERSION);
*patchlevel = SM_LM_VRS_PLVL(SMFI_VERSION);
return MI_SUCCESS;
}

View File

@ -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.
*
* By using this file, you agree to the terms and conditions set
@ -11,7 +11,7 @@
#define LDAP_DEPRECATED 1
#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
# include <sys/types.h>
@ -1103,26 +1103,25 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
if (save_errno != LDAP_SUCCESS)
{
statp = EX_TEMPFAIL;
if (ret != 0)
switch (save_errno)
{
switch (save_errno)
{
#ifdef LDAP_SERVER_DOWN
case LDAP_SERVER_DOWN:
case LDAP_SERVER_DOWN:
#endif /* LDAP_SERVER_DOWN */
case LDAP_TIMEOUT:
case LDAP_UNAVAILABLE:
case LDAP_TIMEOUT:
case ETIMEDOUT:
case LDAP_UNAVAILABLE:
/*
** server disappeared,
** try reopen on next search
*/
/*
** server disappeared,
** try reopen on next search
*/
statp = EX_RESTART;
break;
}
save_errno += E_LDAPBASE;
statp = EX_RESTART;
break;
}
if (ret != 0)
save_errno += E_LDAPBASE;
SM_LDAP_ERROR_CLEANUP();
errno = save_errno;
return statp;
@ -1272,6 +1271,7 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
case LDAP_SERVER_DOWN:
#endif /* LDAP_SERVER_DOWN */
case LDAP_TIMEOUT:
case ETIMEDOUT:
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_SIZELIMIT, &lmap->ldap_sizelimit);
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
ldap_set_option(ld, LDAP_OPT_RESTART, LDAP_OPT_ON);
# endif /* LDAP_OPT_RESTART */

View File

@ -9,7 +9,7 @@
*/
#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
/*
@ -506,7 +506,7 @@ sendmail_mpe_emuluid()
** emulated egid if present, else true egid.
*/
static uid_t sendmail_mpe_egid = -1;
static gid_t sendmail_mpe_egid = -1;
#undef getegid
gid_t

View File

@ -20,7 +20,7 @@ SM_IDSTR(copyright,
Copyright (c) 1992, 1993\n\
The Regents of the University of California. All rights reserved.\n")
SM_IDSTR(id, "@(#)$Id: makemap.c,v 8.177 2004/08/03 23:57:24 ca Exp $")
SM_IDSTR(id, "@(#)$Id: makemap.c,v 8.178 2007/05/11 18:45:39 ca Exp $")
#include <sys/types.h>
@ -42,7 +42,7 @@ uid_t RealUid;
gid_t RealGid;
char *RealUserName;
uid_t RunAsUid;
uid_t RunAsGid;
gid_t RunAsGid;
char *RunAsUserName;
int Verbose = 2;
bool DontInitGroups = false;

View File

@ -20,7 +20,7 @@ SM_IDSTR(copyright,
Copyright (c) 1988, 1993\n\
The Regents of the University of California. All rights reserved.\n")
SM_IDSTR(id, "@(#)$Id: praliases.c,v 8.93 2001/09/11 04:05:07 gshapiro Exp $")
SM_IDSTR(id, "@(#)$Id: praliases.c,v 8.94 2007/05/11 18:50:36 ca Exp $")
#include <sys/types.h>
#include <ctype.h>
@ -45,7 +45,7 @@ uid_t RealUid;
gid_t RealGid;
char *RealUserName;
uid_t RunAsUid;
uid_t RunAsGid;
gid_t RunAsGid;
char *RunAsUserName;
int Verbose = 2;
bool DontInitGroups = false;

View File

@ -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')
define(`confREQUIRE_LIBSM', `true')

View File

@ -13,7 +13,7 @@
#include <sendmail.h>
SM_RCSID("@(#)$Id: conf.c,v 8.1128 2007/04/03 21:32:29 ca Exp $")
SM_RCSID("@(#)$Id: conf.c,v 8.1136 2007/10/10 00:06:45 ca Exp $")
#include <sm/sendmail.h>
#include <sendmail/pathnames.h>
@ -5316,17 +5316,8 @@ sm_syslog(level, id, fmt, va_alist)
save_errno = errno;
if (id == NULL)
{
id = "NOQUEUE";
idlen = strlen(id) + SyslogPrefixLen;
}
else if (strcmp(id, NOQID) == 0)
{
id = "";
idlen = SyslogPrefixLen;
}
else
idlen = strlen(id) + SyslogPrefixLen;
idlen = strlen(id) + SyslogPrefixLen;
buf = buf0;
bufsize = sizeof(buf0);
@ -6024,6 +6015,10 @@ char *OsCompileOptions[] =
char *FFRCompileOptions[] =
{
#if _FFR_ADDR_TYPE_MODES
/* more info in {addr_type}, requires m4 changes! */
"_FFR_ADDR_TYPE_MODES",
#endif /* _FFR_ADDR_TYPE_MODES */
#if _FFR_ALLOW_SASLINFO
/* DefaultAuthInfo can be specified by user. */
/* DefaultAuthInfo doesn't really work in 8.13 anymore. */
@ -6094,6 +6089,10 @@ char *FFRCompileOptions[] =
"_FFR_DPO_CS",
#endif /* _FFR_DPO_CS */
#if _FFR_DPRINTF_MAP
/* dprintf map for logging */
"_FFR_DPRINTF_MAP",
#endif /* _FFR_DPRINTF_MAP */
#if _FFR_DROP_TRUSTUSER_WARNING
/*
** Don't issue this warning:
@ -6222,6 +6221,10 @@ char *FFRCompileOptions[] =
/* Old mime7to8 code, the new is broken for at least one example. */
"_FFR_MIME7TO8_OLD",
#endif /* _FFR_MAX_SLEEP_TIME */
#if _FFR_MORE_MACROS
/* allow more long macro names ("unprintable" characters). */
"_FFR_MORE_MACROS",
#endif /* _FFR_MORE_MACROS */
#if _FFR_MSG_ACCEPT
/* allow to override "Message accepted for delivery" */
"_FFR_MSG_ACCEPT",
@ -6235,6 +6238,10 @@ char *FFRCompileOptions[] =
/* Disable PIPELINING, delay client if used. */
"_FFR_NO_PIPE",
#endif /* _FFR_NO_PIPE */
#if _FFR_LDAP_NETWORK_TIMEOUT
/* set LDAP_OPT_NETWORK_TIMEOUT if available (-c) */
"_FFR_LDAP_NETWORK_TIMEOUT",
#endif /* _FFR_LDAP_NETWORK_TIMEOUT */
#if _FFR_LOG_NTRIES
/* log ntries=, from Nik Clayton of FreeBSD */
"_FFR_LOG_NTRIES",
@ -6280,6 +6287,18 @@ char *FFRCompileOptions[] =
/* Random shuffle for queue sorting. */
"_FFR_RHS",
#endif /* _FFR_RHS */
#if _FFR_RUNPQG
/*
** allow -qGqueue_group -qp to work, i.e.,
** restrict a persistent queue runner to a queue group.
*/
"_FFR_RUNPQG",
#endif /* _FFR_RUNPQG */
#if _FFR_SESSID
/* session id (for logging) */
"_FFR_SESSID",
#endif /* _FFR_SESSID */
#if _FFR_SHM_STATUS
/* Donated code (unused). */
"_FFR_SHM_STATUS",

View File

@ -14,7 +14,7 @@
#include <sendmail.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
# include <login_cap.h>
@ -495,7 +495,7 @@ sendall(e, mode)
time_t now;
if (tTd(13, 29))
sm_dprintf("No deliveries: auto-queuing\n");
sm_dprintf("No deliveries: auto-queueing\n");
mode = SM_QUEUE;
now = curtime();
@ -3293,6 +3293,8 @@ deliver(e, firstto)
ok = (*e->e_puthdr)(mci, e->e_header, e, M87F_OUTER);
if (ok)
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.
@ -3404,6 +3406,7 @@ deliver(e, firstto)
/* No recipients in list and no missing responses? */
if (tobuf[0] == '\0'
# if PIPELINING
&& bitset(MCIF_PIPELINED, mci->mci_flags)
&& mci->mci_nextaddr == NULL
# endif /* PIPELINING */
)

View File

@ -13,7 +13,7 @@
#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
@ -75,7 +75,7 @@ newenvelope(e, parent, rpool)
register ENVELOPE *parent;
SM_RPOOL_T *rpool;
{
int sendmode;
int sendmode, dm;
/*
** This code used to read:
@ -86,8 +86,16 @@ newenvelope(e, parent, rpool)
** This meant macvalue() could go into an infinite loop.
*/
dm = DM_NOTSET;
if (parent != NULL)
{
char *str;
sendmode = parent->e_sendmode;
str = macvalue(macid("{deliveryMode}"), parent);
if (str != NULL)
dm = (int) str[0];
}
else
sendmode = DM_NOTSET;
@ -105,9 +113,18 @@ newenvelope(e, parent, rpool)
e->e_parent = parent;
assign_queueid(e);
e->e_ctime = curtime();
#if _FFR_SESSID
e->e_sessid = e->e_id;
#endif /* _FFR_SESSID */
if (parent != NULL)
{
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)
{
e->e_quarmsg = NULL;
@ -128,6 +145,8 @@ newenvelope(e, parent, rpool)
(void) sm_io_flush(CurEnv->e_xfp, SM_TIME_DEFAULT);
if (sendmode != DM_NOTSET)
e->e_sendmode = sendmode;
if (dm != DM_NOTSET)
set_delivery_mode(dm, e);
return e;
}

View File

@ -14,7 +14,7 @@
#include <sendmail.h>
#include <sm/sendmail.h>
SM_RCSID("@(#)$Id: headers.c,v 8.310 2007/02/07 22:44:35 ca Exp $")
SM_RCSID("@(#)$Id: headers.c,v 8.312 2007/06/19 18:52:11 ca Exp $")
static HDR *allocheader __P((char *, char *, int, SM_RPOOL_T *, bool));
static size_t fix_mime_header __P((HDR *, ENVELOPE *));
@ -1865,7 +1865,8 @@ putheader(mci, hdr, e, flags)
if (bitset(H_FROM, h->h_flags))
oldstyle = false;
commaize(h, p, oldstyle, mci, e);
commaize(h, p, oldstyle, mci, e,
PXLF_HEADER | PXLF_STRIPMQUOTE);
}
else
{
@ -1977,6 +1978,7 @@ put_vanilla_header(h, v, mci)
** oldstyle -- true if this is an old style header.
** mci -- the connection information.
** e -- the envelope containing the message.
** putflags -- flags for putxline()
**
** Returns:
** true iff header field was written successfully
@ -1986,17 +1988,17 @@ put_vanilla_header(h, v, mci)
*/
bool
commaize(h, p, oldstyle, mci, e)
commaize(h, p, oldstyle, mci, e, putflags)
register HDR *h;
register char *p;
bool oldstyle;
register MCI *mci;
register ENVELOPE *e;
int putflags;
{
register char *obp;
int opos, omax, spaces;
bool firstone = true;
int putflags = PXLF_HEADER | PXLF_STRIPMQUOTE;
char **res;
char obuf[MAXLINE + 3];

View File

@ -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.
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
* Copyright (c) 1988, 1993
@ -13,7 +13,7 @@
#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>
#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) */
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. */
#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)",
mbuf, (int) (sizeof(mbuf) - 1));
}
else if (mbuf[1] == '\0')
else if (mbuf[1] == '\0' && mbuf[0] >= 0x20)
{
/* ${x} == $x */
mid = bitidx(mbuf[0]);
@ -627,7 +686,8 @@ macid_parse(p, ep)
else
{
MacroName[NextMacroId] = s->s_name;
s->s_macro = mid = NextMacroId++;
s->s_macro = mid = NextMacroId;
NextMacroId = NEXTMACROID(NextMacroId);
}
}
p++;

View File

@ -26,7 +26,7 @@ SM_UNUSED(static char copyright[]) =
The Regents of the University of California. All rights reserved.\n";
#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
@ -2362,7 +2362,33 @@ main(argc, argv, envp)
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

View File

@ -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.
* Copyright (c) 1992, 1995-1997 Eric P. Allman. All rights reserved.
* Copyright (c) 1992, 1993
@ -13,7 +13,7 @@
#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
# include <sm/ldap.h>
@ -3567,10 +3567,17 @@ ldapmap_lookup(map, name, av, statp)
if (VendorCode == VENDOR_SUN &&
strcmp(map->map_mname, "aliases.ldap") == 0)
{
char answer[MAXNAME + 1];
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));
#endif
if (rc != 0)
{
if (tTd(38, 20))
@ -3587,6 +3594,9 @@ ldapmap_lookup(map, name, av, statp)
result = map_rewrite(map, name, strlen(name), NULL);
else
result = map_rewrite(map, answer, strlen(answer), av);
#if defined(GETLDAPALIASBYNAME_VERSION) && (GETLDAPALIASBYNAME_VERSION >= 2)
free(answer);
#endif
return result;
}
#endif /* defined(SUN_EXTENSIONS) && defined(SUN_SIMPLIFIED_LDAP) && ... */
@ -3965,6 +3975,26 @@ ldapmap_parseargs(map, args)
break;
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':
map->map_mflags |= MF_INCLNULL;
map->map_mflags &= ~MF_TRY0NULL;
@ -3978,24 +4008,12 @@ ldapmap_parseargs(map, args)
map->map_mflags |= MF_OPTIONAL;
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':
map->map_mflags |= MF_KEEPQUOTES;
break;
case 'a':
map->map_app = ++p;
case 'S':
map->map_spacesub = *++p;
break;
case 'T':
@ -4006,14 +4024,6 @@ ldapmap_parseargs(map, args)
map->map_mflags |= MF_NODEFER;
break;
case 'S':
map->map_spacesub = *++p;
break;
case 'D':
map->map_mflags |= MF_DEFER;
break;
case 'z':
if (*++p != '\\')
map->map_coldelim = *p;
@ -4036,40 +4046,6 @@ ldapmap_parseargs(map, args)
break;
/* 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':
map->map_mflags |= MF_SINGLEMATCH;
break;
@ -4080,6 +4056,130 @@ ldapmap_parseargs(map, args)
break;
# 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 */
case 'R': /* don't auto chase referrals */
# ifdef LDAP_REFERRALS
@ -4089,10 +4189,6 @@ ldapmap_parseargs(map, args)
# endif /* LDAP_REFERRALS */
break;
case 'n': /* retrieve attribute names only */
lmap->ldap_attrsonly = LDAPMAP_TRUE;
break;
case 'r': /* alias dereferencing */
while (isascii(*++p) && isspace(*p))
continue;
@ -4163,114 +4259,33 @@ ldapmap_parseargs(map, args)
}
break;
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 '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;
case 'V':
if (*++p != '\\')
lmap->ldap_attrsep = *p;
else
{
/* bad config line */
if (!bitset(MCF_OPTFILE,
map->map_class->map_cflags))
switch (*++p)
{
char *ptr;
case 'n':
lmap->ldap_attrsep = '\n';
break;
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;
case 't':
lmap->ldap_attrsep = '\t';
break;
default:
lmap->ldap_attrsep = '\\';
}
}
break;
/*
** 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;
}
case 'v': /* attr to return */
while (isascii(*++p) && isspace(*p))
continue;
lmap->ldap_uri = p;
lmap->ldap_attr[0] = p;
lmap->ldap_attr[1] = NULL;
break;
# endif /* !USE_LDAP_INIT */
case 'w':
/* -w should be for passwd, -P should be for version */
@ -4297,8 +4312,10 @@ ldapmap_parseargs(map, args)
# endif /* LDAP_VERSION_MIN */
break;
case 'K':
lmap->ldap_multi_args = true;
case 'Z':
while (isascii(*++p) && isspace(*p))
continue;
lmap->ldap_sizelimit = atoi(p);
break;
default:

View File

@ -10,7 +10,7 @@
#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
# 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_send_macros __P((struct milter *, char **, int,
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 char *milter_headers __P((struct milter *, ENVELOPE *, char *));
static void milter_addheader __P((struct milter *, char *, ssize_t,
@ -1790,41 +1791,6 @@ milter_reset_df(e)
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
**
@ -2406,15 +2372,17 @@ milter_getsymlist(m, buf, rlen, offset)
** Parameters:
** m -- milter filter structure.
** e -- current envelope.
** milters -- milters structure.
**
** Returns:
** 0 on success, -1 otherwise
*/
static int
milter_negotiate(m, e)
milter_negotiate(m, e, milters)
struct milter *m;
ENVELOPE *e;
milters_T *milters;
{
char rcmd;
mi_int32 fvers, fflags, pflags;
@ -2583,6 +2551,12 @@ milter_negotiate(m, e)
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))
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);
@ -3784,6 +3758,7 @@ milter_replbody(response, rlen, newfilter, e)
** Parameters:
** e -- current envelope.
** state -- return state from response.
** milters -- milters structure.
**
** Returns:
** true iff at least one filter is active
@ -3791,15 +3766,17 @@ milter_replbody(response, rlen, newfilter, e)
/* ARGSUSED */
bool
milter_init(e, state)
milter_init(e, state, milters)
ENVELOPE *e;
char *state;
milters_T *milters;
{
int i;
if (tTd(64, 10))
sm_dprintf("milter_init\n");
memset(milters, '\0', sizeof(*milters));
*state = SMFIR_CONTINUE;
if (InputFilters[0] == NULL)
{
@ -3821,7 +3798,7 @@ milter_init(e, state)
}
if (m->mf_sock < 0 ||
milter_negotiate(m, e) < 0 ||
milter_negotiate(m, e, milters) < 0 ||
m->mf_state == SMFS_ERROR)
{
if (tTd(64, 5))

View File

@ -14,7 +14,7 @@
#include <sendmail.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.
@ -525,10 +525,14 @@ mime8to7(mci, header, e, boundaries, flags, level)
while (sm_io_fgets(e->e_dfp, SM_TIME_DEFAULT, buf, sizeof(buf))
!= NULL)
{
bt = mimeboundary(buf, boundaries);
if (bt != MBT_NOTSEP)
break;
if (!putline(buf, mci))
if (!bitset(MCIF_INLONGLINE, mci->mci_flags))
{
bt = mimeboundary(buf, boundaries);
if (bt != MBT_NOTSEP)
break;
}
if (!putxline(buf, strlen(buf), mci,
PXLF_MAPFROM|PXLF_NOADDEOL))
goto writeerr;
}
if (sm_io_eof(e->e_dfp))

View File

@ -13,7 +13,7 @@
#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 "map.h"
@ -217,7 +217,7 @@ parseaddr(addr, a, flags, delim, delimptr, e, isrcpt)
if (e->e_sendmode == SM_DEFER)
msg = "Deferring message until queue run";
if (tTd(20, 1))
sm_dprintf("parseaddr: queuing message\n");
sm_dprintf("parseaddr: queueing message\n");
message(msg);
if (e->e_message == NULL && e->e_sendmode != SM_DEFER)
e->e_message = sm_rpool_strdup_x(e->e_rpool, msg);

View File

@ -14,7 +14,7 @@
#include <sendmail.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>
@ -427,7 +427,7 @@ queueup(e, announce, msync)
break;
if (LogLevel > 0 && (i % 32) == 0)
sm_syslog(LOG_ALERT, e->e_id,
"queueup: cannot create %s, uid=%d: %s",
"queueup: cannot create %s, euid=%d: %s",
tf, (int) geteuid(),
sm_errstring(errno));
}
@ -845,8 +845,8 @@ queueup(e, announce, msync)
if (bitset(H_FROM, h->h_flags))
oldstyle = false;
commaize(h, h->h_value, oldstyle, &mcibuf, e);
commaize(h, h->h_value, oldstyle, &mcibuf, e,
PXLF_HEADER);
TrafficLogFile = savetrace;
}
@ -2147,6 +2147,14 @@ run_work_group(wgrp, flags)
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 */
if (maxrunners > njobs)
maxrunners = njobs;

View File

@ -14,7 +14,7 @@
#include <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
# include <arpa/inet.h>
@ -2245,6 +2245,10 @@ static struct optioninfo
# define O_EIGHT_BIT_ADDR_OK 0xdf
{ "EightBitAddrOK", O_EIGHT_BIT_ADDR_OK, OI_NONE },
#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 }
};
@ -3807,6 +3811,12 @@ setoption(opt, val, safe, sticky, e)
break;
#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:
if (tTd(37, 1))
{

View File

@ -13,7 +13,7 @@
#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 ADDRESS *self_reference __P((ADDRESS *));
@ -377,6 +377,12 @@ removefromlist(list, sendq, e)
{
(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");
for (p = bufp; *p != '\0'; )
{

View File

@ -9,9 +9,9 @@
.\" the sendmail distribution.
.\"
.\"
.\" $Id: sendmail.8,v 8.57 2003/12/01 17:02:41 ca Exp $
.\" $Id: sendmail.8,v 8.58 2007/08/02 05:42:33 ca Exp $
.\"
.TH SENDMAIL 8 "$Date: 2003/12/01 17:02:41 $"
.TH SENDMAIL 8 "$Date: 2007/08/02 05:42:33 $"
.SH NAME
sendmail
\- an electronic mail transport agent
@ -314,7 +314,7 @@ empty in the previous queue run.
Process saved messages in the queue once and do not fork(),
but run in the foreground.
.TP
\fB\-q\fRG name
\fB\-q\fRG\fIname\fR
Process jobs in queue group called
.I name
only.

View File

@ -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.
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
* Copyright (c) 1988, 1993
@ -52,7 +52,7 @@
#ifdef _DEFINE
# 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 /* _DEFINE */
@ -324,7 +324,8 @@ typedef struct address ADDRESS;
(s) == QS_RETRY)
#define QS_IS_ATTEMPTED(s) ((s) == QS_QUEUEUP || \
(s) == QS_RETRY || \
(s) == QS_SENT)
(s) == QS_SENT || \
(s) == QS_DISCARDED)
#define QS_IS_DEAD(s) ((s) >= QS_DONTSEND)
@ -728,6 +729,7 @@ MCI
#if _FFR_IGNORE_EXT_ON_HELO
# define MCIF_HELO 0x00800000 /* we used HELO: ignore extensions */
#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 */
/* states */
@ -824,7 +826,7 @@ extern struct hdrinfo HdrInfo[];
/* functions */
extern void addheader __P((char *, char *, int, ENVELOPE *, bool));
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 void eatheader __P((ENVELOPE *, bool, bool));
extern char *hvalue __P((char *, HDR *));
@ -894,6 +896,9 @@ struct envelope
char *e_bodytype; /* type of message body */
SM_FILE_T *e_dfp; /* data file */
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_qdir; /* index into queue directories */
int e_dfqgrp; /* data file queue group index */
@ -1725,6 +1730,17 @@ struct milter
#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 */
# define SMF_REJECT 'R' /* Reject connection on filter fail */
# 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
*/
#define NOQID "*~*"
/* use id or NOQID (to avoid NOQUEUE in logfile) */
#define E_ID(id) ((id) == NULL ? NOQID : (id))
#define NOQID ""
#define CURHOSTNAME (CurHostName == NULL ? "local" : CurHostName)
@ -2161,6 +2174,9 @@ extern unsigned char tTdvect[100]; /* trace vector */
** 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 CheckAliases; /* parse addresses during newaliases */
#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_setup __P((char *));
extern void milter_set_option __P((char *, char *, bool));
extern bool milter_can_delrcpts __P((void));
extern bool milter_init __P((ENVELOPE *, char *));
extern bool milter_init __P((ENVELOPE *, char *, milters_T *));
extern void milter_quit __P((ENVELOPE *));
extern void milter_abort __P((ENVELOPE *));
extern char *milter_connect __P((char *, SOCKADDR, ENVELOPE *, char *));

View File

@ -46,7 +46,7 @@
# if NAMED_BIND
# 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
{
@ -168,6 +168,7 @@ parse_dns_reply(data, len)
int len;
{
unsigned char *p;
ushort ans_cnt, ui;
int status;
size_t l;
char host[MAXHOSTNAMELEN];
@ -196,11 +197,15 @@ parse_dns_reply(data, len)
dns_free_data(r);
return NULL;
}
ans_cnt = ntohs((ushort) r->dns_r_h.ancount);
p += status;
GETSHORT(r->dns_r_q.dns_q_type, p);
GETSHORT(r->dns_r_q.dns_q_class, p);
rr = &r->dns_r_head;
while (p < data + len)
ui = 0;
while (p < data + len && ui < ans_cnt)
{
int type, class, ttl, size, txtlen;
@ -210,6 +215,7 @@ parse_dns_reply(data, len)
dns_free_data(r);
return NULL;
}
++ui;
p += status;
GETSHORT(type, p);
GETSHORT(class, p);

View File

@ -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.
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
* Copyright (c) 1988, 1993
@ -17,7 +17,7 @@
# include <libmilter/mfdef.h>
#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/fdset.h>
@ -349,14 +349,18 @@ static SM_DEBUG_T DebugLeakSmtp = SM_DEBUG_INITIALIZER("leak_smtp",
typedef struct
{
bool sm_gotmail; /* mail command received */
unsigned int sm_nrcpts; /* number of successful RCPT commands */
bool sm_discard;
bool sm_gotmail; /* mail command received */
unsigned int sm_nrcpts; /* number of successful RCPT commands */
bool sm_discard;
#if MILTER
bool sm_milterize;
bool sm_milterlist; /* any filters in the list? */
bool sm_milterize;
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 */
char *sm_quarmsg; /* carry quarantining across messages */
char *sm_quarmsg; /* carry quarantining across messages */
} SMTP_T;
static bool smtp_data __P((SMTP_T *, ENVELOPE *));
@ -907,7 +911,7 @@ smtp(nullserver, d_flags, e)
char state;
/* initialize mail filter connection */
smtp.sm_milterlist = milter_init(e, &state);
smtp.sm_milterlist = milter_init(e, &state, &smtp.sm_milters);
switch (state)
{
case SMFIR_REJECT:
@ -1285,7 +1289,7 @@ smtp(nullserver, d_flags, e)
{
authenticating = SASL_NOT_AUTH;
/* rfc 2254 4. */
/* RFC 2554 4. */
message("501 5.0.0 AUTH aborted");
RESET_SASLCONN;
continue;
@ -1304,7 +1308,7 @@ smtp(nullserver, d_flags, e)
{
authenticating = SASL_NOT_AUTH;
/* rfc 2254 4. */
/* RFC 2554 4. */
message("501 5.5.4 cannot decode AUTH parameter %s",
inp);
# if SASL >= 20000
@ -1658,7 +1662,21 @@ smtp(nullserver, d_flags, e)
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 */
# if SASL >= 20000
@ -2503,6 +2521,7 @@ smtp(nullserver, d_flags, e)
(void) memset(&addr_st, '\0', sizeof(addr_st));
a = NULL;
milter_rcpt_added = false;
smtp.sm_e_nrcpts_orig = e->e_nrcpts;
#endif
if (BadRcptThrottle > 0 &&
n_badrcpts >= BadRcptThrottle)
@ -2558,13 +2577,18 @@ smtp(nullserver, d_flags, e)
#if MILTER
/*
** Do not expand recipients at RCPT time (in the call
** to recipient()). If they are expanded, it
** is impossible for removefromlist() to figure
** out the expanded members of the original
** recipient and mark them as QS_DONTSEND.
** to recipient()) if a milter can delete or reject
** a RCPT. If they are expanded, it is impossible
** for removefromlist() to figure out the expanded
** 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_safe = false;
#endif /* MILTER */
@ -2799,6 +2823,8 @@ smtp(nullserver, d_flags, e)
{
(void) removefromlist(addr, &e->e_sendqueue, e);
milter_cmd_fail = false;
if (smtp.sm_e_nrcpts_orig < e->e_nrcpts)
e->e_nrcpts = smtp.sm_e_nrcpts_orig;
}
#endif /* MILTER */
}
@ -3557,8 +3583,19 @@ smtp_data(smtp, e)
if (aborting)
{
ADDRESS *q;
/* Log who the mail would have gone to */
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);
buffer_errors();
goto abortmessage;
@ -4026,8 +4063,7 @@ reset_mail_esmtp_args(e)
macdefine(&e->e_macro, A_PERM, macid("{dsn_envid}"), NULL);
/* "ret" */
e->e_flags &= EF_RET_PARAM;
e->e_flags &= EF_NO_BODY_RETN;
e->e_flags &= ~(EF_RET_PARAM|EF_NO_BODY_RETN);
macdefine(&e->e_macro, A_TEMP, macid("{dsn_ret}"), NULL);
#if SASL

View File

@ -13,7 +13,7 @@
#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>
@ -2703,8 +2703,9 @@ smtpdata(m, mci, e, ctladdr, xstart)
}
/* terminate the message */
if (sm_io_fprintf(mci->mci_out, SM_TIME_DEFAULT, ".%s", m->m_eol) ==
SM_IO_EOF)
if (sm_io_fprintf(mci->mci_out, SM_TIME_DEFAULT, "%s.%s",
bitset(MCIF_INLONGLINE, mci->mci_flags) ? m->m_eol : "",
m->m_eol) == SM_IO_EOF)
goto writeerr;
if (TrafficLogFile != NULL)
(void) sm_io_fprintf(TrafficLogFile, SM_TIME_DEFAULT,

View File

@ -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.
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
* Copyright (c) 1988, 1993
@ -13,7 +13,7 @@
#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 <sysexits.h>
@ -1154,7 +1154,8 @@ putxline(l, len, mci, pxflags)
/* output last part */
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, '.') ==
SM_IO_EOF)
@ -1169,7 +1170,8 @@ putxline(l, len, mci, pxflags)
else if (l[0] == 'F' && slop == 0 &&
bitset(PXLF_MAPFROM, pxflags) &&
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, '>') ==
SM_IO_EOF)
@ -1188,13 +1190,19 @@ putxline(l, len, mci, pxflags)
if (TrafficLogFile != NULL)
(void) sm_io_putc(TrafficLogFile, SM_TIME_DEFAULT,
'\n');
if ((!bitset(PXLF_NOADDEOL, pxflags) || !noeol) &&
sm_io_fputs(mci->mci_out, SM_TIME_DEFAULT,
mci->mci_mailer->m_eol) == SM_IO_EOF)
if ((!bitset(PXLF_NOADDEOL, pxflags) || !noeol))
{
dead = true;
break;
mci->mci_flags &= ~MCIF_INLONGLINE;
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 != ' ' && *l != '\t' && *l != '\0' &&
@ -2813,7 +2821,14 @@ count_open_connections(hostaddr)
if (hostaddr == NULL)
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++)
{
if (ProcListVec[i].proc_pid == NO_PID)

View File

@ -13,6 +13,6 @@
#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";

View File

@ -20,7 +20,7 @@ SM_IDSTR(copyright,
The Regents of the University of California. 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>
@ -46,7 +46,7 @@ uid_t RealUid;
gid_t RealGid;
char *RealUserName;
uid_t RunAsUid;
uid_t RunAsGid;
gid_t RunAsGid;
char *RunAsUserName;
int Verbose = 2;
bool DontInitGroups = false;