Import sendmail 8.11.5

This commit is contained in:
Gregory Neil Shapiro 2001-08-01 01:33:27 +00:00
parent 8774250cea
commit 13058a9161
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/sendmail/dist/; revision=80785
39 changed files with 1169 additions and 476 deletions

View File

@ -35,6 +35,13 @@ This list is not guaranteed to be complete.
restructuring of the code -- for example, almost no C library support
could be used to handle strings.
* Header checks are not called if header value is too long.
If the value of a header is longer than 1250 (MAXNAME + MAXATOM - 6)
characters or it contains a single word longer than 256 (MAXNAME)
characters then no header check is done even if one is configured for
the header.
* Duplicate error messages.
Sometimes identical, duplicate error messages can be generated. As
@ -193,10 +200,10 @@ This list is not guaranteed to be complete.
local mail delivery and NFS hard mounted home directories should be
avoided, as attempts to open the forward files could hang.
* Race condition for delivery to setuid files
* Race condition for delivery to set-user-id files
Sendmail will deliver to a fail if the file is owned by the DefaultUser
or has the setuid bit set. Unfortunately, some systems clear that bit
or has the set-user-id bit set. Unfortunately, some systems clear that bit
when a file is modified. Sendmail compensates by resetting the file mode
back to it's original settings. Unfortunately, there's still a
permission failure race as sendmail checks the permissions before locking
@ -211,4 +218,4 @@ This list is not guaranteed to be complete.
state. This option and it's use is deprecated and will be removed from a
future version of sendmail.
$Revision: 8.43.16.1 $, Last updated $Date: 2000/09/28 00:45:37 $
$Revision: 8.43.16.2 $, Last updated $Date: 2001/07/31 22:42:46 $

View File

@ -13,7 +13,7 @@ f16 Fingerprint16 = 18 A4 51 78 CA 72 D4 A7 ED 80 BA 8A C4 98 71 1D
uid Sendmail Security <sendmail-security@sendmail.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0 for non-commercial use
Version: PGPfreeware 5.0i for non-commercial use
mQCNAzdxaGsAAAEEALq7JPrdyXCm3DdJEKR9miP8/B9vrferOBoNimPFceDEqCpm
0RiJtnGhUJwt/HZZhiGDWPYTIa7VajfxiEzJ7LZH+/uXgQFVN27fPwoNKCI+7sr3
@ -22,43 +22,69 @@ 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
FrAdFBf1y33xWo58zRsg2u2h
=g1qL
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
=shxn
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
@ -76,56 +102,64 @@ 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
jJ6uIUj4EdMVJ1WwHbfG
=XS0J
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
IGYsL+zTOZY=
=Zfy5
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
@ -135,6 +169,7 @@ uid Sendmail Signing Key/2000 <sendmail@Sendmail.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
Comment: Processed by Mailcrypt 3.5.6, an Emacs/PGP interface
mQCNAzhVRnYAAAEEALjBKz/mDHemTNA+hNjGcruAJm6Blc9ZIGHPthQWkFt0ca70
w0U8TBbK/m03WdMvq+PaZAb8EG5uqXctZKwmWIIGB7nRBLLnj42er8XwUfAT8KNJ
@ -200,8 +235,16 @@ q/V9TA/LY7qmVspylvu0w64NdtiUqnTa5jS/9BZtFf3eyOezqSIEwRkQC6My/JQx
BKvXspdbJDnrJxD0D0B2eTWa3MQD7BK+WC1RRkTjvyqJAJUDBRA4Vt0jBn5e2L+1
ZWkBAekjA/47X/leujEhaUEjj9hMyDY6/8HbgxwNyUd+Sx6i9FK+vhAGq8s07dTt
y9brozqixmHCGYPyvvVkcsVpeQlEWoXc750hbj5a/Et1m3C1J6vGn979f0do144Z
iiVpzTCh1LZHH5rALd5tuaNcD5MbOYQeP0vDVcJm2GQzm+IdjGtzPw==
=RnIu
iiVpzTCh1LZHH5rALd5tuaNcD5MbOYQeP0vDVcJm2GQzm+IdjGtzP4kBFQMFEDlU
6+1RidpgCr+sGQEBeVYIAJ1YGxnhVIibC1ucCCAhZH3NlvGmQpmjEXvI9e0EVKfd
drli+DpArasN0a0xZTZl7Utm7Atql7/LG1JvlT+DpnfTrCqDlvjlqiYd+9050e0s
crUiDWZDYt1jaWTvH1Hd44WE8RUksWQH9iWW6SPiIFOVzA0cdRRHM5BJ2qU1/rRW
Wyi++CVTY0pZ3DylbuItNoKFqzaWQQY+oXkI3XS5csG+ea89/n8zNsW257oBNV96
PEztAwQh8fAklSe3n8XZdEKVaMvnM9zLGytbdRKgJd6NnXGvOIFaPCKiNklH5Yrt
0JeYPp4AlibRmXP0gOaBgf7Naf7GhCZ7i/15pIS0hXqJAEYEEBECAAYFAjjPmocA
CgkQ39aWMbRxfNV36gCdEiGBY4NgCp6wYZwYSlNLIQsP5EQAoJc/ZhH2oxVT4vaG
8pT7nBukEciC
=idc8
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
@ -210,7 +253,8 @@ f16 Fingerprint16 = 25 73 4C 8E 94 B1 E8 EA EA 9B A4 D6 00 51 C3 71
uid Sendmail Signing Key/1999 <sendmail@Sendmail.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3a
Version: PGPfreeware 5.0i for non-commercial use
Comment: Processed by Mailcrypt 3.5.6, an Emacs/PGP interface
mQCNAzaRMIoAAAEEAMWVJpGkwKWD6GFDUHtV6AUDzwSAXiWc6UinY7EpCLwFdYu9
Le06VwQt8H9Xtb/2jrXDV61Wu0IDJub6g7PZxWxU8WHVnMX4aBT5WOCBpwFRme3u
@ -244,8 +288,16 @@ giXndPbvmwPpOn4ONmCo/zZFWryNQKuqPn2EN4rPhngjRokAPwMFEDaRbhPU3njY
eCkb2BECLnMAn3t8IsH2yr+vd+1IWstXMCUwzBZnAKCtq5l+00/EYeH8PXhrhIIS
9EquTokAdQMFEDaRvApyyULY6lojeQEBQa8DALEmw8SIvCjwo55yu9p26czt/ohn
D1IdJPepf1H5X+QY99kUpsxb+Csnz5VSfNz7dSJxvhwsB0gJityk/YX8uOcEfvsK
NsABSN/fcLCnzlwO0SNGDPJc4KHTFXHfVy4SgA==
=f3oA
NsABSN/fcLCnzlwO0SNGDPJc4KHTFXHfVy4SgIkAlQMFEDao80LPc8jyYlQBCQEB
aHUD/jM/RGzNHL+xm+ON6yxnqNFgfQml0jlubR34F1ibmpXT6BWAcCCKjkFAS4Ks
k6oECzdEfAZN0DxkBE4x2IAaoSH2iZGX8G8mOsMGWU8s10J+kE8ws5HOJ0wPG0W0
LKgzK0KgY1GRAYoVK8XmNmDNS8v2lK+vlAY3SD21PYUXI/0FiQA/AwUQN31dlIMC
oaE+3wLqEQI7RQCgzWvVVtWCmnihUfS8Yq7YglCfJRIAoP5iibHCe5S7fEMJ0voB
RGWidN9niQBGBBARAgAGBQI3L4BOAAoJEHlwE/5CaaTy2V0An3tCNkR6qFVPULvo
2hxqeGhtY1L5AJ0W5u/dd+7S8upDzbfzh7hOQ5NoEYkARgQQEQIABgUCOBJuIQAK
CRA60G4NkWcuTo8QAJ4h1GhDmjgPjtaGG40sVH+5yTK5egCgppFkq4g5OItCgGr3
jrUhNvQ0uaY=
=2DHr
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
@ -254,7 +306,8 @@ f16 Fingerprint16 = F9 32 40 A1 3B 3A B6 DE B2 98 6A 70 AF 54 9D 26
uid Sendmail Signing Key/1998 <sendmail@Sendmail.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP for Personal Privacy 5.0
Version: PGPfreeware 5.0i for non-commercial use
Comment: Processed by Mailcrypt 3.5.6, an Emacs/PGP interface
mQCNAzUKkdIAAAEEAKvdxY+iy7eLqxP5StbpZuxYNPWLye98bXA8oKwrEm1vy7Xq
LBg3uNXjlMtwcNW/r+oFu5A++2R+1qC7w/0867C+52D2zkfGRH3hn9Lh6YaA5uIP
@ -315,8 +368,10 @@ q+MkyiHyjbgh1eN6gsCHUSHiROQdXMRRSxZm4FVsjznisjybCqzd93lBQQyKJ6XX
KWu9SjJq/b6yg83byTgHZRW6kwjmDal97kVyHtV1WZBGDJ+v9nCY2tSvqujtNQbJ
LWrHp447BSIXBBpMkF/J+cbl7yZLiUN8I1SnLYYttmKOtfD33eL41oKT2LK+j8sI
kCd4XbcGoMJ+DExDVhFeiwwXWzomvTP42Wv0b8DYI+xeuE+AyARxJ5AVbGUBl4sZ
qVuNMDZWhc0GLpT10RUeJ5HJVAGIWB2fLIsE
=ljft
qVuNMDZWhc0GLpT10RUeJ5HJVAGIWB2fLIsEiQBGBBARAgAGBQI2DrCPAAoJEJCq
pX+wMhajifoAn1CMdyWFZx4m+3TnyvV21l4/T+gqAJ9A3dSRTH18x89BzgwYZDJi
d+8ynw==
=Xern
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
@ -325,7 +380,8 @@ f16 Fingerprint16 = CA AE F2 94 3B 1D 41 3C 94 7B 72 5F AE 0B 6A 11
uid Sendmail Signing Key/1997 <sendmail@Sendmail.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP for Personal Privacy 5.0
Version: PGPfreeware 5.0i for non-commercial use
Comment: Processed by Mailcrypt 3.5.6, an Emacs/PGP interface
mQCNAzNwqnIAAAEEAL1KqbRgVm9kp9OHLkKGb1tbT8rwEIeeh8KKSKJyDFiV6lZG
wbEa8OC5vokXvjsJtJvvhMfrG5OYc1Q1sLzPXXBYzenzXFrPaXDO8F9DE8B5VTuy
@ -387,8 +443,13 @@ LEG2m+r6YZlLratpkK9rI/SeSpwz2AfmrC89PI+C9Pcysj+EH4hV8WyETjcNA0le
n2tSLsf98uStHSQOzboE0KgghjybiQCVAwUQM8wrnM7nzgldNyzFAQFfGAP8DWSO
R5ELTdPUugVgB26FStcadMS44is1JWwRT8NkRiewBP1cvVwS3c6zS75qdXNoAz3g
UklXw90/CeviKHNA1wHOupsMCxwPqy91Uo5SOT49vTOuHZ5HQxY17WfTgFXUUFx7
RQTB+ga9BpGedHq0Fm5kfvH4L4Fdn1vOpEmsakg=
=9d88
RQTB+ga9BpGedHq0Fm5kfvH4L4Fdn1vOpEmsakiJAD8DBRA08oifuBk5xWQLXTgR
AttnAKDIXIaePyzwWjwW8s7fMUY62USKoACgrLQCwxBdUW63UQFpK7RAiB/4GKSJ
AJUDBRAz+8+LZWCprDT5+dUBAY83A/wMdkJCRGhcPZnpO4N6prpXLS0jpgnzrrRN
zbDayIF38X5C4IcdntKzPJZBn4Ce7LzFoX1X3gmhPED5UW5QHJ7APW9gqDFrnzoY
tSPZ1GJtRB+gfkVxj3A9ADp6rk4hRhdi1TgkHLxYZHHCMrOKzThY1BLuhGBV89U4
u/GzJ59ptg==
=PE0m
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
@ -397,7 +458,8 @@ f16 Fingerprint16 = C0 28 E6 7B 13 5B 29 02 6F 7E 43 3A 48 4F 45 29
uid Eric P. Allman <eric@Sendmail.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP for Personal Privacy 5.0
Version: PGPfreeware 5.0i for non-commercial use
Comment: Processed by Mailcrypt 3.5.6, an Emacs/PGP interface
mQCNAy9MzZsAAAEEAK3o3N9W8Ynb47vNtIqUvdjYYl/nEt/hddhumsDNqt/icanP
7x9VTS1bCfKmAEQ86DSkWRWZmhIpExbcqmuRtixn/RfDHzJ4hU/wAd6kAzUTVIfY
@ -409,30 +471,78 @@ s+a2N87pPVKxh/brycLvr08to2TvRTbxbebPkF6UWOlurdPI1Ga4kgLZF0Ppwd6J
AJUDBRAyWFEdXuWsrmbLc90BAaE6BACqO5uGZQ1rLrFxOi9ljDghYmDRLFI0x1ls
NWh//FAGduRs3N+NemP715N/8vH4n+nY0u0xfPDMi5UklmD1l4EHJlHxNvrXNnQl
I7gLkkKxvCly/hjbKiMciDtpnUYGa8dgSy/nru6J8QSpOhXbs+UeMsY8xtPYTZqp
e5fNjWhVJrQjRXJpYyBQLiBBbGxtYW4gPGVyaWNAUmVmZXJlbmNlLkNPTT6JAJUD
BRAyHkUOgEp1EPeh9ysBAZxGBACWWXNNwG/3fWmGFhDi0eFVSQXbIPK9nOk6/kSM
5hKqESarPrLsVNapNu5s2BSac4qi6xrrV+4SCEcEkkfESbG/3nXx6ieuxswLim03
BTHvsceFjjPUN9X+Hny0LEbHbcwACHPq+yGgQ9kEYLmzMM6/9kaIy+56Iy/PbAyT
ARKGOrQgRXJpYyBQLiBBbGxtYW4gPGVyaWNAVXNlbml4Lk9SRz60IkVyaWMgUC4g
QWxsbWFuIDxlcmljQFNlbmRtYWlsLk9SRz6JAD8DBRA0qiAaXtpa2zmNWFARAkMb
AJ9sSKb6Aj1fwF8QyDH5rArzoWOXYgCgj0OcgAVTjMHV1BaAKDvq+dfASKG0JUVy
aWMgUC4gQWxsbWFuIDxlcmljQENTLkJlcmtlbGV5LkVEVT6JANUDBRAxPmCOSSSp
RrHt/oUBAVdpBf9fXDKX23m0mI35fy8GkH2n6p+2j+r5fTCsJr0ShtXA1E8BS3XR
Z9wPPbi925UoT0uBc8bAZhSwMMX19hVKyvo8tjmy3nRhhjfOZKTprjAGHDOQnfce
UY2URhmM2ELkKioY3jVYnoTSiL5tLXDUfii/frwEG7ZY31LW1YErCKMl4lqlZucK
XF7n7gijTPebGAYckU2XP1y0n5YZrNq4WQBv+6wgDD4wqtDiyCG1/O2jh7eJ1UDF
3FvDOEfdcgKoID2JAJUDBRAvbcy3g3t4fqRAn2UBAW2nBACXg7tSyMU+Jj9NBrjg
DLnYEoKWV0F++dWHqM0WisDOCwU+v51BUP/VJdqEwWc6CdUrbNbTHCVCG/3D0set
DuvmkxBKpBsljN7gxDTfUEMciCrdtlEh/jJ5YZ1ofSujxIHjYZ6OJg/4x9AgdJ5O
EsDUvK2fEI3+dFGRYrw2XUOqeokAVQMFEC9SbfUeUtMXXNLGGQEBz58B/AuGcYU/
mNixrR5QYndJVmarw/0ewfRJMXzYXCn+9TFYy8gul9K6Mu3/zv3Z2BzB92sdsbVC
rXlcazNrR/gedMGJAJUDBRAvUm2lI+Ri1L97pCEBAdDhA/9YP8KoUDp/YmSekMBU
4myhSpFsCW5Fs6I07Cwn84Q/hkZ9myG+rGxUltBry2Z7CMcwQABa9D254FjV/BR6
eVIgADSBIR2U3DSrEgSP0qGdT5yFCrbP5HOge59/b/0CknBlDvBLLD3HW+OrwOaQ
cF/4gBUnbMJ01gZEY36IFgXsvokAdQMFEC/gXgxqmwnIWCbPjQEBQwIDAJRi8+tW
be7gQpW5ZSriDbss6J3/dd/WDspD4WnwnoiNMFKzVDVRbZGAMjsSqsLCJSywdIus
P7eLs0kayCx0ov7UcF/O6N0MYw/jy6NkFtiSND6TqtJ7Pc2SZcjetbpIkA==
=StEG
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
v7YI5Xji
=GYWC
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
@ -442,7 +552,8 @@ uid Gregory Neil Shapiro <gshapiro@sendmail.org>
uid Gregory Neil Shapiro <gshapiro@sendmail.com>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP for Personal Privacy 5.0
Version: PGPfreeware 5.0i for non-commercial use
Comment: Processed by Mailcrypt 3.5.6, an Emacs/PGP interface
mQCNAzUB04kAAAEEANHOOWZH9BdsPi8071kHB49qWAWL7OjoUk2NpItw5D9o/sRa
jZbBwtvPSjx+/cC1Nka+apIuXGccjBzpu71DJFLxIYEk+MW33bSgymI19utPS1b7
@ -451,85 +562,272 @@ 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
=idnw
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
=ftIJ
-----END PGP PUBLIC KEY BLOCK-----
$Revision: 8.5.16.3 $, Last updated $Date: 2000/12/19 22:33:12 $
Type Bits KeyID Created Expires Algorithm Use
pub 1024 0x22327A01 1999-05-30 ---------- RSA Sign & Encrypt
f16 Fingerprint16 = 03 3D 49 6D E4 D9 D6 01 F8 9D B0 3A 3D 68 6A 86
uid Claus Assmann (PGP2) <ca+pgp2@Sendmail.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (OpenBSD)
Comment: For info see http://www.gnupg.org
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
=dbDm
-----END PGP PUBLIC KEY BLOCK-----
$Revision: 8.5.16.4 $, Last updated $Date: 2001/07/31 22:36:18 $

View File

@ -18,7 +18,9 @@ the latest updates.
1. Read this README file, especially this introduction, and the DIRECTORY
PERMISSIONS sections.
2. Read sendmail/README, especially:
2. Read the INSTALL file in this directory.
3. Read sendmail/README, especially:
a. the introduction
b. the BUILDING SENDMAIL section
c. the relevant part(s) of the OPERATING SYSTEM AND COMPILE QUIRKS section
@ -27,8 +29,10 @@ the latest updates.
d. devtools/README
e. devtools/Site/README
f. mail.local/README
g. smrsh/README
3. Read cf/README.
4. Read cf/README.
Sendmail is a trademark of Sendmail, Inc.
@ -107,7 +111,10 @@ each directory in the file's path.
There are other files you should read. Rooted in this directory are:
FAQ
Answers to Frequently Asked Questions.
The FAQ (frequently answered questions) is no longer maintained
with the sendmail release. It is available at
http://www.sendmail.org/faq/ . The file FAQ is a reminder of
this and a pointer to the web page.
INSTALL
Installation instructions for building and installing sendmail.
KNOWNBUGS
@ -385,4 +392,4 @@ sendmail Source for the sendmail program itself.
test Some test scripts (currently only for compilation aids).
vacation Source for the vacation program. NOT PART OF SENDMAIL!
$Revision: 8.71.4.6 $, Last updated $Date: 2000/06/29 04:18:43 $
$Revision: 8.71.4.8 $, Last updated $Date: 2001/07/31 22:42:46 $

View File

@ -1,11 +1,53 @@
SENDMAIL RELEASE NOTES
$Id: RELEASE_NOTES,v 8.561.2.5.2.235 2001/05/27 21:39:16 gshapiro Exp $
$Id: RELEASE_NOTES,v 8.561.2.5.2.254 2001/07/31 22:42:46 gshapiro 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.11.5/8.11.5 2001/07/31
Fix a possible race condition when sending a HUP signal to restart
the daemon. This could terminate the current process without
starting a new daemon. Problem reported by Wolfgang Breyha
of SE Netway Communications.
Only apply MaxHeadersLength when receiving a message via SMTP or
the command line. Problem noted by Andrey J. Melnikoff.
When finding the system's local hostname on an IPv6-enabled system
which doesn't have any IPv6 interface addresses, fall back
to looking up only IPv4 addresses. Problem noted by Tim
Bosserman of EarthLink.
When commands were being rejected due to check_relay or TCP
Wrappers, the ETRN command was not giving a response.
Incoming IPv4 connections on a Family=inet6 daemon (using
IPv4-mapped addresses) were incorrectly labeled as "may be
forged". Problem noted by Per Steinar Iversen of Oslo
University College.
Shutdown address test mode cleanly on SIGTERM. Problem noted by
Greg King of the OAO Corporation.
Restore the original real uid (changed in main() to prevent
out of band signals) before invoking a delivery agent.
Some delivery agents use this for the "From " envelope
"header". Problem noted by Leslie Carroll of the
University at Albany.
Mark closed file descriptors properly to avoid reuse. Problem
noted by Jeff Bronson of J.D. Bronson, Inc.
Setting Timeout options on the command line will also override
their sub-suboptions in the .cf file, e.g., -O
Timeout.queuereturn=2d will set all queuereturn timeouts
to 2 days. Problem noted by Roger B.A. Klorese.
Portability:
BSD/OS has a broken setreuid() implementation. Problem
noted by Vernon Schryver of Rhyolite Software.
BSD/OS has /dev/urandom(4) (as of version 4.1/199910 ?).
Noted by Vernon Schryver of Rhyolite Software.
BSD/OS has fchown(2). Noted by Dave Yadallee of Netline
2000 Internet Solutions Inc.
Solaris 2.X and later have strerror(3). From Sebastian
Hagedorn of Cologne University.
CONFIG: Fix parsing for IPv6 domain literals in addresses
(user@[IPv6:address]). Problem noted by Liyuan Zhou.
8.11.4/8.11.4 2001/05/28
Clean up signal handling routines to reduce the chances of heap
corruption and other potential race conditions.
@ -730,18 +772,18 @@ summary of the changes in that release.
8.10.0/8.10.0 2000/03/01
*************************************************************
* The engineering department at Sendmail, Inc. has suffered *
* the tragic loss of a key member of our engineering team. *
* Julie Van Bourg was the Vice President of Engineering *
* at Sendmail, Inc. during the development and deployment *
* of this release. It was her vision, dedication, and *
* support that has made this release a success. Julie died *
* on October 26, 1999 of cancer. We have lost a leader, a *
* coach, and a friend. *
* *
* This release is dedicated to her memory and to the joy, *
* strength, ideals, and hope that she brought to all of us. *
* Julie, we miss you! *
* The engineering department at Sendmail, Inc. has suffered *
* the tragic loss of a key member of our engineering team. *
* Julie Van Bourg was the Vice President of Engineering *
* at Sendmail, Inc. during the development and deployment *
* of this release. It was her vision, dedication, and *
* support that has made this release a success. Julie died *
* on October 26, 1999 of cancer. We have lost a leader, a *
* coach, and a friend. *
* *
* This release is dedicated to her memory and to the joy, *
* strength, ideals, and hope that she brought to all of us. *
* Julie, we miss you! *
*************************************************************
SECURITY: The safe file checks now back track through symbolic
links to make sure the files can't be compromised due
@ -1586,7 +1628,7 @@ summary of the changes in that release.
CONFIG: OSTYPE(`bsdi1.0') and OSTYPE(`bsdi2.0') have been
deprecated and may be removed from a future release.
BSD/OS users should begin using OSTYPE(`bsdi').
CONFIG: OpenBSD 2.4 installs mail.local non-setuid root. This
CONFIG: OpenBSD 2.4 installs mail.local non-set-user-id root. This
requires a new OSTYPE(`openbsd'). From Todd C. Miller of
Courtesan Consulting.
CONFIG: New OSTYPE(`hpux11') for HP/UX 11.X.
@ -1846,7 +1888,7 @@ summary of the changes in that release.
the others (if it exists).
DEVTOOLS: Change order of LIBS: first product specific libraries
then the default ones.
MAIL.LOCAL: Will not be installed setuid root. To use mail.local
MAIL.LOCAL: Will not be installed set-user-id root. To use mail.local
as local delivery agent without LMTP mode, use
MODIFY_MAILER_FLAGS(`LOCAL', `+S')
to set the S flag.
@ -2401,7 +2443,7 @@ summary of the changes in that release.
uid and gid for user bin instead of daemon. If DefaultUser
is set in the configuration file, that value overrides this
default.
SECURITY: Since 8.8.7, the check for non-setuid binaries
SECURITY: Since 8.8.7, the check for non-set-user-id binaries
interfered with setting an alternate group id for the
RunAsUser option. Problem noted by Randall Winchester of
the University of Maryland.
@ -3069,7 +3111,7 @@ summary of the changes in that release.
In some cases, errors during an SMTP session could leave files
open or locked.
Better handling of missing file descriptors (0, 1, 2) on startup.
Better handling of non-setuid binaries -- avoids certain obnoxious
Better handling of non-set-user-id binaries -- avoids certain obnoxious
errors during testing.
Errors in file locking of NEWDB maps had the incorrect file name
printed in the error message.
@ -3461,7 +3503,7 @@ summary of the changes in that release.
change to the sendmail map code was made in 8.8.3. Problem
noted by Gregory Neil Shapiro.
MAKEMAP: Give warnings on file problems such as map files that are
symbolic links; although makemap is not setuid root, it is
symbolic links; although makemap is not set-user-id root, it is
often run as root and hence has the potential for the same
sorts of problems as alias rebuilds.
MAKEMAP: Change compilation so that it will link properly on
@ -4247,9 +4289,9 @@ summary of the changes in that release.
Fix problem finding network interface addresses. Patch from
Motonori Nakamura.
Don't reject qf entries that are not owned by your effective uid if
you are not running setuid; this makes management of certain
kinds of firewall setups difficult. Patch suggested by
Eamonn Coleman of Qualcomm.
you are not running set-user-id; this makes management of
certain kinds of firewall setups difficult. Patch
suggested by Eamonn Coleman of Qualcomm.
Add persistent host status. This keeps the information normally
maintained within a single queue run in disk files that are
shared between sendmail instances. The HostStatusDirectory
@ -4617,7 +4659,7 @@ summary of the changes in that release.
failure in the hosts.files map. This error caused hard
bounces when it should have requeued.
Aliases to files such as /users/bar/foo/inbox, with /users/bar/foo
owned by bar mode 700 and inbox being setuid bar stopped
owned by bar mode 700 and inbox being set-user-id bar stopped
working properly due to excessive paranoia. Pointed out by
John Hawkinson of Panix.
An SMTP RCPT command referencing a host that gave a nameserver
@ -5291,7 +5333,7 @@ summary of the changes in that release.
the aliases file: use the default uid/gid instead of the
real uid/gid. This allows you to create a file owned by
and writable only by the default uid/gid that will work
all the time (without having the setuid bit set). Change
all the time (without having the set-user-id bit set). Change
suggested by Shau-Ping Lo and Andrew Cheng of Sun
Microsystems.
Add "DialDelay" option (no short name) to provide an "extra"

View File

@ -221,6 +221,11 @@ to create the pathnames. The default value of this variable is
`/etc/mail/'. If you set this macro to a different value, you MUST include
a trailing slash.
Notice: all filenames used in a .mc (or .cf) file should be absolute
(starting at the root, i.e., with '/'). Relative filenames most
likely cause surprises during operations (unless otherwise noted).
+--------+
| OSTYPE |
+--------+
@ -1087,9 +1092,9 @@ delay_checks The rulesets check_mail and check_relay will not be called
rbl This feature is deprecated! Please use dnsbl instead.
Turns on rejection of hosts found in the Realtime Blackhole
List. If an argument is provided it is used as the domain
in which blocked hosts are listed; otherwise, the main
RBL domain rbl.maps.vix.com is used. For details, see
http://maps.vix.com/rbl/.
in which blocked hosts are listed; otherwise, the main RBL
domain rbl.maps.vix.com is used (see NOTE below). For
details, see http://maps.vix.com/rbl/.
dnsbl Turns on rejection of hosts found in an DNS based rejection
list. If an argument is provided it is used as the domain
@ -1102,6 +1107,13 @@ dnsbl Turns on rejection of hosts found in an DNS based rejection
feature can be included several times to query different DNS
based rejection lists.
NOTE: The default DNS blacklist, blackholes.mail-abuse.org,
is a service offered by the Mail Abuse Prevention System
(MAPS). As of July 31, 2001, MAPS is a subscription
service, so using that network address won't work if you
haven't subscribed. Contact MAPS to subscribe
(http://mail-abuse.org/).
loose_relay_check
Normally, if % addressing is used for a recipient, e.g.
user%site@othersite, and othersite is in class {R}, the
@ -1819,9 +1831,17 @@ spammers. To use this database, use
FEATURE(`dnsbl')
This will cause sendmail to reject mail from any site in the
Realtime Blackhole List database. You can specify an alternative
RBL domain to check by specifying an argument to the FEATURE.
The default error message is
Realtime Blackhole List database. This default DNS blacklist,
blackholes.mail-abuse.org, is a service offered by the Mail Abuse
Prevention System (MAPS). As of July 31, 2001, MAPS is a subscription
service, so using that network address won't work if you haven't
subscribed. Contact MAPS to subscribe (http://mail-abuse.org/).
You can specify an alternative RBL server to check by specifying an
argument to the FEATURE. The default error message is
You can specify an alternative RBL domain to check by specifying an
argument to the FEATURE. The default error message is
Mail from $&{client_addr} refused by blackhole site DOMAIN
@ -2013,6 +2033,21 @@ probably not be used in production.
In this text, cert will be used as an abreviation for X.509 certificate,
DN is the distinguished name of a cert, and CA is a certification authority.
For STARTTLS to be offered by sendmail you need to set at least
this variables (the file names and paths are just examples):
define(`confCACERT_PATH', `/etc/mail/certs/')
define(`confCACERT', `/etc/mail/certs/CA.cert.pem')
define(`confSERVER_CERT', `/etc/mail/certs/my.cert.pem')
define(`confSERVER_KEY', `/etc/mail/certs/my.key.pem')
On systems which do not have the compile flag HASURANDOM set (see
sendmail/README) you also must set confRAND_FILE.
See doc/op/op.{me,ps} for more information about these options,
esp. the sections ``Certificates for STARTTLS'' and ``PRNG for
STARTTLS''.
Macros related to STARTTLS are:
${cert_issuer} holds the DN of the CA (the cert issuer).
@ -3278,4 +3313,4 @@ M4 DIVERSIONS
8 DNS based blacklists
9 special local rulesets (1 and 2)
$Revision: 8.383.2.1.2.43 $, Last updated $Date: 2001/05/24 16:41:53 $
$Revision: 8.383.2.1.2.47 $, Last updated $Date: 2001/07/13 22:31:49 $

View File

@ -1,6 +1,6 @@
divert(-1)
#
# Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@ -13,14 +13,14 @@ divert(-1)
#
#
# This is a generic configuration file for HP-UX 9.x.
# This is a generic configuration file for HP-UX 10.x.
# It has support for local and SMTP mail only. If you want to
# customize it, copy it to a name appropriate for your environment
# and do the modifications there.
#
divert(0)dnl
VERSIONID(`$Id: generic-hpux10.mc,v 8.11 1999/02/07 07:26:02 gshapiro Exp $')
VERSIONID(`$Id: generic-hpux10.mc,v 8.11.22.2 2001/05/29 17:30:18 ca Exp $')
OSTYPE(hpux10)dnl
DOMAIN(generic)dnl
MAILER(local)dnl

View File

@ -13,7 +13,7 @@ divert(-1)
#
divert(0)
VERSIONID(`$Id: proto.m4,v 8.446.2.5.2.41 2001/05/23 21:32:16 ca Exp $')
VERSIONID(`$Id: proto.m4,v 8.446.2.5.2.44 2001/07/31 22:25:49 gshapiro Exp $')
MAILER(local)dnl
@ -161,8 +161,10 @@ ifdef(`_ACCEPT_UNRESOLVABLE_DOMAINS_',`dnl',`dnl
# Resolve map (to check if a host exists in check_mail)
Kresolve host -a<OK> -T<TEMP>')
ifdef(`_FFR_5_', `# macro storage map
Kmacro macro')
ifdef(`_NEED_MACRO_MAP_', `dnl
ifdef(`_MACRO_MAP_', `', `# macro storage map
define(`_MACRO_MAP_', `1')dnl
Kmacro macro')', `dnl')
ifdef(`confCR_FILE', `dnl
# Hosts for which relaying is permitted ($=R)
@ -631,7 +633,7 @@ R$* < $* > $* <@> $: $1 < $2 > $3 unmark <addr>
R@ $* <@> $: @ $1 unmark @host:...
R$* :: $* <@> $: $1 :: $2 unmark node::addr
R:`include': $* <@> $: :`include': $1 unmark :`include':...
R$* [ IPv6 $- ] <@> $: $1 [ IPv6 $2 ] unmark IPv6 addr
R$* [ IPv6 : $+ ] <@> $: $1 [ IPv6 : $2 ] unmark IPv6 addr
R$* : $* [ $* ] $: $1 : $2 [ $3 ] <@> remark if leading colon
R$* : $* <@> $: $2 strip colon if marked
R$* <@> $: $1 unmark
@ -707,9 +709,9 @@ ifdef(`_NO_UUCP_', `dnl',
`R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2 .UUCP domain')
# check for IPv6 domain literal (save quoted form)
R$* < @ [ IPv6 $- ] > $* $: $2 $| $1 < @@ [ $(dequote $2 $) ] > $3 mark IPv6 addr
R$- $| $* < @@ $=w > $* $: $2 < @ $j . > $4 self-literal
R$- $| $* < @@ [ $+ ] > $* $@ $2 < @ [ IPv6 $1 ] > $4 canon IP addr
R$* < @ [ IPv6 : $+ ] > $* $: $2 $| $1 < @@ [ $(dequote $2 $) ] > $3 mark IPv6 addr
R$+ $| $* < @@ $=w > $* $: $2 < @ $j . > $4 self-literal
R$+ $| $* < @@ [ $+ ] > $* $@ $2 < @ [ IPv6 : $1 ] > $4 canon IP addr
# check for IPv4 domain literal
R$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark [a.b.c.d]
@ -907,8 +909,8 @@ ifdef(`_MAILER_smtp_',
dnl there is no check whether this is really an IP number
R$* < @ [ $+ ] > $* $: $>ParseLocal $1 < @ [ $2 ] > $3 numeric internet spec
R$* < @ [ $+ ] > $* $1 < @ [ $2 ] : $S > $3 Add smart host to path
R$* < @ [ IPv6 $- ] : > $*
$#_SMTP_ $@ [ $(dequote $2 $) ] $: $1 < @ [IPv6 $2 ] > $3 no smarthost: send
R$* < @ [ IPv6 : $+ ] : > $*
$#_SMTP_ $@ [ $(dequote $2 $) ] $: $1 < @ [IPv6 : $2 ] > $3 no smarthost: send
R$* < @ [ $+ ] : > $* $#_SMTP_ $@ [$2] $: $1 < @ [$2] > $3 no smarthost: send
R$* < @ [ $+ ] : $- : $*> $* $#$3 $@ $4 $: $1 < @ [$2] > $5 smarthost with mailer
R$* < @ [ $+ ] : $+ > $* $#_SMTP_ $@ $3 $: $1 < @ [$2] > $4 smarthost without mailer',
@ -936,6 +938,8 @@ R<@> $+ $: $1
R<!> $+ $: $1
R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4
R< error : $- $+ > $* $#error $@ $(dequote $1 $) $: $2
dnl this is not a documented option
dnl it performs no looping at all for virtusertable
ifdef(`_NO_VIRTUSER_RECURSION_',
`R< $+ > $+ < @ $+ > $: $>ParseLocal $>Parse0 $>canonify $1',
`R< $+ > $+ < @ $+ > $: $>Recurse $1')
@ -1104,7 +1108,7 @@ dnl <error:text> -> error
dnl <mailer:user@host> lp<@domain>rest -> mailer host user
dnl <mailer:host> address -> mailer host address
dnl <localdomain> address -> address
dnl <[IPv6 number]> address -> relay number address
dnl <[IPv6:number]> address -> relay number address
dnl <host> address -> relay host address
###################################################################
@ -1116,7 +1120,7 @@ R< local : $* > $* $>CanonLocal < $1 > $2
R< $- : $+ @ $+ > $*<$*>$* $# $1 $@ $3 $: $2<@$3> use literal user
R< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified mailer
R< $=w > $* $@ $2 delete local host
R< [ IPv6 $+ ] > $* $#_RELAY_ $@ $(dequote $1 $) $: $2 use unqualified mailer
R< [ IPv6 : $+ ] > $* $#_RELAY_ $@ $(dequote $1 $) $: $2 use unqualified mailer
R< $+ > $* $#_RELAY_ $@ $1 $: $2 use unqualified mailer
###################################################################
@ -1280,7 +1284,7 @@ dnl <result> <passthru>
SLookUpDomain
dnl remove IPv6 mark and dequote address
dnl it is a bit ugly because it is checked on each "iteration"
R<[IPv6 $-]> <$+> <$*> <$*> $: <[$(dequote $1 $)]> <$2> <$3> <$4>
R<[IPv6 : $+]> <$+> <$*> <$*> $: <[$(dequote $1 $)]> <$2> <$3> <$4>
dnl workspace <key> <default> <passthru> <mark>
dnl lookup with tag (in front, no delimiter here)
R<$*> <$+> <$*> <$- $-> $: < $(access $5`'_TAG_DELIM_`'$1 $: ? $) > <$1> <$2> <$3> <$4 $5>

View File

@ -11,8 +11,8 @@ divert(-1)
# the sendmail distribution.
#
#
VERSIONID(`$Id: version.m4,v 8.39.4.29 2001/05/27 21:39:20 gshapiro Exp $')
VERSIONID(`$Id: version.m4,v 8.39.4.33 2001/07/31 22:34:17 gshapiro Exp $')
#
divert(0)
# Configuration version number
DZ8.11.4`'ifdef(`confCF_VERSION', `/confCF_VERSION')
DZ8.11.5`'ifdef(`confCF_VERSION', `/confCF_VERSION')

View File

@ -1,4 +1,4 @@
# $Id: Makefile,v 8.7.8.1 2001/01/04 18:55:46 gshapiro Exp $
# $Id: Makefile,v 8.7.8.4 2001/07/01 18:34:56 gshapiro Exp $
DIR= smm/08.sendmailop
SRCS= op.me
@ -7,11 +7,13 @@ MACROS= -me
ROFF_CMD= groff
PIC_CMD= pic
EQN_CMD= eqn
UL_CMD= ul
PIC= ${PIC_CMD} -C
EQNASCII= ${EQN_CMD} -C -Tascii
EQNPS= ${EQN_CMD} -C -Tps
ROFFASCII= ${ROFF_CMD} -Tascii ${MACROS}
ROFFPS= ${ROFF_CMD} -Tps -mps ${MACROS}
ULASCII= ${UL_CMD} -t dumb
all: ${OBJS}
@ -21,7 +23,7 @@ op.ps: ${SRCS}
op.txt: ${SRCS}
rm -f $@
${PIC} ${SRCS} | ${EQNASCII} | ${ROFFASCII} > $@
${PIC} ${SRCS} | ${EQNASCII} | ${ROFFASCII} | ${ULASCII} > $@
clean:
rm -f op.ps op.txt

View File

@ -9,9 +9,43 @@
.\" the sendmail distribution.
.\"
.\"
.\" $Id: op.me,v 8.317.4.64 2001/05/24 16:45:49 ca Exp $
.\" $Id: op.me,v 8.317.4.70 2001/07/24 04:08:25 ca Exp $
.\"
.\" eqn op.me | pic | troff -me
.\"
.\" Define \(sc if not defined (for text output)
.\"
.if !c \(sc .char \(sc S
.\"
.\" Define \(dg as "*" for text output and create a new .DG macro
.\" which describes the symbol.
.\"
.ie !c \(dg \{\
.char \(dg *
.de DG
an asterick
..
.\}
.el \{\
.de DG
a dagger
..
.\}
.\"
.\" Define \(dd as "#" for text output and create a new .DD macro
.\" which describes the symbol.
.\"
.ie !c \(dd \{\
.char \(dd #
.de DD
a pound sign
..
.\}
.el \{\
.de DD
a double dagger
..
.\}
.eh 'SMM:08-%''Sendmail Installation and Operation Guide'
.oh 'Sendmail Installation and Operation Guide''SMM:08-%'
.\" SD is lib if sendmail is installed in /usr/lib, sbin if in /usr/sbin
@ -53,7 +87,7 @@ eric@Sendmail.COM
.de Ve
Version \\$2
..
.Ve $Revision: 8.317.4.64 $
.Ve $Revision: 8.317.4.70 $
.rm Ve
.sp
For Sendmail Version 8.11
@ -2189,8 +2223,12 @@ For compatibility with old configuration files,
if no
.i suboption
is specified,
all the timeouts marked with a dagger (\(dg) are set to the indicated value.
All but those marked with a double dagger (\(dd) apply to client SMTP.
all the timeouts marked with
.DG
(\(dg) are set to the indicated value.
All but those marked with
.DD
(\(dd) apply to client SMTP.
.pp
Many of the RFC 1123 minimum values
may well be too short.
@ -6444,7 +6482,15 @@ Defaults to 600000.
.ip QueueLA=\fILA\fP
[x]
When the system load average exceeds
.i LA ,
.i LA
and the
.b QueueFactor
(\c
.b q )
option divided by the difference in the current load average and the
.b QueueLA
option plus one
is less than the priority of the message,
just queue messages
(i.e., don't try to send them).
Defaults to 8 multiplied by
@ -6766,7 +6812,10 @@ This should really
be set.
.ip TempFileMode=\fImode\fP
[F]
The file mode for queue files.
The file mode for queue files, files to which
.i sendmail
delivers directly, and files in the
.b HostStatusDirectory .
It is interpreted in octal by default.
Defaults to 0600.
.ip Timeout.\fItype\fP=\|\fItimeout\fP
@ -8704,7 +8753,8 @@ has been compiled with support for STARTTLS.
When acting as a server,
.i sendmail
requires X.509 certificates to support STARTTLS:
one as certificate for the server (ServerCertFile)
one as certificate for the server (ServerCertFile and corresponding
private ServerKeyFile)
at least one root CA (CACERTFile),
i.e., a certificate that is used to sign other certificates,
and a path to a directory which contains other CAs (CACERTPath).
@ -8723,7 +8773,7 @@ C=FileName_of_CA_Certificate
ln -s $C `openssl x509 -noout -hash < $C`.0
.)b
An X.509 certificate is also required for authentication in client mode
(ClientCertFile), however,
(ClientCertFile and corresponding private ClientKeyFile), however,
.i sendmail
will always use STARTTLS when offered by a server.
The client and server certificates can be identical.
@ -9425,7 +9475,7 @@ replace it with a blank sheet for double-sided output.
.\".sz 10
.\"Eric Allman
.\".sp
.\"Version $Revision: 8.317.4.64 $
.\"Version $Revision: 8.317.4.70 $
.\".ce 0
.bp 3
.ce

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1999-2000 Sendmail, Inc. and its suppliers.
* Copyright (c) 1999-2001 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
@ -7,7 +7,7 @@
* the sendmail distribution.
*
*
* $Id: milter.h,v 8.24.16.9 2001/03/02 21:22:48 geir Exp $
* $Id: milter.h,v 8.24.16.10 2001/07/20 04:19:35 gshapiro Exp $
*/
/*

View File

@ -10,7 +10,7 @@
* the sendmail distribution.
*
*
* $Id: sendmail.h,v 8.34.4.7 2000/10/09 16:15:26 gshapiro Exp $
* $Id: sendmail.h,v 8.34.4.8 2001/06/01 05:06:51 gshapiro Exp $
*/
/*
@ -108,7 +108,6 @@ typedef unsigned int BITMAP256[BITMAPBYTES / sizeof (int)];
extern int safefile __P((char *, UID_T, GID_T, char *, long, int, struct stat *));
extern int safedirpath __P((char *, UID_T, GID_T, char *, long, int, int));
extern int safeopen __P((char *, int, int, long));
extern FILE *safefopen __P((char *, int, int, long));
extern int dfopen __P((char *, int, int, long));
extern bool filechanged __P((char *, int, struct stat *));

View File

@ -59,14 +59,14 @@ Filters are specified with a key letter ``X'' (for ``eXternal'').
For example:
Xfilter1, S=local:/var/run/f1.sock, F=R
Xfilter2, S=inet6:999@localhost, F=T, T=S:1s;R:1s;E:5m
Xfilter2, S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5m
Xfilter3, S=inet:3333@localhost
specifies three filters. Filters can be specified in your .mc file using
the following:
INPUT_MAIL_FILTER(`filter1', `S=local:/var/run/f1.sock, F=R')
INPUT_MAIL_FILTER(`filter2', `S=inet6:999@localhost, F=T, T=S:1s;R:1s;E:5m')
INPUT_MAIL_FILTER(`filter2', `S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5m')
INPUT_MAIL_FILTER(`filter3', `S=inet:3333@localhost')
The first attaches to a Unix-domain socket in the /var/run directory; the
@ -80,19 +80,21 @@ If neither F=R nor F=T is specified, the message is passed through sendmail
as if the filter were not present.
Finally, you can override the default timeouts used by sendmail when
talking to the filters using the T= equate. There are three fields inside
talking to the filters using the T= equate. There are four fields inside
of the T= equate:
Letter Meaning
S Timeout for sending information from the MTA to a filter
R Timeout for reading reply from the filter
E Overall timeout between sending end-of-message to filter
and waiting for the final acknowledgment
C Timeout for connecting to a filter (if 0, use system timeout)
S Timeout for sending information from the MTA to a filter
R Timeout for reading reply from the filter
E Overall timeout between sending end-of-message to filter
and waiting for the final acknowledgment
Note the separator between each is a ';' as a ',' already separates equates
and therefore can't separate timeouts. The default values (if not set in the config) are:
and therefore can't separate timeouts. The default values (if not set in
the config) are:
T=S:10s;R:10s;E:5m
T=C:0m;S:10s;R:10s;E:5m
where 's' is seconds and 'm' is minutes.
@ -424,4 +426,4 @@ main(argc, argv)
/* eof */
$Revision: 8.9.2.1.2.17 $, Last updated $Date: 2001/04/11 18:32:58 $
$Revision: 8.9.2.1.2.19 $, Last updated $Date: 2001/06/28 22:25:14 $

View File

@ -17,7 +17,7 @@
# define EXTERN
# define INIT(x) = x
# ifndef lint
static char MilterlId[] = "@(#)$Id: libmilter.h,v 8.3.6.14 2001/05/27 14:31:12 ca Exp $";
static char MilterlId[] = "@(#)$Id: libmilter.h,v 8.3.6.16 2001/06/07 23:21:35 geir Exp $";
# endif /* ! lint */
#else /* _DEFINE */
# define EXTERN extern

View File

@ -9,7 +9,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: sm_gethost.c,v 8.7.8.10 2001/05/09 20:57:12 gshapiro Exp $";
static char id[] = "@(#)$Id: sm_gethost.c,v 8.7.8.11 2001/07/21 00:10:23 gshapiro Exp $";
#endif /* ! lint */
#if _FFR_MILTER
@ -31,12 +31,15 @@ static char id[] = "@(#)$Id: sm_gethost.c,v 8.7.8.10 2001/05/09 20:57:12 gshapir
#if NETINET6 && NEEDSGETIPNODE
# ifndef AI_V4MAPPED
# define AI_V4MAPPED 0 /* dummy */
# endif /* ! AI_V4MAPPED */
# ifndef AI_ADDRCONFIG
# define AI_ADDRCONFIG 0 /* dummy */
# endif /* ! AI_ADDRCONFIG */
# ifndef AI_ALL
# define AI_ALL 0 /* dummy */
# endif /* ! AI_ALL */
# ifndef AI_DEFAULT
# define AI_DEFAULT 0 /* dummy */
# endif /* ! AI_DEFAULT */
static struct hostent *
getipnodebyname(name, family, flags, err)
@ -97,11 +100,15 @@ mi_gethostbyname(name, family)
# endif /* SOLARIS == 20300 || SOLARIS == 203 */
#else /* (SOLARIS > 10000 && SOLARIS < 20400) || (defined(SOLARIS) && SOLARIS < 204) || (defined(sony_news) && defined(__svr4)) */
# if NETINET6
int flags = AI_DEFAULT|AI_ALL;
int err;
# endif /* NETINET6 */
# if NETINET6
h = getipnodebyname(name, family, AI_V4MAPPED|AI_ALL, &err);
# if ADDRCONFIG_IS_BROKEN
flags &= ~AI_ADDRCONFIG;
# endif /* ADDRCONFIG_IS_BROKEN */
h = getipnodebyname(name, family, flags, &err);
SM_SET_H_ERRNO(err);
# else /* NETINET6 */
h = gethostbyname(name);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
* Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers.
* All rights reserved.
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
* Copyright (c) 1988, 1993
@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: safefile.c,v 8.81.4.7 2000/09/01 21:09:23 ca Exp $";
static char id[] = "@(#)$Id: safefile.c,v 8.81.4.10 2001/07/20 04:19:36 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -660,10 +660,6 @@ safedirpath(fn, uid, gid, user, flags, level, offset)
** Same as open.
*/
#ifndef O_ACCMODE
# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
#endif /* ! O_ACCMODE */
int
safeopen(fn, omode, cmode, sff)
char *fn;
@ -735,81 +731,6 @@ safeopen(fn, omode, cmode, sff)
return fd;
}
/*
** SAFEFOPEN -- do a file open with extra checking
**
** Parameters:
** fn -- the file name to open.
** omode -- the open-style mode flags.
** cmode -- the create-style mode flags.
** sff -- safefile flags.
**
** Returns:
** Same as fopen.
*/
FILE *
safefopen(fn, omode, cmode, sff)
char *fn;
int omode;
int cmode;
long sff;
{
int fd;
int save_errno;
FILE *fp;
char *fmode;
switch (omode & O_ACCMODE)
{
case O_RDONLY:
fmode = "r";
break;
case O_WRONLY:
if (bitset(O_APPEND, omode))
fmode = "a";
else
fmode = "w";
break;
case O_RDWR:
if (bitset(O_TRUNC, omode))
fmode = "w+";
else if (bitset(O_APPEND, omode))
fmode = "a+";
else
fmode = "r+";
break;
default:
syserr("554 5.3.5 safefopen: unknown omode %o", omode);
fmode = "x";
}
fd = safeopen(fn, omode, cmode, sff);
if (fd < 0)
{
save_errno = errno;
if (tTd(44, 10))
dprintf("safefopen: safeopen failed: %s\n",
errstring(errno));
errno = save_errno;
return NULL;
}
fp = fdopen(fd, fmode);
if (fp != NULL)
return fp;
save_errno = errno;
if (tTd(44, 10))
{
dprintf("safefopen: fdopen(%s, %s) failed: omode=%x, sff=%lx, err=%s\n",
fn, fmode, omode, sff, errstring(errno));
}
(void) close(fd);
errno = save_errno;
return NULL;
}
/*
** FILECHANGED -- check to see if file changed after being opened
**
** Parameters:

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
* Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers.
* All rights reserved.
* Copyright (c) 1997 Eric P. Allman. All rights reserved.
* Copyright (c) 1988, 1993
@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: snprintf.c,v 8.27.16.2 2000/09/17 17:04:24 gshapiro Exp $";
static char id[] = "@(#)$Id: snprintf.c,v 8.27.16.4 2001/07/20 04:19:37 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -86,10 +86,10 @@ sm_vsnprintf(str, count, fmt, args)
sm_dopr( str, fmt, args );
if (count > 0)
DoprEnd[0] = 0;
if (SnprfOverflow && tTd(57, 2))
if (SnprfOverflow > 0 && tTd(57, 2))
dprintf("\nvsnprintf overflow, len = %ld, str = %s",
(long) count, shortenstring(str, MAXSHORTSTR));
return strlen(str);
return strlen(str) + SnprfOverflow;
}
/*

View File

@ -19,7 +19,7 @@ static char copyright[] =
#endif /* ! lint */
#ifndef lint
static char id[] = "@(#)$Id: mail.local.c,v 8.143.4.57 2001/02/11 20:08:20 gshapiro Exp $";
static char id[] = "@(#)$Id: mail.local.c,v 8.143.4.58 2001/06/01 05:33:31 gshapiro Exp $";
#endif /* ! lint */
/*

View File

@ -9,7 +9,7 @@
# the sendmail distribution.
#
#
# $Id: README,v 8.263.2.1.2.35 2001/05/09 20:58:32 gshapiro Exp $
# $Id: README,v 8.263.2.1.2.37 2001/06/03 03:41:12 ca Exp $
#
This directory contains the source files for sendmail(TM).
@ -82,7 +82,6 @@ Porting to a new Unix-based system should be a matter of creating
an appropriate configuration file in the devtools/OS/ directory.
+----------------------+
| DATABASE DEFINITIONS |
+----------------------+
@ -178,6 +177,7 @@ addresses, so "^[0-9]+$" would match this. By using such a map in a
check_* rule-set, you can block a certain range of addresses that would
otherwise be considered valid.
+---------------+
| COMPILE FLAGS |
+---------------+
@ -463,6 +463,7 @@ NEEDSGETIPNODE Set this if your system supports IPv6 but doesn't include
the getipnodeby{name,addr}() functions. Set automatically
for Linux's glibc.
+-----------------------+
| COMPILE-TIME FEATURES |
+-----------------------+
@ -600,6 +601,13 @@ SFIO Uses sfio instead of stdio. sfio is available from AT&T
OPERATING SYSTEM AND COMPILE QUIRKS.
Generic notice: If you enable a compile time option that needs
libraries or include files that don't come with sendmail or are
installed in a location that your C compiler doesn't use by default
you should set confINCDIRS and confLIBDIRS as explained in the
first section: BUILDING SENDMAIL.
+---------------------+
| DNS/RESOLVER ISSUES |
+---------------------+
@ -639,6 +647,7 @@ ResolverOptions setting. However, instead, we recommend catching the
problem and reporting it to the name server administrator so we can rid the
world of broken name servers.
+----------------------------------------+
| STARTTLS COMPILATION AND CONFIGURATION |
+----------------------------------------+
@ -649,11 +658,16 @@ sendmail. See devtools/README how to set the correct compile time
parameters; you should at least set the following variables:
define(`confSTDIO_TYPE', `portable')
APPENDDEF(`confENVDEF', `-DSFIO')
APPENDDEF(`confLIBS', `-lsfio')
APPENDDEF(`conf_sendmail_ENVDEF', `-DSFIO')
APPENDDEF(`conf_sendmail_LIBS', `-lsfio')
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS')
APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')
If you have installed the OpenSSL libraries and include files in
a location that your C compiler doesn't use by default you should
set confINCDIRS and confLIBDIRS as explained in the first section:
BUILDING SENDMAIL.
Configuration information can be found in doc/op/op.me (required
certificates) and cf/README (how to tell sendmail about certificates).
@ -667,10 +681,8 @@ there are any problems listed about permissions (unsafe files)
or the validity of X.509 certificates.
Note: sfio must be used in all libraries with which sendmail exchanges
file pointers. That is, libsmutil must be compiled with sfio, which
is accomplished by the above config parameters. Another example is
PH map support. This does not apply to the usual libraries, e.g.,
OpenSSL, Berkeley DB, Cyrus SASL.
file pointers. An example is PH map support. This does not apply to the
usual libraries, e.g., OpenSSL, Berkeley DB, Cyrus SASL.
Further information can be found via:
http://www.sendmail.org/tips/
@ -682,7 +694,17 @@ http://www.sendmail.org/tips/
Please read the docs accompanying the library (INSTALL and README).
If you use Berkeley DB for Cyrus SASL then you must compile sendmail
with the same version of Berkeley DB.
with the same version of Berkeley DB. See devtools/README how to
set the correct compile time parameters; you should at least set
the following variables:
APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
If you have installed the Cyrus SASL library and include files in
a location that your C compiler doesn't use by default you should
set confINCDIRS and confLIBDIRS as explained in the first section:
BUILDING SENDMAIL.
You have to select and install authentication mechanisms and tell
sendmail where to find the sasl library and the include files (see
@ -1599,6 +1621,7 @@ Regular Expressions (MAP_REGEX)
The manual pages have been written against the -man macros, and
should format correctly with any reasonable *roff.
+-----------------+
| DEBUGGING HOOKS |
+-----------------+
@ -1706,4 +1729,4 @@ util.c Some general purpose routines used by sendmail.
version.c The version number and information about this
version of sendmail.
(Version $Revision: 8.263.2.1.2.35 $, last update $Date: 2001/05/09 20:58:32 $ )
(Version $Revision: 8.263.2.1.2.37 $, last update $Date: 2001/06/03 03:41:12 $ )

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: clock.c,v 8.52.18.14 2001/05/17 18:12:28 gshapiro Exp $";
static char id[] = "@(#)$Id: clock.c,v 8.52.18.17 2001/07/31 23:04:59 ca Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -21,8 +21,8 @@ static char id[] = "@(#)$Id: clock.c,v 8.52.18.14 2001/05/17 18:12:28 gshapiro E
# define sigmask(s) (1 << ((s) - 1))
#endif /* ! sigmask */
static SIGFUNC_DECL tick __P((int));
static void endsleep __P((void));
static SIGFUNC_DECL sm_tick __P((int));
static void endsleep __P((void));
/*
@ -119,7 +119,7 @@ sigsafe_setevent(intvl, func, arg)
** This shouldn't happen. If called from setevent(),
** we have just malloced a FreeEventList entry. If
** called from a signal handler, it should have been
** from an existing event which tick() just added to the
** from an existing event which sm_tick() just added to the
** FreeEventList.
*/
@ -143,7 +143,7 @@ sigsafe_setevent(intvl, func, arg)
*evp = ev;
LEAVE_CRITICAL();
(void) setsignal(SIGALRM, tick);
(void) setsignal(SIGALRM, sm_tick);
intvl = EventQueue->ev_time - now;
(void) alarm((unsigned) intvl < 1 ? 1 : intvl);
if (wasblocked == 0)
@ -247,7 +247,7 @@ clear_events()
(void) releasesignal(SIGALRM);
}
/*
** TICK -- take a clock tick
** SM_TICK -- take a clock sm_tick
**
** Called by the alarm clock. This routine runs events as needed.
** Always called as a signal handler, so we assume that SIGALRM
@ -268,8 +268,8 @@ clear_events()
*/
/* ARGSUSED */
SIGFUNC_DECL
tick(sig)
static SIGFUNC_DECL
sm_tick(sig)
int sig;
{
register time_t now;
@ -279,7 +279,7 @@ tick(sig)
(void) alarm(0);
FIX_SYSV_SIGNAL(sig, tick);
FIX_SYSV_SIGNAL(sig, sm_tick);
errno = save_errno;
CHECK_CRITICAL(sig);
@ -287,8 +287,8 @@ tick(sig)
mypid = getpid();
while (PendingSignal != 0)
{
int sigbit;
int sig;
int sigbit = 0;
int sig = 0;
if (bitset(PEND_SIGHUP, PendingSignal))
{
@ -321,7 +321,7 @@ tick(sig)
now = curtime();
if (tTd(5, 4))
dprintf("tick: now=%ld\n", (long) now);
dprintf("sm_tick: now=%ld\n", (long) now);
while ((ev = EventQueue) != NULL &&
(ev->ev_time <= now || ev->ev_pid != mypid))
@ -336,7 +336,7 @@ tick(sig)
EventQueue = EventQueue->ev_link;
LEAVE_CRITICAL();
if (tTd(5, 6))
dprintf("tick: ev=%lx, func=%lx, arg=%d, pid=%d\n",
dprintf("sm_tick: ev=%lx, func=%lx, arg=%d, pid=%d\n",
(u_long) ev, (u_long) ev->ev_func,
ev->ev_arg, ev->ev_pid);
@ -431,11 +431,32 @@ pend_signal(sig)
if (sigbit != 0)
PendingSignal |= sigbit;
(void) setsignal(SIGALRM, tick);
(void) setsignal(SIGALRM, sm_tick);
(void) alarm(1);
errno = save_errno;
}
/*
** SM_SIGNAL_NOOP -- A signal no-op function
**
** Parameters:
** sig -- signal received
**
** Returns:
** SIGFUNC_RETURN
*/
/* ARGSUSED */
SIGFUNC_DECL
sm_signal_noop(sig)
int sig;
{
int save_errno = errno;
FIX_SYSV_SIGNAL(sig, sm_signal_noop);
errno = save_errno;
return SIGFUNC_RETURN;
}
/*
** SLEEP -- a version of sleep that works with this stuff
**
** Because sleep uses the alarm facility, I must reimplement

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: collect.c,v 8.136.4.21 2001/05/17 18:10:14 gshapiro Exp $";
static char id[] = "@(#)$Id: collect.c,v 8.136.4.22 2001/06/07 21:01:02 ca Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -352,7 +352,8 @@ collect(fp, smtpmode, hdrp, e)
{
*bp++ = c;
hdrslen++;
if (MaxHeadersLength > 0 &&
if (!headeronly &&
MaxHeadersLength > 0 &&
hdrslen > MaxHeadersLength)
{
sm_syslog(LOG_NOTICE, e->e_id,

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: conf.c,v 8.646.2.2.2.86 2001/05/17 18:18:40 ca Exp $";
static char id[] = "@(#)$Id: conf.c,v 8.646.2.2.2.87 2001/07/20 23:56:52 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -4542,9 +4542,7 @@ sm_gethostbyname(name, family)
hbuf, family);
# if NETINET6
h = getipnodebyname(hbuf, family,
AI_V4MAPPED|AI_ALL,
&err);
h = getipnodebyname(hbuf, family, flags, &err);
SM_SET_H_ERRNO(err);
save_errno = errno;
# else /* NETINET6 */

View File

@ -10,7 +10,7 @@
* the sendmail distribution.
*
*
* $Id: conf.h,v 8.496.4.43 2001/05/20 22:29:59 gshapiro Exp $
* $Id: conf.h,v 8.496.4.54 2001/07/31 22:30:24 gshapiro Exp $
*/
/*
@ -488,6 +488,7 @@ typedef int pid_t;
# endif /* ! __svr4__ */
# define GIDSET_T gid_t
# define USE_SA_SIGACTION 1 /* use sa_sigaction field */
# define HASSTRERROR 1 /* has strerror(3) */
# if _FFR_MILTER
# define BROKEN_PTHREAD_SLEEP 1 /* sleep after pthread_create() fails */
# endif /* _FFR_MILTER */
@ -867,9 +868,11 @@ typedef int pid_t;
#ifdef __bsdi__
# include <paths.h>
# define HASUNSETENV 1 /* has the unsetenv(3) call */
# define HASSETREUID 0 /* BSD-OS has broken setreuid(2) emulation */
# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
# define USESETEUID 1 /* has usable seteuid(2) call */
# define HASFCHMOD 1 /* has fchmod(2) syscall */
# define HASFCHOWN 1 /* has fchown(2) syscall */
# define HASSETLOGIN 1 /* has setlogin(2) */
# define HASSNPRINTF 1 /* has snprintf(3) and vsnprintf(3) */
# define HASUNAME 1 /* has uname(2) syscall */
@ -896,6 +899,9 @@ typedef int pid_t;
# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 /* on 3.x */
# define HASSETUSERCONTEXT 1 /* has setusercontext */
# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 */
# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 /* on 4.x */
# define HASURANDOMDEV 1 /* has /dev/urandom(4) */
# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 */
#endif /* __bsdi__ */
@ -1718,6 +1724,7 @@ typedef int pid_t;
# include <sys/mkdev.h>
# define __svr4__
# define SYS5SIGNALS 1
# define HASFCHOWN 1 /* has fchown(2) call */
# define HASSETSID 1
# define HASSNPRINTF 1
# define HASSETREUID 1
@ -2517,6 +2524,10 @@ typedef struct msgb mblk_t;
# define S_IWOTH 0002
#endif /* ! S_IWOTH */
#ifndef O_ACCMODE
# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
#endif /* ! O_ACCMODE */
/* close-on-exec flag */
#ifndef FD_CLOEXEC
# define FD_CLOEXEC 1

View File

@ -16,9 +16,9 @@
#ifndef lint
# ifdef DAEMON
static char id[] = "@(#)$Id: daemon.c,v 8.401.4.61 2001/05/27 22:14:40 gshapiro Exp $ (with daemon mode)";
static char id[] = "@(#)$Id: daemon.c,v 8.401.4.68 2001/07/20 18:45:58 gshapiro Exp $ (with daemon mode)";
# else /* DAEMON */
static char id[] = "@(#)$Id: daemon.c,v 8.401.4.61 2001/05/27 22:14:40 gshapiro Exp $ (without daemon mode)";
static char id[] = "@(#)$Id: daemon.c,v 8.401.4.68 2001/07/20 18:45:58 gshapiro Exp $ (without daemon mode)";
# endif /* DAEMON */
#endif /* ! lint */
@ -702,7 +702,6 @@ getrequests(e)
(void) setsignal(SIGHUP, SIG_DFL);
(void) setsignal(SIGTERM, intsig);
if (!control)
{
define(macid("{daemon_addr}", NULL),
@ -718,6 +717,7 @@ getrequests(e)
{
if (Daemons[idx].d_socket >= 0)
(void) close(Daemons[idx].d_socket);
Daemons[idx].d_socket = -1;
}
clrcontrol();
@ -2481,15 +2481,26 @@ sighup(sig)
** restarts the daemon or exits if restart fails.
*/
/* Make a non-DFL/IGN signal a noop */
#define SM_NOOP_SIGNAL(sig, old) \
do \
{ \
(old) = setsignal((sig), sm_signal_noop); \
if ((old) == SIG_IGN || (old) == SIG_DFL) \
(void) setsignal((sig), (old)); \
} while (0)
static void
restart_daemon()
{
int i;
int save_errno;
char *reason;
sigfunc_t oalrm, ochld, ohup, oint, opipe, oterm, ousr1;
sigfunc_t ignore, oalrm, ousr1;
extern int DtableSize;
/* clear the events to turn off SIGALRMs */
clear_events();
allsignals(TRUE);
reason = RestartRequest;
@ -2527,28 +2538,37 @@ restart_daemon()
(void) fcntl(i, F_SETFD, j | FD_CLOEXEC);
}
/* need to allow signals before execve() so make them harmless */
oalrm = setsignal(SIGALRM, SIG_DFL);
ochld = setsignal(SIGCHLD, SIG_DFL);
ohup = setsignal(SIGHUP, SIG_DFL);
oint = setsignal(SIGINT, SIG_DFL);
opipe = setsignal(SIGPIPE, SIG_DFL);
oterm = setsignal(SIGTERM, SIG_DFL);
ousr1 = setsignal(SIGUSR1, SIG_DFL);
/*
** Need to allow signals before execve() to make them "harmless".
** However, the default action can be "terminate", so it isn't
** really harmless. Setting signals to IGN will cause them to be
** ignored in the new process to, so that isn't a good alternative.
*/
SM_NOOP_SIGNAL(SIGALRM, oalrm);
SM_NOOP_SIGNAL(SIGCHLD, ignore);
SM_NOOP_SIGNAL(SIGHUP, ignore);
SM_NOOP_SIGNAL(SIGINT, ignore);
SM_NOOP_SIGNAL(SIGPIPE, ignore);
SM_NOOP_SIGNAL(SIGTERM, ignore);
#ifdef SIGUSR1
SM_NOOP_SIGNAL(SIGUSR1, ousr1);
#endif /* SIGUSR1 */
allsignals(FALSE);
(void) execve(SaveArgv[0], (ARGV_T) SaveArgv, (ARGV_T) ExternalEnviron);
save_errno = errno;
/* restore signals */
/* block signals again and restore needed signals */
allsignals(TRUE);
/* For finis() events */
(void) setsignal(SIGALRM, oalrm);
(void) setsignal(SIGCHLD, ochld);
(void) setsignal(SIGHUP, ohup);
(void) setsignal(SIGINT, oint);
(void) setsignal(SIGPIPE, opipe);
(void) setsignal(SIGTERM, oterm);
#ifdef SIGUSR1
/* For debugging finis() */
(void) setsignal(SIGUSR1, ousr1);
#endif /* SIGUSR1 */
errno = save_errno;
if (LogLevel > 0)
@ -2580,6 +2600,19 @@ myhostname(hostbuf, size)
if (gethostname(hostbuf, size) < 0 || hostbuf[0] == '\0')
(void) strlcpy(hostbuf, "localhost", size);
hp = sm_gethostbyname(hostbuf, InetMode);
# if NETINET && NETINET6
if (hp == NULL && InetMode == AF_INET6)
{
/*
** It's possible that this IPv6 enabled machine doesn't
** actually have any IPv6 interfaces and, therefore, no
** IPv6 addresses. Fall back to AF_INET.
*/
hp = sm_gethostbyname(hostbuf, AF_INET);
}
# endif /* NETINET && NETINET6 */
if (hp == NULL)
return NULL;
if (strchr(hp->h_name, '.') != NULL || strchr(hostbuf, '.') == NULL)
@ -2793,10 +2826,30 @@ getauthinfo(fd, may_be_forged)
}
else
{
/* try to match the reverse against the forward lookup */
hp = sm_gethostbyname(RealHostName,
RealHostAddr.sa.sa_family);
int family;
family = RealHostAddr.sa.sa_family;
# if NETINET6 && NEEDSGETIPNODE
/*
** If RealHostAddr is an IPv6 connection with an
** IPv4-mapped address, we need RealHostName's IPv4
** address(es) for addrcmp() to compare against
** RealHostAddr.
**
** Actually, we only need to do this for systems
** which NEEDSGETIPNODE since the real getipnodebyname()
** already does V4MAPPED address via the AI_V4MAPPEDCFG
** flag. A better fix to this problem is to add this
** functionality to our stub getipnodebyname().
*/
if (family == AF_INET6 &&
IN6_IS_ADDR_V4MAPPED(&RealHostAddr.sin6.sin6_addr))
family = AF_INET;
# endif /* NETINET6 && NEEDSGETIPNODE */
/* try to match the reverse against the forward lookup */
hp = sm_gethostbyname(RealHostName, family);
if (hp == NULL)
*may_be_forged = TRUE;
else

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: deliver.c,v 8.600.2.1.2.81 2001/05/23 02:15:42 ca Exp $";
static char id[] = "@(#)$Id: deliver.c,v 8.600.2.1.2.86 2001/07/20 21:52:55 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -1927,6 +1927,9 @@ deliver(e, firstto)
struct stat stb;
extern int DtableSize;
/* clear the events to turn off SIGALRMs */
clear_events();
/* Reset global flags */
RestartRequest = NULL;
ShutdownRequest = NULL;
@ -1936,9 +1939,14 @@ deliver(e, firstto)
(void) close(fileno(e->e_lockfp));
/* child -- set up input & exec mailer */
(void) setsignal(SIGINT, SIG_IGN);
(void) setsignal(SIGALRM, sm_signal_noop);
(void) setsignal(SIGCHLD, SIG_DFL);
(void) setsignal(SIGHUP, SIG_IGN);
(void) setsignal(SIGINT, SIG_IGN);
(void) setsignal(SIGTERM, SIG_DFL);
# ifdef SIGUSR1
(void) setsignal(SIGUSR1, sm_signal_noop);
# endif /* SIGUSR1 */
if (m != FileMailer || stat(tochain->q_user, &stb) < 0)
stb.st_mode = 0;
@ -2071,7 +2079,19 @@ deliver(e, firstto)
/* reset user id */
endpwent();
if (bitnset(M_SPECIFIC_UID, m->m_flags))
{
new_euid = m->m_uid;
/*
** Undo the effects of the uid change in main
** for signal handling. The real uid may
** be used by mailer in adding a "From "
** line.
*/
if (RealUid != 0 && RealUid != getuid())
new_ruid = RealUid;
}
else if (bitset(S_ISUID, stb.st_mode))
new_ruid = stb.st_uid;
else if (ctladdr != NULL && ctladdr->q_uid != 0)
@ -2091,6 +2111,22 @@ deliver(e, firstto)
vendor_set_uid(new_euid);
# if MAILER_SETUID_METHOD == USE_SETEUID
# if HASSETREUID
/*
** Undo the effects of the uid change in main
** for signal handling. The real uid may
** be used by mailer in adding a "From "
** line.
*/
if (new_ruid != NO_UID &&
setreuid(RealUid, geteuid()) < 0)
{
syserr("openmailer: setreuid(%d, %d) failed",
(int) new_ruid, (int) geteuid());
exit(EX_OSERR);
}
# endif /* HASSETREUID */
if (seteuid(new_euid) < 0 && suidwarn)
{
syserr("openmailer: seteuid(%ld) failed",
@ -3045,7 +3081,7 @@ markfailure(e, q, mci, rcode, ovr)
** and if it represents an error, we print it.
**
** Parameters:
** pid -- pid of mailer.
** mci -- the mailer connection info.
** e -- the current envelope.
** pv -- the parameter vector that invoked the mailer
** (for error messages).
@ -4925,11 +4961,13 @@ hostsignature(m, host)
nmx = getmxrr(hp, mxhosts, mxprefs, TRUE, &rcode);
if (nmx <= 0)
{
int save_errno;
register MCI *mci;
/* update the connection info for this host */
save_errno = errno;
mci = mci_get(hp, m);
mci->mci_errno = errno;
mci->mci_errno = save_errno;
mci->mci_herrno = h_errno;
mci->mci_lastuse = now;
if (rcode == EX_NOHOST)

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: err.c,v 8.120.4.2 2001/05/03 17:24:06 gshapiro Exp $";
static char id[] = "@(#)$Id: err.c,v 8.120.4.3 2001/05/30 00:22:26 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -157,8 +157,6 @@ syserr(fmt, va_alist)
#ifdef ESTALE
case ESTALE:
#endif /* ESTALE */
printopenfds(TRUE);
mci_dump_all(TRUE);
break;

View File

@ -21,7 +21,7 @@ static char copyright[] =
#endif /* ! lint */
#ifndef lint
static char id[] = "@(#)$Id: main.c,v 8.485.4.60 2001/05/27 22:00:26 gshapiro Exp $";
static char id[] = "@(#)$Id: main.c,v 8.485.4.65 2001/07/20 00:53:00 gshapiro Exp $";
#endif /* ! lint */
#define _DEFINE
@ -35,7 +35,9 @@ static char id[] = "@(#)$Id: main.c,v 8.485.4.60 2001/05/27 22:00:26 gshapiro Ex
static SIGFUNC_DECL intindebug __P((int));
static SIGFUNC_DECL quiesce __P((int));
#ifdef SIGUSR1
static SIGFUNC_DECL sigusr1 __P((int));
# endif /* SIGUSR1 */
static SIGFUNC_DECL term_daemon __P((int));
static void dump_class __P((STAB *, int));
static void obsolete __P((char **));
@ -2156,7 +2158,7 @@ finis(drop, exitstat)
{
/* Still want to process new timeouts added below */
clear_events();
releasesignal(SIGALRM);
(void) releasesignal(SIGALRM);
if (tTd(2, 1))
{
@ -2272,7 +2274,8 @@ shutdown_daemon()
PendingSignal = 0;
if (LogLevel > 79)
sm_syslog(LOG_DEBUG, CurEnv->e_id, "interrupt");
sm_syslog(LOG_DEBUG, CurEnv->e_id, "interrupt (%s)",
reason == NULL ? "implicit call" : reason);
FileName = NULL;
closecontrolsocket(TRUE);
@ -2347,7 +2350,7 @@ intsig(sig)
drop = TRUE;
}
else
else if (OpMode != MD_TEST)
unlockqueue(CurEnv);
finis(drop, EX_OK);
@ -2758,6 +2761,7 @@ dumpstate(when)
}
sm_syslog(LOG_DEBUG, CurEnv->e_id, "--- end of state dump ---");
}
#ifdef SIGUSR1
/*
** SIGUSR1 -- Signal a request to dump state.
**
@ -2788,6 +2792,7 @@ sigusr1(sig)
errno = save_errno;
return SIGFUNC_RETURN;
}
# endif /* SIGUSR1 */
/*
** DROP_PRIVILEGES -- reduce privileges to those of the RunAsUser option
**

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: map.c,v 8.414.4.53 2001/05/04 01:29:00 gshapiro Exp $";
static char id[] = "@(#)$Id: map.c,v 8.414.4.54 2001/06/01 08:23:24 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -126,9 +126,6 @@ static bool text_getcanonname __P((char *, int, int *));
# define LOCK_ON_OPEN 0 /* no such luck -- bend over backwards */
#endif /* O_EXLOCK && HASFLOCK && !BOGUS_O_EXCL */
#ifndef O_ACCMODE
# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
#endif /* ! O_ACCMODE */
/*
** MAP_PARSEARGS -- parse config line arguments for database lookup
**

View File

@ -9,7 +9,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: milter.c,v 8.50.4.46 2001/05/11 18:11:36 gshapiro Exp $";
static char id[] = "@(#)$Id: milter.c,v 8.50.4.51 2001/07/20 00:53:01 gshapiro Exp $";
#endif /* ! lint */
#if _FFR_MILTER
@ -26,6 +26,7 @@ static char id[] = "@(#)$Id: milter.c,v 8.50.4.46 2001/05/11 18:11:36 gshapiro E
# define SM_FD_ISSET FD_ISSET
# define SM_FD_SETSIZE FD_SETSIZE
static void milter_connect_timeout __P((void));
static void milter_error __P((struct milter *));
static int milter_open __P((struct milter *, bool, ENVELOPE *));
static void milter_parse_timeouts __P((char *, struct milter *));
@ -511,6 +512,8 @@ milter_write(m, cmd, buf, len, to, e)
** -1 otherwise.
*/
static jmp_buf MilterConnectTimeout;
static int
milter_open(m, parseonly, e)
struct milter *m;
@ -950,8 +953,23 @@ milter_open(m, parseonly, e)
return -1;
}
if (connect(sock, (struct sockaddr *) &addr, addrlen) >= 0)
break;
if (setjmp(MilterConnectTimeout) == 0)
{
EVENT *ev = NULL;
int i;
if (m->mf_timeout[SMFTO_CONNECT] > 0)
ev = setevent(m->mf_timeout[SMFTO_CONNECT],
milter_connect_timeout, 0);
i = connect(sock, (struct sockaddr *) &addr, addrlen);
save_errno = errno;
if (ev != NULL)
clrevent(ev);
errno = save_errno;
if (i >= 0)
break;
}
/* couldn't connect.... try next address */
save_errno = errno;
@ -1006,6 +1024,8 @@ milter_open(m, parseonly, e)
}
continue;
}
p = CurHostName;
CurHostName = at;
if (tTd(64, 5))
dprintf("X%s: error connecting to filter: %s\n",
m->mf_name, errstring(save_errno));
@ -1013,6 +1033,7 @@ milter_open(m, parseonly, e)
sm_syslog(LOG_ERR, e->e_id,
"X%s: error connecting to filter: %s",
m->mf_name, errstring(save_errno));
CurHostName = p;
milter_error(m);
# if _FFR_FREEHOSTENT && NETINET6
if (hp != NULL)
@ -1030,6 +1051,19 @@ milter_open(m, parseonly, e)
# endif /* _FFR_FREEHOSTENT && NETINET6 */
return sock;
}
static void
milter_connect_timeout()
{
/*
** NOTE: THIS CAN BE CALLED FROM A SIGNAL HANDLER. DO NOT ADD
** ANYTHING TO THIS ROUTINE UNLESS YOU KNOW WHAT YOU ARE
** DOING.
*/
errno = ETIMEDOUT;
longjmp(MilterConnectTimeout, 1);
}
/*
** MILTER_SETUP -- setup structure for a mail filter
**
@ -1066,6 +1100,7 @@ milter_setup(line)
m->mf_name = newstr(line);
m->mf_state = SMFS_READY;
m->mf_sock = -1;
m->mf_timeout[SMFTO_CONNECT] = (time_t) 0;
m->mf_timeout[SMFTO_WRITE] = (time_t) 10;
m->mf_timeout[SMFTO_READ] = (time_t) 10;
m->mf_timeout[SMFTO_EOM] = (time_t) 300;
@ -1097,6 +1132,10 @@ milter_setup(line)
/* install the field into the filter struct */
switch (fcode)
{
case 'C':
m->mf_timeout[SMFTO_CONNECT] = convtime(p, 's');
break;
case 'S': /* socket */
if (p == NULL)
m->mf_conn = NULL;
@ -2851,7 +2890,10 @@ milter_connect(hostname, addr, e, state)
# if NETINET6
case AF_INET6:
family = SMFIA_INET6;
if (IN6_IS_ADDR_V4MAPPED(&addr.sin6.sin6_addr))
family = SMFIA_INET;
else
family = SMFIA_INET6;
port = htons(addr.sin6.sin6_port);
sockinfo = anynet_ntop(&addr.sin6.sin6_addr, buf6,
sizeof buf6);

View File

@ -16,9 +16,9 @@
#ifndef lint
# if QUEUE
static char id[] = "@(#)$Id: queue.c,v 8.343.4.55 2001/05/03 23:37:11 gshapiro Exp $ (with queueing)";
static char id[] = "@(#)$Id: queue.c,v 8.343.4.62 2001/07/20 00:53:01 gshapiro Exp $ (with queueing)";
# else /* QUEUE */
static char id[] = "@(#)$Id: queue.c,v 8.343.4.55 2001/05/03 23:37:11 gshapiro Exp $ (without queueing)";
static char id[] = "@(#)$Id: queue.c,v 8.343.4.62 2001/07/20 00:53:01 gshapiro Exp $ (without queueing)";
# endif /* QUEUE */
#endif /* ! lint */
@ -68,6 +68,35 @@ static int workcmpf2();
static int workcmpf3();
static int workcmpf4();
/*
** Current qf file field assignments:
**
** A AUTH= parameter
** B body type
** C controlling user
** D data file name
** E error recipient
** F flag bits
** G queue delay algorithm
** H header
** I data file's inode number
** K time of last delivery attempt
** L Solaris Content-Length: header (obsolete)
** M message (obsolete)
** N number of delivery attempts
** P message priority
** Q original recipient (ORCPT=)
** R recipient
** S sender
** T init time
** V queue file version
** X character set (_FFR_SAVE_CHARSET)
** Y current delay
** Z original envelope id from ESMTP
** $ define macro
** . terminate file
*/
/*
** QUEUEUP -- queue a message up for future transmission.
**
@ -374,6 +403,7 @@ queueup(e, announce)
if (q->q_orcpt != NULL)
fprintf(tfp, "Q%s\n",
denlstring(q->q_orcpt, TRUE, FALSE));
(void) putc('R', tfp);
if (bitset(QPRIMARY, q->q_flags))
(void) putc('P', tfp);
@ -2151,15 +2181,15 @@ readqf(e)
/* regenerated below */
break;
case 'K': /* time of last delivery attempt */
case 'K': /* time of last delivery attempt */
e->e_dtime = atol(&buf[1]);
break;
# if _FFR_QUEUEDELAY
case 'G': /* queue delay algorithm */
case 'G': /* queue delay algorithm */
e->e_queuealg = atoi(&buf[1]);
break;
case 'Y': /* current delay */
case 'Y': /* current delay */
e->e_queuedelay = (time_t) atol(&buf[1]);
break;
# endif /* _FFR_QUEUEDELAY */
@ -2933,7 +2963,15 @@ setctluser(user, qfver)
if ((p = strtok(NULL, ":")) != NULL)
a->q_gid = atoi(p);
if ((p = strtok(NULL, ":")) != NULL)
{
char *o;
a->q_flags |= QGOODUID;
/* if there is another ':': restore it */
if ((o = strtok(NULL, ":")) != NULL && o > p)
o[-1] = ':';
}
}
else if ((pw = sm_getpwnam(user)) != NULL)
{
@ -3086,7 +3124,7 @@ setnewqueue(e)
return;
}
if (NumQueues == 1)
if (NumQueues <= 1)
idx = 0;
else
{

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: readcf.c,v 8.382.4.40 2001/05/03 17:24:13 gshapiro Exp $";
static char id[] = "@(#)$Id: readcf.c,v 8.382.4.42 2001/07/31 22:30:24 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -3380,6 +3380,7 @@ settimeout(name, val, sticky)
{
register struct timeoutinfo *to;
int i;
int addopts;
time_t toval;
if (tTd(37, 2))
@ -3413,6 +3414,7 @@ settimeout(name, val, sticky)
dprintf("\n");
toval = convtime(val, 'm');
addopts = 0;
switch (to->to_code)
{
@ -3481,6 +3483,7 @@ settimeout(name, val, sticky)
TimeOuts.to_q_warning[TOC_NORMAL] = toval;
TimeOuts.to_q_warning[TOC_URGENT] = toval;
TimeOuts.to_q_warning[TOC_NONURGENT] = toval;
addopts = 2;
break;
case TO_QUEUEWARN_NORMAL:
@ -3503,6 +3506,7 @@ settimeout(name, val, sticky)
TimeOuts.to_q_return[TOC_NORMAL] = toval;
TimeOuts.to_q_return[TOC_URGENT] = toval;
TimeOuts.to_q_return[TOC_NONURGENT] = toval;
addopts = 2;
break;
case TO_QUEUERETURN_NORMAL:
@ -3530,6 +3534,7 @@ settimeout(name, val, sticky)
TimeOuts.res_retrans[RES_TO_DEFAULT] = toval;
TimeOuts.res_retrans[RES_TO_FIRST] = toval;
TimeOuts.res_retrans[RES_TO_NORMAL] = toval;
addopts = 2;
break;
case TO_RESOLVER_RETRY:
@ -3537,6 +3542,7 @@ settimeout(name, val, sticky)
TimeOuts.res_retry[RES_TO_DEFAULT] = i;
TimeOuts.res_retry[RES_TO_FIRST] = i;
TimeOuts.res_retry[RES_TO_NORMAL] = i;
addopts = 2;
break;
case TO_RESOLVER_RETRANS_NORMAL:
@ -3565,7 +3571,10 @@ settimeout(name, val, sticky)
}
if (sticky)
setbitn(to->to_code, StickyTimeoutOpt);
{
for (i = 0; i <= addopts; i++)
setbitn(to->to_code + i, StickyTimeoutOpt);
}
}
/*
** INITTIMEOUTS -- parse and set timeout values

View File

@ -20,7 +20,7 @@
#ifdef _DEFINE
# define EXTERN
# ifndef lint
static char SmailId[] = "@(#)$Id: sendmail.h,v 8.517.4.64 2001/05/23 17:49:13 ca Exp $";
static char SmailId[] = "@(#)$Id: sendmail.h,v 8.517.4.69 2001/07/20 18:46:01 gshapiro Exp $";
# endif /* ! lint */
#else /* _DEFINE */
# define EXTERN extern
@ -1360,8 +1360,9 @@ extern char *validate_connection __P((SOCKADDR *, char *, ENVELOPE *));
#define SMFTO_WRITE 0 /* Timeout for sending information */
#define SMFTO_READ 1 /* Timeout waiting for a response */
#define SMFTO_EOM 2 /* Timeout for ACK/NAK to EOM */
#define SMFTO_CONNECT 3 /* Timeout for connect() */
#define SMFTO_NUM_TO 3 /* Total number of timeouts */
#define SMFTO_NUM_TO 4 /* Total number of timeouts */
struct milter
{
@ -1649,13 +1650,14 @@ do \
} while (0)
#define CHECK_CRITICAL(sig) \
do \
{ \
if (InCriticalSection > 0 && (sig) != 0) \
{ \
pend_signal((sig)); \
return SIGFUNC_RETURN; \
} \
}
} while (0)
/* reset signal in case System V semantics */
#ifdef SYS5SIGNALS
@ -2114,6 +2116,7 @@ extern SIGFUNC_DECL reapchild __P((int));
extern int releasesignal __P((int));
extern void resetlimits __P((void));
extern bool rfc822_string __P((char *));
extern FILE *safefopen __P((char *, int, int, long));
extern void savemail __P((ENVELOPE *, bool));
extern void seed_random __P((void));
extern void sendtoargv __P((char **, ENVELOPE *));
@ -2139,6 +2142,7 @@ extern int sm_getla __P((ENVELOPE *));
extern struct passwd *sm_getpwnam __P((char *));
extern struct passwd *sm_getpwuid __P((UID_T));
extern void sm_setproctitle __P((bool, ENVELOPE *, const char *, ...));
extern SIGFUNC_DECL sm_signal_noop __P((int));
extern int sm_strcasecmp __P((const char *, const char *));
extern void stop_sendmail __P((void));
extern bool strcontainedin __P((char *, char *));

View File

@ -9,7 +9,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: sfsasl.c,v 8.17.4.14 2001/05/03 17:24:16 gshapiro Exp $";
static char id[] = "@(#)$Id: sfsasl.c,v 8.17.4.15 2001/07/11 17:37:07 gshapiro Exp $";
#endif /* ! lint */
#if SFIO
@ -168,18 +168,19 @@ sfdcsasl(fin, fout, conn)
# include "sfsasl.h"
# include <openssl/err.h>
static ssize_t
# if SFIO
static ssize_t
tls_read(f, buf, size, disc)
Sfio_t *f;
Void_t *buf;
size_t size;
Sfdisc_t *disc;
# else /* SFIO */
static int
tls_read(disc, buf, size)
void *disc;
void *buf;
size_t size;
char *buf;
int size;
# endif /* SFIO */
{
int r;
@ -226,18 +227,19 @@ tls_read(disc, buf, size)
return r;
}
static ssize_t
# if SFIO
static ssize_t
tls_write(f, buf, size, disc)
Sfio_t *f;
const Void_t *buf;
size_t size;
Sfdisc_t *disc;
# else /* SFIO */
static int
tls_write(disc, buf, size)
void *disc;
const void *buf;
size_t size;
const char *buf;
int size;
# endif /* SFIO */
{
int r;

View File

@ -16,9 +16,9 @@
#ifndef lint
# if SMTP
static char id[] = "@(#)$Id: srvrsmtp.c,v 8.471.2.2.2.77 2001/05/27 22:20:30 gshapiro Exp $ (with SMTP)";
static char id[] = "@(#)$Id: srvrsmtp.c,v 8.471.2.2.2.78 2001/06/26 18:52:21 gshapiro Exp $ (with SMTP)";
# else /* SMTP */
static char id[] = "@(#)$Id: srvrsmtp.c,v 8.471.2.2.2.77 2001/05/27 22:20:30 gshapiro Exp $ (without SMTP)";
static char id[] = "@(#)$Id: srvrsmtp.c,v 8.471.2.2.2.78 2001/06/26 18:52:21 gshapiro Exp $ (without SMTP)";
# endif /* SMTP */
#endif /* ! lint */
@ -768,7 +768,7 @@ smtp(nullserver, d_flags, e)
if (bitnset(D_ETRNONLY, d_flags) &&
nullserver == NULL)
break;
continue;
/* FALLTHROUGH */
default:
if (++badcommands > MAXBADCOMMANDS)

View File

@ -15,9 +15,9 @@
#ifndef lint
# if SMTP
static char id[] = "@(#)$Id: usersmtp.c,v 8.245.4.33 2001/05/23 18:53:09 ca Exp $ (with SMTP)";
static char id[] = "@(#)$Id: usersmtp.c,v 8.245.4.34 2001/06/26 21:55:23 gshapiro Exp $ (with SMTP)";
# else /* SMTP */
static char id[] = "@(#)$Id: usersmtp.c,v 8.245.4.33 2001/05/23 18:53:09 ca Exp $ (without SMTP)";
static char id[] = "@(#)$Id: usersmtp.c,v 8.245.4.34 2001/06/26 21:55:23 gshapiro Exp $ (without SMTP)";
# endif /* SMTP */
#endif /* ! lint */
@ -1873,6 +1873,9 @@ smtpdata(m, mci, e)
if (Verbose)
nmessage(">>> .");
sm_syslog(LOG_CRIT, e->e_id,
"%.100s: SMTP DATA-1 protocol error: remote server returned response before final dot",
CurHostName);
mci->mci_errno = EIO;
mci->mci_state = MCIS_ERROR;
mci_setstat(mci, EX_PROTOCOL, "5.5.0", NULL);

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: util.c,v 8.225.2.1.2.23 2001/05/17 18:10:18 gshapiro Exp $";
static char id[] = "@(#)$Id: util.c,v 8.225.2.1.2.26 2001/06/01 08:23:25 gshapiro Exp $";
#endif /* ! lint */
#include <sendmail.h>
@ -2529,6 +2529,81 @@ proc_list_display(out)
}
}
/*
** SAFEFOPEN -- do a file open with extra checking
**
** Parameters:
** fn -- the file name to open.
** omode -- the open-style mode flags.
** cmode -- the create-style mode flags.
** sff -- safefile flags.
**
** Returns:
** Same as fopen.
*/
FILE *
safefopen(fn, omode, cmode, sff)
char *fn;
int omode;
int cmode;
long sff;
{
int fd;
int save_errno;
FILE *fp;
char *fmode;
switch (omode & O_ACCMODE)
{
case O_RDONLY:
fmode = "r";
break;
case O_WRONLY:
if (bitset(O_APPEND, omode))
fmode = "a";
else
fmode = "w";
break;
case O_RDWR:
if (bitset(O_TRUNC, omode))
fmode = "w+";
else if (bitset(O_APPEND, omode))
fmode = "a+";
else
fmode = "r+";
break;
default:
syserr("554 5.3.5 safefopen: unknown omode %o", omode);
fmode = "x";
}
fd = safeopen(fn, omode, cmode, sff);
if (fd < 0)
{
save_errno = errno;
if (tTd(44, 10))
dprintf("safefopen: safeopen failed: %s\n",
errstring(errno));
errno = save_errno;
return NULL;
}
fp = fdopen(fd, fmode);
if (fp != NULL)
return fp;
save_errno = errno;
if (tTd(44, 10))
{
dprintf("safefopen: fdopen(%s, %s) failed: omode=%x, sff=%lx, err=%s\n",
fn, fmode, omode, sff, errstring(errno));
}
(void) close(fd);
errno = save_errno;
return NULL;
}
/*
** SM_STRCASECMP -- 8-bit clean version of strcasecmp
**
** Thank you, vendors, for making this all necessary.

View File

@ -12,7 +12,7 @@
*/
#ifndef lint
static char id[] = "@(#)$Id: version.c,v 8.43.4.33 2001/05/27 21:39:21 gshapiro Exp $";
static char id[] = "@(#)$Id: version.c,v 8.43.4.37 2001/07/31 22:34:20 gshapiro Exp $";
#endif /* ! lint */
char Version[] = "8.11.4";
char Version[] = "8.11.5";

View File

@ -13,7 +13,8 @@ main(argc, argv)
r = snprintf(buf, sizeof buf, "%s", TEST_STRING);
if (buf[sizeof buf - 1] != '\0')
if (buf[sizeof buf - 1] != '\0' ||
r != strlen(TEST_STRING))
{
fprintf(stderr, "Add the following to devtools/Site/site.config.m4:\n\n");
fprintf(stderr, "APPENDDEF(`confENVDEF', `-DSNPRINTF_IS_BROKEN=1')\n\n");

View File

@ -1,4 +1,4 @@
.\" Copyright (c) 1999-2000 Sendmail, Inc. and its suppliers.
.\" Copyright (c) 1999-2001 Sendmail, Inc. and its suppliers.
.\" All rights reserved.
.\" Copyright (c) 1985, 1987, 1990, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@ -9,9 +9,9 @@
.\" the sendmail distribution.
.\"
.\"
.\" $Id: vacation.1,v 8.11.4.6 2000/12/29 18:12:23 gshapiro Exp $
.\" $Id: vacation.1,v 8.11.4.8 2001/07/20 04:19:38 gshapiro Exp $
.\"
.TH VACATION 1 "$Date: 2000/12/29 18:12:23 $"
.TH VACATION 1 "$Date: 2001/07/20 04:19:38 $"
.SH NAME
vacation
\- return ``I am not here'' indication
@ -55,7 +55,7 @@ Available options:
.TP
.BI \-a " alias"
Handle messages for
.Ar alias
.I alias
in the same manner as those received for the user's
login name.
.TP