diff options
author | gshapiro <gshapiro@FreeBSD.org> | 2001-08-01 01:33:27 +0000 |
---|---|---|
committer | gshapiro <gshapiro@FreeBSD.org> | 2001-08-01 01:33:27 +0000 |
commit | e147a0c4ede93cc9e8a78357d38ea4c6183f45ae (patch) | |
tree | 18a1edd91ee0b43a66b413b2e9efffbc1a9575f8 /contrib/sendmail | |
parent | cceec8d18104db04cf807557e3517e2bc2437b10 (diff) | |
parent | 1164bba81c60839834c20d6e34983b4cfb9c05b4 (diff) | |
download | FreeBSD-src-e147a0c4ede93cc9e8a78357d38ea4c6183f45ae.zip FreeBSD-src-e147a0c4ede93cc9e8a78357d38ea4c6183f45ae.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r80785,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/sendmail')
34 files changed, 1149 insertions, 463 deletions
diff --git a/contrib/sendmail/KNOWNBUGS b/contrib/sendmail/KNOWNBUGS index 29c6a9e..f3a42e7 100644 --- a/contrib/sendmail/KNOWNBUGS +++ b/contrib/sendmail/KNOWNBUGS @@ -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 $ diff --git a/contrib/sendmail/PGPKEYS b/contrib/sendmail/PGPKEYS index dc83764..f77e4a7 100644 --- a/contrib/sendmail/PGPKEYS +++ b/contrib/sendmail/PGPKEYS @@ -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 +e5fNjWhVJokAlQMFEDXQJ5koffu9cgNgzQEBfyoEAJ2xCThNeVvFv7PVgduPA64M +qxlVvvbYNU9or223DuBGzxtaq6ReKOyQ75rI9DCD+ACqexyc6vhMnw3scd9dklLp +QbnAZvZXv8KfsCK/jSfhtvKZzrgR907tAB8pTC/4hqqW8wzJSCNA7xuKwUn2xmNO +x31KW9iVV4rfuzumoFjBiQCVAwUQNEtdbctC+8qXRqZlAQGyAQP+I1Vu3g4HIFA9 +DLE7XS8MMSV5v4tMlmMqAl6JbROAHFSQBnjICh/tgmsMxWpkGNO0ULqxzz9ajhaE ++zLaz5dzZmMGkGRTq6t+EpqH/Aoq76BQcBlXrfjNBbtXiSHyLpn6icS8o8yjF0so +/8xil5hqsKOB18RUzcS5Dp1yul7tWz2JARUDBRA29r5pzKeeDWydB4EBAZeFB/4u +7GIeedR62RiiO0TFU8tHjOHb0QWCBiFmaKUBPa4lk6GZ9QsCfFU2ZHA7VZsY5qKO +TEMFZ7X62Krgjmd/3wbWrH075WRE8jE8M1zH3sXB7oxoEYXZM/Wfjlu0t6uRpvNN +IJZ1iLaLK/nwaw9fvr/kmVzhBVO3U89697RNn57VVUvv0L2wGxV2rrqnUvXAfFyx +r3KqNq6MRlavpi1/4O70/NwB92GrGEolWvF2zcqtZ2svo4zk+TNRG2aQKd2r2yWC +cdNtclo0POqNXUFemao563gg1LcxjHtu46MJjmiQlO5tOOk8vQuC/bAAaJYaBhKi +ixU7KTcZ+Vl+xkoRkIvNiQBGBBARAgAGBQI4Em4NAAoJEDrQbg2RZy5OYocAnj6H +pFBI+oOFLPhRE5rVvYU/DqX1AJ4n+DgI3S3t2ciZK46Xz8R9WKDPvYkARgQQEQIA +BgUCOCgEZwAKCRDlxn9lEqoIsfRnAJkBQfCeWHR/zL9EXQU3a+eBJNtBPACeI6O8 +fmtVvPHVM2PXKq5m1OiJOcG0I0VyaWMgUC4gQWxsbWFuIDxlcmljQFJlZmVyZW5j +ZS5DT00+iQCVAwUQMh5FDoBKdRD3ofcrAQGcRgQAlllzTcBv931phhYQ4tHhVUkF +2yDyvZzpOv5EjOYSqhEmqz6y7FTWqTbubNgUmnOKousa61fuEghHBJJHxEmxv951 +8eonrsbMC4ptNwUx77HHhY4z1DfV/h58tCxGx23MAAhz6vshoEPZBGC5szDOv/ZG +iMvueiMvz2wMkwEShjq0IEVyaWMgUC4gQWxsbWFuIDxlcmljQFVzZW5peC5PUkc+ +tCJFcmljIFAuIEFsbG1hbiA8ZXJpY0BTZW5kbWFpbC5PUkc+iQA/AwUQNKogGl7a +Wts5jVhQEQJDGwCfbEim+gI9X8BfEMgx+awK86Fjl2IAoI9DnIAFU4zB1dQWgCg7 +6vnXwEihiQA/AwUQNQwAQv9OLU/BcyvDEQITMwCgnylcm2XpD+xyDRXmgaZQZ7ze +JYEAoMpTevluysbysvib2bAhu4w1JMi3iQCVAwUQO1XXlXxLZ22gDhVjAQFtOgP/ +X7aWSDq6/0Zz5FNLBkwiV6z6CtnWoUCVTzJHAHWucJptOkYNr28/bv2Vm2Usz0R7 +cFR0ynZqgCe7BIylsMhEzVgOd9/iBcnYKHqlH9riQXeqAytT5vW6taKe8PdeKs1j +YDAQC354aqRsdtOZJxil7U40kVgREJ6fT3rf5vjiX7OJAJUDBRA7Vdee1uCh/k++ +Kt0BAehrA/443PDvCWcHlObzw4d75GKLRGsht6zm2iMqxgeZg2iVHMujo/opr4XR +G6J2ePvCExJFQNGOhxeXvMgEjP322llfNP3Y217UhYxEj42O0im2H4d0HB0w/UoM +TqEydUNnJ3fd2IZR/LhLBkakcdmYHdLYh6ECd3afj6YKWzpBG5oR34kAlQMFEDtX +PuLh1PwU5tB0cQEBSmYD/iezWwK1KFuVU2b9ZU7TMZqC43zXkZnVVgo5XtpPvKYD +ThP8h8PR6mE2DjDlYQYH5cljaI3kp8NSBkyO+bnOM7i9QQoYqmgka73jQHxu3vlB +qNtBT6lgW6p2lwuHJIFVVWHuRqm+LJcz2M2432STwE+Sd5/hjWMnaH7yv/CDjDu/ +tCVFcmljIFAuIEFsbG1hbiA8ZXJpY0BDUy5CZXJrZWxleS5FRFU+iQDVAwUQMT5g +jkkkqUax7f6FAQFXaQX/X1wyl9t5tJiN+X8vBpB9p+qfto/q+X0wrCa9EobVwNRP +AUt10WfcDz24vduVKE9LgXPGwGYUsDDF9fYVSsr6PLY5st50YYY3zmSk6a4wBhwz +kJ33HlGNlEYZjNhC5CoqGN41WJ6E0oi+bS1w1H4ov368BBu2WN9S1tWBKwijJeJa +pWbnClxe5+4Io0z3mxgGHJFNlz9ctJ+WGazauFkAb/usIAw+MKrQ4sghtfzto4e3 +idVAxdxbwzhH3XICqCA9iQCVAwUQL23Mt4N7eH6kQJ9lAQFtpwQAl4O7UsjFPiY/ +TQa44Ay52BKClldBfvnVh6jNForAzgsFPr+dQVD/1SXahMFnOgnVK2zW0xwlQhv9 +w9LHrQ7r5pMQSqQbJYze4MQ031BDHIgq3bZRIf4yeWGdaH0ro8SB42GejiYP+MfQ +IHSeThLA1LytnxCN/nRRkWK8Nl1DqnqJAFUDBRAvUm31HlLTF1zSxhkBAc+fAfwL +hnGFP5jYsa0eUGJ3SVZmq8P9HsH0STF82Fwp/vUxWMvILpfSujLt/8792dgcwfdr +HbG1Qq15XGsza0f4HnTBiQCVAwUQL1JtpSPkYtS/e6QhAQHQ4QP/WD/CqFA6f2Jk +npDAVOJsoUqRbAluRbOiNOwsJ/OEP4ZGfZshvqxsVJbQa8tmewjHMEAAWvQ9ueBY +1fwUenlSIAA0gSEdlNw0qxIEj9KhnU+chQq2z+RzoHuff2/9ApJwZQ7wSyw9x1vj +q8DmkHBf+IAVJ2zCdNYGRGN+iBYF7L6JAHUDBRAv4F4MapsJyFgmz40BAUMCAwCU +YvPrVm3u4EKVuWUq4g27LOid/3Xf1g7KQ+Fp8J6IjTBSs1Q1UW2RgDI7EqrCwiUs +sHSLrD+3i7NJGsgsdKL+1HBfzujdDGMP48ujZBbYkjQ+k6rSez3NkmXI3rW6SJCJ +AJUDBRAzcuWqH9vgQ8ZSyXEBAXxIA/0VUrS3TdBT5aPgApMImvP8yHH9CGfIjQ42 +48ss99nIr7DVskyq42g5EbUDTQl032iHc9eoEvvOKQ1BUauKGAvg8ZYImhHd20ZL +vPqGKt7mXJsbq1syG/Zbt4FYzwrVgwToZ1zjvjBnhOXYzjSmmjytZ9A4bLXdqr59 +59iqlrZS7IkARgQQEQIABgUCNQdMOgAKCRDoLs8E3GZQAbaGAKDnbk9Jw/E5lXrV +VVX80LQYaaHz0ACeIA+CeVw8k5hvp7JuHnKSsHHXfXqJAEYEEBECAAYFAjd5B68A +CgkQ95s4MkFJiV89ngCfX4/DFIpJDhkXE8qdpDOTQ84QS+cAoLojFqJ9QUJs0yrl +6OpY9c8BHtoFiQCVAwUQNFozOCYlQWnkamP9AQGGGwP/QA/F9UJSeJFGNriGAlhW +pdAvXxRzsHAN62nEObbX4cveQKPRilGdTofQY3a6wV2hCK3Z16MPNtRIpJgNlPYt +xbldD51ow29qfve1YrD3JwzLQp3sMots5Ly29zjlaDmbvH9m/esfV7lH72AeXNLP +NeuTOGawy4pOSqpn5E4Tc66JAEYEEBECAAYFAjs8tRIACgkQg2i7WWb7wYx+PACf +Rs3BYsCJhwfvAhsfE9u8v5WNsl0Aniyr/yzPHCHetrcfVG42jaN2azfotCJFcmlj +IFAuIEFsbG1hbiA8ZXJpY0BTZW5kbWFpbC5DT00+iQCVAwUQO1XYK9bgof5Pvird +AQG4hgP+OFSjDvSav47EOeYVR+6XvuJLzJ9YMH1TtoCDTjvaCyenCGv0fY9PMMgP +a95TW2zM6YUQgsLsrG9oVf74FKWn6eqpihZioZmZ08cHbzN2CI6rgy4ssMM7b2vi +wNZOj/zEQyXy4z5cFLbIDY7XUh+aOtLobCU5toUx7RfNE0FzCb6JAJUDBRA7Vdhb +fEtnbaAOFWMBAfQtA/990L73nWE/ooW1aQkO5YJt6txO2D/S9nkGRZVnFUvy9wX9 +xr4001BnOuIbt1PmkLpnLRmcW4gLHCmzld5u6KjeaviL6c0OSdKEJl+xfFZX12GR +3NNDLJUxxho+GC0IVaoKfZ+0cxSSfAtD7LKoNEOqyDk2140dRmc8NtyrzBtKaIkA +lQMFEDtXQF/h1PwU5tB0cQEBDU4EAMM+PnZwwXvTwR7XY/cYdj63qTcIr5u6raBr +0kLUh+MOgHUxPRdKdrOGJOMTKS2RRjzffCNK8YchqOxP9uHjxhHctVA7VQOKqcfB +MIK1Ytdm4fDjblNxl55rbhah/NwZgN9PEJ5qx6ZTg/N6WpRkwTMXVTS5bMyQac0z +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----- + +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.3 $, Last updated $Date: 2000/12/19 22:33:12 $ +$Revision: 8.5.16.4 $, Last updated $Date: 2001/07/31 22:36:18 $ diff --git a/contrib/sendmail/README b/contrib/sendmail/README index a05adc0..4188f9d 100644 --- a/contrib/sendmail/README +++ b/contrib/sendmail/README @@ -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 $ diff --git a/contrib/sendmail/RELEASE_NOTES b/contrib/sendmail/RELEASE_NOTES index c720a2f..83e5df6 100644 --- a/contrib/sendmail/RELEASE_NOTES +++ b/contrib/sendmail/RELEASE_NOTES @@ -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" diff --git a/contrib/sendmail/cf/README b/contrib/sendmail/cf/README index 4e68134..d50bfd4 100644 --- a/contrib/sendmail/cf/README +++ b/contrib/sendmail/cf/README @@ -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 $ diff --git a/contrib/sendmail/cf/cf/generic-hpux10.mc b/contrib/sendmail/cf/cf/generic-hpux10.mc index 4db6687..d205869 100644 --- a/contrib/sendmail/cf/cf/generic-hpux10.mc +++ b/contrib/sendmail/cf/cf/generic-hpux10.mc @@ -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 diff --git a/contrib/sendmail/cf/m4/proto.m4 b/contrib/sendmail/cf/m4/proto.m4 index 4f10e4c..d8a1641 100644 --- a/contrib/sendmail/cf/m4/proto.m4 +++ b/contrib/sendmail/cf/m4/proto.m4 @@ -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> diff --git a/contrib/sendmail/cf/m4/version.m4 b/contrib/sendmail/cf/m4/version.m4 index 98afcb6..e04d15e 100644 --- a/contrib/sendmail/cf/m4/version.m4 +++ b/contrib/sendmail/cf/m4/version.m4 @@ -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') diff --git a/contrib/sendmail/doc/op/Makefile b/contrib/sendmail/doc/op/Makefile index 4b3644d..e339113 100644 --- a/contrib/sendmail/doc/op/Makefile +++ b/contrib/sendmail/doc/op/Makefile @@ -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 diff --git a/contrib/sendmail/doc/op/op.me b/contrib/sendmail/doc/op/op.me index 591ac01..0c0edeb 100644 --- a/contrib/sendmail/doc/op/op.me +++ b/contrib/sendmail/doc/op/op.me @@ -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 diff --git a/contrib/sendmail/include/libmilter/milter.h b/contrib/sendmail/include/libmilter/milter.h index f4c9f27..ef54852 100644 --- a/contrib/sendmail/include/libmilter/milter.h +++ b/contrib/sendmail/include/libmilter/milter.h @@ -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 $ */ /* diff --git a/contrib/sendmail/include/sendmail/sendmail.h b/contrib/sendmail/include/sendmail/sendmail.h index a075709..395b895 100644 --- a/contrib/sendmail/include/sendmail/sendmail.h +++ b/contrib/sendmail/include/sendmail/sendmail.h @@ -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 *)); diff --git a/contrib/sendmail/libmilter/README b/contrib/sendmail/libmilter/README index 461d64f..3eae861 100644 --- a/contrib/sendmail/libmilter/README +++ b/contrib/sendmail/libmilter/README @@ -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 $ diff --git a/contrib/sendmail/libmilter/libmilter.h b/contrib/sendmail/libmilter/libmilter.h index 886cc4d..49ac70f 100644 --- a/contrib/sendmail/libmilter/libmilter.h +++ b/contrib/sendmail/libmilter/libmilter.h @@ -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 diff --git a/contrib/sendmail/libmilter/sm_gethost.c b/contrib/sendmail/libmilter/sm_gethost.c index a4fc665..c1e80b1 100644 --- a/contrib/sendmail/libmilter/sm_gethost.c +++ b/contrib/sendmail/libmilter/sm_gethost.c @@ -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); diff --git a/contrib/sendmail/libsmutil/safefile.c b/contrib/sendmail/libsmutil/safefile.c index ceee53a..3a757f3 100644 --- a/contrib/sendmail/libsmutil/safefile.c +++ b/contrib/sendmail/libsmutil/safefile.c @@ -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: diff --git a/contrib/sendmail/libsmutil/snprintf.c b/contrib/sendmail/libsmutil/snprintf.c index 9621a16..7a2aabc 100644 --- a/contrib/sendmail/libsmutil/snprintf.c +++ b/contrib/sendmail/libsmutil/snprintf.c @@ -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; } /* diff --git a/contrib/sendmail/src/README b/contrib/sendmail/src/README index 53380d5..3b9f0f9 100644 --- a/contrib/sendmail/src/README +++ b/contrib/sendmail/src/README @@ -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 $ ) diff --git a/contrib/sendmail/src/clock.c b/contrib/sendmail/src/clock.c index bf5ef1c..1a36478 100644 --- a/contrib/sendmail/src/clock.c +++ b/contrib/sendmail/src/clock.c @@ -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 diff --git a/contrib/sendmail/src/collect.c b/contrib/sendmail/src/collect.c index e9a2006..fcf3117 100644 --- a/contrib/sendmail/src/collect.c +++ b/contrib/sendmail/src/collect.c @@ -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 @@ bufferchar: { *bp++ = c; hdrslen++; - if (MaxHeadersLength > 0 && + if (!headeronly && + MaxHeadersLength > 0 && hdrslen > MaxHeadersLength) { sm_syslog(LOG_NOTICE, e->e_id, diff --git a/contrib/sendmail/src/daemon.c b/contrib/sendmail/src/daemon.c index 1fdd3d7..954d253 100644 --- a/contrib/sendmail/src/daemon.c +++ b/contrib/sendmail/src/daemon.c @@ -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 diff --git a/contrib/sendmail/src/deliver.c b/contrib/sendmail/src/deliver.c index 347b7a5..70b774d 100644 --- a/contrib/sendmail/src/deliver.c +++ b/contrib/sendmail/src/deliver.c @@ -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 @@ tryhost: 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 @@ tryhost: (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 @@ tryhost: /* 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 @@ tryhost: 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) diff --git a/contrib/sendmail/src/main.c b/contrib/sendmail/src/main.c index 34d5041..c09daa5 100644 --- a/contrib/sendmail/src/main.c +++ b/contrib/sendmail/src/main.c @@ -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 ** diff --git a/contrib/sendmail/src/map.c b/contrib/sendmail/src/map.c index fc0d07f..04b040f 100644 --- a/contrib/sendmail/src/map.c +++ b/contrib/sendmail/src/map.c @@ -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 ** diff --git a/contrib/sendmail/src/milter.c b/contrib/sendmail/src/milter.c index f4ce5b8..5d5d260 100644 --- a/contrib/sendmail/src/milter.c +++ b/contrib/sendmail/src/milter.c @@ -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); diff --git a/contrib/sendmail/src/queue.c b/contrib/sendmail/src/queue.c index 6a66cf6..aeed7f9 100644 --- a/contrib/sendmail/src/queue.c +++ b/contrib/sendmail/src/queue.c @@ -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 { diff --git a/contrib/sendmail/src/readcf.c b/contrib/sendmail/src/readcf.c index f8aefd1..cb1923b 100644 --- a/contrib/sendmail/src/readcf.c +++ b/contrib/sendmail/src/readcf.c @@ -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 diff --git a/contrib/sendmail/src/sendmail.h b/contrib/sendmail/src/sendmail.h index 17f379f..1ead2de 100644 --- a/contrib/sendmail/src/sendmail.h +++ b/contrib/sendmail/src/sendmail.h @@ -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 *)); diff --git a/contrib/sendmail/src/sfsasl.c b/contrib/sendmail/src/sfsasl.c index 17e90be..8ac3428 100644 --- a/contrib/sendmail/src/sfsasl.c +++ b/contrib/sendmail/src/sfsasl.c @@ -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; diff --git a/contrib/sendmail/src/srvrsmtp.c b/contrib/sendmail/src/srvrsmtp.c index f655565..89bcb0c 100644 --- a/contrib/sendmail/src/srvrsmtp.c +++ b/contrib/sendmail/src/srvrsmtp.c @@ -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) diff --git a/contrib/sendmail/src/usersmtp.c b/contrib/sendmail/src/usersmtp.c index a1aeac5..a9476fe 100644 --- a/contrib/sendmail/src/usersmtp.c +++ b/contrib/sendmail/src/usersmtp.c @@ -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); diff --git a/contrib/sendmail/src/util.c b/contrib/sendmail/src/util.c index f023865..2017211 100644 --- a/contrib/sendmail/src/util.c +++ b/contrib/sendmail/src/util.c @@ -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. diff --git a/contrib/sendmail/src/version.c b/contrib/sendmail/src/version.c index 3b4c4e8..ac05788 100644 --- a/contrib/sendmail/src/version.c +++ b/contrib/sendmail/src/version.c @@ -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"; diff --git a/contrib/sendmail/test/t_snprintf.c b/contrib/sendmail/test/t_snprintf.c index 4789f49..3117af5 100644 --- a/contrib/sendmail/test/t_snprintf.c +++ b/contrib/sendmail/test/t_snprintf.c @@ -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"); |