draft-ietf-nntpext-base-21.txt   draft-ietf-nntpext-base-22.txt 
NNTP C. Feather NNTP C. Feather
Internet-Draft Thus plc Internet-Draft Thus plc
Expires: September 6, 2004 March 8, 2004 Expires: September 19, 2004 March 21, 2004
Network News Transport Protocol Network News Transport Protocol
draft-ietf-nntpext-base-21 draft-ietf-nntpext-base-22
Status of this Memo Status of this Memo
By submitting this Internet-Draft, I certify that any applicable By submitting this Internet-Draft, I certify that any applicable
patent or other IPR claims of which I am aware have been disclosed, patent or other IPR claims of which I am aware have been disclosed,
and any of which I become aware will be disclosed, in accordance with and any of which I become aware will be disclosed, in accordance with
RFC 3667. RFC 3667.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that other Task Force (IETF), its areas, and its working groups. Note that other
skipping to change at page 1, line 32 skipping to change at page 1, line 32
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at http:// The list of current Internet-Drafts can be accessed at http://
www.ietf.org/ietf/1id-abstracts.txt. www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on September 6, 2004. This Internet-Draft will expire on September 19, 2004.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (2004). All Rights Reserved. Copyright (C) The Internet Society (2004). All Rights Reserved.
Abstract Abstract
The Network News Transport Protocol (NNTP) has been in use in the The Network News Transport Protocol (NNTP) has been in use in the
Internet for a decade and remains one of the most popular protocols Internet for a decade and remains one of the most popular protocols
(by volume) in use today. This document is a replacement for RFC 977 (by volume) in use today. This document is a replacement for RFC 977
and officially updates the protocol specification. It clarifies some and officially updates the protocol specification. It clarifies some
vagueness in RFC 977, includes some new base functionality, and vagueness in RFC 977, includes some new base functionality, and
provides a specific mechanism to add standardized extensions to NNTP. provides a specific mechanism to add standardized extensions to NNTP.
Administration Administration
This document is a product of the NNTP Working Group, chaired by Russ This document is a product of the NNTP Working Group, chaired by Russ
Allbery and Ned Freed. Allbery and Ned Freed.
This is draft 21. This is draft 22.
Author's Note Author's Note
This draft is written in XML using an NNTP-specific DTD. Custom This draft is written in XML using an NNTP-specific DTD. Custom
software is used to convert this to RFC 2629 [RFC2629] format, and software is used to convert this to RFC 2629 [RFC2629] format, and
then the public "xml2rfc" package to further reduce this to text, then the public "xml2rfc" package to further reduce this to text,
nroff source, and HTML. nroff source, and HTML.
No perl was used in producing this draft. No perl was used in producing this draft.
skipping to change at page 2, line 52 skipping to change at page 2, line 52
6. Article posting and retrieval . . . . . . . . . . . . . 28 6. Article posting and retrieval . . . . . . . . . . . . . 28
6.1 Group and article selection . . . . . . . . . . . . . . 28 6.1 Group and article selection . . . . . . . . . . . . . . 28
6.1.1 GROUP . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.1.1 GROUP . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.1.2 LAST . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.1.2 LAST . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.1.3 NEXT . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.1.3 NEXT . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.2 Retrieval of articles and article sections . . . . . . . 34 6.2 Retrieval of articles and article sections . . . . . . . 34
6.2.1 ARTICLE . . . . . . . . . . . . . . . . . . . . . . . . 34 6.2.1 ARTICLE . . . . . . . . . . . . . . . . . . . . . . . . 34
6.2.2 HEAD . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.2.2 HEAD . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.2.3 BODY . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6.2.3 BODY . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.2.4 STAT . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.2.4 STAT . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.3 Article posting . . . . . . . . . . . . . . . . . . . . 43 6.3 Article posting . . . . . . . . . . . . . . . . . . . . 44
6.3.1 POST . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.3.1 POST . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.3.2 IHAVE . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.3.2 IHAVE . . . . . . . . . . . . . . . . . . . . . . . . . 46
7. Information commands . . . . . . . . . . . . . . . . . . 49 7. Information commands . . . . . . . . . . . . . . . . . . 50
7.1 DATE . . . . . . . . . . . . . . . . . . . . . . . . . . 49 7.1 DATE . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.2 HELP . . . . . . . . . . . . . . . . . . . . . . . . . . 49 7.2 HELP . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.3 NEWGROUPS . . . . . . . . . . . . . . . . . . . . . . . 50 7.3 NEWGROUPS . . . . . . . . . . . . . . . . . . . . . . . 51
7.4 NEWNEWS . . . . . . . . . . . . . . . . . . . . . . . . 52 7.4 NEWNEWS . . . . . . . . . . . . . . . . . . . . . . . . 53
7.5 Time . . . . . . . . . . . . . . . . . . . . . . . . . . 53 7.5 Time . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.5.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . 53 7.5.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . 54
7.6 The LIST commands . . . . . . . . . . . . . . . . . . . 54 7.6 The LIST commands . . . . . . . . . . . . . . . . . . . 55
7.6.1 LIST ACTIVE . . . . . . . . . . . . . . . . . . . . . . 54 7.6.1 LIST ACTIVE . . . . . . . . . . . . . . . . . . . . . . 55
7.6.2 LIST ACTIVE.TIMES . . . . . . . . . . . . . . . . . . . 56 7.6.2 LIST ACTIVE.TIMES . . . . . . . . . . . . . . . . . . . 57
7.6.3 LIST DISTRIBUTIONS . . . . . . . . . . . . . . . . . . . 58 7.6.3 LIST DISTRIBUTIONS . . . . . . . . . . . . . . . . . . . 59
7.6.4 LIST DISTRIB.PATS . . . . . . . . . . . . . . . . . . . 59 7.6.4 LIST DISTRIB.PATS . . . . . . . . . . . . . . . . . . . 60
7.6.5 LIST NEWSGROUPS . . . . . . . . . . . . . . . . . . . . 60 7.6.5 LIST NEWSGROUPS . . . . . . . . . . . . . . . . . . . . 61
8. Framework for NNTP extensions . . . . . . . . . . . . . 62 8. Framework for NNTP extensions . . . . . . . . . . . . . 63
8.1 Initial IANA registry . . . . . . . . . . . . . . . . . 64 8.1 Initial IANA registry . . . . . . . . . . . . . . . . . 65
8.2 Standard extensions . . . . . . . . . . . . . . . . . . 64 8.2 Standard extensions . . . . . . . . . . . . . . . . . . 65
8.3 The LISTGROUP extension . . . . . . . . . . . . . . . . 64 8.3 The LISTGROUP extension . . . . . . . . . . . . . . . . 65
8.3.1 LISTGROUP . . . . . . . . . . . . . . . . . . . . . . . 65 8.3.1 LISTGROUP . . . . . . . . . . . . . . . . . . . . . . . 66
8.4 Article metadata . . . . . . . . . . . . . . . . . . . . 66 8.4 Article metadata . . . . . . . . . . . . . . . . . . . . 67
8.4.1 The :bytes metadata item . . . . . . . . . . . . . . . . 67 8.4.1 The :bytes metadata item . . . . . . . . . . . . . . . . 68
8.4.2 The :lines metadata item . . . . . . . . . . . . . . . . 67 8.4.2 The :lines metadata item . . . . . . . . . . . . . . . . 68
8.5 The OVER extension . . . . . . . . . . . . . . . . . . . 67 8.5 The OVER extension . . . . . . . . . . . . . . . . . . . 68
8.5.1 OVER . . . . . . . . . . . . . . . . . . . . . . . . . . 68 8.5.1 OVER . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8.5.2 LIST OVERVIEW.FMT . . . . . . . . . . . . . . . . . . . 73 8.5.2 LIST OVERVIEW.FMT . . . . . . . . . . . . . . . . . . . 74
8.6 The HDR extension . . . . . . . . . . . . . . . . . . . 75 8.6 The HDR extension . . . . . . . . . . . . . . . . . . . 76
8.6.1 HDR . . . . . . . . . . . . . . . . . . . . . . . . . . 75 8.6.1 HDR . . . . . . . . . . . . . . . . . . . . . . . . . . 76
8.6.2 LIST HEADERS . . . . . . . . . . . . . . . . . . . . . . 79 8.6.2 LIST HEADERS . . . . . . . . . . . . . . . . . . . . . . 80
9. Augmented BNF Syntax for NNTP . . . . . . . . . . . . . 83 9. Augmented BNF Syntax for NNTP . . . . . . . . . . . . . 84
9.1 Commands . . . . . . . . . . . . . . . . . . . . . . . . 83 9.1 Commands . . . . . . . . . . . . . . . . . . . . . . . . 84
9.2 Responses . . . . . . . . . . . . . . . . . . . . . . . 85 9.2 Responses . . . . . . . . . . . . . . . . . . . . . . . 86
9.3 Multi-line response contents . . . . . . . . . . . . . . 85 9.3 Multi-line response contents . . . . . . . . . . . . . . 86
9.4 Articles . . . . . . . . . . . . . . . . . . . . . . . . 87 9.4 Articles . . . . . . . . . . . . . . . . . . . . . . . . 88
9.5 General non-terminals . . . . . . . . . . . . . . . . . 87 9.5 General non-terminals . . . . . . . . . . . . . . . . . 88
10. IANA Considerations . . . . . . . . . . . . . . . . . . 89 10. IANA Considerations . . . . . . . . . . . . . . . . . . 90
11. Security Considerations . . . . . . . . . . . . . . . . 90 11. Security Considerations . . . . . . . . . . . . . . . . 91
11.1 Personal and Proprietary Information . . . . . . . . . . 90 11.1 Personal and Proprietary Information . . . . . . . . . . 91
11.2 Abuse of Server Log Information . . . . . . . . . . . . 90 11.2 Abuse of Server Log Information . . . . . . . . . . . . 91
11.3 Weak Authentication and Access Control . . . . . . . . . 90 11.3 Weak Authentication and Access Control . . . . . . . . . 91
11.4 DNS Spoofing . . . . . . . . . . . . . . . . . . . . . . 91 11.4 DNS Spoofing . . . . . . . . . . . . . . . . . . . . . . 92
11.5 UTF-8 issues . . . . . . . . . . . . . . . . . . . . . . 91 11.5 UTF-8 issues . . . . . . . . . . . . . . . . . . . . . . 92
11.6 Caching of LIST EXTENSIONS results . . . . . . . . . . . 92 11.6 Caching of LIST EXTENSIONS results . . . . . . . . . . . 93
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . 94 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . 95
Normative References . . . . . . . . . . . . . . . . . . 96 Normative References . . . . . . . . . . . . . . . . . . 97
Informative References . . . . . . . . . . . . . . . . . 97 Informative References . . . . . . . . . . . . . . . . . 98
Author's Address . . . . . . . . . . . . . . . . . . . . 97 Author's Address . . . . . . . . . . . . . . . . . . . . 98
A. Future Directions . . . . . . . . . . . . . . . . . . . 98 A. Future Directions . . . . . . . . . . . . . . . . . . . 99
B. Interaction with other specifications . . . . . . . . . 99 B. Interaction with other specifications . . . . . . . . . 100
B.1 Header folding . . . . . . . . . . . . . . . . . . . . . 99 B.1 Header folding . . . . . . . . . . . . . . . . . . . . . 100
B.2 Message-IDs . . . . . . . . . . . . . . . . . . . . . . 99 B.2 Message-IDs . . . . . . . . . . . . . . . . . . . . . . 100
B.3 Article posting . . . . . . . . . . . . . . . . . . . . 100 B.3 Article posting . . . . . . . . . . . . . . . . . . . . 101
C. Summary of Response Codes . . . . . . . . . . . . . . . 102 C. Summary of Response Codes . . . . . . . . . . . . . . . 103
D. Formal specification of the standard extensions . . . . 107 D. Formal specification of the standard extensions . . . . 108
D.1 The LISTGROUP extension . . . . . . . . . . . . . . . . 107 D.1 The LISTGROUP extension . . . . . . . . . . . . . . . . 108
D.2 The OVER extension . . . . . . . . . . . . . . . . . . . 107 D.2 The OVER extension . . . . . . . . . . . . . . . . . . . 108
D.3 The HDR extension . . . . . . . . . . . . . . . . . . . 108 D.3 The HDR extension . . . . . . . . . . . . . . . . . . . 109
Intellectual Property and Copyright Statements . . . . . 110 Intellectual Property and Copyright Statements . . . . . 111
1. Introduction 1. Introduction
This document specifies the Network News Transport Protocol (NNTP), This document specifies the Network News Transport Protocol (NNTP),
which is used for the distribution, inquiry, retrieval, and posting which is used for the distribution, inquiry, retrieval, and posting
of Netnews articles using a reliable stream-based mechanism. For news of Netnews articles using a reliable stream-based mechanism. For news
reading clients, NNTP enables retrieval of news articles that are reading clients, NNTP enables retrieval of news articles that are
stored in a central database, giving subscribers the ability to stored in a central database, giving subscribers the ability to
select only those articles they wish to read. select only those articles they wish to read.
skipping to change at page 6, line 22 skipping to change at page 6, line 22
[brackets] indicate that the argument is optional; [brackets] indicate that the argument is optional;
ellipsis... indicates that the argument may be repeated any ellipsis... indicates that the argument may be repeated any
number of times (it must occur at least once); number of times (it must occur at least once);
vertical|bar indicates a choice of two mutually exclusive vertical|bar indicates a choice of two mutually exclusive
arguments (exactly one must be provided). arguments (exactly one must be provided).
The name "message-id" for a command or response argument indicates The name "message-id" for a command or response argument indicates
that it is the message-id of an article as described in Section 3.4, that it is the message-id of an article as described in Section 3.4,
including the angle brackets. including the angle brackets.
The name "wildmat" for a argument indicates that it is a wildmat as The name "wildmat" for an argument indicates that it is a wildmat as
defined in Section 4. If the argument does not meet the requirements defined in Section 4. If the argument does not meet the requirements
of that section (for example, if it does not fit the grammar of of that section (for example, if it does not fit the grammar of
Section 4.1) the NNTP server MAY place some interpretation on it (not Section 4.1) the NNTP server MAY place some interpretation on it (not
specified by this document) or otherwise MUST treat it as a syntax specified by this document) or otherwise MUST treat it as a syntax
error. error.
Responses for each command will be described in tables listing the Responses for each command will be described in tables listing the
required format of a response followed by the meaning that should be required format of a response followed by the meaning that should be
ascribed to that response. ascribed to that response.
skipping to change at page 8, line 52 skipping to change at page 8, line 52
with dieresis) is two; the two need not be treated as equivalent. with dieresis) is two; the two need not be treated as equivalent.
Commands may have variants, using a second keyword immediately after Commands may have variants, using a second keyword immediately after
the first to indicate which variant is required. The only such the first to indicate which variant is required. The only such
commands in this specification are LIST and MODE. Note that such commands in this specification are LIST and MODE. Note that such
variants are sometimes referred to as if they were commands in their variants are sometimes referred to as if they were commands in their
own right: "the LIST ACTIVE" command should be read as shorthand for own right: "the LIST ACTIVE" command should be read as shorthand for
"the ACTIVE variant of the LIST command". "the ACTIVE variant of the LIST command".
Keywords are case-insensitive; the case of keywords for commands MUST Keywords are case-insensitive; the case of keywords for commands MUST
be ignored by the server. Command and response arguments are case or be ignored by the server. Command and response arguments are case- or
language specific only when stated, either in this document or in language-specific only when stated, either in this document or in
other relevant specifications. other relevant specifications.
An NNTP server MUST implement all the commands in this specification An NNTP server MUST implement all the commands in this specification
except for those marked as optional and those in extensions. except for those marked as optional and those in extensions.
Each response MUST start with a three-digit response code that is Each response MUST start with a three-digit response code that is
sufficient to distinguish all responses. Certain valid responses are sufficient to distinguish all responses. Certain valid responses are
defined to be multi-line; for all others, the response is contained defined to be multi-line; for all others, the response is contained
in a single line. The first or only line of the response MUST NOT in a single line. The first or only line of the response MUST NOT
exceed 512 octets, which includes the response code and the exceed 512 octets, which includes the response code and the
skipping to change at page 9, line 37 skipping to change at page 9, line 37
3. If any subsequent line begins with the "termination octet" ("." 3. If any subsequent line begins with the "termination octet" ("."
or %x2E), that line MUST be "byte-stuffed" by pre-pending an or %x2E), that line MUST be "byte-stuffed" by pre-pending an
additional termination octet to that line of the response. additional termination octet to that line of the response.
4. The lines of the response MUST be followed by a terminating line 4. The lines of the response MUST be followed by a terminating line
consisting of a single termination octet followed by a CRLF pair consisting of a single termination octet followed by a CRLF pair
in the normal way. Thus a multi-line response is always in the normal way. Thus a multi-line response is always
terminated with the five octets CRLF "." CRLF (%x0D.0A.2E.0D.0A). terminated with the five octets CRLF "." CRLF (%x0D.0A.2E.0D.0A).
5. When interpreting a multi-line response, the "byte stuffing" MUST 5. When interpreting a multi-line response, the "byte-stuffing" MUST
be undone; i.e. the client MUST ensure that, in any line be undone; i.e. the client MUST ensure that, in any line
beginning with the termination octet followed by octets other beginning with the termination octet followed by octets other
than a CRLF pair, that initial termination octet is disregarded. than a CRLF pair, that initial termination octet is disregarded.
6. Likewise, the terminating line ("." CRLF or %x2E.0D.0A) MUST NOT 6. Likewise, the terminating line ("." CRLF or %x2E.0D.0A) MUST NOT
be considered part of the multi-line response; i.e. the client be considered part of the multi-line response; i.e. the client
MUST ensure that any line beginning with the termination octet MUST ensure that any line beginning with the termination octet
followed immediately by a CRLF pair is disregarded; (the first followed immediately by a CRLF pair is disregarded; (the first
CRLF pair of the terminating CRLF "." CRLF is, of course, part of CRLF pair of the terminating CRLF "." CRLF is, of course, part of
the last line of the response). the last line of the response).
skipping to change at page 12, line 23 skipping to change at page 12, line 23
response code 501 MUST be returned. The line MUST NOT be truncated or response code 501 MUST be returned. The line MUST NOT be truncated or
split and then interpreted. Note that where a command has variants split and then interpreted. Note that where a command has variants
depending on a second keyword (e.g. LIST ACTIVE and LIST NEWSGROUPS), depending on a second keyword (e.g. LIST ACTIVE and LIST NEWSGROUPS),
then 501 MUST be used when the base command is implemented but the then 501 MUST be used when the base command is implemented but the
requested variant is not, and 500 MUST be used only when the base requested variant is not, and 500 MUST be used only when the base
command itself is not implemented. command itself is not implemented.
If the server experiences an internal fault or problem that means it If the server experiences an internal fault or problem that means it
is unable to carry out the command (for example, a necessary file is is unable to carry out the command (for example, a necessary file is
missing or a necessary service could not be contacted), the response missing or a necessary service could not be contacted), the response
code 403 MUST be returned. If the server recognises the command but code 403 MUST be returned. If the server recognizes the command but
does not provide an optional feature (for example because it does not does not provide an optional feature (for example because it does not
store the required information), or only handles a subset of store the required information), or only handles a subset of
legitimate cases (see the HDR command (Section 8.6.1) for an legitimate cases (see the HDR command (Section 8.6.1) for an
example), the response code 503 MUST be returned. Note that where a example), the response code 503 MUST be returned. Note that where a
command is optional (e.g. LIST ACTIVE.TIMES) and is not provided by a command is optional (e.g. LIST ACTIVE.TIMES) and is not provided by a
server, this MAY be treated as an unimplemented command (response server, this MAY be treated as an unimplemented command (response
code 500 or 501 as appropriate) or as a working command where the code 500 or 501 as appropriate) or as a working command where the
information is not available (response code 503). information is not available (response code 503).
If the client is not authorized to use the specified facility when If the client is not authorized to use the specified facility when
skipping to change at page 17, line 7 skipping to change at page 17, line 7
the general requirements of NNTP, an article MUST NOT include the the general requirements of NNTP, an article MUST NOT include the
octet NUL, MUST NOT contain the octets LF and CR other than as part octet NUL, MUST NOT contain the octets LF and CR other than as part
of a CRLF pair, and MUST end with a CRLF pair. This specification of a CRLF pair, and MUST end with a CRLF pair. This specification
puts no further restrictions on the body; in particular, it MAY be puts no further restrictions on the body; in particular, it MAY be
empty. empty.
The headers of an article consist of one or more header lines. Each The headers of an article consist of one or more header lines. Each
header line consists of a header name, a colon, a space, the header header line consists of a header name, a colon, a space, the header
content, and a CRLF in that order. The name consists of one or more content, and a CRLF in that order. The name consists of one or more
printable US-ASCII characters other than colon and, for the purposes printable US-ASCII characters other than colon and, for the purposes
of this specification, is not case sensitive. There MAY be more than of this specification, is not case-sensitive. There MAY be more than
one header line with the same name. The content MUST NOT contain one header line with the same name. The content MUST NOT contain
CRLF; it MAY be empty. A header may be "folded"; that is, a CRLF pair CRLF; it MAY be empty. A header may be "folded"; that is, a CRLF pair
may be placed before any TAB or space in the line; there MUST still may be placed before any TAB or space in the line; there MUST still
be some other octet between any two CRLF pairs in a header line. be some other octet between any two CRLF pairs in a header line.
(Note that folding means that the header line occupies more than one (Note that folding means that the header line occupies more than one
line when displayed or transmitted; nevertheless it is still referred line when displayed or transmitted; nevertheless it is still referred
to as "a" header line.) The presence or absence of folding does not to as "a" header line.) The presence or absence of folding does not
affect the meaning of the header line; that is, the CRLF pairs affect the meaning of the header line; that is, the CRLF pairs
introduced by folding are not considered part of the header content. introduced by folding are not considered part of the header content.
Header lines SHOULD NOT be folded before the space after the colon Header lines SHOULD NOT be folded before the space after the colon
skipping to change at page 17, line 49 skipping to change at page 17, line 49
o A message-id MUST be between 3 and 250 octets in length. o A message-id MUST be between 3 and 250 octets in length.
o A message-id MUST NOT contain octets other than printable US-ASCII o A message-id MUST NOT contain octets other than printable US-ASCII
characters. characters.
Two message-ids are the same if and only if they consist of the same Two message-ids are the same if and only if they consist of the same
sequence of octets. sequence of octets.
This specification does not describe how the message-id of an article This specification does not describe how the message-id of an article
is determined. If the server does not have any way to determine a is determined. If the server does not have any way to determine a
message-id from the article itself, it MUST synthesise one (this message-id from the article itself, it MUST synthesize one (this
specification does not require the article to be changed as a specification does not require the article to be changed as a
result). See also Appendix B.2. result). See also Appendix B.2.
4. The WILDMAT format 4. The WILDMAT format
The WILDMAT format described here is based on the version first The WILDMAT format described here is based on the version first
developed by Rich Salz [SALZ1992], which in turn was derived from the developed by Rich Salz [SALZ1992], which in turn was derived from the
format used in the UNIX "find" command to articulate file names. It format used in the UNIX "find" command to articulate file names. It
was developed to provide a uniform mechanism for matching patterns in was developed to provide a uniform mechanism for matching patterns in
the same manner that the UNIX shell matches filenames. the same manner that the UNIX shell matches filenames.
skipping to change at page 34, line 44 skipping to change at page 34, line 44
6.2.1.1 Usage 6.2.1.1 Usage
Syntax Syntax
ARTICLE message-id ARTICLE message-id
ARTICLE number ARTICLE number
ARTICLE ARTICLE
Responses Responses
First form (message-id specified) First form (message-id specified)
220 0 message-id Article follows (multiline) 220 0|n message-id Article follows (multiline)
430 No article with that message-id 430 No article with that message-id
Second form (article number specified) Second form (article number specified)
220 n message-id Article follows (multiline) 220 n message-id Article follows (multiline)
412 No newsgroup selected 412 No newsgroup selected
423 No articles in that range 423 No articles in that range
Third form (current article number used) Third form (current article number used)
220 n message-id Article follows (multiline) 220 n message-id Article follows (multiline)
412 No newsgroup selected 412 No newsgroup selected
420 Current article number is invalid 420 Current article number is invalid
skipping to change at page 35, line 26 skipping to change at page 35, line 26
The ARTICLE command selects an article based on the arguments and The ARTICLE command selects an article based on the arguments and
presents the entire article (that is, the headers, an empty line, and presents the entire article (that is, the headers, an empty line, and
the body in that order). The command has three forms. the body in that order). The command has three forms.
In the first form, a message-id is specified and the server presents In the first form, a message-id is specified and the server presents
the article with that message-id. In this case, the server MUST NOT the article with that message-id. In this case, the server MUST NOT
alter the current selected newsgroup or current article number. This alter the current selected newsgroup or current article number. This
is both to facilitate the presentation of articles that may be is both to facilitate the presentation of articles that may be
referenced within another article being read, and because of the referenced within another article being read, and because of the
semantic difficulties of determining the proper sequence and semantic difficulties of determining the proper sequence and
membership of an article that may have been crossposted to more than membership of an article that may have been cross-posted to more than
one newsgroup. one newsgroup.
In the response, the article number is replaced with zero (that is, In the response, the article number MUST be replaced with zero,
the server is not required to determine whether the article is in the except that if there is a current selected group and the article is
current selected newsgroup or what article number(s) it has). present in that group, the server MAY use that article number. (The
server is not required to determine whether the article is in the
current selected newsgroup or, if so, what article number it has; the
client MUST always be prepared for zero to be specified.) The server
MUST NOT provide an article number unless use of that number in a
second ARTICLE command immediately following this one would return
the same article. Even if the server chooses to return article
numbers in these circumstances, it need not do so consistently; it
MAY return zero to any such command (also see the STAT examples
(Section 6.2.4.3)).
In the second form, an article number is specified. If there is an In the second form, an article number is specified. If there is an
article with that number in the current selected newsgroup, the article with that number in the current selected newsgroup, the
server MUST set the current article number to that number. server MUST set the current article number to that number.
In the third form, the article indicated by the current article In the third form, the article indicated by the current article
number in the current selected newsgroup is used. number in the current selected newsgroup is used.
Note that a previously valid article number MAY become invalid if the Note that a previously valid article number MAY become invalid if the
article has been removed. A previously invalid article number MAY article has been removed. A previously invalid article number MAY
skipping to change at page 37, line 42 skipping to change at page 38, line 4
[S] 420 No current article selected [S] 420 No current article selected
6.2.2 HEAD 6.2.2 HEAD
6.2.2.1 Usage 6.2.2.1 Usage
Syntax Syntax
HEAD message-id HEAD message-id
HEAD number HEAD number
HEAD HEAD
Responses Responses
First form (message-id specified) First form (message-id specified)
221 0 message-id Headers follow (multiline) 221 0|n message-id Headers follow (multiline)
430 No article with that message-id 430 No article with that message-id
Second form (article number specified) Second form (article number specified)
221 n message-id Headers follow (multiline) 221 n message-id Headers follow (multiline)
412 No newsgroup selected 412 No newsgroup selected
423 No articles in that range 423 No articles in that range
Third form (current article number used) Third form (current article number used)
221 n message-id Headers follow (multiline) 221 n message-id Headers follow (multiline)
412 No newsgroup selected 412 No newsgroup selected
skipping to change at page 39, line 40 skipping to change at page 40, line 4
current selected newsgroup is empty: current selected newsgroup is empty:
[C] GROUP example.empty.newsgroup [C] GROUP example.empty.newsgroup
[S] 211 0 0 0 example.empty.newsgroup [S] 211 0 0 0 example.empty.newsgroup
[C] HEAD [C] HEAD
[S] 420 No current article selected [S] 420 No current article selected
6.2.3 BODY 6.2.3 BODY
6.2.3.1 Usage 6.2.3.1 Usage
Syntax Syntax
BODY message-id BODY message-id
BODY number BODY number
BODY BODY
Responses Responses
First form (message-id specified) First form (message-id specified)
222 0 message-id Body follows (multiline) 222 0|n message-id Body follows (multiline)
430 No article with that message-id 430 No article with that message-id
Second form (article number specified) Second form (article number specified)
222 n message-id Body follows (multiline) 222 n message-id Body follows (multiline)
412 No newsgroup selected 412 No newsgroup selected
423 No articles in that range 423 No articles in that range
Third form (current article number used) Third form (current article number used)
222 n message-id Body follows (multiline) 222 n message-id Body follows (multiline)
412 No newsgroup selected 412 No newsgroup selected
420 Current article number is invalid 420 Current article number is invalid
skipping to change at page 41, line 37 skipping to change at page 42, line 4
6.2.4 STAT 6.2.4 STAT
6.2.4.1 Usage 6.2.4.1 Usage
Syntax Syntax
STAT message-id STAT message-id
STAT number STAT number
STAT STAT
Responses Responses
First form (message-id specified) First form (message-id specified)
223 0 message-id Article exists 223 0|n message-id Article exists
430 No article with that message-id 430 No article with that message-id
Second form (article number specified) Second form (article number specified)
223 n message-id Article exists 223 n message-id Article exists
412 No newsgroup selected 412 No newsgroup selected
423 No articles in that range 423 No articles in that range
Third form (current article number used) Third form (current article number used)
223 n message-id Article exists 223 n message-id Article exists
412 No newsgroup selected 412 No newsgroup selected
skipping to change at page 43, line 14 skipping to change at page 43, line 28
[S] 412 No newsgroup selected [S] 412 No newsgroup selected
Example of STAT on an article when the current selected newsgroup is Example of STAT on an article when the current selected newsgroup is
empty: empty:
[C] GROUP example.empty.newsgroup [C] GROUP example.empty.newsgroup
[S] 211 0 0 0 example.empty.newsgroup [S] 211 0 0 0 example.empty.newsgroup
[C] STAT [C] STAT
[S] 420 No current article selected [S] 420 No current article selected
Example of STAT by message-id on a server which sometimes reports the
actual article number:
[C] GROUP misc.test
[S] 211 1234 3000234 3002322 misc.test
[C] STAT
[S] 223 3000234 <45223423@example.com>
[C] STAT <45223423@example.com>
[S] 223 0 <45223423@example.com>
[C] STAT <45223423@example.com>
[S] 223 3000234 <45223423@example.com>
[C] GROUP example.empty.newsgroup
[S] 211 0 0 0 example.empty.newsgroup
[C] STAT <45223423@example.com>
[S] 223 0 <45223423@example.com>
[C] GROUP alt.crossposts
[S] 211 9999 111111 222222 alt.crossposts
[C] STAT <45223423@example.com>
[S] 223 123456 <45223423@example.com>
[C] STAT
[S] 223 111111 <23894720@example.com>
The first STAT command establishes the identity of an article in the
group. The second and third show that the server may, but need not,
give the article number when the message-id is specified. The fourth
STAT command shows that zero must be specified if the article isn't
in the current selected group, the fifth shows that the number, if
provided, must be that relating to the current selected group, and
the last one shows that the current selected article is still not
changed by the use of STAT with a message-id even if it returns an
article number.
6.3 Article posting 6.3 Article posting
Article posting is done in one of two modes: individual article Article posting is done in one of two modes: individual article
posting from news reading clients using POST, and article transfer posting from news reading clients using POST, and article transfer
from other news servers using IHAVE. from other news servers using IHAVE.
6.3.1 POST 6.3.1 POST
6.3.1.1 Usage 6.3.1.1 Usage
skipping to change at page 55, line 28 skipping to change at page 56, line 28
"n" posting is not permitted "n" posting is not permitted
"m" postings will be forwarded to the newsgroup moderator "m" postings will be forwarded to the newsgroup moderator
The server SHOULD use these values when these meanings are required The server SHOULD use these values when these meanings are required
and MUST NOT use them with any other meaning. Other values for the and MUST NOT use them with any other meaning. Other values for the
status may exist; the definition of these other values and the status may exist; the definition of these other values and the
circumstances under which they are returned may be specified in an circumstances under which they are returned may be specified in an
extension or may be private to the server. A client SHOULD treat an extension or may be private to the server. A client SHOULD treat an
unrecognised status as giving no information. unrecognized status as giving no information.
The status of a newsgroup only indicates how posts to that newsgroup The status of a newsgroup only indicates how posts to that newsgroup
are normally processed and is not necessarily customised to the are normally processed and is not necessarily customised to the
specific client. For example, if the current client is forbidden from specific client. For example, if the current client is forbidden from
posting, then this will apply equally to groups with status "y". posting, then this will apply equally to groups with status "y".
Conversely, a client with special privileges (not defined by this Conversely, a client with special privileges (not defined by this
specification) might be able to post to a group with status "n". specification) might be able to post to a group with status "n".
If the optional wildmat argument is specified, the response is If the optional wildmat argument is specified, the response is
limited to only the groups (if any) whose names match the wildmat. If limited to only the groups (if any) whose names match the wildmat. If
skipping to change at page 57, line 48 skipping to change at page 58, line 48
Example of LIST ACTIVE.TIMES returning a list of newsgroups: Example of LIST ACTIVE.TIMES returning a list of newsgroups:
[C] LIST ACTIVE.TIMES [C] LIST ACTIVE.TIMES
[S] 215 information follows [S] 215 information follows
[S] misc.test 930445408 <creatme@isc.org> [S] misc.test 930445408 <creatme@isc.org>
[S] alt.rfc-writers.recovery 930562309 <m@example.com> [S] alt.rfc-writers.recovery 930562309 <m@example.com>
[S] tx.natives.recovery 930678923 <sob@academ.com> [S] tx.natives.recovery 930678923 <sob@academ.com>
[S] . [S] .
Example of LIST ACTIVE.TIMES returning an error where the command is Example of LIST ACTIVE.TIMES returning an error where the command is
recognised but the software does not maintain this information: recognized but the software does not maintain this information:
[C] LIST ACTIVE.TIMES [C] LIST ACTIVE.TIMES
[S] 503 program error, function not performed [S] 503 program error, function not performed
Example of LIST ACTIVE.TIMES sent to a server that does not recognize Example of LIST ACTIVE.TIMES sent to a server that does not recognize
this command: this command:
[C] LIST ACTIVE.TIMES [C] LIST ACTIVE.TIMES
[S] 501 Syntax Error [S] 501 Syntax Error
7.6.3 LIST DISTRIBUTIONS 7.6.3 LIST DISTRIBUTIONS
skipping to change at page 58, line 46 skipping to change at page 59, line 46
Example of LIST DISTRIBUTIONS returning a list of distributions: Example of LIST DISTRIBUTIONS returning a list of distributions:
[C] LIST DISTRIBUTIONS [C] LIST DISTRIBUTIONS
[S] 215 information follows [S] 215 information follows
[S] usa United States of America [S] usa United States of America
[S] na North America [S] na North America
[S] world All over the World [S] world All over the World
[S] . [S] .
Example of LIST DISTRIBUTIONS returning an error where the command is Example of LIST DISTRIBUTIONS returning an error where the command is
recognised but the software does not maintain this information: recognized but the software does not maintain this information:
[C] LIST DISTRIBUTIONS [C] LIST DISTRIBUTIONS
[S] 503 program error, function not performed [S] 503 program error, function not performed
Example of LIST DISTRIBUTIONS sent to a server that does not Example of LIST DISTRIBUTIONS sent to a server that does not
recognize this command: recognize this command:
[C] LIST DISTRIBUTIONS [C] LIST DISTRIBUTIONS
[S] 501 Syntax Error [S] 501 Syntax Error
7.6.4 LIST DISTRIB.PATS 7.6.4 LIST DISTRIB.PATS
skipping to change at page 60, line 8 skipping to change at page 61, line 8
Example of LIST DISTRIB.PATS returning a list of newsgroups: Example of LIST DISTRIB.PATS returning a list of newsgroups:
[C] LIST DISTRIB.PATS [C] LIST DISTRIB.PATS
[S] 215 information follows [S] 215 information follows
[S] 10:local.*:local [S] 10:local.*:local
[S] 5:*:world [S] 5:*:world
[S] 20:local.here.*:thissite [S] 20:local.here.*:thissite
[S] . [S] .
Example of LIST DISTRIB.PATS returning an error where the command is Example of LIST DISTRIB.PATS returning an error where the command is
recognised but the software does not maintain this information: recognized but the software does not maintain this information:
[C] LIST DISTRIB.PATS [C] LIST DISTRIB.PATS
[S] 503 program error, function not performed [S] 503 program error, function not performed
Example of LIST DISTRIB.PATS sent to a server that does not recognize Example of LIST DISTRIB.PATS sent to a server that does not recognize
this command: this command:
[C] LIST DISTRIB.PATS [C] LIST DISTRIB.PATS
[S] 501 Syntax Error [S] 501 Syntax Error
skipping to change at page 61, line 25 skipping to change at page 62, line 25
Example of LIST NEWSGROUPS returning a list of newsgroups: Example of LIST NEWSGROUPS returning a list of newsgroups:
[C] LIST NEWSGROUPS [C] LIST NEWSGROUPS
[S] 215 information follows [S] 215 information follows
[S] misc.test General Usenet testing [S] misc.test General Usenet testing
[S] alt.rfc-writers.recovery RFC Writers Recovery [S] alt.rfc-writers.recovery RFC Writers Recovery
[S] tx.natives.recovery Texas Natives Recovery [S] tx.natives.recovery Texas Natives Recovery
[S] . [S] .
Example of LIST NEWSGROUPS returning an error where the command is Example of LIST NEWSGROUPS returning an error where the command is
recognised but the software does not maintain this information: recognized but the software does not maintain this information:
[C] LIST NEWSGROUPS [C] LIST NEWSGROUPS
[S] 503 program error, function not performed [S] 503 program error, function not performed
Example of LIST NEWSGROUPS sent to a server that does not recognize Example of LIST NEWSGROUPS sent to a server that does not recognize
this command: this command:
[C] LIST NEWSGROUPS [C] LIST NEWSGROUPS
[S] 501 Syntax error [S] 501 Syntax error
skipping to change at page 66, line 46 skipping to change at page 67, line 46
[S] 411 no such group [S] 411 no such group
[C] LISTGROUP [C] LISTGROUP
[S] 412 no current group [S] 412 no current group
8.4 Article metadata 8.4 Article metadata
The OVER and HDR extensions refer to the concept of "article The OVER and HDR extensions refer to the concept of "article
metadata". This is data about articles that does not occur within the metadata". This is data about articles that does not occur within the
article itself. Each metadata item has a name which MUST begin with a article itself. Each metadata item has a name which MUST begin with a
colon (and which MUST NOT contain a colon elsewhere within it). As colon (and which MUST NOT contain a colon elsewhere within it). As
with header names, metadata item names are not case sensistive. with header names, metadata item names are not case-sensitive.
When generating a metadata item, the server MUST compute it for When generating a metadata item, the server MUST compute it for
itself and MUST NOT trust any related value provided in the article. itself and MUST NOT trust any related value provided in the article.
(In particular, a Lines or Bytes header in the article MUST NOT be (In particular, a Lines or Bytes header in the article MUST NOT be
assumed to specify the correct number of lines or bytes in the assumed to specify the correct number of lines or bytes in the
article.) If the server has access to several non-identical copies of article.) If the server has access to several non-identical copies of
an article, the value returned MUST be correct for any copy of that an article, the value returned MUST be correct for any copy of that
article retrieved during the same session. article retrieved during the same session.
This specification defines two metadata items: ":bytes" and ":lines". This specification defines two metadata items: ":bytes" and ":lines".
skipping to change at page 67, line 20 skipping to change at page 68, line 20
metadata items defined by registered extensions MUST NOT begin with metadata items defined by registered extensions MUST NOT begin with
":x-". To avoid the risk of a clash with a future registered ":x-". To avoid the risk of a clash with a future registered
extension, the names of metadata items defined by private extensions extension, the names of metadata items defined by private extensions
SHOULD begin with ":x-". SHOULD begin with ":x-".
8.4.1 The :bytes metadata item 8.4.1 The :bytes metadata item
The :bytes metadata item for an article is a decimal integer. It The :bytes metadata item for an article is a decimal integer. It
SHOULD equal the number of octets in the entire article - headers, SHOULD equal the number of octets in the entire article - headers,
body, and separating empty line (counting a CRLF pair as two octets, body, and separating empty line (counting a CRLF pair as two octets,
and not including either the "." CRLF terminating the response nor and excluding both the "." CRLF terminating the response and any "."
any "." added for "byte-stuffing" purposes). added for "byte-stuffing" purposes).
Note to client implementers: some existing servers return a value Note to client implementers: some existing servers return a value
different to that above. The commonest reasons for this are: different to that above. The commonest reasons for this are:
o counting a CRLF pair as one octet; o counting a CRLF pair as one octet;
o including the "." character used for byte-stuffing in the number; o including the "." character used for byte-stuffing in the number;
o including the terminating "." CRLF in the number; o including the terminating "." CRLF in the number;
skipping to change at page 70, line 14 skipping to change at page 71, line 14
response following the 224 response code and contains one line per response following the 224 response code and contains one line per
article, sorted in numerical order of article number (note that article, sorted in numerical order of article number (note that
unless the argument is a range including a dash, there will only be unless the argument is a range including a dash, there will only be
one line but it will still be in multi-line format). Each line one line but it will still be in multi-line format). Each line
consists of a number of fields separated by a TAB. A field may be consists of a number of fields separated by a TAB. A field may be
empty (in which case there will be two adjacent TABs), and a sequence empty (in which case there will be two adjacent TABs), and a sequence
of trailing TABs may be omitted. of trailing TABs may be omitted.
The first 8 fields MUST be the following, in order: The first 8 fields MUST be the following, in order:
"0" (first form) or article number (second form) "0" or article number (see below)
Subject header content Subject header content
From header content From header content
Date header content Date header content
Message-ID header content Message-ID header content
References header content References header content
:bytes metadata item :bytes metadata item
:lines metadata item :lines metadata item
If the article is specified by message-id rather than by article If the article is specified by message-id (the first form of the
range, the article number is given as "0". command), the article number MUST be replaced with zero, except that
if there is a current selected group and the article is present in
that group, the server MAY use that article number (see the ARTICLE
command (Section 6.2.1) and STAT examples (Section 6.2.4.3) for more
details). In the other two forms of the command, the article number
MUST be returned.
Any subsequent fields are the contents of the other headers and Any subsequent fields are the contents of the other headers and
metadata held in the database. metadata held in the database.
For the five mandatory headers, the content of each field MUST be For the five mandatory headers, the content of each field MUST be
based on the content of the header (that is, with the header name and based on the content of the header (that is, with the header name and
following colon and space removed). If the article does not contain following colon and space removed). If the article does not contain
that header, or if the content is empty, the field MUST be empty. For that header, or if the content is empty, the field MUST be empty. For
the two mandatory metadata items, the content of the field MUST be the two mandatory metadata items, the content of the field MUST be
just the value, with no other text. just the value, with no other text.
skipping to change at page 71, line 7 skipping to change at page 72, line 12
item stored in the database for that article, the corresponding field item stored in the database for that article, the corresponding field
MUST be empty. MUST be empty.
Note that, after unfolding, the characters NUL, LF, and CR cannot Note that, after unfolding, the characters NUL, LF, and CR cannot
occur in the header of an article offered by a conformant server. occur in the header of an article offered by a conformant server.
Nevertheless, servers SHOULD check for these characters and replace Nevertheless, servers SHOULD check for these characters and replace
each one by a single space (so that, for example, CR LF LF TAB will each one by a single space (so that, for example, CR LF LF TAB will
become two spaces, since the CR and first LF will be removed by the become two spaces, since the CR and first LF will be removed by the
unfolding process). This will encourage robustness in the face of unfolding process). This will encourage robustness in the face of
non-conforming data; it is also possible that future versions of this non-conforming data; it is also possible that future versions of this
specification may permit these characters to appear in articles. specification could permit these characters to appear in articles.
The server SHOULD NOT produce output for articles that no longer The server SHOULD NOT produce output for articles that no longer
exist. exist.
If the argument is a message-id and no such article exists, a 430 If the argument is a message-id and no such article exists, a 430
response MUST be returned. If the argument is a range or is omitted response MUST be returned. If the argument is a range or is omitted
and the current selected newsgroup is invalid, a 412 response MUST be and the current selected newsgroup is invalid, a 412 response MUST be
returned. If the argument is a range and no articles in that number returned. If the argument is a range and no articles in that number
range exist in the current selected newsgroup, a 423 response MUST be range exist in the current selected newsgroup, a 423 response MUST be
returned. If the argument is omitted and the current article number returned. If the argument is omitted and the current article number
skipping to change at page 74, line 47 skipping to change at page 76, line 4
Example of LIST OVERVIEW.FMT output corresponding to the example OVER Example of LIST OVERVIEW.FMT output corresponding to the example OVER
output above, using the alternative format: output above, using the alternative format:
[C] LIST OVERVIEW.FMT [C] LIST OVERVIEW.FMT
[S] 215 Order of fields in overview database. [S] 215 Order of fields in overview database.
[S] Subject: [S] Subject:
[S] From: [S] From:
[S] Date: [S] Date:
[S] Message-ID: [S] Message-ID:
[S] References: [S] References:
[S] Bytes: [S] Bytes:
[S] Lines: [S] Lines:
[S] Xref:FULL [S] Xref:FULL
[S] Distribution:FULL [S] Distribution:FULL
[S] . [S] .
Example of LIST OVERVIEW.FMT returning an error where the command is Example of LIST OVERVIEW.FMT returning an error where the command is
recognised but the software does not maintain this information: recognized but the software does not maintain this information:
[C] LIST OVERVIEW.FMT [C] LIST OVERVIEW.FMT
[S] 503 overview.fmt not available [S] 503 overview.fmt not available
8.6 The HDR extension 8.6 The HDR extension
This extension provides two new commands: HDR and LIST HEADERS. The This extension provides two new commands: HDR and LIST HEADERS. The
label for this extension is HDR. label for this extension is HDR.
The HDR extension provides access to specific headers and metadata The HDR extension provides access to specific headers and metadata
skipping to change at page 76, line 47 skipping to change at page 78, line 5
If neither is specified, the current article number is used. If neither is specified, the current article number is used.
If the information is available, it is returned as a multi-line If the information is available, it is returned as a multi-line
response following the 225 response code and contains one line for response following the 225 response code and contains one line for
each article in the range that exists (note that unless the argument each article in the range that exists (note that unless the argument
is a range including a dash, there will be at most one line but it is a range including a dash, there will be at most one line but it
will still be in multi-line format). The line consists of the article will still be in multi-line format). The line consists of the article
number, a space, and then the contents of the header or metadata number, a space, and then the contents of the header or metadata
item. In the case of a header, the header name, colon, and the first item. In the case of a header, the header name, colon, and the first
space after the colon are all omitted. If the article is specified by space after the colon are all omitted.
message-id, the article number is given as "0".
If the article is specified by message-id (the first form of the
command), the article number MUST be replaced with zero, except that
if there is a current selected group and the article is present in
that group, the server MAY use that article number (see the ARTICLE
command (Section 6.2.1) and STAT examples (Section 6.2.4.3) for more
details). In the other two forms of the command, the article number
MUST be returned.
Header contents are modified as follows: all CRLF pairs are removed, Header contents are modified as follows: all CRLF pairs are removed,
and then each TAB is replaced with a single space (note that this is and then each TAB is replaced with a single space (note that this is
the same transformation as is performed by the OVER extension the same transformation as is performed by the OVER extension
(Section 8.5.1.2), and the same comment concerning NUL, CR, and LF (Section 8.5.1.2), and the same comment concerning NUL, CR, and LF
applies). applies).
The header content is in all cases taken from the article. This means The header content is in all cases taken from the article. This means
that, for example, a request for the header "Lines" returns the that, for example, a request for the header "Lines" returns the
contents of the "Lines" header of the specified articles, if any, not contents of the "Lines" header of the specified articles, if any, not
skipping to change at page 83, line 11 skipping to change at page 84, line 11
[S] . [S] .
Note how :x-article-number does not appear in the last set of output. Note how :x-article-number does not appear in the last set of output.
9. Augmented BNF Syntax for NNTP 9. Augmented BNF Syntax for NNTP
Each of the following sections describes the syntax of a major Each of the following sections describes the syntax of a major
element of NNTP. This syntax extends and refines the descriptions element of NNTP. This syntax extends and refines the descriptions
elsewhere in this specification, and should be given precedence when elsewhere in this specification, and should be given precedence when
resolving apparent conflicts. Note that ABNF [RFC2234] strings are resolving apparent conflicts. Note that ABNF [RFC2234] strings are
case insensitive. Non-terminals used in several places are defined in case-insensitive. Non-terminals used in several places are defined in
a separate section at the end. a separate section at the end.
9.1 Commands 9.1 Commands
This syntax defines the non-terminal "command-line", which represents This syntax defines the non-terminal "command-line", which represents
what is sent from the client to the server. what is sent from the client to the server.
command-line = command EOL command-line = command EOL
command = article-command / command = article-command /
body-command / body-command /
skipping to change at page 85, line 24 skipping to change at page 86, line 24
content-text = (".." / B-NONDOT) *B-CHAR content-text = (".." / B-NONDOT) *B-CHAR
simple-response = 3DIGIT arguments [ SP trailing-comment ] CRLF simple-response = 3DIGIT arguments [ SP trailing-comment ] CRLF
trailing-comment = *U-CHAR trailing-comment = *U-CHAR
arguments = *(SP argument) ; How many depends on the response arguments = *(SP argument) ; How many depends on the response
argument = 1*A-CHAR argument = 1*A-CHAR
9.3 Multi-line response contents 9.3 Multi-line response contents
This syntax defines the content of the various multi-line responses, This syntax defines the content of the various multi-line responses,
in each case after any "dot-stuffing" has been undone. in each case after any "byte-stuffing" has been undone.
multiline-response-content: article-response / multiline-response-content: article-response /
body-response / body-response /
hdr-response / hdr-response /
head-response / head-response /
help-response / help-response /
list-active-response / list-active-response /
list-active-times-response / list-active-times-response /
list-distrib-pats-response / list-distrib-pats-response /
list-distributions-response / list-distributions-response /
skipping to change at page 100, line 35 skipping to change at page 101, line 35
articles, is to extract the message-id from the contents of a header articles, is to extract the message-id from the contents of a header
with name "Message-ID". This may not be as simple as copying the with name "Message-ID". This may not be as simple as copying the
entire header contents; it may be necessary to strip off comments and entire header contents; it may be necessary to strip off comments and
undo quoting, or to reduce "equivalent" message-ids to a canonical undo quoting, or to reduce "equivalent" message-ids to a canonical
form. form.
If an article is obtained through the IHAVE command, there will be a If an article is obtained through the IHAVE command, there will be a
message-id provided with the command. The server MAY either use it or message-id provided with the command. The server MAY either use it or
determine one from the article contents. However, whichever it does determine one from the article contents. However, whichever it does
it SHOULD ensure that, if the IHAVE command is repeated with the same it SHOULD ensure that, if the IHAVE command is repeated with the same
argument and article, it will be recognised as a duplicate. argument and article, it will be recognized as a duplicate.
If an article does not contain a message-id that the server can If an article does not contain a message-id that the server can
identify, it MUST synthesise one. This could, for example, be a identify, it MUST synthesize one. This could, for example, be a
simple sequence number or based on the date and time that the article simple sequence number or based on the date and time that the article
arrived. When handling email or Netnews articles, a Message-ID header arrived. When handling email or Netnews articles, a Message-ID header
SHOULD be added to ensure global consistency and uniqueness. SHOULD be added to ensure global consistency and uniqueness.
B.3 Article posting B.3 Article posting
As far as NNTP is concerned, the POST and IHAVE commands provide the As far as NNTP is concerned, the POST and IHAVE commands provide the
same basic facilities in a slightly different way. However they have same basic facilities in a slightly different way. However they have
rather different intentions. rather different intentions.
skipping to change at page 101, line 22 skipping to change at page 102, line 22
it to the right form for onward distribution. It is often the case it to the right form for onward distribution. It is often the case
that this is done by a separate piece of software on the server that this is done by a separate piece of software on the server
installation. If so, the NNTP server SHOULD pass the incoming article installation. If so, the NNTP server SHOULD pass the incoming article
to that software unaltered, making no attempt to filter characters, to that software unaltered, making no attempt to filter characters,
fold or limit lines, or otherwise process the incoming text. fold or limit lines, or otherwise process the incoming text.
The POST command can fail in various ways and clients should be The POST command can fail in various ways and clients should be
prepared to re-send an article. When doing so, however, it is often prepared to re-send an article. When doing so, however, it is often
important to ensure - as far as possible - that the same message-id important to ensure - as far as possible - that the same message-id
is allocated to both attempts so that the server, or other servers, is allocated to both attempts so that the server, or other servers,
can recognise the two articles as being duplicates. In the case of can recognize the two articles as being duplicates. In the case of
email or Netnews articles, therefore, the posted article SHOULD email or Netnews articles, therefore, the posted article SHOULD
contain a header with name "Message-ID" and the contents of this contain a header with name "Message-ID" and the contents of this
header SHOULD be identical on each attempt. The server SHOULD ensure header SHOULD be identical on each attempt. The server SHOULD ensure
that two POSTed articles with the same contents for this header are that two POSTed articles with the same contents for this header are
recognised as identical and the same message-id allocated, whether or recognized as identical and the same message-id allocated, whether or
not those contents are suitable for use as the message-id. not those contents are suitable for use as the message-id.
Appendix C. Summary of Response Codes Appendix C. Summary of Response Codes
This section contains a list of every response code defined in this This section contains a list of every response code defined in this
document, whether it is multi-line, which commands can generate it, document, whether it is multi-line, which commands can generate it,
what arguments it has, and what its meaning is. what arguments it has, and what its meaning is.
Response code 100 (multi-line) Response code 100 (multi-line)
Generated by: HELP Generated by: HELP
 End of changes. 

This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/