summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3977.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3977.txt')
-rw-r--r--doc/rfc/rfc3977.txt7003
1 files changed, 7003 insertions, 0 deletions
diff --git a/doc/rfc/rfc3977.txt b/doc/rfc/rfc3977.txt
new file mode 100644
index 0000000..5eb008b
--- /dev/null
+++ b/doc/rfc/rfc3977.txt
@@ -0,0 +1,7003 @@
+
+
+
+
+
+
+Network Working Group C. Feather
+Request for Comments: 3977 THUS plc
+Obsoletes: 977 October 2006
+Updates: 2980
+Category: Standards Track
+
+
+ Network News Transfer Protocol (NNTP)
+
+Status of This Memo
+
+ This document specifies an Internet standards track protocol for the
+ Internet community, and requests discussion and suggestions for
+ improvements. Please refer to the current edition of the "Internet
+ Official Protocol Standards" (STD 1) for the standardization state
+ and status of this protocol. Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2006).
+
+Abstract
+
+ The Network News Transfer Protocol (NNTP) has been in use in the
+ 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, and officially updates the protocol specification. It
+ clarifies some vagueness in RFC 977, includes some new base
+ functionality, and provides a specific mechanism to add standardized
+ extensions to NNTP.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 1.1. Author's Note . . . . . . . . . . . . . . . . . . . . . . 4
+ 2. Notation . . . . . . . . . . . . . . . . . . . . . . . . . . 5
+ 3. Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . 6
+ 3.1. Commands and Responses . . . . . . . . . . . . . . . . . 6
+ 3.1.1. Multi-line Data Blocks . . . . . . . . . . . . . . . . 8
+ 3.2. Response Codes . . . . . . . . . . . . . . . . . . . . . 9
+ 3.2.1. Generic Response Codes . . . . . . . . . . . . . . . 10
+ 3.2.1.1. Examples . . . . . . . . . . . . . . . . . . . . 12
+ 3.3. Capabilities and Extensions . . . . . . . . . . . . . . . 14
+ 3.3.1. Capability Descriptions . . . . . . . . . . . . . . . 14
+ 3.3.2. Standard Capabilities . . . . . . . . . . . . . . . . 15
+ 3.3.3. Extensions . . . . . . . . . . . . . . . . . . . . . 16
+ 3.3.4. Initial IANA Register . . . . . . . . . . . . . . . . 18
+ 3.4. Mandatory and Optional Commands . . . . . . . . . . . . . 20
+
+
+
+Feather Standards Track [Page 1]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ 3.4.1. Reading and Transit Servers . . . . . . . . . . . . . 21
+ 3.4.2. Mode Switching . . . . . . . . . . . . . . . . . . . 21
+ 3.5. Pipelining . . . . . . . . . . . . . . . . . . . . . . . 22
+ 3.5.1. Examples . . . . . . . . . . . . . . . . . . . . . . 23
+ 3.6. Articles . . . . . . . . . . . . . . . . . . . . . . . . 24
+ 4. The WILDMAT Format . . . . . . . . . . . . . . . . . . . . . 25
+ 4.1. Wildmat Syntax . . . . . . . . . . . . . . . . . . . . . 26
+ 4.2. Wildmat Semantics . . . . . . . . . . . . . . . . . . . . 26
+ 4.3. Extensions . . . . . . . . . . . . . . . . . . . . . . . 27
+ 4.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 27
+ 5. Session Administration Commands . . . . . . . . . . . . . . . 28
+ 5.1. Initial Connection . . . . . . . . . . . . . . . . . . . 28
+ 5.2. CAPABILITIES . . . . . . . . . . . . . . . . . . . . . . 29
+ 5.3. MODE READER . . . . . . . . . . . . . . . . . . . . . . . 32
+ 5.4. QUIT . . . . . . . . . . . . . . . . . . . . . . . . . . 34
+ 6. Article Posting and Retrieval . . . . . . . . . . . . . . . . 35
+ 6.1. Group and Article Selection . . . . . . . . . . . . . . . 36
+ 6.1.1. GROUP . . . . . . . . . . . . . . . . . . . . . . . . 36
+ 6.1.2. LISTGROUP . . . . . . . . . . . . . . . . . . . . . . 39
+ 6.1.3. LAST . . . . . . . . . . . . . . . . . . . . . . . . 42
+ 6.1.4. NEXT . . . . . . . . . . . . . . . . . . . . . . . . 44
+ 6.2. Retrieval of Articles and Article Sections . . . . . . . 45
+ 6.2.1. ARTICLE . . . . . . . . . . . . . . . . . . . . . . . 46
+ 6.2.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . 49
+ 6.2.3. BODY . . . . . . . . . . . . . . . . . . . . . . . . 51
+ 6.2.4. STAT . . . . . . . . . . . . . . . . . . . . . . . . 53
+ 6.3. Article Posting . . . . . . . . . . . . . . . . . . . . . 56
+ 6.3.1. POST . . . . . . . . . . . . . . . . . . . . . . . . 56
+ 6.3.2. IHAVE . . . . . . . . . . . . . . . . . . . . . . . . 58
+ 7. Information Commands . . . . . . . . . . . . . . . . . . . . 61
+ 7.1. DATE . . . . . . . . . . . . . . . . . . . . . . . . . . 61
+ 7.2. HELP . . . . . . . . . . . . . . . . . . . . . . . . . . 62
+ 7.3. NEWGROUPS . . . . . . . . . . . . . . . . . . . . . . . . 63
+ 7.4. NEWNEWS . . . . . . . . . . . . . . . . . . . . . . . . . 64
+ 7.5. Time . . . . . . . . . . . . . . . . . . . . . . . . . . 65
+ 7.5.1. Examples . . . . . . . . . . . . . . . . . . . . . . 66
+ 7.6. The LIST Commands . . . . . . . . . . . . . . . . . . . . 66
+ 7.6.1. LIST . . . . . . . . . . . . . . . . . . . . . . . . 67
+ 7.6.2. Standard LIST Keywords . . . . . . . . . . . . . . . 69
+ 7.6.3. LIST ACTIVE . . . . . . . . . . . . . . . . . . . . . 70
+ 7.6.4. LIST ACTIVE.TIMES . . . . . . . . . . . . . . . . . . 71
+ 7.6.5. LIST DISTRIB.PATS . . . . . . . . . . . . . . . . . . 72
+ 7.6.6. LIST NEWSGROUPS . . . . . . . . . . . . . . . . . . . 73
+ 8. Article Field Access Commands . . . . . . . . . . . . . . . . 73
+ 8.1. Article Metadata . . . . . . . . . . . . . . . . . . . . 74
+ 8.1.1. The :bytes Metadata Item . . . . . . . . . . . . . . 74
+ 8.1.2. The :lines Metadata Item . . . . . . . . . . . . . . 75
+ 8.2. Database Consistency . . . . . . . . . . . . . . . . . . 75
+
+
+
+Feather Standards Track [Page 2]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ 8.3. OVER . . . . . . . . . . . . . . . . . . . . . . . . . . 76
+ 8.4. LIST OVERVIEW.FMT . . . . . . . . . . . . . . . . . . . . 81
+ 8.5. HDR . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
+ 8.6. LIST HEADERS . . . . . . . . . . . . . . . . . . . . . . 87
+ 9. Augmented BNF Syntax for NNTP . . . . . . . . . . . . . . . . 90
+ 9.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 90
+ 9.2. Commands . . . . . . . . . . . . . . . . . . . . . . . . 92
+ 9.3. Command Continuation . . . . . . . . . . . . . . . . . . 93
+ 9.4. Responses . . . . . . . . . . . . . . . . . . . . . . . . 93
+ 9.4.1. Generic Responses . . . . . . . . . . . . . . . . . . 93
+ 9.4.2. Initial Response Line Contents . . . . . . . . . . . 94
+ 9.4.3. Multi-line Response Contents . . . . . . . . . . . . 94
+ 9.5. Capability Lines . . . . . . . . . . . . . . . . . . . . 95
+ 9.6. LIST Variants . . . . . . . . . . . . . . . . . . . . . . 96
+ 9.7. Articles . . . . . . . . . . . . . . . . . . . . . . . . 97
+ 9.8. General Non-terminals . . . . . . . . . . . . . . . . . . 97
+ 9.9. Extensions and Validation . . . . . . . . . . . . . . . . 99
+ 10. Internationalisation Considerations . . . . . . . . . . . . .100
+ 10.1. Introduction and Historical Situation . . . . . . . . . .100
+ 10.2. This Specification . . . . . . . . . . . . . . . . . . .101
+ 10.3. Outstanding Issues . . . . . . . . . . . . . . . . . . .102
+ 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . .103
+ 12. Security Considerations . . . . . . . . . . . . . . . . . . .103
+ 12.1. Personal and Proprietary Information . . . . . . . . . .104
+ 12.2. Abuse of Server Log Information . . . . . . . . . . . . .104
+ 12.3. Weak Authentication and Access Control . . . . . . . . .104
+ 12.4. DNS Spoofing . . . . . . . . . . . . . . . . . . . . . .104
+ 12.5. UTF-8 Issues . . . . . . . . . . . . . . . . . . . . . .105
+ 12.6. Caching of Capability Lists . . . . . . . . . . . . . . .106
+ 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . .107
+ 14. References . . . . . . . . . . . . . . . . . . . . . . . . .110
+ 14.1. Normative References . . . . . . . . . . . . . . . . . .110
+ 14.2. Informative References . . . . . . . . . . . . . . . . .110
+ A. Interaction with Other Specifications . . . . . . . . . . . .112
+ A.1. Header Folding . . . . . . . . . . . . . . . . . . . . .112
+ A.2. Message-IDs . . . . . . . . . . . . . . . . . . . . . . .112
+ A.3. Article Posting . . . . . . . . . . . . . . . . . . . . .114
+ B. Summary of Commands . . . . . . . . . . . . . . . . . . . . .115
+ C. Summary of Response Codes . . . . . . . . . . . . . . . . . .117
+ D. Changes from RFC 977 . . . . . . . . . . . . . . . . . . . .121
+
+1. Introduction
+
+ This document specifies the Network News Transfer Protocol (NNTP),
+ which is used for the distribution, inquiry, retrieval, and posting
+ of Netnews articles using a reliable stream-based mechanism. For
+ news-reading clients, NNTP enables retrieval of news articles that
+
+
+
+
+Feather Standards Track [Page 3]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ are stored in a central database, giving subscribers the ability to
+ select only those articles they wish to read.
+
+ The Netnews model provides for indexing, cross-referencing, and
+ expiration of aged messages. NNTP is designed for efficient
+ transmission of Netnews articles over a reliable full duplex
+ communication channel.
+
+ Although the protocol specification in this document is largely
+ compatible with the version specified in RFC 977 [RFC977], a number
+ of changes are summarised in Appendix D. In particular:
+
+ o the default character set is changed from US-ASCII [ANSI1986] to
+ UTF-8 [RFC3629] (note that US-ASCII is a subset of UTF-8);
+
+ o a number of commands that were optional in RFC 977 or that have
+ been taken from RFC 2980 [RFC2980] are now mandatory; and
+
+ o a CAPABILITIES command has been added to allow clients to
+ determine what functionality is available from a server.
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in RFC 2119 [RFC2119].
+
+ An implementation is not compliant if it fails to satisfy one or more
+ of the MUST requirements for this protocol. An implementation that
+ satisfies all the MUST and all the SHOULD requirements for its
+ protocols is said to be "unconditionally compliant"; one that
+ satisfies all the MUST requirements but not all the SHOULD
+ requirements for NNTP is said to be "conditionally compliant".
+
+ For the remainder of this document, the terms "client" and "client
+ host" refer to a host making use of the NNTP service, while the terms
+ "server" and "server host" refer to a host that offers the NNTP
+ service.
+
+1.1. Author's Note
+
+ This document is written in XML using an NNTP-specific DTD. Custom
+ software is used to convert this to RFC 2629 [RFC2629] format, and
+ then the public "xml2rfc" package to further reduce this to text,
+ nroff source, and HTML.
+
+ No perl was used in producing this document.
+
+
+
+
+
+
+Feather Standards Track [Page 4]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+2. Notation
+
+ The following notational conventions are used in this document.
+
+ UPPERCASE indicates literal text to be included in the
+ command.
+
+ lowercase indicates a token described elsewhere.
+
+ [brackets] indicate that the enclosed material is optional.
+
+ elliptical indicates that the argument may be repeated any
+ ... marks number of times (it must occur at least once).
+
+ vertical|bar indicates a choice of two mutually exclusive
+ arguments (exactly one must be provided).
+
+ 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.6,
+ including the angle brackets.
+
+ 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
+ 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 specified by this document) or otherwise MUST treat it as a
+ syntax error.
+
+ Responses for each command will be described in tables listing the
+ required format of a response followed by the meaning that should be
+ ascribed to that response.
+
+ The terms "NUL", "TAB", "LF", "CR, and "space" refer to the octets
+ %x00, %x09, %x0A, %x0D, and %x20, respectively (that is, the octets
+ with those codes in US-ASCII [ANSI1986] and thus in UTF-8 [RFC3629]).
+ The term "CRLF" or "CRLF pair" means the sequence CR immediately
+ followed by LF (that is, %x0D.0A). A "printable US-ASCII character"
+ is an octet in the range %x21-7E. Quoted characters refer to the
+ octets with those codes in US-ASCII (so "." and "<" refer to %x2E and
+ %x3C) and will always be printable US-ASCII characters; similarly,
+ "digit" refers to the octets %x30-39.
+
+ A "keyword" MUST consist only of US-ASCII letters, digits, and the
+ characters dot (".") and dash ("-") and MUST begin with a letter.
+ Keywords MUST be at least three characters in length.
+
+
+
+
+
+
+Feather Standards Track [Page 5]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Examples in this document are not normative but serve to illustrate
+ usages, arguments, and responses. In the examples, a "[C]" will be
+ used to represent the client host and an "[S]" will be used to
+ represent the server host. Most of the examples do not rely on a
+ particular server state. In some cases, however, they do assume that
+ the currently selected newsgroup (see the GROUP command,
+ Section 6.1.1) is invalid; when so, this is indicated at the start of
+ the example. Examples may use commands or other keywords not defined
+ in this specification (such as an XENCRYPT command). These will be
+ used to illustrate some point and do not imply that any such command
+ is defined elsewhere or needs to exist in any particular
+ implementation.
+
+ Terms that might be read as specifying details of a client or server
+ implementation, such as "database", are used simply to ease
+ description. Provided that implementations conform to the protocol
+ and format specifications in this document, no specific technique is
+ mandated.
+
+3. Basic Concepts
+
+3.1. Commands and Responses
+
+ NNTP operates over any reliable bi-directional 8-bit-wide data stream
+ channel. When the connection is established, the NNTP server host
+ MUST send a greeting. The client host and server host then exchange
+ commands and responses (respectively) until the connection is closed
+ or aborted. If the connection used is TCP, then the server host
+ starts the NNTP service by listening on a TCP port. When a client
+ host wishes to make use of the service, it MUST establish a TCP
+ connection with the server host by connecting to that host on the
+ same port on which the server is listening.
+
+ The character set for all NNTP commands is UTF-8 [RFC3629]. Commands
+ in NNTP MUST consist of a keyword, which MAY be followed by one or
+ more arguments. A CRLF pair MUST terminate all commands. Multiple
+ commands MUST NOT be on the same line. Unless otherwise noted
+ elsewhere in this document, arguments SHOULD consist of printable US-
+ ASCII characters. Keywords and arguments MUST each be separated by
+ one or more space or TAB characters. Command lines MUST NOT exceed
+ 512 octets, which includes the terminating CRLF pair. The arguments
+ MUST NOT exceed 497 octets. A server MAY relax these limits for
+ commands defined in an extension.
+
+ Where this specification permits UTF-8 characters outside the range
+ of U+0000 to U+007F, implementations MUST NOT use the Byte Order Mark
+ (U+FEFF, encoding %xEF.BB.BF) and MUST use the Word Joiner (U+2060,
+ encoding %xE2.91.A0) for the meaning Zero Width No-Break Space in
+
+
+
+Feather Standards Track [Page 6]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ command lines and the initial lines of responses. Implementations
+ SHOULD apply these same principles throughout.
+
+ The term "character" means a single Unicode code point.
+ Implementations are not required to carry out Unicode normalisation.
+ Thus, U+0084 (A-dieresis) is one character, while U+0041 U+0308 (A
+ composed with dieresis) is two; the two need not be treated as
+ equivalent.
+
+ Commands may have variants; if so, they use a second keyword
+ immediately after the first to indicate which variant is required.
+ The only such commands in this specification are LIST and MODE. Note
+ that such variants are sometimes referred to as if they were commands
+ in their own right: "the LIST ACTIVE" command should be read as
+ shorthand for "the ACTIVE variant of the LIST command".
+
+ Keywords are case insensitive; the case of keywords for commands MUST
+ be ignored by the server. Command and response arguments are case or
+ language specific only when stated, either in this document or in
+ other relevant specifications.
+
+ In some cases, a command involves more data than just a single line.
+ The further data may be sent either immediately after the command
+ line (there are no instances of this in this specification, but there
+ are in extensions such as [NNTP-STREAM]) or following a request from
+ the server (indicated by a 3xx response).
+
+ Each response MUST start with a three-digit response code that is
+ sufficient to distinguish all responses. Certain valid responses are
+ defined to be multi-line; for all others, the response is contained
+ in a single line. The initial line of the response MUST NOT exceed
+ 512 octets, which includes the response code and the terminating CRLF
+ pair; an extension MAY specify a greater maximum for commands that it
+ defines, but not for any other command. Single-line responses
+ consist of an initial line only. Multi-line responses consist of an
+ initial line followed by a multi-line data block.
+
+ An NNTP server MAY have an inactivity autologout timer. Such a timer
+ SHOULD be of at least three minutes' duration, with the exception
+ that there MAY be a shorter limit on how long the server is willing
+ to wait for the first command from the client. The receipt of any
+ command from the client during the timer interval SHOULD suffice to
+ reset the autologout timer. Similarly, the receipt of any
+ significant amount of data from a client that is sending a multi-line
+ data block (such as during a POST or IHAVE command) SHOULD suffice to
+ reset the autologout timer. When the timer expires, the server
+ SHOULD close the connection without sending any response to the
+ client.
+
+
+
+Feather Standards Track [Page 7]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+3.1.1. Multi-line Data Blocks
+
+ A multi-line data block is used in certain commands and responses.
+ It MUST adhere to the following rules:
+
+ 1. The block consists of a sequence of zero or more "lines", each
+ being a stream of octets ending with a CRLF pair. Apart from
+ those line endings, the stream MUST NOT include the octets NUL,
+ LF, or CR.
+
+ 2. In a multi-line response, the block immediately follows the CRLF
+ at the end of the initial line of the response. When used in any
+ other context, the specific command will define when the block is
+ sent.
+
+ 3. If any line of the data block begins with the "termination octet"
+ ("." or %x2E), that line MUST be "dot-stuffed" by prepending an
+ additional termination octet to that line of the block.
+
+ 4. The lines of the block MUST be followed by a terminating line
+ consisting of a single termination octet followed by a CRLF pair
+ in the normal way. Thus, unless it is empty, a multi-line block
+ is always terminated with the five octets CRLF "." CRLF
+ (%x0D.0A.2E.0D.0A).
+
+ 5. When a multi-line block is interpreted, the "dot-stuffing" MUST
+ be undone; i.e., the recipient MUST ensure that, in any line
+ beginning with the termination octet followed by octets other
+ than a CRLF pair, that initial termination octet is disregarded.
+
+ 6. Likewise, the terminating line ("." CRLF or %x2E.0D.0A) MUST NOT
+ be considered part of the multi-line block; i.e., the recipient
+ MUST ensure that any line beginning with the termination octet
+ followed immediately by a CRLF pair is disregarded. (The first
+ CRLF pair of the terminating CRLF "." CRLF of a non-empty block
+ is, of course, part of the last line of the block.)
+
+ Note that texts using an encoding (such as UTF-16 or UTF-32) that may
+ contain the octets NUL, LF, or CR other than a CRLF pair cannot be
+ reliably conveyed in the above format (that is, they violate the MUST
+ requirement above). However, except when stated otherwise, this
+ specification does not require the content to be UTF-8, and therefore
+ (subject to that same requirement) it MAY include octets above and
+ below 128 mixed arbitrarily.
+
+ This document does not place any limit on the length of a line in a
+ multi-line block. However, the standards that define the format of
+ articles may do so.
+
+
+
+Feather Standards Track [Page 8]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+3.2. Response Codes
+
+ Each response MUST begin with a three-digit status indicator. These
+ are status reports from the server and indicate the response to the
+ last command received from the client.
+
+ The first digit of the response broadly indicates the success,
+ failure, or progress of the previous command:
+
+ 1xx - Informative message
+ 2xx - Command completed OK
+ 3xx - Command OK so far; send the rest of it
+ 4xx - Command was syntactically correct but failed for some reason
+ 5xx - Command unknown, unsupported, unavailable, or syntax error
+
+ The next digit in the code indicates the function response category:
+
+ x0x - Connection, setup, and miscellaneous messages
+ x1x - Newsgroup selection
+ x2x - Article selection
+ x3x - Distribution functions
+ x4x - Posting
+ x8x - Reserved for authentication and privacy extensions
+ x9x - Reserved for private use (non-standard extensions)
+
+ Certain responses contain arguments such as numbers and names in
+ addition to the status indicator. In those cases, to simplify
+ interpretation by the client, the number and type of such arguments
+ is fixed for each response code, as is whether the code is
+ single-line or multi-line. Any extension MUST follow this principle
+ as well. Note that, for historical reasons, the 211 response code is
+ an exception to this in that the response may be single-line or
+ multi-line depending on the command (GROUP or LISTGROUP) that
+ generated it. In all other cases, the client MUST only use the
+ status indicator itself to determine the nature of the response. The
+ exact response codes that can be returned by any given command are
+ detailed in the description of that command.
+
+ Arguments MUST be separated from the numeric status indicator and
+ from each other by a single space. All numeric arguments MUST be in
+ base 10 (decimal) format and MAY have leading zeros. String
+ arguments MUST contain at least one character and MUST NOT contain
+ TAB, LF, CR, or space. The server MAY add any text after the
+ response code or last argument, as appropriate, and the client MUST
+ NOT make decisions based on this text. Such text MUST be separated
+ from the numeric status indicator or the last argument by at least
+ one space.
+
+
+
+
+Feather Standards Track [Page 9]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ The server MUST respond to any command with the appropriate generic
+ response (given in Section 3.2.1) if it represents the situation.
+ Otherwise, each recognized command MUST return one of the response
+ codes specifically listed in its description or in an extension. A
+ server MAY provide extensions to this specification, including new
+ commands, new variants or features of existing commands, and other
+ ways of changing the internal state of the server. However, the
+ server MUST NOT produce any other responses to a client that does not
+ invoke any of the additional features. (Therefore, a client that
+ restricts itself to this specification will only receive the
+ responses that are listed.)
+
+ If a client receives an unexpected response, it SHOULD use the first
+ digit of the response to determine the result. For example, an
+ unexpected 2xx should be taken as success, and an unexpected 4xx or
+ 5xx as failure.
+
+ Response codes not specified in this document MAY be used for any
+ installation-specific additional commands also not specified. These
+ SHOULD be chosen to fit the pattern of x9x specified above.
+
+ Neither this document nor any registered extension (see
+ Section 3.3.3) will specify any response codes of the x9x pattern.
+ (Implementers of extensions are accordingly cautioned not to use such
+ responses for extensions that may subsequently be submitted for
+ registration.)
+
+3.2.1. Generic Response Codes
+
+ The server MUST respond to any command with the appropriate one of
+ the following generic responses if it represents the situation.
+
+ If the command is not recognized, or if it is an optional command
+ that is not implemented by the server, the response code 500 MUST be
+ returned.
+
+ If there is a syntax error in the arguments of a recognized command,
+ including the case where more arguments are provided than the command
+ specifies or the command line is longer than the server accepts, the
+ response code 501 MUST be returned. The line MUST NOT be truncated
+ or split and then interpreted. Note that where a command has
+ variants depending on a second keyword (e.g., LIST ACTIVE and LIST
+ NEWSGROUPS), 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 command itself is not implemented.
+
+ If an argument is required to be a base64-encoded string [RFC4648]
+ (there are no such arguments in this specification, but there may be
+
+
+
+Feather Standards Track [Page 10]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ in extensions) and is not validly encoded, the response code 504 MUST
+ be returned.
+
+ 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
+ missing or a necessary service could not be contacted), the response
+ code 403 MUST be returned. If the server recognizes the command but
+ does not provide an optional feature (for example, because it does
+ not store the required information), or if it only handles a subset
+ of legitimate cases (see the HDR command, Section 8.5, for an
+ example), the response code 503 MUST be returned.
+
+ If the client is not authorized to use the specified facility when
+ the server is in its current state, then the appropriate one of the
+ following response codes MUST be used.
+
+ 502: It is necessary to terminate the connection and to start a new
+ one with the appropriate authority before the command can be used.
+ Historically, some mode-switching servers (see Section 3.4.1) used
+ this response to indicate that this command will become available
+ after the MODE READER command (Section 5.3) is used, but this
+ usage does not conform to this specification and MUST NOT be used.
+ Note that the server MUST NOT close the connection immediately
+ after a 502 response except at the initial connection
+ (Section 5.1) and with the MODE READER command.
+
+ 480: The client must authenticate itself to the server (that is, it
+ must provide information as to the identity of the client) before
+ the facility can be used on this connection. This will involve
+ the use of an authentication extension such as [NNTP-AUTH].
+
+ 483: The client must negotiate appropriate privacy protection on the
+ connection. This will involve the use of a privacy extension such
+ as [NNTP-TLS].
+
+ 401: The client must change the state of the connection in some other
+ manner. The first argument of the response MUST be the capability
+ label (see Section 5.2) of the facility that provides the
+ necessary mechanism (usually an extension, which may be a private
+ extension). The server MUST NOT use this response code except as
+ specified by the definition of the capability in question.
+
+ If the server has to terminate the connection for some reason, it
+ MUST give a 400 response code to the next command and then
+ immediately close the connection. Following a 400 response, clients
+ SHOULD NOT simply reconnect immediately and retry the same actions.
+ Rather, a client SHOULD either use an exponentially increasing delay
+ between retries (e.g., double the waiting time after each 400
+
+
+
+Feather Standards Track [Page 11]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ response) or present any associated text to the user for them to
+ decide whether and when to retry.
+
+ The client MUST be prepared to receive any of these responses for any
+ command (except, of course, that the server MUST NOT generate a 500
+ response code for mandatory commands).
+
+3.2.1.1. Examples
+
+ Example of an unknown command:
+
+ [C] MAIL
+ [S] 500 Unknown command
+
+ Example of an unsupported command:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] NEWNEWS
+ [S] LIST ACTIVE NEWSGROUPS
+ [S] .
+ [C] OVER
+ [S] 500 Unknown command
+
+ Example of an unsupported variant:
+
+ [C] MODE POSTER
+ [S] 501 Unknown MODE option
+
+ Example of a syntax error:
+
+ [C] ARTICLE a.message.id@no.angle.brackets
+ [S] 501 Syntax error
+
+ Example of an overlong command line:
+
+ [C] HEAD 53 54 55
+ [S] 501 Too many arguments
+
+ Example of a bad wildmat:
+
+ [C] LIST ACTIVE u[ks].*
+ [S] 501 Syntax error
+
+
+
+
+
+
+Feather Standards Track [Page 12]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of a base64-encoding error (the second argument is meant to
+ be base64 encoded):
+
+ [C] XENCRYPT RSA abcd=efg
+ [S] 504 Base64 encoding error
+
+ Example of an attempt to access a facility not available to this
+ connection:
+
+ [C] MODE READER
+ [S] 200 Reader mode, posting permitted
+ [C] IHAVE <i.am.an.article.you.will.want@example.com>
+ [S] 500 Permission denied
+
+ Example of an attempt to access a facility requiring authentication:
+
+ [C] GROUP secret.group
+ [S] 480 Permission denied
+
+ Example of a successful attempt following such authentication:
+
+ [C] XSECRET fred flintstone
+ [S] 290 Password for fred accepted
+ [C] GROUP secret.group
+ [S] 211 5 1 20 secret.group selected
+
+ Example of an attempt to access a facility requiring privacy:
+
+ [C] GROUP secret.group
+ [S] 483 Secure connection required
+ [C] XENCRYPT
+ [Client and server negotiate encryption on the link]
+ [S] 283 Encrypted link established
+ [C] GROUP secret.group
+ [S] 211 5 1 20 secret.group selected
+
+ Example of a need to change mode before a facility is used:
+
+ [C] GROUP binary.group
+ [S] 401 XHOST Not on this virtual host
+ [C] XHOST binary.news.example.org
+ [S] 290 binary.news.example.org virtual host selected
+ [C] GROUP binary.group
+ [S] 211 5 1 77 binary.group selected
+
+
+
+
+
+
+
+Feather Standards Track [Page 13]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of a temporary failure:
+
+ [C] GROUP archive.local
+ [S] 403 Archive server temporarily offline
+
+ Example of the server needing to close down immediately:
+
+ [C] ARTICLE 123
+ [S] 400 Power supply failed, running on UPS
+ [Server closes connection.]
+
+3.3. Capabilities and Extensions
+
+ Not all NNTP servers provide exactly the same facilities, both
+ because this specification allows variation and because servers may
+ provide extensions. A set of facilities that are related are called
+ a "capability". This specification provides a way to determine what
+ capabilities are available, includes a list of standard capabilities,
+ and includes a mechanism (the extension mechanism) for defining new
+ capabilities.
+
+3.3.1. Capability Descriptions
+
+ A client can determine the available capabilities of the server by
+ using the CAPABILITIES command (Section 5.2). This returns a
+ capability list, which is a list of capability lines. Each line
+ describes one available capability.
+
+ Each capability line consists of one or more tokens, which MUST be
+ separated by one or more space or TAB characters. A token is a
+ string of 1 or more printable UTF-8 characters (that is, either
+ printable US-ASCII characters or any UTF-8 sequence outside the US-
+ ASCII range, but not space or TAB). Unless stated otherwise, tokens
+ are case insensitive. Each capability line consists of the
+ following:
+
+ o The capability label, which is a keyword indicating the
+ capability. A capability label may be defined by this
+ specification or a successor, or by an extension.
+
+ o The label is then followed by zero or more tokens, which are
+ arguments of the capability. The form and meaning of these tokens
+ is specific to each capability.
+
+ The server MUST ensure that the capability list accurately reflects
+ the capabilities (including extensions) currently available. If a
+ capability is only available with the server in a certain state (for
+ example, only after authentication), the list MUST only include the
+
+
+
+Feather Standards Track [Page 14]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ capability label when the server is in that state. Similarly, if
+ only some of the commands in an extension will be available, or if
+ the behaviour of the extension will change in some other manner,
+ according to the state of the server, this MUST be indicated by
+ different arguments in the capability line.
+
+ Note that a capability line can only begin with a letter. Lines
+ beginning with other characters are reserved for future versions of
+ this specification. In order to interoperate with such versions,
+ clients MUST be prepared to receive lines beginning with other
+ characters and MUST ignore any they do not understand.
+
+3.3.2. Standard Capabilities
+
+ The following capabilities are defined by this specification.
+
+ VERSION
+ This capability MUST be advertised by all servers and MUST be the
+ first capability in the capability list; it indicates the
+ version(s) of NNTP that the server supports. There must be at
+ least one argument; each argument is a decimal number and MUST NOT
+ have a leading zero. Version numbers are assigned only in RFCs
+ that update or replace this specification; servers MUST NOT create
+ their own version numbers.
+
+ The version number of this specification is 2.
+
+ READER
+ This capability indicates that the server implements the various
+ commands useful for reading clients.
+
+ IHAVE
+ This capability indicates that the server implements the IHAVE
+ command.
+
+ POST
+ This capability indicates that the server implements the POST
+ command.
+
+ NEWNEWS
+ This capability indicates that the server implements the NEWNEWS
+ command.
+
+ HDR
+ This capability indicates that the server implements the header
+ access commands (HDR and LIST HEADERS).
+
+
+
+
+
+Feather Standards Track [Page 15]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ OVER
+ This capability indicates that the server implements the overview
+ access commands (OVER and LIST OVERVIEW.FMT). If and only if the
+ server supports the message-id form of the OVER command, there
+ must be a single argument MSGID.
+
+ LIST
+ This capability indicates that the server implements at least one
+ variant of the LIST command. There MUST be one argument for each
+ variant of the LIST command supported by the server, giving the
+ keyword for that variant.
+
+ IMPLEMENTATION
+ This capability MAY be provided by a server. If so, the arguments
+ SHOULD be used to provide information such as the server software
+ name and version number. The client MUST NOT use this line to
+ determine capabilities of the server. (While servers often
+ provide this information in the initial greeting, clients need to
+ guess whether this is the case; this capability makes it clear
+ what the information is.)
+
+ MODE-READER
+ This capability indicates that the server is mode-switching
+ (Section 3.4.2) and that the MODE READER command needs to be used
+ to enable the READER capability.
+
+3.3.3. Extensions
+
+ Although NNTP is widely and robustly deployed, some parts of the
+ Internet community might wish to extend the NNTP service. It must be
+ emphasized that any extension to NNTP should not be considered
+ lightly. NNTP's strength comes primarily from its simplicity.
+ Experience with many protocols has shown that:
+
+ Protocols with few options tend towards ubiquity, whilst protocols
+ with many options tend towards obscurity.
+
+ This means that each and every extension, regardless of its benefits,
+ must be carefully scrutinized with respect to its implementation,
+ deployment, and interoperability costs. In many cases, the cost of
+ extending the NNTP service will likely outweigh the benefit.
+
+ An extension is a package of associated facilities, often but not
+ always including one or more new commands. Each extension MUST
+ define at least one new capability label (this will often, but need
+ not, be the name of one of these new commands). While any additional
+ capability information can normally be specified using arguments to
+
+
+
+
+Feather Standards Track [Page 16]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ that label, an extension MAY define more than one capability label.
+ However, this SHOULD be limited to exceptional circumstances.
+
+ An extension is either a private extension, or its capabilities are
+ included in the IANA registry of capabilities (see Section 3.3.4) and
+ it is defined in an RFC (in which case it is a "registered
+ extension"). Such RFCs either must be on the standards track or must
+ define an IESG-approved experimental protocol.
+
+ The definition of an extension must include the following:
+
+ o a descriptive name for the extension.
+
+ o the capability label or labels defined by the extension (the
+ capability label of a registered extension MUST NOT begin with
+ "X").
+
+ o The syntax, values, and meanings of any arguments for each
+ capability label defined by the extension.
+
+ o Any new NNTP commands associated with the extension (the names of
+ commands associated with registered extensions MUST NOT begin with
+ "X").
+
+ o The syntax and possible values of arguments associated with the
+ new NNTP commands.
+
+ o The response codes and possible values of arguments for the
+ responses of the new NNTP commands.
+
+ o Any new arguments the extension associates with any other
+ pre-existing NNTP commands.
+
+ o Any increase in the maximum length of commands and initial
+ response lines over the value specified in this document.
+
+ o A specific statement about the effect on pipelining that this
+ extension may have (if any).
+
+ o A specific statement about the circumstances when use of this
+ extension can alter the contents of the capabilities list (other
+ than the new capability labels it defines).
+
+ o A specific statement about the circumstances under which the
+ extension can cause any pre-existing command to produce a 401,
+ 480, or 483 response.
+
+
+
+
+
+Feather Standards Track [Page 17]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ o A description of how the use of MODE READER on a mode-switching
+ server interacts with the extension.
+
+ o A description of how support for the extension affects the
+ behaviour of a server and NNTP client in any other manner not
+ outlined above.
+
+ o Formal syntax as described in Section 9.9.
+
+ A private extension MAY or MAY NOT be included in the capabilities
+ list. If it is, the capability label MUST begin with "X". A server
+ MAY provide additional keywords (for new commands and also for new
+ variants of existing commands) as part of a private extension. To
+ avoid the risk of a clash with a future registered extension, these
+ keywords SHOULD begin with "X".
+
+ If the server advertises a capability defined by a registered
+ extension, it MUST implement the extension so as to fully conform
+ with the specification (for example, it MUST implement all the
+ commands that the extension describes as mandatory). If it does not
+ implement the extension as specified, it MUST NOT list the extension
+ in the capabilities list under its registered name. In that case, it
+ MAY, but SHOULD NOT, provide a private extension (not listed, or
+ listed with a different name) that implements part of the extension
+ or implements the commands of the extension with a different meaning.
+
+ A server MUST NOT send different response codes to basic NNTP
+ commands documented here or to commands documented in registered
+ extensions in response to the availability or use of a private
+ extension.
+
+3.3.4. Initial IANA Register
+
+ IANA will maintain a registry of NNTP capability labels. All
+ capability labels in the registry MUST be keywords and MUST NOT begin
+ with X.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 18]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ The initial content of the registry consists of these entries:
+
+ +-------------------+--------------------------+--------------------+
+ | Label | Meaning | Definition |
+ +-------------------+--------------------------+--------------------+
+ | AUTHINFO | Authentication | [NNTP-AUTH] |
+ | | | |
+ | HDR | Batched header retrieval | Section 3.3.2, |
+ | | | Section 8.5, and |
+ | | | Section 8.6 |
+ | | | |
+ | IHAVE | IHAVE command available | Section 3.3.2 and |
+ | | | Section 6.3.2 |
+ | | | |
+ | IMPLEMENTATION | Server | Section 3.3.2 |
+ | | implementation-specific | |
+ | | information | |
+ | | | |
+ | LIST | LIST command variants | Section 3.3.2 and |
+ | | | Section 7.6.1 |
+ | | | |
+ | MODE-READER | Mode-switching server | Section 3.4.2 |
+ | | and MODE READER command | |
+ | | available | |
+ | | | |
+ | NEWNEWS | NEWNEWS command | Section 3.3.2 and |
+ | | available | Section 7.4 |
+ | | | |
+ | OVER | Overview support | Section 3.3.2, |
+ | | | Section 8.3, and |
+ | | | Section 8.4 |
+ | | | |
+ | POST | POST command available | Section 3.3.2 and |
+ | | | Section 6.3.1 |
+ | | | |
+ | READER | Reader commands | Section 3.3.2 |
+ | | available | |
+ | | | |
+ | SASL | Supported SASL | [NNTP-AUTH] |
+ | | mechanisms | |
+ | | | |
+ | STARTTLS | Transport layer security | [NNTP-TLS] |
+ | | | |
+ | STREAMING | Streaming feeds | [NNTP-STREAM] |
+ | | | |
+ | VERSION | Supported NNTP versions | Section 3.3.2 |
+ +-------------------+--------------------------+--------------------+
+
+
+
+
+Feather Standards Track [Page 19]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+3.4. Mandatory and Optional Commands
+
+ For a number of reasons, not all the commands in this specification
+ are mandatory. However, it is equally undesirable for every command
+ to be optional, since this means that a client will have no idea what
+ facilities are available. Therefore, as a compromise, some of the
+ commands in this specification are mandatory (they must be supported
+ by all servers) while the remainder are not. The latter are then
+ subdivided into bundles, each indicated by a single capability label.
+
+ o If the label is included in the capability list returned by the
+ server, the server MUST support all commands in that bundle.
+
+ o If the label is not included, the server MAY support none or some
+ of the commands but SHOULD NOT support all of them. In general,
+ there will be no way for a client to determine which commands are
+ supported without trying them.
+
+ The bundles have been chosen to provide useful functionality, and
+ therefore server authors are discouraged from implementing only part
+ of a bundle.
+
+ The description of each command will either indicate that it is
+ mandatory, or will give, using the term "indicating capability", the
+ capability label indicating whether the bundle including this command
+ is available.
+
+ Where a server does not implement a command, it MUST always generate
+ a 500 generic response code (or a 501 generic response code in the
+ case of a variant of a command depending on a second keyword where
+ the base command is recognised). Otherwise, the command MUST be
+ fully implemented as specified; a server MUST NOT only partially
+ implement any of the commands in this specification. (Client authors
+ should note that some servers not conforming to this specification
+ will return a 502 generic response code to some commands that are not
+ implemented.)
+
+ Note: some commands have cases that require other commands to be used
+ first. If the former command is implemented but the latter is not,
+ the former MUST still generate the relevant specific response code.
+ For example, if ARTICLE (Section 6.2.1) is implemented but GROUP
+ (Section 6.1.1) is not, the correct response to "ARTICLE 1234"
+ remains 412.
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 20]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+3.4.1. Reading and Transit Servers
+
+ NNTP is traditionally used in two different ways. The first use is
+ "reading", where the client fetches articles from a large store
+ maintained by the server for immediate or later presentation to a
+ user and sends articles created by that user back to the server (an
+ action called "posting") to be stored and distributed to other stores
+ and users. The second use is for the bulk transfer of articles from
+ one store to another. Since the hosts making this transfer tend to
+ be peers in a network that transmit articles among one another, and
+ not end-user systems, this process is called "peering" or "transit".
+ (Even so, one host is still the client and the other is the server).
+
+ In practice, these two uses are so different that some server
+ implementations are optimised for reading or for transit and, as a
+ result, do not offer the other facility or only offer limited
+ features. Other implementations are more general and offer both.
+ This specification allows for this by bundling the relevant commands
+ accordingly: the IHAVE command is designed for transit, while the
+ commands indicated by the READER capability are designed for reading
+ clients.
+
+ Except as an effect of the MODE READER command (Section 5.3) on a
+ mode-switching server, once a server advertises either or both of the
+ IHAVE or READER capabilities, it MUST continue to advertise them for
+ the entire session.
+
+ A server MAY provide different modes of behaviour (transit, reader,
+ or a combination) to different client connections and MAY use
+ external information, such as the IP address of the client, to
+ determine which mode to provide to any given connection.
+
+ The official TCP port for the NNTP service is 119. However, if a
+ host wishes to offer separate servers for transit and reading
+ clients, port 433 SHOULD be used for the transit server and 119 for
+ the reading server.
+
+3.4.2. Mode Switching
+
+ An implementation MAY, but SHOULD NOT, provide both transit and
+ reader facilities on the same server but require the client to select
+ which it wishes to use. Such an arrangement is called a
+ "mode-switching" server.
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 21]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ A mode-switching server has two modes:
+
+ o Transit mode, which applies after the initial connection.
+
+ * It MUST advertise the MODE-READER capability.
+
+ * It MUST NOT advertise the READER capability.
+
+ However, the server MAY cease to advertise the MODE-READER
+ capability after the client uses any command except CAPABILITIES.
+
+ o Reading mode, after a successful MODE READER command (see Section
+ 5.3).
+
+ * It MUST NOT advertise the MODE-READER capability.
+
+ * It MUST advertise the READER capability.
+
+ * It MAY NOT advertise the IHAVE capability, even if it was
+ advertising it in transit mode.
+
+ A client SHOULD only issue a MODE READER command to a server if it is
+ advertising the MODE-READER capability. If the server does not
+ support CAPABILITIES (and therefore does not conform to this
+ specification), the client MAY use the following heuristic:
+
+ o If the client wishes to use any "reader" commands, it SHOULD use
+ the MODE READER command immediately after the initial connection.
+
+ o Otherwise, it SHOULD NOT use the MODE READER command.
+
+ In each case, it should be prepared for some commands to be
+ unavailable that would have been available if it had made the other
+ choice.
+
+3.5. Pipelining
+
+ NNTP is designed to operate over a reliable bi-directional
+ connection, such as TCP. Therefore, if a command does not depend on
+ the response to the previous one, it should not matter if it is sent
+ before that response is received. Doing this is called "pipelining".
+ However, certain server implementations throw away all text received
+ from the client following certain commands before sending their
+ response. If this happens, pipelining will be affected because one
+ or more commands will have been ignored or misinterpreted, and the
+ client will be matching the wrong responses to each command. Since
+ there are significant benefits to pipelining, but also circumstances
+ where it is reasonable or common for servers to behave in the above
+
+
+
+Feather Standards Track [Page 22]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ manner, this document puts certain requirements on both clients and
+ servers.
+
+ Except where stated otherwise, a client MAY use pipelining. That is,
+ it may send a command before receiving the response for the previous
+ command. The server MUST allow pipelining and MUST NOT throw away
+ any text received after a command. Irrespective of whether
+ pipelining is used, the server MUST process commands in the order
+ they are sent.
+
+ If the specific description of a command says it "MUST NOT be
+ pipelined", that command MUST end any pipeline of commands. That is,
+ the client MUST NOT send any following command until it receives the
+ CRLF at the end of the response from the command. The server MAY
+ ignore any data received after the command and before the CRLF at the
+ end of the response is sent to the client.
+
+ The initial connection must not be part of a pipeline; that is, the
+ client MUST NOT send any command until it receives the CRLF at the
+ end of the greeting.
+
+ If the client uses blocking system calls to send commands, it MUST
+ ensure that the amount of text sent in pipelining does not cause a
+ deadlock between transmission and reception. The amount of text
+ involved will depend on window sizes in the transmission layer;
+ typically, it is 4k octets for TCP. (Since the server only sends
+ data in response to commands from the client, the converse problem
+ does not occur.)
+
+3.5.1. Examples
+
+ Example of correct use of pipelining:
+
+ [C] GROUP misc.test
+ [C] STAT
+ [C] NEXT
+ [S] 211 1234 3000234 3002322 misc.test
+ [S] 223 3000234 <45223423@example.com> retrieved
+ [S] 223 3000237 <668929@example.org> retrieved
+
+ Example of incorrect use of pipelining (the MODE READER command may
+ not be pipelined):
+
+ [C] MODE READER
+ [C] DATE
+ [C] NEXT
+ [S] 200 Server ready, posting allowed
+ [S] 223 3000237 <668929@example.org> retrieved
+
+
+
+Feather Standards Track [Page 23]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ The DATE command has been thrown away by the server, so there is no
+ 111 response to match it.
+
+3.6. Articles
+
+ NNTP is intended to transfer articles between clients and servers.
+ For the purposes of this specification, articles are required to
+ conform to the rules in this section, and clients and servers MUST
+ correctly process any article received from the other that does so.
+ Note that this requirement applies only to the contents of
+ communications over NNTP; it does not prevent the client or server
+ from subsequently rejecting an article for reasons of local policy.
+ Also see Appendix A for further restrictions on the format of
+ articles in some uses of NNTP.
+
+ An article consists of two parts: the headers and the body. They are
+ separated by a single empty line, or in other words by two
+ consecutive CRLF pairs (if there is more than one empty line, the
+ second and subsequent ones are part of the body). In order to meet
+ 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
+ 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
+ empty.
+
+ 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
+ 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
+ of this specification, is not case sensitive. There MAY be more than
+ 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 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. (Note that folding means that the header line occupies more
+ than one line when displayed or transmitted; nevertheless, it is
+ still referred 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 introduced by folding are not considered part of the
+ header content. Header lines SHOULD NOT be folded before the space
+ after the colon that follows the header name and SHOULD include at
+ least one octet other than %x09 or %x20 between CRLF pairs. However,
+ if an article that fails to satisfy this requirement has been
+ received from elsewhere, clients and servers MAY transfer it to each
+ other without re-folding it.
+
+
+
+
+
+
+Feather Standards Track [Page 24]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ The content of a header SHOULD be in UTF-8. However, if an
+ implementation receives an article from elsewhere that uses octets in
+ the range 128 to 255 in some other manner, it MAY pass it to a client
+ or server without modification. Therefore, implementations MUST be
+ prepared to receive such headers, and data derived from them (e.g.,
+ in the responses from the OVER command, Section 8.3), and MUST NOT
+ assume that they are always UTF-8. Any external processing of those
+ headers, including identifying the encoding used, is outside the
+ scope of this document.
+
+ Each article MUST have a unique message-id; two articles offered by
+ an NNTP server MUST NOT have the same message-id. For the purposes
+ of this specification, message-ids are opaque strings that MUST meet
+ the following requirements:
+
+ o A message-id MUST begin with "<", end with ">", and MUST NOT
+ contain the latter except at the end.
+
+ 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
+ characters.
+
+ Two message-ids are the same if and only if they consist of the same
+ sequence of octets.
+
+ 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
+ message-id from the article itself, it MUST synthesize one (this
+ specification does not require that the article be changed as a
+ result). See also Appendix A.2.
+
+4. The WILDMAT Format
+
+ The WILDMAT format described here is based on the version first
+ developed by Rich Salz [SALZ1992], which was in turn derived from the
+ format used in the UNIX "find" command to articulate file names. It
+ was developed to provide a uniform mechanism for matching patterns in
+ the same manner that the UNIX shell matches filenames.
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 25]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+4.1. Wildmat Syntax
+
+ A wildmat is described by the following ABNF [RFC4234] syntax, which
+ is an extract of that in Section 9.8.
+
+ wildmat = wildmat-pattern *("," ["!"] wildmat-pattern)
+ wildmat-pattern = 1*wildmat-item
+ wildmat-item = wildmat-exact / wildmat-wild
+ wildmat-exact = %x22-29 / %x2B / %x2D-3E / %x40-5A / %x5E-7E /
+ UTF8-non-ascii ; exclude ! * , ? [ \ ]
+ wildmat-wild = "*" / "?"
+
+ Note: the characters ",", "\", "[", and "]" are not allowed in
+ wildmats, while * and ? are always wildcards. This should not be a
+ problem, since these characters cannot occur in newsgroup names,
+ which is the only current use of wildmats. Backslash is commonly
+ used to suppress the special meaning of characters, whereas brackets
+ are used to introduce sets. However, these usages are not universal,
+ and interpretation of these characters in the context of UTF-8
+ strings is potentially complex and differs from existing practice, so
+ they were omitted from this specification. A future extension to
+ this specification may provide semantics for these characters.
+
+4.2. Wildmat Semantics
+
+ A wildmat is tested against a string and either matches or does not
+ match. To do this, each constituent <wildmat-pattern> is matched
+ against the string, and the rightmost pattern that matches is
+ identified. If that <wildmat-pattern> is not preceded with "!", the
+ whole wildmat matches. If it is preceded by "!", or if no <wildmat-
+ pattern> matches, the whole wildmat does not match.
+
+ For example, consider the wildmat "a*,!*b,*c*":
+
+ o The string "aaa" matches because the rightmost match is with "a*".
+
+ o The string "abb" does not match because the rightmost match is
+ with "*b".
+
+ o The string "ccb" matches because the rightmost match is with
+ "*c*".
+
+ o The string "xxx" does not match because no <wildmat-pattern>
+ matches.
+
+ A <wildmat-pattern> matches a string if the string can be broken into
+ components, each of which matches the corresponding <wildmat-item> in
+ the pattern. The matches must be in the same order, and the whole
+
+
+
+Feather Standards Track [Page 26]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ string must be used in the match. The pattern is "anchored"; that
+ is, the first and last characters in the string must match the first
+ and last item, respectively (unless that item is an asterisk matching
+ zero characters).
+
+ A <wildmat-exact> matches the same character (which may be more than
+ one octet in UTF-8).
+
+ "?" matches exactly one character (which may be more than one octet).
+
+ "*" matches zero or more characters. It can match an empty string,
+ but it cannot match a subsequence of a UTF-8 sequence that is not
+ aligned to the character boundaries.
+
+4.3. Extensions
+
+ An NNTP server or extension MAY extend the syntax or semantics of
+ wildmats provided that all wildmats that meet the requirements of
+ Section 4.1 have the meaning ascribed to them by Section 4.2. Future
+ editions of this document may also extend wildmats.
+
+4.4. Examples
+
+ In these examples, $ and @ are used to represent the two octets %xC2
+ and %xA3, respectively; $@ is thus the UTF-8 encoding for the pound
+ sterling symbol, shown as # in the descriptions.
+
+ Wildmat Description of strings that match
+ abc The one string "abc"
+ abc,def The two strings "abc" and "def"
+ $@ The one character string "#"
+ a* Any string that begins with "a"
+ a*b Any string that begins with "a" and ends with "b"
+ a*,*b Any string that begins with "a" or ends with "b"
+ a*,!*b Any string that begins with "a" and does not end with
+ "b"
+ a*,!*b,c* Any string that begins with "a" and does not end with
+ "b", and any string that begins with "c" no matter
+ what it ends with
+ a*,c*,!*b Any string that begins with "a" or "c" and does not
+ end with "b"
+ ?a* Any string with "a" as its second character
+ ??a* Any string with "a" as its third character
+ *a? Any string with "a" as its penultimate character
+ *a?? Any string with "a" as its antepenultimate character
+
+
+
+
+
+
+Feather Standards Track [Page 27]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+5. Session Administration Commands
+
+5.1. Initial Connection
+
+5.1.1. Usage
+
+ This command MUST NOT be pipelined.
+
+ Responses [1]
+ 200 Service available, posting allowed
+ 201 Service available, posting prohibited
+ 400 Service temporarily unavailable [2]
+ 502 Service permanently unavailable [2]
+
+ [1] These are the only valid response codes for the initial greeting;
+ the server MUST not return any other generic response code.
+
+ [2] Following a 400 or 502 response, the server MUST immediately
+ close the connection.
+
+5.1.2. Description
+
+ There is no command presented by the client upon initial connection
+ to the server. The server MUST present an appropriate response code
+ as a greeting to the client. This response informs the client
+ whether service is available and whether the client is permitted to
+ post.
+
+ If the server will accept further commands from the client including
+ POST, the server MUST present a 200 greeting code. If the server
+ will accept further commands from the client, but the client is not
+ authorized to post articles using the POST command, the server MUST
+ present a 201 greeting code.
+
+ Otherwise, the server MUST present a 400 or 502 greeting code and
+ then immediately close the connection. 400 SHOULD be used if the
+ issue is only temporary (for example, because of load) and the client
+ can expect to be able to connect successfully at some point in the
+ future without making any changes. 502 MUST be used if the client is
+ not permitted under any circumstances to interact with the server,
+ and MAY be used if the server has insufficient information to
+ determine whether the issue is temporary or permanent.
+
+ Note: the distinction between the 200 and 201 response codes has
+ turned out in practice to be insufficient; for example, some servers
+ do not allow posting until the client has authenticated, while other
+ clients assume that a 201 response means that posting will never be
+ possible even after authentication. Therefore, clients SHOULD use
+
+
+
+Feather Standards Track [Page 28]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ the CAPABILITIES command (Section 5.2) rather than rely on this
+ response.
+
+5.1.3. Examples
+
+ Example of a normal connection from an authorized client that then
+ terminates the session (see Section 5.4):
+
+ [Initial connection set-up completed.]
+ [S] 200 NNTP Service Ready, posting permitted
+ [C] QUIT
+ [S] 205 NNTP Service exits normally
+ [Server closes connection.]
+
+ Example of a normal connection from an authorized client that is not
+ permitted to post, which also immediately terminates the session:
+
+ [Initial connection set-up completed.]
+ [S] 201 NNTP Service Ready, posting prohibited
+ [C] QUIT
+ [S] 205 NNTP Service exits normally
+ [Server closes connection.]
+
+ Example of a normal connection from an unauthorized client:
+
+ [Initial connection set-up completed.]
+ [S] 502 NNTP Service permanently unavailable
+ [Server closes connection.]
+
+ Example of a connection from a client if the server is unable to
+ provide service:
+
+ [Initial connection set-up completed.]
+ [S] 400 NNTP Service temporarily unavailable
+ [Server closes connection.]
+
+5.2. CAPABILITIES
+
+5.2.1. Usage
+
+ This command is mandatory.
+
+ Syntax
+ CAPABILITIES [keyword]
+
+ Responses
+ 101 Capability list follows (multi-line)
+
+
+
+
+Feather Standards Track [Page 29]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Parameters
+ keyword additional feature, see description
+
+5.2.2. Description
+
+ The CAPABILITIES command allows a client to determine the
+ capabilities of the server at any given time.
+
+ This command MAY be issued at any time; the server MUST NOT require
+ it to be issued in order to make use of any capability. The response
+ generated by this command MAY change during a session because of
+ other state information (which, in turn, may be changed by the
+ effects of other commands or by external events). An NNTP client is
+ only able to get the current and correct information concerning
+ available capabilities at any point during a session by issuing a
+ CAPABILITIES command at that point of that session and processing the
+ response.
+
+ The capability list is returned as a multi-line data block following
+ the 101 response code. Each capability is described by a separate
+ capability line. The server MUST NOT list the same capability twice
+ in the response, even with different arguments. Except that the
+ VERSION capability MUST be the first line, the order in which the
+ capability lines appears is not significant; the server need not even
+ consistently return the same order.
+
+ While some capabilities are likely to be always available or never
+ available, others (notably extensions) will appear and disappear
+ depending on server state changes within the session or on external
+ events between sessions. An NNTP client MAY cache the results of
+ this command, but MUST NOT rely on the correctness of any cached
+ results, whether from earlier in this session or from a previous
+ session, MUST cope gracefully with the cached status being out of
+ date, and SHOULD (if caching results) provide a way to force the
+ cached information to be refreshed. Furthermore, a client MUST NOT
+ use cached results in relation to security, privacy, and
+ authentication extensions. See Section 12.6 for further discussion
+ of this topic.
+
+ The keyword argument is not used by this specification. It is
+ provided so that extensions or revisions to this specification can
+ include extra features for this command without requiring the
+ CAPABILITIES command to be used twice (once to determine if the extra
+ features are available, and a second time to make use of them). If
+ the server does not recognise the argument (and it is a keyword), it
+ MUST respond with the 101 response code as if the argument had been
+ omitted. If an argument is provided that the server does recognise,
+ it MAY use the 101 response code or MAY use some other response code
+
+
+
+Feather Standards Track [Page 30]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ (which will be defined in the specification of that feature). If the
+ argument is not a keyword, the 501 generic response code MUST be
+ returned. The server MUST NOT generate any other response code to
+ the CAPABILITIES command.
+
+5.2.3. Examples
+
+ Example of a minimal response (a read-only server):
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] LIST ACTIVE NEWSGROUPS
+ [S] .
+
+ Example of a response from a server that has a range of facilities
+ and that also describes itself:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] IHAVE
+ [S] POST
+ [S] NEWNEWS
+ [S] LIST ACTIVE NEWSGROUPS ACTIVE.TIMES OVERVIEW.FMT
+ [S] IMPLEMENTATION INN 4.2 2004-12-25
+ [S] OVER MSGID
+ [S] STREAMING
+ [S] XSECRET
+ [S] .
+
+ Example of a server that supports more than one version of NNTP:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2 3
+ [S] READER
+ [S] LIST ACTIVE NEWSGROUPS
+ [S] .
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 31]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of a client attempting to use a feature of the CAPABILITIES
+ command that the server does not support:
+
+ [C] CAPABILITIES AUTOUPDATE
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] IHAVE
+ [S] LIST ACTIVE NEWSGROUPS OVERVIEW.FMT HEADERS
+ [S] OVER MSGID
+ [S] HDR
+ [S] NEWNEWS
+ [S] .
+
+5.3. MODE READER
+
+5.3.1. Usage
+
+ Indicating capability: MODE-READER
+
+ This command MUST NOT be pipelined.
+
+ Syntax
+ MODE READER
+
+ Responses
+ 200 Posting allowed
+ 201 Posting prohibited
+ 502 Reading service permanently unavailable [1]
+
+ [1] Following a 502 response the server MUST immediately close the
+ connection.
+
+5.3.2. Description
+
+ The MODE READER command instructs a mode-switching server to switch
+ modes, as described in Section 3.4.2.
+
+ If the server is mode-switching, it switches from its transit mode to
+ its reader mode, indicating this by changing the capability list
+ accordingly. It MUST then return a 200 or 201 response with the same
+ meaning as for the initial greeting (as described in Section 5.1.1).
+ Note that the response need not be the same as that presented during
+ the initial greeting. The client MUST NOT issue MODE READER more
+ than once in a session or after any security or privacy commands are
+ issued. When the MODE READER command is issued, the server MAY reset
+ its state to that immediately after the initial connection before
+ switching mode.
+
+
+
+Feather Standards Track [Page 32]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ If the server is not mode-switching, then the following apply:
+
+ o If it advertises the READER capability, it MUST return a 200 or
+ 201 response with the same meaning as for the initial greeting; in
+ this case, the command MUST NOT affect the server state in any
+ way.
+
+ o If it does not advertise the READER capability, it MUST return a
+ 502 response and then immediately close the connection.
+
+5.3.3. Examples
+
+ Example of use of the MODE READER command on a transit-only server
+ (which therefore does not providing reading facilities):
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] IHAVE
+ [S] .
+ [C] MODE READER
+ [S] 502 Transit service only
+ [Server closes connection.]
+
+ Example of use of the MODE READER command on a server that provides
+ reading facilities:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] LIST ACTIVE NEWSGROUPS
+ [S] .
+ [C] MODE READER
+ [S] 200 Reader mode, posting permitted
+ [C] IHAVE <i.am.an.article.you.have@example.com>
+ [S] 500 Permission denied
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+
+ Note that in both of these situations, the client SHOULD NOT use MODE
+ READER.
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 33]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of use of the MODE READER command on a mode-switching server:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] IHAVE
+ [S] MODE-READER
+ [S] .
+ [C] MODE READER
+ [S] 200 Reader mode, posting permitted
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] NEWNEWS
+ [S] LIST ACTIVE NEWSGROUPS
+ [S] STARTTLS
+ [S] .
+
+ In this case, the server offers (but does not require) TLS privacy in
+ its reading mode but not in its transit mode.
+
+ Example of use of the MODE READER command where the client is not
+ permitted to post:
+
+ [C] MODE READER
+ [S] 201 NNTP Service Ready, posting prohibited
+
+5.4. QUIT
+
+5.4.1. Usage
+
+ This command is mandatory.
+
+ Syntax
+ QUIT
+
+ Responses
+ 205 Connection closing
+
+5.4.2. Description
+
+ The client uses the QUIT command to terminate the session. The
+ server MUST acknowledge the QUIT command and then close the
+ connection to the client. This is the preferred method for a client
+ to indicate that it has finished all of its transactions with the
+ NNTP server.
+
+
+
+
+Feather Standards Track [Page 34]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ If a client simply disconnects (or if the connection times out or
+ some other fault occurs), the server MUST gracefully cease its
+ attempts to service the client, disconnecting from its end if
+ necessary.
+
+ The server MUST NOT generate any response code to the QUIT command
+ other than 205 or, if any arguments are provided, 501.
+
+5.4.3. Examples
+
+ [C] QUIT
+ [S] 205 closing connection
+ [Server closes connection.]
+
+6. Article Posting and Retrieval
+
+ News-reading clients have available a variety of mechanisms to
+ retrieve articles via NNTP. The news articles are stored and indexed
+ using three types of keys. The first type of key is the message-id
+ of an article and is globally unique. The second type of key is
+ composed of a newsgroup name and an article number within that
+ newsgroup. On a particular server, there MUST only be one article
+ with a given number within any newsgroup, and an article MUST NOT
+ have two different numbers in the same newsgroup. An article can be
+ cross-posted to multiple newsgroups, so there may be multiple keys
+ that point to the same article on the same server; these MAY have
+ different numbers in each newsgroup. However, this type of key is
+ not required to be globally unique, so the same key MAY refer to
+ different articles on different servers. (Note that the terms
+ "group" and "newsgroup" are equivalent.)
+
+ The final type of key is the arrival timestamp, giving the time that
+ the article arrived at the server. The server MUST ensure that
+ article numbers are issued in order of arrival timestamp; that is,
+ articles arriving later MUST have higher numbers than those that
+ arrive earlier. The server SHOULD allocate the next sequential
+ unused number to each new article.
+
+ Article numbers MUST lie between 1 and 2,147,483,647, inclusive. The
+ client and server MAY use leading zeroes in specifying article
+ numbers but MUST NOT use more than 16 digits. In some situations,
+ the value zero replaces an article number to show some special
+ situation.
+
+ Note that it is likely that the article number limit of 2,147,483,647
+ will be increased by a future revision or extension to this
+ specification. While servers MUST NOT send article numbers greater
+ than this current limit, client and server developers are advised to
+
+
+
+Feather Standards Track [Page 35]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ use internal structures and datatypes capable of handling larger
+ values in anticipation of such a change.
+
+6.1. Group and Article Selection
+
+ The following commands are used to set the "currently selected
+ newsgroup" and the "current article number", which are used by
+ various commands. At the start of an NNTP session, both of these
+ values are set to the special value "invalid".
+
+6.1.1. GROUP
+
+6.1.1.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ GROUP group
+
+ Responses
+ 211 number low high group Group successfully selected
+ 411 No such newsgroup
+
+ Parameters
+ group Name of newsgroup
+ number Estimated number of articles in the group
+ low Reported low water mark
+ high Reported high water mark
+
+6.1.1.2. Description
+
+ The GROUP command selects a newsgroup as the currently selected
+ newsgroup and returns summary information about it.
+
+ The required argument is the name of the newsgroup to be selected
+ (e.g., "news.software.nntp"). A list of valid newsgroups may be
+ obtained by using the LIST ACTIVE command (see Section 7.6.3).
+
+ The successful selection response will return the article numbers of
+ the first and last articles in the group at the moment of selection
+ (these numbers are referred to as the "reported low water mark" and
+ the "reported high water mark") and an estimate of the number of
+ articles in the group currently available.
+
+ If the group is not empty, the estimate MUST be at least the actual
+ number of articles available and MUST be no greater than one more
+ than the difference between the reported low and high water marks.
+ (Some implementations will actually count the number of articles
+
+
+
+Feather Standards Track [Page 36]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ currently stored. Others will just subtract the low water mark from
+ the high water mark and add one to get an estimate.)
+
+ If the group is empty, one of the following three situations will
+ occur. Clients MUST accept all three cases; servers MUST NOT
+ represent an empty group in any other way.
+
+ o The high water mark will be one less than the low water mark, and
+ the estimated article count will be zero. Servers SHOULD use this
+ method to show an empty group. This is the only time that the
+ high water mark can be less than the low water mark.
+
+ o All three numbers will be zero.
+
+ o The high water mark is greater than or equal to the low water
+ mark. The estimated article count might be zero or non-zero; if
+ it is non-zero, the same requirements apply as for a non-empty
+ group.
+
+ The set of articles in a group may change after the GROUP command is
+ carried out:
+
+ o Articles may be removed from the group.
+
+ o Articles may be reinstated in the group with the same article
+ number, but those articles MUST have numbers no less than the
+ reported low water mark (note that this is a reinstatement of the
+ previous article, not a new article reusing the number).
+
+ o New articles may be added with article numbers greater than the
+ reported high water mark. (If an article that was the one with
+ the highest number has been removed and the high water mark has
+ been adjusted accordingly, the next new article will not have the
+ number one greater than the reported high water mark.)
+
+ Except when the group is empty and all three numbers are zero,
+ whenever a subsequent GROUP command for the same newsgroup is issued,
+ either by the same client or a different client, the reported low
+ water mark in the response MUST be no less than that in any previous
+ response for that newsgroup in this session, and it SHOULD be no less
+ than that in any previous response for that newsgroup ever sent to
+ any client. Any failure to meet the latter condition SHOULD be
+ transient only. The client may make use of the low water mark to
+ remove all remembered information about articles with lower numbers,
+ as these will never recur. This includes the situation when the high
+ water mark is one less than the low water mark. No similar
+ assumption can be made about the high water mark, as this can
+
+
+
+
+Feather Standards Track [Page 37]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ decrease if an article is removed and then increase again if it is
+ reinstated or if new articles arrive.
+
+ When a valid group is selected by means of this command, the
+ currently selected newsgroup MUST be set to that group, and the
+ current article number MUST be set to the first article in the group
+ (this applies even if the group is already the currently selected
+ newsgroup). If an empty newsgroup is selected, the current article
+ number is made invalid. If an invalid group is specified, the
+ currently selected newsgroup and current article number MUST NOT be
+ changed.
+
+ The GROUP or LISTGROUP command (see Section 6.1.2) MUST be used by a
+ client, and a successful response received, before any other command
+ is used that depends on the value of the currently selected newsgroup
+ or current article number.
+
+ If the group specified is not available on the server, a 411 response
+ MUST be returned.
+
+6.1.1.3. Examples
+
+ Example for a group known to the server:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+
+ Example for a group unknown to the server:
+
+ [C] GROUP example.is.sob.bradner.or.barber
+ [S] 411 example.is.sob.bradner.or.barber is unknown
+
+ Example of an empty group using the preferred response:
+
+ [C] GROUP example.currently.empty.newsgroup
+ [S] 211 0 4000 3999 example.currently.empty.newsgroup
+
+ Example of an empty group using an alternative response:
+
+ [C] GROUP example.currently.empty.newsgroup
+ [S] 211 0 0 0 example.currently.empty.newsgroup
+
+ Example of an empty group using a different alternative response:
+
+ [C] GROUP example.currently.empty.newsgroup
+ [S] 211 0 4000 4321 example.currently.empty.newsgroup
+
+
+
+
+
+Feather Standards Track [Page 38]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example reselecting the currently selected newsgroup:
+
+ [C] GROUP misc.test
+ [S] 211 1234 234 567 misc.test
+ [C] STAT 444
+ [S] 223 444 <123456@example.net> retrieved
+ [C] GROUP misc.test
+ [S] 211 1234 234 567 misc.test
+ [C] STAT
+ [S] 223 234 <different@example.net> retrieved
+
+6.1.2. LISTGROUP
+
+6.1.2.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ LISTGROUP [group [range]]
+
+ Responses
+ 211 number low high group Article numbers follow (multi-line)
+ 411 No such newsgroup
+ 412 No newsgroup selected [1]
+
+ Parameters
+ group Name of newsgroup
+ range Range of articles to report
+ number Estimated number of articles in the group
+ low Reported low water mark
+ high Reported high water mark
+
+ [1] The 412 response can only occur if no group has been specified.
+
+6.1.2.2. Description
+
+ 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.
+
+ On success, a list of article numbers is returned as a multi-line
+ data block following the 211 response code (the arguments on the
+ initial response line are the same as for the GROUP command). The
+ list contains one number per line and is in numerical order. It
+ lists precisely those articles that exist in the group at the moment
+ of selection (therefore, an empty group produces an empty list). If
+ the optional range argument is specified, only articles within the
+
+
+
+Feather Standards Track [Page 39]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ range are included in the list (therefore, the list MAY be empty even
+ if the group is not).
+
+ The range argument may be any of the following:
+
+ o An article number.
+
+ o An article number followed by a dash to indicate all following.
+
+ o An article number followed by a dash followed by another article
+ number.
+
+ In the last case, if the second number is less than the first number,
+ then the range contains no articles. Omitting the range is
+ equivalent to the range 1- being specified.
+
+ 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.
+
+ Except that the group argument is optional, that a range argument can
+ be specified, and that a multi-line data block follows the 211
+ response code, the LISTGROUP command is identical to the GROUP
+ command. In particular, when successful, the command sets the
+ current article number to the first article in the group, if any,
+ even if this is not within the range specified by the second
+ argument.
+
+ Note that the range argument is a new feature in this specification
+ and servers that do not support CAPABILITIES (and therefore do not
+ conform to this specification) are unlikely to support it.
+
+6.1.2.3. Examples
+
+ Example of LISTGROUP being used to select a group:
+
+ [C] LISTGROUP misc.test
+ [S] 211 2000 3000234 3002322 misc.test list follows
+ [S] 3000234
+ [S] 3000237
+ [S] 3000238
+ [S] 3000239
+ [S] 3002322
+ [S] .
+
+
+
+
+
+
+
+Feather Standards Track [Page 40]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of LISTGROUP on an empty group:
+
+ [C] LISTGROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup list follows
+ [S] .
+
+ Example of LISTGROUP on a valid, currently selected newsgroup:
+
+ [C] GROUP misc.test
+ [S] 211 2000 3000234 3002322 misc.test
+ [C] LISTGROUP
+ [S] 211 2000 3000234 3002322 misc.test list follows
+ [S] 3000234
+ [S] 3000237
+ [S] 3000238
+ [S] 3000239
+ [S] 3002322
+ [S] .
+
+ Example of LISTGROUP with a range:
+
+ [C] LISTGROUP misc.test 3000238-3000248
+ [S] 211 2000 3000234 3002322 misc.test list follows
+ [S] 3000238
+ [S] 3000239
+ [S] .
+
+ Example of LISTGROUP with an empty range:
+
+ [C] LISTGROUP misc.test 12345678-
+ [S] 211 2000 3000234 3002322 misc.test list follows
+ [S] .
+
+ Example of LISTGROUP with an invalid range:
+
+ [C] LISTGROUP misc.test 9999-111
+ [S] 211 2000 3000234 3002322 misc.test list follows
+ [S] .
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 41]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.1.3. LAST
+
+6.1.3.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ LAST
+
+ Responses
+ 223 n message-id Article found
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+ 422 No previous article in this group
+
+ Parameters
+ n Article number
+ message-id Article message-id
+
+6.1.3.2. Description
+
+ If the currently selected newsgroup is valid, the current article
+ number MUST be set to the previous article in that newsgroup (that
+ is, the highest existing article number less than the current article
+ number). If successful, a response indicating the new current
+ article number and the message-id of that article MUST be returned.
+ No article text is sent in response to this command.
+
+ There MAY be no previous article in the group, although the current
+ article number is not the reported low water mark. There MUST NOT be
+ a previous article when the current article number is the reported
+ low water mark.
+
+ Because articles can be removed and added, the results of multiple
+ LAST and NEXT commands MAY not be consistent over the life of a
+ particular NNTP session.
+
+ If the current article number is already the first article of the
+ newsgroup, a 422 response MUST be returned. If the current article
+ number is invalid, a 420 response MUST be returned. If the currently
+ selected newsgroup is invalid, a 412 response MUST be returned. In
+ all three cases, the currently selected newsgroup and current article
+ number MUST NOT be altered.
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 42]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.1.3.3. Examples
+
+ Example of a successful article retrieval using LAST:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] NEXT
+ [S] 223 3000237 <668929@example.org> retrieved
+ [C] LAST
+ [S] 223 3000234 <45223423@example.com> retrieved
+
+ Example of an attempt to retrieve an article without having selected
+ a group (via the GROUP command) first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] LAST
+ [S] 412 no newsgroup selected
+
+ Example of an attempt to retrieve an article using the LAST command
+ when the current article number is that of the first article in the
+ group:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] LAST
+ [S] 422 No previous article to retrieve
+
+ Example of an attempt to retrieve an article using the LAST command
+ when the currently selected newsgroup is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] LAST
+ [S] 420 No current article selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 43]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.1.4. NEXT
+
+6.1.4.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ NEXT
+
+ Responses
+ 223 n message-id Article found
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+ 421 No next article in this group
+
+ Parameters
+ n Article number
+ message-id Article message-id
+
+6.1.4.2. Description
+
+ If the currently selected newsgroup is valid, the current article
+ number MUST be set to the next article in that newsgroup (that is,
+ the lowest existing article number greater than the current article
+ number). If successful, a response indicating the new current
+ article number and the message-id of that article MUST be returned.
+ No article text is sent in response to this command.
+
+ If the current article number is already the last article of the
+ newsgroup, a 421 response MUST be returned. In all other aspects
+ (apart, of course, from the lack of 422 response), this command is
+ identical to the LAST command (Section 6.1.3).
+
+6.1.4.3. Examples
+
+ Example of a successful article retrieval using NEXT:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] NEXT
+ [S] 223 3000237 <668929@example.org> retrieved
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 44]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an attempt to retrieve an article without having selected
+ a group (via the GROUP command) first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] NEXT
+ [S] 412 no newsgroup selected
+
+ Example of an attempt to retrieve an article using the NEXT command
+ when the current article number is that of the last article in the
+ group:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] STAT 3002322
+ [S] 223 3002322 <411@example.net> retrieved
+ [C] NEXT
+ [S] 421 No next article to retrieve
+
+ Example of an attempt to retrieve an article using the NEXT command
+ when the currently selected newsgroup is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] NEXT
+ [S] 420 No current article selected
+
+6.2. Retrieval of Articles and Article Sections
+
+ The ARTICLE, BODY, HEAD, and STAT commands are very similar. They
+ differ only in the parts of the article that are presented to the
+ client and in the successful response code. The ARTICLE command is
+ described here in full, while the other three commands are described
+ in terms of the differences. As specified in Section 3.6, an article
+ consists of two parts: the article headers and the article body.
+
+ When responding to one of these commands, the server MUST present the
+ entire article or appropriate part and MUST NOT attempt to alter or
+ translate it in any way.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 45]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.2.1. ARTICLE
+
+6.2.1.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ ARTICLE message-id
+ ARTICLE number
+ ARTICLE
+
+ Responses
+
+ First form (message-id specified)
+ 220 0|n message-id Article follows (multi-line)
+ 430 No article with that message-id
+
+ Second form (article number specified)
+ 220 n message-id Article follows (multi-line)
+ 412 No newsgroup selected
+ 423 No article with that number
+
+ Third form (current article number used)
+ 220 n message-id Article follows (multi-line)
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+
+ Parameters
+ number Requested article number
+ n Returned article number
+ message-id Article message-id
+
+6.2.1.2. Description
+
+ The ARTICLE command selects an article according to the arguments and
+ presents the entire article (that is, the headers, an empty line, and
+ the body, in that order) to the client. The command has three forms.
+
+ 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
+ alter the currently selected newsgroup or current article number.
+ This is both to facilitate the presentation of articles that may be
+ referenced within another article being read, and because of the
+ semantic difficulties of determining the proper sequence and
+ membership of an article that may have been cross-posted to more than
+ one newsgroup.
+
+
+
+
+
+Feather Standards Track [Page 46]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ In the response, the article number MUST be replaced with zero,
+ unless there is a currently selected newsgroup and the article is
+ present in that group, in which case the server MAY use the article's
+ number in that group. (The server is not required to determine
+ whether the article is in the currently 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
+ article with that number in the currently selected newsgroup, the
+ server MUST set the current article number to that number.
+
+ In the third form, the article indicated by the current article
+ number in the currently selected newsgroup is used.
+
+ Note that a previously valid article number MAY become invalid if the
+ article has been removed. A previously invalid article number MAY
+ become valid if the article has been reinstated, but this article
+ number MUST be no less than the reported low water mark for that
+ group.
+
+ The server MUST NOT change the currently selected newsgroup as a
+ result of this command. The server MUST NOT change the current
+ article number except when an article number argument was provided
+ and the article exists; in particular, it MUST NOT change it
+ following an unsuccessful response.
+
+ Since the message-id is unique for each article, it may be used by a
+ client to skip duplicate displays of articles that have been posted
+ more than once, or to more than one newsgroup.
+
+ The article is returned as a multi-line data block following the 220
+ response code.
+
+ If the argument is a message-id and no such article exists, a 430
+ response MUST be returned. If the argument is a number or is omitted
+ and the currently selected newsgroup is invalid, a 412 response MUST
+ be returned. If the argument is a number and that article does not
+ exist in the currently selected newsgroup, a 423 response MUST be
+ returned. If the argument is omitted and the current article number
+ is invalid, a 420 response MUST be returned.
+
+
+
+
+
+Feather Standards Track [Page 47]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.2.1.3. Examples
+
+ Example of a successful retrieval of an article (explicitly not using
+ an article number):
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] ARTICLE
+ [S] 220 3000234 <45223423@example.com>
+ [S] Path: pathost!demo!whitehouse!not-for-mail
+ [S] From: "Demo User" <nobody@example.net>
+ [S] Newsgroups: misc.test
+ [S] Subject: I am just a test article
+ [S] Date: 6 Oct 1998 04:38:40 -0500
+ [S] Organization: An Example Net, Uncertain, Texas
+ [S] Message-ID: <45223423@example.com>
+ [S]
+ [S] This is just a test article.
+ [S] .
+
+ Example of a successful retrieval of an article by message-id:
+
+ [C] ARTICLE <45223423@example.com>
+ [S] 220 0 <45223423@example.com>
+ [S] Path: pathost!demo!whitehouse!not-for-mail
+ [S] From: "Demo User" <nobody@example.net>
+ [S] Newsgroups: misc.test
+ [S] Subject: I am just a test article
+ [S] Date: 6 Oct 1998 04:38:40 -0500
+ [S] Organization: An Example Net, Uncertain, Texas
+ [S] Message-ID: <45223423@example.com>
+ [S]
+ [S] This is just a test article.
+ [S] .
+
+ Example of an unsuccessful retrieval of an article by message-id:
+
+ [C] ARTICLE <i.am.not.there@example.com>
+ [S] 430 No Such Article Found
+
+ Example of an unsuccessful retrieval of an article by number:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 news.groups
+ [C] ARTICLE 300256
+ [S] 423 No article with that number
+
+
+
+
+
+Feather Standards Track [Page 48]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an unsuccessful retrieval of an article by number because
+ no newsgroup was selected first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] ARTICLE 300256
+ [S] 412 No newsgroup selected
+
+ Example of an attempt to retrieve an article when the currently
+ selected newsgroup is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] ARTICLE
+ [S] 420 No current article selected
+
+6.2.2. HEAD
+
+6.2.2.1. Usage
+
+ This command is mandatory.
+
+ Syntax
+ HEAD message-id
+ HEAD number
+ HEAD
+
+ Responses
+
+ First form (message-id specified)
+ 221 0|n message-id Headers follow (multi-line)
+ 430 No article with that message-id
+
+ Second form (article number specified)
+ 221 n message-id Headers follow (multi-line)
+ 412 No newsgroup selected
+ 423 No article with that number
+
+ Third form (current article number used)
+ 221 n message-id Headers follow (multi-line)
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+
+ Parameters
+ number Requested article number
+ n Returned article number
+ message-id Article message-id
+
+
+
+
+
+Feather Standards Track [Page 49]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.2.2.2. Description
+
+ The HEAD command behaves identically to the ARTICLE command except
+ that, if the article exists, the response code is 221 instead of 220
+ and only the headers are presented (the empty line separating the
+ headers and body MUST NOT be included).
+
+6.2.2.3. Examples
+
+ Example of a successful retrieval of the headers of an article
+ (explicitly not using an article number):
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] HEAD
+ [S] 221 3000234 <45223423@example.com>
+ [S] Path: pathost!demo!whitehouse!not-for-mail
+ [S] From: "Demo User" <nobody@example.net>
+ [S] Newsgroups: misc.test
+ [S] Subject: I am just a test article
+ [S] Date: 6 Oct 1998 04:38:40 -0500
+ [S] Organization: An Example Net, Uncertain, Texas
+ [S] Message-ID: <45223423@example.com>
+ [S] .
+
+ Example of a successful retrieval of the headers of an article by
+ message-id:
+
+ [C] HEAD <45223423@example.com>
+ [S] 221 0 <45223423@example.com>
+ [S] Path: pathost!demo!whitehouse!not-for-mail
+ [S] From: "Demo User" <nobody@example.net>
+ [S] Newsgroups: misc.test
+ [S] Subject: I am just a test article
+ [S] Date: 6 Oct 1998 04:38:40 -0500
+ [S] Organization: An Example Net, Uncertain, Texas
+ [S] Message-ID: <45223423@example.com>
+ [S] .
+
+ Example of an unsuccessful retrieval of the headers of an article by
+ message-id:
+
+ [C] HEAD <i.am.not.there@example.com>
+ [S] 430 No Such Article Found
+
+
+
+
+
+
+
+Feather Standards Track [Page 50]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an unsuccessful retrieval of the headers of an article by
+ number:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] HEAD 300256
+ [S] 423 No article with that number
+
+ Example of an unsuccessful retrieval of the headers of an article by
+ number because no newsgroup was selected first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] HEAD 300256
+ [S] 412 No newsgroup selected
+
+ Example of an attempt to retrieve the headers of an article when the
+ currently selected newsgroup is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] HEAD
+ [S] 420 No current article selected
+
+6.2.3. BODY
+
+6.2.3.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ BODY message-id
+ BODY number
+ BODY
+
+ Responses
+
+ First form (message-id specified)
+ 222 0|n message-id Body follows (multi-line)
+ 430 No article with that message-id
+
+ Second form (article number specified)
+ 222 n message-id Body follows (multi-line)
+ 412 No newsgroup selected
+ 423 No article with that number
+
+
+
+
+
+
+
+Feather Standards Track [Page 51]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Third form (current article number used)
+ 222 n message-id Body follows (multi-line)
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+
+ Parameters
+ number Requested article number
+ n Returned article number
+ message-id Article message-id
+
+6.2.3.2. Description
+
+ The BODY command behaves identically to the ARTICLE command except
+ that, if the article exists, the response code is 222 instead of 220
+ and only the body is presented (the empty line separating the headers
+ and body MUST NOT be included).
+
+6.2.3.3. Examples
+
+ Example of a successful retrieval of the body of an article
+ (explicitly not using an article number):
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] BODY
+ [S] 222 3000234 <45223423@example.com>
+ [S] This is just a test article.
+ [S] .
+
+ Example of a successful retrieval of the body of an article by
+ message-id:
+
+ [C] BODY <45223423@example.com>
+ [S] 222 0 <45223423@example.com>
+ [S] This is just a test article.
+ [S] .
+
+ Example of an unsuccessful retrieval of the body of an article by
+ message-id:
+
+ [C] BODY <i.am.not.there@example.com>
+ [S] 430 No Such Article Found
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 52]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an unsuccessful retrieval of the body of an article by
+ number:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] BODY 300256
+ [S] 423 No article with that number
+
+ Example of an unsuccessful retrieval of the body of an article by
+ number because no newsgroup was selected first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] BODY 300256
+ [S] 412 No newsgroup selected
+
+ Example of an attempt to retrieve the body of an article when the
+ currently selected newsgroup is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] BODY
+ [S] 420 No current article selected
+
+6.2.4. STAT
+
+6.2.4.1. Usage
+
+ This command is mandatory.
+
+ Syntax
+ STAT message-id
+ STAT number
+ STAT
+
+ Responses
+
+ First form (message-id specified)
+ 223 0|n message-id Article exists
+ 430 No article with that message-id
+
+ Second form (article number specified)
+ 223 n message-id Article exists
+ 412 No newsgroup selected
+ 423 No article with that number
+
+
+
+
+
+
+
+Feather Standards Track [Page 53]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Third form (current article number used)
+ 223 n message-id Article exists
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+
+ Parameters
+ number Requested article number
+ n Returned article number
+ message-id Article message-id
+
+6.2.4.2. Description
+
+ The STAT command behaves identically to the ARTICLE command except
+ that, if the article exists, it is NOT presented to the client and
+ the response code is 223 instead of 220. Note that the response is
+ NOT multi-line.
+
+ This command allows the client to determine whether an article exists
+ and, in the second and third forms, what its message-id is, without
+ having to process an arbitrary amount of text.
+
+6.2.4.3. Examples
+
+ Example of STAT on an existing article (explicitly not using an
+ article number):
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] STAT
+ [S] 223 3000234 <45223423@example.com>
+
+ Example of STAT on an existing article by message-id:
+
+ [C] STAT <45223423@example.com>
+ [S] 223 0 <45223423@example.com>
+
+ Example of STAT on an article not on the server by message-id:
+
+ [C] STAT <i.am.not.there@example.com>
+ [S] 430 No Such Article Found
+
+ Example of STAT on an article not in the server by number:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] STAT 300256
+ [S] 423 No article with that number
+
+
+
+
+Feather Standards Track [Page 54]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of STAT on an article by number when no newsgroup was
+ selected first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] STAT 300256
+ [S] 412 No newsgroup selected
+
+ Example of STAT on an article when the currently selected newsgroup
+ is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] STAT
+ [S] 420 No current article selected
+
+ Example of STAT by message-id on a server that 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 currently selected newsgroup. The fifth shows that the
+ number, if provided, must be that relating to the currently selected
+ newsgroup. The last one shows that the current article number is
+ still not changed by the use of STAT with a message-id even if it
+ returns an article number.
+
+
+
+
+
+Feather Standards Track [Page 55]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.3. Article Posting
+
+ Article posting is done in one of two ways: individual article
+ posting from news-reading clients using POST, and article transfer
+ from other news servers using IHAVE.
+
+6.3.1. POST
+
+6.3.1.1. Usage
+
+ Indicating capability: POST
+
+ This command MUST NOT be pipelined.
+
+ Syntax
+ POST
+
+ Responses
+
+ Initial responses
+ 340 Send article to be posted
+ 440 Posting not permitted
+
+ Subsequent responses
+ 240 Article received OK
+ 441 Posting failed
+
+6.3.1.2. Description
+
+ If posting is allowed, a 340 response MUST be returned to indicate
+ that the article to be posted should be sent. If posting is
+ prohibited for some installation-dependent reason, a 440 response
+ MUST be returned.
+
+ If posting is permitted, the article MUST be in the format specified
+ in Section 3.6 and MUST be sent by the client to the server as a
+ multi-line data block (see Section 3.1.1). Thus a single dot (".")
+ on a line indicates the end of the text, and lines starting with a
+ dot in the original text have that dot doubled during transmission.
+
+ Following the presentation of the termination sequence by the client,
+ the server MUST return a response indicating success or failure of
+ the article transfer. Note that response codes 340 and 440 are used
+ in direct response to the POST command while 240 and 441 are returned
+ after the article is sent.
+
+
+
+
+
+
+Feather Standards Track [Page 56]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ A response of 240 SHOULD indicate that, barring unforeseen server
+ errors, the posted article will be made available on the server
+ and/or transferred to other servers, as appropriate, possibly
+ following further processing. In other words, articles not wanted by
+ the server SHOULD be rejected with a 441 response, rather than being
+ accepted and then discarded silently. However, the client SHOULD NOT
+ assume that the article has been successfully transferred unless it
+ receives an affirmative response from the server and SHOULD NOT
+ assume that it is being made available to other clients without
+ explicitly checking (for example, using the STAT command).
+
+ If the session is interrupted before the response is received, it is
+ possible that an affirmative response was sent but has been lost.
+ Therefore, in any subsequent session, the client SHOULD either check
+ whether the article was successfully posted before resending or
+ ensure that the server will allocate the same message-id to the new
+ attempt (see Appendix A.2). The latter approach is preferred since
+ the article might not have been made available for reading yet (for
+ example, it may have to go through a moderation process).
+
+6.3.1.3. Examples
+
+ Example of a successful posting:
+
+ [C] POST
+ [S] 340 Input article; end with <CR-LF>.<CR-LF>
+ [C] From: "Demo User" <nobody@example.net>
+ [C] Newsgroups: misc.test
+ [C] Subject: I am just a test article
+ [C] Organization: An Example Net
+ [C]
+ [C] This is just a test article.
+ [C] .
+ [S] 240 Article received OK
+
+ Example of an unsuccessful posting:
+
+ [C] POST
+ [S] 340 Input article; end with <CR-LF>.<CR-LF>
+ [C] From: "Demo User" <nobody@example.net>
+ [C] Newsgroups: misc.test
+ [C] Subject: I am just a test article
+ [C] Organization: An Example Net
+ [C]
+ [C] This is just a test article.
+ [C] .
+ [S] 441 Posting failed
+
+
+
+
+Feather Standards Track [Page 57]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an attempt to post when posting is not allowed:
+
+ [Initial connection set-up completed.]
+ [S] 201 NNTP Service Ready, posting prohibited
+ [C] POST
+ [S] 440 Posting not permitted
+
+6.3.2. IHAVE
+
+6.3.2.1. Usage
+
+ Indicating capability: IHAVE
+
+ This command MUST NOT be pipelined.
+
+ Syntax
+ IHAVE message-id
+
+ Responses
+
+ Initial responses
+ 335 Send article to be transferred
+ 435 Article not wanted
+ 436 Transfer not possible; try again later
+
+ Subsequent responses
+ 235 Article transferred OK
+ 436 Transfer failed; try again later
+ 437 Transfer rejected; do not retry
+
+ Parameters
+ message-id Article message-id
+
+6.3.2.2. Description
+
+ The IHAVE command informs the server that the client has an article
+ with the specified message-id. If the server desires a copy of that
+ article, a 335 response MUST be returned, instructing the client to
+ send the entire article. If the server does not want the article
+ (if, for example, the server already has a copy of it), a 435
+ response MUST be returned, indicating that the article is not wanted.
+ Finally, if the article isn't wanted immediately but the client
+ should retry later if possible (if, for example, another client is in
+ the process of sending the same article to the server), a 436
+ response MUST be returned.
+
+
+
+
+
+
+Feather Standards Track [Page 58]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ If transmission of the article is requested, the client MUST send the
+ entire article, including headers and body, to the server as a
+ multi-line data block (see Section 3.1.1). Thus, a single dot (".")
+ on a line indicates the end of the text, and lines starting with a
+ dot in the original text have that dot doubled during transmission.
+ The server MUST return a 235 response, indicating that the article
+ was successfully transferred; a 436 response, indicating that the
+ transfer failed but should be tried again later; or a 437 response,
+ indicating that the article was rejected.
+
+ This function differs from the POST command in that it is intended
+ for use in transferring already-posted articles between hosts. It
+ SHOULD NOT be used when the client is a personal news-reading
+ program, since use of this command indicates that the article has
+ already been posted at another site and is simply being forwarded
+ from another host. However, despite this, the server MAY elect not
+ to post or forward the article if, after further examination of the
+ article, it deems it inappropriate to do so. Reasons for such
+ subsequent rejection of an article may include problems such as
+ inappropriate newsgroups or distributions, disc space limitations,
+ article lengths, garbled headers, and the like. These are typically
+ restrictions enforced by the server host's news software and not
+ necessarily by the NNTP server itself.
+
+ The client SHOULD NOT assume that the article has been successfully
+ transferred unless it receives an affirmative response from the
+ server. A lack of response (such as a dropped network connection or
+ a network timeout) SHOULD be treated the same as a 436 response.
+
+ Because some news server software may not immediately be able to
+ determine whether an article is suitable for posting or forwarding,
+ an NNTP server MAY acknowledge the successful transfer of the article
+ (with a 235 response) but later silently discard it.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 59]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+6.3.2.3. Examples
+
+ Example of successfully sending an article to another site:
+
+ [C] IHAVE <i.am.an.article.you.will.want@example.com>
+ [S] 335 Send it; end with <CR-LF>.<CR-LF>
+ [C] Path: pathost!demo!somewhere!not-for-mail
+ [C] From: "Demo User" <nobody@example.com>
+ [C] Newsgroups: misc.test
+ [C] Subject: I am just a test article
+ [C] Date: 6 Oct 1998 04:38:40 -0500
+ [C] Organization: An Example Com, San Jose, CA
+ [C] Message-ID: <i.am.an.article.you.will.want@example.com>
+ [C]
+ [C] This is just a test article.
+ [C] .
+ [S] 235 Article transferred OK
+
+ Example of sending an article to another site that rejects it. Note
+ that the message-id in the IHAVE command is not the same as the one
+ in the article headers; while this is bad practice and SHOULD NOT be
+ done, it is not forbidden.
+
+ [C] IHAVE <i.am.an.article.you.will.want@example.com>
+ [S] 335 Send it; end with <CR-LF>.<CR-LF>
+ [C] Path: pathost!demo!somewhere!not-for-mail
+ [C] From: "Demo User" <nobody@example.com>
+ [C] Newsgroups: misc.test
+ [C] Subject: I am just a test article
+ [C] Date: 6 Oct 1998 04:38:40 -0500
+ [C] Organization: An Example Com, San Jose, CA
+ [C] Message-ID: <i.am.an.article.you.have@example.com>
+ [C]
+ [C] This is just a test article.
+ [C] .
+ [S] 437 Article rejected; don't send again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 60]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of sending an article to another site where the transfer
+ fails:
+
+ [C] IHAVE <i.am.an.article.you.will.want@example.com>
+ [S] 335 Send it; end with <CR-LF>.<CR-LF>
+ [C] Path: pathost!demo!somewhere!not-for-mail
+ [C] From: "Demo User" <nobody@example.com>
+ [C] Newsgroups: misc.test
+ [C] Subject: I am just a test article
+ [C] Date: 6 Oct 1998 04:38:40 -0500
+ [C] Organization: An Example Com, San Jose, CA
+ [C] Message-ID: <i.am.an.article.you.will.want@example.com>
+ [C]
+ [C] This is just a test article.
+ [C] .
+ [S] 436 Transfer failed
+
+ Example of sending an article to a site that already has it:
+
+ [C] IHAVE <i.am.an.article.you.have@example.com>
+ [S] 435 Duplicate
+
+ Example of sending an article to a site that requests that the
+ article be tried again later:
+
+ [C] IHAVE <i.am.an.article.you.defer@example.com>
+ [S] 436 Retry later
+
+7. Information Commands
+
+ This section lists other commands that may be used at any time
+ between the beginning of a session and its termination. Using these
+ commands does not alter any state information, but the response
+ generated from their use may provide useful information to clients.
+
+7.1. DATE
+
+7.1.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ DATE
+
+ Responses
+ 111 yyyymmddhhmmss Server date and time
+
+
+
+
+
+Feather Standards Track [Page 61]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Parameters
+ yyyymmddhhmmss Current UTC date and time on server
+
+7.1.2. Description
+
+ This command exists to help clients find out the current Coordinated
+ Universal Time [TF.686-1] from the server's perspective. This
+ command SHOULD NOT be used as a substitute for NTP [RFC1305] but to
+ provide information that might be useful when using the NEWNEWS
+ command (see Section 7.4).
+
+ The DATE command MUST return a timestamp from the same clock as is
+ used for determining article arrival and group creation times (see
+ Section 6). This clock SHOULD be monotonic, and adjustments SHOULD
+ be made by running it fast or slow compared to "real" time rather
+ than by making sudden jumps. A system providing NNTP service SHOULD
+ keep the system clock as accurate as possible, either with NTP or by
+ some other method.
+
+ The server MUST return a 111 response specifying the date and time on
+ the server in the form yyyymmddhhmmss. This date and time is in
+ Coordinated Universal Time.
+
+7.1.3. Examples
+
+ [C] DATE
+ [S] 111 19990623135624
+
+7.2. HELP
+
+7.2.1. Usage
+
+ This command is mandatory.
+
+ Syntax
+ HELP
+
+ Responses
+ 100 Help text follows (multi-line)
+
+7.2.2. Description
+
+ This command provides a short summary of the commands that are
+ understood by this implementation of the server. The help text will
+ be presented as a multi-line data block following the 100 response
+ code.
+
+
+
+
+
+Feather Standards Track [Page 62]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ This text is not guaranteed to be in any particular format (but must
+ be UTF-8) and MUST NOT be used by clients as a replacement for the
+ CAPABILITIES command described in Section 5.2.
+
+7.2.3. Examples
+
+ [C] HELP
+ [S] 100 Help text follows
+ [S] This is some help text. There is no specific
+ [S] formatting requirement for this test, though
+ [S] it is customary for it to list the valid commands
+ [S] and give a brief definition of what they do.
+ [S] .
+
+7.3. NEWGROUPS
+
+7.3.1. Usage
+
+ Indicating capability: READER
+
+ Syntax
+ NEWGROUPS date time [GMT]
+
+ Responses
+ 231 List of new newsgroups follows (multi-line)
+
+ Parameters
+ date Date in yymmdd or yyyymmdd format
+ time Time in hhmmss format
+
+7.3.2. Description
+
+ This command returns a list of newsgroups created on the server since
+ the specified date and time. The results are in the same format as
+ the LIST ACTIVE command (see Section 7.6.3). However, they MAY
+ include groups not available on the server (and so not returned by
+ LIST ACTIVE) and MAY omit groups for which the creation date is not
+ available.
+
+ The date is specified as 6 or 8 digits in the format [xx]yymmdd,
+ where xx is the first two digits of the year (19-99), yy is the last
+ two digits of the year (00-99), mm is the month (01-12), and dd is
+ the day of the month (01-31). Clients SHOULD specify all four digits
+ of the year. If the first two digits of the year are not specified
+ (this is supported only for backward compatibility), the year is to
+ be taken from the current century if yy is smaller than or equal to
+ the current year, and the previous century otherwise.
+
+
+
+
+Feather Standards Track [Page 63]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ The time is specified as 6 digits in the format hhmmss, where hh is
+ the hours in the 24-hour clock (00-23), mm is the minutes (00-59),
+ and ss is the seconds (00-60, to allow for leap seconds). The token
+ "GMT" specifies that the date and time are given in Coordinated
+ Universal Time [TF.686-1]; if it is omitted, then the date and time
+ are specified in the server's local timezone. Note that there is no
+ way of using the protocol specified in this document to establish the
+ server's local timezone.
+
+ Note that an empty list is a possible valid response and indicates
+ that there are no new newsgroups since that date-time.
+
+ Clients SHOULD make all queries using Coordinated Universal Time
+ (i.e., by including the "GMT" argument) when possible.
+
+7.3.3. Examples
+
+ Example where there are new groups:
+
+ [C] NEWGROUPS 19990624 000000 GMT
+ [S] 231 list of new newsgroups follows
+ [S] alt.rfc-writers.recovery 4 1 y
+ [S] tx.natives.recovery 89 56 y
+ [S] .
+
+ Example where there are no new groups:
+
+ [C] NEWGROUPS 19990624 000000 GMT
+ [S] 231 list of new newsgroups follows
+ [S] .
+
+7.4. NEWNEWS
+
+7.4.1. Usage
+
+ Indicating capability: NEWNEWS
+
+ Syntax
+ NEWNEWS wildmat date time [GMT]
+
+ Responses
+ 230 List of new articles follows (multi-line)
+
+ Parameters
+ wildmat Newsgroups of interest
+ date Date in yymmdd or yyyymmdd format
+ time Time in hhmmss format
+
+
+
+
+Feather Standards Track [Page 64]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+7.4.2. Description
+
+ This command returns a list of message-ids of articles posted or
+ received on the server, in the newsgroups whose names match the
+ wildmat, since the specified date and time. One message-id is sent
+ on each line; the order of the response has no specific significance
+ and may vary from response to response in the same session. A
+ message-id MAY appear more than once; if it does, it has the same
+ meaning as if it appeared only once.
+
+ Date and time are in the same format as the NEWGROUPS command (see
+ Section 7.3).
+
+ Note that an empty list is a possible valid response and indicates
+ that there is currently no new news in the relevant groups.
+
+ Clients SHOULD make all queries in Coordinated Universal Time (i.e.,
+ by using the "GMT" argument) when possible.
+
+7.4.3. Examples
+
+ Example where there are new articles:
+
+ [C] NEWNEWS news.*,sci.* 19990624 000000 GMT
+ [S] 230 list of new articles by message-id follows
+ [S] <i.am.a.new.article@example.com>
+ [S] <i.am.another.new.article@example.com>
+ [S] .
+
+ Example where there are no new articles:
+
+ [C] NEWNEWS alt.* 19990624 000000 GMT
+ [S] 230 list of new articles by message-id follows
+ [S] .
+
+7.5. Time
+
+ As described in Section 6, each article has an arrival timestamp.
+ Each newsgroup also has a creation timestamp. These timestamps are
+ used by the NEWNEWS and NEWGROUP commands to construct their
+ responses.
+
+ Clients can ensure that they do not have gaps in lists of articles or
+ groups by using the DATE command in the following manner:
+
+ First session:
+ Issue DATE command and record result.
+ Issue NEWNEWS command using a previously chosen timestamp.
+
+
+
+Feather Standards Track [Page 65]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Subsequent sessions:
+ Issue DATE command and hold result in temporary storage.
+ Issue NEWNEWS command using timestamp saved from previous session.
+ Overwrite saved timestamp with that currently in temporary
+ storage.
+
+ In order to allow for minor errors, clients MAY want to adjust the
+ timestamp back by two or three minutes before using it in NEWNEWS.
+
+7.5.1. Examples
+
+ First session:
+
+ [C] DATE
+ [S] 111 20010203112233
+ [C] NEWNEWS local.chat 20001231 235959 GMT
+ [S] 230 list follows
+ [S] <article.1@local.service>
+ [S] <article.2@local.service>
+ [S] <article.3@local.service>
+ [S] .
+
+ Second session (the client has subtracted 3 minutes from the
+ timestamp returned previously):
+
+ [C] DATE
+ [S] 111 20010204003344
+ [C] NEWNEWS local.chat 20010203 111933 GMT
+ [S] 230 list follows
+ [S] <article.3@local.service>
+ [S] <article.4@local.service>
+ [S] <article.5@local.service>
+ [S] .
+
+ Note how <article.3@local.service> arrived in the 3 minute gap and so
+ is listed in both responses.
+
+7.6. The LIST Commands
+
+ The LIST family of commands all return information that is multi-line
+ and that can, in general, be expected not to change during the
+ session. Often the information is related to newsgroups, in which
+ case the response has one line per newsgroup and a wildmat MAY be
+ provided to restrict the groups for which information is returned.
+
+ The set of available keywords (including those provided by
+ extensions) is given in the capability list with capability label
+ LIST.
+
+
+
+Feather Standards Track [Page 66]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+7.6.1. LIST
+
+7.6.1.1. Usage
+
+ Indicating capability: LIST
+
+ Syntax
+ LIST [keyword [wildmat|argument]]
+
+ Responses
+ 215 Information follows (multi-line)
+
+ Parameters
+ keyword Information requested [1]
+ argument Specific to keyword
+ wildmat Groups of interest
+
+ [1] If no keyword is provided, it defaults to ACTIVE.
+
+7.6.1.2. Description
+
+ The LIST command allows the server to provide blocks of information
+ to the client. This information may be global or may be related to
+ newsgroups; in the latter case, the information may be returned
+ either for all groups or only for those matching a wildmat. Each
+ block of information is represented by a different keyword. The
+ command returns the specific information identified by the keyword.
+
+ If the information is available, it is returned as a multi-line data
+ block following the 215 response code. The format of the information
+ depends on the keyword. The information MAY be affected by the
+ additional argument, but the format MUST NOT be.
+
+ If the information is based on newsgroups and the optional wildmat
+ argument is specified, the response is limited to only the groups (if
+ any) whose names match the wildmat and for which the information is
+ available.
+
+ Note that an empty list is a possible valid response; for a
+ newsgroup-based keyword, it indicates that there are no groups
+ meeting the above criteria.
+
+ If the keyword is not recognised, or if an argument is specified and
+ the keyword does not expect one, a 501 response code MUST BE
+ returned. If the keyword is recognised but the server does not
+ maintain the information, a 503 response code MUST BE returned.
+
+
+
+
+
+Feather Standards Track [Page 67]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ The LIST command MUST NOT change the visible state of the server in
+ any way; that is, the behaviour of subsequent commands MUST NOT be
+ affected by whether the LIST command was issued. For example, it
+ MUST NOT make groups available that otherwise would not have been.
+
+7.6.1.3. Examples
+
+ Example of LIST with the ACTIVE keyword:
+
+ [C] LIST ACTIVE
+ [S] 215 list of newsgroups follows
+ [S] misc.test 3002322 3000234 y
+ [S] comp.risks 442001 441099 m
+ [S] alt.rfc-writers.recovery 4 1 y
+ [S] tx.natives.recovery 89 56 y
+ [S] tx.natives.recovery.d 11 9 n
+ [S] .
+
+ Example of LIST with no keyword:
+
+ [C] LIST
+ [S] 215 list of newsgroups follows
+ [S] misc.test 3002322 3000234 y
+ [S] comp.risks 442001 441099 m
+ [S] alt.rfc-writers.recovery 4 1 y
+ [S] tx.natives.recovery 89 56 y
+ [S] tx.natives.recovery.d 11 9 n
+ [S] .
+
+ The output is identical to that of the previous example.
+
+ Example of LIST on a newsgroup-based keyword with and without
+ wildmat:
+
+ [C] LIST ACTIVE.TIMES
+ [S] 215 information follows
+ [S] misc.test 930445408 <creatme@isc.org>
+ [S] alt.rfc-writers.recovery 930562309 <m@example.com>
+ [S] tx.natives.recovery 930678923 <sob@academ.com>
+ [S] .
+ [C] LIST ACTIVE.TIMES tx.*
+ [S] 215 information follows
+ [S] tx.natives.recovery 930678923 <sob@academ.com>
+ [S] .
+
+
+
+
+
+
+
+Feather Standards Track [Page 68]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of LIST returning an error where the keyword is recognized
+ but the software does not maintain this information:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] LIST ACTIVE NEWSGROUPS ACTIVE.TIMES XTRA.DATA
+ [S] .
+ [C] LIST XTRA.DATA
+ [S] 503 Data item not stored
+
+ Example of LIST where the keyword is not recognised:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] LIST ACTIVE NEWSGROUPS ACTIVE.TIMES XTRA.DATA
+ [S] .
+ [C] LIST DISTRIB.PATS
+ [S] 501 Syntax Error
+
+7.6.2. Standard LIST Keywords
+
+ This specification defines the following LIST keywords:
+
+ +--------------+---------------+------------------------------------+
+ | Keyword | Definition | Status |
+ +--------------+---------------+------------------------------------+
+ | ACTIVE | Section 7.6.3 | Mandatory if the READER capability |
+ | | | is advertised |
+ | | | |
+ | ACTIVE.TIMES | Section 7.6.4 | Optional |
+ | | | |
+ | DISTRIB.PATS | Section 7.6.5 | Optional |
+ | | | |
+ | HEADERS | Section 8.6 | Mandatory if the HDR capability is |
+ | | | advertised |
+ | | | |
+ | NEWSGROUPS | Section 7.6.6 | Mandatory if the READER capability |
+ | | | is advertised |
+ | | | |
+ | OVERVIEW.FMT | Section 8.4 | Mandatory if the OVER capability |
+ | | | is advertised |
+ +--------------+---------------+------------------------------------+
+
+
+
+
+
+Feather Standards Track [Page 69]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Where one of these LIST keywords is supported by a server, it MUST
+ have the meaning given in the relevant sub-section.
+
+7.6.3. LIST ACTIVE
+
+ This keyword MUST be supported by servers advertising the READER
+ capability.
+
+ LIST ACTIVE returns a list of valid newsgroups and associated
+ information. If no wildmat is specified, the server MUST include
+ every group that the client is permitted to select with the GROUP
+ command (Section 6.1.1). Each line of this list consists of four
+ fields separated from each other by one or more spaces:
+
+ o The name of the newsgroup.
+ o The reported high water mark for the group.
+ o The reported low water mark for the group.
+ o The current status of the group on this server.
+
+ The reported high and low water marks are as described in the GROUP
+ command (see Section 6.1.1), but note that they are in the opposite
+ order to the 211 response to that command.
+
+ The status field is typically one of the following:
+
+ "y" Posting is permitted.
+
+ "n" Posting is not permitted.
+
+ "m" Postings will be forwarded to the newsgroup moderator.
+
+ The server SHOULD use these values when these meanings are required
+ and MUST NOT use them with any other meaning. Other values for the
+ status may exist; the definition of these other values and the
+ circumstances under which they are returned may be specified in an
+ extension or may be private to the server. A client SHOULD treat an
+ unrecognized status as giving no information.
+
+ The status of a newsgroup only indicates how posts to that newsgroup
+ are normally processed and is not necessarily customised to the
+ specific client. For example, if the current client is forbidden
+ from posting, then this will apply equally to groups with status "y".
+ Conversely, a client with special privileges (not defined by this
+ specification) might be able to post to a group with status "n".
+
+
+
+
+
+
+
+Feather Standards Track [Page 70]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ For example:
+
+ [C] LIST ACTIVE
+ [S] 215 list of newsgroups follows
+ [S] misc.test 3002322 3000234 y
+ [S] comp.risks 442001 441099 m
+ [S] alt.rfc-writers.recovery 4 1 y
+ [S] tx.natives.recovery 89 56 y
+ [S] tx.natives.recovery.d 11 9 n
+ [S] .
+
+ or, on an implementation that includes leading zeroes:
+
+ [C] LIST ACTIVE
+ [S] 215 list of newsgroups follows
+ [S] misc.test 0003002322 0003000234 y
+ [S] comp.risks 0000442001 0000441099 m
+ [S] alt.rfc-writers.recovery 0000000004 0000000001 y
+ [S] tx.natives.recovery 0000000089 0000000056 y
+ [S] tx.natives.recovery.d 0000000011 0000000009 n
+ [S] .
+
+ The information is newsgroup based, and a wildmat MAY be specified,
+ in which case the response is limited to only the groups (if any)
+ whose names match the wildmat. For example:
+
+ [C] LIST ACTIVE *.recovery
+ [S] 215 list of newsgroups follows
+ [S] alt.rfc-writers.recovery 4 1 y
+ [S] tx.natives.recovery 89 56 y
+ [S] .
+
+7.6.4. LIST ACTIVE.TIMES
+
+ This keyword is optional.
+
+ The active.times list is maintained by some NNTP servers to contain
+ information about who created a particular newsgroup and when. Each
+ line of this list consists of three fields separated from each other
+ by one or more spaces. The first field is the name of the newsgroup.
+ The second is the time when this group was created on this news
+ server, measured in seconds since the start of January 1, 1970. The
+ third is plain text intended to describe the entity that created the
+ newsgroup; it is often a mailbox as defined in RFC 2822 [RFC2822].
+ For example:
+
+
+
+
+
+
+Feather Standards Track [Page 71]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ [C] LIST ACTIVE.TIMES
+ [S] 215 information follows
+ [S] misc.test 930445408 <creatme@isc.org>
+ [S] alt.rfc-writers.recovery 930562309 <m@example.com>
+ [S] tx.natives.recovery 930678923 <sob@academ.com>
+ [S] .
+
+ The list MAY omit newsgroups for which the information is unavailable
+ and MAY include groups not available on the server; in particular, it
+ MAY omit all groups created before the date and time of the oldest
+ entry. The client MUST NOT assume that the list is complete or that
+ it matches the list returned by the LIST ACTIVE command
+ (Section 7.6.3). The NEWGROUPS command (Section 7.3) may provide a
+ better way to access this information, and the results of the two
+ commands SHOULD be consistent except that, if the latter is invoked
+ with a date and time earlier than the oldest entry in active.times
+ list, its result may include extra groups.
+
+ The information is newsgroup based, and a wildmat MAY be specified,
+ in which case the response is limited to only the groups (if any)
+ whose names match the wildmat.
+
+7.6.5. LIST DISTRIB.PATS
+
+ This keyword is optional.
+
+ The distrib.pats list is maintained by some NNTP servers to assist
+ clients to choose a value for the content of the Distribution header
+ of a news article being posted. Each line of this list consists of
+ three fields separated from each other by a colon (":"). The first
+ field is a weight, the second field is a wildmat (which may be a
+ simple newsgroup name), and the third field is a value for the
+ Distribution header content. For example:
+
+ [C] LIST DISTRIB.PATS
+ [S] 215 information follows
+ [S] 10:local.*:local
+ [S] 5:*:world
+ [S] 20:local.here.*:thissite
+ [S] .
+
+ The client MAY use this information to construct an appropriate
+ Distribution header given the name of a newsgroup. To do so, it
+ should determine the lines whose second field matches the newsgroup
+ name, select from among them the line with the highest weight (with 0
+ being the lowest), and use the value of the third field to construct
+ the Distribution header.
+
+
+
+
+Feather Standards Track [Page 72]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ The information is not newsgroup based, and an argument MUST NOT be
+ specified.
+
+7.6.6. LIST NEWSGROUPS
+
+ This keyword MUST be supported by servers advertising the READER
+ capability.
+
+ The newsgroups list is maintained by NNTP servers to contain the name
+ of each newsgroup that is available on the server and a short
+ description about the purpose of the group. Each line of this list
+ consists of two fields separated from each other by one or more space
+ or TAB characters (the usual practice is a single TAB). The first
+ field is the name of the newsgroup, and the second is a short
+ description of the group. For example:
+
+ [C] LIST NEWSGROUPS
+ [S] 215 information follows
+ [S] misc.test General Usenet testing
+ [S] alt.rfc-writers.recovery RFC Writers Recovery
+ [S] tx.natives.recovery Texas Natives Recovery
+ [S] .
+
+ The list MAY omit newsgroups for which the information is unavailable
+ and MAY include groups not available on the server. The client MUST
+ NOT assume that the list is complete or that it matches the list
+ returned by LIST ACTIVE.
+
+ The description SHOULD be in UTF-8. However, servers often obtain
+ the information from external sources. These sources may have used
+ different encodings (ones that use octets in the range 128 to 255 in
+ some other manner) and, in that case, the server MAY pass it on
+ unchanged. Therefore, clients MUST be prepared to receive such
+ descriptions.
+
+ The information is newsgroup based, and a wildmat MAY be specified,
+ in which case the response is limited to only the groups (if any)
+ whose names match the wildmat.
+
+8. Article Field Access Commands
+
+ This section lists commands that may be used to access specific
+ article fields; that is, headers of articles and metadata about
+ articles. These commands typically fetch data from an "overview
+ database", which is a database of headers extracted from incoming
+ articles plus metadata determined as the article arrives. Only
+ certain fields are included in the database.
+
+
+
+
+Feather Standards Track [Page 73]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ This section is based on the Overview/NOV database [ROBE1995]
+ developed by Geoff Collyer.
+
+8.1. Article Metadata
+
+ Article "metadata" is data about articles that does not occur within
+ the article itself. Each metadata item has a name that MUST begin
+ with a colon (and that MUST NOT contain a colon elsewhere within it).
+ As with header names, metadata item names are not case sensitive.
+
+ When generating a metadata item, the server MUST compute it for
+ 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
+ assumed to specify the correct number of lines or bytes in the
+ 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 article retrieved during the same session.
+
+ This specification defines two metadata items: ":bytes" and ":lines".
+ Other metadata items may be defined by extensions. The names of
+ metadata items defined by registered extensions MUST NOT begin with
+ ":x-". To avoid the risk of a clash with a future registered
+ extension, the names of metadata items defined by private extensions
+ SHOULD begin with ":x-".
+
+8.1.1. The :bytes Metadata Item
+
+ The :bytes metadata item for an article is a decimal integer. It
+ SHOULD equal the number of octets in the entire article: headers,
+ body, and separating empty line (counting a CRLF pair as two octets,
+ and excluding both the "." CRLF terminating the response and any "."
+ added for "dot-stuffing" purposes).
+
+ Note to client implementers: some existing servers return a value
+ different from that above. The commonest reasons for this are as
+ follows:
+
+ o Counting a CRLF pair as one octet.
+
+ o Including the "." character used for dot-stuffing in the number.
+
+ o Including the terminating "." CRLF in the number.
+
+ o Using one copy of an article for counting the octets but then
+ returning another one that differs in some (permitted) manner.
+
+ Implementations should be prepared for such variation and MUST NOT
+ rely on the value being accurate.
+
+
+
+Feather Standards Track [Page 74]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+8.1.2. The :lines Metadata Item
+
+ The :lines metadata item for an article is a decimal integer. It
+ MUST equal the number of lines in the article body (excluding the
+ empty line separating headers and body). Equivalently, it is two
+ less than the number of CRLF pairs that the BODY command would return
+ for that article (the extra two are those following the response code
+ and the termination octet).
+
+8.2. Database Consistency
+
+ The information stored in the overview database may change over time.
+ If the database records the content or absence of a given field (that
+ is, a header or metadata item) for all articles, it is said to be
+ "consistent" for that field. If it records the content of a header
+ for some articles but not for others that nevertheless included that
+ header, or if it records a metadata item for some articles but not
+ for others to which that item applies, it is said to be
+ "inconsistent" for that field.
+
+ The LIST OVERVIEW.FMT command SHOULD list all the fields for which
+ the database is consistent at that moment. It MAY omit such fields
+ (for example, if it is not known whether the database is consistent
+ or inconsistent). It MUST NOT include fields for which the database
+ is inconsistent or that are not stored in the database. Therefore,
+ if a header appears in the LIST OVERVIEW.FMT output but not in the
+ OVER output for a given article, that header does not appear in the
+ article (similarly for metadata items).
+
+ These rules assume that the fields being stored in the database
+ remain constant for long periods of time, and therefore the database
+ will be consistent. When the set of fields to be stored is changed,
+ it will be inconsistent until either the database is rebuilt or the
+ only articles remaining are those received since the change.
+ Therefore, the output from LIST OVERVIEW.FMT needs to be altered
+ twice. Firstly, before any fields stop being stored they MUST be
+ removed from the output; then, when the database is once more known
+ to be consistent, the new fields SHOULD be added to the output.
+
+ If the HDR command uses the overview database rather than taking
+ information directly from the articles, the same issues of
+ consistency and inconsistency apply, and the LIST HEADERS command
+ SHOULD take the same approach as the LIST OVERVIEW.FMT command in
+ resolving them.
+
+
+
+
+
+
+
+Feather Standards Track [Page 75]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+8.3. OVER
+
+8.3.1. Usage
+
+ Indicating capability: OVER
+
+ Syntax
+ OVER message-id
+ OVER range
+ OVER
+
+ Responses
+
+ First form (message-id specified)
+ 224 Overview information follows (multi-line)
+ 430 No article with that message-id
+
+ Second form (range specified)
+ 224 Overview information follows (multi-line)
+ 412 No newsgroup selected
+ 423 No articles in that range
+
+ Third form (current article number used)
+ 224 Overview information follows (multi-line)
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+
+ Parameters
+ range Number(s) of articles
+ message-id Message-id of article
+
+8.3.2. Description
+
+ The OVER command returns the contents of all the fields in the
+ database for an article specified by message-id, or from a specified
+ article or range of articles in the currently selected newsgroup.
+
+ The message-id argument indicates a specific article. The range
+ argument may be any of the following:
+
+ o An article number.
+
+ o An article number followed by a dash to indicate all following.
+
+ o An article number followed by a dash followed by another article
+ number.
+
+ If neither is specified, the current article number is used.
+
+
+
+Feather Standards Track [Page 76]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Support for the first (message-id) form is optional. If it is
+ supported, the OVER capability line MUST include the argument
+ "MSGID". Otherwise, the capability line MUST NOT include this
+ argument, and the OVER command MUST return the generic response code
+ 503 when this form is used.
+
+ If the information is available, it is returned as a multi-line data
+ block following the 224 response code and contains one line per
+ article, sorted in numerical order of article number. (Note that
+ unless the argument is a range including a dash, there will be
+ exactly one line in the data block.) Each line 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 of trailing TABs may
+ be omitted.
+
+ The first 8 fields MUST be the following, in order:
+
+ "0" or article number (see below)
+ Subject header content
+ From header content
+ Date header content
+ Message-ID header content
+ References header content
+ :bytes metadata item
+ :lines metadata item
+
+ 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 currently selected newsgroup and the article is present
+ in that group, the server MAY use the article's number in that group.
+ (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
+ metadata held in the database.
+
+ 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
+ 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 the two mandatory metadata items, the content of the field MUST
+ be just the value, with no other text.
+
+ For all subsequent fields that contain headers, the content MUST be
+ the entire header line other than the trailing CRLF. For all
+ subsequent fields that contain metadata, the field consists of the
+ metadata name, a single space, and then the value.
+
+
+
+Feather Standards Track [Page 77]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ For all fields, the value is processed by first removing all CRLF
+ pairs (that is, undoing any folding and removing the terminating
+ CRLF) and then replacing each TAB with a single space. If there is
+ no such header in the article, no such metadata item, or no header or
+ item stored in the database for that article, the corresponding field
+ MUST be empty.
+
+ Note that, after unfolding, the characters NUL, LF, and CR cannot
+ occur in the header of an article offered by a conformant server.
+ Nevertheless, servers SHOULD check for these characters and replace
+ 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
+ unfolding process). This will encourage robustness in the face of
+ non-conforming data; it is also possible that future versions of this
+ specification could permit these characters to appear in articles.
+
+ The server SHOULD NOT produce output for articles that no longer
+ exist.
+
+ 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
+ and the currently selected newsgroup is invalid, a 412 response MUST
+ be returned. If the argument is a range and no articles in that
+ number range exist in the currently selected newsgroup, including the
+ case where the second number is less than the first one, a 423
+ response MUST be returned. If the argument is omitted and the
+ current article number is invalid, a 420 response MUST be returned.
+
+8.3.3. Examples
+
+ In the first four examples, TAB has been replaced by vertical bar and
+ some lines have been folded for readability.
+
+ Example of a successful retrieval of overview information for an
+ article (explicitly not using an article number):
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] OVER
+ [S] 224 Overview information follows
+ [S] 3000234|I am just a test article|"Demo User"
+ <nobody@example.com>|6 Oct 1998 04:38:40 -0500|
+ <45223423@example.com>|<45454@example.net>|1234|
+ 17|Xref: news.example.com misc.test:3000363
+ [S] .
+
+
+
+
+
+
+Feather Standards Track [Page 78]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of a successful retrieval of overview information for an
+ article by message-id:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] OVER MSGID
+ [S] LIST ACTIVE NEWSGROUPS OVERVIEW.FMT
+ [S] .
+ [C] OVER <45223423@example.com>
+ [S] 224 Overview information follows
+ [S] 0|I am just a test article|"Demo User"
+ <nobody@example.com>|6 Oct 1998 04:38:40 -0500|
+ <45223423@example.com>|<45454@example.net>|1234|
+ 17|Xref: news.example.com misc.test:3000363
+ [S] .
+
+ Note that the article number has been replaced by "0".
+
+ Example of the same commands on a system that does not implement
+ retrieval by message-id:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] OVER
+ [S] LIST ACTIVE NEWSGROUPS OVERVIEW.FMT
+ [S] .
+ [C] OVER <45223423@example.com>
+ [S] 503 Overview by message-id unsupported
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 79]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of a successful retrieval of overview information for a range
+ of articles:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] OVER 3000234-3000240
+ [S] 224 Overview information follows
+ [S] 3000234|I am just a test article|"Demo User"
+ <nobody@example.com>|6 Oct 1998 04:38:40 -0500|
+ <45223423@example.com>|<45454@example.net>|1234|
+ 17|Xref: news.example.com misc.test:3000363
+ [S] 3000235|Another test article|nobody@nowhere.to
+ (Demo User)|6 Oct 1998 04:38:45 -0500|<45223425@to.to>||
+ 4818|37||Distribution: fi
+ [S] 3000238|Re: I am just a test article|somebody@elsewhere.to|
+ 7 Oct 1998 11:38:40 +1200|<kfwer3v@elsewhere.to>|
+ <45223423@to.to>|9234|51
+ [S] .
+
+ Note the missing "References" and Xref headers in the second line,
+ the missing trailing fields in the first and last lines, and that
+ there are only results for those articles that still exist.
+
+ Example of an unsuccessful retrieval of overview information on an
+ article by number:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] OVER 300256
+ [S] 423 No such article in this group
+
+ Example of an invalid range:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] OVER 3000444-3000222
+ [S] 423 Empty range
+
+ Example of an unsuccessful retrieval of overview information by
+ number because no newsgroup was selected first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] OVER
+ [S] 412 No newsgroup selected
+
+
+
+
+
+
+
+Feather Standards Track [Page 80]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an attempt to retrieve information when the currently
+ selected newsgroup is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] OVER
+ [S] 420 No current article selected
+
+8.4. LIST OVERVIEW.FMT
+
+8.4.1. Usage
+
+ Indicating capability: OVER
+
+ Syntax
+ LIST OVERVIEW.FMT
+
+ Responses
+ 215 Information follows (multi-line)
+
+8.4.2. Description
+
+ See Section 7.6.1 for general requirements of the LIST command.
+
+ The LIST OVERVIEW.FMT command returns a description of the fields in
+ the database for which it is consistent (as described above). The
+ information is returned as a multi-line data block following the 215
+ response code. The information contains one line per field in the
+ order in which they are returned by the OVER command; the first 7
+ lines MUST (except for the case of letters) be exactly as follows:
+
+ Subject:
+ From:
+ Date:
+ Message-ID:
+ References:
+ :bytes
+ :lines
+
+ For compatibility with existing implementations, the last two lines
+ MAY instead be:
+
+ Bytes:
+ Lines:
+
+ even though they refer to metadata, not headers.
+
+
+
+
+
+Feather Standards Track [Page 81]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ All subsequent lines MUST consist of either a header name followed by
+ ":full", or the name of a piece of metadata.
+
+ There are no leading or trailing spaces in the output.
+
+ Note that the 7 fixed lines describe the 2nd to 8th fields of the
+ OVER output. The "full" suffix (which may use either uppercase,
+ lowercase, or a mix) is a reminder that the corresponding fields
+ include the header name.
+
+ This command MAY generate different results if it is used more than
+ once in a session.
+
+ If the OVER command is not implemented, the meaning of the output
+ from this command is not specified, but it must still meet the above
+ syntactic requirements.
+
+8.4.3. Examples
+
+ Example of LIST OVERVIEW.FMT output corresponding to the example OVER
+ output above, in the preferred format:
+
+ [C] LIST OVERVIEW.FMT
+ [S] 215 Order of fields in overview database.
+ [S] Subject:
+ [S] From:
+ [S] Date:
+ [S] Message-ID:
+ [S] References:
+ [S] :bytes
+ [S] :lines
+ [S] Xref:full
+ [S] Distribution:full
+ [S] .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 82]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of LIST OVERVIEW.FMT output corresponding to the example OVER
+ output above, in the alternative format:
+
+ [C] LIST OVERVIEW.FMT
+ [S] 215 Order of fields in overview database.
+ [S] Subject:
+ [S] From:
+ [S] Date:
+ [S] Message-ID:
+ [S] References:
+ [S] Bytes:
+ [S] Lines:
+ [S] Xref:FULL
+ [S] Distribution:FULL
+ [S] .
+
+8.5. HDR
+
+8.5.1. Usage
+
+ Indicating capability: HDR
+
+ Syntax
+ HDR field message-id
+ HDR field range
+ HDR field
+
+ Responses
+
+ First form (message-id specified)
+ 225 Headers follow (multi-line)
+ 430 No article with that message-id
+
+ Second form (range specified)
+ 225 Headers follow (multi-line)
+ 412 No newsgroup selected
+ 423 No articles in that range
+
+ Third form (current article number used)
+ 225 Headers follow (multi-line)
+ 412 No newsgroup selected
+ 420 Current article number is invalid
+
+ Parameters
+ field Name of field
+ range Number(s) of articles
+ message-id Message-id of article
+
+
+
+
+Feather Standards Track [Page 83]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+8.5.2. Description
+
+ The HDR command provides access to specific fields from an article
+ specified by message-id, or from a specified article or range of
+ articles in the currently selected newsgroup. It MAY take the
+ information directly from the articles or from the overview database.
+ In the case of headers, an implementation MAY restrict the use of
+ this command to a specific list of headers or MAY allow it to be used
+ with any header; it may behave differently when it is used with a
+ message-id argument and when it is used with a range or no argument.
+
+ The required field argument is the name of a header with the colon
+ omitted (e.g., "subject") or the name of a metadata item including
+ the leading colon (e.g., ":bytes"), and is case insensitive.
+
+ The message-id argument indicates a specific article. The range
+ argument may be any of the following:
+
+ o An article number.
+
+ o An article number followed by a dash to indicate all following.
+
+ o An article number followed by a dash followed by another article
+ number.
+
+ If neither is specified, the current article number is used.
+
+ If the information is available, it is returned as a multi-line data
+ block following the 225 response code and contains one line for each
+ article in the range that exists. (Note that unless the argument is
+ a range including a dash, there will be exactly one line in the data
+ block.) The line consists of the article number, a space, and then
+ the contents of the field. In the case of a header, the header name,
+ the colon, and the first space after the colon are all omitted.
+
+ 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 currently selected newsgroup and the article is present
+ in that group, the server MAY use the article's number in that group.
+ (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,
+ and then each TAB is replaced with a single space. (Note that this
+ is the same transformation as is performed by the OVER command
+ (Section 8.3.2), and the same comment concerning NUL, CR, and LF
+ applies.)
+
+
+
+Feather Standards Track [Page 84]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Note the distinction between headers and metadata appearing to have
+ the same meaning. Headers are always taken unchanged from the
+ article; metadata are always calculated. For example, a request for
+ "Lines" returns the contents of the "Lines" header of the specified
+ articles, if any, no matter whether they accurately state the number
+ of lines, while a request for ":lines" returns the line count
+ metadata, which is always the actual number of lines irrespective of
+ what any header may state.
+
+ If the requested header is not present in the article, or if it is
+ present but empty, a line for that article is included in the output,
+ but the header content portion of the line is empty (the space after
+ the article number MAY be retained or omitted). If the header occurs
+ in a given article more than once, only the content of the first
+ occurrence is returned by HDR. If any article number in the provided
+ range does not exist in the group, no line for that article number is
+ included in the output.
+
+ If the second argument is a message-id and no such article exists, a
+ 430 response MUST be returned. If the second argument is a range or
+ is omitted and the currently selected newsgroup is invalid, a 412
+ response MUST be returned. If the second argument is a range and no
+ articles in that number range exist in the currently selected
+ newsgroup, including the case where the second number is less than
+ the first one, a 423 response MUST be returned. If the second
+ argument is omitted and the current article number is invalid, a 420
+ response MUST be returned.
+
+ A server MAY only allow HDR commands for a limited set of fields; it
+ may behave differently in this respect for the first (message-id)
+ form from how it would for the other forms. If so, it MUST respond
+ with the generic 503 response to attempts to request other fields,
+ rather than return erroneous results, such as a successful empty
+ response.
+
+ If HDR uses the overview database and it is inconsistent for the
+ requested field, the server MAY return what results it can, or it MAY
+ respond with the generic 503 response. In the latter case, the field
+ MUST NOT appear in the output from LIST HEADERS.
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 85]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+8.5.3. Examples
+
+ Example of a successful retrieval of subject lines from a range of
+ articles (3000235 has no Subject header, and 3000236 is missing):
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] HDR Subject 3000234-3000238
+ [S] 225 Headers follow
+ [S] 3000234 I am just a test article
+ [S] 3000235
+ [S] 3000237 Re: I am just a test article
+ [S] 3000238 Ditto
+ [S] .
+
+ Example of a successful retrieval of line counts from a range of
+ articles:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] HDR :lines 3000234-3000238
+ [S] 225 Headers follow
+ [S] 3000234 42
+ [S] 3000235 5
+ [S] 3000237 11
+ [S] 3000238 2378
+ [S] .
+
+ Example of a successful retrieval of the subject line from an article
+ by message-id:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] HDR subject <i.am.a.test.article@example.com>
+ [S] 225 Header information follows
+ [S] 0 I am just a test article
+ [S] .
+
+ Example of a successful retrieval of the subject line from the
+ current article:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] HDR subject
+ [S] 225 Header information follows
+ [S] 3000234 I am just a test article
+ [S] .
+
+
+
+
+Feather Standards Track [Page 86]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an unsuccessful retrieval of a header from an article by
+ message-id:
+
+ [C] HDR subject <i.am.not.there@example.com>
+ [S] 430 No Such Article Found
+
+ Example of an unsuccessful retrieval of headers from articles by
+ number because no newsgroup was selected first:
+
+ [Assumes currently selected newsgroup is invalid.]
+ [C] HDR subject 300256-
+ [S] 412 No newsgroup selected
+
+ Example of an unsuccessful retrieval of headers because the currently
+ selected newsgroup is empty:
+
+ [C] GROUP example.empty.newsgroup
+ [S] 211 0 0 0 example.empty.newsgroup
+ [C] HDR subject 1-
+ [S] 423 No articles in that range
+
+ Example of an unsuccessful retrieval of headers because the server
+ does not allow HDR commands for that header:
+
+ [C] GROUP misc.test
+ [S] 211 1234 3000234 3002322 misc.test
+ [C] HDR Content-Type 3000234-3000238
+ [S] 503 HDR not permitted on Content-Type
+
+8.6. LIST HEADERS
+
+8.6.1. Usage
+
+ Indicating capability: HDR
+
+ Syntax
+ LIST HEADERS [MSGID|RANGE]
+
+ Responses
+ 215 Field list follows (multi-line)
+
+ Parameters
+ MSGID Requests list for access by message-id
+ RANGE Requests list for access by range
+
+
+
+
+
+
+
+Feather Standards Track [Page 87]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+8.6.2. Description
+
+ See Section 7.6.1 for general requirements of the LIST command.
+
+ The LIST HEADERS command returns a list of fields that may be
+ retrieved using the HDR command.
+
+ The information is returned as a multi-line data block following the
+ 215 response code and contains one line for each field name
+ (excluding the trailing colon for headers and including the leading
+ colon for metadata items). If the implementation allows any header
+ to be retrieved, it MUST NOT include any header names in the list but
+ MUST include the special entry ":" (a single colon on its own). It
+ MUST still explicitly list any metadata items that are available.
+ The order of items in the list is not significant; the server need
+ not even consistently return the same order. The list MAY be empty
+ (though in this circumstance there is little point in providing the
+ HDR command).
+
+ An implementation that also supports the OVER command SHOULD at least
+ permit all the headers and metadata items listed in the output from
+ the LIST OVERVIEW.FMT command.
+
+ If the server treats the first form of the HDR command (message-id
+ specified) differently from the other two forms (range specified or
+ current article number used) in respect of which headers or metadata
+ items are available, then the following apply:
+
+ o If the MSGID argument is specified, the results MUST be those
+ available for the first form of the HDR command.
+
+ o If the RANGE argument is specified, the results MUST be those
+ available for the second and third forms of the HDR command.
+
+ o If no argument is specified, the results MUST be those available
+ in all forms of the HDR command (that is, it MUST only list those
+ items listed in both the previous cases).
+
+ If the server does not treat the various forms differently, then it
+ MUST ignore any argument and always produce the same results (though
+ not necessarily always in the same order).
+
+ If the HDR command is not implemented, the meaning of the output from
+ this command is not specified, but it must still meet the above
+ syntactic requirements.
+
+
+
+
+
+
+Feather Standards Track [Page 88]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+8.6.3. Examples
+
+ Example of an implementation providing access to only a few headers:
+
+ [C] LIST HEADERS
+ [S] 215 headers supported:
+ [S] Subject
+ [S] Message-ID
+ [S] Xref
+ [S] .
+
+ Example of an implementation providing access to the same fields as
+ the first example in Section 8.4.3:
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] OVER
+ [S] HDR
+ [S] LIST ACTIVE NEWSGROUPS HEADERS OVERVIEW.FMT
+ [S] .
+ [C] LIST HEADERS
+ [S] 215 headers and metadata items supported:
+ [S] Date
+ [S] Distribution
+ [S] From
+ [S] Message-ID
+ [S] References
+ [S] Subject
+ [S] Xref
+ [S] :bytes
+ [S] :lines
+ [S] .
+
+ Example of an implementation providing access to all headers:
+
+ [C] LIST HEADERS
+ [S] 215 metadata items supported:
+ [S] :
+ [S] :lines
+ [S] :bytes
+ [S] :x-article-number
+ [S] .
+
+
+
+
+
+
+
+Feather Standards Track [Page 89]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Example of an implementation distinguishing the first form of the HDR
+ command from the other two forms:
+
+ [C] LIST HEADERS RANGE
+ [S] 215 metadata items supported:
+ [S] :
+ [S] :lines
+ [S] :bytes
+ [S] .
+ [C] LIST HEADERS MSGID
+ [S] 215 headers and metadata items supported:
+ [S] Date
+ [S] Distribution
+ [S] From
+ [S] Message-ID
+ [S] References
+ [S] Subject
+ [S] :lines
+ [S] :bytes
+ [S] :x-article-number
+ [S] .
+ [C] LIST HEADERS
+ [S] 215 headers and metadata items supported:
+ [S] Date
+ [S] Distribution
+ [S] From
+ [S] Message-ID
+ [S] References
+ [S] Subject
+ [S] :lines
+ [S] :bytes
+ [S] .
+
+ Note that :x-article-number does not appear in the last set of
+ output.
+
+9. Augmented BNF Syntax for NNTP
+
+9.1. Introduction
+
+ Each of the following sections describes the syntax of a major
+ element of NNTP. This syntax extends and refines the descriptions
+ elsewhere in this specification and should be given precedence when
+ resolving apparent conflicts. Note that ABNF [RFC4234] strings are
+ case insensitive. Non-terminals used in several places are defined
+ in a separate section at the end.
+
+
+
+
+
+Feather Standards Track [Page 90]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Between them, the non-terminals <command-line>, <command-datastream>,
+ <command-continuation>, and <response> specify the text that flows
+ between client and server. A consistent naming scheme is used in
+ this document for the non-terminals relating to each command, and
+ SHOULD be used by the specification of registered extensions.
+
+ For each command, the sequence is as follows:
+
+ o The client sends an instance of <command-line>; the syntax for the
+ EXAMPLE command is <example-command>.
+
+ o If the client is one that immediately streams data, it sends an
+ instance of <command-datastream>; the syntax for the EXAMPLE
+ command is <example-datastream>.
+
+ o The server sends an instance of <response>.
+
+ * The initial response line is independent of the command that
+ generated it; if the 000 response has arguments, the syntax of
+ the initial line is <response-000-content>.
+
+ * If the response is multi-line, the initial line is followed by
+ a <multi-line-data-block>. The syntax for the contents of this
+ block after "dot-stuffing" has been removed is (for the 000
+ response to the EXAMPLE command) <example-000-ml-content> and
+ is an instance of <multi-line-response-content>.
+
+ o While the latest response is one that indicates more data is
+ required (in general, a 3xx response):
+
+ * the client sends an instance of <command-continuation>; the
+ syntax for the EXAMPLE continuation following a 333 response is
+ <example-333-continuation>;
+
+ * the server sends another instance of <response>, as above.
+
+ (There are no commands in this specification that immediately stream
+ data, but this non-terminal is defined for the convenience of
+ extensions.)
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 91]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+9.2. Commands
+
+ This syntax defines the non-terminal <command-line>, which represents
+ what is sent from the client to the server (see section 3.1 for
+ limits on lengths).
+
+ command-line = command EOL
+ command = X-command
+ X-command = keyword *(WS token)
+
+ command =/ article-command /
+ body-command /
+ capabilities-command /
+ date-command /
+ group-command /
+ hdr-command /
+ head-command /
+ help-command /
+ ihave-command /
+ last-command /
+ list-command /
+ listgroup-command /
+ mode-reader-command /
+ newgroups-command /
+ newnews-command /
+ next-command /
+ over-command /
+ post-command /
+ quit-command /
+ stat-command
+
+ article-command = "ARTICLE" [WS article-ref]
+ body-command = "BODY" [WS article-ref]
+ capabilities-command = "CAPABILITIES" [WS keyword]
+ date-command = "DATE"
+ group-command = "GROUP" [WS newsgroup-name]
+ hdr-command = "HDR" WS header-meta-name [WS range-ref]
+ head-command = "HEAD" [WS article-ref]
+ help-command = "HELP"
+ ihave-command = "IHAVE" WS message-id
+ last-command = "LAST"
+ list-command = "LIST" [WS list-arguments]
+ listgroup-command = "LISTGROUP" [WS newsgroup-name [WS range]]
+ mode-reader-command = "MODE" WS "READER"
+ newgroups-command = "NEWGROUPS" WS date-time
+ newnews-command = "NEWNEWS" WS wildmat WS date-time
+ next-command = "NEXT"
+ over-command = "OVER" [WS range-ref]
+
+
+
+Feather Standards Track [Page 92]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ post-command = "POST"
+ quit-command = "QUIT"
+ stat-command = "STAT" [WS article-ref]
+
+ article-ref = article-number / message-id
+ date = date2y / date4y
+ date4y = 4DIGIT 2DIGIT 2DIGIT
+ date2y = 2DIGIT 2DIGIT 2DIGIT
+ date-time = date WS time [WS "GMT"]
+ header-meta-name = header-name / metadata-name
+ list-arguments = keyword [WS token]
+ metadata-name = ":" 1*A-NOTCOLON
+ range = article-number ["-" [article-number]]
+ range-ref = range / message-id
+ time = 2DIGIT 2DIGIT 2DIGIT
+
+9.3. Command Continuation
+
+ This syntax defines the further material sent by the client in the
+ case of multi-stage commands and those that stream data.
+
+ command-datastream = UNDEFINED
+ ; not used, provided as a hook for extensions
+ command-continuation = ihave-335-continuation /
+ post-340-continuation
+
+ ihave-335-continuation = encoded-article
+ post-340-continuation = encoded-article
+
+ encoded-article = multi-line-data-block
+ ; after undoing the "dot-stuffing", this MUST match <article>
+
+9.4. Responses
+
+9.4.1. Generic Responses
+
+ This syntax defines the non-terminal <response>, which represents the
+ generic form of responses; that is, what is sent from the server to
+ the client in response to a <command> or a <command-continuation>.
+
+ response = simple-response / multi-line-response
+ simple-response = initial-response-line
+ multi-line-response = initial-response-line multi-line-data-block
+
+ initial-response-line =
+ initial-response-content [SP trailing-comment] CRLF
+ initial-response-content = X-initial-response-content
+ X-initial-response-content = 3DIGIT *(SP response-argument)
+
+
+
+Feather Standards Track [Page 93]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ response-argument = 1*A-CHAR
+ trailing-comment = *U-CHAR
+
+9.4.2. Initial Response Line Contents
+
+ This syntax defines the specific initial response lines for the
+ various commands in this specification (see section 3.1 for limits on
+ lengths). Only those response codes with arguments are listed.
+
+ initial-response-content =/ response-111-content /
+ response-211-content /
+ response-220-content /
+ response-221-content /
+ response-222-content /
+ response-223-content /
+ response-401-content
+
+ response-111-content = "111" SP date4y time
+ response-211-content = "211" 3(SP article-number) SP newsgroup-name
+ response-220-content = "220" SP article-number SP message-id
+ response-221-content = "221" SP article-number SP message-id
+ response-222-content = "222" SP article-number SP message-id
+ response-223-content = "223" SP article-number SP message-id
+ response-401-content = "401" SP capability-label
+
+9.4.3. Multi-line Response Contents
+
+ This syntax defines the content of the various multi-line responses;
+ more precisely, it defines the part of the response in the multi-line
+ data block after any "dot-stuffing" has been undone. The numeric
+ portion of each non-terminal name indicates the response code that is
+ followed by this data.
+
+ multi-line-response-content = article-220-ml-content /
+ body-222-ml-content /
+ capabilities-101-ml-content /
+ hdr-225-ml-content /
+ head-221-ml-content /
+ help-100-ml-content /
+ list-215-ml-content /
+ listgroup-211-ml-content /
+ newgroups-231-ml-content /
+ newnews-230-ml-content /
+ over-224-ml-content
+
+ article-220-ml-content = article
+ body-222-ml-content = body
+ capabilities-101-ml-content = version-line CRLF
+
+
+
+Feather Standards Track [Page 94]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ *(capability-line CRLF)
+ hdr-225-ml-content = *(article-number SP hdr-content CRLF)
+ head-221-ml-content = 1*header
+ help-100-ml-content = *(*U-CHAR CRLF)
+ list-215-ml-content = list-content
+ listgroup-211-ml-content = *(article-number CRLF)
+ newgroups-231-ml-content = active-groups-list
+ newnews-230-ml-content = *(message-id CRLF)
+ over-224-ml-content = *(article-number over-content CRLF)
+
+ active-groups-list = *(newsgroup-name SPA article-number
+ SPA article-number SPA newsgroup-status CRLF)
+ hdr-content = *S-NONTAB
+ hdr-n-content = [(header-name ":" / metadata-name) SP hdr-content]
+ list-content = body
+ newsgroup-status = %x79 / %x6E / %x6D / private-status
+ over-content = 1*6(TAB hdr-content) /
+ 7(TAB hdr-content) *(TAB hdr-n-content)
+ private-status = token ; except the values in newsgroup-status
+
+9.5. Capability Lines
+
+ This syntax defines the generic form of a capability line in the
+ capabilities list (see Section 3.3.1).
+
+ capability-line = capability-entry
+ capability-entry = X-capability-entry
+ X-capability-entry = capability-label *(WS capability-argument)
+ capability-label = keyword
+ capability-argument = token
+
+ This syntax defines the specific capability entries for the
+ capabilities in this specification.
+
+ capability-entry =/
+ hdr-capability /
+ ihave-capability /
+ implementation-capability /
+ list-capability /
+ mode-reader-capability /
+ newnews-capability /
+ over-capability /
+ post-capability /
+ reader-capability
+
+ hdr-capability = "HDR"
+ ihave-capability = "IHAVE"
+ implementation-capability = "IMPLEMENTATION" *(WS token)
+
+
+
+Feather Standards Track [Page 95]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ list-capability = "LIST" 1*(WS keyword)
+ mode-reader-capability = "MODE-READER"
+ newnews-capability = "NEWNEWS"
+ over-capability = "OVER" [WS "MSGID"]
+ post-capability = "POST"
+ reader-capability = "READER"
+
+ version-line = "VERSION" 1*(WS version-number)
+ version-number = nzDIGIT *5DIGIT
+
+9.6. LIST Variants
+
+ This section defines more specifically the keywords for the LIST
+ command and the syntax of the corresponding response contents.
+
+ ; active
+ list-arguments =/ "ACTIVE" [WS wildmat]
+ list-content =/ list-active-content
+ list-active-content = active-groups-list
+
+
+ ; active.times
+ list-arguments =/ "ACTIVE.TIMES" [WS wildmat]
+ list-content =/ list-active-times-content
+ list-active-times-content =
+ *(newsgroup-name SPA 1*DIGIT SPA newsgroup-creator CRLF)
+ newsgroup-creator = U-TEXT
+
+
+ ; distrib.pats
+ list-arguments =/ "DISTRIB.PATS"
+ list-content =/ list-distrib-pats-content
+ list-distrib-pats-content =
+ *(1*DIGIT ":" wildmat ":" distribution CRLF)
+ distribution = token
+
+
+ ; headers
+ list-arguments =/ "HEADERS" [WS ("MSGID" / "RANGE")]
+ list-content =/ list-headers-content
+ list-headers-content = *(header-meta-name CRLF) /
+ *((metadata-name / ":") CRLF)
+
+
+ ; newsgroups
+ list-arguments =/ "NEWSGROUPS" [WS wildmat]
+ list-content =/ list-newsgroups-content
+ list-newsgroups-content =
+
+
+
+Feather Standards Track [Page 96]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ *(newsgroup-name WS newsgroup-description CRLF)
+ newsgroup-description = S-TEXT
+
+
+ ; overview.fmt
+ list-arguments =/ "OVERVIEW.FMT"
+ list-content =/ list-overview-fmt-content
+ list-overview-fmt-content = "Subject:" CRLF
+ "From:" CRLF
+ "Date:" CRLF
+ "Message-ID:" CRLF
+ "References:" CRLF
+ ( ":bytes" CRLF ":lines" / "Bytes:" CRLF "Lines:") CRLF
+ *((header-name ":full" / metadata-name) CRLF)
+
+9.7. Articles
+
+ This syntax defines the non-terminal <article>, which represents the
+ format of an article as described in Section 3.6.
+
+ article = 1*header CRLF body
+ header = header-name ":" [CRLF] SP header-content CRLF
+ header-content = *(S-CHAR / [CRLF] WS)
+ body = *(*B-CHAR CRLF)
+
+9.8. General Non-terminals
+
+ These non-terminals are used at various places in the syntax and are
+ collected here for convenience. A few of these non-terminals are not
+ used in this specification but are provided for the consistency and
+ convenience of extension authors.
+
+ multi-line-data-block = content-lines termination
+ content-lines = *([content-text] CRLF)
+ content-text = (".." / B-NONDOT) *B-CHAR
+ termination = "." CRLF
+
+ article-number = 1*16DIGIT
+ header-name = 1*A-NOTCOLON
+ keyword = ALPHA 2*(ALPHA / DIGIT / "." / "-")
+ message-id = "<" 1*248A-NOTGT ">"
+ newsgroup-name = 1*wildmat-exact
+ token = 1*P-CHAR
+
+ wildmat = wildmat-pattern *("," ["!"] wildmat-pattern)
+ wildmat-pattern = 1*wildmat-item
+ wildmat-item = wildmat-exact / wildmat-wild
+ wildmat-exact = %x22-29 / %x2B / %x2D-3E / %x40-5A / %x5E-7E /
+
+
+
+Feather Standards Track [Page 97]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ UTF8-non-ascii ; exclude ! * , ? [ \ ]
+ wildmat-wild = "*" / "?"
+
+ base64 = *(4base64-char) [base64-terminal]
+ base64-char = UPPER / LOWER / DIGIT / "+" / "/"
+ base64-terminal = 2base64-char "==" / 3base64-char "="
+
+ ; Assorted special character sets
+ ; A- means based on US-ASCII, excluding controls and SP
+ ; P- means based on UTF-8, excluding controls and SP
+ ; U- means based on UTF-8, excluding NUL CR and LF
+ ; B- means based on bytes, excluding NUL CR and LF
+ A-CHAR = %x21-7E
+ A-NOTCOLON = %x21-39 / %x3B-7E ; exclude ":"
+ A-NOTGT = %x21-3D / %x3F-7E ; exclude ">"
+ P-CHAR = A-CHAR / UTF8-non-ascii
+ U-CHAR = CTRL / TAB / SP / A-CHAR / UTF8-non-ascii
+ U-NONTAB = CTRL / SP / A-CHAR / UTF8-non-ascii
+ U-TEXT = P-CHAR *U-CHAR
+ B-CHAR = CTRL / TAB / SP / %x21-FF
+ B-NONDOT = CTRL / TAB / SP / %x21-2D / %x2F-FF ; exclude "."
+
+ ALPHA = UPPER / LOWER ; use only when case-insensitive
+ CR = %x0D
+ CRLF = CR LF
+ CTRL = %x01-08 / %x0B-0C / %x0E-1F
+ DIGIT = %x30-39
+ nzDIGIT = %x31-39
+ EOL = *(SP / TAB) CRLF
+ LF = %x0A
+ LOWER = %x61-7A
+ SP = %x20
+ SPA = 1*SP
+ TAB = %x09
+ UPPER = %x41-5A
+ UTF8-non-ascii = UTF8-2 / UTF8-3 / UTF8-4
+ UTF8-2 = %xC2-DF UTF8-tail
+ UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2UTF8-tail /
+ %xED %x80-9F UTF8-tail / %xEE-EF 2UTF8-tail
+ UTF8-4 = %xF0 %x90-BF 2UTF8-tail / %xF1-F3 3UTF8-tail /
+ %xF4 %x80-8F 2UTF8-tail
+ UTF8-tail = %x80-BF
+ WS = 1*(SP / TAB)
+
+ The following non-terminals require special consideration. They
+ represent situations where material SHOULD be restricted to UTF-8,
+ but implementations MUST be able to cope with other character
+ encodings. Therefore, there are two sets of definitions for them.
+
+
+
+Feather Standards Track [Page 98]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Implementations MUST accept any content that meets this syntax:
+
+ S-CHAR = %x21-FF
+ S-NONTAB = CTRL / SP / S-CHAR
+ S-TEXT = (CTRL / S-CHAR) *B-CHAR
+
+ and MAY pass such content on unaltered.
+
+ When generating new content or re-encoding existing content,
+ implementations SHOULD conform to this syntax:
+
+ S-CHAR = P-CHAR
+ S-NONTAB = U-NONTAB
+ S-TEXT = U-TEXT
+
+9.9. Extensions and Validation
+
+ The specification of a registered extension MUST include formal
+ syntax that defines additional forms for the following non-terminals:
+
+ command
+ for each new command other than a variant of the LIST command -
+ the syntax of each command MUST be compatible with the definition
+ of <X-command>;
+
+ command-datastream
+ for each new command that immediately streams data;
+
+ command-continuation
+ for each new command that sends further material after the initial
+ command line - the syntax of each continuation MUST be exactly
+ what is sent to the server, including any escape mechanisms such
+ as "dot-stuffing";
+
+ initial-response-content
+ for each new response code that has arguments - the syntax of each
+ response MUST be compatible with the definition of <X-initial-
+ response-content>;
+
+ multi-line-response-content
+ for each new response code that has a multi-line response - the
+ syntax MUST show the response after the lines containing the
+ response code and the terminating octet have been removed and any
+ "dot-stuffing" undone;
+
+ capability-entry
+ for each new capability label - the syntax of each entry MUST be
+ compatible with the definition of <X-capability-entry>;
+
+
+
+Feather Standards Track [Page 99]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ list-arguments
+ for each new variant of the LIST command - the syntax of each
+ entry MUST be compatible with the definition of <X-command>;
+
+ list-content
+ for each new variant of the LIST command - the syntax MUST show
+ the response after the lines containing the 215 response code and
+ the terminating octet have been removed and any "dot-stuffing"
+ undone.
+
+ The =/ notation of ABNF [RFC4234] and the naming conventions
+ described in Section 9.1 SHOULD be used for this.
+
+ When the syntax in this specification, or syntax based on it, is
+ validated, it should be noted that:
+
+ o the non-terminals <command-line>, <command-datastream>,
+ <command-continuation>, <response>, and
+ <multi-line-response-content> describe basic concepts of the
+ protocol and are not referred to by any other rule;
+
+ o the non-terminal <base64> is provided for the convenience of
+ extension authors and is not referred to by any rule in this
+ specification;
+
+ o for the reasons given above, the non-terminals <S-CHAR>,
+ <S-NONTAB>, and <S-TEXT> each have two definitions; and
+
+ o the non-terminal <UNDEFINED> is deliberately not defined.
+
+10. Internationalisation Considerations
+
+10.1. Introduction and Historical Situation
+
+ RFC 977 [RFC977] was written at a time when internationalisation was
+ not seen as a significant issue. As such, it was written on the
+ assumption that all communication would be in ASCII and use only a
+ 7-bit transport layer, although in practice just about all known
+ implementations are 8-bit clean.
+
+ Since then, Usenet and NNTP have spread throughout the world. In the
+ absence of standards for handling the issues of language and
+ character sets, countries, newsgroup hierarchies, and individuals
+ have found a variety of solutions that work for them but that are not
+ necessarily appropriate elsewhere. For example, some have adopted a
+ default 8-bit character set appropriate to their needs (such as
+ ISO/IEC 8859-1 in Western Europe or KOI-8 in Russia), others have
+ used ASCII (either US-ASCII or national variants) in headers but
+
+
+
+Feather Standards Track [Page 100]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ local 16-bit character sets in article bodies, and still others have
+ gone for a combination of MIME [RFC2045] and UTF-8. With the
+ increased use of MIME in email, it is becoming more common to find
+ NNTP articles containing MIME headers that identify the character set
+ of the body, but this is far from universal.
+
+ The resulting confusion does not help interoperability.
+
+ One point that has been generally accepted is that articles can
+ contain octets with the top bit set, and NNTP is only expected to
+ operate on 8-bit clean transport paths.
+
+10.2. This Specification
+
+ Part of the role of this present specification is to eliminate this
+ confusion and promote interoperability as far as possible. At the
+ same time, it is necessary to accept the existence of the present
+ situation and not break existing implementations and arrangements
+ gratuitously, even if they are less than optimal. Therefore, the
+ current practice described above has been taken into consideration in
+ producing this specification.
+
+ This specification extends NNTP from US-ASCII [ANSI1986] to UTF-8
+ [RFC3629]. Except in the two areas discussed below, UTF-8 (which is
+ a superset of US-ASCII) is mandatory, and implementations MUST NOT
+ use any other encoding.
+
+ Firstly, the use of MIME for article headers and bodies is strongly
+ recommended. However, given widely divergent existing practices, an
+ attempt to require a particular encoding and tagging standard would
+ be premature at this time. Accordingly, this specification allows
+ the use of arbitrary 8-bit data in articles subject to the following
+ requirements and recommendations.
+
+ o The names of headers (e.g., "From" or "Subject") MUST be in
+ US-ASCII.
+
+ o Header values SHOULD use US-ASCII or an encoding based on it, such
+ as RFC 2047 [RFC2047], until such time as another approach has
+ been standardised. At present, 8-bit encodings (including UTF-8)
+ SHOULD NOT be used because they are likely to cause
+ interoperability problems.
+
+ o The character set of article bodies SHOULD be indicated in the
+ article headers, and this SHOULD be done in accordance with MIME.
+
+ o Where an article is obtained from an external source, an
+ implementation MAY pass it on and derive data from it (such as the
+
+
+
+Feather Standards Track [Page 101]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ response to the HDR command), even though the article or the data
+ does not meet the above requirements. Implementations MUST
+ transfer such articles and data correctly and unchanged; they MUST
+ NOT attempt to convert or re-encode the article or derived data.
+ (Nevertheless, a client or server MAY elect not to post or forward
+ the article if, after further examination of the article, it deems
+ it inappropriate to do so.)
+
+ This requirement affects the ARTICLE (Section 6.2.1), BODY
+ (Section 6.2.3), HDR (Section 8.5), HEAD (Section 6.2.2), IHAVE
+ (Section 6.3.2), OVER (Section 8.3), and POST (Section 6.3.1)
+ commands.
+
+ Secondly, the following requirements are placed on the newsgroups
+ list returned by the LIST NEWSGROUPS command (Section 7.6.6):
+
+ o Although this specification allows UTF-8 for newsgroup names, they
+ SHOULD be restricted to US-ASCII until a successor to RFC 1036
+ [RFC1036] standardises another approach. 8-bit encodings SHOULD
+ NOT be used because they are likely to cause interoperability
+ problems.
+
+ o The newsgroup description SHOULD be in US-ASCII or UTF-8 unless
+ and until a successor to RFC 1036 standardises other encoding
+ arrangements. 8-bit encodings other than UTF-8 SHOULD NOT be used
+ because they are likely to cause interoperability problems.
+
+ o Implementations that obtain this data from an external source MUST
+ handle it correctly even if it does not meet the above
+ requirements. Implementations (in particular, clients) MUST
+ handle such data correctly.
+
+10.3. Outstanding Issues
+
+ While the primary use of NNTP is for transmitting articles that
+ conform to RFC 1036 (Netnews articles), it is also used for other
+ formats (see Appendix A). It is therefore most appropriate that
+ internationalisation issues related to article formats be addressed
+ in the relevant specifications. For Netnews articles, this is any
+ successor to RFC 1036. For email messages, it is RFC 2822 [RFC2822].
+
+ Of course, any article transmitted via NNTP needs to conform to this
+ specification as well.
+
+ Restricting newsgroup names to UTF-8 is not a complete solution. In
+ particular, when new newsgroup names are created or a user is asked
+ to enter a newsgroup name, some scheme of canonicalisation will need
+ to take place. This specification does not attempt to define that
+
+
+
+Feather Standards Track [Page 102]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ canonicalization; further work is needed in this area, in conjunction
+ with the article format specifications. Until such specifications
+ are published, implementations SHOULD match newsgroup names octet by
+ octet. It is anticipated that any approved scheme will be applied
+ "at the edges", and therefore octet-by-octet comparison will continue
+ to apply to most, if not all, uses of newsgroup names in NNTP.
+
+ In the meantime, any implementation experimenting with UTF-8
+ newsgroup names is strongly cautioned that a future specification may
+ require that those names be canonicalized when used with NNTP in a
+ way that is not compatible with their experiments.
+
+ Since the primary use of NNTP is with Netnews, and since newsgroup
+ descriptions are normally distributed through specially formatted
+ articles, it is recommended that the internationalisation issues
+ related to them be addressed in any successor to RFC 1036.
+
+11. IANA Considerations
+
+ This specification requires IANA to keep a registry of capability
+ labels. The initial contents of this registry are specified in
+ Section 3.3.4. As described in Section 3.3.3, labels beginning with
+ X are reserved for private use, while all other names are expected to
+ be associated with a specification in an RFC on the standards track
+ or defining an IESG-approved experimental protocol.
+
+ Different entries in the registry MUST use different capability
+ labels.
+
+ Different entries in the registry MUST NOT use the same command name.
+ For this purpose, variants distinguished by a second or subsequent
+ keyword (e.g., "LIST HEADERS" and "LIST OVERVIEW.FMT") count as
+ different commands. If there is a need for two extensions to use the
+ same command, a single harmonised specification MUST be registered.
+
+12. Security Considerations
+
+ This section is meant to inform application developers, information
+ providers, and users of the security limitations in NNTP as described
+ by this document. The discussion does not include definitive
+ solutions to the problems revealed, though it does make some
+ suggestions for reducing security risks.
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 103]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+12.1. Personal and Proprietary Information
+
+ NNTP, because it was created to distribute network news articles,
+ will forward whatever information is stored in those articles.
+ Specification of that information is outside this scope of this
+ document, but it is likely that some personal and/or proprietary
+ information is available in some of those articles. It is very
+ important that designers and implementers provide informative
+ warnings to users so that personal and/or proprietary information in
+ material that is added automatically to articles (e.g., in headers)
+ is not disclosed inadvertently. Additionally, effective and easily
+ understood mechanisms to manage the distribution of news articles
+ SHOULD be provided to NNTP Server administrators, so that they are
+ able to report with confidence the likely spread of any particular
+ set of news articles.
+
+12.2. Abuse of Server Log Information
+
+ A server is in the position to save session data about a user's
+ requests that might identify their reading patterns or subjects of
+ interest. This information is clearly confidential in nature, and
+ its handling can be constrained by law in certain countries. People
+ using this protocol to provide data are responsible for ensuring that
+ such material is not distributed without the permission of any
+ individuals that are identifiable by the published results.
+
+12.3. Weak Authentication and Access Control
+
+ There is no user-based or token-based authentication in the basic
+ NNTP specification. Access is normally controlled by server
+ configuration files. Those files specify access by using domain
+ names or IP addresses. However, this specification does permit the
+ creation of extensions to NNTP for such purposes; one such extension
+ is [NNTP-AUTH]. While including such mechanisms is optional, doing
+ so is strongly encouraged.
+
+ Other mechanisms are also available. For example, a proxy server
+ could be put in place that requires authentication before connecting
+ via the proxy to the NNTP server.
+
+12.4. DNS Spoofing
+
+ Many existing NNTP implementations authorize incoming connections by
+ checking the IP address of that connection against the IP addresses
+ obtained via DNS lookups of lists of domain names given in local
+ configuration files. Servers that use this type of authentication
+ and clients that find a server by doing a DNS lookup of the server
+ name rely very heavily on the Domain Name Service, and are thus
+
+
+
+Feather Standards Track [Page 104]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ generally prone to security attacks based on the deliberate
+ misassociation of IP addresses and DNS names. Clients and servers
+ need to be cautious in assuming the continuing validity of an IP
+ number/DNS name association.
+
+ In particular, NNTP clients and servers SHOULD rely on their name
+ resolver for confirmation of an IP number/DNS name association,
+ rather than cache the result of previous host name lookups. Many
+ platforms already can cache host name lookups locally when
+ appropriate, and they SHOULD be configured to do so. It is proper
+ for these lookups to be cached, however, only when the TTL (Time To
+ Live) information reported by the name server makes it likely that
+ the cached information will remain useful.
+
+ If NNTP clients or servers cache the results of host name lookups in
+ order to achieve a performance improvement, they MUST observe the TTL
+ information reported by DNS. If NNTP clients or servers do not
+ observe this rule, they could be spoofed when a previously accessed
+ server's IP address changes. As network renumbering is expected to
+ become increasingly common, the possibility of this form of attack
+ will increase. Observing this requirement thus reduces this
+ potential security vulnerability.
+
+ This requirement also improves the load-balancing behaviour of
+ clients for replicated servers using the same DNS name and reduces
+ the likelihood of a user's experiencing failure in accessing sites
+ that use that strategy.
+
+12.5. UTF-8 Issues
+
+ UTF-8 [RFC3629] permits only certain sequences of octets and
+ designates others as either malformed or "illegal". The Unicode
+ standard identifies a number of security issues related to illegal
+ sequences and forbids their generation by conforming implementations.
+
+ Implementations of this specification MUST NOT generate malformed or
+ illegal sequences and SHOULD detect them and take some appropriate
+ action. This could include the following:
+
+ o Generating a 501 response code.
+
+ o Replacing such sequences by the sequence %xEF.BF.BD, which encodes
+ the "replacement character" U+FFFD.
+
+ o Closing the connection.
+
+ o Replacing such sequences by a "guessed" valid sequence (based on
+ properties of the UTF-8 encoding).
+
+
+
+Feather Standards Track [Page 105]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ In the last case, the implementation MUST ensure that any replacement
+ cannot be used to bypass validity or security checks. For example,
+ the illegal sequence %xC0.A0 is an over-long encoding for space
+ (%x20). If it is replaced by the correct encoding in a command line,
+ this needs to happen before the command line is parsed into
+ individual arguments. If the replacement came after parsing, it
+ would be possible to generate an argument with an embedded space,
+ which is forbidden. Use of the "replacement character" does not have
+ this problem, since it is permitted wherever non-US-ASCII characters
+ are. Implementations SHOULD use one of the first two solutions where
+ the general structure of the NNTP stream remains intact and SHOULD
+ close the connection if it is no longer possible to parse it
+ sensibly.
+
+12.6. Caching of Capability Lists
+
+ The CAPABILITIES command provides a capability list, which is
+ information about the current capabilities of the server. Whenever
+ there is a relevant change to the server state, the results of this
+ command are required to change accordingly.
+
+ In most situations, the capabilities list in a given server state
+ will not change from session to session; for example, a given
+ extension will be installed permanently on a server. Some clients
+ may therefore wish to remember which extensions a server supports to
+ avoid the delay of an additional command and response, particularly
+ if they open multiple connections in the same session.
+
+ However, information about extensions related to security and privacy
+ MUST NOT be cached, since this could allow a variety of attacks.
+
+ For example, consider a server that permits the use of cleartext
+ passwords on links that are encrypted but not otherwise:
+
+ [Initial connection set-up completed.]
+ [S] 200 NNTP Service Ready, posting permitted
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] NEWNEWS
+ [S] POST
+ [S] XENCRYPT
+ [S] LIST ACTIVE NEWSGROUPS
+ [S] .
+ [C] XENCRYPT
+ [Client and server negotiate encryption on the link]
+ [S] 283 Encrypted link established
+
+
+
+Feather Standards Track [Page 106]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ [C] CAPABILITIES
+ [S] 101 Capability list:
+ [S] VERSION 2
+ [S] READER
+ [S] NEWNEWS
+ [S] POST
+ [S] XSECRET
+ [S] LIST ACTIVE NEWSGROUPS
+ [S] .
+ [C] XSECRET fred flintstone
+ [S] 290 Password for fred accepted
+
+ If the client caches the last capabilities list, then on the next
+ session it will attempt to use XSECRET on an unencrypted link:
+
+ [Initial connection set-up completed.]
+ [S] 200 NNTP Service Ready, posting permitted
+ [C] XSECRET fred flintstone
+ [S] 483 Only permitted on secure links
+
+ This exposes the password to any eavesdropper. While the primary
+ cause of this is passing a secret without first checking the security
+ of the link, caching of capability lists can increase the risk.
+
+ Any security extension should include requirements to check the
+ security state of the link in a manner appropriate to that extension.
+
+ Caching should normally only be considered for anonymous clients that
+ do not use any security or privacy extensions and for which the time
+ required for an additional command and response is a noticeable
+ issue.
+
+13. Acknowledgements
+
+ This document is the result of much effort by the present and past
+ members of the NNTP Working Group, chaired by Russ Allbery and Ned
+ Freed. It could not have been produced without them.
+
+ The author acknowledges the original authors of NNTP as documented in
+ RFC 977 [RFC977]: Brian Kantor and Phil Lapsey.
+
+ The author gratefully acknowledges the following:
+
+ o The work of the NNTP committee chaired by Eliot Lear. The
+ organization of this document was influenced by the last available
+ version from this working group. A special thanks to Eliot for
+ generously providing the original machine-readable sources for
+ that document.
+
+
+
+Feather Standards Track [Page 107]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ o The work of the DRUMS working group, specifically RFC 1869
+ [RFC1869], that drove the original thinking that led to the
+ CAPABILITIES command and the extensions mechanism detailed in this
+ document.
+
+ o The authors of RFC 2616 [RFC2616] for providing specific and
+ relevant examples of security issues that should be considered for
+ HTTP. Since many of the same considerations exist for NNTP, those
+ examples that are relevant have been included here with some minor
+ rewrites.
+
+ o The comments and additional information provided by the following
+ individuals in preparing one or more of the progenitors of this
+ document:
+
+ Russ Allbery <rra@stanford.edu>
+ Wayne Davison <davison@armory.com>
+ Chris Lewis <clewis@bnr.ca>
+ Tom Limoncelli <tal@mars.superlink.net>
+ Eric Schnoebelen <eric@egsner.cirr.com>
+ Rich Salz <rsalz@osf.org>
+
+ This work was motivated by the work of various news reader authors
+ and news server authors, including those listed below:
+
+ Rick Adams
+ Original author of the NNTP extensions to the RN news reader and
+ last maintainer of Bnews.
+
+ Stan Barber
+ Original author of the NNTP extensions to the news readers that
+ are part of Bnews.
+
+ Geoff Collyer
+ Original author of the OVERVIEW database proposal and one of the
+ original authors of CNEWS.
+
+ Dan Curry
+ Original author of the xvnews news reader.
+
+ Wayne Davison
+ Author of the first threading extensions to the RN news reader
+ (commonly called TRN).
+
+ Geoff Huston
+ Original author of ANU NEWS.
+
+
+
+
+
+Feather Standards Track [Page 108]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Phil Lapsey
+ Original author of the UNIX reference implementation for NNTP.
+
+ Iain Lea
+ Original maintainer of the TIN news reader.
+
+ Chris Lewis
+ First known implementer of the AUTHINFO GENERIC extension.
+
+ Rich Salz
+ Original author of INN.
+
+ Henry Spencer
+ One of the original authors of CNEWS.
+
+ Kim Storm
+ Original author of the NN news reader.
+
+ Other people who contributed to this document include:
+
+ Matthias Andree
+ Greg Andruk
+ Daniel Barclay
+ Maurizio Codogno
+ Mark Crispin
+ Andrew Gierth
+ Juergen Helbing
+ Scott Hollenbeck
+ Urs Janssen
+ Charles Lindsey
+ Ade Lovett
+ David Magda
+ Ken Murchison
+ Francois Petillon
+ Peter Robinson
+ Rob Siemborski
+ Howard Swinehart
+ Ruud van Tol
+ Jeffrey Vinocur
+ Erik Warmelink
+
+ The author thanks them all and apologises to anyone omitted.
+
+ Finally, the present author gratefully acknowledges the vast amount
+ of work put into previous versions by the previous author:
+
+ Stan Barber <sob@academ.com>
+
+
+
+
+Feather Standards Track [Page 109]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+14. References
+
+14.1. Normative References
+
+ [ANSI1986] American National Standards Institute, "Coded Character
+ Set - 7-bit American Standard Code for Information
+ Interchange", ANSI X3.4, 1986.
+
+ [RFC977] Kantor, B. and P. Lapsley, "Network News Transfer
+ Protocol", RFC 977, February 1986.
+
+ [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet
+ Mail Extensions (MIME) Part One: Format of Internet
+ Message Bodies", RFC 2045, November 1996.
+
+ [RFC2047] Moore, K., "MIME (Multipurpose Internet Mail
+ Extensions) Part Three: Message Header Extensions for
+ Non-ASCII Text", RFC 2047, November 1996.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", STD 63, RFC 3629, November 2003.
+
+ [RFC4234] Crocker, D., Ed. and P. Overell, "Augmented BNF for
+ Syntax Specifications: ABNF", RFC 4234, October 2005.
+
+ [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
+ Encodings", RFC 4648, October 2006.
+
+ [TF.686-1] International Telecommunications Union - Radio,
+ "Glossary, ITU-R Recommendation TF.686-1",
+ ITU-R Recommendation TF.686-1, October 1997.
+
+14.2. Informative References
+
+ [NNTP-AUTH] Vinocur, J., Murchison, K., and C. Newman, "Network
+ News Transfer Protocol (NNTP) Extension for
+ Authentication",
+ RFC 4643, October 2006.
+
+ [NNTP-STREAM] Vinocur, J. and K. Murchison, "Network News Transfer
+ Protocol (NNTP) Extension for Streaming Feeds",
+ RFC 4644, October 2006.
+
+
+
+
+
+
+Feather Standards Track [Page 110]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ [NNTP-TLS] Murchison, K., Vinocur, J., and C. Newman, "Using
+ Transport Layer Security (TLS) with Network News
+ Transfer Protocol (NNTP)", RFC 4642, October 2006.
+
+ [RFC1036] Horton, M. and R. Adams, "Standard for interchange of
+ USENET messages", RFC 1036, December 1987.
+
+ [RFC1305] Mills, D., "Network Time Protocol (Version 3)
+ Specification, Implementation and Analysis", RFC 1305,
+ March 1992.
+
+ [RFC1869] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D.
+ Crocker, "SMTP Service Extensions", STD 10, RFC 1869,
+ November 1995.
+
+ [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
+ Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
+ Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
+
+ [RFC2629] Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629,
+ June 1999.
+
+ [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April
+ 2001.
+
+ [RFC2980] Barber, S., "Common NNTP Extensions", RFC 2980, October
+ 2000.
+
+ [ROBE1995] Robertson, R., "FAQ: Overview database / NOV General
+ Information", January 1995.
+
+ There is no definitive copy of this document known to
+ the author. It was previously posted as the Usenet
+ article <news:nov-faq-1-930909720@agate.Berkeley.EDU>
+
+ [SALZ1992] Salz, R., "Manual Page for wildmat(3) from the INN 1.4
+ distribution, Revision 1.10", April 1992.
+
+ There is no definitive copy of this document known to
+ the author.
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 111]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+Appendix A. Interaction with Other Specifications
+
+ NNTP is most often used for transferring articles that conform to
+ RFC 1036 [RFC1036] (such articles are called "Netnews articles"
+ here). It is also sometimes used for transferring email messages
+ that conform to RFC 2822 [RFC2822] (such articles are called "email
+ articles" here). In this situation, articles must conform both to
+ this specification and to that other one; this appendix describes
+ some relevant issues.
+
+A.1. Header Folding
+
+ NNTP allows a header line to be folded (by inserting a CRLF pair)
+ before any space or TAB character.
+
+ Both email and Netnews articles are required to have at least one
+ octet other than space or TAB on each header line. Thus, folding can
+ only happen at one point in each sequence of consecutive spaces or
+ TABs. Netnews articles are further required to have the header name,
+ colon, and following space all on the first line; folding may only
+ happen beyond that space. Finally, some non-conforming software will
+ remove trailing spaces and TABs from a line. Therefore, it might be
+ inadvisable to fold a header after a space or TAB.
+
+ For maximum safety, header lines SHOULD conform to the following
+ syntax rather than to that in Section 9.7.
+
+
+ header = header-name ":" SP [header-content] CRLF
+ header-content = [WS] token *( [CRLF] WS token )
+
+A.2. Message-IDs
+
+ Every article handled by an NNTP server MUST have a unique
+ message-id. For the purposes of this specification, a message-id is
+ an arbitrary opaque string that merely needs to meet certain
+ syntactic requirements and is just a way to refer to the article.
+
+ Because there is a significant risk that old articles will be
+ reinjected into the global Usenet system, RFC 1036 [RFC1036] requires
+ that message-ids are globally unique for all time.
+
+ This specification states that message-ids are the same if and only
+ if they consist of the same sequence of octets. Other specifications
+ may define two different sequences as being equal because they are
+ putting an interpretation on particular characters. RFC 2822
+ [RFC2822] has a concept of "quoted" and "escaped" characters. It
+ therefore considers the three message-ids:
+
+
+
+Feather Standards Track [Page 112]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ <ab.cd@example.com>
+ <"ab.cd"@example.com>
+ <"ab.\cd"@example.com>
+
+ as being identical. Therefore, an NNTP implementation handing email
+ articles must ensure that only one of these three appears in the
+ protocol and that the other two are converted to it as and when
+ necessary, such as when a client checks the results of a NEWNEWS
+ command against an internal database of message-ids. Note that
+ RFC 1036 [RFC1036] never treats two different strings as being
+ identical. Its successor (as of the time of writing) restricts the
+ syntax of message-ids so that, whenever RFC 2822 would treat two
+ strings as equivalent, only one of them is valid (in the above
+ example, only the first string is valid).
+
+ This specification does not describe how the message-id of an article
+ is determined; it may be deduced from the contents of the article or
+ derived from some external source. If the server is also conforming
+ to another specification that contains a definition of message-id
+ compatible with this one, the server SHOULD use those message-ids. A
+ common approach, and one that SHOULD be used for email and Netnews
+ 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
+ entire header contents; it may be necessary to strip off comments and
+ undo quoting, or to reduce "equivalent" message-ids to a canonical
+ form.
+
+ 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 determine one from the article contents. However, whichever it
+ does, it SHOULD ensure that, if the IHAVE command is repeated with
+ the same argument and article, it will be recognized as a duplicate.
+
+ If an article does not contain a message-id that the server can
+ identify, it MUST synthesize one. This could, for example, be a
+ simple sequence number or be based on the date and time when the
+ article arrived. When email or Netnews articles are handled, a
+ Message-ID header SHOULD be added to ensure global consistency and
+ uniqueness.
+
+ Note that, because the message-id might not have been derived from
+ the Message-ID header in the article, the following example is
+ legitimate (though unusual):
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 113]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ [C] HEAD <45223423@example.com>
+ [S] 221 0 <45223423@example.com>
+ [S] Path: pathost!demo!whitehouse!not-for-mail
+ [S] Message-ID: <1234@example.net>
+ [S] From: "Demo User" <nobody@example.net>
+ [S] Newsgroups: misc.test
+ [S] Subject: I am just a test article
+ [S] Date: 6 Oct 1998 04:38:40 -0500
+ [S] Organization: An Example Net, Uncertain, Texas
+ [S] .
+
+A.3. Article Posting
+
+ As far as NNTP is concerned, the POST and IHAVE commands provide the
+ same basic facilities in a slightly different way. However, they
+ have rather different intentions.
+
+ The IHAVE command is intended for transmitting conforming articles
+ between a system of NNTP servers, with all articles perhaps also
+ conforming to another specification (e.g., all articles are Netnews
+ articles). It is expected that the client will already have done any
+ necessary validation (or that it has in turn obtained the article
+ from a third party that has done so); therefore, the contents SHOULD
+ be left unchanged.
+
+ In contrast, the POST command is intended for use when an end-user is
+ injecting a newly created article into a such a system. The article
+ being transferred might not be a conforming email or Netnews article,
+ and the server is expected to validate it and, if necessary, to
+ convert it to the right form for onward distribution. This is often
+ done by a separate piece of software on the server installation; if
+ so, the NNTP server SHOULD pass the incoming article to that software
+ unaltered, making no attempt to filter characters, to fold or limit
+ lines, or to process the incoming text otherwise.
+
+ 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
+ important to ensure (as far as possible) that the same message-id is
+ allocated to both attempts so that the server, or other servers, can
+ recognize the two articles as duplicates. In the case of email or
+ Netnews articles, therefore, the posted article SHOULD contain a
+ header with the name "Message-ID", and the contents of this header
+ SHOULD be identical on each attempt. The server SHOULD ensure that
+ two POSTed articles with the same contents for this header are
+ recognized as identical and that the same message-id is allocated,
+ whether or not those contents are suitable for use as the message-id.
+
+
+
+
+
+Feather Standards Track [Page 114]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+Appendix B. Summary of Commands
+
+ This section contains a list of every command defined in this
+ document, ordered by command name and by indicating capability.
+
+ Ordered by command name:
+
+ +-------------------+-----------------------+---------------+
+ | Command | Indicating capability | Definition |
+ +-------------------+-----------------------+---------------+
+ | ARTICLE | READER | Section 6.2.1 |
+ | BODY | READER | Section 6.2.3 |
+ | CAPABILITIES | mandatory | Section 5.2 |
+ | DATE | READER | Section 7.1 |
+ | GROUP | READER | Section 6.1.1 |
+ | HDR | HDR | Section 8.5 |
+ | HEAD | mandatory | Section 6.2.2 |
+ | HELP | mandatory | Section 7.2 |
+ | IHAVE | IHAVE | Section 6.3.2 |
+ | LAST | READER | Section 6.1.3 |
+ | LIST | LIST | Section 7.6.1 |
+ | LIST ACTIVE.TIMES | LIST | Section 7.6.4 |
+ | LIST ACTIVE | LIST | Section 7.6.3 |
+ | LIST DISTRIB.PATS | LIST | Section 7.6.5 |
+ | LIST HEADERS | HDR | Section 8.6 |
+ | LIST NEWSGROUPS | LIST | Section 7.6.6 |
+ | LIST OVERVIEW.FMT | OVER | Section 8.4 |
+ | LISTGROUP | READER | Section 6.1.2 |
+ | MODE READER | MODE-READER | Section 5.3 |
+ | NEWGROUPS | READER | Section 7.3 |
+ | NEWNEWS | NEWNEWS | Section 7.4 |
+ | NEXT | READER | Section 6.1.4 |
+ | OVER | OVER | Section 8.3 |
+ | POST | POST | Section 6.3.1 |
+ | QUIT | mandatory | Section 5.4 |
+ | STAT | mandatory | Section 6.2.4 |
+ +-------------------+-----------------------+---------------+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 115]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Ordered by indicating capability:
+
+ +-------------------+-----------------------+---------------+
+ | Command | Indicating capability | Definition |
+ +-------------------+-----------------------+---------------+
+ | CAPABILITIES | mandatory | Section 5.2 |
+ | HEAD | mandatory | Section 6.2.2 |
+ | HELP | mandatory | Section 7.2 |
+ | QUIT | mandatory | Section 5.4 |
+ | STAT | mandatory | Section 6.2.4 |
+ | HDR | HDR | Section 8.5 |
+ | LIST HEADERS | HDR | Section 8.6 |
+ | IHAVE | IHAVE | Section 6.3.2 |
+ | LIST | LIST | Section 7.6.1 |
+ | LIST ACTIVE | LIST | Section 7.6.3 |
+ | LIST ACTIVE.TIMES | LIST | Section 7.6.4 |
+ | LIST DISTRIB.PATS | LIST | Section 7.6.5 |
+ | LIST NEWSGROUPS | LIST | Section 7.6.6 |
+ | MODE READER | MODE-READER | Section 5.3 |
+ | NEWNEWS | NEWNEWS | Section 7.4 |
+ | OVER | OVER | Section 8.3 |
+ | LIST OVERVIEW.FMT | OVER | Section 8.4 |
+ | POST | POST | Section 6.3.1 |
+ | ARTICLE | READER | Section 6.2.1 |
+ | BODY | READER | Section 6.2.3 |
+ | DATE | READER | Section 7.1 |
+ | GROUP | READER | Section 6.1.1 |
+ | LAST | READER | Section 6.1.3 |
+ | LISTGROUP | READER | Section 6.1.2 |
+ | NEWGROUPS | READER | Section 7.3 |
+ | NEXT | READER | Section 6.1.4 |
+ +-------------------+-----------------------+---------------+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 116]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+Appendix C. Summary of Response Codes
+
+ This section contains a list of every response code defined in this
+ document and indicates whether it is multi-line, which commands can
+ generate it, what arguments it has, and what its meaning is.
+
+ Response code 100 (multi-line)
+ Generated by: HELP
+ Meaning: help text follows.
+
+ Response code 101 (multi-line)
+ Generated by: CAPABILITIES
+ Meaning: capabilities list follows.
+
+ Response code 111
+ Generated by: DATE
+ 1 argument: yyyymmddhhmmss
+ Meaning: server date and time.
+
+ Response code 200
+ Generated by: initial connection, MODE READER
+ Meaning: service available, posting allowed.
+
+ Response code 201
+ Generated by: initial connection, MODE READER
+ Meaning: service available, posting prohibited.
+
+ Response code 205
+ Generated by: QUIT
+ Meaning: connection closing (the server immediately closes the
+ connection).
+
+ Response code 211
+ The 211 response code has two completely different forms,
+ depending on which command generated it:
+
+ (not multi-line)
+ Generated by: GROUP
+ 4 arguments: number low high group
+ Meaning: group selected.
+
+ (multi-line)
+ Generated by: LISTGROUP
+ 4 arguments: number low high group
+ Meaning: article numbers follow.
+
+
+
+
+
+
+Feather Standards Track [Page 117]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Response code 215 (multi-line)
+ Generated by: LIST
+ Meaning: information follows.
+
+ Response code 220 (multi-line)
+ Generated by: ARTICLE
+ 2 arguments: n message-id
+ Meaning: article follows.
+
+ Response code 221 (multi-line)
+ Generated by: HEAD
+ 2 arguments: n message-id
+ Meaning: article headers follow.
+
+ Response code 222 (multi-line)
+ Generated by: BODY
+ 2 arguments: n message-id
+ Meaning: article body follows.
+
+ Response code 223
+ Generated by: LAST, NEXT, STAT
+ 2 arguments: n message-id
+ Meaning: article exists and selected.
+
+ Response code 224 (multi-line)
+ Generated by: OVER
+ Meaning: overview information follows.
+
+ Response code 225 (multi-line)
+ Generated by: HDR
+ Meaning: headers follow.
+
+ Response code 230 (multi-line)
+ Generated by: NEWNEWS
+ Meaning: list of new articles follows.
+
+ Response code 231 (multi-line)
+ Generated by: NEWGROUPS
+ Meaning: list of new newsgroups follows.
+
+ Response code 235
+ Generated by: IHAVE (second stage)
+ Meaning: article transferred OK.
+
+ Response code 240
+ Generated by: POST (second stage)
+ Meaning: article received OK.
+
+
+
+
+Feather Standards Track [Page 118]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Response code 335
+ Generated by: IHAVE (first stage)
+ Meaning: send article to be transferred.
+
+ Response code 340
+ Generated by: POST (first stage)
+ Meaning: send article to be posted.
+
+ Response code 400
+ Generic response and generated by initial connection
+ Meaning: service not available or no longer available (the server
+ immediately closes the connection).
+
+ Response code 401
+ Generic response
+ 1 argument: capability-label
+ Meaning: the server is in the wrong mode; the indicated capability
+ should be used to change the mode.
+
+ Response code 403
+ Generic response
+ Meaning: internal fault or problem preventing action being taken.
+
+ Response code 411
+ Generated by: GROUP, LISTGROUP
+ Meaning: no such newsgroup.
+
+ Response code 412
+ Generated by: ARTICLE, BODY, GROUP, HDR, HEAD, LAST, LISTGROUP,
+ NEXT, OVER, STAT
+ Meaning: no newsgroup selected.
+
+ Response code 420
+ Generated by: ARTICLE, BODY, HDR, HEAD, LAST, NEXT, OVER, STAT
+ Meaning: current article number is invalid.
+
+ Response code 421
+ Generated by: NEXT
+ Meaning: no next article in this group.
+
+ Response code 422
+ Generated by: LAST
+ Meaning: no previous article in this group.
+
+ Response code 423
+ Generated by: ARTICLE, BODY, HDR, HEAD, OVER, STAT
+ Meaning: no article with that number or in that range.
+
+
+
+
+Feather Standards Track [Page 119]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Response code 430
+ Generated by: ARTICLE, BODY, HDR, HEAD, OVER, STAT
+ Meaning: no article with that message-id.
+
+ Response code 435
+ Generated by: IHAVE (first stage)
+ Meaning: article not wanted.
+
+ Response code 436
+ Generated by: IHAVE (either stage)
+ Meaning: transfer not possible (first stage) or failed (second
+ stage); try again later.
+
+ Response code 437
+ Generated by: IHAVE (second stage)
+ Meaning: transfer rejected; do not retry.
+
+ Response code 440
+ Generated by: POST (first stage)
+ Meaning: posting not permitted.
+
+ Response code 441
+ Generated by: POST (second stage)
+ Meaning: posting failed.
+
+ Response code 480
+ Generic response
+ Meaning: command unavailable until the client has authenticated
+ itself.
+
+ Response code 483
+ Generic response
+ Meaning: command unavailable until suitable privacy has been
+ arranged.
+
+ Response code 500
+ Generic response
+ Meaning: unknown command.
+
+ Response code 501
+ Generic response
+ Meaning: syntax error in command.
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 120]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ Response code 502
+ Generic response and generated by initial connection
+
+ Meaning for the initial connection and the MODE READER command:
+ service permanently unavailable (the server immediately closes the
+ connection).
+
+ Meaning for all other commands: command not permitted (and there
+ is no way for the client to change this).
+
+ Response code 503
+ Generic response
+ Meaning: feature not supported.
+
+ Response code 504
+ Generic response
+ Meaning: error in base64-encoding [RFC4648] of an argument.
+
+Appendix D. Changes from RFC 977
+
+ In general every attempt has been made to ensure that the protocol
+ specification in this document is compatible with the version
+ specified in RFC 977 [RFC977] and the various facilities adopted from
+ RFC 2980 [RFC2980]. However, there have been a number of changes,
+ some compatible and some not.
+
+ This appendix lists these changes. It is not guaranteed to be
+ exhaustive or correct and MUST NOT be relied on.
+
+ o A formal syntax specification (Section 9) has been added.
+
+ o The default character set is changed from US-ASCII [ANSI1986] to
+ UTF-8 [RFC3629] (note that US-ASCII is a subset of UTF-8). This
+ matter is discussed further in Section 10.
+
+ o All articles are required to have a message-id, eliminating the
+ "<0>" placeholder used in RFC 977 in some responses.
+
+ o The newsgroup name matching capabilities already documented in
+ RFC 977 ("wildmats", Section 4) are clarified and extended. The
+ new facilities (e.g., the use of commas and exclamation marks) are
+ allowed wherever wildmats appear in the protocol.
+
+ o Support for pipelining of commands (Section 3.5) is made
+ mandatory.
+
+
+
+
+
+
+Feather Standards Track [Page 121]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ o The principles behind response codes (Section 3.2) have been
+ tidied up. In particular:
+
+ * the x8x response code family, formerly used for private
+ extensions, is now reserved for authentication and privacy
+ extensions;
+
+ * the x9x response code family, formerly intended for debugging
+ facilities, are now reserved for private extensions;
+
+ * the 502 and 503 generic response codes (Section 3.2.1) have
+ been redefined;
+
+ * new 401, 403, 480, 483, and 504 generic response codes have
+ been added.
+
+ o The rules for article numbering (Section 6) have been clarified
+ (also see Section 6.1.1.2).
+
+ o The SLAVE command (which was ill-defined) is removed from the
+ protocol.
+
+ o Four-digit years are permitted in the NEWNEWS (Section 7.4) and
+ NEWGROUPS (Section 7.3) commands (two-digit years are still
+ permitted). The optional distribution parameter to these commands
+ has been removed.
+
+ o The LIST command (Section 7.6.1) is greatly extended; the original
+ is available as LIST ACTIVE, while new variants include
+ ACTIVE.TIMES, DISTRIB.PATS, and NEWSGROUPS. A new "m" status flag
+ is added to the LIST ACTIVE response.
+
+ o A new CAPABILITIES command (Section 5.2) allows clients to
+ determine what facilities are supported by a server.
+
+ o The DATE command (Section 7.1) is adopted from RFC 2980
+ effectively unchanged.
+
+ o The LISTGROUP command (Section 6.1.2) is adopted from RFC 2980.
+ An optional range argument has been added, and the 211 initial
+ response line now has the same format as the 211 response from the
+ GROUP command.
+
+ o The MODE READER command (Section 5.3) is adopted from RFC 2980 and
+ its meaning and effects clarified.
+
+ o The XHDR command in RFC 2980 has been formalised as the new HDR
+ (Section 8.5) and LIST HEADERS (Section 8.6) commands.
+
+
+
+Feather Standards Track [Page 122]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+ o The XOVER command in RFC 2980 has been formalised as the new OVER
+ (Section 8.3) and LIST OVERVIEW.FMT (Section 8.4) commands. The
+ former can be applied to a message-id as well as to a range.
+
+ o The concept of article metadata (Section 8.1) has been formalised,
+ allowing the Bytes and Lines pseudo-headers to be deprecated.
+
+ Client authors should note in particular that lack of support for the
+ CAPABILITIES command is a good indication that the server does not
+ support this specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 123]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+Author's Address
+
+ Clive D.W. Feather
+ THUS plc
+ 322 Regents Park Road
+ London
+ N3 2QQ
+ United Kingdom
+
+ Phone: +44 20 8495 6138
+ Fax: +44 870 051 9937
+ EMail: clive@demon.net
+ URI: http://www.davros.org/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Feather Standards Track [Page 124]
+
+RFC 3977 Network News Transfer Protocol (NNTP) October 2006
+
+
+Full Copyright Statement
+
+Copyright (C) The Internet Society (2006).
+
+ This document is subject to the rights, licenses and restrictions
+ contained in BCP 78, and except as set forth therein, the authors
+ retain all their rights.
+
+ This document and the information contained herein are provided on an
+ "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+ OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+ ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+ INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Intellectual Property
+
+ The IETF takes no position regarding the validity or scope of any
+ Intellectual Property Rights or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; nor does it represent that it has
+ made any independent effort to identify any such rights. Information
+ on the procedures with respect to rights in RFC documents can be
+ found in BCP 78 and BCP 79.
+
+ Copies of IPR disclosures made to the IETF Secretariat and any
+ assurances of licenses to be made available, or the result of an
+ attempt made to obtain a general license or permission for the use of
+ such proprietary rights by implementers or users of this
+ specification can be obtained from the IETF on-line IPR repository at
+ http://www.ietf.org/ipr.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights that may cover technology that may be required to implement
+ this standard. Please address the information to the IETF at ietf-
+ ipr@ietf.org.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is provided by the IETF
+ Administrative Support Activity (IASA).
+
+
+
+
+
+
+
+Feather Standards Track [Page 125]
+