jim (05/11/83)
There are three bugs I know of in header.c. A translation from Message-ID to Article-ID will be done wrong if there is no domain present in the Message-ID. A translation from Article-ID to Message-ID will be done differently at each site if the domains of the sites differ. And site names will be padded to 8 characters rather than truncated to SNLN characters when translated from Message-ID to Article-ID. These bugs can cause such odd looking Article-IDs as "cbosgd> .123". The main danger is that each site will do the translation differently, resulting in multiple copies of the same article. A lesser danger is that of overflowing the 14 character Article-ID limit in A and 2.9. Readnews with the -c, -l, and -e options will list each article posted to multiple news groups once for each group, rather than just once for the session. The fix is in readr.c. Here are the fixes: *** header.c_o Sun Apr 3 17:05:00 1983 --- header.c Wed May 11 10:40:09 1983 *************** *** 262,268 return; } *p++ = '\0'; ! sprintf(hp->ident, "<%s@%s%s>", p, lbuf, MYDOMAIN); } #ifdef OLD --- 262,268 ----- return; } *p++ = '\0'; ! sprintf(hp->ident, "<%s@%s%s>", p, lbuf, ".UUCP"); } #ifdef OLD *************** *** 275,280 } *p++ = '\0'; q = index(p, '.'); if (q) *q++ = '\0'; sprintf(hp->oident, "%8s.%s", p, lbuf+1); --- 275,282 ----- } *p++ = '\0'; q = index(p, '.'); + if (!q) + q = index(p, '>'); if (q) *q++ = '\0'; sprintf(hp->oident, "%.*s.%s", SNLN, p, lbuf+1); *************** *** 277,283 q = index(p, '.'); if (q) *q++ = '\0'; ! sprintf(hp->oident, "%8s.%s", p, lbuf+1); } #endif } --- 279,285 ----- q = index(p, '>'); if (q) *q++ = '\0'; ! sprintf(hp->oident, "%.*s.%s", SNLN, p, lbuf+1); } #endif } *** readr.c_o Tue May 3 11:49:06 1983 --- readr.c Wed May 11 13:13:22 1983 *************** *** 1058,1064 hdr(); if ((cflag && !lflag && !eflag) || pflag) tprint(fp, ofp, FALSE); ! if (cflag && lflag && eflag || pflag) { itsbeenseen(h.ident); sigtrap = FALSE; fclose(fp); --- 1058,1064 ----- hdr(); if ((cflag && !lflag && !eflag) || pflag) tprint(fp, ofp, FALSE); ! if (cflag || lflag || eflag || pflag) { itsbeenseen(h.ident); sigtrap = FALSE; fclose(fp);