earle@smeagol.UUCP (02/02/87)
Index: src/visual.c 2.11 patch level 3
Description:
The vnews `c' command won't cancel the article if you have HIDDENNET
defined (and you aren't currently the news ROOTID), even if you are
the author of the article. Even if you become ROOTID, cancelling
the article only gets done locally. A cancel message is not
transmitted to your other feeds.
This is because there is code in src/header.c to strip off system names
and `!'s from the Path: of the given article. Unfortunately, this
code is #ifndef HIDDENNET. vnews tries to verify authorship of the
article by comparing this Path to the current username. If you have
HIDDENNET defined, this path is undoubtedly `yourmachine!you', and
username is `you'. The string match fails, and vnews decides you
aren't the author.
If you become ROOTID, then you can cancel the article; unfortunately
in src/rfuncs2.c the `cancel' function looks to see if you are the
author. Assuming ROOTID is not the author, the article will be
cancelled, but because ROOTID is not the author, the distribution for
the cancel control message will be `local'. Not much help.
Repeat-by:
If you have HIDDENNET defined, and aren't ROOTID, go into vnews and
try to cancel an article you posted. `Can't cancel something you
didn't write.' will appear.
Fix:
In visual.c, the cancel command is handled by the following function:
cancel_command()
{
int notauthor;
tfilename = filename;
(void) strcpy(rcbuf, h->path);
ptr1 = index(rcbuf, ' ');
if (ptr1)
*ptr1 = 0;
notauthor = strcmp(username, rcbuf);
if (uid != ROOTID && uid && notauthor) {
msg("Can't cancel what you didn't write.");
return;
}
if (!cancel(stderr, h, notauthor)) {
clear(bit);
saveart;
nextbit();
obit = -1;
fp = NULL;
}
FCLOSE(fp);
}
(1) There should be an #ifndef HIDDENNET case around the
notauthor = strcmp(username, rcbuf);
line. For the #else part, `rcbuf' should be sent through a routine
(like header.c's) to strip out the system name(s) and `!' before this
test.
(2) Before calling the `cancel' function, if ROOTID is true then perhaps
either `notauthor' should be set false, or the cancel line should be modified
to something like
if (!cancel(stderr, h, (notauthor || uid == ROOTID))) {
This bug has been reported, so it will probably be fixed in Patch #4 if/when
it comes out.
--
Greg Earle UUCP: sdcrdcf!smeagol!earle; attmail!earle
JPL ARPA: elroy!smeagol!earle@csvax.caltech.edu
AT&T: +1 818 354 4034 earle@jplpub1.jpl.nasa.gov (For the daring)
I'm using my X-RAY VISION to obtain a rare glimpse of the INNER WORKINGS of this POTATO!!