[net.news.b] Bug fixes for news 2.10 header.c and readr.c

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);