[comp.unix.ultrix] sendmail 5.64 or higher under Ultrix 4.0?

bobd@nisca.ircc.ohio-state.edu (Bob Debula) (09/07/90)

We recently got two DEC 5400s and installed ultrix 4.0
on both.  Because we wanted to use a popular sendmail.cf
and since it failed using the default ultrix sendmail,
we installed sendmail 5.64 on ultrix 4.0.  Unfortunately,
while we can get everything to compile properly, and
seem to be able to send mail out fine, whenever we receive
mail, sendmail dumps.  Has anyone else out there (I'm 99%
certain someone has) been able to successfully install
sendmail 5.64 or higher on ultrix 4.0 (preferably on
a MIPS RISC machine)?  We already tried reinstalling
without optimization (since this and removing "volatile"
worked for PERL, we figured it was worth a shot).
Any ideas/experiences/war stories?  Anyone got a version
of "vacation" running under ultrix 4.0?  Thanks for
any pointers (or better yet anonymous ftp sites for
ultrix ported PD stuff) you may be able to give us.


Bob DeBula 
The Ohio State University
Instruction & Research Computer Center

steve@fnord.umiacs.umd.edu (Steve D. Miller) (09/08/90)

I have sendmail 5.64 up and running on a 5000 running Ultrix 4.0.  I don't
think I did anything particularly special, though we have enough local hacks
in that I could have changed something by accident...

I did fix two or three little nits; I've enclosed diffs.  There's a problem
with leftover timeouts when the read timeout blows its cookies (which may be
a localism, I don't remember); also, there's a problem that shows up in
debug mode only with passing in an in_addr where a long is expected (or vice
versa), and a problem with sending to multiple recipients where a SMTP
connection loses midway through the conversation.  I also compiled with -g
(for no particular reason, it's not like I tried -O and gave up).

You might take a peek at the getla() code to see if there isn't some funky
load-average-related stuff going on.  I have a getla() that works on
DECstations, Suns, Encores, and a few other machines; it's not clean, but it
functions.  If someone wants a copy, holler.

	-Steve

: Run this shell script with "sh" not "csh"
PATH=/bin:/usr/bin:/usr/ucb:/etc:$PATH
export PATH
all=false
if [ x$1 = x-a ]; then
	all=true
fi
echo Extracting daemon.c.diff
sed 's/^X//' <<'//go.sysin dd *' >daemon.c.diff
X*** /tmp/daemon.c	Fri Sep  7 15:59:23 1990
X--- daemon.c	Fri Aug  3 15:30:08 1990
X***************
X*** 380,386 ****
X  again:
X  	if (tTd(16, 1))
X  		printf("makeconnection (%s [%s])\n", host,
X! 		    inet_ntoa(SendmailAddress.sin_addr.s_addr));
X  
X  	s = socket(AF_INET, SOCK_STREAM, 0);
X  	if (s < 0)
X--- 380,386 ----
X  again:
X  	if (tTd(16, 1))
X  		printf("makeconnection (%s [%s])\n", host,
X! 		    inet_ntoa(SendmailAddress.sin_addr));
X  
X  	s = socket(AF_INET, SOCK_STREAM, 0);
X  	if (s < 0)
//go.sysin dd *
if [ `wc -c < daemon.c.diff` != 494 ]; then
	made=false
	echo error transmitting daemon.c.diff --
	echo length should be 494, not `wc -c < daemon.c.diff`
else
	made=true
fi
if $made; then
	chmod 644 daemon.c.diff
	echo -n '	'; ls -ld daemon.c.diff
fi
echo Extracting usersmtp.c.diff
sed 's/^X//' <<'//go.sysin dd *' >usersmtp.c.diff
X*** /tmp/usersmtp.c	Fri Sep  7 16:00:22 1990
X--- usersmtp.c	Mon Jul 30 15:45:32 1990
X***************
X*** 74,81 ****
X  **		creates connection and sends initial protocol.
X  */
X  
X- jmp_buf	CtxGreeting;
X- 
X  smtpinit(m, pvp)
X  	struct mailer *m;
X  	char **pvp;
X--- 74,79 ----
X***************
X*** 83,89 ****
X  	register int r;
X  	EVENT *gte;
X  	char buf[MAXNAME];
X! 	extern greettimeout();
X  
X  	/*
X  	**  Open the connection to the mailer.
X--- 81,87 ----
X  	register int r;
X  	EVENT *gte;
X  	char buf[MAXNAME];
X! 	int oldtimeout;
X  
X  	/*
X  	**  Open the connection to the mailer.
X***************
X*** 135,147 ****
X  	**	happen.
X  	*/
X  
X! 	if (setjmp(CtxGreeting) != 0)
X! 		goto tempfail;
X! 	gte = setevent((time_t) 300, greettimeout, 0);
X  	SmtpPhase = "greeting wait";
X  	setproctitle("%s %s: %s", CurEnv->e_id, CurHostName, SmtpPhase);
X  	r = reply(m);
X! 	clrevent(gte);
X  	if (r < 0 || REPLYTYPE(r) != 2)
X  		goto tempfail;
X  
X--- 133,144 ----
X  	**	happen.
X  	*/
X  
X! 	oldtimeout = ReadTimeout;
X! 	ReadTimeout = 5 * 60;
X  	SmtpPhase = "greeting wait";
X  	setproctitle("%s %s: %s", CurEnv->e_id, CurHostName, SmtpPhase);
X  	r = reply(m);
X! 	ReadTimeout = oldtimeout;
X  	if (r < 0 || REPLYTYPE(r) != 2)
X  		goto tempfail;
X  
X***************
X*** 223,234 ****
X  }
X  
X  
X- static
X- greettimeout()
X- {
X- 	/* timeout reading the greeting message */
X- 	longjmp(CtxGreeting, 1);
X- }
X  /*
X  **  SMTPRCPT -- designate recipient.
X  **
X--- 220,225 ----
X***************
X*** 250,255 ****
X--- 241,251 ----
X  	register int r;
X  	extern char *remotename();
X  
X+ 	/* if the connection is closed, don't bother */
X+ 	if (SmtpOut == NULL || SmtpIn == NULL) {
X+ 		errno = EBADF;		/* guess */
X+ 		return(EX_TEMPFAIL);
X+ 	}
X  	smtpmessage("RCPT To:<%s>", m, remotename(to->q_user, m, FALSE, TRUE));
X  
X  	SmtpPhase = "RCPT wait";
//go.sysin dd *
if [ `wc -c < usersmtp.c.diff` != 1808 ]; then
	made=false
	echo error transmitting usersmtp.c.diff --
	echo length should be 1808, not `wc -c < usersmtp.c.diff`
else
	made=true
fi
if $made; then
	chmod 644 usersmtp.c.diff
	echo -n '	'; ls -ld usersmtp.c.diff
fi

--
Spoken: Steve Miller    Domain: steve@umiacs.umd.edu    UUCP: uunet!mimsy!steve
Phone: +1-301-405-6736  USPS: UMIACS, Univ. of Maryland, College Park, MD 20742