Import sendmail 8.12.11
This commit is contained in:
parent
96b960fca6
commit
238623a020
@ -88,6 +88,76 @@ y+PVZ1MwnEXfTQReVSla0AAOIRirHEh4YnUVZzFSNEJqoDRZQwVd7Q==
|
|||||||
=shxn
|
=shxn
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
Type Bits KeyID Created Expires Algorithm Use
|
||||||
|
pub 1024 0x95F61771 2003-12-10 ---------- RSA Sign & Encrypt
|
||||||
|
Key fingerprint = 46 FE 81 99 48 75 30 B1 3E A9 79 43 BB 78 C1 D4
|
||||||
|
uid Sendmail Signing Key/2004 <sendmail@Sendmail.ORG>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1.2.3 (OpenBSD)
|
||||||
|
|
||||||
|
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
|
||||||
|
=CNJY
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
Type Bits KeyID Created Expires Algorithm Use
|
Type Bits KeyID Created Expires Algorithm Use
|
||||||
pub 1024 0x396F0789 2003-01-15 ---------- RSA Sign & Encrypt
|
pub 1024 0x396F0789 2003-01-15 ---------- RSA Sign & Encrypt
|
||||||
Key fingerprint = C4 73 DF 4A 97 9C 27 A9 EE 4F B2 BD 55 B5 E0 0F
|
Key fingerprint = C4 73 DF 4A 97 9C 27 A9 EE 4F B2 BD 55 B5 E0 0F
|
||||||
@ -952,4 +1022,4 @@ SIXqPke2iCW6+zdG1T/gS5T9T9/Lf2c9FQf0FjURAi3ynDA2RBLA5FDsI8v3
|
|||||||
=dbDm
|
=dbDm
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
$Revision: 8.13.2.2 $, Last updated $Date: 2003/01/15 01:55:04 $
|
$Revision: 8.13.2.4 $, Last updated $Date: 2004/01/13 21:18:06 $
|
||||||
|
@ -1,12 +1,74 @@
|
|||||||
SENDMAIL RELEASE NOTES
|
SENDMAIL RELEASE NOTES
|
||||||
$Id: RELEASE_NOTES,v 8.1340.2.165 2003/09/16 20:50:42 ca Exp $
|
$Id: RELEASE_NOTES,v 8.1340.2.189 2004/01/18 17:50:57 ca Exp $
|
||||||
|
|
||||||
|
|
||||||
This listing shows the version of the sendmail binary, the version
|
This listing shows the version of the sendmail binary, the version
|
||||||
of the sendmail configuration files, the date of release, and a
|
of the sendmail configuration files, the date of release, and a
|
||||||
summary of the changes in that release.
|
summary of the changes in that release.
|
||||||
|
|
||||||
8.12.10/8.12.10 2003/09/24
|
8.12.11/8.12.11 2004/01/18
|
||||||
|
Use QueueFileMode when opening qf files. This error was a
|
||||||
|
regression in 8.12.10. Problem detected and diagnosed
|
||||||
|
Lech Szychowski of the Polish Power Grid Company.
|
||||||
|
Properly count the number of queue runners in a work group and
|
||||||
|
make sure the total limit of MaxQueueChildren is not
|
||||||
|
exceeded. Based on patch from Takayuki Yoshizawa of
|
||||||
|
Techfirm, Inc.
|
||||||
|
Take care of systems that can generate time values where the
|
||||||
|
seconds can exceed the usual range of 0 to 59.
|
||||||
|
Problem noted by Randy Diffenderfer of EDS.
|
||||||
|
Avoid regeneration of identical queue identifiers by processes
|
||||||
|
whose process id is the same as that of the initial
|
||||||
|
sendmail process that was used to start the daemon.
|
||||||
|
Problem noted by Randy Diffenderfer of EDS.
|
||||||
|
When a milter invokes smfi_delrcpt() compare the supplied
|
||||||
|
recipient address also against the printable addresses
|
||||||
|
of the current list to deal with rewritten addresses.
|
||||||
|
Based on patch from Sean Hanson of The Asylum.
|
||||||
|
BadRcptThrottle now also works for addresses which return the
|
||||||
|
error mailer, e.g., virtusertable entries with the
|
||||||
|
right hand side error:. Patch from Per Hedeland.
|
||||||
|
Fix printing of 8 bit characters as octals in log messages.
|
||||||
|
Based on patch by Andrey J. Melnikoff.
|
||||||
|
Undo change of algorithm for MIME 7-bit base64 encoding to 8-bit
|
||||||
|
text that has been introduced in 8.12.3. There are some
|
||||||
|
examples where the new code fails, but the old code works.
|
||||||
|
To get the 8.12.3-8.12.10 version, compile sendmail with
|
||||||
|
-DMIME7TO8_OLD=0. If you have an example of improper
|
||||||
|
7 to 8 bit conversion please send it to us.
|
||||||
|
Return normal error code for unknown SMTP commands instead of
|
||||||
|
the one specified by check_relay or a milter for a
|
||||||
|
connection. Problem noted by Andrzej Filip.
|
||||||
|
Some ident responses contain data after the terminating CRLF which
|
||||||
|
causes sendmail to log "POSSIBLE ATTACK...newline in string".
|
||||||
|
To avoid this everything after LF is ignored.
|
||||||
|
If the operating system supports O_EXLOCK and HASFLOCK is set
|
||||||
|
then a possible race condition for creating qf files
|
||||||
|
can be avoided. Note: the race condition does not
|
||||||
|
exist within sendmail, but between sendmail and an
|
||||||
|
external application that accesses qf files.
|
||||||
|
Log the proper options name for TLS related mising files for
|
||||||
|
the CACertPath, CACertFile, and DHParameters options.
|
||||||
|
Do not split an envelope if it will be discarded, otherwise df
|
||||||
|
files could be left behind. Problem found by Wolfgang
|
||||||
|
Breyha.
|
||||||
|
The use of the environment variables HOME and HOSTALIASES has been
|
||||||
|
deprecated and will be removed in version 8.13. This only
|
||||||
|
effects configuration which preserve those variable via the
|
||||||
|
'E' command in the cf file as sendmail clears out its entire
|
||||||
|
environment.
|
||||||
|
Portability:
|
||||||
|
Add support for Darwin 7.0/Mac OS X 10.3 (a.k.a. Panther).
|
||||||
|
Solaris 10 has unsetenv(), patch from Craig Mohrman of
|
||||||
|
Sun Microsystems.
|
||||||
|
LIBMILTER: Add extra checks in case a broken MTA sends bogus data
|
||||||
|
to libmilter. Based on code review by Rob Grzywinski.
|
||||||
|
SMRSH: Properly assemble commands that contain '&&' or '||'.
|
||||||
|
Problem noted by Eric Lee of Talking Heads.
|
||||||
|
New Files:
|
||||||
|
devtools/OS/Darwin.7.0
|
||||||
|
|
||||||
|
8.12.10/8.12.10 2003/09/24 (Released: 2003/09/17)
|
||||||
SECURITY: Fix a buffer overflow in address parsing. Problem
|
SECURITY: Fix a buffer overflow in address parsing. Problem
|
||||||
detected by Michal Zalewski, patch from Todd C. Miller
|
detected by Michal Zalewski, patch from Todd C. Miller
|
||||||
of Courtesan Consulting.
|
of Courtesan Consulting.
|
||||||
|
@ -2591,9 +2591,9 @@ my.domain and you have
|
|||||||
|
|
||||||
my.domain RELAY
|
my.domain RELAY
|
||||||
|
|
||||||
in the access map, then all e-mail with a sender address of
|
in the access map, then any e-mail with a sender address of
|
||||||
<user@my.domain> gets through, even if check_relay would reject it
|
<user@my.domain> will not be rejected by check_relay even though
|
||||||
(e.g., based on the hostname or IP address). This allows spammers
|
it would match the hostname or IP address. This allows spammers
|
||||||
to get around DNS based blacklist by faking the sender address. To
|
to get around DNS based blacklist by faking the sender address. To
|
||||||
avoid this problem you have to use tagged entries:
|
avoid this problem you have to use tagged entries:
|
||||||
|
|
||||||
@ -3858,11 +3858,11 @@ confMAX_RCPTS_PER_MESSAGE MaxRecipientsPerMessage
|
|||||||
receive a 452 error code (i.e., they
|
receive a 452 error code (i.e., they
|
||||||
are deferred for the next delivery
|
are deferred for the next delivery
|
||||||
attempt).
|
attempt).
|
||||||
confBAD_RCPT_THROTTLE BadRcptThrottle [infinite] If set and more than the
|
confBAD_RCPT_THROTTLE BadRcptThrottle [infinite] If set and the specified
|
||||||
specified number of recipients in an
|
number of recipients in a single SMTP
|
||||||
envelope are rejected, sleep for one
|
transaction have been rejected, sleep
|
||||||
second after each rejected RCPT
|
for one second after each subsequent
|
||||||
command.
|
RCPT command in that transaction.
|
||||||
confDONT_PROBE_INTERFACES DontProbeInterfaces
|
confDONT_PROBE_INTERFACES DontProbeInterfaces
|
||||||
[False] If set, sendmail will _not_
|
[False] If set, sendmail will _not_
|
||||||
insert the names and addresses of any
|
insert the names and addresses of any
|
||||||
@ -4375,4 +4375,4 @@ M4 DIVERSIONS
|
|||||||
8 DNS based blacklists
|
8 DNS based blacklists
|
||||||
9 special local rulesets (1 and 2)
|
9 special local rulesets (1 and 2)
|
||||||
|
|
||||||
$Revision: 8.623.2.25 $, Last updated $Date: 2003/06/18 18:47:21 $
|
$Revision: 8.623.2.27 $, Last updated $Date: 2004/01/11 17:58:25 $
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
######################################################################
|
######################################################################
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
##### $Id: cfhead.m4,v 8.108.2.3 2003/04/03 17:51:51 ca Exp $ #####
|
##### $Id: cfhead.m4,v 8.108.2.6 2003/12/05 02:26:47 ca Exp $ #####
|
||||||
##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ #####
|
##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ #####
|
||||||
##### $Id: submit.mc,v 8.6.2.7 2003/09/10 22:11:56 ca Exp $ #####
|
##### $Id: submit.mc,v 8.6.2.7 2003/09/10 22:11:56 ca Exp $ #####
|
||||||
##### $Id: msp.m4,v 1.32 2002/03/26 22:02:03 ca Exp $ #####
|
##### $Id: msp.m4,v 1.32 2002/03/26 22:02:03 ca Exp $ #####
|
||||||
@ -32,7 +32,7 @@
|
|||||||
##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ #####
|
##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ #####
|
||||||
|
|
||||||
|
|
||||||
##### $Id: proto.m4,v 8.649.2.24 2003/08/04 21:14:26 ca Exp $ #####
|
##### $Id: proto.m4,v 8.649.2.30 2004/01/11 17:54:06 ca Exp $ #####
|
||||||
|
|
||||||
# level 10 config file format
|
# level 10 config file format
|
||||||
V10/Berkeley
|
V10/Berkeley
|
||||||
@ -60,6 +60,7 @@ Cwlocalhost
|
|||||||
# ... define this only if sendmail cannot automatically determine your domain
|
# ... define this only if sendmail cannot automatically determine your domain
|
||||||
#Dj$w.Foo.COM
|
#Dj$w.Foo.COM
|
||||||
|
|
||||||
|
# host/domain names ending with a token in class P are canonical
|
||||||
CP.
|
CP.
|
||||||
|
|
||||||
# "Smart" relay host (may be null)
|
# "Smart" relay host (may be null)
|
||||||
@ -110,7 +111,7 @@ D{MTAHost}[127.0.0.1]
|
|||||||
|
|
||||||
|
|
||||||
# Configuration version number
|
# Configuration version number
|
||||||
DZ8.12.10/Submit
|
DZ8.12.11/Submit
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
@ -276,7 +277,7 @@ O QueueDirectory=/var/spool/clientmqueue
|
|||||||
#O Timeout.quit=2m
|
#O Timeout.quit=2m
|
||||||
#O Timeout.misc=2m
|
#O Timeout.misc=2m
|
||||||
#O Timeout.command=1h
|
#O Timeout.command=1h
|
||||||
#O Timeout.ident=5s
|
O Timeout.ident=0
|
||||||
#O Timeout.fileopen=60s
|
#O Timeout.fileopen=60s
|
||||||
#O Timeout.control=2m
|
#O Timeout.control=2m
|
||||||
O Timeout.queuereturn=5d
|
O Timeout.queuereturn=5d
|
||||||
|
@ -305,4 +305,4 @@ define(`confMILTER_MACROS_ENVRCPT', ``{rcpt_mailer}, {rcpt_host}, {rcpt_addr}'')
|
|||||||
|
|
||||||
|
|
||||||
divert(0)dnl
|
divert(0)dnl
|
||||||
VERSIONID(`$Id: cfhead.m4,v 8.108.2.3 2003/04/03 17:51:51 ca Exp $')
|
VERSIONID(`$Id: cfhead.m4,v 8.108.2.6 2003/12/05 02:26:47 ca Exp $')
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
divert(-1)
|
divert(-1)
|
||||||
#
|
#
|
||||||
# Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
# Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.
|
# Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.
|
||||||
# Copyright (c) 1988, 1993
|
# Copyright (c) 1988, 1993
|
||||||
@ -13,7 +13,7 @@ divert(-1)
|
|||||||
#
|
#
|
||||||
divert(0)
|
divert(0)
|
||||||
|
|
||||||
VERSIONID(`$Id: proto.m4,v 8.649.2.24 2003/08/04 21:14:26 ca Exp $')
|
VERSIONID(`$Id: proto.m4,v 8.649.2.30 2004/01/11 17:54:06 ca Exp $')
|
||||||
|
|
||||||
# level CF_LEVEL config file format
|
# level CF_LEVEL config file format
|
||||||
V`'CF_LEVEL/ifdef(`VENDOR_NAME', `VENDOR_NAME', `Berkeley')
|
V`'CF_LEVEL/ifdef(`VENDOR_NAME', `VENDOR_NAME', `Berkeley')
|
||||||
@ -111,6 +111,7 @@ Fw`'confCW_FILE',
|
|||||||
# ... `define' this only if sendmail cannot automatically determine your domain
|
# ... `define' this only if sendmail cannot automatically determine your domain
|
||||||
ifdef(`confDOMAIN_NAME', `Dj`'confDOMAIN_NAME', `#Dj$w.Foo.COM')
|
ifdef(`confDOMAIN_NAME', `Dj`'confDOMAIN_NAME', `#Dj$w.Foo.COM')
|
||||||
|
|
||||||
|
# host/domain names ending with a token in class P are canonical
|
||||||
CP.
|
CP.
|
||||||
|
|
||||||
ifdef(`UUCP_RELAY',
|
ifdef(`UUCP_RELAY',
|
||||||
@ -633,7 +634,8 @@ _OPTION(Milter.LogLevel, `confMILTER_LOG_LEVEL', `')
|
|||||||
_OPTION(Milter.macros.connect, `confMILTER_MACROS_CONNECT', `')
|
_OPTION(Milter.macros.connect, `confMILTER_MACROS_CONNECT', `')
|
||||||
_OPTION(Milter.macros.helo, `confMILTER_MACROS_HELO', `')
|
_OPTION(Milter.macros.helo, `confMILTER_MACROS_HELO', `')
|
||||||
_OPTION(Milter.macros.envfrom, `confMILTER_MACROS_ENVFROM', `')
|
_OPTION(Milter.macros.envfrom, `confMILTER_MACROS_ENVFROM', `')
|
||||||
_OPTION(Milter.macros.envrcpt, `confMILTER_MACROS_ENVRCPT', `')')
|
_OPTION(Milter.macros.envrcpt, `confMILTER_MACROS_ENVRCPT', `')
|
||||||
|
')
|
||||||
|
|
||||||
# CA directory
|
# CA directory
|
||||||
_OPTION(CACertPath, `confCACERT_PATH', `')
|
_OPTION(CACertPath, `confCACERT_PATH', `')
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
divert(-1)
|
divert(-1)
|
||||||
#
|
#
|
||||||
# Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
|
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
|
||||||
# Copyright (c) 1988, 1993
|
# Copyright (c) 1988, 1993
|
||||||
@ -11,8 +11,8 @@ divert(-1)
|
|||||||
# the sendmail distribution.
|
# the sendmail distribution.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
VERSIONID(`$Id: version.m4,v 8.92.2.22 2003/09/16 20:02:05 ca Exp $')
|
VERSIONID(`$Id: version.m4,v 8.92.2.26 2004/01/13 00:29:26 ca Exp $')
|
||||||
#
|
#
|
||||||
divert(0)
|
divert(0)
|
||||||
# Configuration version number
|
# Configuration version number
|
||||||
DZ8.12.10`'ifdef(`confCF_VERSION', `/confCF_VERSION')
|
DZ8.12.11`'ifdef(`confCF_VERSION', `/confCF_VERSION')
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
.\" the sendmail distribution.
|
.\" the sendmail distribution.
|
||||||
.\"
|
.\"
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: op.me,v 8.609.2.26 2003/07/28 21:54:53 ca Exp $
|
.\" $Id: op.me,v 8.609.2.29 2004/01/11 17:58:24 ca Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" eqn op.me | pic | troff -me
|
.\" eqn op.me | pic | troff -me
|
||||||
.\"
|
.\"
|
||||||
@ -90,7 +90,7 @@ Sendmail, Inc.
|
|||||||
.de Ve
|
.de Ve
|
||||||
Version \\$2
|
Version \\$2
|
||||||
..
|
..
|
||||||
.Ve $Revision: 8.609.2.26 $
|
.Ve $Revision: 8.609.2.29 $
|
||||||
.rm Ve
|
.rm Ve
|
||||||
.sp
|
.sp
|
||||||
For Sendmail Version 8.12
|
For Sendmail Version 8.12
|
||||||
@ -1125,7 +1125,7 @@ that some sites might want.
|
|||||||
A complete description of the log levels
|
A complete description of the log levels
|
||||||
is given in section
|
is given in section
|
||||||
.\" XREF
|
.\" XREF
|
||||||
4.6.
|
4.7.
|
||||||
.sh 2 "Dumping State"
|
.sh 2 "Dumping State"
|
||||||
.pp
|
.pp
|
||||||
You can ask
|
You can ask
|
||||||
@ -3025,7 +3025,7 @@ alias files,
|
|||||||
:include: files,
|
:include: files,
|
||||||
and external databases)
|
and external databases)
|
||||||
must be readable by that user.
|
must be readable by that user.
|
||||||
Also, since sendmail will not be able to change it's uid,
|
Also, since sendmail will not be able to change its uid,
|
||||||
delivery to programs or files will be marked as unsafe,
|
delivery to programs or files will be marked as unsafe,
|
||||||
e.g., undeliverable,
|
e.g., undeliverable,
|
||||||
in
|
in
|
||||||
@ -6227,8 +6227,9 @@ selected SASL mechanisms.
|
|||||||
Explanations of these properties can be found in the Cyrus SASL documentation.
|
Explanations of these properties can be found in the Cyrus SASL documentation.
|
||||||
.ip BadRcptThrottle=\fIN\fP
|
.ip BadRcptThrottle=\fIN\fP
|
||||||
[no short name]
|
[no short name]
|
||||||
If set and more than the specified number of recipients in a single SMTP
|
If set and the specified number of recipients in a single SMTP
|
||||||
envelope are rejected, sleep for one second after each rejected RCPT command.
|
transaction have been rejected, sleep for one second after each subsequent
|
||||||
|
RCPT command in that transaction.
|
||||||
.ip BlankSub=\fIc\fP
|
.ip BlankSub=\fIc\fP
|
||||||
[B]
|
[B]
|
||||||
Set the blank substitution character to
|
Set the blank substitution character to
|
||||||
@ -10767,7 +10768,7 @@ replace it with a blank sheet for double-sided output.
|
|||||||
.\".sz 10
|
.\".sz 10
|
||||||
.\"Eric Allman
|
.\"Eric Allman
|
||||||
.\".sp
|
.\".sp
|
||||||
.\"Version $Revision: 8.609.2.26 $
|
.\"Version $Revision: 8.609.2.29 $
|
||||||
.\".ce 0
|
.\".ce 0
|
||||||
.bp 3
|
.bp 3
|
||||||
.ce
|
.ce
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* the sendmail distribution.
|
* the sendmail distribution.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* $Id: mfapi.h,v 8.44.2.3 2002/12/19 02:10:09 ca Exp $
|
* $Id: mfapi.h,v 8.44.2.4 2003/10/20 21:51:49 msk Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -108,7 +108,7 @@ struct smfiDesc
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if _FFR_SMFI_OPENSOCKET
|
#if _FFR_SMFI_OPENSOCKET
|
||||||
LIBMILTER_API int smfi_opensocket __P((void));
|
LIBMILTER_API int smfi_opensocket __P((bool));
|
||||||
#endif /* _FFR_SMFI_OPENSOCKET */
|
#endif /* _FFR_SMFI_OPENSOCKET */
|
||||||
LIBMILTER_API int smfi_register __P((struct smfiDesc));
|
LIBMILTER_API int smfi_register __P((struct smfiDesc));
|
||||||
LIBMILTER_API int smfi_main __P((void));
|
LIBMILTER_API int smfi_main __P((void));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1999-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* By using this file, you agree to the terms and conditions set
|
* By using this file, you agree to the terms and conditions set
|
||||||
@ -7,7 +7,7 @@
|
|||||||
* the sendmail distribution.
|
* the sendmail distribution.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* $Id: milter.h,v 8.37.2.1 2002/12/19 02:10:09 ca Exp $
|
* $Id: milter.h,v 8.37.2.3 2003/12/02 00:19:51 msk Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -25,7 +25,11 @@
|
|||||||
typedef pthread_t sthread_t;
|
typedef pthread_t sthread_t;
|
||||||
typedef int socket_t;
|
typedef int socket_t;
|
||||||
|
|
||||||
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
# define MAX_MACROS_ENTRIES 5 /* max size of macro pointer array */
|
||||||
|
#else /* _FFR_MILTER_MACROS_EOM */
|
||||||
# define MAX_MACROS_ENTRIES 4 /* max size of macro pointer array */
|
# define MAX_MACROS_ENTRIES 4 /* max size of macro pointer array */
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** context for milter
|
** context for milter
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* forth in the LICENSE file which can be found at the top level of
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
* the sendmail distribution.
|
* the sendmail distribution.
|
||||||
*
|
*
|
||||||
* $Id: cdefs.h,v 1.15 2002/01/16 18:30:11 ca Exp $
|
* $Id: cdefs.h,v 1.15.2.1 2003/12/05 22:44:17 ca Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -67,11 +67,14 @@
|
|||||||
# if __GNUC__ >= 2
|
# if __GNUC__ >= 2
|
||||||
# if __GNUC__ == 2 && __GNUC_MINOR__ < 5
|
# if __GNUC__ == 2 && __GNUC_MINOR__ < 5
|
||||||
# define SM_DEAD(proto) volatile proto
|
# define SM_DEAD(proto) volatile proto
|
||||||
|
# define SM_DEAD_D volatile
|
||||||
# else /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */
|
# else /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */
|
||||||
# define SM_DEAD(proto) proto __attribute__((__noreturn__))
|
# define SM_DEAD(proto) proto __attribute__((__noreturn__))
|
||||||
|
# define SM_DEAD_D
|
||||||
# endif /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */
|
# endif /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */
|
||||||
# else /* __GNUC__ >= 2 */
|
# else /* __GNUC__ >= 2 */
|
||||||
# define SM_DEAD(proto) proto
|
# define SM_DEAD(proto) proto
|
||||||
|
# define SM_DEAD_D
|
||||||
# endif /* __GNUC__ >= 2 */
|
# endif /* __GNUC__ >= 2 */
|
||||||
# endif /* SM_DEAD */
|
# endif /* SM_DEAD */
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -10,7 +10,7 @@
|
|||||||
* the sendmail distribution.
|
* the sendmail distribution.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* $Id: conf.h,v 1.90.2.18 2003/08/20 22:27:44 ca Exp $
|
* $Id: conf.h,v 1.90.2.20 2004/01/07 00:52:16 ca Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -437,6 +437,9 @@ typedef int pid_t;
|
|||||||
# if SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209)
|
# if SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209)
|
||||||
# define HASURANDOMDEV 1 /* /dev/[u]random added in S9 */
|
# define HASURANDOMDEV 1 /* /dev/[u]random added in S9 */
|
||||||
# endif /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */
|
# endif /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */
|
||||||
|
# if SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210)
|
||||||
|
# define HASUNSETENV 1 /* unsetenv() added in S10 */
|
||||||
|
# endif /* SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210) */
|
||||||
# ifndef HASGETUSERSHELL
|
# ifndef HASGETUSERSHELL
|
||||||
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */
|
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */
|
||||||
# endif /* ! HASGETUSERSHELL */
|
# endif /* ! HASGETUSERSHELL */
|
||||||
@ -2254,8 +2257,8 @@ typedef struct msgb mblk_t;
|
|||||||
# undef HAVE_SYS_ERRLIST
|
# undef HAVE_SYS_ERRLIST
|
||||||
# define sys_errlist __sys_errlist
|
# define sys_errlist __sys_errlist
|
||||||
# define sys_nerr __sys_nerr
|
# define sys_nerr __sys_nerr
|
||||||
# define major(dev) ((int)(((dev) >> 8) & 0xff)
|
# define major(dev) ((int)(((dev) >> 8) & 0xff))
|
||||||
# define minor(dev) ((int)((dev) & 0xff)
|
# define minor(dev) ((int)((dev) & 0xff))
|
||||||
# endif /* defined(__INTERIX) */
|
# endif /* defined(__INTERIX) */
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ Add a recipient for the current message.
|
|||||||
|
|
||||||
<td>smfi_addrcpt will fail and return MI_FAILURE if:
|
<td>smfi_addrcpt will fail and return MI_FAILURE if:
|
||||||
<ul><li>rcpt is NULL.
|
<ul><li>rcpt is NULL.
|
||||||
<li>Adding headers in the current connection state is invalid.
|
<li>Adding recipients in the current connection state is invalid.
|
||||||
<li>A network error occurs.
|
<li>A network error occurs.
|
||||||
<li>SMFIF_ADDRCPT was not set when <a href="smfi_register.html">smfi_register</a> was called.
|
<li>SMFIF_ADDRCPT was not set when <a href="smfi_register.html">smfi_register</a> was called.
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -49,7 +49,7 @@ Remove a recipient from the current message's envelope.
|
|||||||
<td>smfi_delrcpt will fail and return MI_FAILURE if:
|
<td>smfi_delrcpt will fail and return MI_FAILURE if:
|
||||||
<ul>
|
<ul>
|
||||||
<li>rcpt is NULL.
|
<li>rcpt is NULL.
|
||||||
<li>Adding headers in the current connection state is invalid.
|
<li>Deleting recipients in the current connection state is invalid.
|
||||||
<li>A network error occurs.
|
<li>A network error occurs.
|
||||||
<li>SMFIF_DELRCPT was not set when <a href="smfi_register.html">smfi_register</a> was called.
|
<li>SMFIF_DELRCPT was not set when <a href="smfi_register.html">smfi_register</a> was called.
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -75,6 +75,12 @@ Otherwise, it return MI_SUCCESS.
|
|||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Values passed to smfi_setreply are not checked for standards compliance.
|
<li>Values passed to smfi_setreply are not checked for standards compliance.
|
||||||
|
<li>The message parameter should contain only printable characters,
|
||||||
|
other characters may lead to undefined behavior.
|
||||||
|
For example, CR or LF will cause the call to fail,
|
||||||
|
single '%' characters will cause the text to be ignored
|
||||||
|
(if there really should be a '%' in the string,
|
||||||
|
use '%%' just like for <tt>printf(3)</tt>).
|
||||||
<li>For details about reply codes and their meanings, please see RFC's
|
<li>For details about reply codes and their meanings, please see RFC's
|
||||||
<a href="http://www.rfc-editor.org/rfc/rfc821.txt">821</a>/
|
<a href="http://www.rfc-editor.org/rfc/rfc821.txt">821</a>/
|
||||||
<a href="http://www.rfc-editor.org/rfc/rfc2821.txt">2821</a>
|
<a href="http://www.rfc-editor.org/rfc/rfc2821.txt">2821</a>
|
||||||
|
@ -62,11 +62,29 @@ is passed to smfi_register().
|
|||||||
<td><table border="1" cellspacing=0>
|
<td><table border="1" cellspacing=0>
|
||||||
<tr bgcolor="#dddddd"><th>Return value</th><th>Description</th></tr>
|
<tr bgcolor="#dddddd"><th>Return value</th><th>Description</th></tr>
|
||||||
<tr valign="top">
|
<tr valign="top">
|
||||||
<td>SMFIS_DISCARD</td>
|
<td>SMFIS_ACCEPT</td>
|
||||||
<td>Not meaningful, as
|
<td>Accept all commands and messages from this client without any
|
||||||
this is only meaningful from message-oriented routines.
|
further contact with the filter. </td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr valign="top">
|
||||||
|
<td>SMFIS_CONTINUE</td>
|
||||||
|
<td>Continue normal processing. </td>
|
||||||
|
</tr>
|
||||||
|
<tr valign="top">
|
||||||
|
<td>SMFIS_DISCARD</td>
|
||||||
|
<td>Undefined behaviour; do not use. </td>
|
||||||
|
</tr>
|
||||||
|
<tr valign="top">
|
||||||
|
<td>SMFIS_TEMPFAIL</td>
|
||||||
|
<td>Reject all commands and messages from this client with a
|
||||||
|
temporary failure reply code. </td>
|
||||||
|
</tr>
|
||||||
|
<tr valign="top">
|
||||||
|
<td>SMFIS_REJECT</td>
|
||||||
|
<td>Reject all commands and messages from this client with a
|
||||||
|
permanent failure reply code. </td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</tr>
|
</tr>
|
||||||
-->
|
-->
|
||||||
|
@ -52,12 +52,12 @@ Handle the envelope RCPT command.
|
|||||||
<tr valign="top">
|
<tr valign="top">
|
||||||
<td>SMFIS_TEMPFAIL</td>
|
<td>SMFIS_TEMPFAIL</td>
|
||||||
<td>Temporarily fail for this particular recipient; further recipients
|
<td>Temporarily fail for this particular recipient; further recipients
|
||||||
maystill be sent. <a href="xxfi_abort.html">xxfi_abort</a> is not called.
|
may still be sent. <a href="xxfi_abort.html">xxfi_abort</a> is not called.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr valign="top">
|
<tr valign="top">
|
||||||
<td>SMFIS_REJECT</td>
|
<td>SMFIS_REJECT</td>
|
||||||
<td>Reject this particular recipient; further recipients maystill be sent.
|
<td>Reject this particular recipient; further recipients may still be sent.
|
||||||
<a href="xxfi_abort.html">xxfi_abort</a> is not called.
|
<a href="xxfi_abort.html">xxfi_abort</a> is not called.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1999-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* By using this file, you agree to the terms and conditions set
|
* By using this file, you agree to the terms and conditions set
|
||||||
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: engine.c,v 8.109.2.5 2003/08/04 18:14:33 ca Exp $")
|
SM_RCSID("@(#)$Id: engine.c,v 8.109.2.8 2003/12/01 23:57:45 msk Exp $")
|
||||||
|
|
||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
|
|
||||||
@ -59,14 +59,21 @@ typedef struct cmdfct_t cmdfct;
|
|||||||
#define CT_END 0x0008 /* start replying */
|
#define CT_END 0x0008 /* start replying */
|
||||||
|
|
||||||
/* index in macro array: macros only for these commands */
|
/* index in macro array: macros only for these commands */
|
||||||
#define CI_NONE (-1)
|
#define CI_NONE (-1)
|
||||||
#define CI_CONN 0
|
#define CI_CONN 0
|
||||||
#define CI_HELO 1
|
#define CI_HELO 1
|
||||||
#define CI_MAIL 2
|
#define CI_MAIL 2
|
||||||
#define CI_RCPT 3
|
#define CI_RCPT 3
|
||||||
#if CI_RCPT >= MAX_MACROS_ENTRIES
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
# define CI_EOM 4
|
||||||
|
# if CI_EOM >= MAX_MACROS_ENTRIES
|
||||||
|
ERROR: do not compile with CI_EOM >= MAX_MACROS_ENTRIES
|
||||||
|
# endif
|
||||||
|
#else /* _FFR_MILTER_MACROS_EOM */
|
||||||
|
# if CI_RCPT >= MAX_MACROS_ENTRIES
|
||||||
ERROR: do not compile with CI_RCPT >= MAX_MACROS_ENTRIES
|
ERROR: do not compile with CI_RCPT >= MAX_MACROS_ENTRIES
|
||||||
#endif
|
# endif
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
|
|
||||||
/* function prototypes */
|
/* function prototypes */
|
||||||
static int st_abortfct __P((genarg *));
|
static int st_abortfct __P((genarg *));
|
||||||
@ -156,7 +163,11 @@ static cmdfct cmds[] =
|
|||||||
{SMFIC_MACRO, CM_ARGV, ST_NONE, CT_KEEP, CI_NONE, st_macros },
|
{SMFIC_MACRO, CM_ARGV, ST_NONE, CT_KEEP, CI_NONE, st_macros },
|
||||||
{SMFIC_BODY, CM_ARG1, ST_BODY, CT_CONT, CI_NONE, st_bodychunk },
|
{SMFIC_BODY, CM_ARG1, ST_BODY, CT_CONT, CI_NONE, st_bodychunk },
|
||||||
{SMFIC_CONNECT, CM_ARG2, ST_CONN, CT_CONT, CI_CONN, st_connectinfo },
|
{SMFIC_CONNECT, CM_ARG2, ST_CONN, CT_CONT, CI_CONN, st_connectinfo },
|
||||||
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
{SMFIC_BODYEOB, CM_ARG1, ST_ENDM, CT_CONT, CI_EOM, st_bodyend },
|
||||||
|
#else /* _FFR_MILTER_MACROS_EOM */
|
||||||
{SMFIC_BODYEOB, CM_ARG1, ST_ENDM, CT_CONT, CI_NONE, st_bodyend },
|
{SMFIC_BODYEOB, CM_ARG1, ST_ENDM, CT_CONT, CI_NONE, st_bodyend },
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
{SMFIC_HELO, CM_ARG1, ST_HELO, CT_CONT, CI_HELO, st_helo },
|
{SMFIC_HELO, CM_ARG1, ST_HELO, CT_CONT, CI_HELO, st_helo },
|
||||||
{SMFIC_HEADER, CM_ARG2, ST_HDRS, CT_CONT, CI_NONE, st_header },
|
{SMFIC_HEADER, CM_ARG2, ST_HDRS, CT_CONT, CI_NONE, st_header },
|
||||||
{SMFIC_MAIL, CM_ARGV, ST_MAIL, CT_CONT, CI_MAIL, st_sender },
|
{SMFIC_MAIL, CM_ARGV, ST_MAIL, CT_CONT, CI_MAIL, st_sender },
|
||||||
@ -599,7 +610,7 @@ st_connectinfo(g)
|
|||||||
l = g->a_len;
|
l = g->a_len;
|
||||||
while (s[i] != '\0' && i <= l)
|
while (s[i] != '\0' && i <= l)
|
||||||
++i;
|
++i;
|
||||||
if (i >= l)
|
if (i + 1 >= l)
|
||||||
return _SMFIS_ABORT;
|
return _SMFIS_ABORT;
|
||||||
|
|
||||||
/* Move past trailing \0 in host string */
|
/* Move past trailing \0 in host string */
|
||||||
@ -608,9 +619,7 @@ st_connectinfo(g)
|
|||||||
(void) memset(&sockaddr, '\0', sizeof sockaddr);
|
(void) memset(&sockaddr, '\0', sizeof sockaddr);
|
||||||
if (family != SMFIA_UNKNOWN)
|
if (family != SMFIA_UNKNOWN)
|
||||||
{
|
{
|
||||||
(void) memcpy((void *) &port, (void *) (s + i),
|
if (i + sizeof port >= l)
|
||||||
sizeof port);
|
|
||||||
if ((i += sizeof port) >= l)
|
|
||||||
{
|
{
|
||||||
smi_log(SMI_LOG_ERR,
|
smi_log(SMI_LOG_ERR,
|
||||||
"%s: connect[%d]: wrong len %d >= %d",
|
"%s: connect[%d]: wrong len %d >= %d",
|
||||||
@ -618,6 +627,9 @@ st_connectinfo(g)
|
|||||||
(int) g->a_ctx->ctx_id, (int) i, (int) l);
|
(int) g->a_ctx->ctx_id, (int) i, (int) l);
|
||||||
return _SMFIS_ABORT;
|
return _SMFIS_ABORT;
|
||||||
}
|
}
|
||||||
|
(void) memcpy((void *) &port, (void *) (s + i),
|
||||||
|
sizeof port);
|
||||||
|
i += sizeof port;
|
||||||
|
|
||||||
/* make sure string is terminated */
|
/* make sure string is terminated */
|
||||||
if (s[l - 1] != '\0')
|
if (s[l - 1] != '\0')
|
||||||
@ -729,7 +741,12 @@ st_helo(g)
|
|||||||
mi_clr_macros(g->a_ctx, g->a_idx + 1);
|
mi_clr_macros(g->a_ctx, g->a_idx + 1);
|
||||||
if (g->a_ctx->ctx_smfi != NULL &&
|
if (g->a_ctx->ctx_smfi != NULL &&
|
||||||
(fi_helo = g->a_ctx->ctx_smfi->xxfi_helo) != NULL)
|
(fi_helo = g->a_ctx->ctx_smfi->xxfi_helo) != NULL)
|
||||||
|
{
|
||||||
|
/* paranoia: check for terminating '\0' */
|
||||||
|
if (g->a_len == 0 || g->a_buf[g->a_len - 1] != '\0')
|
||||||
|
return MI_FAILURE;
|
||||||
return (*fi_helo)(g->a_ctx, g->a_buf);
|
return (*fi_helo)(g->a_ctx, g->a_buf);
|
||||||
|
}
|
||||||
return SMFIS_CONTINUE;
|
return SMFIS_CONTINUE;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -847,6 +864,11 @@ st_macros(g)
|
|||||||
case SMFIC_RCPT:
|
case SMFIC_RCPT:
|
||||||
i = CI_RCPT;
|
i = CI_RCPT;
|
||||||
break;
|
break;
|
||||||
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
case SMFIC_BODYEOB:
|
||||||
|
i = CI_EOM;
|
||||||
|
break;
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
default:
|
default:
|
||||||
free(argv);
|
free(argv);
|
||||||
return _SMFIS_FAIL;
|
return _SMFIS_FAIL;
|
||||||
@ -1089,10 +1111,16 @@ dec_argv(buf, len)
|
|||||||
for (i = 0, elem = 0; i < len && elem < nelem; i++)
|
for (i = 0, elem = 0; i < len && elem < nelem; i++)
|
||||||
{
|
{
|
||||||
if (buf[i] == '\0')
|
if (buf[i] == '\0')
|
||||||
s[++elem] = &(buf[i + 1]);
|
{
|
||||||
|
++elem;
|
||||||
|
if (i + 1 >= len)
|
||||||
|
s[elem] = NULL;
|
||||||
|
else
|
||||||
|
s[elem] = &(buf[i + 1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* overwrite last entry */
|
/* overwrite last entry (already done above, just paranoia) */
|
||||||
s[elem] = NULL;
|
s[elem] = NULL;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -1117,6 +1145,9 @@ dec_arg2(buf, len, s1, s2)
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
/* paranoia: check for terminating '\0' */
|
||||||
|
if (len == 0 || buf[len - 1] != '\0')
|
||||||
|
return MI_FAILURE;
|
||||||
*s1 = buf;
|
*s1 = buf;
|
||||||
for (i = 1; i < len && buf[i] != '\0'; i++)
|
for (i = 1; i < len && buf[i] != '\0'; i++)
|
||||||
continue;
|
continue;
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#ifdef _DEFINE
|
#ifdef _DEFINE
|
||||||
# define EXTERN
|
# define EXTERN
|
||||||
# define INIT(x) = x
|
# define INIT(x) = x
|
||||||
SM_IDSTR(MilterlId, "@(#)$Id: libmilter.h,v 8.33.2.12 2003/09/08 21:39:55 yuri Exp $")
|
SM_IDSTR(MilterlId, "@(#)$Id: libmilter.h,v 8.33.2.13 2003/10/20 21:51:50 msk Exp $")
|
||||||
#else /* _DEFINE */
|
#else /* _DEFINE */
|
||||||
# define EXTERN extern
|
# define EXTERN extern
|
||||||
# define INIT(x)
|
# define INIT(x)
|
||||||
@ -176,7 +176,7 @@ extern void mi_clean_signals __P((void));
|
|||||||
extern struct hostent *mi_gethostbyname __P((char *, int));
|
extern struct hostent *mi_gethostbyname __P((char *, int));
|
||||||
extern int mi_inet_pton __P((int, const char *, void *));
|
extern int mi_inet_pton __P((int, const char *, void *));
|
||||||
extern void mi_closener __P((void));
|
extern void mi_closener __P((void));
|
||||||
extern int mi_opensocket __P((char *, int, int, smfiDesc_ptr));
|
extern int mi_opensocket __P((char *, int, int, bool, smfiDesc_ptr));
|
||||||
|
|
||||||
/* communication functions */
|
/* communication functions */
|
||||||
extern char *mi_rd_cmd __P((socket_t, struct timeval *, char *, size_t *, char *));
|
extern char *mi_rd_cmd __P((socket_t, struct timeval *, char *, size_t *, char *));
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: listener.c,v 8.85.2.12 2003/08/04 18:47:29 ca Exp $")
|
SM_RCSID("@(#)$Id: listener.c,v 8.85.2.17 2003/10/21 17:22:57 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** listener.c -- threaded network listener
|
** listener.c -- threaded network listener
|
||||||
@ -18,6 +18,9 @@ SM_RCSID("@(#)$Id: listener.c,v 8.85.2.12 2003/08/04 18:47:29 ca Exp $")
|
|||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
#include <sm/errstring.h>
|
#include <sm/errstring.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
|
||||||
# if NETINET || NETINET6
|
# if NETINET || NETINET6
|
||||||
# include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
@ -28,26 +31,29 @@ static int L_family;
|
|||||||
static SOCKADDR_LEN_T L_socksize;
|
static SOCKADDR_LEN_T L_socksize;
|
||||||
static socket_t listenfd = INVALID_SOCKET;
|
static socket_t listenfd = INVALID_SOCKET;
|
||||||
|
|
||||||
static socket_t mi_milteropen __P((char *, int, char *));
|
static socket_t mi_milteropen __P((char *, int, bool, char *));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** MI_OPENSOCKET -- create the socket where this filter and the MTA will meet
|
** MI_OPENSOCKET -- create the socket where this filter and the MTA will meet
|
||||||
**
|
**
|
||||||
** Parameters:
|
** Parameters:
|
||||||
** conn -- connection description
|
** conn -- connection description
|
||||||
** backlog -- listen backlog
|
** backlog -- listen backlog
|
||||||
** dbg -- debug level
|
** dbg -- debug level
|
||||||
|
** rmsocket -- if true, try to unlink() the socket first
|
||||||
|
** (UNIX domain sockets only)
|
||||||
** smfi -- filter structure to use
|
** smfi -- filter structure to use
|
||||||
**
|
**
|
||||||
** Return value:
|
** Return value:
|
||||||
** MI_SUCCESS/MI_FAILURE
|
** MI_SUCCESS/MI_FAILURE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
mi_opensocket(conn, backlog, dbg, smfi)
|
mi_opensocket(conn, backlog, dbg, rmsocket, smfi)
|
||||||
char *conn;
|
char *conn;
|
||||||
int backlog;
|
int backlog;
|
||||||
int dbg;
|
int dbg;
|
||||||
|
bool rmsocket;
|
||||||
smfiDesc_ptr smfi;
|
smfiDesc_ptr smfi;
|
||||||
{
|
{
|
||||||
if (smfi == NULL || conn == NULL)
|
if (smfi == NULL || conn == NULL)
|
||||||
@ -64,7 +70,7 @@ mi_opensocket(conn, backlog, dbg, smfi)
|
|||||||
}
|
}
|
||||||
(void) smutex_init(&L_Mutex);
|
(void) smutex_init(&L_Mutex);
|
||||||
(void) smutex_lock(&L_Mutex);
|
(void) smutex_lock(&L_Mutex);
|
||||||
listenfd = mi_milteropen(conn, backlog, smfi->xxfi_name);
|
listenfd = mi_milteropen(conn, backlog, rmsocket, smfi->xxfi_name);
|
||||||
if (!ValidSocket(listenfd))
|
if (!ValidSocket(listenfd))
|
||||||
{
|
{
|
||||||
smi_log(SMI_LOG_FATAL,
|
smi_log(SMI_LOG_FATAL,
|
||||||
@ -91,6 +97,8 @@ mi_opensocket(conn, backlog, dbg, smfi)
|
|||||||
** Parameters:
|
** Parameters:
|
||||||
** conn -- connection description
|
** conn -- connection description
|
||||||
** backlog -- listen backlog
|
** backlog -- listen backlog
|
||||||
|
** rmsocket -- if true, try to unlink() the socket first
|
||||||
|
** (UNIX domain sockets only)
|
||||||
** name -- name for logging
|
** name -- name for logging
|
||||||
**
|
**
|
||||||
** Returns:
|
** Returns:
|
||||||
@ -105,9 +113,10 @@ static char *sockpath = NULL;
|
|||||||
#endif /* NETUNIX */
|
#endif /* NETUNIX */
|
||||||
|
|
||||||
static socket_t
|
static socket_t
|
||||||
mi_milteropen(conn, backlog, name)
|
mi_milteropen(conn, backlog, rmsocket, name)
|
||||||
char *conn;
|
char *conn;
|
||||||
int backlog;
|
int backlog;
|
||||||
|
bool rmsocket;
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
socket_t sock;
|
socket_t sock;
|
||||||
@ -457,6 +466,41 @@ mi_milteropen(conn, backlog, name)
|
|||||||
return INVALID_SOCKET;
|
return INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NETUNIX
|
||||||
|
if (addr.sa.sa_family == AF_UNIX && rmsocket)
|
||||||
|
{
|
||||||
|
struct stat s;
|
||||||
|
|
||||||
|
if (stat(colon, &s) != 0)
|
||||||
|
{
|
||||||
|
if (errno != ENOENT)
|
||||||
|
{
|
||||||
|
smi_log(SMI_LOG_ERR,
|
||||||
|
"%s: Unable to stat() %s: %s",
|
||||||
|
name, colon, sm_errstring(errno));
|
||||||
|
(void) closesocket(sock);
|
||||||
|
return INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!S_ISSOCK(s.st_mode))
|
||||||
|
{
|
||||||
|
smi_log(SMI_LOG_ERR,
|
||||||
|
"%s: %s is not a UNIX domain socket",
|
||||||
|
name, colon);
|
||||||
|
(void) closesocket(sock);
|
||||||
|
return INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
else if (unlink(colon) != 0)
|
||||||
|
{
|
||||||
|
smi_log(SMI_LOG_ERR,
|
||||||
|
"%s: Unable to remove %s: %s",
|
||||||
|
name, colon, sm_errstring(errno));
|
||||||
|
(void) closesocket(sock);
|
||||||
|
return INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* NETUNIX */
|
||||||
|
|
||||||
if (bind(sock, &addr.sa, L_socksize) < 0)
|
if (bind(sock, &addr.sa, L_socksize) < 0)
|
||||||
{
|
{
|
||||||
smi_log(SMI_LOG_ERR,
|
smi_log(SMI_LOG_ERR,
|
||||||
@ -591,9 +635,11 @@ mi_closener()
|
|||||||
** Parameters:
|
** Parameters:
|
||||||
** conn -- connection description
|
** conn -- connection description
|
||||||
** dbg -- debug level
|
** dbg -- debug level
|
||||||
|
** rmsocket -- if true, try to unlink() the socket first
|
||||||
|
** (UNIX domain sockets only)
|
||||||
** smfi -- filter structure to use
|
** smfi -- filter structure to use
|
||||||
** timeout -- timeout for reads/writes
|
** timeout -- timeout for reads/writes
|
||||||
** backlog -- listen queue backlog size
|
** backlog -- listen queue backlog size
|
||||||
**
|
**
|
||||||
** Returns:
|
** Returns:
|
||||||
** MI_SUCCESS -- Exited normally
|
** MI_SUCCESS -- Exited normally
|
||||||
@ -673,7 +719,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
|
|||||||
FD_RD_VAR(rds, excs);
|
FD_RD_VAR(rds, excs);
|
||||||
struct timeval chktime;
|
struct timeval chktime;
|
||||||
|
|
||||||
if (mi_opensocket(conn, backlog, dbg, smfi) == MI_FAILURE)
|
if (mi_opensocket(conn, backlog, dbg, false, smfi) == MI_FAILURE)
|
||||||
return MI_FAILURE;
|
return MI_FAILURE;
|
||||||
|
|
||||||
clilen = L_socksize;
|
clilen = L_socksize;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: main.c,v 8.64.2.10 2003/01/23 22:34:24 ca Exp $")
|
SM_RCSID("@(#)$Id: main.c,v 8.64.2.13 2003/10/20 22:27:13 ca Exp $")
|
||||||
|
|
||||||
#define _DEFINE 1
|
#define _DEFINE 1
|
||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
@ -86,7 +86,7 @@ smfi_stop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** default values for some variables.
|
** Default values for some variables.
|
||||||
** Most of these can be changed with the functions below.
|
** Most of these can be changed with the functions below.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -101,19 +101,22 @@ static int backlog = MI_SOMAXCONN;
|
|||||||
** able to start up
|
** able to start up
|
||||||
**
|
**
|
||||||
** Parameters:
|
** Parameters:
|
||||||
** None.
|
** rmsocket -- if true, instructs libmilter to attempt
|
||||||
|
** to remove the socket before creating it;
|
||||||
|
** only applies for "local:" or "unix:" sockets
|
||||||
**
|
**
|
||||||
** Return:
|
** Return:
|
||||||
** MI_SUCCESS/MI_FAILURE
|
** MI_SUCCESS/MI_FAILURE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
smfi_opensocket()
|
smfi_opensocket(rmsocket)
|
||||||
|
bool rmsocket;
|
||||||
{
|
{
|
||||||
if (smfi == NULL || conn == NULL)
|
if (smfi == NULL || conn == NULL)
|
||||||
return MI_FAILURE;
|
return MI_FAILURE;
|
||||||
|
|
||||||
return mi_opensocket(conn, backlog, dbg, smfi);
|
return mi_opensocket(conn, backlog, dbg, rmsocket, smfi);
|
||||||
}
|
}
|
||||||
#endif /* _FFR_SMFI_OPENSOCKET */
|
#endif /* _FFR_SMFI_OPENSOCKET */
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1999-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* By using this file, you agree to the terms and conditions set
|
* By using this file, you agree to the terms and conditions set
|
||||||
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: signal.c,v 8.37.2.3 2003/08/04 18:14:33 ca Exp $")
|
SM_RCSID("@(#)$Id: signal.c,v 8.37.2.4 2003/11/19 00:22:40 ca Exp $")
|
||||||
|
|
||||||
#include "libmilter.h"
|
#include "libmilter.h"
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: assert.c,v 1.25 2001/09/11 04:04:47 gshapiro Exp $")
|
SM_RCSID("@(#)$Id: assert.c,v 1.25.2.1 2003/12/05 22:44:17 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Abnormal program termination and assertion checking.
|
** Abnormal program termination and assertion checking.
|
||||||
@ -127,7 +127,7 @@ sm_abort_sethandler(f)
|
|||||||
** doesn't.
|
** doesn't.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void SM_DEAD_D
|
||||||
#if SM_VA_STD
|
#if SM_VA_STD
|
||||||
sm_abort(char *fmt, ...)
|
sm_abort(char *fmt, ...)
|
||||||
#else /* SM_VA_STD */
|
#else /* SM_VA_STD */
|
||||||
@ -163,7 +163,7 @@ sm_abort(fmt, va_alist)
|
|||||||
** doesn't.
|
** doesn't.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void SM_DEAD_D
|
||||||
sm_abort_at(filename, lineno, msg)
|
sm_abort_at(filename, lineno, msg)
|
||||||
const char *filename;
|
const char *filename;
|
||||||
int lineno;
|
int lineno;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: exc.c,v 1.47 2002/01/09 18:51:43 ca Exp $")
|
SM_RCSID("@(#)$Id: exc.c,v 1.47.2.1 2003/12/05 22:44:17 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** exception handling
|
** exception handling
|
||||||
@ -587,7 +587,7 @@ sm_exc_newthread(h)
|
|||||||
** doesn't.
|
** doesn't.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void SM_DEAD_D
|
||||||
sm_exc_raise_x(exc)
|
sm_exc_raise_x(exc)
|
||||||
SM_EXC_T *exc;
|
SM_EXC_T *exc;
|
||||||
{
|
{
|
||||||
@ -648,7 +648,7 @@ sm_exc_raise_x(exc)
|
|||||||
** none.
|
** none.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void SM_DEAD_D
|
||||||
#if SM_VA_STD
|
#if SM_VA_STD
|
||||||
sm_exc_raisenew_x(
|
sm_exc_raisenew_x(
|
||||||
const SM_EXC_TYPE_T *etype,
|
const SM_EXC_TYPE_T *etype,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 2001-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* By using this file, you agree to the terms and conditions set
|
* By using this file, you agree to the terms and conditions set
|
||||||
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
SM_RCSID("@(#)$Id: ldap.c,v 1.44.2.3 2003/07/07 20:16:16 gshapiro Exp $")
|
SM_RCSID("@(#)$Id: ldap.c,v 1.44.2.5 2003/12/23 21:21:56 gshapiro Exp $")
|
||||||
|
|
||||||
#if LDAPMAP
|
#if LDAPMAP
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
@ -570,9 +570,11 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result,
|
|||||||
** no need to spin through attributes
|
** no need to spin through attributes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (statp == EX_OK &&
|
if (bitset(SM_LDAP_MATCHONLY, flags))
|
||||||
bitset(SM_LDAP_MATCHONLY, flags))
|
{
|
||||||
|
statp = EX_OK;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* record completed DN's to prevent loops */
|
/* record completed DN's to prevent loops */
|
||||||
dn = ldap_get_dn(lmap->ldap_ld, entry);
|
dn = ldap_get_dn(lmap->ldap_ld, entry);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 2000-2002, 2004 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -11,7 +11,7 @@
|
|||||||
* forth in the LICENSE file which can be found at the top level of
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
* the sendmail distribution.
|
* the sendmail distribution.
|
||||||
*
|
*
|
||||||
* $Id: local.h,v 1.51.2.1 2002/09/09 21:38:08 gshapiro Exp $
|
* $Id: local.h,v 1.51.2.2 2004/01/09 18:32:44 ca Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -37,7 +37,6 @@ int sm_wsetup __P((SM_FILE_T *));
|
|||||||
int sm_flags __P((int));
|
int sm_flags __P((int));
|
||||||
SM_FILE_T *sm_fp __P((const SM_FILE_T *, const int, SM_FILE_T *));
|
SM_FILE_T *sm_fp __P((const SM_FILE_T *, const int, SM_FILE_T *));
|
||||||
int sm_vprintf __P((int, char const *, va_list));
|
int sm_vprintf __P((int, char const *, va_list));
|
||||||
int sm_vfscanf __P((SM_FILE_T *, int, char const *, va_list));
|
|
||||||
|
|
||||||
/* std io functions */
|
/* std io functions */
|
||||||
ssize_t sm_stdread __P((SM_FILE_T *, char *, size_t));
|
ssize_t sm_stdread __P((SM_FILE_T *, char *, size_t));
|
||||||
|
@ -9,9 +9,9 @@
|
|||||||
.\" the sendmail distribution.
|
.\" the sendmail distribution.
|
||||||
.\"
|
.\"
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: smrsh.8,v 8.16.2.1 2003/07/08 01:33:03 gshapiro Exp $
|
.\" $Id: smrsh.8,v 8.16.2.2 2003/10/07 18:05:37 ca Exp $
|
||||||
.\"
|
.\"
|
||||||
.TH SMRSH 8 "$Date: 2003/07/08 01:33:03 $"
|
.TH SMRSH 8 "$Date: 2003/10/07 18:05:37 $"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
smrsh \- restricted shell for sendmail
|
smrsh \- restricted shell for sendmail
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -88,6 +88,11 @@ and/or \-DSMRSH_CMDDIR=\e"\fIdir\fP\e"
|
|||||||
to change the default program directory
|
to change the default program directory
|
||||||
(defaults to ``/usr/adm/sm.bin'').
|
(defaults to ``/usr/adm/sm.bin'').
|
||||||
.SH FILES
|
.SH FILES
|
||||||
/usr/adm/sm.bin \- directory for restricted programs
|
/usr/adm/sm.bin \- default directory for restricted programs on most OSs
|
||||||
|
.PP
|
||||||
|
/var/adm/sm.bin \- directory for restricted programs on HP UX and Solaris
|
||||||
|
.PP
|
||||||
|
/usr/libexec/sm.bin \- directory for restricted programs on FreeBSD (>= 3.3)
|
||||||
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
sendmail(8)
|
sendmail(8)
|
||||||
|
@ -20,7 +20,7 @@ SM_IDSTR(copyright,
|
|||||||
Copyright (c) 1993\n\
|
Copyright (c) 1993\n\
|
||||||
The Regents of the University of California. All rights reserved.\n")
|
The Regents of the University of California. All rights reserved.\n")
|
||||||
|
|
||||||
SM_IDSTR(id, "@(#)$Id: smrsh.c,v 8.58.2.2 2002/09/24 21:40:05 ca Exp $")
|
SM_IDSTR(id, "@(#)$Id: smrsh.c,v 8.58.2.5 2003/12/15 17:09:39 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** SMRSH -- sendmail restricted shell
|
** SMRSH -- sendmail restricted shell
|
||||||
@ -118,8 +118,9 @@ addcmd(s, cmd, len)
|
|||||||
if (s == NULL || *s == '\0')
|
if (s == NULL || *s == '\0')
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* enough space for s (len) and CMDDIR + "/" and '\0'? */
|
||||||
if (sizeof newcmdbuf - strlen(newcmdbuf) <=
|
if (sizeof newcmdbuf - strlen(newcmdbuf) <=
|
||||||
len + (cmd ? (strlen(CMDDIR) + 1) : 0))
|
len + 1 + (cmd ? (strlen(CMDDIR) + 1) : 0))
|
||||||
{
|
{
|
||||||
(void)sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
|
(void)sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
|
||||||
"%s: command too long: %s\n", prg, par);
|
"%s: command too long: %s\n", prg, par);
|
||||||
@ -130,7 +131,7 @@ addcmd(s, cmd, len)
|
|||||||
}
|
}
|
||||||
if (cmd)
|
if (cmd)
|
||||||
(void) sm_strlcat2(newcmdbuf, CMDDIR, "/", sizeof newcmdbuf);
|
(void) sm_strlcat2(newcmdbuf, CMDDIR, "/", sizeof newcmdbuf);
|
||||||
(void) sm_strlcat(newcmdbuf, s, sizeof newcmdbuf);
|
(void) strncat(newcmdbuf, s, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -423,7 +424,8 @@ main(argc, argv)
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, "%s\n", newcmdbuf);
|
(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, "%s\n", newcmdbuf);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
(void) execle("/bin/sh", "/bin/sh", "-c", newcmdbuf, NULL, newenv);
|
(void) execle("/bin/sh", "/bin/sh", "-c", newcmdbuf,
|
||||||
|
(char *)NULL, newenv);
|
||||||
save_errno = errno;
|
save_errno = errno;
|
||||||
#ifndef DEBUG
|
#ifndef DEBUG
|
||||||
syslog(LOG_CRIT, "Cannot exec /bin/sh: %s", sm_errstring(errno));
|
syslog(LOG_CRIT, "Cannot exec /bin/sh: %s", sm_errstring(errno));
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# the sendmail distribution.
|
# the sendmail distribution.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# $Id: README,v 8.355.2.15 2003/06/02 01:43:04 ca Exp $
|
# $Id: README,v 8.355.2.16 2004/01/08 21:54:55 ca Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
This directory contains the source files for sendmail(TM).
|
This directory contains the source files for sendmail(TM).
|
||||||
@ -561,6 +561,11 @@ MATCHGECOS Permit fuzzy matching of user names against the full
|
|||||||
MIME8TO7 If non-zero, include 8 to 7 bit MIME conversions. This
|
MIME8TO7 If non-zero, include 8 to 7 bit MIME conversions. This
|
||||||
also controls advertisement of 8BITMIME in the ESMTP
|
also controls advertisement of 8BITMIME in the ESMTP
|
||||||
startup dialogue.
|
startup dialogue.
|
||||||
|
MIME7TO8_OLD If 0 then use an algorithm for MIME 7-bit quoted-printable
|
||||||
|
or base64 encoding to 8-bit text that has been introduced
|
||||||
|
in 8.12.3. There are some examples where that code fails,
|
||||||
|
but the old code works. If you have an example of improper
|
||||||
|
7 to 8 bit conversion please send it to sendmail-bugs.
|
||||||
MIME7TO8 If non-zero, include 7 to 8 bit MIME conversions.
|
MIME7TO8 If non-zero, include 7 to 8 bit MIME conversions.
|
||||||
HES_GETMAILHOST Define this to 1 if you are using Hesiod with the
|
HES_GETMAILHOST Define this to 1 if you are using Hesiod with the
|
||||||
hes_getmailhost() routine. This is included with the MIT
|
hes_getmailhost() routine. This is included with the MIT
|
||||||
@ -1797,4 +1802,4 @@ util.c Some general purpose routines used by sendmail.
|
|||||||
version.c The version number and information about this
|
version.c The version number and information about this
|
||||||
version of sendmail.
|
version of sendmail.
|
||||||
|
|
||||||
(Version $Revision: 8.355.2.15 $, last update $Date: 2003/06/02 01:43:04 $ )
|
(Version $Revision: 8.355.2.16 $, last update $Date: 2004/01/08 21:54:55 $ )
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: alias.c,v 8.214.2.1 2003/07/28 17:47:55 ca Exp $")
|
SM_RCSID("@(#)$Id: alias.c,v 8.214.2.2 2003/10/06 20:43:29 ca Exp $")
|
||||||
|
|
||||||
#define SEPARATOR ':'
|
#define SEPARATOR ':'
|
||||||
# define ALIAS_SPEC_SEPARATORS " ,/:"
|
# define ALIAS_SPEC_SEPARATORS " ,/:"
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: conf.c,v 8.972.2.50 2003/09/03 21:37:03 ca Exp $")
|
SM_RCSID("@(#)$Id: conf.c,v 8.972.2.54 2004/01/08 21:54:55 ca Exp $")
|
||||||
|
|
||||||
#include <sendmail/pathnames.h>
|
#include <sendmail/pathnames.h>
|
||||||
#if NEWDB
|
#if NEWDB
|
||||||
@ -5571,6 +5571,9 @@ char *CompileOptions[] =
|
|||||||
#if MIME7TO8
|
#if MIME7TO8
|
||||||
"MIME7TO8",
|
"MIME7TO8",
|
||||||
#endif /* MIME7TO8 */
|
#endif /* MIME7TO8 */
|
||||||
|
#if MIME7TO8_OLD
|
||||||
|
"MIME7TO8_OLD",
|
||||||
|
#endif /* MIME7TO8_OLD */
|
||||||
#if MIME8TO7
|
#if MIME8TO7
|
||||||
"MIME8TO7",
|
"MIME8TO7",
|
||||||
#endif /* MIME8TO7 */
|
#endif /* MIME8TO7 */
|
||||||
@ -6065,11 +6068,19 @@ char *FFRCompileOptions[] =
|
|||||||
/* Limit sleep(2) time in libsm/clock.c */
|
/* Limit sleep(2) time in libsm/clock.c */
|
||||||
"_FFR_MAX_SLEEP_TIME",
|
"_FFR_MAX_SLEEP_TIME",
|
||||||
#endif /* _FFR_MAX_SLEEP_TIME */
|
#endif /* _FFR_MAX_SLEEP_TIME */
|
||||||
|
#if _FFR_MESSAGEID_MACRO
|
||||||
|
/* stick the message ID header's value in a macro */
|
||||||
|
"_FFR_MESSAGEID_MACRO",
|
||||||
|
#endif /* _FFR_MESSAGEID_MACRO */
|
||||||
#if MILTER
|
#if MILTER
|
||||||
# if _FFR_MILTER_421
|
# if _FFR_MILTER_421
|
||||||
/* If a filter returns 421, close the SMTP connection */
|
/* If a filter returns 421, close the SMTP connection */
|
||||||
"_FFR_MILTER_421",
|
"_FFR_MILTER_421",
|
||||||
# endif /* _FFR_MILTER_421 */
|
# endif /* _FFR_MILTER_421 */
|
||||||
|
# if _FFR_MILTER_MACROS_EOM
|
||||||
|
/* Add an EOM macro set for milter */
|
||||||
|
"_FFR_MILTER_MACROS_EOM",
|
||||||
|
# endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
# if _FFR_MILTER_PERDAEMON
|
# if _FFR_MILTER_PERDAEMON
|
||||||
/* Per DaemonPortOptions InputMailFilter lists */
|
/* Per DaemonPortOptions InputMailFilter lists */
|
||||||
"_FFR_MILTER_PERDAEMON",
|
"_FFR_MILTER_PERDAEMON",
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: daemon.c,v 8.613.2.17 2003/07/30 20:17:04 ca Exp $")
|
SM_RCSID("@(#)$Id: daemon.c,v 8.613.2.20 2003/11/25 19:02:24 ca Exp $")
|
||||||
|
|
||||||
#if defined(SOCK_STREAM) || defined(__GNU_LIBRARY__)
|
#if defined(SOCK_STREAM) || defined(__GNU_LIBRARY__)
|
||||||
# define USE_SOCK_STREAM 1
|
# define USE_SOCK_STREAM 1
|
||||||
@ -164,6 +164,8 @@ getrequests(e)
|
|||||||
extern bool refuseconnections __P((char *, ENVELOPE *, int, bool));
|
extern bool refuseconnections __P((char *, ENVELOPE *, int, bool));
|
||||||
|
|
||||||
|
|
||||||
|
/* initialize data for function that generates queue ids */
|
||||||
|
init_qid_alg();
|
||||||
for (idx = 0; idx < NDaemons; idx++)
|
for (idx = 0; idx < NDaemons; idx++)
|
||||||
{
|
{
|
||||||
Daemons[idx].d_port = setupdaemon(&(Daemons[idx].d_addr));
|
Daemons[idx].d_port = setupdaemon(&(Daemons[idx].d_addr));
|
||||||
@ -363,7 +365,6 @@ getrequests(e)
|
|||||||
/* Did someone signal while waiting? */
|
/* Did someone signal while waiting? */
|
||||||
CHECK_RESTART;
|
CHECK_RESTART;
|
||||||
|
|
||||||
|
|
||||||
curdaemon = -1;
|
curdaemon = -1;
|
||||||
if (doqueuerun())
|
if (doqueuerun())
|
||||||
{
|
{
|
||||||
@ -3484,10 +3485,21 @@ getauthinfo(fd, may_be_forged)
|
|||||||
nleft = sizeof ibuf - 1;
|
nleft = sizeof ibuf - 1;
|
||||||
while ((i = read(s, p, nleft)) > 0)
|
while ((i = read(s, p, nleft)) > 0)
|
||||||
{
|
{
|
||||||
|
char *s;
|
||||||
|
|
||||||
p += i;
|
p += i;
|
||||||
nleft -= i;
|
nleft -= i;
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
if (strchr(ibuf, '\n') != NULL || nleft <= 0)
|
if ((s = strchr(ibuf, '\n')) != NULL)
|
||||||
|
{
|
||||||
|
if (p > s + 1)
|
||||||
|
{
|
||||||
|
p = s + 1;
|
||||||
|
*p = '\0';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (nleft <= 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
(void) close(s);
|
(void) close(s);
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: deliver.c,v 8.940.2.19 2003/09/03 19:58:26 ca Exp $")
|
SM_RCSID("@(#)$Id: deliver.c,v 8.940.2.20 2003/09/26 18:26:19 ca Exp $")
|
||||||
|
|
||||||
#if HASSETUSERCONTEXT
|
#if HASSETUSERCONTEXT
|
||||||
# include <login_cap.h>
|
# include <login_cap.h>
|
||||||
@ -3491,7 +3491,12 @@ do_transfer:
|
|||||||
(mci->mci_state == MCIS_MAIL ||
|
(mci->mci_state == MCIS_MAIL ||
|
||||||
mci->mci_state == MCIS_RCPT ||
|
mci->mci_state == MCIS_RCPT ||
|
||||||
mci->mci_state == MCIS_DATA))
|
mci->mci_state == MCIS_DATA))
|
||||||
|
{
|
||||||
mci->mci_state = MCIS_OPEN;
|
mci->mci_state = MCIS_OPEN;
|
||||||
|
SmtpPhase = mci->mci_phase = "idle";
|
||||||
|
sm_setproctitle(true, e, "%s: %s", CurHostName,
|
||||||
|
mci->mci_phase);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tobuf[0] != '\0')
|
if (tobuf[0] != '\0')
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: headers.c,v 8.266.4.7 2003/09/03 21:32:20 ca Exp $")
|
SM_RCSID("@(#)$Id: headers.c,v 8.266.4.9 2003/10/30 00:17:22 gshapiro Exp $")
|
||||||
|
|
||||||
static size_t fix_mime_header __P((HDR *, ENVELOPE *));
|
static size_t fix_mime_header __P((HDR *, ENVELOPE *));
|
||||||
static int priencode __P((char *));
|
static int priencode __P((char *));
|
||||||
@ -730,6 +730,10 @@ eatheader(e, full, log)
|
|||||||
e->e_msgid = h->h_value;
|
e->e_msgid = h->h_value;
|
||||||
while (isascii(*e->e_msgid) && isspace(*e->e_msgid))
|
while (isascii(*e->e_msgid) && isspace(*e->e_msgid))
|
||||||
e->e_msgid++;
|
e->e_msgid++;
|
||||||
|
#if _FFR_MESSAGEID_MACRO
|
||||||
|
macdefine(&e->e_macro, A_PERM, macid("{msg_id}"),
|
||||||
|
e->e_msgid);
|
||||||
|
#endif /* _FFR_MESSAGEID_MACRO */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tTd(32, 1))
|
if (tTd(32, 1))
|
||||||
@ -773,11 +777,13 @@ eatheader(e, full, log)
|
|||||||
e->e_timeoutclass = TOC_NORMAL;
|
e->e_timeoutclass = TOC_NORMAL;
|
||||||
else if (sm_strcasecmp(p, "non-urgent") == 0)
|
else if (sm_strcasecmp(p, "non-urgent") == 0)
|
||||||
e->e_timeoutclass = TOC_NONURGENT;
|
e->e_timeoutclass = TOC_NONURGENT;
|
||||||
}
|
|
||||||
|
|
||||||
#if _FFR_QUEUERETURN_DSN
|
#if _FFR_QUEUERETURN_DSN
|
||||||
/* If no timeoutclass picked and it's a DSN, use that timeoutclass */
|
else if (bitset(EF_RESPONSE, e->e_flags))
|
||||||
if (e->e_timeoutclass == TOC_NORMAL && bitset(EF_RESPONSE, e->e_flags))
|
e->e_timeoutclass = TOC_DSN;
|
||||||
|
#endif /* _FFR_QUEUERETURN_DSN */
|
||||||
|
}
|
||||||
|
#if _FFR_QUEUERETURN_DSN
|
||||||
|
else if (bitset(EF_RESPONSE, e->e_flags))
|
||||||
e->e_timeoutclass = TOC_DSN;
|
e->e_timeoutclass = TOC_DSN;
|
||||||
#endif /* _FFR_QUEUERETURN_DSN */
|
#endif /* _FFR_QUEUERETURN_DSN */
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ SM_UNUSED(static char copyright[]) =
|
|||||||
The Regents of the University of California. All rights reserved.\n";
|
The Regents of the University of California. All rights reserved.\n";
|
||||||
#endif /* ! lint */
|
#endif /* ! lint */
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: main.c,v 8.887.2.27 2003/08/04 17:23:37 ca Exp $")
|
SM_RCSID("@(#)$Id: main.c,v 8.887.2.29 2003/11/07 00:09:31 ca Exp $")
|
||||||
|
|
||||||
|
|
||||||
#if NETINET || NETINET6
|
#if NETINET || NETINET6
|
||||||
@ -2234,8 +2234,32 @@ main(argc, argv, envp)
|
|||||||
int status;
|
int status;
|
||||||
pid_t ret;
|
pid_t ret;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
while ((ret = sm_wait(&status)) <= 0)
|
while ((ret = sm_wait(&status)) <= 0)
|
||||||
|
{
|
||||||
|
if (errno == ECHILD)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** Oops... something got messed
|
||||||
|
** up really bad. Waiting for
|
||||||
|
** non-existent children
|
||||||
|
** shouldn't happen. Let's get
|
||||||
|
** out of here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
CurChildren = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* something is really really wrong */
|
||||||
|
if (errno == ECHILD)
|
||||||
|
{
|
||||||
|
sm_syslog(LOG_ERR, NOQID,
|
||||||
|
"queue control process: lost all children: wait returned ECHILD");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Only drop when a child gives status */
|
/* Only drop when a child gives status */
|
||||||
if (WIFSTOPPED(status))
|
if (WIFSTOPPED(status))
|
||||||
@ -2371,8 +2395,31 @@ main(argc, argv, envp)
|
|||||||
int group;
|
int group;
|
||||||
|
|
||||||
CHECK_RESTART;
|
CHECK_RESTART;
|
||||||
|
errno = 0;
|
||||||
while ((ret = sm_wait(&status)) <= 0)
|
while ((ret = sm_wait(&status)) <= 0)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** Waiting for non-existent
|
||||||
|
** children shouldn't happen.
|
||||||
|
** Let's get out of here if
|
||||||
|
** it occurs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (errno == ECHILD)
|
||||||
|
{
|
||||||
|
CurChildren = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* something is really really wrong */
|
||||||
|
if (errno == ECHILD)
|
||||||
|
{
|
||||||
|
sm_syslog(LOG_ERR, NOQID,
|
||||||
|
"persistent queue runner control process: lost all children: wait returned ECHILD");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (WIFSTOPPED(status))
|
if (WIFSTOPPED(status))
|
||||||
continue;
|
continue;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: milter.c,v 8.197.2.9 2003/09/07 00:18:29 ca Exp $")
|
SM_RCSID("@(#)$Id: milter.c,v 8.197.2.10 2003/12/01 23:57:44 msk Exp $")
|
||||||
|
|
||||||
#if MILTER
|
#if MILTER
|
||||||
# include <libmilter/mfapi.h>
|
# include <libmilter/mfapi.h>
|
||||||
@ -34,6 +34,9 @@ static char *MilterConnectMacros[MAXFILTERMACROS + 1];
|
|||||||
static char *MilterHeloMacros[MAXFILTERMACROS + 1];
|
static char *MilterHeloMacros[MAXFILTERMACROS + 1];
|
||||||
static char *MilterEnvFromMacros[MAXFILTERMACROS + 1];
|
static char *MilterEnvFromMacros[MAXFILTERMACROS + 1];
|
||||||
static char *MilterEnvRcptMacros[MAXFILTERMACROS + 1];
|
static char *MilterEnvRcptMacros[MAXFILTERMACROS + 1];
|
||||||
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
static char *MilterEOMMacros[MAXFILTERMACROS + 1];
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
|
|
||||||
# define MILTER_CHECK_DONE_MSG() \
|
# define MILTER_CHECK_DONE_MSG() \
|
||||||
if (*state == SMFIR_REPLYCODE || \
|
if (*state == SMFIR_REPLYCODE || \
|
||||||
@ -1415,6 +1418,10 @@ static struct milteropt
|
|||||||
{ "macros.envrcpt", MO_MACROS_ENVRCPT },
|
{ "macros.envrcpt", MO_MACROS_ENVRCPT },
|
||||||
# define MO_LOGLEVEL 0x05
|
# define MO_LOGLEVEL 0x05
|
||||||
{ "loglevel", MO_LOGLEVEL },
|
{ "loglevel", MO_LOGLEVEL },
|
||||||
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
# define MO_MACROS_EOM 0x06
|
||||||
|
{ "macros.eom", MO_MACROS_EOM },
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
{ NULL, 0 },
|
{ NULL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1488,6 +1495,13 @@ milter_set_option(name, val, sticky)
|
|||||||
case MO_MACROS_ENVRCPT:
|
case MO_MACROS_ENVRCPT:
|
||||||
if (macros == NULL)
|
if (macros == NULL)
|
||||||
macros = MilterEnvRcptMacros;
|
macros = MilterEnvRcptMacros;
|
||||||
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
|
case MO_MACROS_EOM:
|
||||||
|
if (macros == NULL)
|
||||||
|
macros = MilterEOMMacros;
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
|
|
||||||
p = newstr(val);
|
p = newstr(val);
|
||||||
while (*p != '\0')
|
while (*p != '\0')
|
||||||
@ -3594,6 +3608,11 @@ milter_data(e, state)
|
|||||||
MILTER_CHECK_RESULTS();
|
MILTER_CHECK_RESULTS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _FFR_MILTER_MACROS_EOM
|
||||||
|
if (MilterEOMMacros[0] != NULL)
|
||||||
|
milter_send_macros(m, MilterEOMMacros, SMFIC_BODYEOB, e);
|
||||||
|
#endif /* _FFR_MILTER_MACROS_EOM */
|
||||||
|
|
||||||
/* send the final body chunk */
|
/* send the final body chunk */
|
||||||
(void) milter_write(m, SMFIC_BODYEOB, NULL, 0,
|
(void) milter_write(m, SMFIC_BODYEOB, NULL, 0,
|
||||||
m->mf_timeout[SMFTO_WRITE], e);
|
m->mf_timeout[SMFTO_WRITE], e);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1994, 1996-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1994, 1996-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1994
|
* Copyright (c) 1994
|
||||||
@ -14,7 +14,7 @@
|
|||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: mime.c,v 8.130.2.1 2003/04/15 01:05:59 ca Exp $")
|
SM_RCSID("@(#)$Id: mime.c,v 8.130.2.3 2004/01/08 21:42:56 ca Exp $")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** MIME support.
|
** MIME support.
|
||||||
@ -33,6 +33,11 @@ SM_RCSID("@(#)$Id: mime.c,v 8.130.2.1 2003/04/15 01:05:59 ca Exp $")
|
|||||||
** the problem.
|
** the problem.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* use "old" mime 7 to 8 algorithm by default */
|
||||||
|
#ifndef MIME7TO8_OLD
|
||||||
|
# define MIME7TO8_OLD 1
|
||||||
|
#endif /* ! MIME7TO8_OLD */
|
||||||
|
|
||||||
#if MIME8TO7
|
#if MIME8TO7
|
||||||
static int isboundary __P((char *, char **));
|
static int isboundary __P((char *, char **));
|
||||||
static int mimeboundary __P((char *, char **));
|
static int mimeboundary __P((char *, char **));
|
||||||
@ -1064,54 +1069,41 @@ mime7to8(mci, header, e)
|
|||||||
c1 = CHAR64(c1);
|
c1 = CHAR64(c1);
|
||||||
c2 = CHAR64(c2);
|
c2 = CHAR64(c2);
|
||||||
|
|
||||||
|
#if MIME7TO8_OLD
|
||||||
|
#define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \
|
||||||
|
++fbufp;
|
||||||
|
#else /* MIME7TO8_OLD */
|
||||||
|
#define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \
|
||||||
|
{ \
|
||||||
|
++fbufp; \
|
||||||
|
pxflags |= PXLF_NOADDEOL; \
|
||||||
|
}
|
||||||
|
#endif /* MIME7TO8_OLD */
|
||||||
|
|
||||||
|
#define PUTLINE64 \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE]) \
|
||||||
|
{ \
|
||||||
|
CHK_EOL; \
|
||||||
|
putxline((char *) fbuf, fbufp - fbuf, mci, pxflags); \
|
||||||
|
pxflags &= ~PXLF_NOADDEOL; \
|
||||||
|
fbufp = fbuf; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
*fbufp = (c1 << 2) | ((c2 & 0x30) >> 4);
|
*fbufp = (c1 << 2) | ((c2 & 0x30) >> 4);
|
||||||
if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE])
|
PUTLINE64;
|
||||||
{
|
|
||||||
if (*--fbufp != '\n' ||
|
|
||||||
(fbufp > fbuf && *--fbufp != '\r'))
|
|
||||||
{
|
|
||||||
pxflags |= PXLF_NOADDEOL;
|
|
||||||
fbufp++;
|
|
||||||
}
|
|
||||||
putxline((char *) fbuf, fbufp - fbuf,
|
|
||||||
mci, pxflags);
|
|
||||||
pxflags &= ~PXLF_NOADDEOL;
|
|
||||||
fbufp = fbuf;
|
|
||||||
}
|
|
||||||
if (c3 == '=')
|
if (c3 == '=')
|
||||||
continue;
|
continue;
|
||||||
c3 = CHAR64(c3);
|
c3 = CHAR64(c3);
|
||||||
*fbufp = ((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2);
|
*fbufp = ((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2);
|
||||||
if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE])
|
PUTLINE64;
|
||||||
{
|
|
||||||
if (*--fbufp != '\n' ||
|
|
||||||
(fbufp > fbuf && *--fbufp != '\r'))
|
|
||||||
{
|
|
||||||
pxflags |= PXLF_NOADDEOL;
|
|
||||||
fbufp++;
|
|
||||||
}
|
|
||||||
putxline((char *) fbuf, fbufp - fbuf,
|
|
||||||
mci, pxflags);
|
|
||||||
pxflags &= ~PXLF_NOADDEOL;
|
|
||||||
fbufp = fbuf;
|
|
||||||
}
|
|
||||||
if (c4 == '=')
|
if (c4 == '=')
|
||||||
continue;
|
continue;
|
||||||
c4 = CHAR64(c4);
|
c4 = CHAR64(c4);
|
||||||
*fbufp = ((c3 & 0x03) << 6) | c4;
|
*fbufp = ((c3 & 0x03) << 6) | c4;
|
||||||
if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE])
|
PUTLINE64;
|
||||||
{
|
|
||||||
if (*--fbufp != '\n' ||
|
|
||||||
(fbufp > fbuf && *--fbufp != '\r'))
|
|
||||||
{
|
|
||||||
pxflags |= PXLF_NOADDEOL;
|
|
||||||
fbufp++;
|
|
||||||
}
|
|
||||||
putxline((char *) fbuf, fbufp - fbuf,
|
|
||||||
mci, pxflags);
|
|
||||||
pxflags &= ~PXLF_NOADDEOL;
|
|
||||||
fbufp = fbuf;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: queue.c,v 8.863.2.61 2003/09/03 19:58:26 ca Exp $")
|
SM_RCSID("@(#)$Id: queue.c,v 8.863.2.67 2003/12/02 23:56:01 ca Exp $")
|
||||||
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
|
||||||
@ -22,7 +22,16 @@ SM_RCSID("@(#)$Id: queue.c,v 8.863.2.61 2003/09/03 19:58:26 ca Exp $")
|
|||||||
|
|
||||||
# define sm_file_exists(errno) ((errno) == EEXIST)
|
# define sm_file_exists(errno) ((errno) == EEXIST)
|
||||||
|
|
||||||
# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL)
|
# if HASFLOCK && defined(O_EXLOCK)
|
||||||
|
# define SM_OPEN_EXLOCK 1
|
||||||
|
# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL|O_EXLOCK)
|
||||||
|
# else /* HASFLOCK && defined(O_EXLOCK) */
|
||||||
|
# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL)
|
||||||
|
# endif /* HASFLOCK && defined(O_EXLOCK) */
|
||||||
|
|
||||||
|
#ifndef SM_OPEN_EXLOCK
|
||||||
|
# define SM_OPEN_EXLOCK 0
|
||||||
|
#endif /* ! SM_OPEN_EXLOCK */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Historical notes:
|
** Historical notes:
|
||||||
@ -358,6 +367,18 @@ queueup(e, announce, msync)
|
|||||||
** Create control file.
|
** Create control file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define OPEN_TF do \
|
||||||
|
{ \
|
||||||
|
MODE_T oldumask = 0; \
|
||||||
|
\
|
||||||
|
if (bitset(S_IWGRP, QueueFileMode)) \
|
||||||
|
oldumask = umask(002); \
|
||||||
|
tfd = open(tf, TF_OPEN_FLAGS, QueueFileMode); \
|
||||||
|
if (bitset(S_IWGRP, QueueFileMode)) \
|
||||||
|
(void) umask(oldumask); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
newid = (e->e_id == NULL) || !bitset(EF_INQUEUE, e->e_flags);
|
newid = (e->e_id == NULL) || !bitset(EF_INQUEUE, e->e_flags);
|
||||||
(void) sm_strlcpy(tf, queuename(e, NEWQFL_LETTER), sizeof tf);
|
(void) sm_strlcpy(tf, queuename(e, NEWQFL_LETTER), sizeof tf);
|
||||||
tfp = e->e_lockfp;
|
tfp = e->e_lockfp;
|
||||||
@ -370,9 +391,11 @@ queueup(e, announce, msync)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
(void) sm_strlcpy(tf, queuename(e, ANYQFL_LETTER), sizeof tf);
|
(void) sm_strlcpy(tf, queuename(e, ANYQFL_LETTER), sizeof tf);
|
||||||
tfd = open(tf, TF_OPEN_FLAGS, FileMode);
|
OPEN_TF;
|
||||||
if (tfd < 0 ||
|
if (tfd < 0 ||
|
||||||
|
#if !SM_OPEN_EXLOCK
|
||||||
!lockfile(tfd, tf, NULL, LOCK_EX|LOCK_NB) ||
|
!lockfile(tfd, tf, NULL, LOCK_EX|LOCK_NB) ||
|
||||||
|
#endif /* !SM_OPEN_EXLOCK */
|
||||||
(tfp = sm_io_open(SmFtStdiofd, SM_TIME_DEFAULT,
|
(tfp = sm_io_open(SmFtStdiofd, SM_TIME_DEFAULT,
|
||||||
(void *) &tfd, SM_IO_WRONLY_B,
|
(void *) &tfd, SM_IO_WRONLY_B,
|
||||||
NULL)) == NULL)
|
NULL)) == NULL)
|
||||||
@ -396,14 +419,7 @@ queueup(e, announce, msync)
|
|||||||
{
|
{
|
||||||
if (tfd < 0)
|
if (tfd < 0)
|
||||||
{
|
{
|
||||||
MODE_T oldumask = 0;
|
OPEN_TF;
|
||||||
|
|
||||||
if (bitset(S_IWGRP, QueueFileMode))
|
|
||||||
oldumask = umask(002);
|
|
||||||
tfd = open(tf, TF_OPEN_FLAGS, QueueFileMode);
|
|
||||||
if (bitset(S_IWGRP, QueueFileMode))
|
|
||||||
(void) umask(oldumask);
|
|
||||||
|
|
||||||
if (tfd < 0)
|
if (tfd < 0)
|
||||||
{
|
{
|
||||||
if (errno != EEXIST)
|
if (errno != EEXIST)
|
||||||
@ -414,12 +430,22 @@ queueup(e, announce, msync)
|
|||||||
tf, (int) geteuid(),
|
tf, (int) geteuid(),
|
||||||
sm_errstring(errno));
|
sm_errstring(errno));
|
||||||
}
|
}
|
||||||
|
#if SM_OPEN_EXLOCK
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
#endif /* SM_OPEN_EXLOCK */
|
||||||
}
|
}
|
||||||
if (tfd >= 0)
|
if (tfd >= 0)
|
||||||
{
|
{
|
||||||
|
#if SM_OPEN_EXLOCK
|
||||||
|
/* file is locked by open() */
|
||||||
|
break;
|
||||||
|
#else /* SM_OPEN_EXLOCK */
|
||||||
if (lockfile(tfd, tf, NULL, LOCK_EX|LOCK_NB))
|
if (lockfile(tfd, tf, NULL, LOCK_EX|LOCK_NB))
|
||||||
break;
|
break;
|
||||||
else if (LogLevel > 0 && (i % 32) == 0)
|
else
|
||||||
|
#endif /* SM_OPEN_EXLOCK */
|
||||||
|
if (LogLevel > 0 && (i % 32) == 0)
|
||||||
sm_syslog(LOG_ALERT, e->e_id,
|
sm_syslog(LOG_ALERT, e->e_id,
|
||||||
"queueup: cannot lock %s: %s",
|
"queueup: cannot lock %s: %s",
|
||||||
tf, sm_errstring(errno));
|
tf, sm_errstring(errno));
|
||||||
@ -5172,6 +5198,36 @@ queuename(e, type)
|
|||||||
sm_dprintf("queuename: %s\n", buf);
|
sm_dprintf("queuename: %s\n", buf);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** INIT_QID_ALG -- Initialize the (static) parameters that are used to
|
||||||
|
** generate a queue ID.
|
||||||
|
**
|
||||||
|
** This function is called by the daemon to reset
|
||||||
|
** LastQueueTime and LastQueuePid which are used by assign_queueid().
|
||||||
|
** Otherwise the algorithm may cause problems because
|
||||||
|
** LastQueueTime and LastQueuePid are set indirectly by main()
|
||||||
|
** before the daemon process is started, hence LastQueuePid is not
|
||||||
|
** the pid of the daemon and therefore a child of the daemon can
|
||||||
|
** actually have the same pid as LastQueuePid which means the section
|
||||||
|
** in assign_queueid():
|
||||||
|
** * see if we need to get a new base time/pid *
|
||||||
|
** is NOT triggered which will cause the same queue id to be generated.
|
||||||
|
**
|
||||||
|
** Parameters:
|
||||||
|
** none
|
||||||
|
**
|
||||||
|
** Returns:
|
||||||
|
** none.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
init_qid_alg()
|
||||||
|
{
|
||||||
|
LastQueueTime = 0;
|
||||||
|
LastQueuePid = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** ASSIGN_QUEUEID -- assign a queue ID for this envelope.
|
** ASSIGN_QUEUEID -- assign a queue ID for this envelope.
|
||||||
**
|
**
|
||||||
@ -5188,8 +5244,20 @@ queuename(e, type)
|
|||||||
** none.
|
** none.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char QueueIdChars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx";
|
static const char QueueIdChars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||||
# define QIC_LEN 60
|
# define QIC_LEN 60
|
||||||
|
# define QIC_LEN_R 62
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Note: the length is "officially" 60 because minutes and seconds are
|
||||||
|
** usually only 0-59. However (Linux):
|
||||||
|
** tm_sec The number of seconds after the minute, normally in
|
||||||
|
** the range 0 to 59, but can be up to 61 to allow for
|
||||||
|
** leap seconds.
|
||||||
|
** Hence the real length of the string is 62 to take this into account.
|
||||||
|
** Alternatively % QIC_LEN can (should) be used for access everywhere.
|
||||||
|
*/
|
||||||
|
|
||||||
# define queuenextid() CurrentPid
|
# define queuenextid() CurrentPid
|
||||||
|
|
||||||
|
|
||||||
@ -5244,8 +5312,8 @@ assign_queueid(e)
|
|||||||
idbuf[1] = QueueIdChars[tm->tm_mon];
|
idbuf[1] = QueueIdChars[tm->tm_mon];
|
||||||
idbuf[2] = QueueIdChars[tm->tm_mday];
|
idbuf[2] = QueueIdChars[tm->tm_mday];
|
||||||
idbuf[3] = QueueIdChars[tm->tm_hour];
|
idbuf[3] = QueueIdChars[tm->tm_hour];
|
||||||
idbuf[4] = QueueIdChars[tm->tm_min];
|
idbuf[4] = QueueIdChars[tm->tm_min % QIC_LEN_R];
|
||||||
idbuf[5] = QueueIdChars[tm->tm_sec];
|
idbuf[5] = QueueIdChars[tm->tm_sec % QIC_LEN_R];
|
||||||
idbuf[6] = QueueIdChars[seq / QIC_LEN];
|
idbuf[6] = QueueIdChars[seq / QIC_LEN];
|
||||||
idbuf[7] = QueueIdChars[seq % QIC_LEN];
|
idbuf[7] = QueueIdChars[seq % QIC_LEN];
|
||||||
(void) sm_snprintf(&idbuf[8], sizeof idbuf - 8, "%06d",
|
(void) sm_snprintf(&idbuf[8], sizeof idbuf - 8, "%06d",
|
||||||
@ -7357,10 +7425,10 @@ cmpidx(a, b)
|
|||||||
void
|
void
|
||||||
makeworkgroups()
|
makeworkgroups()
|
||||||
{
|
{
|
||||||
int i, j, total_runners = 0;
|
int i, j, total_runners, dir, h;
|
||||||
int dir;
|
|
||||||
SORTQGRP_T si[MAXQUEUEGROUPS + 1];
|
SORTQGRP_T si[MAXQUEUEGROUPS + 1];
|
||||||
|
|
||||||
|
total_runners = 0;
|
||||||
if (NumQueue == 1 && strcmp(Queue[0]->qg_name, "mqueue") == 0)
|
if (NumQueue == 1 && strcmp(Queue[0]->qg_name, "mqueue") == 0)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -7456,18 +7524,19 @@ makeworkgroups()
|
|||||||
(WorkGrp[j].wg_numqgrp + 1)));
|
(WorkGrp[j].wg_numqgrp + 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
WorkGrp[j].wg_qgs[WorkGrp[j].wg_numqgrp] = Queue[si[i].sg_idx];
|
h = si[i].sg_idx;
|
||||||
|
WorkGrp[j].wg_qgs[WorkGrp[j].wg_numqgrp] = Queue[h];
|
||||||
WorkGrp[j].wg_numqgrp++;
|
WorkGrp[j].wg_numqgrp++;
|
||||||
WorkGrp[j].wg_runners += Queue[i]->qg_maxqrun;
|
WorkGrp[j].wg_runners += Queue[h]->qg_maxqrun;
|
||||||
Queue[si[i].sg_idx]->qg_wgrp = j;
|
Queue[h]->qg_wgrp = j;
|
||||||
|
|
||||||
if (WorkGrp[j].wg_maxact == 0)
|
if (WorkGrp[j].wg_maxact == 0)
|
||||||
{
|
{
|
||||||
/* can't have more runners than allowed total */
|
/* can't have more runners than allowed total */
|
||||||
if (MaxQueueChildren > 0 &&
|
if (MaxQueueChildren > 0 &&
|
||||||
Queue[i]->qg_maxqrun > MaxQueueChildren)
|
Queue[h]->qg_maxqrun > MaxQueueChildren)
|
||||||
Queue[i]->qg_maxqrun = MaxQueueChildren;
|
Queue[h]->qg_maxqrun = MaxQueueChildren;
|
||||||
WorkGrp[j].wg_maxact = Queue[i]->qg_maxqrun;
|
WorkGrp[j].wg_maxact = Queue[h]->qg_maxqrun;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -7477,9 +7546,9 @@ makeworkgroups()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* keep track of the lowest interval for a persistent runner */
|
/* keep track of the lowest interval for a persistent runner */
|
||||||
if (Queue[si[i].sg_idx]->qg_queueintvl > 0 &&
|
if (Queue[h]->qg_queueintvl > 0 &&
|
||||||
WorkGrp[j].wg_lowqintvl < Queue[si[i].sg_idx]->qg_queueintvl)
|
WorkGrp[j].wg_lowqintvl < Queue[h]->qg_queueintvl)
|
||||||
WorkGrp[j].wg_lowqintvl = Queue[si[i].sg_idx]->qg_queueintvl;
|
WorkGrp[j].wg_lowqintvl = Queue[h]->qg_queueintvl;
|
||||||
j += dir;
|
j += dir;
|
||||||
}
|
}
|
||||||
if (tTd(41, 9))
|
if (tTd(41, 9))
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: readcf.c,v 8.607.2.11 2003/04/03 23:04:06 ca Exp $")
|
SM_RCSID("@(#)$Id: readcf.c,v 8.607.2.12 2003/10/07 17:45:28 ca Exp $")
|
||||||
|
|
||||||
#if NETINET || NETINET6
|
#if NETINET || NETINET6
|
||||||
# include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
@ -3153,7 +3153,7 @@ setoption(opt, val, safe, sticky, e)
|
|||||||
RunAsGid = pw->pw_gid;
|
RunAsGid = pw->pw_gid;
|
||||||
else if (UseMSP && *p == '\0')
|
else if (UseMSP && *p == '\0')
|
||||||
(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
|
(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
|
||||||
"WARNING: RunAsGid for MSP ignored, check group ids (egid=%d, want=%d)\n",
|
"WARNING: RunAsUser for MSP ignored, check group ids (egid=%d, want=%d)\n",
|
||||||
(int) EffGid,
|
(int) EffGid,
|
||||||
(int) pw->pw_gid);
|
(int) pw->pw_gid);
|
||||||
}
|
}
|
||||||
@ -3177,7 +3177,7 @@ setoption(opt, val, safe, sticky, e)
|
|||||||
else if (UseMSP)
|
else if (UseMSP)
|
||||||
(void) sm_io_fprintf(smioout,
|
(void) sm_io_fprintf(smioout,
|
||||||
SM_TIME_DEFAULT,
|
SM_TIME_DEFAULT,
|
||||||
"WARNING: RunAsGid for MSP ignored, check group ids (egid=%d, want=%d)\n",
|
"WARNING: RunAsUser for MSP ignored, check group ids (egid=%d, want=%d)\n",
|
||||||
(int) EffGid,
|
(int) EffGid,
|
||||||
(int) runasgid);
|
(int) runasgid);
|
||||||
}
|
}
|
||||||
@ -3194,7 +3194,7 @@ setoption(opt, val, safe, sticky, e)
|
|||||||
else if (UseMSP)
|
else if (UseMSP)
|
||||||
(void) sm_io_fprintf(smioout,
|
(void) sm_io_fprintf(smioout,
|
||||||
SM_TIME_DEFAULT,
|
SM_TIME_DEFAULT,
|
||||||
"WARNING: RunAsGid for MSP ignored, check group ids (egid=%d, want=%d)\n",
|
"WARNING: RunAsUser for MSP ignored, check group ids (egid=%d, want=%d)\n",
|
||||||
(int) EffGid,
|
(int) EffGid,
|
||||||
(int) gr->gr_gid);
|
(int) gr->gr_gid);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: recipient.c,v 8.330.2.2 2003/09/16 19:56:25 ca Exp $")
|
SM_RCSID("@(#)$Id: recipient.c,v 8.330.2.4 2003/10/06 20:43:29 ca Exp $")
|
||||||
|
|
||||||
static void includetimeout __P((void));
|
static void includetimeout __P((void));
|
||||||
static ADDRESS *self_reference __P((ADDRESS *));
|
static ADDRESS *self_reference __P((ADDRESS *));
|
||||||
@ -397,7 +397,8 @@ removefromlist(list, sendq, e)
|
|||||||
for (pq = sendq; (q = *pq) != NULL; pq = &q->q_next)
|
for (pq = sendq; (q = *pq) != NULL; pq = &q->q_next)
|
||||||
{
|
{
|
||||||
if (!QS_IS_DEAD(q->q_state) &&
|
if (!QS_IS_DEAD(q->q_state) &&
|
||||||
sameaddr(q, &a))
|
(sameaddr(q, &a) ||
|
||||||
|
strcmp(q->q_paddr, a.q_paddr) == 0))
|
||||||
{
|
{
|
||||||
if (tTd(25, 5))
|
if (tTd(25, 5))
|
||||||
{
|
{
|
||||||
|
@ -9,9 +9,9 @@
|
|||||||
.\" the sendmail distribution.
|
.\" the sendmail distribution.
|
||||||
.\"
|
.\"
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: sendmail.8,v 8.51.2.1 2003/05/20 16:38:15 gshapiro Exp $
|
.\" $Id: sendmail.8,v 8.51.2.3 2003/12/01 17:02:00 ca Exp $
|
||||||
.\"
|
.\"
|
||||||
.TH SENDMAIL 8 "$Date: 2003/05/20 16:38:15 $"
|
.TH SENDMAIL 8 "$Date: 2003/12/01 17:02:00 $"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
sendmail
|
sendmail
|
||||||
\- an electronic mail transport agent
|
\- an electronic mail transport agent
|
||||||
@ -150,11 +150,32 @@ users or mailing lists.
|
|||||||
.BI \-C file
|
.BI \-C file
|
||||||
Use alternate configuration file.
|
Use alternate configuration file.
|
||||||
.B Sendmail
|
.B Sendmail
|
||||||
refuses to run as root if an alternate configuration file is specified.
|
gives up any enhanced (set-user-ID or set-group-ID) privileges
|
||||||
|
if an alternate configuration file is specified.
|
||||||
.TP
|
.TP
|
||||||
.BI \-d X
|
.BI \-d category . level...
|
||||||
Set debugging value to
|
Set the debugging flag for
|
||||||
.IR X .
|
.I category
|
||||||
|
to
|
||||||
|
.IR level .
|
||||||
|
.I Category
|
||||||
|
is either an integer or a name specifying the topic, and
|
||||||
|
.I level
|
||||||
|
an integer specifying the level of debugging output desired.
|
||||||
|
Higher levels generally mean more output.
|
||||||
|
More than one flag can be specified by separating them with commas.
|
||||||
|
A list of numeric debugging categories can be found in the TRACEFLAGS file
|
||||||
|
in the sendmail source distribution.
|
||||||
|
.br
|
||||||
|
The option
|
||||||
|
.B \-d0.1
|
||||||
|
prints the version of
|
||||||
|
.B sendmail
|
||||||
|
and the options it was compiled with.
|
||||||
|
.br
|
||||||
|
Most other categories are only useful with, and documented in,
|
||||||
|
.BR sendmail 's
|
||||||
|
source code.
|
||||||
.ne 1i
|
.ne 1i
|
||||||
.TP
|
.TP
|
||||||
.BI \-F fullname
|
.BI \-F fullname
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
#ifdef _DEFINE
|
#ifdef _DEFINE
|
||||||
# ifndef lint
|
# ifndef lint
|
||||||
SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.919.2.28 2003/09/03 19:58:27 ca Exp $";
|
SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.919.2.29 2003/11/07 00:08:02 ca Exp $";
|
||||||
# endif /* ! lint */
|
# endif /* ! lint */
|
||||||
#endif /* _DEFINE */
|
#endif /* _DEFINE */
|
||||||
|
|
||||||
@ -1973,6 +1973,7 @@ extern void setup_queues __P((bool));
|
|||||||
extern bool setnewqueue __P((ENVELOPE *));
|
extern bool setnewqueue __P((ENVELOPE *));
|
||||||
extern bool shouldqueue __P((long, time_t));
|
extern bool shouldqueue __P((long, time_t));
|
||||||
extern void sync_queue_time __P((void));
|
extern void sync_queue_time __P((void));
|
||||||
|
extern void init_qid_alg __P((void));
|
||||||
extern int print_single_queue __P((int, int));
|
extern int print_single_queue __P((int, int));
|
||||||
#if REQUIRES_DIR_FSYNC
|
#if REQUIRES_DIR_FSYNC
|
||||||
# define SYNC_DIR(path, panic) sync_dir(path, panic)
|
# define SYNC_DIR(path, panic) sync_dir(path, panic)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
# include <libmilter/mfdef.h>
|
# include <libmilter/mfdef.h>
|
||||||
#endif /* MILTER */
|
#endif /* MILTER */
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.829.2.31 2003/07/01 17:30:01 ca Exp $")
|
SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.829.2.34 2004/01/14 19:13:46 ca Exp $")
|
||||||
|
|
||||||
#if SASL || STARTTLS
|
#if SASL || STARTTLS
|
||||||
# include <sys/time.h>
|
# include <sys/time.h>
|
||||||
@ -1288,6 +1288,7 @@ smtp(nullserver, d_flags, e)
|
|||||||
case CMDEHLO:
|
case CMDEHLO:
|
||||||
case CMDNOOP:
|
case CMDNOOP:
|
||||||
case CMDRSET:
|
case CMDRSET:
|
||||||
|
case CMDERROR:
|
||||||
/* process normally */
|
/* process normally */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2338,6 +2339,29 @@ tlsfail:
|
|||||||
|
|
||||||
case CMDRCPT: /* rcpt -- designate recipient */
|
case CMDRCPT: /* rcpt -- designate recipient */
|
||||||
DELAY_CONN("RCPT");
|
DELAY_CONN("RCPT");
|
||||||
|
if (BadRcptThrottle > 0 &&
|
||||||
|
n_badrcpts >= BadRcptThrottle)
|
||||||
|
{
|
||||||
|
if (LogLevel > 5 &&
|
||||||
|
n_badrcpts == BadRcptThrottle)
|
||||||
|
{
|
||||||
|
sm_syslog(LOG_INFO, e->e_id,
|
||||||
|
"%s: Possible SMTP RCPT flood, throttling.",
|
||||||
|
CurSmtpClient);
|
||||||
|
|
||||||
|
/* To avoid duplicated message */
|
||||||
|
n_badrcpts++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Don't use exponential backoff for now.
|
||||||
|
** Some servers will open more connections
|
||||||
|
** and actually overload the receiver even
|
||||||
|
** more.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(void) sleep(1);
|
||||||
|
}
|
||||||
if (!smtp.sm_gotmail)
|
if (!smtp.sm_gotmail)
|
||||||
{
|
{
|
||||||
usrerr("503 5.0.0 Need MAIL before RCPT");
|
usrerr("503 5.0.0 Need MAIL before RCPT");
|
||||||
@ -2384,29 +2408,6 @@ tlsfail:
|
|||||||
e, true);
|
e, true);
|
||||||
macdefine(&e->e_macro, A_PERM,
|
macdefine(&e->e_macro, A_PERM,
|
||||||
macid("{addr_type}"), NULL);
|
macid("{addr_type}"), NULL);
|
||||||
if (BadRcptThrottle > 0 &&
|
|
||||||
n_badrcpts >= BadRcptThrottle)
|
|
||||||
{
|
|
||||||
if (LogLevel > 5 &&
|
|
||||||
n_badrcpts == BadRcptThrottle)
|
|
||||||
{
|
|
||||||
sm_syslog(LOG_INFO, e->e_id,
|
|
||||||
"%s: Possible SMTP RCPT flood, throttling.",
|
|
||||||
CurSmtpClient);
|
|
||||||
|
|
||||||
/* To avoid duplicated message */
|
|
||||||
n_badrcpts++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Don't use exponential backoff for now.
|
|
||||||
** Some servers will open more connections
|
|
||||||
** and actually overload the receiver even
|
|
||||||
** more.
|
|
||||||
*/
|
|
||||||
|
|
||||||
(void) sleep(1);
|
|
||||||
}
|
|
||||||
if (Errors > 0)
|
if (Errors > 0)
|
||||||
goto rcpt_done;
|
goto rcpt_done;
|
||||||
if (a == NULL)
|
if (a == NULL)
|
||||||
@ -3146,7 +3147,7 @@ smtp_data(smtp, e)
|
|||||||
doublequeue = false;
|
doublequeue = false;
|
||||||
|
|
||||||
aborting = Errors > 0;
|
aborting = Errors > 0;
|
||||||
if (!aborting &&
|
if (!(aborting || bitset(EF_DISCARD, e->e_flags)) &&
|
||||||
#if _FFR_QUARANTINE
|
#if _FFR_QUARANTINE
|
||||||
(QueueMode == QM_QUARANTINE || e->e_quarmsg == NULL) &&
|
(QueueMode == QM_QUARANTINE || e->e_quarmsg == NULL) &&
|
||||||
#endif /* _FFR_QUARANTINE */
|
#endif /* _FFR_QUARANTINE */
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: tls.c,v 8.79.4.4 2003/03/20 00:03:42 ca Exp $")
|
SM_RCSID("@(#)$Id: tls.c,v 8.79.4.5 2003/12/28 04:23:28 gshapiro Exp $")
|
||||||
|
|
||||||
#if STARTTLS
|
#if STARTTLS
|
||||||
# include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
@ -344,30 +344,36 @@ tls_set_verify(ctx, ssl, vrfy)
|
|||||||
# define TLS_S_DHPAR_EX 0x00400000 /* DH param file exists */
|
# define TLS_S_DHPAR_EX 0x00400000 /* DH param file exists */
|
||||||
# define TLS_S_DHPAR_OK 0x00800000 /* DH param file is ok to use */
|
# define TLS_S_DHPAR_OK 0x00800000 /* DH param file is ok to use */
|
||||||
|
|
||||||
|
/* Type of variable */
|
||||||
|
# define TLS_T_OTHER 0
|
||||||
|
# define TLS_T_SRV 1
|
||||||
|
# define TLS_T_CLT 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** TLS_OK_F -- can var be an absolute filename?
|
** TLS_OK_F -- can var be an absolute filename?
|
||||||
**
|
**
|
||||||
** Parameters:
|
** Parameters:
|
||||||
** var -- filename
|
** var -- filename
|
||||||
** fn -- what is the filename used for?
|
** fn -- what is the filename used for?
|
||||||
** srv -- server side?
|
** type -- type of variable
|
||||||
**
|
**
|
||||||
** Returns:
|
** Returns:
|
||||||
** ok?
|
** ok?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
tls_ok_f(var, fn, srv)
|
tls_ok_f(var, fn, type)
|
||||||
char *var;
|
char *var;
|
||||||
char *fn;
|
char *fn;
|
||||||
bool srv;
|
int type;
|
||||||
{
|
{
|
||||||
/* must be absolute pathname */
|
/* must be absolute pathname */
|
||||||
if (var != NULL && *var == '/')
|
if (var != NULL && *var == '/')
|
||||||
return true;
|
return true;
|
||||||
if (LogLevel > 12)
|
if (LogLevel > 12)
|
||||||
sm_syslog(LOG_WARNING, NOQID, "STARTTLS: %s%s missing",
|
sm_syslog(LOG_WARNING, NOQID, "STARTTLS: %s%s missing",
|
||||||
srv ? "Server" : "Client", fn);
|
type == TLS_T_SRV ? "Server" :
|
||||||
|
(type == TLS_T_CLT ? "Client" : ""), var);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -407,16 +413,16 @@ tls_safe_f(var, sff, srv)
|
|||||||
** fn -- what is the filename used for?
|
** fn -- what is the filename used for?
|
||||||
** req -- is the file required?
|
** req -- is the file required?
|
||||||
** st -- status bit to set if ok
|
** st -- status bit to set if ok
|
||||||
** srv -- server side?
|
** type -- type of variable
|
||||||
**
|
**
|
||||||
** Side Effects:
|
** Side Effects:
|
||||||
** uses r, ok; may change ok and status.
|
** uses r, ok; may change ok and status.
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
|
|
||||||
# define TLS_OK_F(var, fn, req, st, srv) if (ok) \
|
# define TLS_OK_F(var, fn, req, st, type) if (ok) \
|
||||||
{ \
|
{ \
|
||||||
r = tls_ok_f(var, fn, srv); \
|
r = tls_ok_f(var, fn, type); \
|
||||||
if (r) \
|
if (r) \
|
||||||
status |= st; \
|
status |= st; \
|
||||||
else if (req) \
|
else if (req) \
|
||||||
@ -539,13 +545,13 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
TLS_OK_F(certfile, "CertFile", bitset(TLS_I_CERT_EX, req),
|
TLS_OK_F(certfile, "CertFile", bitset(TLS_I_CERT_EX, req),
|
||||||
TLS_S_CERT_EX, srv);
|
TLS_S_CERT_EX, srv ? TLS_T_SRV : TLS_T_CLT);
|
||||||
TLS_OK_F(keyfile, "KeyFile", bitset(TLS_I_KEY_EX, req),
|
TLS_OK_F(keyfile, "KeyFile", bitset(TLS_I_KEY_EX, req),
|
||||||
TLS_S_KEY_EX, srv);
|
TLS_S_KEY_EX, srv ? TLS_T_SRV : TLS_T_CLT);
|
||||||
TLS_OK_F(cacertpath, "CACertPath", bitset(TLS_I_CERTP_EX, req),
|
TLS_OK_F(cacertpath, "CACertPath", bitset(TLS_I_CERTP_EX, req),
|
||||||
TLS_S_CERTP_EX, srv);
|
TLS_S_CERTP_EX, TLS_T_OTHER);
|
||||||
TLS_OK_F(cacertfile, "CACertFile", bitset(TLS_I_CERTF_EX, req),
|
TLS_OK_F(cacertfile, "CACertFile", bitset(TLS_I_CERTF_EX, req),
|
||||||
TLS_S_CERTF_EX, srv);
|
TLS_S_CERTF_EX, TLS_T_OTHER);
|
||||||
|
|
||||||
# if _FFR_TLS_1
|
# if _FFR_TLS_1
|
||||||
/*
|
/*
|
||||||
@ -556,12 +562,12 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam)
|
|||||||
if (cf2 != NULL)
|
if (cf2 != NULL)
|
||||||
{
|
{
|
||||||
TLS_OK_F(cf2, "CertFile", bitset(TLS_I_CERT_EX, req),
|
TLS_OK_F(cf2, "CertFile", bitset(TLS_I_CERT_EX, req),
|
||||||
TLS_S_CERT2_EX, srv);
|
TLS_S_CERT2_EX, srv ? TLS_T_SRV : TLS_T_CLT);
|
||||||
}
|
}
|
||||||
if (kf2 != NULL)
|
if (kf2 != NULL)
|
||||||
{
|
{
|
||||||
TLS_OK_F(kf2, "KeyFile", bitset(TLS_I_KEY_EX, req),
|
TLS_OK_F(kf2, "KeyFile", bitset(TLS_I_KEY_EX, req),
|
||||||
TLS_S_KEY2_EX, srv);
|
TLS_S_KEY2_EX, srv ? TLS_T_SRV : TLS_T_CLT);
|
||||||
}
|
}
|
||||||
# endif /* _FFR_TLS_1 */
|
# endif /* _FFR_TLS_1 */
|
||||||
|
|
||||||
@ -599,7 +605,7 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam)
|
|||||||
{
|
{
|
||||||
TLS_OK_F(dhparam, "DHParameters",
|
TLS_OK_F(dhparam, "DHParameters",
|
||||||
bitset(TLS_I_DHPAR_EX, req),
|
bitset(TLS_I_DHPAR_EX, req),
|
||||||
TLS_S_DHPAR_EX, srv);
|
TLS_S_DHPAR_EX, TLS_T_OTHER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ok)
|
if (!ok)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <sendmail.h>
|
#include <sendmail.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: util.c,v 8.363.2.7 2003/06/02 03:25:39 gshapiro Exp $")
|
SM_RCSID("@(#)$Id: util.c,v 8.363.2.10 2003/10/15 17:19:14 ca Exp $")
|
||||||
|
|
||||||
#include <sysexits.h>
|
#include <sysexits.h>
|
||||||
#include <sm/xtrap.h>
|
#include <sm/xtrap.h>
|
||||||
@ -2380,7 +2380,8 @@ str2prt(s)
|
|||||||
*h++ = 'r';
|
*h++ = 'r';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
(void) sm_snprintf(h, l, "%03o", (int) c);
|
(void) sm_snprintf(h, l, "%03o",
|
||||||
|
(unsigned int)((unsigned char) c));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** XXX since l is unsigned this may
|
** XXX since l is unsigned this may
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
|
* Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (c) 1983 Eric P. Allman. All rights reserved.
|
* Copyright (c) 1983 Eric P. Allman. All rights reserved.
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -13,6 +13,6 @@
|
|||||||
|
|
||||||
#include <sm/gen.h>
|
#include <sm/gen.h>
|
||||||
|
|
||||||
SM_RCSID("@(#)$Id: version.c,v 8.104.2.22 2003/09/16 20:02:04 ca Exp $")
|
SM_RCSID("@(#)$Id: version.c,v 8.104.2.26 2004/01/13 00:29:26 ca Exp $")
|
||||||
|
|
||||||
char Version[] = "8.12.10";
|
char Version[] = "8.12.11";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user