Subject: [NNTP] Suggestion of examples for 412 semantics in RFC 3977

From: Julien ÉLIE <[email-masked]>
Date: Tue, 15 Feb 2011 20:56:04 +0100

Just a few examples that could be added to RFC 3977.

Following a discussion with Alfred Hönes, who reported:

> (iv)  particulars of the 412 semantics
> 
> The LISTGROUP Usage (Section 6.1.2.1, on page 39) contains the note:
> 
>     [1] The 412 response can only occur if no group has been specified.
> 
> The LISTGROUP Description (Section 6.1.2.2, on mid-page 40) says:
> 
>     The LISTGROUP command selects a newsgroup in the same manner as the
>     GROUP command (see Section 6.1.1) but also provides a list of article
>     numbers in the newsgroup.  If no group is specified, the currently
>     selected newsgroup is used.
> 
> |  If the group specified is not available on the server, a 411 response
> |  MUST be returned.  If no group is specified and the currently
> |  selected newsgroup is invalid, a 412 response MUST be returned.
> 
> The second paragraph quoted could be interpreted to say, using the
> notation proposed above:
> 
>     If the group specified is not available on the server, a 411 response
> |  MUST be returned.  If no group is specified and the currently
> |  selected newsgroup is `invalid`, a 412 response MUST be returned.
> 
> And in this interpretation, it would have to be presumed that when
> (no group is specified and) the "currently selected newsgroup" has
> became lame (unavailable on the server), a 411 response should be
> returned as well.
> (Unfortunately, this case is not covered by any example in the RFC.)

Interesting scenario.
Here is what INN 2.5 answers:

[No trigofacile.abc group]

LISTGROUP trigofacile.abc
411 No such group trigofacile.abc

[I create the group]

LISTGROUP trigofacile.abc
211 0 1 0 trigofacile.abc
.

[I remove the group]

LISTGROUP
411 No such group trigofacile.abc
LISTGROUP trigofacile.abc
411 No such group trigofacile.abc
OVER
420 Current article number 0 is invalid
XOVER
420 Current article number 0 is invalid
OVER 1
423 No articles in 1
XOVER 1
224 No articles in 1
.

[I recreate the group]

LISTGROUP
211 0 1 0 trigofacile.abc
.

As far as I can see, when the group is selected, we are inside
it, with article number set to the first article (here, it is
empty, so the article number is 0 -- but it could have been 7
or any other number).

I think the behaviour is consistent.
Not available => 411
412 would be for an invalid currently selected newsgroup.  Yet,
the currently selected newsgroup is valid (the notion does not
deal with existing/not existing at one moment -- the currently
selected newsgroup does not become invalid if the newsgroup
disappears from the LIST ACTIVE result).

No interpretation here.  No quote around "invalid".

> Otherwise, that second paragraph could be interpreted as meaning
> (formulated verbously):
> 
>     If the group specified is not available on the server, a 411 response
> |  MUST be returned.  If no group is specified and the currently
> |  selected newsgroup is `invalid` (has never been set) or it has become
> |  unavalable on the server, a 412 response MUST be returned.
> 
> I conclude that the former interpretation must have been intended
> since the latter interpretation does not match the specified 412
>     Meaning: no newsgroup selected.

Yes.  That is not a valid interpretation.  There is no interpretation
to give to the word "invalid".  It means only one thing when it is
used for the currently selected newsgroup/article.

> The LAST Description (Section 6.1.3.2, page 42), and hence implicitely,
> by reference, the NEXT Description (Section 6.1.4.2,page 44) contains
> the sentence,
>                                                  [...].  If the currently
>     selected newsgroup is invalid, a 412 response MUST be returned.  [...]
> 
> According to (iii) above, this apparently should be interpreted to mean:
> 
>                                                         If the "currently
>     selected newsgroup" is `invalid`, a 412 response MUST be returned.
> 
> Again, it remains unclear what should be done when the "currently
> selected newsgroup" has become lame.
> All other response codes specified in the Usage clauses for LAST
> and NEXT are not appropriate for this case.  The solution proposed
> for LISTGROUP hence is not applicable; a gap in the specification
> remains.

Yes!
It is erratum 2003 (which I mentioned at the beginning of this mail).
It is one of the annoying gaps in RFC 3977:

    http://www.rfc-editor.org/errata_search.php?eid=2003

Paragraph reworded as follows:

   If the currently selected newsgroup is invalid, a 412 response MUST
   be returned.  If the currently selected newsgroup is valid but the
   current article number is invalid, a 420 response MUST be returned.
   If the current article number is valid and there is no previous article
   in the currently selected newsgroup, a 422 response MUST be returned.
   In all three cases, the currently selected newsgroup and current article
   number MUST NOT be altered.

I believe the issue you mention is fixed.
The correct answer in your case is 420 if the newsgroup was empty,
and 422 if it was not.

Just to be sure, I have just checked in INN 2.5:

[Group with one article]

GROUP trigofacile.abc
211 1 1 1 trigofacile.abc
OVER
224 Overview information for 1 follows
1       test    [...]
.

[I remove the group]

LAST
422 No previous article to retrieve
NEXT
421 No next article to retrieve
OVER
423 No such article number 1

I think this behaviour is fine and RFC-with-errata-compliant.
Feel free to tell me if you reckon it is not the case.

-- 
Julien ÉLIE

« La science consiste à passer d'un étonnement à l'autre. »
  (Aristote)