This commit was generated by cvs2svn to compensate for changes in r20103,

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
Peter Wemm 1996-12-03 06:07:35 +00:00
commit b4165e3a49
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=20104
19 changed files with 595 additions and 119 deletions

View file

@ -1,11 +1,110 @@
SENDMAIL RELEASE NOTES
@(#)RELEASE_NOTES 8.8.3.2 (Berkeley) 11/16/96
@(#)RELEASE_NOTES 8.8.4.4 (Berkeley) 12/2/96
This listing shows the version of the sendmail binary, the version
of the sendmail configuration files, the date of release, and a
summary of the changes in that release.
8.8.4/8.8.4 96/12/02
SECURITY: under some circumstances, an attacker could get additional
permissions by hard linking to files that were group
writable by the attacker. The solution is to disallow any
files that have hard links -- this will affect .forward,
:include:, and output files. Problem noted by Terry
Kyriacopoulos of Interlog Internet Services. As a
workaround, set UnsafeGroupWrites -- always a good idea.
SECURITY: the TryNullMXList (w) option should not be safe -- if it
is, it is possible to do a denial-of-service attack on
MX hosts that rely on the use of the null MX list. There
is no danger if you have this option turned off (the default).
Problem noted by Dan Bernstein. Also, make the DontInitGroups
unsafe. I know of no specific attack against this, although
a denial-of-service attack is probably possible, but in theory
you should not be able to safely tweak anything that affects
the permissions that are used when mail is delivered.
Purgestat could go into an infinite loop if one of the host status
directories somehow became empty. Problem noted by Roy
Mongiovi of Georgia Tech.
Processes got "lost" when counting children due to a race condition.
This caused "proc_list_probe: lost pid" messages to be logged.
Problem noted by several people.
On systems with System V SIGCLD child signal semantics (notably AIX
and HP-UX), mail transactions would print the message "451
SMTP-MAIL: lost child: No child processes". Problem noted
by several people.
Miscellaneous compiler warnings on picky compilers (or when setting
gcc to high warning levels). From Tom Moore of NCR Corp.
SMTP protocol errors, and most errors on MAIL FROM: lines should
not be persistent between runs, since they are based on the
message rather than the host. Problem noted by Matt Dillon
of Best Internet Communications.
The F=7 flag was ignored on SMTP mailers. Problem noted by Tom Moore
of NCR (a.k.a., AT&T Global Information Solutions).
Avoid the possibility of having a child daemon run to completion
(including closing the SMTP socket) before the parent has
had a chance to close the socket; this can cause the parent
to hang for a long time waiting for the socket to drain.
Patch from Don Lewis of TDK Semiconductor.
If the fork() failed in a queue run, the queue runners would not be
rescheduled (so queue runs would stop). Patch from Don Lewis.
Some error conditions in ETRN could cause output without an SMTP
status code. Problem noted by Don Lewis.
Multiple :maildrop addresses in the user database didn't work properly.
Patch from Roy Mongiovi of Georgia Tech.
Add ".db" automatically onto any user database spec that does not
already have it; this is for consistency with makemap, the
K line, and the documentation. Inconsistency pointed out
by Roy Mongiovi.
Allow sendmail to be properly called in nohup mode. Patch from
Kyle Jones of UUNET.
Change ETRN to ignore but still update host status files; previously
it would ignore them and not save the updated status, which
caused stale information to be maintained. Based on a patch
from Christopher Davis of Kapor Enterprises Inc. Also, have
ETRN ignore the MinQueueAge option.
Patch long term host status to recover more gracefully from an empty
host status file condition. Patch from NAKAMURA Motonori
of Kyoto University.
Several patches to signal handling code to fix potential race
conditions from Don Lewis.
Make it possible to compile with -DDAEMON=0 (previously it had some
compile errors). This turns DAEMON, QUEUE, and SMTP into
0/1 compilation flags. Note that DAEMON is an obsolete
compile flag; use NETINET instead. Solution based on a
patch from Bryan Costales.
PORTABILITY FIXES:
AIX4: getpwnam() and getpwuid() do a sequential scan of the
/etc/security/passwd file when called as root. This
is very slow on some systems. To speed it up, use the
(undocumented) _getpw{nam,uid}_shadow() routines.
Patch from Chris Thomas of UCLA/OAC Systems Group.
SCO 5.x: include -lprot in the Makefile. Patch from Bill
Glicker of Burrelle's Information Service.
NEWS-OS 4.x: need a definition for MODE_T to compile. Patch
from Makoto MATSUSHITA of Osaka University.
SunOS 4.0.3: compile problems. Patches from Andrew Cole of
Leeds University and SASABE Tetsuro of the University
of Tokyo.
DG/UX 5.4.4.11 from Brian J. Murrell of InterLinx Support
Services, Inc.
Domain/OS from Don (Truck) Lewis of TDK Semiconductor Corp.
I believe this to have only been a problem if you
compiled with -DUSE_VENDOR_CF_PATH -- another reason
to stick with /etc/sendmail.cf as your One True Path.
Digital UNIX (OSF/1 on Alpha) load average computation from
Martin Laubach of the Technischen Universität Wien.
CONFIG: change default Received: line to be multiple lines rather
than one long one. By popular demand.
MAIL.LOCAL: warnings weren't being logged on some systems. Patch
from Jerome Berkman of U.C. Berkeley.
MAKEMAP: be sure to zero hinfo to avoid cruft that can cause runs
to take a very long time. Problem noted by Yoshiro YONEYA
of NTT Software Corporation.
CONTRIB: add etrn.pl, contributed by John Beck.
NEW FILES:
contrib/etrn.pl
8.8.3/8.8.3 96/11/17
SECURITY: it was possible to get a root shell by lying to sendmail
about argv[0] and then sending it a signal. Problem noted
@ -83,7 +182,7 @@ summary of the changes in that release.
AIX4: use tzname[] vector to determine time zone name.
Patch from NAKAMURA Motonori of Kyoto University.
MkLinux: add Makefile.Linux.ppc and OSTYPE(mklinux) support.
Contributed by Paul DeBois <dubois@primate.wisc.edu>.
Contributed by Paul DuBois <dubois@primate.wisc.edu>.
Solaris: kstat(3k) support for retrieving the load average.
This adds the LA_KSTAT definition for LA_TYPE.
The outline of the implementation was contributed

View file

@ -128,7 +128,9 @@ define(`confMAILER_NAME', ``MAILER-DAEMON'')
define(`confFROM_LINE', `From $g $d')
define(`confOPERATORS', `.:%@!^/[]+')
define(`confSMTP_LOGIN_MSG', `$j Sendmail $v/$Z; $b')
define(`confRECEIVED_HEADER', `$?sfrom $s $.$?_($?s$|from $.$_) $.by $j ($v/$Z)$?r with $r$. id $i$?u for $u$.; $b')
define(`confRECEIVED_HEADER', `$?sfrom $s $.$?_($?s$|from $.$_)
$.by $j ($v/$Z)$?r with $r$.
id $i$?u for $u$.; $b')
define(`confSEVEN_BIT_INPUT', `False')
define(`confEIGHT_BIT_HANDLING', `pass8')
define(`confALIAS_WAIT', `10')
@ -154,4 +156,4 @@ define(`confMIME_FORMAT_ERRORS', `True')
define(`confFORWARD_PATH', `$z/.forward.$w:$z/.forward')
divert(0)dnl
VERSIONID(`@(#)cfhead.m4 8.6 (Berkeley) 6/19/96')
VERSIONID(`@(#)cfhead.m4 8.7 (Berkeley) 11/20/96')

View file

@ -34,7 +34,7 @@ divert(-1)
#
divert(0)
VERSIONID(`@(#)proto.m4 8.135 (Berkeley) 10/26/96')
VERSIONID(`@(#)proto.m4 8.136 (Berkeley) 11/24/96')
MAILER(local)dnl
@ -428,7 +428,7 @@ _OPTION(OperatorChars, `confOPERATORS')
# shall I avoid calling initgroups(3) because of high NIS costs?
_OPTION(DontInitGroups, `confDONT_INIT_GROUPS')
# are group-writable :include: and .forward files (un)trustworthy?
# are group-writable `:include:' and .forward files (un)trustworthy?
_OPTION(UnsafeGroupWrites, `confUNSAFE_GROUP_WRITES')
# where do errors that occur when sending errors get sent?
@ -635,7 +635,7 @@ ifdef(`_USE_DECNET_SYNTAX_',
R$+ @ $+ . DECNET $2 :: $1 u@h.DECNET => h::u',
`dnl')
# delete duplicate local names
R$+ % $=w @ $=w $1 @ $j u%host@host => u@host
R$+ % $=w @ $=w $1 @ $2 u%host@host => u@host

View file

@ -32,8 +32,8 @@ divert(-1)
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
VERSIONID(`@(#)version.m4 8.8.3.1 (Berkeley) 11/16/96')
VERSIONID(`@(#)version.m4 8.8.4.2 (Berkeley) 11/26/96')
#
divert(0)
# Configuration version number
DZ8.8.3`'ifdef(`confCF_VERSION', `/confCF_VERSION')
DZ8.8.4`'ifdef(`confCF_VERSION', `/confCF_VERSION')

View file

@ -32,11 +32,11 @@ divert(-1)
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# MkLinux support contributed by Paul DeBois <dubois@primate.wisc.edu>
# MkLinux support contributed by Paul DuBois <dubois@primate.wisc.edu>
#
divert(0)
VERSIONID(`@(#)mklinux.m4 8.1 (Berkeley) 10/30/96')
VERSIONID(`@(#)mklinux.m4 8.2 (Berkeley) 11/17/96')
ifdef(`STATUS_FILE',,
`define(`STATUS_FILE', /var/log/sendmail.st)')
ifdef(`PROCMAIL_MAILER_PATH',,

301
usr.sbin/sendmail/contrib/etrn.pl Executable file
View file

@ -0,0 +1,301 @@
#!/usr/local/bin/perl
'di ';
'ds 00 \\"';
'ig 00 ';
#
# THIS PROGRAM IS ITS OWN MANUAL PAGE. INSTALL IN man & bin.
#
# hardcoded constants, should work fine for BSD-based systems
require 'sys/socket.ph';
$sockaddr = 'S n a4 x8';
# system requirements:
# must have 'hostname' program.
#############################################################################
# Copyright (c) 1996 John T. Beck <john@beck.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by John T. Beck.
# 4. The name of John Beck may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY JOHN T. BECK ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL JOHN T. BECK BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# This copyright notice derived from material copyrighted by the Regents
# of the University of California.
#
# Contributions accepted.
#############################################################################
# Further disclaimer: the etrn.pl script was highly leveraged from the
# expn.pl script which is (C) 1993 David Muir Sharnoff.
#############################################################################
$port = 'smtp';
$av0 = $0;
select(STDERR);
$0 = "$av0 - running hostname";
chop($name = `hostname || uname -n`);
$0 = "$av0 - lookup host FQDN and IP addr";
($hostname,$aliases,$type,$len,$thisaddr) = gethostbyname($name);
push(@hosts,$hostname);
$0 = "$av0 - parsing sendmail.cf";
open(CF, "</etc/sendmail.cf") || die "open /etc/sendmail.cf: $!";
while (<CF>){
if (/^Fw.*$/){ # look for a line starting with "Fw"
$cwfile = $_;
chop($cwfile);
$optional = /^Fw-o/;
$cwfile =~ s,^Fw[^/]*,,; # extract the file name
}
}
close(CF);
$0 = "$av0 - reading $cwfile";
if (open(CW, "<$cwfile")){
while (<CW>){
$thishost = $_;
chop($thishost);
push(@hosts, $thishost) unless $thishost =~ $hostname;
}
close(CW);
} else {
die "open $cwfile: $!" unless optional;
}
$0 = "$av0 - parsing args";
$usage = "Usage: $av0 [-wd] host";
for $a (@ARGV) {
die $usage if $a eq "-";
while ($a =~ s/^(-.*)([wd])/$1/) {
eval '$'."flag_$2 += 1";
}
next if $a eq "-";
die $usage if $a =~ /^-/;
$server = $a;
}
$watch = $flag_w;
$debug = $flag_d;
die $usage unless $server;
$0 = "$av0 - building local socket";
($name,$aliases,$proto) = getprotobyname('tcp');
($name,$aliases,$port) = getservbyname($port,'tcp')
unless $port =~ /^\d+/;
$this = pack($sockaddr, &AF_INET, 0, $thisaddr);
# look it up
$0 = "$av0 - gethostbyname($server)";
($name,$aliases,$type,$len,$thataddr) = gethostbyname($server);
# get a connection
$0 = "$av0 - socket to $server";
$that = pack($sockaddr, &AF_INET, $port, $thataddr);
socket(S, &AF_INET, &SOCK_STREAM, $proto)
|| die "socket: $!";
$0 = "$av0 - bind to $server";
bind(S, $this)
|| die "bind $hostname,0: $!";
$0 = "$av0 - connect to $server";
print "debug = $debug server = $server\n" if $debug > 8;
if (! connect(S, $that)) {
$0 = "$av0 - $server: could not connect: $!\n";
}
select((select(S),$| = 1)[0]); # don't buffer output to S
# read the greeting
$0 = "$av0 - talking to $server";
&alarm("greeting with $server",'');
while(<S>) {
alarm(0);
print if $watch;
if (/^(\d+)([- ])/) {
if ($1 != 220) {
$0 = "$av0 - bad numeric response from $server";
&alarm("giving up after bad response from $server",'');
&read_response($2,$watch);
alarm(0);
print STDERR "$server: NOT 220 greeting: $_"
if ($debug || $watch);
}
last if ($2 eq " ");
} else {
$0 = "$av0 - bad response from $server";
print STDERR "$server: NOT 220 greeting: $_"
if ($debug || $watch);
close(S);
}
&alarm("greeting with $server",'');
}
alarm(0);
# if this causes problems, remove it
$0 = "$av0 - sending helo to $server";
&alarm("sending ehlo to $server","");
&ps("ehlo $hostname");
$etrn_support = 0;
while(<S>) {
if (/^250([- ])ETRN(.+)$/){
$etrn_support = 1;
}
print if $watch;
last if /^\d+ /;
}
alarm(0);
if ($etrn_support){
print "ETRN supported\n" if ($debug)
&alarm("sending etrn to $server",'');
while (@hosts) {
$server = shift(@hosts);
&ps("etrn $server");
while(<S>) {
print if $watch;
last if /^\d+ /;
}
sleep(1);
}
} else {
print "\nETRN not supported\n\n"
}
&alarm("sending 'quit' to $server",'');
$0 = "$av0 - sending 'quit' to $server";
&ps("quit");
while(<S>) {
print if $watch;
last if /^\d+ /;
}
close(S);
alarm(0);
select(STDOUT);
exit(0);
# print to the server (also to stdout, if -w)
sub ps
{
local($p) = @_;
print ">>> $p\n" if $watch;
print S "$p\n";
}
sub alarm
{
local($alarm_action,$alarm_redirect,$alarm_user) = @_;
alarm(3600);
$SIG{ALRM} = 'handle_alarm';
}
sub handle_alarm
{
&giveup($alarm_redirect,"Timed out during $alarm_action",$alarm_user);
}
# read the rest of the current smtp daemon's response (and toss it away)
sub read_response
{
local($done,$watch) = @_;
local(@resp);
print $s if $watch;
while(($done eq "-") && ($s = <S>) && ($s =~ /^\d+([- ])/)) {
print $s if $watch;
$done = $1;
push(@resp,$s);
}
return @resp;
}
# to pass perl -w:
@tp;
$flag_a;
$flag_d;
&handle_alarm;
################### BEGIN PERL/TROFF TRANSITION
.00 ;
'di
.nr nl 0-1
.nr % 0
.\\"'; __END__
.\" ############## END PERL/TROFF TRANSITION
.TH ETRN 1 "November 16, 1996"
.AT 3
.SH NAME
etrn \- start mail queue run
.SH SYNOPSIS
.B etrn
.RI [ -w ]
.RI [ -d ]
.IR hostname
.SH DESCRIPTION
.B etrn
will use the SMTP
.B etrn
command to start mail delivery from the host given on the command line.
.SH OPTIONS
.LP
The normal mode of operation for
.B etrn
is to do all of its work silently.
The following options make it more verbose.
It is not necessary to make it verbose to see what it is
doing because as it works, it changes its
.BR argv [0]
variable to reflect its current activity.
The
.IR -w ,
watch, flag will cause
.B etrn
to show you its conversations with the mail daemons.
The
.IR -d ,
debug, flag will expose many of the inner workings so that
it is possible to eliminate bugs.
.SH ENVIRONMENT
No enviroment variables are used.
.SH FILES
.B /etc/sendmail.cf
.SH SEE ALSO
.BR sendmail (8),
RFC 1985.
.SH BUGS
Not all mail daemons will implement
.B etrn .
.LP
It is assumed that you are running domain names.
.SH CREDITS
Leveraged from David Muir Sharnoff's expn.pl script.
.SH AVAILABILITY
The latest version of
.B etrn
is available in the contrib directory of the sendmail
distribution through anonymous ftp at
.IR ftp://ftp.sendmail.org/ucb/src/sendmail/ .
.SH AUTHOR
.I John T. Beck\ \ \ \ <john@beck.org>

View file

@ -30,7 +30,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)op.me 8.98 (Berkeley) 11/16/96
.\" @(#)op.me 8.100 (Berkeley) 12/1/96
.\"
.\" eqn op.me | pic | troff -me
.eh 'SMM:08-%''Sendmail Installation and Operation Guide'
@ -68,7 +68,7 @@ Eric Allman
InReference, Inc.
eric@Sendmail.ORG
.sp
Version 8.98
Version 8.100
.sp
For Sendmail Version 8.8
.)l
@ -5845,7 +5845,7 @@ to the list of recognized vendors by editing the routine
.i setvendor
in
.i conf.c .
Please send e-mail to sendmail@CS.Berkeley.EDU
Please send e-mail to sendmail@Sendmail.ORG
to register your vendor dialect.
.)f
You may use
@ -6619,12 +6619,12 @@ you can set this flag to turn off special processing
of UNIX-style
.q "From "
lines.
.ip QUEUE
.ip QUEUE\(dg
This flag should be set to compile in the queueing code.
If this is not set,
mailers must accept the mail immediately
or it will be returned to the sender.
.ip SMTP
.ip SMTP\(dg
If set,
the code to handle user and server SMTP will be compiled in.
This is only necessary if your machine has some mailer
@ -7156,7 +7156,7 @@ If you are porting to a new environment
you may need to add some new tweaks.\**
.(f
\**If you do, please send updates to
sendmail@CS.Berkeley.EDU.
sendmail@Sendmail.ORG.
.)f
.sh 2 "Configuration in src/daemon.c"
.pp
@ -7686,7 +7686,7 @@ I appreciate their contribution as well.
.pp
Special thanks are reserved for Michael Corrigan and Christophe Wolfhugel,
who besides being wonderful guinea pigs and contributors
have also consented to be added to the ``sendmail@CS.Berkeley.EDU'' list
have also consented to be added to the ``sendmail@Sendmail.ORG'' list
and, by answering the bulk of the questions sent to that list,
have freed me up to do other work.
.++ A
@ -8150,7 +8150,7 @@ A transcript of the current session.
.\"Eric Allman
.\"InReference, Inc.
.\".sp
.\"Version 8.98
.\"Version 8.100
.\".ce 0
.bp 2
.rs

View file

@ -30,7 +30,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#)READ_ME 8.130 (Berkeley) 11/10/96
# @(#)READ_ME 8.132 (Berkeley) 12/1/96
#
This directory contains the source files for sendmail.
@ -175,6 +175,10 @@ LDAPMAP Lightweight Directory Lookup Protocol support. You will
>>> OVERRIDE calls to ndbm routines -- in particular, if you leave ndbm.h
>>> in, you can find yourself using the new db package even if you don't
>>> define NEWDB.
>>>
>>> Further note: DO NOT remove your existing /usr/include/ndbm.h --
>>> you need that one. But do not install an updated ndbm.h in
>>> /usr/include, /usr/local/include, or anywhere else.
If NEWDB and NDBM are defined (but not NIS), then sendmail will read
NDBM format alias files, but the next time a newaliases is run the
@ -790,6 +794,23 @@ Ultrix
IDENT on in the configuration file by setting the "ident" timeout
to 30 seconds.
Solaris 2.5.1 (SunOS 5.5.1)
Apparently patch 103663-01 installs a new /usr/include/resolv.h
file that defines the __P macro without checking to see if it is
already defined. This causes compile warnings such as:
In file included from daemon.c:51:
/usr/include/resolv.h:208: warning: `__P' redefined
cdefs.h:58: warning: this is the location of the previous definition
If you are running with this patch, create a file in the
obj.SunOS.5.5.1.* directory that reads:
#undef __P
#include "/usr/include/resolv.h"
... And then file a bug report with Sun.
OSF/1
If you are compiling on OSF/1 (DEC Alpha), you must use
-L/usr/shlib (otherwise it core dumps on startup). You may also
@ -1377,4 +1398,4 @@ version.c The version number and information about this
Eric Allman
(Version 8.130, last update 11/10/96 11:15:30)
(Version 8.132, last update 12/1/96 09:34:37)

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)clock.c 8.13 (Berkeley) 2/21/96";
static char sccsid[] = "@(#)clock.c 8.16 (Berkeley) 11/27/96";
#endif /* not lint */
# include "sendmail.h"
@ -98,8 +98,8 @@ setevent(intvl, func, arg)
*evp = ev;
if (tTd(5, 5))
printf("setevent: intvl=%ld, for=%ld, func=%x, arg=%d, ev=%x\n",
intvl, now + intvl, func, arg, ev);
printf("setevent: intvl=%ld, for=%ld, func=%lx, arg=%d, ev=%lx\n",
intvl, now + intvl, (u_long) func, arg, (u_long) ev);
tick(0);
return (ev);
@ -124,7 +124,7 @@ clrevent(ev)
register EVENT **evp;
if (tTd(5, 5))
printf("clrevent: ev=%x\n", ev);
printf("clrevent: ev=%lx\n", (u_long) ev);
if (ev == NULL)
return;
@ -191,8 +191,9 @@ tick(arg)
ev = EventQueue;
EventQueue = EventQueue->ev_link;
if (tTd(5, 6))
printf("tick: ev=%x, func=%x, arg=%d, pid=%d\n", ev,
ev->ev_func, ev->ev_arg, ev->ev_pid);
printf("tick: ev=%lx, func=%lx, arg=%d, pid=%d\n",
(u_long) ev, (u_long) ev->ev_func,
ev->ev_arg, ev->ev_pid);
/* we must be careful in here because ev_func may not return */
f = ev->ev_func;
@ -211,17 +212,7 @@ tick(arg)
/* restore signals so that we can take ticks while in ev_func */
(void) setsignal(SIGALRM, tick);
#ifdef SIG_UNBLOCK
/* unblock SIGALRM signal */
sigemptyset(&ss);
sigaddset(&ss, SIGALRM);
sigprocmask(SIG_UNBLOCK, &ss, NULL);
#else
#if HASSIGSETMASK
/* reset 4.2bsd signal mask to allow future alarms */
(void) sigsetmask(sigblock(0) & ~sigmask(SIGALRM));
#endif /* HASSIGSETMASK */
#endif /* SIG_UNBLOCK */
(void) releasesignal(SIGALRM);
/* call ev_func */
errno = olderrno;
@ -262,12 +253,17 @@ SLEEP_T
sleep(intvl)
unsigned int intvl;
{
int was_held;
if (intvl == 0)
return (SLEEP_T) 0;
SleepDone = FALSE;
(void) setevent((time_t) intvl, endsleep, 0);
was_held = releasesignal(SIGALRM);
while (!SleepDone)
pause();
if (was_held > 0)
blocksignal(SIGALRM);
return (SLEEP_T) 0;
}

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)convtime.c 8.7 (Berkeley) 9/15/96";
static char sccsid[] = "@(#)convtime.c 8.8 (Berkeley) 11/24/96";
#endif /* not lint */
# include "sendmail.h"
@ -149,7 +149,10 @@ pintvl(intvl, brief)
hr = intvl % 24;
intvl /= 24;
if (brief)
{
dy = intvl;
wk = 0;
}
else
{
dy = intvl % 7;

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)envelope.c 8.96 (Berkeley) 11/11/96";
static char sccsid[] = "@(#)envelope.c 8.99 (Berkeley) 12/1/96";
#endif /* not lint */
#include "sendmail.h"
@ -110,7 +110,7 @@ dropenvelope(e, fulldrop)
{
extern void printenvflags();
printf("dropenvelope %x: id=", e);
printf("dropenvelope %lx: id=", (u_long) e);
xputs(e->e_id);
printf(", flags=");
printenvflags(e);
@ -168,8 +168,8 @@ dropenvelope(e, fulldrop)
queueit = TRUE;
#if XDEBUG
else if (bitset(QQUEUEUP, q->q_flags))
syslog(LOG_DEBUG, "%s: q_flags = %x",
e->e_id, q->q_flags);
syslog(LOG_DEBUG, "dropenvelope: %s: q_flags = %x, paddr = %s",
e->e_id, q->q_flags, q->q_paddr);
#endif
/* see if a notification is needed */
@ -349,7 +349,7 @@ dropenvelope(e, fulldrop)
}
else if (queueit || !bitset(EF_INQUEUE, e->e_flags))
{
#ifdef QUEUE
#if QUEUE
queueup(e, FALSE);
#else /* QUEUE */
syserr("554 dropenvelope: queueup");

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)err.c 8.50 (Berkeley) 9/20/96";
static char sccsid[] = "@(#)err.c 8.52 (Berkeley) 12/1/96";
#endif /* not lint */
# include "sendmail.h"
@ -432,7 +432,7 @@ putoutmsg(msg, holdmsg, heldmsg)
else
fprintf(OutChannel, "%s\n", &msg[4]);
if (TrafficLogFile != NULL)
fprintf(TrafficLogFile, "%05d >>> %s\n", getpid(),
fprintf(TrafficLogFile, "%05d >>> %s\n", (int) getpid(),
(OpMode == MD_SMTP || OpMode == MD_DAEMON) ? msg : &msg[4]);
if (msg[3] == ' ')
(void) fflush(OutChannel);
@ -631,7 +631,7 @@ errstring(errnum)
extern char *sys_errlist[];
extern int sys_nerr;
# endif
# ifdef SMTP
# if SMTP
extern char *SmtpPhase;
# endif /* SMTP */

View file

@ -32,7 +32,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#)makesendmail 8.41 (Berkeley) 9/23/96
# @(#)makesendmail 8.42 (Berkeley) 11/10/96
#
#
@ -109,6 +109,13 @@ in
esac
# tweak operating system type and release
node=`uname -n | sed -e 's/\//-/g' -e 's/ //g'`
if [ "$os" = "$node" -a "$arch" = "i386" -a "$rel" = 3.2 -a "`uname -v`" = 2 ]
then
# old versions of SCO UNIX set uname -s the same as uname -n
os=SCO_SV
fi
case $os
in
DYNIX-ptx) os=PTX;;

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)map.c 8.144 (Berkeley) 11/16/96";
static char sccsid[] = "@(#)map.c 8.146 (Berkeley) 11/24/96";
#endif /* not lint */
#include "sendmail.h"
@ -1323,7 +1323,8 @@ db_map_store(map, lhs, rhs)
data.size = data.size + old.size + 1;
data.data = buf;
if (tTd(38, 9))
printf("db_map_store append=%s\n", data.data);
printf("db_map_store append=%s\n",
(char *) data.data);
}
}
stat = db->put(db, &key, &data, 0);
@ -1344,7 +1345,7 @@ db_map_close(map)
register DB *db = map->map_db2;
if (tTd(38, 9))
printf("db_map_close(%s, %s, %x)\n",
printf("db_map_close(%s, %s, %lx)\n",
map->map_mname, map->map_file, map->map_mflags);
if (bitset(MF_WRITABLE, map->map_mflags))
@ -3406,7 +3407,7 @@ impl_map_close(map)
MAP *map;
{
if (tTd(38, 9))
printf("impl_map_close(%s, %s, %x)\n",
printf("impl_map_close(%s, %s, %lx)\n",
map->map_mname, map->map_file, map->map_mflags);
#ifdef NEWDB
if (bitset(MF_IMPL_HASH, map->map_mflags))
@ -3598,6 +3599,7 @@ prog_map_lookup(map, name, av, statp)
printf(" %s", argv[i]);
printf("\n");
}
(void) blocksignal(SIGCHLD);
pid = prog_open(argv, &fd, CurEnv);
if (pid < 0)
{
@ -3646,6 +3648,7 @@ prog_map_lookup(map, name, av, statp)
/* wait for the process to terminate */
close(fd);
stat = waitfor(pid);
(void) releasesignal(SIGCHLD);
if (stat == -1)
{

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)mci.c 8.46 (Berkeley) 11/3/96";
static char sccsid[] = "@(#)mci.c 8.54 (Berkeley) 12/1/96";
#endif /* not lint */
#include "sendmail.h"
@ -114,8 +114,8 @@ mci_cache(mci)
mci_uncache(mcislot, TRUE);
if (tTd(42, 5))
printf("mci_cache: caching %x (%s) in slot %d\n",
mci, mci->mci_host, mcislot - MciCache);
printf("mci_cache: caching %lx (%s) in slot %d\n",
(u_long) mci, mci->mci_host, mcislot - MciCache);
#ifdef LOG
if (tTd(91, 100))
syslog(LOG_DEBUG, "%s: mci_cache: caching %x (%.100s) in slot %d",
@ -214,8 +214,8 @@ mci_uncache(mcislot, doquit)
mci_unlock_host(mci);
if (tTd(42, 5))
printf("mci_uncache: uncaching %x (%s) from slot %d (%d)\n",
mci, mci->mci_host, mcislot - MciCache, doquit);
printf("mci_uncache: uncaching %lx (%s) from slot %d (%d)\n",
(u_long) mci, mci->mci_host, mcislot - MciCache, doquit);
#ifdef LOG
if (tTd(91, 100))
syslog(LOG_DEBUG, "%s: mci_uncache: uncaching %x (%.100s) from slot %d (%d)",
@ -223,7 +223,7 @@ mci_uncache(mcislot, doquit)
mci, mci->mci_host, mcislot - MciCache, doquit);
#endif
#ifdef SMTP
#if SMTP
if (doquit)
{
message("Closing connection to %s", mci->mci_host);
@ -289,7 +289,7 @@ mci_get(host, m)
register MCI *mci;
register STAB *s;
#ifdef DAEMON
#if DAEMON
extern SOCKADDR CurHostAddr;
/* clear CurHostAddr so we don't get a bogus address with this name */
@ -314,7 +314,7 @@ mci_get(host, m)
mci->mci_exitstat, mci->mci_errno);
}
#ifdef SMTP
#if SMTP
if (mci->mci_state == MCIS_OPEN)
{
extern int smtpprobe __P((MCI *));
@ -329,7 +329,7 @@ mci_get(host, m)
mci->mci_exitstat = EX_OK;
mci->mci_state = MCIS_CLOSED;
}
# ifdef DAEMON
# if DAEMON
else
{
/* get peer host address for logging reasons only */
@ -377,7 +377,10 @@ mci_setstat(mci, xstat, dstat, rstat)
char *dstat;
char *rstat;
{
mci->mci_exitstat = xstat;
/* protocol errors should never be interpreted as sticky */
if (xstat != EX_NOTSTICKY && xstat != EX_PROTOCOL)
mci->mci_exitstat = xstat;
mci->mci_status = dstat;
if (mci->mci_rstatus != NULL)
free(mci->mci_rstatus);
@ -672,7 +675,6 @@ mci_load_persistent(mci)
{
int saveErrno = errno;
FILE *fp;
int status;
char fname[MAXPATHLEN+1];
if (mci == NULL)
@ -682,7 +684,7 @@ mci_load_persistent(mci)
return;
}
if (HostStatDir == NULL || mci->mci_host == NULL)
if (IgnoreHostStatus || HostStatDir == NULL || mci->mci_host == NULL)
return;
if (tTd(56, 1))
@ -750,7 +752,7 @@ mci_read_persistent(fp, mci)
syserr("mci_read_persistent: NULL mci");
if (tTd(56, 93))
{
printf("mci_read_persistent: fp=%x, mci=", fp);
printf("mci_read_persistent: fp=%lx, mci=", (u_long) fp);
mci_dump(mci, FALSE);
}
@ -760,6 +762,7 @@ mci_read_persistent(fp, mci)
mci->mci_rstatus = NULL;
rewind(fp);
ver = -1;
while (fgets(buf, sizeof buf, fp) != NULL)
{
p = strchr(buf, '\n');
@ -806,6 +809,8 @@ mci_read_persistent(fp, mci)
return -1;
}
}
if (ver < 0)
return -1;
return 0;
}
/*
@ -868,7 +873,6 @@ mci_store_persistent(mci)
fflush(mci->mci_statfile);
cleanup:
errno = saveErrno;
return;
}
@ -903,7 +907,7 @@ mci_traverse_persistent(action, pathname)
{
struct stat statbuf;
DIR *d;
int ret = 0;
int ret;
if (pathname == NULL)
pathname = HostStatDir;
@ -961,13 +965,17 @@ mci_traverse_persistent(action, pathname)
/*
** The following appears to be
** necessary during purgest, since
** necessary during purges, since
** we modify the directory structure
*/
if (action == mci_purge_persistent)
rewinddir(d);
}
/* purge (or whatever) the directory proper */
*--newptr = '\0';
ret = (*action)(newpath, NULL);
closedir(d);
}
else if (S_ISREG(statbuf.st_mode))
@ -1031,12 +1039,14 @@ mci_print_persistent(pathname, hostname)
{
static int initflag = FALSE;
FILE *fp;
int status;
int width = Verbose ? 78 : 25;
bool locked;
char *p;
MCI mcib;
/* skip directories */
if (hostname == NULL)
return 0;
if (!initflag)
{
initflag = TRUE;
@ -1101,6 +1111,7 @@ mci_print_persistent(pathname, hostname)
** Parameters:
** pathname -- path to the status file.
** hostname -- name of host corresponding to that file.
** NULL if this is a directory (domain).
**
** Returns:
** 0
@ -1116,43 +1127,30 @@ mci_purge_persistent(pathname, hostname)
if (tTd(56, 1))
printf("mci_purge_persistent: purging %s\n", pathname);
/* remove the file */
if (unlink(pathname) < 0)
if (hostname != NULL)
{
if (tTd(56, 2))
printf("mci_purge_persistent: failed to unlink %s: %s\n",
pathname, errstring(errno));
return -1;
/* remove the file */
if (unlink(pathname) < 0)
{
if (tTd(56, 2))
printf("mci_purge_persistent: failed to unlink %s: %s\n",
pathname, errstring(errno));
}
}
/*
** remove empty parent directories.
*/
for (;;)
else
{
while (*end != '/')
end--;
*(end--) = '\0';
/* remove the directory */
if (*end != '.')
break;
return 0;
if (tTd(56, 1))
printf("mci_purge_persistent: dpurge %s\n", pathname);
if (rmdir(pathname) < 0)
{
if (errno == ENOENT || errno == EEXIST)
break; /* directory is not empty */
#ifdef ENOTEMTPY
if (errno == ENOTEMPTY)
break; /* BSDism */
#endif
if (tTd(56, 2))
printf("mci_purge_persistent: rmdir %s: %s\n",
pathname, errstring(errno));
break;
}
}

View file

@ -35,17 +35,17 @@
# include "sendmail.h"
#ifndef lint
#ifdef QUEUE
static char sccsid[] = "@(#)queue.c 8.131 (Berkeley) 11/8/96 (with queueing)";
#if QUEUE
static char sccsid[] = "@(#)queue.c 8.145 (Berkeley) 12/2/96 (with queueing)";
#else
static char sccsid[] = "@(#)queue.c 8.131 (Berkeley) 11/8/96 (without queueing)";
static char sccsid[] = "@(#)queue.c 8.145 (Berkeley) 12/2/96 (without queueing)";
#endif
#endif /* not lint */
# include <errno.h>
# include <dirent.h>
# ifdef QUEUE
# if QUEUE
/*
** Work queue.
@ -195,7 +195,7 @@ queueup(e, announce)
if (!bitset(EF_HAS_DF, e->e_flags))
{
register FILE *dfp;
register FILE *dfp = NULL;
char dfname[20];
struct stat stbuf;
@ -300,8 +300,9 @@ queueup(e, announce)
{
#if XDEBUG
if (bitset(QQUEUEUP, q->q_flags))
syslog(LOG_DEBUG, "%s: q_flags = %x",
e->e_id, q->q_flags);
syslog(LOG_DEBUG,
"dropenvelope: %s: q_flags = %x, paddr = %s",
e->e_id, q->q_flags, q->q_paddr);
#endif
continue;
}
@ -474,7 +475,6 @@ printctladdr(a, tfp)
{
char *uname;
char *paddr;
register struct passwd *pw;
register ADDRESS *q;
uid_t uid;
gid_t gid;
@ -531,9 +531,10 @@ printctladdr(a, tfp)
** forkflag -- TRUE if the queue scanning should be done in
** a child process. We double-fork so it is not our
** child and we don't have to clean up after it.
** verbose -- if TRUE, print out status information.
**
** Returns:
** none.
** TRUE if the queue run successfully began.
**
** Side Effects:
** runs things in the mail queue.
@ -541,15 +542,17 @@ printctladdr(a, tfp)
ENVELOPE QueueEnvelope; /* the queue run envelope */
void
runqueue(forkflag)
bool
runqueue(forkflag, verbose)
bool forkflag;
bool verbose;
{
register ENVELOPE *e;
int njobs;
int sequenceno = 0;
extern ENVELOPE BlankEnvelope;
extern void clrdaemon __P((void));
extern void runqueueevent __P((bool));
/*
** If no work will ever be selected, don't even bother reading
@ -562,15 +565,15 @@ runqueue(forkflag)
{
char *msg = "Skipping queue run -- load average too high";
if (Verbose)
printf("%s\n", msg);
if (verbose)
message("458 %s\n", msg);
#ifdef LOG
if (LogLevel > 8)
syslog(LOG_INFO, "runqueue: %s", msg);
#endif
if (forkflag && QueueIntvl != 0)
(void) setevent(QueueIntvl, runqueue, TRUE);
return;
(void) setevent(QueueIntvl, runqueueevent, TRUE);
return FALSE;
}
/*
@ -584,27 +587,49 @@ runqueue(forkflag)
#ifdef SIGCHLD
extern void reapchild();
blocksignal(SIGCHLD);
(void) setsignal(SIGCHLD, reapchild);
#endif
pid = dofork();
if (pid == -1)
{
const char *msg = "Skipping queue run -- fork() failed";
const char *err = errstring(errno);
if (verbose)
message("458 %s: %s\n", msg, err);
#ifdef LOG
if (LogLevel > 8)
syslog(LOG_INFO, "runqueue: %s: %s", msg, err);
#endif
if (QueueIntvl != 0)
(void) setevent(QueueIntvl, runqueueevent, TRUE);
(void) releasesignal(SIGCHLD);
return FALSE;
}
if (pid != 0)
{
/* parent -- pick up intermediate zombie */
#ifndef SIGCHLD
(void) waitfor(pid);
#else
(void) blocksignal(SIGALRM);
proc_list_add(pid);
(void) releasesignal(SIGALRM);
releasesignal(SIGCHLD);
#endif /* SIGCHLD */
if (QueueIntvl != 0)
(void) setevent(QueueIntvl, runqueue, TRUE);
return;
(void) setevent(QueueIntvl, runqueueevent, TRUE);
return TRUE;
}
/* child -- double fork and clean up signals */
proc_list_clear();
#ifndef SIGCHLD
if (fork() != 0)
exit(EX_OK);
#else /* SIGCHLD */
releasesignal(SIGCHLD);
(void) setsignal(SIGCHLD, SIG_DFL);
#endif /* SIGCHLD */
(void) setsignal(SIGHUP, intsig);
@ -623,7 +648,7 @@ runqueue(forkflag)
** Release any resources used by the daemon code.
*/
# ifdef DAEMON
# if DAEMON
clrdaemon();
# endif /* DAEMON */
@ -660,7 +685,10 @@ runqueue(forkflag)
if (QueueLimitId != NULL || QueueLimitSender != NULL ||
QueueLimitRecipient != NULL)
HostStatDir = NULL;
{
IgnoreHostStatus = TRUE;
MinQueueAge = 0;
}
/*
** Start making passes through the queue.
@ -719,6 +747,20 @@ runqueue(forkflag)
/* exit without the usual cleanup */
e->e_id = NULL;
finis();
/*NOTREACHED*/
return TRUE;
}
/*
** RUNQUEUEEVENT -- stub for use in setevent
*/
void
runqueueevent(forkflag)
bool forkflag;
{
(void) runqueue(forkflag, FALSE);
}
/*
** ORDERQ -- order the work queue.
@ -1257,7 +1299,7 @@ workcmpf3(a, b)
if (a->w_ctime > b->w_ctime)
return 1;
else if (a->w_ctime < b->w_ctime)
return 1;
return -1;
else
return 0;
}
@ -1340,6 +1382,7 @@ dowork(id, forkflag, requeueflag, e)
disconnect(1, e);
OpMode = MD_DELIVER;
}
setproctitle("%s: from queue", id);
# ifdef LOG
if (LogLevel > 76)
syslog(LOG_DEBUG, "%s: dowork, pid=%d", e->e_id,
@ -2054,7 +2097,8 @@ queuename(e, type)
e->e_id = newstr(&qf[2]);
define('i', e->e_id, e);
if (tTd(7, 1))
printf("queuename: assigned id %s, env=%x\n", e->e_id, e);
printf("queuename: assigned id %s, env=%lx\n",
e->e_id, (u_long) e);
if (tTd(7, 9))
{
printf(" lockfd=");

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)stab.c 8.9 (Berkeley) 10/17/96";
static char sccsid[] = "@(#)stab.c 8.10 (Berkeley) 11/23/96";
#endif /* not lint */
# include "sendmail.h"
@ -131,7 +131,7 @@ stab(name, type, op)
printf("entered\n");
/* determine size of new entry */
#ifdef FFR_MEMORY_MISER
#ifdef _FFR_MEMORY_MISER
if (type >= ST_MCI)
len = sizeof s->s_mci;
else

View file

@ -33,7 +33,7 @@
*/
#ifndef lint
static char sccsid[] = "@(#)version.c 8.8.3.2 (Berkeley) 11/16/96";
static char sccsid[] = "@(#)version.c 8.8.4.4 (Berkeley) 12/2/96";
#endif /* not lint */
char Version[] = "8.8.3";
char Version[] = "8.8.4";

View file

@ -25,6 +25,7 @@ Solaris 2.1
Solaris 2.2 FAIL 93.07.19 Bill Wisner
Solaris 2.3 FAIL 95.11.22 Scott J. Kramer <sjk@lux.com>
Solaris 2.5 OK 96.02.29 Carson Gaspar <carson@lehman.com>
Solaris 2.5.1 OK 96.11.29 Gregory Neil Shapiro <gshapiro@wpi.edu>
OSF/1 T1.3-4 OK 93.07.19 eric (on DEC Alpha)
OSF/1 1.3 OK 94.12.10 Jeff A. Earickson (on Intel Paragon)
@ -75,6 +76,7 @@ OPSYS VERSION STATUS DATE TESTER/NOTES
Solaris 2.3 OK 95.11.22 Scott J. Kramer <sjk@lux.com>
Solaris 2.4 OK 95.09.22 Thomas 'Mike' Michlmayr <mike@cosy.sbg.ac.at>
Solaris 2.5 OK 96.02.29 Carson Gaspar <carson@lehman.com>
Solaris 2.5.1 OK 96.11.29 Gregory Neil Shapiro <gshapiro@wpi.edu>
Linux 1.2.13 FAIL 95.11.02 Sven Neuhaus <sven@ping.de>
Linux 2.0.17 FAIL 96.09.03 Horst von Brand <vonbrand@sleipnir.valparaiso.cl>