[net.bugs.uucp] utzoo->ihnp4 traffic lost

honey@down.FUN (Peter Honeyman) (10/24/85)

henry complains about ihnp4 refusing mail "for unknown reasons."
prepare to have the unknown made known.

one of the advantages of honey danber is the spool directory hashing
scheme:  a separate directory for each host.  a disadvantage is that
these directories hang around forever, clogging the spool directory.
thus, busy sites like ihnp4 periodically rmdir spool/* to clean up
(and thus to speed up).

now, if utzoo is talking to ihnp4, and the rmdir daemon happens to
catch the utzoo directory when it's empty, subsequent requests to
transfer from utzoo to ihnp4 will fail miserably.  this is a bug.

this happened to me a few months ago -- 10 mail messages were dropped.
i was pissed off!  off to the source code; what to do, what to do!?

i decided that if a request to send a /-free file is denied, then the
remote is horribly broken.  accordingly, i changed cntrl.c to hang up
in those circumstances -- maybe things will be ok later.  this worked
great -- i even got rick to buy in -- until disaster struck.  disaster
in the form of honey danber.

if i transfer a file, but lose the connection before receiving the
acknowledgement, i try again the next time i establish a link.  but
now, the remote refuses the request -- honey danber won't overwrite an
existing work file.  gack! -- this meets the criterion above so i hang
up, only to try again later.  and later.  and forever, never sending
another damn thing.

i queried dan -- "what were we thinking of in refusing to overwrite" --
he indicated that maybe it was an optimization (spare me!).  the
temptation to remove the refusal from the code is ineffectual, since
this bug will live forever somewhere in "the field."

there you have it.  mea culpa.  (you-a too dave, and-a you brian!)

back to ihnp4.  i keep asking them to stop exposing my bugs, but they
just don't listen.  for the last time, please stop it!  here's a script
that removes empty directories in a clean way.  (test it first!)

	peter

#!/bin/sh
lockdir=/usr/spool/locks
cd /usr/spool/uucp
locklink=$lockdir/rmdir-daemon
echo $$ | awk '{printf("%10d\n", $1)}' > $locklink
for i in [a-z]*; do
	lockfile=$lockdir/`echo LCK..$i|cut -c1-14`
	ln $locklink $lockfile && rmdir $i
	rm -f $lockfile
done
rm -f $locklink
exit 0