fair@dual.UUCP (Erik E. Fair) (02/09/84)
Ye Olde Bug with UUCICO.
1. Find work to do.
2. Call req'd system.
3. Start transmitting.
4. Transmit fails. (conversation complete)
5. Find other work to do
6. Call other system
7. START RE-TRANSMITTING PREVIOUSLY UNCOMPLETED TRANSACTION,
DESTINED FOR PREVIOUS SYSTEM!
8. Programmer (hopefully!) notices, cries out in terror, and kills
off uucico before the xmit finished.
9. Anguished programmer posts plea to the network community for bug fix.
I know this one was fixed a very long time ago. So how in hell did it
get into System V Rel 0? I'm trying very hard to resist the urge to scream
bloody murder! I've spent the last five days inside the guts of System V
UUCP, and I have just about given up hope that I will ever see a sane
release of UUCP from USG. I HATE having to clean up other people's sloppy code.
Is someone out there in WE's licensing division listening? If so, get Peter
Honeyman's UUCP, and distribute it, PLEASE. I have better things to do than
to chase age old bugs, that I (and the rest of the network community) know
damn well have been fixed!
Maybe this is the time to go into some other wonders in the System V UUCP:
rkill.c:
Has a routine in it called kill(). Wonderful, until you try and
use the system call of the same name. References to this kill are
made in uustat and uuclean. #ifdef'd references to kill(2) are made
in cico.c
mailst.c:
Look at the setuucp() routine carefully. Contemplate what will
happen to the environment of LOGNAME isn't there. Guess what?
Your whole environment gets nulled out. A simple pair of
braces {} solves the whole thing. Very sloppy.
uuxqt.c:
If LOGNAME isn't there, uuxqt just happily removes all the X.
files and associated D. files that you just received from
some remote system.
uuclean.c:
cico.c:
uuxqt.c:
Some damned idiot forgot to call tzset() in all of these.
This may be OK in New Jersey, where the default timezone in
the kernel is correct, but it don't wash out here in PST.
uuxqt.c:
Another idiot forgot that TZ is among those things that should
be passed to the programs that are executed by uuxqt. If any of
them try and keep logs in a timezone other than EST, they will
get the time of day wrong.
conn.c:
One of the DEBUG lines in expect() is supposed to print out
characters received from the remote system, and for any
character that's unprintable, print a '_'. However, it
doesn't work, because someone forgot that >= has
higher operator precedence than & (bitwise and).
-----
If you get the impression that I'm mad at USG, BELL, AT&T, WE, and a
few other letters in the veritable alphabet soup, you're right.
They have no excuse for the kinds of things I am finding in their
code, because they have the resources to properly write, test, and
debug software, whereas I (by comparison) do not.
Erik E. Fair
dual!fair@BERKELEY.ARPA
{ucbvax,ihnp4,cbosgd,amd70,zehntel,fortune,unisoft,onyx,its}!dual!fair
Dual Systems Corporation, Berkeley, California