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

Julien ÉLIE <[email protected]> Tue, 15 Feb 2011 20:56:04 +0100
Newsgroups gmane.ietf.nntp
Organization TrigoFACILE -- http://www.trigofacile.com/
Message-ID <[email protected]>
Just a few examples that could be added to RFC 3977.

Following a discussion with Alfred H=F6nes, who reported:

> (iv)  particulars of the 412 semantics
>=20
> The LISTGROUP Usage (Section 6.1.2.1, on page 39) contains the note:
>=20
>     [1] The 412 response can only occur if no group has been specified.
>=20
> The LISTGROUP Description (Section 6.1.2.2, on mid-page 40) says:
>=20
>     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 artic=
le
>     numbers in the newsgroup.  If no group is specified, the currently
>     selected newsgroup is used.
>=20
> |  If the group specified is not available on the server, a 411 respons=
e
> |  MUST be returned.  If no group is specified and the currently
> |  selected newsgroup is invalid, a 412 response MUST be returned.
>=20
> The second paragraph quoted could be interpreted to say, using the
> notation proposed above:
>=20
>     If the group specified is not available on the server, a 411 respon=
se
> |  MUST be returned.  If no group is specified and the currently
> |  selected newsgroup is `invalid`, a 412 response MUST be returned.
>=20
> 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 =3D> 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):
>=20
>     If the group specified is not available on the server, a 411 respon=
se
> |  MUST be returned.  If no group is specified and the currently
> |  selected newsgroup is `invalid` (has never been set) or it has becom=
e
> |  unavalable on the server, a 412 response MUST be returned.
>=20
> 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 current=
ly
>     selected newsgroup is invalid, a 412 response MUST be returned.  [.=
..]
>=20
> According to (iii) above, this apparently should be interpreted to mean=
:
>=20
>                                                         If the "current=
ly
>     selected newsgroup" is `invalid`, a 412 response MUST be returned.
>=20
> 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=3D2003

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 articl=
e
   in the currently selected newsgroup, a 422 response MUST be returned.
   In all three cases, the currently selected newsgroup and current artic=
le
   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.

--=20
Julien =C9LIE

=AB La science consiste =E0 passer d'un =E9tonnement =E0 l'autre. =BB
  (Aristote)