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