Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!auspex!guy From: guy@auspex.auspex.com (Guy Harris) Newsgroups: comp.mail.uucp Subject: Re: uucp status & dial retries Keywords: HDB uucp, retries Message-ID: <5358@auspex.auspex.com> Date: 18 Jan 91 04:54:40 GMT References: <772@csource.oz.au> <885@bacchus.esa.oz.au> <1991Jan11.121104.4061@odin.diku.dk> Organization: Auspex Systems, Santa Clara Lines: 61 >Beware: Not all UUCP's know how to handle the "maximum-grade" option, >they just send everything. And note that, while the SunOS 4.1 UUCP has the "/grade" option: 1) it was *not* in the S5R3.2 UUCP from which the 4.1 UUCP is derived; we shoveled in a whole bunch of Peter Honeyman's changes into the S5R3.2 HDB, including that feature. 2) there is a bug in the 4.3BSD UUCP's negotiation of maximum grades, triggered by the way HDB with the Honeyman changes negotiates the grade, that may cause the feature not to work fully if a 4.3 site is communicating with a SunOS 4.1 site. 1) means "don't treat the SunOS 4.1 manual as a generic guide to all HDB UUCP's; we added a bunch of stuff from Honeyman, some stuff from 4.3BSD, and some stuff of our own" ("we" being Sun). 2) means that if you're running 4.3BSD/4.3-tahoe/4.3-reno UUCP and have source, you may want to patch "cico.c". The bug is that two ways for one side to tell the other what its idea of MaxGrade is in one of the initial messages. One is with the string "-pG", where "G" is the maximum grade; the other is with "-vgrade=G". The HDB one sends out only "-vgrade=G"; the 4.3 one sends out both "-pG" and "-vgrade=G". Unfortunately, the "-vgrade=" parsing code in 4.3's UUCP is broken; if it talks to a 4.3 site, this doesn't cause a problem, as the "-p" option sets the MaxGrade correctly, but if it talks to an HDB site that has MaxGrade support, it may not get the right MaxGrade value. The buggy code is: case 'v': if (strncmp(p, "grade", 5) == 0) { p += 6; MaxGrade = DefMaxGrade = *p++; DEBUG(4, "MaxGrade set to %c\n", MaxGrade); } break; and it should be changed to something like: case 'v': if (strncmp(++p, "grade=", 6) == 0) { p += 6; MaxGrade = DefMaxGrade = *p++; DEBUG(4, "MaxGrade set to %c\n", MaxGrade); } break; (I.e., at the time the "strncmp" is done, the pointer points at the "v" in "-vgrade=", not at the "g". The extra check for the equal sign is pure anal-retentiveness. :-)) (Yes, this bug has been reported to Berkeley. The suggestion that HDB send both a "-p" and a "-vgrade=" to the remote site, in case it's running a broken 4.3 UUCP, has been forwarded to Peter Honeyman and to the appropriate person at Sun.) If you don't have source, an appropriate binary patch is left as an exercise to the reader.