[net.news.b] Bug with checkgroups msg in News B 2.10.3

root@aaec.OZ (Superuser) (11/13/85)

Description:
	There are two related problems with checkgroup control messages
	being processed by "inews".

	Initially it reports
		sh: $SPOOLDIR/.arXXXXXX/checkgroups: not found
	(where XXXXXX is the process id)

	When this is fixed and the message is run through inews it reports
	all net, mod and fa groups should be removed.  It also deletes all
	these entries in the newsgroups file.

	I think the same problem existed in News B 2.10.2 but because of
	other problems with "$LIBDIR/checkgroups" no report was ever
	generated.

	(News version: B 2.10.3 alpha 4/15/85)

Repeat-by:
	Running any of the checkgroup reports sent by Gene Spafford in
	net.news.group.

Diagnosis:
	The line of code invoking "$LIBDIR/checkgroups" is all wrong.
	It has the wrong number of arguments in the wrong order and
	with the wrong input file.  (See the patch below)

	It makes use of the temporary file ("ARTICLE") before it has
	copied any of the message to it.

Fix-by:
	The following two context diffs show the fixes.  The change
	to checkgroups is caused by reading the file containing only
	the body of the message and not any of the headers.

*** control.c.old	Tue Jun  4 05:53:48 1985
--- control.c	Wed Nov 13 15:39:31 1985
***************
*** 486,493
  	int rc;
  
  	(void) setuid(geteuid());
! 	(void) sprintf(bfr, "%s/checkgroups %s",
! 		ARTICLE, LIB, (TELLME && *TELLME) ? TELLME : NEWSUSR);
  	rc = system(bfr);
  	log("system(%s) status %d", bfr, rc);
  }

--- 486,493 -----
  	int rc;
  
  	(void) setuid(geteuid());
! 	(void) sprintf(bfr, "%s/checkgroups %s < %s",
! 		LIB, (TELLME && *TELLME) ? TELLME : NEWSUSR, INFILE);
  	rc = system(bfr);
  	log("system(%s) status %d", bfr, rc);
  }


*** checkgroups.sh.old	Wed Nov 13 13:34:18 1985
--- checkgroups.sh	Wed Nov 13 15:56:02 1985
***************
*** 3,9
  
  # Read first line of stdin.  If of the form "-n group", then only check
  # for the specified group.  Otherwise, assume doing net and fa.
! sed -e '1,/^$/d' -e '/^#/d' | (
  read line
  case "${line}" in
  -n*)

--- 3,9 -----
  
  # Read first line of stdin.  If of the form "-n group", then only check
  # for the specified group.  Otherwise, assume doing net and fa.
! sed -e '/^$/d' -e '/^#/d' | (
  read line
  case "${line}" in
  -n*)

-----
Frank Crawford

ACSnet:	root@aaec.OZ
UUCP:	{seismo,mcvax,ukc,prlb2,ubc-vision}!munnari!aaec.OZ!root

Australian Atomic Energy Commission		Phone: +61 2 543 3094
Private Mailbag,
SUTHERLAND,
N.S.W.  2232
Australia.