RFC3977
changeset 36 c404a87db5b7
parent 35 ed84c8bdd87b
child 37 74139325d305
     1.1 --- a/RFC3977	Sun Aug 29 17:28:58 2010 +0200
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,6998 +0,0 @@
     1.4 -
     1.5 -Network Working Group                                         C. Feather
     1.6 -Request for Comments: 3977                                      THUS plc
     1.7 -Obsoletes: 977                                              October 2006
     1.8 -Updates: 2980
     1.9 -Category: Standards Track
    1.10 -
    1.11 -
    1.12 -                 Network News Transfer Protocol (NNTP)
    1.13 -
    1.14 -Status of This Memo
    1.15 -
    1.16 -   This document specifies an Internet standards track protocol for the
    1.17 -   Internet community, and requests discussion and suggestions for
    1.18 -   improvements.  Please refer to the current edition of the "Internet
    1.19 -   Official Protocol Standards" (STD 1) for the standardization state
    1.20 -   and status of this protocol.  Distribution of this memo is unlimited.
    1.21 -
    1.22 -Copyright Notice
    1.23 -
    1.24 -   Copyright (C) The Internet Society (2006).
    1.25 -
    1.26 -Abstract
    1.27 -
    1.28 -   The Network News Transfer Protocol (NNTP) has been in use in the
    1.29 -   Internet for a decade, and remains one of the most popular protocols
    1.30 -   (by volume) in use today.  This document is a replacement for
    1.31 -   RFC 977, and officially updates the protocol specification.  It
    1.32 -   clarifies some vagueness in RFC 977, includes some new base
    1.33 -   functionality, and provides a specific mechanism to add standardized
    1.34 -   extensions to NNTP.
    1.35 -
    1.36 -Table of Contents
    1.37 -
    1.38 -   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .  3
    1.39 -     1.1.  Author's Note . . . . . . . . . . . . . . . . . . . . . .  4
    1.40 -   2.  Notation  . . . . . . . . . . . . . . . . . . . . . . . . . .  5
    1.41 -   3.  Basic Concepts  . . . . . . . . . . . . . . . . . . . . . . .  6
    1.42 -     3.1.  Commands and Responses  . . . . . . . . . . . . . . . . .  6
    1.43 -       3.1.1.  Multi-line Data Blocks . . . . . . . . . . . . . . . . 8
    1.44 -     3.2.  Response Codes  . . . . . . . . . . . . . . . . . . . . .  9
    1.45 -       3.2.1.  Generic Response Codes  . . . . . . . . . . . . . . . 10
    1.46 -         3.2.1.1.  Examples  . . . . . . . . . . . . . . . . . . . . 12
    1.47 -     3.3.  Capabilities and Extensions . . . . . . . . . . . . . . . 14
    1.48 -       3.3.1.  Capability Descriptions . . . . . . . . . . . . . . . 14
    1.49 -       3.3.2.  Standard Capabilities . . . . . . . . . . . . . . . . 15
    1.50 -       3.3.3.  Extensions  . . . . . . . . . . . . . . . . . . . . . 16
    1.51 -       3.3.4.  Initial IANA Register . . . . . . . . . . . . . . . . 18
    1.52 -     3.4.  Mandatory and Optional Commands . . . . . . . . . . . . . 20
    1.53 -
    1.54 -
    1.55 -
    1.56 -Feather                     Standards Track                     [Page 1]
    1.57 -
    1.58 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
    1.59 -
    1.60 -
    1.61 -       3.4.1.  Reading and Transit Servers . . . . . . . . . . . . . 21
    1.62 -       3.4.2.  Mode Switching  . . . . . . . . . . . . . . . . . . . 21
    1.63 -     3.5.  Pipelining  . . . . . . . . . . . . . . . . . . . . . . . 22
    1.64 -       3.5.1.  Examples  . . . . . . . . . . . . . . . . . . . . . . 23
    1.65 -     3.6.  Articles  . . . . . . . . . . . . . . . . . . . . . . . . 24
    1.66 -   4.  The WILDMAT Format  . . . . . . . . . . . . . . . . . . . . . 25
    1.67 -     4.1.  Wildmat Syntax  . . . . . . . . . . . . . . . . . . . . . 26
    1.68 -     4.2.  Wildmat Semantics . . . . . . . . . . . . . . . . . . . . 26
    1.69 -     4.3.  Extensions  . . . . . . . . . . . . . . . . . . . . . . . 27
    1.70 -     4.4.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . 27
    1.71 -   5.  Session Administration Commands . . . . . . . . . . . . . . . 28
    1.72 -     5.1.  Initial Connection  . . . . . . . . . . . . . . . . . . . 28
    1.73 -     5.2.  CAPABILITIES  . . . . . . . . . . . . . . . . . . . . . . 29
    1.74 -     5.3.  MODE READER . . . . . . . . . . . . . . . . . . . . . . . 32
    1.75 -     5.4.  QUIT  . . . . . . . . . . . . . . . . . . . . . . . . . . 34
    1.76 -   6.  Article Posting and Retrieval . . . . . . . . . . . . . . . . 35
    1.77 -     6.1.  Group and Article Selection . . . . . . . . . . . . . . . 36
    1.78 -       6.1.1.  GROUP . . . . . . . . . . . . . . . . . . . . . . . . 36
    1.79 -       6.1.2.  LISTGROUP . . . . . . . . . . . . . . . . . . . . . . 39
    1.80 -       6.1.3.  LAST  . . . . . . . . . . . . . . . . . . . . . . . . 42
    1.81 -       6.1.4.  NEXT  . . . . . . . . . . . . . . . . . . . . . . . . 44
    1.82 -     6.2.  Retrieval of Articles and Article Sections  . . . . . . . 45
    1.83 -       6.2.1.  ARTICLE . . . . . . . . . . . . . . . . . . . . . . . 46
    1.84 -       6.2.2.  HEAD  . . . . . . . . . . . . . . . . . . . . . . . . 49
    1.85 -       6.2.3.  BODY  . . . . . . . . . . . . . . . . . . . . . . . . 51
    1.86 -       6.2.4.  STAT  . . . . . . . . . . . . . . . . . . . . . . . . 53
    1.87 -     6.3.  Article Posting . . . . . . . . . . . . . . . . . . . . . 56
    1.88 -       6.3.1.  POST  . . . . . . . . . . . . . . . . . . . . . . . . 56
    1.89 -       6.3.2.  IHAVE . . . . . . . . . . . . . . . . . . . . . . . . 58
    1.90 -   7.  Information Commands  . . . . . . . . . . . . . . . . . . . . 61
    1.91 -     7.1.  DATE  . . . . . . . . . . . . . . . . . . . . . . . . . . 61
    1.92 -     7.2.  HELP  . . . . . . . . . . . . . . . . . . . . . . . . . . 62
    1.93 -     7.3.  NEWGROUPS . . . . . . . . . . . . . . . . . . . . . . . . 63
    1.94 -     7.4.  NEWNEWS . . . . . . . . . . . . . . . . . . . . . . . . . 64
    1.95 -     7.5.  Time  . . . . . . . . . . . . . . . . . . . . . . . . . . 65
    1.96 -       7.5.1.  Examples  . . . . . . . . . . . . . . . . . . . . . . 66
    1.97 -     7.6.  The LIST Commands . . . . . . . . . . . . . . . . . . . . 66
    1.98 -       7.6.1.  LIST  . . . . . . . . . . . . . . . . . . . . . . . . 67
    1.99 -       7.6.2.  Standard LIST Keywords  . . . . . . . . . . . . . . . 69
   1.100 -       7.6.3.  LIST ACTIVE . . . . . . . . . . . . . . . . . . . . . 70
   1.101 -       7.6.4.  LIST ACTIVE.TIMES . . . . . . . . . . . . . . . . . . 71
   1.102 -       7.6.5.  LIST DISTRIB.PATS . . . . . . . . . . . . . . . . . . 72
   1.103 -       7.6.6.  LIST NEWSGROUPS . . . . . . . . . . . . . . . . . . . 73
   1.104 -   8.  Article Field Access Commands . . . . . . . . . . . . . . . . 73
   1.105 -     8.1.  Article Metadata  . . . . . . . . . . . . . . . . . . . . 74
   1.106 -       8.1.1.  The :bytes Metadata Item  . . . . . . . . . . . . . . 74
   1.107 -       8.1.2.  The :lines Metadata Item  . . . . . . . . . . . . . . 75
   1.108 -     8.2.  Database Consistency  . . . . . . . . . . . . . . . . . . 75
   1.109 -
   1.110 -
   1.111 -
   1.112 -Feather                     Standards Track                     [Page 2]
   1.113 -
   1.114 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.115 -
   1.116 -
   1.117 -     8.3.  OVER  . . . . . . . . . . . . . . . . . . . . . . . . . . 76
   1.118 -     8.4.  LIST OVERVIEW.FMT . . . . . . . . . . . . . . . . . . . . 81
   1.119 -     8.5.  HDR . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
   1.120 -     8.6.  LIST HEADERS  . . . . . . . . . . . . . . . . . . . . . . 87
   1.121 -   9.  Augmented BNF Syntax for NNTP . . . . . . . . . . . . . . . . 90
   1.122 -     9.1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . 90
   1.123 -     9.2.  Commands  . . . . . . . . . . . . . . . . . . . . . . . . 92
   1.124 -     9.3.  Command Continuation  . . . . . . . . . . . . . . . . . . 93
   1.125 -     9.4.  Responses . . . . . . . . . . . . . . . . . . . . . . . . 93
   1.126 -       9.4.1.  Generic Responses . . . . . . . . . . . . . . . . . . 93
   1.127 -       9.4.2.  Initial Response Line Contents  . . . . . . . . . . . 94
   1.128 -       9.4.3.  Multi-line Response Contents  . . . . . . . . . . . . 94
   1.129 -     9.5.  Capability Lines  . . . . . . . . . . . . . . . . . . . . 95
   1.130 -     9.6.  LIST Variants . . . . . . . . . . . . . . . . . . . . . . 96
   1.131 -     9.7.  Articles  . . . . . . . . . . . . . . . . . . . . . . . . 97
   1.132 -     9.8.  General Non-terminals . . . . . . . . . . . . . . . . . . 97
   1.133 -     9.9.  Extensions and Validation . . . . . . . . . . . . . . . . 99
   1.134 -   10. Internationalisation Considerations . . . . . . . . . . . . .100
   1.135 -     10.1. Introduction and Historical Situation . . . . . . . . . .100
   1.136 -     10.2. This Specification  . . . . . . . . . . . . . . . . . . .101
   1.137 -     10.3. Outstanding Issues  . . . . . . . . . . . . . . . . . . .102
   1.138 -   11. IANA Considerations . . . . . . . . . . . . . . . . . . . . .103
   1.139 -   12. Security Considerations . . . . . . . . . . . . . . . . . . .103
   1.140 -     12.1. Personal and Proprietary Information  . . . . . . . . . .104
   1.141 -     12.2. Abuse of Server Log Information . . . . . . . . . . . . .104
   1.142 -     12.3. Weak Authentication and Access Control  . . . . . . . . .104
   1.143 -     12.4. DNS Spoofing  . . . . . . . . . . . . . . . . . . . . . .104
   1.144 -     12.5. UTF-8 Issues  . . . . . . . . . . . . . . . . . . . . . .105
   1.145 -     12.6. Caching of Capability Lists . . . . . . . . . . . . . . .106
   1.146 -   13. Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .107
   1.147 -   14. References  . . . . . . . . . . . . . . . . . . . . . . . . .110
   1.148 -     14.1. Normative References  . . . . . . . . . . . . . . . . . .110
   1.149 -     14.2. Informative References  . . . . . . . . . . . . . . . . .110
   1.150 -   A.  Interaction with Other Specifications . . . . . . . . . . . .112
   1.151 -     A.1.  Header Folding  . . . . . . . . . . . . . . . . . . . . .112
   1.152 -     A.2.  Message-IDs . . . . . . . . . . . . . . . . . . . . . . .112
   1.153 -     A.3.  Article Posting . . . . . . . . . . . . . . . . . . . . .114
   1.154 -   B.  Summary of Commands . . . . . . . . . . . . . . . . . . . . .115
   1.155 -   C.  Summary of Response Codes . . . . . . . . . . . . . . . . . .117
   1.156 -   D.  Changes from RFC 977  . . . . . . . . . . . . . . . . . . . .121
   1.157 -
   1.158 -1.  Introduction
   1.159 -
   1.160 -   This document specifies the Network News Transfer Protocol (NNTP),
   1.161 -   which is used for the distribution, inquiry, retrieval, and posting
   1.162 -   of Netnews articles using a reliable stream-based mechanism.  For
   1.163 -   news-reading clients, NNTP enables retrieval of news articles that
   1.164 -
   1.165 -
   1.166 -
   1.167 -
   1.168 -Feather                     Standards Track                     [Page 3]
   1.169 -
   1.170 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.171 -
   1.172 -
   1.173 -   are stored in a central database, giving subscribers the ability to
   1.174 -   select only those articles they wish to read.
   1.175 -
   1.176 -   The Netnews model provides for indexing, cross-referencing, and
   1.177 -   expiration of aged messages.  NNTP is designed for efficient
   1.178 -   transmission of Netnews articles over a reliable full duplex
   1.179 -   communication channel.
   1.180 -
   1.181 -   Although the protocol specification in this document is largely
   1.182 -   compatible with the version specified in RFC 977 [RFC977], a number
   1.183 -   of changes are summarised in Appendix D.  In particular:
   1.184 -
   1.185 -   o  the default character set is changed from US-ASCII [ANSI1986] to
   1.186 -      UTF-8 [RFC3629] (note that US-ASCII is a subset of UTF-8);
   1.187 -
   1.188 -   o  a number of commands that were optional in RFC 977 or that have
   1.189 -      been taken from RFC 2980 [RFC2980] are now mandatory; and
   1.190 -
   1.191 -   o  a CAPABILITIES command has been added to allow clients to
   1.192 -      determine what functionality is available from a server.
   1.193 -
   1.194 -   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   1.195 -   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   1.196 -   document are to be interpreted as described in RFC 2119 [RFC2119].
   1.197 -
   1.198 -   An implementation is not compliant if it fails to satisfy one or more
   1.199 -   of the MUST requirements for this protocol.  An implementation that
   1.200 -   satisfies all the MUST and all the SHOULD requirements for its
   1.201 -   protocols is said to be "unconditionally compliant"; one that
   1.202 -   satisfies all the MUST requirements but not all the SHOULD
   1.203 -   requirements for NNTP is said to be "conditionally compliant".
   1.204 -
   1.205 -   For the remainder of this document, the terms "client" and "client
   1.206 -   host" refer to a host making use of the NNTP service, while the terms
   1.207 -   "server" and "server host" refer to a host that offers the NNTP
   1.208 -   service.
   1.209 -
   1.210 -1.1.  Author's Note
   1.211 -
   1.212 -   This document is written in XML using an NNTP-specific DTD.  Custom
   1.213 -   software is used to convert this to RFC 2629 [RFC2629] format, and
   1.214 -   then the public "xml2rfc" package to further reduce this to text,
   1.215 -   nroff source, and HTML.
   1.216 -
   1.217 -   No perl was used in producing this document.
   1.218 -
   1.219 -
   1.220 -
   1.221 -
   1.222 -
   1.223 -
   1.224 -Feather                     Standards Track                     [Page 4]
   1.225 -
   1.226 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.227 -
   1.228 -
   1.229 -2.  Notation
   1.230 -
   1.231 -   The following notational conventions are used in this document.
   1.232 -
   1.233 -     UPPERCASE     indicates literal text to be included in the
   1.234 -                   command.
   1.235 -
   1.236 -     lowercase     indicates a token described elsewhere.
   1.237 -
   1.238 -     [brackets]    indicate that the enclosed material is optional.
   1.239 -
   1.240 -     elliptical    indicates that the argument may be repeated any
   1.241 -     ... marks     number of times (it must occur at least once).
   1.242 -
   1.243 -     vertical|bar  indicates a choice of two mutually exclusive
   1.244 -                   arguments (exactly one must be provided).
   1.245 -
   1.246 -   The name "message-id" for a command or response argument indicates
   1.247 -   that it is the message-id of an article as described in Section 3.6,
   1.248 -   including the angle brackets.
   1.249 -
   1.250 -   The name "wildmat" for an argument indicates that it is a wildmat as
   1.251 -   defined in Section 4.  If the argument does not meet the requirements
   1.252 -   of that section (for example, if it does not fit the grammar of
   1.253 -   Section 4.1), the NNTP server MAY place some interpretation on it
   1.254 -   (not specified by this document) or otherwise MUST treat it as a
   1.255 -   syntax error.
   1.256 -
   1.257 -   Responses for each command will be described in tables listing the
   1.258 -   required format of a response followed by the meaning that should be
   1.259 -   ascribed to that response.
   1.260 -
   1.261 -   The terms "NUL", "TAB", "LF", "CR, and "space" refer to the octets
   1.262 -   %x00, %x09, %x0A, %x0D, and %x20, respectively (that is, the octets
   1.263 -   with those codes in US-ASCII [ANSI1986] and thus in UTF-8 [RFC3629]).
   1.264 -   The term "CRLF" or "CRLF pair" means the sequence CR immediately
   1.265 -   followed by LF (that is, %x0D.0A).  A "printable US-ASCII character"
   1.266 -   is an octet in the range %x21-7E.  Quoted characters refer to the
   1.267 -   octets with those codes in US-ASCII (so "." and "<" refer to %x2E and
   1.268 -   %x3C) and will always be printable US-ASCII characters; similarly,
   1.269 -   "digit" refers to the octets %x30-39.
   1.270 -
   1.271 -   A "keyword" MUST consist only of US-ASCII letters, digits, and the
   1.272 -   characters dot (".") and dash ("-") and MUST begin with a letter.
   1.273 -   Keywords MUST be at least three characters in length.
   1.274 -
   1.275 -
   1.276 -
   1.277 -
   1.278 -
   1.279 -
   1.280 -Feather                     Standards Track                     [Page 5]
   1.281 -
   1.282 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.283 -
   1.284 -
   1.285 -   Examples in this document are not normative but serve to illustrate
   1.286 -   usages, arguments, and responses.  In the examples, a "[C]" will be
   1.287 -   used to represent the client host and an "[S]" will be used to
   1.288 -   represent the server host.  Most of the examples do not rely on a
   1.289 -   particular server state.  In some cases, however, they do assume that
   1.290 -   the currently selected newsgroup (see the GROUP command,
   1.291 -   Section 6.1.1) is invalid; when so, this is indicated at the start of
   1.292 -   the example.  Examples may use commands or other keywords not defined
   1.293 -   in this specification (such as an XENCRYPT command).  These will be
   1.294 -   used to illustrate some point and do not imply that any such command
   1.295 -   is defined elsewhere or needs to exist in any particular
   1.296 -   implementation.
   1.297 -
   1.298 -   Terms that might be read as specifying details of a client or server
   1.299 -   implementation, such as "database", are used simply to ease
   1.300 -   description.  Provided that implementations conform to the protocol
   1.301 -   and format specifications in this document, no specific technique is
   1.302 -   mandated.
   1.303 -
   1.304 -3.  Basic Concepts
   1.305 -
   1.306 -3.1.  Commands and Responses
   1.307 -
   1.308 -   NNTP operates over any reliable bi-directional 8-bit-wide data stream
   1.309 -   channel.  When the connection is established, the NNTP server host
   1.310 -   MUST send a greeting.  The client host and server host then exchange
   1.311 -   commands and responses (respectively) until the connection is closed
   1.312 -   or aborted.  If the connection used is TCP, then the server host
   1.313 -   starts the NNTP service by listening on a TCP port.  When a client
   1.314 -   host wishes to make use of the service, it MUST establish a TCP
   1.315 -   connection with the server host by connecting to that host on the
   1.316 -   same port on which the server is listening.
   1.317 -
   1.318 -   The character set for all NNTP commands is UTF-8 [RFC3629].  Commands
   1.319 -   in NNTP MUST consist of a keyword, which MAY be followed by one or
   1.320 -   more arguments.  A CRLF pair MUST terminate all commands.  Multiple
   1.321 -   commands MUST NOT be on the same line.  Unless otherwise noted
   1.322 -   elsewhere in this document, arguments SHOULD consist of printable US-
   1.323 -   ASCII characters.  Keywords and arguments MUST each be separated by
   1.324 -   one or more space or TAB characters.  Command lines MUST NOT exceed
   1.325 -   512 octets, which includes the terminating CRLF pair.  The arguments
   1.326 -   MUST NOT exceed 497 octets.  A server MAY relax these limits for
   1.327 -   commands defined in an extension.
   1.328 -
   1.329 -   Where this specification permits UTF-8 characters outside the range
   1.330 -   of U+0000 to U+007F, implementations MUST NOT use the Byte Order Mark
   1.331 -   (U+FEFF, encoding %xEF.BB.BF) and MUST use the Word Joiner (U+2060,
   1.332 -   encoding %xE2.91.A0) for the meaning Zero Width No-Break Space in
   1.333 -
   1.334 -
   1.335 -
   1.336 -Feather                     Standards Track                     [Page 6]
   1.337 -
   1.338 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.339 -
   1.340 -
   1.341 -   command lines and the initial lines of responses.  Implementations
   1.342 -   SHOULD apply these same principles throughout.
   1.343 -
   1.344 -   The term "character" means a single Unicode code point.
   1.345 -   Implementations are not required to carry out Unicode normalisation.
   1.346 -   Thus, U+0084 (A-dieresis) is one character, while U+0041 U+0308 (A
   1.347 -   composed with dieresis) is two; the two need not be treated as
   1.348 -   equivalent.
   1.349 -
   1.350 -   Commands may have variants; if so, they use a second keyword
   1.351 -   immediately after the first to indicate which variant is required.
   1.352 -   The only such commands in this specification are LIST and MODE.  Note
   1.353 -   that such variants are sometimes referred to as if they were commands
   1.354 -   in their own right: "the LIST ACTIVE" command should be read as
   1.355 -   shorthand for "the ACTIVE variant of the LIST command".
   1.356 -
   1.357 -   Keywords are case insensitive; the case of keywords for commands MUST
   1.358 -   be ignored by the server.  Command and response arguments are case or
   1.359 -   language specific only when stated, either in this document or in
   1.360 -   other relevant specifications.
   1.361 -
   1.362 -   In some cases, a command involves more data than just a single line.
   1.363 -   The further data may be sent either immediately after the command
   1.364 -   line (there are no instances of this in this specification, but there
   1.365 -   are in extensions such as [NNTP-STREAM]) or following a request from
   1.366 -   the server (indicated by a 3xx response).
   1.367 -
   1.368 -   Each response MUST start with a three-digit response code that is
   1.369 -   sufficient to distinguish all responses.  Certain valid responses are
   1.370 -   defined to be multi-line; for all others, the response is contained
   1.371 -   in a single line.  The initial line of the response MUST NOT exceed
   1.372 -   512 octets, which includes the response code and the terminating CRLF
   1.373 -   pair; an extension MAY specify a greater maximum for commands that it
   1.374 -   defines, but not for any other command.  Single-line responses
   1.375 -   consist of an initial line only.  Multi-line responses consist of an
   1.376 -   initial line followed by a multi-line data block.
   1.377 -
   1.378 -   An NNTP server MAY have an inactivity autologout timer.  Such a timer
   1.379 -   SHOULD be of at least three minutes' duration, with the exception
   1.380 -   that there MAY be a shorter limit on how long the server is willing
   1.381 -   to wait for the first command from the client.  The receipt of any
   1.382 -   command from the client during the timer interval SHOULD suffice to
   1.383 -   reset the autologout timer.  Similarly, the receipt of any
   1.384 -   significant amount of data from a client that is sending a multi-line
   1.385 -   data block (such as during a POST or IHAVE command) SHOULD suffice to
   1.386 -   reset the autologout timer.  When the timer expires, the server
   1.387 -   SHOULD close the connection without sending any response to the
   1.388 -   client.
   1.389 -
   1.390 -
   1.391 -
   1.392 -Feather                     Standards Track                     [Page 7]
   1.393 -
   1.394 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.395 -
   1.396 -
   1.397 -3.1.1.  Multi-line Data Blocks
   1.398 -
   1.399 -   A multi-line data block is used in certain commands and responses.
   1.400 -   It MUST adhere to the following rules:
   1.401 -
   1.402 -   1.  The block consists of a sequence of zero or more "lines", each
   1.403 -       being a stream of octets ending with a CRLF pair.  Apart from
   1.404 -       those line endings, the stream MUST NOT include the octets NUL,
   1.405 -       LF, or CR.
   1.406 -
   1.407 -   2.  In a multi-line response, the block immediately follows the CRLF
   1.408 -       at the end of the initial line of the response.  When used in any
   1.409 -       other context, the specific command will define when the block is
   1.410 -       sent.
   1.411 -
   1.412 -   3.  If any line of the data block begins with the "termination octet"
   1.413 -       ("." or %x2E), that line MUST be "dot-stuffed" by prepending an
   1.414 -       additional termination octet to that line of the block.
   1.415 -
   1.416 -   4.  The lines of the block MUST be followed by a terminating line
   1.417 -       consisting of a single termination octet followed by a CRLF pair
   1.418 -       in the normal way.  Thus, unless it is empty, a multi-line block
   1.419 -       is always terminated with the five octets CRLF "." CRLF
   1.420 -       (%x0D.0A.2E.0D.0A).
   1.421 -
   1.422 -   5.  When a multi-line block is interpreted, the "dot-stuffing" MUST
   1.423 -       be undone; i.e., the recipient MUST ensure that, in any line
   1.424 -       beginning with the termination octet followed by octets other
   1.425 -       than a CRLF pair, that initial termination octet is disregarded.
   1.426 -
   1.427 -   6.  Likewise, the terminating line ("." CRLF or %x2E.0D.0A) MUST NOT
   1.428 -       be considered part of the multi-line block; i.e., the recipient
   1.429 -       MUST ensure that any line beginning with the termination octet
   1.430 -       followed immediately by a CRLF pair is disregarded.  (The first
   1.431 -       CRLF pair of the terminating CRLF "." CRLF of a non-empty block
   1.432 -       is, of course, part of the last line of the block.)
   1.433 -
   1.434 -   Note that texts using an encoding (such as UTF-16 or UTF-32) that may
   1.435 -   contain the octets NUL, LF, or CR other than a CRLF pair cannot be
   1.436 -   reliably conveyed in the above format (that is, they violate the MUST
   1.437 -   requirement above).  However, except when stated otherwise, this
   1.438 -   specification does not require the content to be UTF-8, and therefore
   1.439 -   (subject to that same requirement) it MAY include octets above and
   1.440 -   below 128 mixed arbitrarily.
   1.441 -
   1.442 -   This document does not place any limit on the length of a line in a
   1.443 -   multi-line block.  However, the standards that define the format of
   1.444 -   articles may do so.
   1.445 -
   1.446 -
   1.447 -
   1.448 -Feather                     Standards Track                     [Page 8]
   1.449 -
   1.450 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.451 -
   1.452 -
   1.453 -3.2.  Response Codes
   1.454 -
   1.455 -   Each response MUST begin with a three-digit status indicator.  These
   1.456 -   are status reports from the server and indicate the response to the
   1.457 -   last command received from the client.
   1.458 -
   1.459 -   The first digit of the response broadly indicates the success,
   1.460 -   failure, or progress of the previous command:
   1.461 -
   1.462 -      1xx - Informative message
   1.463 -      2xx - Command completed OK
   1.464 -      3xx - Command OK so far; send the rest of it
   1.465 -      4xx - Command was syntactically correct but failed for some reason
   1.466 -      5xx - Command unknown, unsupported, unavailable, or syntax error
   1.467 -
   1.468 -   The next digit in the code indicates the function response category:
   1.469 -
   1.470 -      x0x - Connection, setup, and miscellaneous messages
   1.471 -      x1x - Newsgroup selection
   1.472 -      x2x - Article selection
   1.473 -      x3x - Distribution functions
   1.474 -      x4x - Posting
   1.475 -      x8x - Reserved for authentication and privacy extensions
   1.476 -      x9x - Reserved for private use (non-standard extensions)
   1.477 -
   1.478 -   Certain responses contain arguments such as numbers and names in
   1.479 -   addition to the status indicator.  In those cases, to simplify
   1.480 -   interpretation by the client, the number and type of such arguments
   1.481 -   is fixed for each response code, as is whether the code is
   1.482 -   single-line or multi-line.  Any extension MUST follow this principle
   1.483 -   as well.  Note that, for historical reasons, the 211 response code is
   1.484 -   an exception to this in that the response may be single-line or
   1.485 -   multi-line depending on the command (GROUP or LISTGROUP) that
   1.486 -   generated it.  In all other cases, the client MUST only use the
   1.487 -   status indicator itself to determine the nature of the response.  The
   1.488 -   exact response codes that can be returned by any given command are
   1.489 -   detailed in the description of that command.
   1.490 -
   1.491 -   Arguments MUST be separated from the numeric status indicator and
   1.492 -   from each other by a single space.  All numeric arguments MUST be in
   1.493 -   base 10 (decimal) format and MAY have leading zeros.  String
   1.494 -   arguments MUST contain at least one character and MUST NOT contain
   1.495 -   TAB, LF, CR, or space.  The server MAY add any text after the
   1.496 -   response code or last argument, as appropriate, and the client MUST
   1.497 -   NOT make decisions based on this text.  Such text MUST be separated
   1.498 -   from the numeric status indicator or the last argument by at least
   1.499 -   one space.
   1.500 -
   1.501 -
   1.502 -
   1.503 -
   1.504 -Feather                     Standards Track                     [Page 9]
   1.505 -
   1.506 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.507 -
   1.508 -
   1.509 -   The server MUST respond to any command with the appropriate generic
   1.510 -   response (given in Section 3.2.1) if it represents the situation.
   1.511 -   Otherwise, each recognized command MUST return one of the response
   1.512 -   codes specifically listed in its description or in an extension.  A
   1.513 -   server MAY provide extensions to this specification, including new
   1.514 -   commands, new variants or features of existing commands, and other
   1.515 -   ways of changing the internal state of the server.  However, the
   1.516 -   server MUST NOT produce any other responses to a client that does not
   1.517 -   invoke any of the additional features.  (Therefore, a client that
   1.518 -   restricts itself to this specification will only receive the
   1.519 -   responses that are listed.)
   1.520 -
   1.521 -   If a client receives an unexpected response, it SHOULD use the first
   1.522 -   digit of the response to determine the result.  For example, an
   1.523 -   unexpected 2xx should be taken as success, and an unexpected 4xx or
   1.524 -   5xx as failure.
   1.525 -
   1.526 -   Response codes not specified in this document MAY be used for any
   1.527 -   installation-specific additional commands also not specified.  These
   1.528 -   SHOULD be chosen to fit the pattern of x9x specified above.
   1.529 -
   1.530 -   Neither this document nor any registered extension (see
   1.531 -   Section 3.3.3) will specify any response codes of the x9x pattern.
   1.532 -   (Implementers of extensions are accordingly cautioned not to use such
   1.533 -   responses for extensions that may subsequently be submitted for
   1.534 -   registration.)
   1.535 -
   1.536 -3.2.1.  Generic Response Codes
   1.537 -
   1.538 -   The server MUST respond to any command with the appropriate one of
   1.539 -   the following generic responses if it represents the situation.
   1.540 -
   1.541 -   If the command is not recognized, or if it is an optional command
   1.542 -   that is not implemented by the server, the response code 500 MUST be
   1.543 -   returned.
   1.544 -
   1.545 -   If there is a syntax error in the arguments of a recognized command,
   1.546 -   including the case where more arguments are provided than the command
   1.547 -   specifies or the command line is longer than the server accepts, the
   1.548 -   response code 501 MUST be returned.  The line MUST NOT be truncated
   1.549 -   or split and then interpreted.  Note that where a command has
   1.550 -   variants depending on a second keyword (e.g., LIST ACTIVE and LIST
   1.551 -   NEWSGROUPS), 501 MUST be used when the base command is implemented
   1.552 -   but the requested variant is not, and 500 MUST be used only when the
   1.553 -   base command itself is not implemented.
   1.554 -
   1.555 -   If an argument is required to be a base64-encoded string [RFC4648]
   1.556 -   (there are no such arguments in this specification, but there may be
   1.557 -
   1.558 -
   1.559 -
   1.560 -Feather                     Standards Track                    [Page 10]
   1.561 -
   1.562 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.563 -
   1.564 -
   1.565 -   in extensions) and is not validly encoded, the response code 504 MUST
   1.566 -   be returned.
   1.567 -
   1.568 -   If the server experiences an internal fault or problem that means it
   1.569 -   is unable to carry out the command (for example, a necessary file is
   1.570 -   missing or a necessary service could not be contacted), the response
   1.571 -   code 403 MUST be returned.  If the server recognizes the command but
   1.572 -   does not provide an optional feature (for example, because it does
   1.573 -   not store the required information), or if it only handles a subset
   1.574 -   of legitimate cases (see the HDR command, Section 8.5, for an
   1.575 -   example), the response code 503 MUST be returned.
   1.576 -
   1.577 -   If the client is not authorized to use the specified facility when
   1.578 -   the server is in its current state, then the appropriate one of the
   1.579 -   following response codes MUST be used.
   1.580 -
   1.581 -   502: It is necessary to terminate the connection and to start a new
   1.582 -      one with the appropriate authority before the command can be used.
   1.583 -      Historically, some mode-switching servers (see Section 3.4.1) used
   1.584 -      this response to indicate that this command will become available
   1.585 -      after the MODE READER command (Section 5.3) is used, but this
   1.586 -      usage does not conform to this specification and MUST NOT be used.
   1.587 -      Note that the server MUST NOT close the connection immediately
   1.588 -      after a 502 response except at the initial connection
   1.589 -      (Section 5.1) and with the MODE READER command.
   1.590 -
   1.591 -   480: The client must authenticate itself to the server (that is, it
   1.592 -      must provide information as to the identity of the client) before
   1.593 -      the facility can be used on this connection.  This will involve
   1.594 -      the use of an authentication extension such as [NNTP-AUTH].
   1.595 -
   1.596 -   483: The client must negotiate appropriate privacy protection on the
   1.597 -      connection.  This will involve the use of a privacy extension such
   1.598 -      as [NNTP-TLS].
   1.599 -
   1.600 -   401: The client must change the state of the connection in some other
   1.601 -      manner.  The first argument of the response MUST be the capability
   1.602 -      label (see Section 5.2) of the facility that provides the
   1.603 -      necessary mechanism (usually an extension, which may be a private
   1.604 -      extension).  The server MUST NOT use this response code except as
   1.605 -      specified by the definition of the capability in question.
   1.606 -
   1.607 -   If the server has to terminate the connection for some reason, it
   1.608 -   MUST give a 400 response code to the next command and then
   1.609 -   immediately close the connection.  Following a 400 response, clients
   1.610 -   SHOULD NOT simply reconnect immediately and retry the same actions.
   1.611 -   Rather, a client SHOULD either use an exponentially increasing delay
   1.612 -   between retries (e.g., double the waiting time after each 400
   1.613 -
   1.614 -
   1.615 -
   1.616 -Feather                     Standards Track                    [Page 11]
   1.617 -
   1.618 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.619 -
   1.620 -
   1.621 -   response) or present any associated text to the user for them to
   1.622 -   decide whether and when to retry.
   1.623 -
   1.624 -   The client MUST be prepared to receive any of these responses for any
   1.625 -   command (except, of course, that the server MUST NOT generate a 500
   1.626 -   response code for mandatory commands).
   1.627 -
   1.628 -3.2.1.1.  Examples
   1.629 -
   1.630 -   Example of an unknown command:
   1.631 -
   1.632 -      [C] MAIL
   1.633 -      [S] 500 Unknown command
   1.634 -
   1.635 -   Example of an unsupported command:
   1.636 -
   1.637 -      [C] CAPABILITIES
   1.638 -      [S] 101 Capability list:
   1.639 -      [S] VERSION 2
   1.640 -      [S] READER
   1.641 -      [S] NEWNEWS
   1.642 -      [S] LIST ACTIVE NEWSGROUPS
   1.643 -      [S] .
   1.644 -      [C] OVER
   1.645 -      [S] 500 Unknown command
   1.646 -
   1.647 -   Example of an unsupported variant:
   1.648 -
   1.649 -      [C] MODE POSTER
   1.650 -      [S] 501 Unknown MODE option
   1.651 -
   1.652 -   Example of a syntax error:
   1.653 -
   1.654 -      [C] ARTICLE a.message.id@no.angle.brackets
   1.655 -      [S] 501 Syntax error
   1.656 -
   1.657 -   Example of an overlong command line:
   1.658 -
   1.659 -      [C] HEAD 53 54 55
   1.660 -      [S] 501 Too many arguments
   1.661 -
   1.662 -   Example of a bad wildmat:
   1.663 -
   1.664 -      [C] LIST ACTIVE u[ks].*
   1.665 -      [S] 501 Syntax error
   1.666 -
   1.667 -
   1.668 -
   1.669 -
   1.670 -
   1.671 -
   1.672 -Feather                     Standards Track                    [Page 12]
   1.673 -
   1.674 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.675 -
   1.676 -
   1.677 -   Example of a base64-encoding error (the second argument is meant to
   1.678 -   be base64 encoded):
   1.679 -
   1.680 -      [C] XENCRYPT RSA abcd=efg
   1.681 -      [S] 504 Base64 encoding error
   1.682 -
   1.683 -   Example of an attempt to access a facility not available to this
   1.684 -   connection:
   1.685 -
   1.686 -      [C] MODE READER
   1.687 -      [S] 200 Reader mode, posting permitted
   1.688 -      [C] IHAVE <i.am.an.article.you.will.want@example.com>
   1.689 -      [S] 500 Permission denied
   1.690 -
   1.691 -   Example of an attempt to access a facility requiring authentication:
   1.692 -
   1.693 -      [C] GROUP secret.group
   1.694 -      [S] 480 Permission denied
   1.695 -
   1.696 -   Example of a successful attempt following such authentication:
   1.697 -
   1.698 -      [C] XSECRET fred flintstone
   1.699 -      [S] 290 Password for fred accepted
   1.700 -      [C] GROUP secret.group
   1.701 -      [S] 211 5 1 20 secret.group selected
   1.702 -
   1.703 -   Example of an attempt to access a facility requiring privacy:
   1.704 -
   1.705 -      [C] GROUP secret.group
   1.706 -      [S] 483 Secure connection required
   1.707 -      [C] XENCRYPT
   1.708 -      [Client and server negotiate encryption on the link]
   1.709 -      [S] 283 Encrypted link established
   1.710 -      [C] GROUP secret.group
   1.711 -      [S] 211 5 1 20 secret.group selected
   1.712 -
   1.713 -   Example of a need to change mode before a facility is used:
   1.714 -
   1.715 -      [C] GROUP binary.group
   1.716 -      [S] 401 XHOST Not on this virtual host
   1.717 -      [C] XHOST binary.news.example.org
   1.718 -      [S] 290 binary.news.example.org virtual host selected
   1.719 -      [C] GROUP binary.group
   1.720 -      [S] 211 5 1 77 binary.group selected
   1.721 -
   1.722 -
   1.723 -
   1.724 -
   1.725 -
   1.726 -
   1.727 -
   1.728 -Feather                     Standards Track                    [Page 13]
   1.729 -
   1.730 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.731 -
   1.732 -
   1.733 -   Example of a temporary failure:
   1.734 -
   1.735 -      [C] GROUP archive.local
   1.736 -      [S] 403 Archive server temporarily offline
   1.737 -
   1.738 -   Example of the server needing to close down immediately:
   1.739 -
   1.740 -      [C] ARTICLE 123
   1.741 -      [S] 400 Power supply failed, running on UPS
   1.742 -      [Server closes connection.]
   1.743 -
   1.744 -3.3.  Capabilities and Extensions
   1.745 -
   1.746 -   Not all NNTP servers provide exactly the same facilities, both
   1.747 -   because this specification allows variation and because servers may
   1.748 -   provide extensions.  A set of facilities that are related are called
   1.749 -   a "capability".  This specification provides a way to determine what
   1.750 -   capabilities are available, includes a list of standard capabilities,
   1.751 -   and includes a mechanism (the extension mechanism) for defining new
   1.752 -   capabilities.
   1.753 -
   1.754 -3.3.1.  Capability Descriptions
   1.755 -
   1.756 -   A client can determine the available capabilities of the server by
   1.757 -   using the CAPABILITIES command (Section 5.2).  This returns a
   1.758 -   capability list, which is a list of capability lines.  Each line
   1.759 -   describes one available capability.
   1.760 -
   1.761 -   Each capability line consists of one or more tokens, which MUST be
   1.762 -   separated by one or more space or TAB characters.  A token is a
   1.763 -   string of 1 or more printable UTF-8 characters (that is, either
   1.764 -   printable US-ASCII characters or any UTF-8 sequence outside the US-
   1.765 -   ASCII range, but not space or TAB).  Unless stated otherwise, tokens
   1.766 -   are case insensitive.  Each capability line consists of the
   1.767 -   following:
   1.768 -
   1.769 -   o  The capability label, which is a keyword indicating the
   1.770 -      capability.  A capability label may be defined by this
   1.771 -      specification or a successor, or by an extension.
   1.772 -
   1.773 -   o  The label is then followed by zero or more tokens, which are
   1.774 -      arguments of the capability.  The form and meaning of these tokens
   1.775 -      is specific to each capability.
   1.776 -
   1.777 -   The server MUST ensure that the capability list accurately reflects
   1.778 -   the capabilities (including extensions) currently available.  If a
   1.779 -   capability is only available with the server in a certain state (for
   1.780 -   example, only after authentication), the list MUST only include the
   1.781 -
   1.782 -
   1.783 -
   1.784 -Feather                     Standards Track                    [Page 14]
   1.785 -
   1.786 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.787 -
   1.788 -
   1.789 -   capability label when the server is in that state.  Similarly, if
   1.790 -   only some of the commands in an extension will be available, or if
   1.791 -   the behaviour of the extension will change in some other manner,
   1.792 -   according to the state of the server, this MUST be indicated by
   1.793 -   different arguments in the capability line.
   1.794 -
   1.795 -   Note that a capability line can only begin with a letter.  Lines
   1.796 -   beginning with other characters are reserved for future versions of
   1.797 -   this specification.  In order to interoperate with such versions,
   1.798 -   clients MUST be prepared to receive lines beginning with other
   1.799 -   characters and MUST ignore any they do not understand.
   1.800 -
   1.801 -3.3.2.  Standard Capabilities
   1.802 -
   1.803 -   The following capabilities are defined by this specification.
   1.804 -
   1.805 -   VERSION
   1.806 -      This capability MUST be advertised by all servers and MUST be the
   1.807 -      first capability in the capability list; it indicates the
   1.808 -      version(s) of NNTP that the server supports.  There must be at
   1.809 -      least one argument; each argument is a decimal number and MUST NOT
   1.810 -      have a leading zero.  Version numbers are assigned only in RFCs
   1.811 -      that update or replace this specification; servers MUST NOT create
   1.812 -      their own version numbers.
   1.813 -
   1.814 -      The version number of this specification is 2.
   1.815 -
   1.816 -   READER
   1.817 -      This capability indicates that the server implements the various
   1.818 -      commands useful for reading clients.
   1.819 -
   1.820 -   IHAVE
   1.821 -      This capability indicates that the server implements the IHAVE
   1.822 -      command.
   1.823 -
   1.824 -   POST
   1.825 -      This capability indicates that the server implements the POST
   1.826 -      command.
   1.827 -
   1.828 -   NEWNEWS
   1.829 -      This capability indicates that the server implements the NEWNEWS
   1.830 -      command.
   1.831 -
   1.832 -   HDR
   1.833 -      This capability indicates that the server implements the header
   1.834 -      access commands (HDR and LIST HEADERS).
   1.835 -
   1.836 -
   1.837 -
   1.838 -
   1.839 -
   1.840 -Feather                     Standards Track                    [Page 15]
   1.841 -
   1.842 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.843 -
   1.844 -
   1.845 -   OVER
   1.846 -      This capability indicates that the server implements the overview
   1.847 -      access commands (OVER and LIST OVERVIEW.FMT).  If and only if the
   1.848 -      server supports the message-id form of the OVER command, there
   1.849 -      must be a single argument MSGID.
   1.850 -
   1.851 -   LIST
   1.852 -      This capability indicates that the server implements at least one
   1.853 -      variant of the LIST command.  There MUST be one argument for each
   1.854 -      variant of the LIST command supported by the server, giving the
   1.855 -      keyword for that variant.
   1.856 -
   1.857 -   IMPLEMENTATION
   1.858 -      This capability MAY be provided by a server.  If so, the arguments
   1.859 -      SHOULD be used to provide information such as the server software
   1.860 -      name and version number.  The client MUST NOT use this line to
   1.861 -      determine capabilities of the server.  (While servers often
   1.862 -      provide this information in the initial greeting, clients need to
   1.863 -      guess whether this is the case; this capability makes it clear
   1.864 -      what the information is.)
   1.865 -
   1.866 -   MODE-READER
   1.867 -      This capability indicates that the server is mode-switching
   1.868 -      (Section 3.4.2) and that the MODE READER command needs to be used
   1.869 -      to enable the READER capability.
   1.870 -
   1.871 -3.3.3.  Extensions
   1.872 -
   1.873 -   Although NNTP is widely and robustly deployed, some parts of the
   1.874 -   Internet community might wish to extend the NNTP service.  It must be
   1.875 -   emphasized that any extension to NNTP should not be considered
   1.876 -   lightly.  NNTP's strength comes primarily from its simplicity.
   1.877 -   Experience with many protocols has shown that:
   1.878 -
   1.879 -      Protocols with few options tend towards ubiquity, whilst protocols
   1.880 -      with many options tend towards obscurity.
   1.881 -
   1.882 -   This means that each and every extension, regardless of its benefits,
   1.883 -   must be carefully scrutinized with respect to its implementation,
   1.884 -   deployment, and interoperability costs.  In many cases, the cost of
   1.885 -   extending the NNTP service will likely outweigh the benefit.
   1.886 -
   1.887 -   An extension is a package of associated facilities, often but not
   1.888 -   always including one or more new commands.  Each extension MUST
   1.889 -   define at least one new capability label (this will often, but need
   1.890 -   not, be the name of one of these new commands).  While any additional
   1.891 -   capability information can normally be specified using arguments to
   1.892 -
   1.893 -
   1.894 -
   1.895 -
   1.896 -Feather                     Standards Track                    [Page 16]
   1.897 -
   1.898 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.899 -
   1.900 -
   1.901 -   that label, an extension MAY define more than one capability label.
   1.902 -   However, this SHOULD be limited to exceptional circumstances.
   1.903 -
   1.904 -   An extension is either a private extension, or its capabilities are
   1.905 -   included in the IANA registry of capabilities (see Section 3.3.4) and
   1.906 -   it is defined in an RFC (in which case it is a "registered
   1.907 -   extension").  Such RFCs either must be on the standards track or must
   1.908 -   define an IESG-approved experimental protocol.
   1.909 -
   1.910 -   The definition of an extension must include the following:
   1.911 -
   1.912 -   o  a descriptive name for the extension.
   1.913 -
   1.914 -   o  the capability label or labels defined by the extension (the
   1.915 -      capability label of a registered extension MUST NOT begin with
   1.916 -      "X").
   1.917 -
   1.918 -   o  The syntax, values, and meanings of any arguments for each
   1.919 -      capability label defined by the extension.
   1.920 -
   1.921 -   o  Any new NNTP commands associated with the extension (the names of
   1.922 -      commands associated with registered extensions MUST NOT begin with
   1.923 -      "X").
   1.924 -
   1.925 -   o  The syntax and possible values of arguments associated with the
   1.926 -      new NNTP commands.
   1.927 -
   1.928 -   o  The response codes and possible values of arguments for the
   1.929 -      responses of the new NNTP commands.
   1.930 -
   1.931 -   o  Any new arguments the extension associates with any other
   1.932 -      pre-existing NNTP commands.
   1.933 -
   1.934 -   o  Any increase in the maximum length of commands and initial
   1.935 -      response lines over the value specified in this document.
   1.936 -
   1.937 -   o  A specific statement about the effect on pipelining that this
   1.938 -      extension may have (if any).
   1.939 -
   1.940 -   o  A specific statement about the circumstances when use of this
   1.941 -      extension can alter the contents of the capabilities list (other
   1.942 -      than the new capability labels it defines).
   1.943 -
   1.944 -   o  A specific statement about the circumstances under which the
   1.945 -      extension can cause any pre-existing command to produce a 401,
   1.946 -      480, or 483 response.
   1.947 -
   1.948 -
   1.949 -
   1.950 -
   1.951 -
   1.952 -Feather                     Standards Track                    [Page 17]
   1.953 -
   1.954 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
   1.955 -
   1.956 -
   1.957 -   o  A description of how the use of MODE READER on a mode-switching
   1.958 -      server interacts with the extension.
   1.959 -
   1.960 -   o  A description of how support for the extension affects the
   1.961 -      behaviour of a server and NNTP client in any other manner not
   1.962 -      outlined above.
   1.963 -
   1.964 -   o  Formal syntax as described in Section 9.9.
   1.965 -
   1.966 -   A private extension MAY or MAY NOT be included in the capabilities
   1.967 -   list.  If it is, the capability label MUST begin with "X".  A server
   1.968 -   MAY provide additional keywords (for new commands and also for new
   1.969 -   variants of existing commands) as part of a private extension.  To
   1.970 -   avoid the risk of a clash with a future registered extension, these
   1.971 -   keywords SHOULD begin with "X".
   1.972 -
   1.973 -   If the server advertises a capability defined by a registered
   1.974 -   extension, it MUST implement the extension so as to fully conform
   1.975 -   with the specification (for example, it MUST implement all the
   1.976 -   commands that the extension describes as mandatory).  If it does not
   1.977 -   implement the extension as specified, it MUST NOT list the extension
   1.978 -   in the capabilities list under its registered name.  In that case, it
   1.979 -   MAY, but SHOULD NOT, provide a private extension (not listed, or
   1.980 -   listed with a different name) that implements part of the extension
   1.981 -   or implements the commands of the extension with a different meaning.
   1.982 -
   1.983 -   A server MUST NOT send different response codes to basic NNTP
   1.984 -   commands documented here or to commands documented in registered
   1.985 -   extensions in response to the availability or use of a private
   1.986 -   extension.
   1.987 -
   1.988 -3.3.4.  Initial IANA Register
   1.989 -
   1.990 -   IANA will maintain a registry of NNTP capability labels.  All
   1.991 -   capability labels in the registry MUST be keywords and MUST NOT begin
   1.992 -   with X.
   1.993 -
   1.994 -
   1.995 -
   1.996 -
   1.997 -
   1.998 -
   1.999 -
  1.1000 -
  1.1001 -
  1.1002 -
  1.1003 -
  1.1004 -
  1.1005 -
  1.1006 -
  1.1007 -
  1.1008 -Feather                     Standards Track                    [Page 18]
  1.1009 -
  1.1010 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1011 -
  1.1012 -
  1.1013 -   The initial content of the registry consists of these entries:
  1.1014 -
  1.1015 -   +-------------------+--------------------------+--------------------+
  1.1016 -   | Label             | Meaning                  | Definition         |
  1.1017 -   +-------------------+--------------------------+--------------------+
  1.1018 -   | AUTHINFO          | Authentication           | [NNTP-AUTH]        |
  1.1019 -   |                   |                          |                    |
  1.1020 -   | HDR               | Batched header retrieval | Section 3.3.2,     |
  1.1021 -   |                   |                          | Section 8.5, and   |
  1.1022 -   |                   |                          | Section 8.6        |
  1.1023 -   |                   |                          |                    |
  1.1024 -   | IHAVE             | IHAVE command available  | Section 3.3.2 and  |
  1.1025 -   |                   |                          | Section 6.3.2      |
  1.1026 -   |                   |                          |                    |
  1.1027 -   | IMPLEMENTATION    | Server                   | Section 3.3.2      |
  1.1028 -   |                   | implementation-specific  |                    |
  1.1029 -   |                   | information              |                    |
  1.1030 -   |                   |                          |                    |
  1.1031 -   | LIST              | LIST command variants    | Section 3.3.2 and  |
  1.1032 -   |                   |                          | Section 7.6.1      |
  1.1033 -   |                   |                          |                    |
  1.1034 -   | MODE-READER       | Mode-switching server    | Section 3.4.2      |
  1.1035 -   |                   | and MODE READER command  |                    |
  1.1036 -   |                   | available                |                    |
  1.1037 -   |                   |                          |                    |
  1.1038 -   | NEWNEWS           | NEWNEWS command          | Section 3.3.2 and  |
  1.1039 -   |                   | available                | Section 7.4        |
  1.1040 -   |                   |                          |                    |
  1.1041 -   | OVER              | Overview support         | Section 3.3.2,     |
  1.1042 -   |                   |                          | Section 8.3, and   |
  1.1043 -   |                   |                          | Section 8.4        |
  1.1044 -   |                   |                          |                    |
  1.1045 -   | POST              | POST command available   | Section 3.3.2 and  |
  1.1046 -   |                   |                          | Section 6.3.1      |
  1.1047 -   |                   |                          |                    |
  1.1048 -   | READER            | Reader commands          | Section 3.3.2      |
  1.1049 -   |                   | available                |                    |
  1.1050 -   |                   |                          |                    |
  1.1051 -   | SASL              | Supported SASL           | [NNTP-AUTH]        |
  1.1052 -   |                   | mechanisms               |                    |
  1.1053 -   |                   |                          |                    |
  1.1054 -   | STARTTLS          | Transport layer security | [NNTP-TLS]         |
  1.1055 -   |                   |                          |                    |
  1.1056 -   | STREAMING         | Streaming feeds          | [NNTP-STREAM]      |
  1.1057 -   |                   |                          |                    |
  1.1058 -   | VERSION           | Supported NNTP versions  | Section 3.3.2      |
  1.1059 -   +-------------------+--------------------------+--------------------+
  1.1060 -
  1.1061 -
  1.1062 -
  1.1063 -
  1.1064 -Feather                     Standards Track                    [Page 19]
  1.1065 -
  1.1066 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1067 -
  1.1068 -
  1.1069 -3.4.  Mandatory and Optional Commands
  1.1070 -
  1.1071 -   For a number of reasons, not all the commands in this specification
  1.1072 -   are mandatory.  However, it is equally undesirable for every command
  1.1073 -   to be optional, since this means that a client will have no idea what
  1.1074 -   facilities are available.  Therefore, as a compromise, some of the
  1.1075 -   commands in this specification are mandatory (they must be supported
  1.1076 -   by all servers) while the remainder are not.  The latter are then
  1.1077 -   subdivided into bundles, each indicated by a single capability label.
  1.1078 -
  1.1079 -   o  If the label is included in the capability list returned by the
  1.1080 -      server, the server MUST support all commands in that bundle.
  1.1081 -
  1.1082 -   o  If the label is not included, the server MAY support none or some
  1.1083 -      of the commands but SHOULD NOT support all of them.  In general,
  1.1084 -      there will be no way for a client to determine which commands are
  1.1085 -      supported without trying them.
  1.1086 -
  1.1087 -   The bundles have been chosen to provide useful functionality, and
  1.1088 -   therefore server authors are discouraged from implementing only part
  1.1089 -   of a bundle.
  1.1090 -
  1.1091 -   The description of each command will either indicate that it is
  1.1092 -   mandatory, or will give, using the term "indicating capability", the
  1.1093 -   capability label indicating whether the bundle including this command
  1.1094 -   is available.
  1.1095 -
  1.1096 -   Where a server does not implement a command, it MUST always generate
  1.1097 -   a 500 generic response code (or a 501 generic response code in the
  1.1098 -   case of a variant of a command depending on a second keyword where
  1.1099 -   the base command is recognised).  Otherwise, the command MUST be
  1.1100 -   fully implemented as specified; a server MUST NOT only partially
  1.1101 -   implement any of the commands in this specification.  (Client authors
  1.1102 -   should note that some servers not conforming to this specification
  1.1103 -   will return a 502 generic response code to some commands that are not
  1.1104 -   implemented.)
  1.1105 -
  1.1106 -   Note: some commands have cases that require other commands to be used
  1.1107 -   first.  If the former command is implemented but the latter is not,
  1.1108 -   the former MUST still generate the relevant specific response code.
  1.1109 -   For example, if ARTICLE (Section 6.2.1) is implemented but GROUP
  1.1110 -   (Section 6.1.1) is not, the correct response to "ARTICLE 1234"
  1.1111 -   remains 412.
  1.1112 -
  1.1113 -
  1.1114 -
  1.1115 -
  1.1116 -
  1.1117 -
  1.1118 -
  1.1119 -
  1.1120 -Feather                     Standards Track                    [Page 20]
  1.1121 -
  1.1122 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1123 -
  1.1124 -
  1.1125 -3.4.1.  Reading and Transit Servers
  1.1126 -
  1.1127 -   NNTP is traditionally used in two different ways.  The first use is
  1.1128 -   "reading", where the client fetches articles from a large store
  1.1129 -   maintained by the server for immediate or later presentation to a
  1.1130 -   user and sends articles created by that user back to the server (an
  1.1131 -   action called "posting") to be stored and distributed to other stores
  1.1132 -   and users.  The second use is for the bulk transfer of articles from
  1.1133 -   one store to another.  Since the hosts making this transfer tend to
  1.1134 -   be peers in a network that transmit articles among one another, and
  1.1135 -   not end-user systems, this process is called "peering" or "transit".
  1.1136 -   (Even so, one host is still the client and the other is the server).
  1.1137 -
  1.1138 -   In practice, these two uses are so different that some server
  1.1139 -   implementations are optimised for reading or for transit and, as a
  1.1140 -   result, do not offer the other facility or only offer limited
  1.1141 -   features.  Other implementations are more general and offer both.
  1.1142 -   This specification allows for this by bundling the relevant commands
  1.1143 -   accordingly: the IHAVE command is designed for transit, while the
  1.1144 -   commands indicated by the READER capability are designed for reading
  1.1145 -   clients.
  1.1146 -
  1.1147 -   Except as an effect of the MODE READER command (Section 5.3) on a
  1.1148 -   mode-switching server, once a server advertises either or both of the
  1.1149 -   IHAVE or READER capabilities, it MUST continue to advertise them for
  1.1150 -   the entire session.
  1.1151 -
  1.1152 -   A server MAY provide different modes of behaviour (transit, reader,
  1.1153 -   or a combination) to different client connections and MAY use
  1.1154 -   external information, such as the IP address of the client, to
  1.1155 -   determine which mode to provide to any given connection.
  1.1156 -
  1.1157 -   The official TCP port for the NNTP service is 119.  However, if a
  1.1158 -   host wishes to offer separate servers for transit and reading
  1.1159 -   clients, port 433 SHOULD be used for the transit server and 119 for
  1.1160 -   the reading server.
  1.1161 -
  1.1162 -3.4.2.  Mode Switching
  1.1163 -
  1.1164 -   An implementation MAY, but SHOULD NOT, provide both transit and
  1.1165 -   reader facilities on the same server but require the client to select
  1.1166 -   which it wishes to use.  Such an arrangement is called a
  1.1167 -   "mode-switching" server.
  1.1168 -
  1.1169 -
  1.1170 -
  1.1171 -
  1.1172 -
  1.1173 -
  1.1174 -
  1.1175 -
  1.1176 -Feather                     Standards Track                    [Page 21]
  1.1177 -
  1.1178 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1179 -
  1.1180 -
  1.1181 -   A mode-switching server has two modes:
  1.1182 -
  1.1183 -   o  Transit mode, which applies after the initial connection.
  1.1184 -
  1.1185 -      *  It MUST advertise the MODE-READER capability.
  1.1186 -
  1.1187 -      *  It MUST NOT advertise the READER capability.
  1.1188 -
  1.1189 -      However, the server MAY cease to advertise the MODE-READER
  1.1190 -      capability after the client uses any command except CAPABILITIES.
  1.1191 -
  1.1192 -   o  Reading mode, after a successful MODE READER command (see Section
  1.1193 -      5.3).
  1.1194 -
  1.1195 -      *  It MUST NOT advertise the MODE-READER capability.
  1.1196 -
  1.1197 -      *  It MUST advertise the READER capability.
  1.1198 -
  1.1199 -      *  It MAY NOT advertise the IHAVE capability, even if it was
  1.1200 -         advertising it in transit mode.
  1.1201 -
  1.1202 -   A client SHOULD only issue a MODE READER command to a server if it is
  1.1203 -   advertising the MODE-READER capability.  If the server does not
  1.1204 -   support CAPABILITIES (and therefore does not conform to this
  1.1205 -   specification), the client MAY use the following heuristic:
  1.1206 -
  1.1207 -   o  If the client wishes to use any "reader" commands, it SHOULD use
  1.1208 -      the MODE READER command immediately after the initial connection.
  1.1209 -
  1.1210 -   o  Otherwise, it SHOULD NOT use the MODE READER command.
  1.1211 -
  1.1212 -   In each case, it should be prepared for some commands to be
  1.1213 -   unavailable that would have been available if it had made the other
  1.1214 -   choice.
  1.1215 -
  1.1216 -3.5.  Pipelining
  1.1217 -
  1.1218 -   NNTP is designed to operate over a reliable bi-directional
  1.1219 -   connection, such as TCP.  Therefore, if a command does not depend on
  1.1220 -   the response to the previous one, it should not matter if it is sent
  1.1221 -   before that response is received.  Doing this is called "pipelining".
  1.1222 -   However, certain server implementations throw away all text received
  1.1223 -   from the client following certain commands before sending their
  1.1224 -   response.  If this happens, pipelining will be affected because one
  1.1225 -   or more commands will have been ignored or misinterpreted, and the
  1.1226 -   client will be matching the wrong responses to each command.  Since
  1.1227 -   there are significant benefits to pipelining, but also circumstances
  1.1228 -   where it is reasonable or common for servers to behave in the above
  1.1229 -
  1.1230 -
  1.1231 -
  1.1232 -Feather                     Standards Track                    [Page 22]
  1.1233 -
  1.1234 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1235 -
  1.1236 -
  1.1237 -   manner, this document puts certain requirements on both clients and
  1.1238 -   servers.
  1.1239 -
  1.1240 -   Except where stated otherwise, a client MAY use pipelining.  That is,
  1.1241 -   it may send a command before receiving the response for the previous
  1.1242 -   command.  The server MUST allow pipelining and MUST NOT throw away
  1.1243 -   any text received after a command.  Irrespective of whether
  1.1244 -   pipelining is used, the server MUST process commands in the order
  1.1245 -   they are sent.
  1.1246 -
  1.1247 -   If the specific description of a command says it "MUST NOT be
  1.1248 -   pipelined", that command MUST end any pipeline of commands.  That is,
  1.1249 -   the client MUST NOT send any following command until it receives the
  1.1250 -   CRLF at the end of the response from the command.  The server MAY
  1.1251 -   ignore any data received after the command and before the CRLF at the
  1.1252 -   end of the response is sent to the client.
  1.1253 -
  1.1254 -   The initial connection must not be part of a pipeline; that is, the
  1.1255 -   client MUST NOT send any command until it receives the CRLF at the
  1.1256 -   end of the greeting.
  1.1257 -
  1.1258 -   If the client uses blocking system calls to send commands, it MUST
  1.1259 -   ensure that the amount of text sent in pipelining does not cause a
  1.1260 -   deadlock between transmission and reception.  The amount of text
  1.1261 -   involved will depend on window sizes in the transmission layer;
  1.1262 -   typically, it is 4k octets for TCP.  (Since the server only sends
  1.1263 -   data in response to commands from the client, the converse problem
  1.1264 -   does not occur.)
  1.1265 -
  1.1266 -3.5.1.  Examples
  1.1267 -
  1.1268 -   Example of correct use of pipelining:
  1.1269 -
  1.1270 -      [C] GROUP misc.test
  1.1271 -      [C] STAT
  1.1272 -      [C] NEXT
  1.1273 -      [S] 211 1234 3000234 3002322 misc.test
  1.1274 -      [S] 223 3000234 <45223423@example.com> retrieved
  1.1275 -      [S] 223 3000237 <668929@example.org> retrieved
  1.1276 -
  1.1277 -   Example of incorrect use of pipelining (the MODE READER command may
  1.1278 -   not be pipelined):
  1.1279 -
  1.1280 -      [C] MODE READER
  1.1281 -      [C] DATE
  1.1282 -      [C] NEXT
  1.1283 -      [S] 200 Server ready, posting allowed
  1.1284 -      [S] 223 3000237 <668929@example.org> retrieved
  1.1285 -
  1.1286 -
  1.1287 -
  1.1288 -Feather                     Standards Track                    [Page 23]
  1.1289 -
  1.1290 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1291 -
  1.1292 -
  1.1293 -   The DATE command has been thrown away by the server, so there is no
  1.1294 -   111 response to match it.
  1.1295 -
  1.1296 -3.6.  Articles
  1.1297 -
  1.1298 -   NNTP is intended to transfer articles between clients and servers.
  1.1299 -   For the purposes of this specification, articles are required to
  1.1300 -   conform to the rules in this section, and clients and servers MUST
  1.1301 -   correctly process any article received from the other that does so.
  1.1302 -   Note that this requirement applies only to the contents of
  1.1303 -   communications over NNTP; it does not prevent the client or server
  1.1304 -   from subsequently rejecting an article for reasons of local policy.
  1.1305 -   Also see Appendix A for further restrictions on the format of
  1.1306 -   articles in some uses of NNTP.
  1.1307 -
  1.1308 -   An article consists of two parts: the headers and the body.  They are
  1.1309 -   separated by a single empty line, or in other words by two
  1.1310 -   consecutive CRLF pairs (if there is more than one empty line, the
  1.1311 -   second and subsequent ones are part of the body).  In order to meet
  1.1312 -   the general requirements of NNTP, an article MUST NOT include the
  1.1313 -   octet NUL, MUST NOT contain the octets LF and CR other than as part
  1.1314 -   of a CRLF pair, and MUST end with a CRLF pair.  This specification
  1.1315 -   puts no further restrictions on the body; in particular, it MAY be
  1.1316 -   empty.
  1.1317 -
  1.1318 -   The headers of an article consist of one or more header lines.  Each
  1.1319 -   header line consists of a header name, a colon, a space, the header
  1.1320 -   content, and a CRLF, in that order.  The name consists of one or more
  1.1321 -   printable US-ASCII characters other than colon and, for the purposes
  1.1322 -   of this specification, is not case sensitive.  There MAY be more than
  1.1323 -   one header line with the same name.  The content MUST NOT contain
  1.1324 -   CRLF; it MAY be empty.  A header may be "folded"; that is, a CRLF
  1.1325 -   pair may be placed before any TAB or space in the line.  There MUST
  1.1326 -   still be some other octet between any two CRLF pairs in a header
  1.1327 -   line.  (Note that folding means that the header line occupies more
  1.1328 -   than one line when displayed or transmitted; nevertheless, it is
  1.1329 -   still referred to as "a" header line.)  The presence or absence of
  1.1330 -   folding does not affect the meaning of the header line; that is, the
  1.1331 -   CRLF pairs introduced by folding are not considered part of the
  1.1332 -   header content.  Header lines SHOULD NOT be folded before the space
  1.1333 -   after the colon that follows the header name and SHOULD include at
  1.1334 -   least one octet other than %x09 or %x20 between CRLF pairs.  However,
  1.1335 -   if an article that fails to satisfy this requirement has been
  1.1336 -   received from elsewhere, clients and servers MAY transfer it to each
  1.1337 -   other without re-folding it.
  1.1338 -
  1.1339 -
  1.1340 -
  1.1341 -
  1.1342 -
  1.1343 -
  1.1344 -Feather                     Standards Track                    [Page 24]
  1.1345 -
  1.1346 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1347 -
  1.1348 -
  1.1349 -   The content of a header SHOULD be in UTF-8.  However, if an
  1.1350 -   implementation receives an article from elsewhere that uses octets in
  1.1351 -   the range 128 to 255 in some other manner, it MAY pass it to a client
  1.1352 -   or server without modification.  Therefore, implementations MUST be
  1.1353 -   prepared to receive such headers, and data derived from them (e.g.,
  1.1354 -   in the responses from the OVER command, Section 8.3), and MUST NOT
  1.1355 -   assume that they are always UTF-8.  Any external processing of those
  1.1356 -   headers, including identifying the encoding used, is outside the
  1.1357 -   scope of this document.
  1.1358 -
  1.1359 -   Each article MUST have a unique message-id; two articles offered by
  1.1360 -   an NNTP server MUST NOT have the same message-id.  For the purposes
  1.1361 -   of this specification, message-ids are opaque strings that MUST meet
  1.1362 -   the following requirements:
  1.1363 -
  1.1364 -   o  A message-id MUST begin with "<", end with ">", and MUST NOT
  1.1365 -      contain the latter except at the end.
  1.1366 -
  1.1367 -   o  A message-id MUST be between 3 and 250 octets in length.
  1.1368 -
  1.1369 -   o  A message-id MUST NOT contain octets other than printable US-ASCII
  1.1370 -      characters.
  1.1371 -
  1.1372 -   Two message-ids are the same if and only if they consist of the same
  1.1373 -   sequence of octets.
  1.1374 -
  1.1375 -   This specification does not describe how the message-id of an article
  1.1376 -   is determined.  If the server does not have any way to determine a
  1.1377 -   message-id from the article itself, it MUST synthesize one (this
  1.1378 -   specification does not require that the article be changed as a
  1.1379 -   result).  See also Appendix A.2.
  1.1380 -
  1.1381 -4.  The WILDMAT Format
  1.1382 -
  1.1383 -   The WILDMAT format described here is based on the version first
  1.1384 -   developed by Rich Salz [SALZ1992], which was in turn derived from the
  1.1385 -   format used in the UNIX "find" command to articulate file names.  It
  1.1386 -   was developed to provide a uniform mechanism for matching patterns in
  1.1387 -   the same manner that the UNIX shell matches filenames.
  1.1388 -
  1.1389 -
  1.1390 -
  1.1391 -
  1.1392 -
  1.1393 -
  1.1394 -
  1.1395 -
  1.1396 -
  1.1397 -
  1.1398 -
  1.1399 -
  1.1400 -Feather                     Standards Track                    [Page 25]
  1.1401 -
  1.1402 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1403 -
  1.1404 -
  1.1405 -4.1.  Wildmat Syntax
  1.1406 -
  1.1407 -   A wildmat is described by the following ABNF [RFC4234] syntax, which
  1.1408 -   is an extract of that in Section 9.8.
  1.1409 -
  1.1410 -     wildmat = wildmat-pattern *("," ["!"] wildmat-pattern)
  1.1411 -     wildmat-pattern = 1*wildmat-item
  1.1412 -     wildmat-item = wildmat-exact / wildmat-wild
  1.1413 -     wildmat-exact = %x22-29 / %x2B / %x2D-3E / %x40-5A / %x5E-7E /
  1.1414 -          UTF8-non-ascii ; exclude ! * , ? [ \ ]
  1.1415 -     wildmat-wild = "*" / "?"
  1.1416 -
  1.1417 -   Note: the characters ",", "\", "[", and "]" are not allowed in
  1.1418 -   wildmats, while * and ? are always wildcards.  This should not be a
  1.1419 -   problem, since these characters cannot occur in newsgroup names,
  1.1420 -   which is the only current use of wildmats.  Backslash is commonly
  1.1421 -   used to suppress the special meaning of characters, whereas brackets
  1.1422 -   are used to introduce sets.  However, these usages are not universal,
  1.1423 -   and interpretation of these characters in the context of UTF-8
  1.1424 -   strings is potentially complex and differs from existing practice, so
  1.1425 -   they were omitted from this specification.  A future extension to
  1.1426 -   this specification may provide semantics for these characters.
  1.1427 -
  1.1428 -4.2.  Wildmat Semantics
  1.1429 -
  1.1430 -   A wildmat is tested against a string and either matches or does not
  1.1431 -   match.  To do this, each constituent <wildmat-pattern> is matched
  1.1432 -   against the string, and the rightmost pattern that matches is
  1.1433 -   identified.  If that <wildmat-pattern> is not preceded with "!", the
  1.1434 -   whole wildmat matches.  If it is preceded by "!", or if no <wildmat-
  1.1435 -   pattern> matches, the whole wildmat does not match.
  1.1436 -
  1.1437 -   For example, consider the wildmat "a*,!*b,*c*":
  1.1438 -
  1.1439 -   o  The string "aaa" matches because the rightmost match is with "a*".
  1.1440 -
  1.1441 -   o  The string "abb" does not match because the rightmost match is
  1.1442 -      with "*b".
  1.1443 -
  1.1444 -   o  The string "ccb" matches because the rightmost match is with
  1.1445 -      "*c*".
  1.1446 -
  1.1447 -   o  The string "xxx" does not match because no <wildmat-pattern>
  1.1448 -      matches.
  1.1449 -
  1.1450 -   A <wildmat-pattern> matches a string if the string can be broken into
  1.1451 -   components, each of which matches the corresponding <wildmat-item> in
  1.1452 -   the pattern.  The matches must be in the same order, and the whole
  1.1453 -
  1.1454 -
  1.1455 -
  1.1456 -Feather                     Standards Track                    [Page 26]
  1.1457 -
  1.1458 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1459 -
  1.1460 -
  1.1461 -   string must be used in the match.  The pattern is "anchored"; that
  1.1462 -   is, the first and last characters in the string must match the first
  1.1463 -   and last item, respectively (unless that item is an asterisk matching
  1.1464 -   zero characters).
  1.1465 -
  1.1466 -   A <wildmat-exact> matches the same character (which may be more than
  1.1467 -   one octet in UTF-8).
  1.1468 -
  1.1469 -   "?" matches exactly one character (which may be more than one octet).
  1.1470 -
  1.1471 -   "*" matches zero or more characters.  It can match an empty string,
  1.1472 -   but it cannot match a subsequence of a UTF-8 sequence that is not
  1.1473 -   aligned to the character boundaries.
  1.1474 -
  1.1475 -4.3.  Extensions
  1.1476 -
  1.1477 -   An NNTP server or extension MAY extend the syntax or semantics of
  1.1478 -   wildmats provided that all wildmats that meet the requirements of
  1.1479 -   Section 4.1 have the meaning ascribed to them by Section 4.2.  Future
  1.1480 -   editions of this document may also extend wildmats.
  1.1481 -
  1.1482 -4.4.  Examples
  1.1483 -
  1.1484 -   In these examples, $ and @ are used to represent the two octets %xC2
  1.1485 -   and %xA3, respectively; $@ is thus the UTF-8 encoding for the pound
  1.1486 -   sterling symbol, shown as # in the descriptions.
  1.1487 -
  1.1488 -     Wildmat    Description of strings that match
  1.1489 -       abc      The one string "abc"
  1.1490 -       abc,def  The two strings "abc" and "def"
  1.1491 -       $@       The one character string "#"
  1.1492 -       a*       Any string that begins with "a"
  1.1493 -       a*b      Any string that begins with "a" and ends with "b"
  1.1494 -       a*,*b    Any string that begins with "a" or ends with "b"
  1.1495 -       a*,!*b   Any string that begins with "a" and does not end with
  1.1496 -                "b"
  1.1497 -     a*,!*b,c*  Any string that begins with "a" and does not end with
  1.1498 -                "b", and any string that begins with "c" no matter
  1.1499 -                what it ends with
  1.1500 -     a*,c*,!*b  Any string that begins with "a" or "c" and does not
  1.1501 -                end with "b"
  1.1502 -       ?a*      Any string with "a" as its second character
  1.1503 -       ??a*     Any string with "a" as its third character
  1.1504 -       *a?      Any string with "a" as its penultimate character
  1.1505 -       *a??     Any string with "a" as its antepenultimate character
  1.1506 -
  1.1507 -
  1.1508 -
  1.1509 -
  1.1510 -
  1.1511 -
  1.1512 -Feather                     Standards Track                    [Page 27]
  1.1513 -
  1.1514 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1515 -
  1.1516 -
  1.1517 -5.  Session Administration Commands
  1.1518 -
  1.1519 -5.1.  Initial Connection
  1.1520 -
  1.1521 -5.1.1.  Usage
  1.1522 -
  1.1523 -   This command MUST NOT be pipelined.
  1.1524 -
  1.1525 -   Responses [1]
  1.1526 -     200    Service available, posting allowed
  1.1527 -     201    Service available, posting prohibited
  1.1528 -     400    Service temporarily unavailable [2]
  1.1529 -     502    Service permanently unavailable [2]
  1.1530 -
  1.1531 -   [1] These are the only valid response codes for the initial greeting;
  1.1532 -       the server MUST not return any other generic response code.
  1.1533 -
  1.1534 -   [2] Following a 400 or 502 response, the server MUST immediately
  1.1535 -       close the connection.
  1.1536 -
  1.1537 -5.1.2.  Description
  1.1538 -
  1.1539 -   There is no command presented by the client upon initial connection
  1.1540 -   to the server.  The server MUST present an appropriate response code
  1.1541 -   as a greeting to the client.  This response informs the client
  1.1542 -   whether service is available and whether the client is permitted to
  1.1543 -   post.
  1.1544 -
  1.1545 -   If the server will accept further commands from the client including
  1.1546 -   POST, the server MUST present a 200 greeting code.  If the server
  1.1547 -   will accept further commands from the client, but the client is not
  1.1548 -   authorized to post articles using the POST command, the server MUST
  1.1549 -   present a 201 greeting code.
  1.1550 -
  1.1551 -   Otherwise, the server MUST present a 400 or 502 greeting code and
  1.1552 -   then immediately close the connection. 400 SHOULD be used if the
  1.1553 -   issue is only temporary (for example, because of load) and the client
  1.1554 -   can expect to be able to connect successfully at some point in the
  1.1555 -   future without making any changes. 502 MUST be used if the client is
  1.1556 -   not permitted under any circumstances to interact with the server,
  1.1557 -   and MAY be used if the server has insufficient information to
  1.1558 -   determine whether the issue is temporary or permanent.
  1.1559 -
  1.1560 -   Note: the distinction between the 200 and 201 response codes has
  1.1561 -   turned out in practice to be insufficient; for example, some servers
  1.1562 -   do not allow posting until the client has authenticated, while other
  1.1563 -   clients assume that a 201 response means that posting will never be
  1.1564 -   possible even after authentication.  Therefore, clients SHOULD use
  1.1565 -
  1.1566 -
  1.1567 -
  1.1568 -Feather                     Standards Track                    [Page 28]
  1.1569 -
  1.1570 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1571 -
  1.1572 -
  1.1573 -   the CAPABILITIES command (Section 5.2) rather than rely on this
  1.1574 -   response.
  1.1575 -
  1.1576 -5.1.3.  Examples
  1.1577 -
  1.1578 -   Example of a normal connection from an authorized client that then
  1.1579 -   terminates the session (see Section 5.4):
  1.1580 -
  1.1581 -      [Initial connection set-up completed.]
  1.1582 -      [S] 200 NNTP Service Ready, posting permitted
  1.1583 -      [C] QUIT
  1.1584 -      [S] 205 NNTP Service exits normally
  1.1585 -      [Server closes connection.]
  1.1586 -
  1.1587 -   Example of a normal connection from an authorized client that is not
  1.1588 -   permitted to post, which also immediately terminates the session:
  1.1589 -
  1.1590 -      [Initial connection set-up completed.]
  1.1591 -      [S] 201 NNTP Service Ready, posting prohibited
  1.1592 -      [C] QUIT
  1.1593 -      [S] 205 NNTP Service exits normally
  1.1594 -      [Server closes connection.]
  1.1595 -
  1.1596 -   Example of a normal connection from an unauthorized client:
  1.1597 -
  1.1598 -      [Initial connection set-up completed.]
  1.1599 -      [S] 502 NNTP Service permanently unavailable
  1.1600 -      [Server closes connection.]
  1.1601 -
  1.1602 -   Example of a connection from a client if the server is unable to
  1.1603 -   provide service:
  1.1604 -
  1.1605 -      [Initial connection set-up completed.]
  1.1606 -      [S] 400 NNTP Service temporarily unavailable
  1.1607 -      [Server closes connection.]
  1.1608 -
  1.1609 -5.2.  CAPABILITIES
  1.1610 -
  1.1611 -5.2.1.  Usage
  1.1612 -
  1.1613 -   This command is mandatory.
  1.1614 -
  1.1615 -   Syntax
  1.1616 -     CAPABILITIES [keyword]
  1.1617 -
  1.1618 -   Responses
  1.1619 -     101    Capability list follows (multi-line)
  1.1620 -
  1.1621 -
  1.1622 -
  1.1623 -
  1.1624 -Feather                     Standards Track                    [Page 29]
  1.1625 -
  1.1626 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1627 -
  1.1628 -
  1.1629 -   Parameters
  1.1630 -     keyword    additional feature, see description
  1.1631 -
  1.1632 -5.2.2.  Description
  1.1633 -
  1.1634 -   The CAPABILITIES command allows a client to determine the
  1.1635 -   capabilities of the server at any given time.
  1.1636 -
  1.1637 -   This command MAY be issued at any time; the server MUST NOT require
  1.1638 -   it to be issued in order to make use of any capability.  The response
  1.1639 -   generated by this command MAY change during a session because of
  1.1640 -   other state information (which, in turn, may be changed by the
  1.1641 -   effects of other commands or by external events).  An NNTP client is
  1.1642 -   only able to get the current and correct information concerning
  1.1643 -   available capabilities at any point during a session by issuing a
  1.1644 -   CAPABILITIES command at that point of that session and processing the
  1.1645 -   response.
  1.1646 -
  1.1647 -   The capability list is returned as a multi-line data block following
  1.1648 -   the 101 response code.  Each capability is described by a separate
  1.1649 -   capability line.  The server MUST NOT list the same capability twice
  1.1650 -   in the response, even with different arguments.  Except that the
  1.1651 -   VERSION capability MUST be the first line, the order in which the
  1.1652 -   capability lines appears is not significant; the server need not even
  1.1653 -   consistently return the same order.
  1.1654 -
  1.1655 -   While some capabilities are likely to be always available or never
  1.1656 -   available, others (notably extensions) will appear and disappear
  1.1657 -   depending on server state changes within the session or on external
  1.1658 -   events between sessions.  An NNTP client MAY cache the results of
  1.1659 -   this command, but MUST NOT rely on the correctness of any cached
  1.1660 -   results, whether from earlier in this session or from a previous
  1.1661 -   session, MUST cope gracefully with the cached status being out of
  1.1662 -   date, and SHOULD (if caching results) provide a way to force the
  1.1663 -   cached information to be refreshed.  Furthermore, a client MUST NOT
  1.1664 -   use cached results in relation to security, privacy, and
  1.1665 -   authentication extensions.  See Section 12.6 for further discussion
  1.1666 -   of this topic.
  1.1667 -
  1.1668 -   The keyword argument is not used by this specification.  It is
  1.1669 -   provided so that extensions or revisions to this specification can
  1.1670 -   include extra features for this command without requiring the
  1.1671 -   CAPABILITIES command to be used twice (once to determine if the extra
  1.1672 -   features are available, and a second time to make use of them).  If
  1.1673 -   the server does not recognise the argument (and it is a keyword), it
  1.1674 -   MUST respond with the 101 response code as if the argument had been
  1.1675 -   omitted.  If an argument is provided that the server does recognise,
  1.1676 -   it MAY use the 101 response code or MAY use some other response code
  1.1677 -
  1.1678 -
  1.1679 -
  1.1680 -Feather                     Standards Track                    [Page 30]
  1.1681 -
  1.1682 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1683 -
  1.1684 -
  1.1685 -   (which will be defined in the specification of that feature).  If the
  1.1686 -   argument is not a keyword, the 501 generic response code MUST be
  1.1687 -   returned.  The server MUST NOT generate any other response code to
  1.1688 -   the CAPABILITIES command.
  1.1689 -
  1.1690 -5.2.3.  Examples
  1.1691 -
  1.1692 -   Example of a minimal response (a read-only server):
  1.1693 -
  1.1694 -      [C] CAPABILITIES
  1.1695 -      [S] 101 Capability list:
  1.1696 -      [S] VERSION 2
  1.1697 -      [S] READER
  1.1698 -      [S] LIST ACTIVE NEWSGROUPS
  1.1699 -      [S] .
  1.1700 -
  1.1701 -   Example of a response from a server that has a range of facilities
  1.1702 -   and that also describes itself:
  1.1703 -
  1.1704 -      [C] CAPABILITIES
  1.1705 -      [S] 101 Capability list:
  1.1706 -      [S] VERSION 2
  1.1707 -      [S] READER
  1.1708 -      [S] IHAVE
  1.1709 -      [S] POST
  1.1710 -      [S] NEWNEWS
  1.1711 -      [S] LIST ACTIVE NEWSGROUPS ACTIVE.TIMES OVERVIEW.FMT
  1.1712 -      [S] IMPLEMENTATION INN 4.2 2004-12-25
  1.1713 -      [S] OVER MSGID
  1.1714 -      [S] STREAMING
  1.1715 -      [S] XSECRET
  1.1716 -      [S] .
  1.1717 -
  1.1718 -   Example of a server that supports more than one version of NNTP:
  1.1719 -
  1.1720 -      [C] CAPABILITIES
  1.1721 -      [S] 101 Capability list:
  1.1722 -      [S] VERSION 2 3
  1.1723 -      [S] READER
  1.1724 -      [S] LIST ACTIVE NEWSGROUPS
  1.1725 -      [S] .
  1.1726 -
  1.1727 -
  1.1728 -
  1.1729 -
  1.1730 -
  1.1731 -
  1.1732 -
  1.1733 -
  1.1734 -
  1.1735 -
  1.1736 -Feather                     Standards Track                    [Page 31]
  1.1737 -
  1.1738 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1739 -
  1.1740 -
  1.1741 -   Example of a client attempting to use a feature of the CAPABILITIES
  1.1742 -   command that the server does not support:
  1.1743 -
  1.1744 -      [C] CAPABILITIES AUTOUPDATE
  1.1745 -      [S] 101 Capability list:
  1.1746 -      [S] VERSION 2
  1.1747 -      [S] READER
  1.1748 -      [S] IHAVE
  1.1749 -      [S] LIST ACTIVE NEWSGROUPS OVERVIEW.FMT HEADERS
  1.1750 -      [S] OVER MSGID
  1.1751 -      [S] HDR
  1.1752 -      [S] NEWNEWS
  1.1753 -      [S] .
  1.1754 -
  1.1755 -5.3.  MODE READER
  1.1756 -
  1.1757 -5.3.1.  Usage
  1.1758 -
  1.1759 -   Indicating capability: MODE-READER
  1.1760 -
  1.1761 -   This command MUST NOT be pipelined.
  1.1762 -
  1.1763 -   Syntax
  1.1764 -     MODE READER
  1.1765 -
  1.1766 -   Responses
  1.1767 -     200    Posting allowed
  1.1768 -     201    Posting prohibited
  1.1769 -     502    Reading service permanently unavailable [1]
  1.1770 -
  1.1771 -   [1] Following a 502 response the server MUST immediately close the
  1.1772 -       connection.
  1.1773 -
  1.1774 -5.3.2.  Description
  1.1775 -
  1.1776 -   The MODE READER command instructs a mode-switching server to switch
  1.1777 -   modes, as described in Section 3.4.2.
  1.1778 -
  1.1779 -   If the server is mode-switching, it switches from its transit mode to
  1.1780 -   its reader mode, indicating this by changing the capability list
  1.1781 -   accordingly.  It MUST then return a 200 or 201 response with the same
  1.1782 -   meaning as for the initial greeting (as described in Section 5.1.1).
  1.1783 -   Note that the response need not be the same as that presented during
  1.1784 -   the initial greeting.  The client MUST NOT issue MODE READER more
  1.1785 -   than once in a session or after any security or privacy commands are
  1.1786 -   issued.  When the MODE READER command is issued, the server MAY reset
  1.1787 -   its state to that immediately after the initial connection before
  1.1788 -   switching mode.
  1.1789 -
  1.1790 -
  1.1791 -
  1.1792 -Feather                     Standards Track                    [Page 32]
  1.1793 -
  1.1794 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1795 -
  1.1796 -
  1.1797 -   If the server is not mode-switching, then the following apply:
  1.1798 -
  1.1799 -   o  If it advertises the READER capability, it MUST return a 200 or
  1.1800 -      201 response with the same meaning as for the initial greeting; in
  1.1801 -      this case, the command MUST NOT affect the server state in any
  1.1802 -      way.
  1.1803 -
  1.1804 -   o  If it does not advertise the READER capability, it MUST return a
  1.1805 -      502 response and then immediately close the connection.
  1.1806 -
  1.1807 -5.3.3.  Examples
  1.1808 -
  1.1809 -   Example of use of the MODE READER command on a transit-only server
  1.1810 -   (which therefore does not providing reading facilities):
  1.1811 -
  1.1812 -      [C] CAPABILITIES
  1.1813 -      [S] 101 Capability list:
  1.1814 -      [S] VERSION 2
  1.1815 -      [S] IHAVE
  1.1816 -      [S] .
  1.1817 -      [C] MODE READER
  1.1818 -      [S] 502 Transit service only
  1.1819 -      [Server closes connection.]
  1.1820 -
  1.1821 -   Example of use of the MODE READER command on a server that provides
  1.1822 -   reading facilities:
  1.1823 -
  1.1824 -      [C] CAPABILITIES
  1.1825 -      [S] 101 Capability list:
  1.1826 -      [S] VERSION 2
  1.1827 -      [S] READER
  1.1828 -      [S] LIST ACTIVE NEWSGROUPS
  1.1829 -      [S] .
  1.1830 -      [C] MODE READER
  1.1831 -      [S] 200 Reader mode, posting permitted
  1.1832 -      [C] IHAVE <i.am.an.article.you.have@example.com>
  1.1833 -      [S] 500 Permission denied
  1.1834 -      [C] GROUP misc.test
  1.1835 -      [S] 211 1234 3000234 3002322 misc.test
  1.1836 -
  1.1837 -   Note that in both of these situations, the client SHOULD NOT use MODE
  1.1838 -   READER.
  1.1839 -
  1.1840 -
  1.1841 -
  1.1842 -
  1.1843 -
  1.1844 -
  1.1845 -
  1.1846 -
  1.1847 -
  1.1848 -Feather                     Standards Track                    [Page 33]
  1.1849 -
  1.1850 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1851 -
  1.1852 -
  1.1853 -   Example of use of the MODE READER command on a mode-switching server:
  1.1854 -
  1.1855 -      [C] CAPABILITIES
  1.1856 -      [S] 101 Capability list:
  1.1857 -      [S] VERSION 2
  1.1858 -      [S] IHAVE
  1.1859 -      [S] MODE-READER
  1.1860 -      [S] .
  1.1861 -      [C] MODE READER
  1.1862 -      [S] 200 Reader mode, posting permitted
  1.1863 -      [C] CAPABILITIES
  1.1864 -      [S] 101 Capability list:
  1.1865 -      [S] VERSION 2
  1.1866 -      [S] READER
  1.1867 -      [S] NEWNEWS
  1.1868 -      [S] LIST ACTIVE NEWSGROUPS
  1.1869 -      [S] STARTTLS
  1.1870 -      [S] .
  1.1871 -
  1.1872 -   In this case, the server offers (but does not require) TLS privacy in
  1.1873 -   its reading mode but not in its transit mode.
  1.1874 -
  1.1875 -   Example of use of the MODE READER command where the client is not
  1.1876 -   permitted to post:
  1.1877 -
  1.1878 -      [C] MODE READER
  1.1879 -      [S] 201 NNTP Service Ready, posting prohibited
  1.1880 -
  1.1881 -5.4.  QUIT
  1.1882 -
  1.1883 -5.4.1.  Usage
  1.1884 -
  1.1885 -   This command is mandatory.
  1.1886 -
  1.1887 -   Syntax
  1.1888 -     QUIT
  1.1889 -
  1.1890 -   Responses
  1.1891 -     205    Connection closing
  1.1892 -
  1.1893 -5.4.2.  Description
  1.1894 -
  1.1895 -   The client uses the QUIT command to terminate the session.  The
  1.1896 -   server MUST acknowledge the QUIT command and then close the
  1.1897 -   connection to the client.  This is the preferred method for a client
  1.1898 -   to indicate that it has finished all of its transactions with the
  1.1899 -   NNTP server.
  1.1900 -
  1.1901 -
  1.1902 -
  1.1903 -
  1.1904 -Feather                     Standards Track                    [Page 34]
  1.1905 -
  1.1906 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1907 -
  1.1908 -
  1.1909 -   If a client simply disconnects (or if the connection times out or
  1.1910 -   some other fault occurs), the server MUST gracefully cease its
  1.1911 -   attempts to service the client, disconnecting from its end if
  1.1912 -   necessary.
  1.1913 -
  1.1914 -   The server MUST NOT generate any response code to the QUIT command
  1.1915 -   other than 205 or, if any arguments are provided, 501.
  1.1916 -
  1.1917 -5.4.3.  Examples
  1.1918 -
  1.1919 -      [C] QUIT
  1.1920 -      [S] 205 closing connection
  1.1921 -      [Server closes connection.]
  1.1922 -
  1.1923 -6.  Article Posting and Retrieval
  1.1924 -
  1.1925 -   News-reading clients have available a variety of mechanisms to
  1.1926 -   retrieve articles via NNTP.  The news articles are stored and indexed
  1.1927 -   using three types of keys.  The first type of key is the message-id
  1.1928 -   of an article and is globally unique.  The second type of key is
  1.1929 -   composed of a newsgroup name and an article number within that
  1.1930 -   newsgroup.  On a particular server, there MUST only be one article
  1.1931 -   with a given number within any newsgroup, and an article MUST NOT
  1.1932 -   have two different numbers in the same newsgroup.  An article can be
  1.1933 -   cross-posted to multiple newsgroups, so there may be multiple keys
  1.1934 -   that point to the same article on the same server; these MAY have
  1.1935 -   different numbers in each newsgroup.  However, this type of key is
  1.1936 -   not required to be globally unique, so the same key MAY refer to
  1.1937 -   different articles on different servers.  (Note that the terms
  1.1938 -   "group" and "newsgroup" are equivalent.)
  1.1939 -
  1.1940 -   The final type of key is the arrival timestamp, giving the time that
  1.1941 -   the article arrived at the server.  The server MUST ensure that
  1.1942 -   article numbers are issued in order of arrival timestamp; that is,
  1.1943 -   articles arriving later MUST have higher numbers than those that
  1.1944 -   arrive earlier.  The server SHOULD allocate the next sequential
  1.1945 -   unused number to each new article.
  1.1946 -
  1.1947 -   Article numbers MUST lie between 1 and 2,147,483,647, inclusive.  The
  1.1948 -   client and server MAY use leading zeroes in specifying article
  1.1949 -   numbers but MUST NOT use more than 16 digits.  In some situations,
  1.1950 -   the value zero replaces an article number to show some special
  1.1951 -   situation.
  1.1952 -
  1.1953 -   Note that it is likely that the article number limit of 2,147,483,647
  1.1954 -   will be increased by a future revision or extension to this
  1.1955 -   specification.  While servers MUST NOT send article numbers greater
  1.1956 -   than this current limit, client and server developers are advised to
  1.1957 -
  1.1958 -
  1.1959 -
  1.1960 -Feather                     Standards Track                    [Page 35]
  1.1961 -
  1.1962 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.1963 -
  1.1964 -
  1.1965 -   use internal structures and datatypes capable of handling larger
  1.1966 -   values in anticipation of such a change.
  1.1967 -
  1.1968 -6.1.  Group and Article Selection
  1.1969 -
  1.1970 -   The following commands are used to set the "currently selected
  1.1971 -   newsgroup" and the "current article number", which are used by
  1.1972 -   various commands.  At the start of an NNTP session, both of these
  1.1973 -   values are set to the special value "invalid".
  1.1974 -
  1.1975 -6.1.1.  GROUP
  1.1976 -
  1.1977 -6.1.1.1.  Usage
  1.1978 -
  1.1979 -   Indicating capability: READER
  1.1980 -
  1.1981 -   Syntax
  1.1982 -     GROUP group
  1.1983 -
  1.1984 -   Responses
  1.1985 -     211 number low high group     Group successfully selected
  1.1986 -     411                           No such newsgroup
  1.1987 -
  1.1988 -   Parameters
  1.1989 -     group     Name of newsgroup
  1.1990 -     number    Estimated number of articles in the group
  1.1991 -     low       Reported low water mark
  1.1992 -     high      Reported high water mark
  1.1993 -
  1.1994 -6.1.1.2.  Description
  1.1995 -
  1.1996 -   The GROUP command selects a newsgroup as the currently selected
  1.1997 -   newsgroup and returns summary information about it.
  1.1998 -
  1.1999 -   The required argument is the name of the newsgroup to be selected
  1.2000 -   (e.g., "news.software.nntp").  A list of valid newsgroups may be
  1.2001 -   obtained by using the LIST ACTIVE command (see Section 7.6.3).
  1.2002 -
  1.2003 -   The successful selection response will return the article numbers of
  1.2004 -   the first and last articles in the group at the moment of selection
  1.2005 -   (these numbers are referred to as the "reported low water mark" and
  1.2006 -   the "reported high water mark") and an estimate of the number of
  1.2007 -   articles in the group currently available.
  1.2008 -
  1.2009 -   If the group is not empty, the estimate MUST be at least the actual
  1.2010 -   number of articles available and MUST be no greater than one more
  1.2011 -   than the difference between the reported low and high water marks.
  1.2012 -   (Some implementations will actually count the number of articles
  1.2013 -
  1.2014 -
  1.2015 -
  1.2016 -Feather                     Standards Track                    [Page 36]
  1.2017 -
  1.2018 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2019 -
  1.2020 -
  1.2021 -   currently stored.  Others will just subtract the low water mark from
  1.2022 -   the high water mark and add one to get an estimate.)
  1.2023 -
  1.2024 -   If the group is empty, one of the following three situations will
  1.2025 -   occur.  Clients MUST accept all three cases; servers MUST NOT
  1.2026 -   represent an empty group in any other way.
  1.2027 -
  1.2028 -   o  The high water mark will be one less than the low water mark, and
  1.2029 -      the estimated article count will be zero.  Servers SHOULD use this
  1.2030 -      method to show an empty group.  This is the only time that the
  1.2031 -      high water mark can be less than the low water mark.
  1.2032 -
  1.2033 -   o  All three numbers will be zero.
  1.2034 -
  1.2035 -   o  The high water mark is greater than or equal to the low water
  1.2036 -      mark.  The estimated article count might be zero or non-zero; if
  1.2037 -      it is non-zero, the same requirements apply as for a non-empty
  1.2038 -      group.
  1.2039 -
  1.2040 -   The set of articles in a group may change after the GROUP command is
  1.2041 -   carried out:
  1.2042 -
  1.2043 -   o  Articles may be removed from the group.
  1.2044 -
  1.2045 -   o  Articles may be reinstated in the group with the same article
  1.2046 -      number, but those articles MUST have numbers no less than the
  1.2047 -      reported low water mark (note that this is a reinstatement of the
  1.2048 -      previous article, not a new article reusing the number).
  1.2049 -
  1.2050 -   o  New articles may be added with article numbers greater than the
  1.2051 -      reported high water mark.  (If an article that was the one with
  1.2052 -      the highest number has been removed and the high water mark has
  1.2053 -      been adjusted accordingly, the next new article will not have the
  1.2054 -      number one greater than the reported high water mark.)
  1.2055 -
  1.2056 -   Except when the group is empty and all three numbers are zero,
  1.2057 -   whenever a subsequent GROUP command for the same newsgroup is issued,
  1.2058 -   either by the same client or a different client, the reported low
  1.2059 -   water mark in the response MUST be no less than that in any previous
  1.2060 -   response for that newsgroup in this session, and it SHOULD be no less
  1.2061 -   than that in any previous response for that newsgroup ever sent to
  1.2062 -   any client.  Any failure to meet the latter condition SHOULD be
  1.2063 -   transient only.  The client may make use of the low water mark to
  1.2064 -   remove all remembered information about articles with lower numbers,
  1.2065 -   as these will never recur.  This includes the situation when the high
  1.2066 -   water mark is one less than the low water mark.  No similar
  1.2067 -   assumption can be made about the high water mark, as this can
  1.2068 -
  1.2069 -
  1.2070 -
  1.2071 -
  1.2072 -Feather                     Standards Track                    [Page 37]
  1.2073 -
  1.2074 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2075 -
  1.2076 -
  1.2077 -   decrease if an article is removed and then increase again if it is
  1.2078 -   reinstated or if new articles arrive.
  1.2079 -
  1.2080 -   When a valid group is selected by means of this command, the
  1.2081 -   currently selected newsgroup MUST be set to that group, and the
  1.2082 -   current article number MUST be set to the first article in the group
  1.2083 -   (this applies even if the group is already the currently selected
  1.2084 -   newsgroup).  If an empty newsgroup is selected, the current article
  1.2085 -   number is made invalid.  If an invalid group is specified, the
  1.2086 -   currently selected newsgroup and current article number MUST NOT be
  1.2087 -   changed.
  1.2088 -
  1.2089 -   The GROUP or LISTGROUP command (see Section 6.1.2) MUST be used by a
  1.2090 -   client, and a successful response received, before any other command
  1.2091 -   is used that depends on the value of the currently selected newsgroup
  1.2092 -   or current article number.
  1.2093 -
  1.2094 -   If the group specified is not available on the server, a 411 response
  1.2095 -   MUST be returned.
  1.2096 -
  1.2097 -6.1.1.3.  Examples
  1.2098 -
  1.2099 -   Example for a group known to the server:
  1.2100 -
  1.2101 -      [C] GROUP misc.test
  1.2102 -      [S] 211 1234 3000234 3002322 misc.test
  1.2103 -
  1.2104 -   Example for a group unknown to the server:
  1.2105 -
  1.2106 -      [C] GROUP example.is.sob.bradner.or.barber
  1.2107 -      [S] 411 example.is.sob.bradner.or.barber is unknown
  1.2108 -
  1.2109 -   Example of an empty group using the preferred response:
  1.2110 -
  1.2111 -      [C] GROUP example.currently.empty.newsgroup
  1.2112 -      [S] 211 0 4000 3999 example.currently.empty.newsgroup
  1.2113 -
  1.2114 -   Example of an empty group using an alternative response:
  1.2115 -
  1.2116 -      [C] GROUP example.currently.empty.newsgroup
  1.2117 -      [S] 211 0 0 0 example.currently.empty.newsgroup
  1.2118 -
  1.2119 -   Example of an empty group using a different alternative response:
  1.2120 -
  1.2121 -      [C] GROUP example.currently.empty.newsgroup
  1.2122 -      [S] 211 0 4000 4321 example.currently.empty.newsgroup
  1.2123 -
  1.2124 -
  1.2125 -
  1.2126 -
  1.2127 -
  1.2128 -Feather                     Standards Track                    [Page 38]
  1.2129 -
  1.2130 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2131 -
  1.2132 -
  1.2133 -   Example reselecting the currently selected newsgroup:
  1.2134 -
  1.2135 -      [C] GROUP misc.test
  1.2136 -      [S] 211 1234 234 567 misc.test
  1.2137 -      [C] STAT 444
  1.2138 -      [S] 223 444 <123456@example.net> retrieved
  1.2139 -      [C] GROUP misc.test
  1.2140 -      [S] 211 1234 234 567 misc.test
  1.2141 -      [C] STAT
  1.2142 -      [S] 223 234 <different@example.net> retrieved
  1.2143 -
  1.2144 -6.1.2.  LISTGROUP
  1.2145 -
  1.2146 -6.1.2.1.  Usage
  1.2147 -
  1.2148 -   Indicating capability: READER
  1.2149 -
  1.2150 -   Syntax
  1.2151 -     LISTGROUP [group [range]]
  1.2152 -
  1.2153 -   Responses
  1.2154 -     211 number low high group     Article numbers follow (multi-line)
  1.2155 -     411                           No such newsgroup
  1.2156 -     412                           No newsgroup selected [1]
  1.2157 -
  1.2158 -   Parameters
  1.2159 -     group     Name of newsgroup
  1.2160 -     range     Range of articles to report
  1.2161 -     number    Estimated number of articles in the group
  1.2162 -     low       Reported low water mark
  1.2163 -     high      Reported high water mark
  1.2164 -
  1.2165 -   [1] The 412 response can only occur if no group has been specified.
  1.2166 -
  1.2167 -6.1.2.2.  Description
  1.2168 -
  1.2169 -   The LISTGROUP command selects a newsgroup in the same manner as the
  1.2170 -   GROUP command (see Section 6.1.1) but also provides a list of article
  1.2171 -   numbers in the newsgroup.  If no group is specified, the currently
  1.2172 -   selected newsgroup is used.
  1.2173 -
  1.2174 -   On success, a list of article numbers is returned as a multi-line
  1.2175 -   data block following the 211 response code (the arguments on the
  1.2176 -   initial response line are the same as for the GROUP command).  The
  1.2177 -   list contains one number per line and is in numerical order.  It
  1.2178 -   lists precisely those articles that exist in the group at the moment
  1.2179 -   of selection (therefore, an empty group produces an empty list).  If
  1.2180 -   the optional range argument is specified, only articles within the
  1.2181 -
  1.2182 -
  1.2183 -
  1.2184 -Feather                     Standards Track                    [Page 39]
  1.2185 -
  1.2186 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2187 -
  1.2188 -
  1.2189 -   range are included in the list (therefore, the list MAY be empty even
  1.2190 -   if the group is not).
  1.2191 -
  1.2192 -   The range argument may be any of the following:
  1.2193 -
  1.2194 -   o  An article number.
  1.2195 -
  1.2196 -   o  An article number followed by a dash to indicate all following.
  1.2197 -
  1.2198 -   o  An article number followed by a dash followed by another article
  1.2199 -      number.
  1.2200 -
  1.2201 -   In the last case, if the second number is less than the first number,
  1.2202 -   then the range contains no articles.  Omitting the range is
  1.2203 -   equivalent to the range 1- being specified.
  1.2204 -
  1.2205 -   If the group specified is not available on the server, a 411 response
  1.2206 -   MUST be returned.  If no group is specified and the currently
  1.2207 -   selected newsgroup is invalid, a 412 response MUST be returned.
  1.2208 -
  1.2209 -   Except that the group argument is optional, that a range argument can
  1.2210 -   be specified, and that a multi-line data block follows the 211
  1.2211 -   response code, the LISTGROUP command is identical to the GROUP
  1.2212 -   command.  In particular, when successful, the command sets the
  1.2213 -   current article number to the first article in the group, if any,
  1.2214 -   even if this is not within the range specified by the second
  1.2215 -   argument.
  1.2216 -
  1.2217 -   Note that the range argument is a new feature in this specification
  1.2218 -   and servers that do not support CAPABILITIES (and therefore do not
  1.2219 -   conform to this specification) are unlikely to support it.
  1.2220 -
  1.2221 -6.1.2.3.  Examples
  1.2222 -
  1.2223 -   Example of LISTGROUP being used to select a group:
  1.2224 -
  1.2225 -      [C] LISTGROUP misc.test
  1.2226 -      [S] 211 2000 3000234 3002322 misc.test list follows
  1.2227 -      [S] 3000234
  1.2228 -      [S] 3000237
  1.2229 -      [S] 3000238
  1.2230 -      [S] 3000239
  1.2231 -      [S] 3002322
  1.2232 -      [S] .
  1.2233 -
  1.2234 -
  1.2235 -
  1.2236 -
  1.2237 -
  1.2238 -
  1.2239 -
  1.2240 -Feather                     Standards Track                    [Page 40]
  1.2241 -
  1.2242 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2243 -
  1.2244 -
  1.2245 -   Example of LISTGROUP on an empty group:
  1.2246 -
  1.2247 -      [C] LISTGROUP example.empty.newsgroup
  1.2248 -      [S] 211 0 0 0 example.empty.newsgroup list follows
  1.2249 -      [S] .
  1.2250 -
  1.2251 -   Example of LISTGROUP on a valid, currently selected newsgroup:
  1.2252 -
  1.2253 -      [C] GROUP misc.test
  1.2254 -      [S] 211 2000 3000234 3002322 misc.test
  1.2255 -      [C] LISTGROUP
  1.2256 -      [S] 211 2000 3000234 3002322 misc.test list follows
  1.2257 -      [S] 3000234
  1.2258 -      [S] 3000237
  1.2259 -      [S] 3000238
  1.2260 -      [S] 3000239
  1.2261 -      [S] 3002322
  1.2262 -      [S] .
  1.2263 -
  1.2264 -   Example of LISTGROUP with a range:
  1.2265 -
  1.2266 -      [C] LISTGROUP misc.test 3000238-3000248
  1.2267 -      [S] 211 2000 3000234 3002322 misc.test list follows
  1.2268 -      [S] 3000238
  1.2269 -      [S] 3000239
  1.2270 -      [S] .
  1.2271 -
  1.2272 -   Example of LISTGROUP with an empty range:
  1.2273 -
  1.2274 -      [C] LISTGROUP misc.test 12345678-
  1.2275 -      [S] 211 2000 3000234 3002322 misc.test list follows
  1.2276 -      [S] .
  1.2277 -
  1.2278 -   Example of LISTGROUP with an invalid range:
  1.2279 -
  1.2280 -      [C] LISTGROUP misc.test 9999-111
  1.2281 -      [S] 211 2000 3000234 3002322 misc.test list follows
  1.2282 -      [S] .
  1.2283 -
  1.2284 -
  1.2285 -
  1.2286 -
  1.2287 -
  1.2288 -
  1.2289 -
  1.2290 -
  1.2291 -
  1.2292 -
  1.2293 -
  1.2294 -
  1.2295 -
  1.2296 -Feather                     Standards Track                    [Page 41]
  1.2297 -
  1.2298 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2299 -
  1.2300 -
  1.2301 -6.1.3.  LAST
  1.2302 -
  1.2303 -6.1.3.1.  Usage
  1.2304 -
  1.2305 -   Indicating capability: READER
  1.2306 -
  1.2307 -   Syntax
  1.2308 -     LAST
  1.2309 -
  1.2310 -   Responses
  1.2311 -     223 n message-id    Article found
  1.2312 -     412                 No newsgroup selected
  1.2313 -     420                 Current article number is invalid
  1.2314 -     422                 No previous article in this group
  1.2315 -
  1.2316 -   Parameters
  1.2317 -     n             Article number
  1.2318 -     message-id    Article message-id
  1.2319 -
  1.2320 -6.1.3.2.  Description
  1.2321 -
  1.2322 -   If the currently selected newsgroup is valid, the current article
  1.2323 -   number MUST be set to the previous article in that newsgroup (that
  1.2324 -   is, the highest existing article number less than the current article
  1.2325 -   number).  If successful, a response indicating the new current
  1.2326 -   article number and the message-id of that article MUST be returned.
  1.2327 -   No article text is sent in response to this command.
  1.2328 -
  1.2329 -   There MAY be no previous article in the group, although the current
  1.2330 -   article number is not the reported low water mark.  There MUST NOT be
  1.2331 -   a previous article when the current article number is the reported
  1.2332 -   low water mark.
  1.2333 -
  1.2334 -   Because articles can be removed and added, the results of multiple
  1.2335 -   LAST and NEXT commands MAY not be consistent over the life of a
  1.2336 -   particular NNTP session.
  1.2337 -
  1.2338 -   If the current article number is already the first article of the
  1.2339 -   newsgroup, a 422 response MUST be returned.  If the current article
  1.2340 -   number is invalid, a 420 response MUST be returned.  If the currently
  1.2341 -   selected newsgroup is invalid, a 412 response MUST be returned.  In
  1.2342 -   all three cases, the currently selected newsgroup and current article
  1.2343 -   number MUST NOT be altered.
  1.2344 -
  1.2345 -
  1.2346 -
  1.2347 -
  1.2348 -
  1.2349 -
  1.2350 -
  1.2351 -
  1.2352 -Feather                     Standards Track                    [Page 42]
  1.2353 -
  1.2354 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2355 -
  1.2356 -
  1.2357 -6.1.3.3.  Examples
  1.2358 -
  1.2359 -   Example of a successful article retrieval using LAST:
  1.2360 -
  1.2361 -      [C] GROUP misc.test
  1.2362 -      [S] 211 1234 3000234 3002322 misc.test
  1.2363 -      [C] NEXT
  1.2364 -      [S] 223 3000237 <668929@example.org> retrieved
  1.2365 -      [C] LAST
  1.2366 -      [S] 223 3000234 <45223423@example.com> retrieved
  1.2367 -
  1.2368 -   Example of an attempt to retrieve an article without having selected
  1.2369 -   a group (via the GROUP command) first:
  1.2370 -
  1.2371 -      [Assumes currently selected newsgroup is invalid.]
  1.2372 -      [C] LAST
  1.2373 -      [S] 412 no newsgroup selected
  1.2374 -
  1.2375 -   Example of an attempt to retrieve an article using the LAST command
  1.2376 -   when the current article number is that of the first article in the
  1.2377 -   group:
  1.2378 -
  1.2379 -      [C] GROUP misc.test
  1.2380 -      [S] 211 1234 3000234 3002322 misc.test
  1.2381 -      [C] LAST
  1.2382 -      [S] 422 No previous article to retrieve
  1.2383 -
  1.2384 -   Example of an attempt to retrieve an article using the LAST command
  1.2385 -   when the currently selected newsgroup is empty:
  1.2386 -
  1.2387 -      [C] GROUP example.empty.newsgroup
  1.2388 -      [S] 211 0 0 0 example.empty.newsgroup
  1.2389 -      [C] LAST
  1.2390 -      [S] 420 No current article selected
  1.2391 -
  1.2392 -
  1.2393 -
  1.2394 -
  1.2395 -
  1.2396 -
  1.2397 -
  1.2398 -
  1.2399 -
  1.2400 -
  1.2401 -
  1.2402 -
  1.2403 -
  1.2404 -
  1.2405 -
  1.2406 -
  1.2407 -
  1.2408 -Feather                     Standards Track                    [Page 43]
  1.2409 -
  1.2410 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2411 -
  1.2412 -
  1.2413 -6.1.4.  NEXT
  1.2414 -
  1.2415 -6.1.4.1.  Usage
  1.2416 -
  1.2417 -   Indicating capability: READER
  1.2418 -
  1.2419 -   Syntax
  1.2420 -     NEXT
  1.2421 -
  1.2422 -   Responses
  1.2423 -     223 n message-id    Article found
  1.2424 -     412                 No newsgroup selected
  1.2425 -     420                 Current article number is invalid
  1.2426 -     421                 No next article in this group
  1.2427 -
  1.2428 -   Parameters
  1.2429 -     n             Article number
  1.2430 -     message-id    Article message-id
  1.2431 -
  1.2432 -6.1.4.2.  Description
  1.2433 -
  1.2434 -   If the currently selected newsgroup is valid, the current article
  1.2435 -   number MUST be set to the next article in that newsgroup (that is,
  1.2436 -   the lowest existing article number greater than the current article
  1.2437 -   number).  If successful, a response indicating the new current
  1.2438 -   article number and the message-id of that article MUST be returned.
  1.2439 -   No article text is sent in response to this command.
  1.2440 -
  1.2441 -   If the current article number is already the last article of the
  1.2442 -   newsgroup, a 421 response MUST be returned.  In all other aspects
  1.2443 -   (apart, of course, from the lack of 422 response), this command is
  1.2444 -   identical to the LAST command (Section 6.1.3).
  1.2445 -
  1.2446 -6.1.4.3.  Examples
  1.2447 -
  1.2448 -   Example of a successful article retrieval using NEXT:
  1.2449 -
  1.2450 -      [C] GROUP misc.test
  1.2451 -      [S] 211 1234 3000234 3002322 misc.test
  1.2452 -      [C] NEXT
  1.2453 -      [S] 223 3000237 <668929@example.org> retrieved
  1.2454 -
  1.2455 -
  1.2456 -
  1.2457 -
  1.2458 -
  1.2459 -
  1.2460 -
  1.2461 -
  1.2462 -
  1.2463 -
  1.2464 -Feather                     Standards Track                    [Page 44]
  1.2465 -
  1.2466 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2467 -
  1.2468 -
  1.2469 -   Example of an attempt to retrieve an article without having selected
  1.2470 -   a group (via the GROUP command) first:
  1.2471 -
  1.2472 -      [Assumes currently selected newsgroup is invalid.]
  1.2473 -      [C] NEXT
  1.2474 -      [S] 412 no newsgroup selected
  1.2475 -
  1.2476 -   Example of an attempt to retrieve an article using the NEXT command
  1.2477 -   when the current article number is that of the last article in the
  1.2478 -   group:
  1.2479 -
  1.2480 -      [C] GROUP misc.test
  1.2481 -      [S] 211 1234 3000234 3002322 misc.test
  1.2482 -      [C] STAT 3002322
  1.2483 -      [S] 223 3002322 <411@example.net> retrieved
  1.2484 -      [C] NEXT
  1.2485 -      [S] 421 No next article to retrieve
  1.2486 -
  1.2487 -   Example of an attempt to retrieve an article using the NEXT command
  1.2488 -   when the currently selected newsgroup is empty:
  1.2489 -
  1.2490 -      [C] GROUP example.empty.newsgroup
  1.2491 -      [S] 211 0 0 0 example.empty.newsgroup
  1.2492 -      [C] NEXT
  1.2493 -      [S] 420 No current article selected
  1.2494 -
  1.2495 -6.2.  Retrieval of Articles and Article Sections
  1.2496 -
  1.2497 -   The ARTICLE, BODY, HEAD, and STAT commands are very similar.  They
  1.2498 -   differ only in the parts of the article that are presented to the
  1.2499 -   client and in the successful response code.  The ARTICLE command is
  1.2500 -   described here in full, while the other three commands are described
  1.2501 -   in terms of the differences.  As specified in Section 3.6, an article
  1.2502 -   consists of two parts: the article headers and the article body.
  1.2503 -
  1.2504 -   When responding to one of these commands, the server MUST present the
  1.2505 -   entire article or appropriate part and MUST NOT attempt to alter or
  1.2506 -   translate it in any way.
  1.2507 -
  1.2508 -
  1.2509 -
  1.2510 -
  1.2511 -
  1.2512 -
  1.2513 -
  1.2514 -
  1.2515 -
  1.2516 -
  1.2517 -
  1.2518 -
  1.2519 -
  1.2520 -Feather                     Standards Track                    [Page 45]
  1.2521 -
  1.2522 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2523 -
  1.2524 -
  1.2525 -6.2.1.  ARTICLE
  1.2526 -
  1.2527 -6.2.1.1.  Usage
  1.2528 -
  1.2529 -   Indicating capability: READER
  1.2530 -
  1.2531 -   Syntax
  1.2532 -     ARTICLE message-id
  1.2533 -     ARTICLE number
  1.2534 -     ARTICLE
  1.2535 -
  1.2536 -   Responses
  1.2537 -
  1.2538 -   First form (message-id specified)
  1.2539 -     220 0|n message-id    Article follows (multi-line)
  1.2540 -     430                   No article with that message-id
  1.2541 -
  1.2542 -   Second form (article number specified)
  1.2543 -     220 n message-id      Article follows (multi-line)
  1.2544 -     412                   No newsgroup selected
  1.2545 -     423                   No article with that number
  1.2546 -
  1.2547 -   Third form (current article number used)
  1.2548 -     220 n message-id      Article follows (multi-line)
  1.2549 -     412                   No newsgroup selected
  1.2550 -     420                   Current article number is invalid
  1.2551 -
  1.2552 -   Parameters
  1.2553 -     number        Requested article number
  1.2554 -     n             Returned article number
  1.2555 -     message-id    Article message-id
  1.2556 -
  1.2557 -6.2.1.2.  Description
  1.2558 -
  1.2559 -   The ARTICLE command selects an article according to the arguments and
  1.2560 -   presents the entire article (that is, the headers, an empty line, and
  1.2561 -   the body, in that order) to the client.  The command has three forms.
  1.2562 -
  1.2563 -   In the first form, a message-id is specified, and the server presents
  1.2564 -   the article with that message-id.  In this case, the server MUST NOT
  1.2565 -   alter the currently selected newsgroup or current article number.
  1.2566 -   This is both to facilitate the presentation of articles that may be
  1.2567 -   referenced within another article being read, and because of the
  1.2568 -   semantic difficulties of determining the proper sequence and
  1.2569 -   membership of an article that may have been cross-posted to more than
  1.2570 -   one newsgroup.
  1.2571 -
  1.2572 -
  1.2573 -
  1.2574 -
  1.2575 -
  1.2576 -Feather                     Standards Track                    [Page 46]
  1.2577 -
  1.2578 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2579 -
  1.2580 -
  1.2581 -   In the response, the article number MUST be replaced with zero,
  1.2582 -   unless there is a currently selected newsgroup and the article is
  1.2583 -   present in that group, in which case the server MAY use the article's
  1.2584 -   number in that group.  (The server is not required to determine
  1.2585 -   whether the article is in the currently selected newsgroup or, if so,
  1.2586 -   what article number it has; the client MUST always be prepared for
  1.2587 -   zero to be specified.)  The server MUST NOT provide an article number
  1.2588 -   unless use of that number in a second ARTICLE command immediately
  1.2589 -   following this one would return the same article.  Even if the server
  1.2590 -   chooses to return article numbers in these circumstances, it need not
  1.2591 -   do so consistently; it MAY return zero to any such command (also see
  1.2592 -   the STAT examples, Section 6.2.4.3).
  1.2593 -
  1.2594 -   In the second form, an article number is specified.  If there is an
  1.2595 -   article with that number in the currently selected newsgroup, the
  1.2596 -   server MUST set the current article number to that number.
  1.2597 -
  1.2598 -   In the third form, the article indicated by the current article
  1.2599 -   number in the currently selected newsgroup is used.
  1.2600 -
  1.2601 -   Note that a previously valid article number MAY become invalid if the
  1.2602 -   article has been removed.  A previously invalid article number MAY
  1.2603 -   become valid if the article has been reinstated, but this article
  1.2604 -   number MUST be no less than the reported low water mark for that
  1.2605 -   group.
  1.2606 -
  1.2607 -   The server MUST NOT change the currently selected newsgroup as a
  1.2608 -   result of this command.  The server MUST NOT change the current
  1.2609 -   article number except when an article number argument was provided
  1.2610 -   and the article exists; in particular, it MUST NOT change it
  1.2611 -   following an unsuccessful response.
  1.2612 -
  1.2613 -   Since the message-id is unique for each article, it may be used by a
  1.2614 -   client to skip duplicate displays of articles that have been posted
  1.2615 -   more than once, or to more than one newsgroup.
  1.2616 -
  1.2617 -   The article is returned as a multi-line data block following the 220
  1.2618 -   response code.
  1.2619 -
  1.2620 -   If the argument is a message-id and no such article exists, a 430
  1.2621 -   response MUST be returned.  If the argument is a number or is omitted
  1.2622 -   and the currently selected newsgroup is invalid, a 412 response MUST
  1.2623 -   be returned.  If the argument is a number and that article does not
  1.2624 -   exist in the currently selected newsgroup, a 423 response MUST be
  1.2625 -   returned.  If the argument is omitted and the current article number
  1.2626 -   is invalid, a 420 response MUST be returned.
  1.2627 -
  1.2628 -
  1.2629 -
  1.2630 -
  1.2631 -
  1.2632 -Feather                     Standards Track                    [Page 47]
  1.2633 -
  1.2634 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2635 -
  1.2636 -
  1.2637 -6.2.1.3.  Examples
  1.2638 -
  1.2639 -   Example of a successful retrieval of an article (explicitly not using
  1.2640 -   an article number):
  1.2641 -
  1.2642 -      [C] GROUP misc.test
  1.2643 -      [S] 211 1234 3000234 3002322 misc.test
  1.2644 -      [C] ARTICLE
  1.2645 -      [S] 220 3000234 <45223423@example.com>
  1.2646 -      [S] Path: pathost!demo!whitehouse!not-for-mail
  1.2647 -      [S] From: "Demo User" <nobody@example.net>
  1.2648 -      [S] Newsgroups: misc.test
  1.2649 -      [S] Subject: I am just a test article
  1.2650 -      [S] Date: 6 Oct 1998 04:38:40 -0500
  1.2651 -      [S] Organization: An Example Net, Uncertain, Texas
  1.2652 -      [S] Message-ID: <45223423@example.com>
  1.2653 -      [S]
  1.2654 -      [S] This is just a test article.
  1.2655 -      [S] .
  1.2656 -
  1.2657 -   Example of a successful retrieval of an article by message-id:
  1.2658 -
  1.2659 -      [C] ARTICLE <45223423@example.com>
  1.2660 -      [S] 220 0 <45223423@example.com>
  1.2661 -      [S] Path: pathost!demo!whitehouse!not-for-mail
  1.2662 -      [S] From: "Demo User" <nobody@example.net>
  1.2663 -      [S] Newsgroups: misc.test
  1.2664 -      [S] Subject: I am just a test article
  1.2665 -      [S] Date: 6 Oct 1998 04:38:40 -0500
  1.2666 -      [S] Organization: An Example Net, Uncertain, Texas
  1.2667 -      [S] Message-ID: <45223423@example.com>
  1.2668 -      [S]
  1.2669 -      [S] This is just a test article.
  1.2670 -      [S] .
  1.2671 -
  1.2672 -   Example of an unsuccessful retrieval of an article by message-id:
  1.2673 -
  1.2674 -      [C] ARTICLE <i.am.not.there@example.com>
  1.2675 -      [S] 430 No Such Article Found
  1.2676 -
  1.2677 -   Example of an unsuccessful retrieval of an article by number:
  1.2678 -
  1.2679 -      [C] GROUP misc.test
  1.2680 -      [S] 211 1234 3000234 3002322 news.groups
  1.2681 -      [C] ARTICLE 300256
  1.2682 -      [S] 423 No article with that number
  1.2683 -
  1.2684 -
  1.2685 -
  1.2686 -
  1.2687 -
  1.2688 -Feather                     Standards Track                    [Page 48]
  1.2689 -
  1.2690 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2691 -
  1.2692 -
  1.2693 -   Example of an unsuccessful retrieval of an article by number because
  1.2694 -   no newsgroup was selected first:
  1.2695 -
  1.2696 -      [Assumes currently selected newsgroup is invalid.]
  1.2697 -      [C] ARTICLE 300256
  1.2698 -      [S] 412 No newsgroup selected
  1.2699 -
  1.2700 -   Example of an attempt to retrieve an article when the currently
  1.2701 -   selected newsgroup is empty:
  1.2702 -
  1.2703 -      [C] GROUP example.empty.newsgroup
  1.2704 -      [S] 211 0 0 0 example.empty.newsgroup
  1.2705 -      [C] ARTICLE
  1.2706 -      [S] 420 No current article selected
  1.2707 -
  1.2708 -6.2.2.  HEAD
  1.2709 -
  1.2710 -6.2.2.1.  Usage
  1.2711 -
  1.2712 -   This command is mandatory.
  1.2713 -
  1.2714 -   Syntax
  1.2715 -     HEAD message-id
  1.2716 -     HEAD number
  1.2717 -     HEAD
  1.2718 -
  1.2719 -   Responses
  1.2720 -
  1.2721 -   First form (message-id specified)
  1.2722 -     221 0|n message-id    Headers follow (multi-line)
  1.2723 -     430                   No article with that message-id
  1.2724 -
  1.2725 -   Second form (article number specified)
  1.2726 -     221 n message-id      Headers follow (multi-line)
  1.2727 -     412                   No newsgroup selected
  1.2728 -     423                   No article with that number
  1.2729 -
  1.2730 -   Third form (current article number used)
  1.2731 -     221 n message-id      Headers follow (multi-line)
  1.2732 -     412                   No newsgroup selected
  1.2733 -     420                   Current article number is invalid
  1.2734 -
  1.2735 -   Parameters
  1.2736 -     number        Requested article number
  1.2737 -     n             Returned article number
  1.2738 -     message-id    Article message-id
  1.2739 -
  1.2740 -
  1.2741 -
  1.2742 -
  1.2743 -
  1.2744 -Feather                     Standards Track                    [Page 49]
  1.2745 -
  1.2746 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2747 -
  1.2748 -
  1.2749 -6.2.2.2.  Description
  1.2750 -
  1.2751 -   The HEAD command behaves identically to the ARTICLE command except
  1.2752 -   that, if the article exists, the response code is 221 instead of 220
  1.2753 -   and only the headers are presented (the empty line separating the
  1.2754 -   headers and body MUST NOT be included).
  1.2755 -
  1.2756 -6.2.2.3.  Examples
  1.2757 -
  1.2758 -   Example of a successful retrieval of the headers of an article
  1.2759 -   (explicitly not using an article number):
  1.2760 -
  1.2761 -      [C] GROUP misc.test
  1.2762 -      [S] 211 1234 3000234 3002322 misc.test
  1.2763 -      [C] HEAD
  1.2764 -      [S] 221 3000234 <45223423@example.com>
  1.2765 -      [S] Path: pathost!demo!whitehouse!not-for-mail
  1.2766 -      [S] From: "Demo User" <nobody@example.net>
  1.2767 -      [S] Newsgroups: misc.test
  1.2768 -      [S] Subject: I am just a test article
  1.2769 -      [S] Date: 6 Oct 1998 04:38:40 -0500
  1.2770 -      [S] Organization: An Example Net, Uncertain, Texas
  1.2771 -      [S] Message-ID: <45223423@example.com>
  1.2772 -      [S] .
  1.2773 -
  1.2774 -   Example of a successful retrieval of the headers of an article by
  1.2775 -   message-id:
  1.2776 -
  1.2777 -      [C] HEAD <45223423@example.com>
  1.2778 -      [S] 221 0 <45223423@example.com>
  1.2779 -      [S] Path: pathost!demo!whitehouse!not-for-mail
  1.2780 -      [S] From: "Demo User" <nobody@example.net>
  1.2781 -      [S] Newsgroups: misc.test
  1.2782 -      [S] Subject: I am just a test article
  1.2783 -      [S] Date: 6 Oct 1998 04:38:40 -0500
  1.2784 -      [S] Organization: An Example Net, Uncertain, Texas
  1.2785 -      [S] Message-ID: <45223423@example.com>
  1.2786 -      [S] .
  1.2787 -
  1.2788 -   Example of an unsuccessful retrieval of the headers of an article by
  1.2789 -   message-id:
  1.2790 -
  1.2791 -      [C] HEAD <i.am.not.there@example.com>
  1.2792 -      [S] 430 No Such Article Found
  1.2793 -
  1.2794 -
  1.2795 -
  1.2796 -
  1.2797 -
  1.2798 -
  1.2799 -
  1.2800 -Feather                     Standards Track                    [Page 50]
  1.2801 -
  1.2802 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2803 -
  1.2804 -
  1.2805 -   Example of an unsuccessful retrieval of the headers of an article by
  1.2806 -   number:
  1.2807 -
  1.2808 -      [C] GROUP misc.test
  1.2809 -      [S] 211 1234 3000234 3002322 misc.test
  1.2810 -      [C] HEAD 300256
  1.2811 -      [S] 423 No article with that number
  1.2812 -
  1.2813 -   Example of an unsuccessful retrieval of the headers of an article by
  1.2814 -   number because no newsgroup was selected first:
  1.2815 -
  1.2816 -      [Assumes currently selected newsgroup is invalid.]
  1.2817 -      [C] HEAD 300256
  1.2818 -      [S] 412 No newsgroup selected
  1.2819 -
  1.2820 -   Example of an attempt to retrieve the headers of an article when the
  1.2821 -   currently selected newsgroup is empty:
  1.2822 -
  1.2823 -      [C] GROUP example.empty.newsgroup
  1.2824 -      [S] 211 0 0 0 example.empty.newsgroup
  1.2825 -      [C] HEAD
  1.2826 -      [S] 420 No current article selected
  1.2827 -
  1.2828 -6.2.3.  BODY
  1.2829 -
  1.2830 -6.2.3.1.  Usage
  1.2831 -
  1.2832 -   Indicating capability: READER
  1.2833 -
  1.2834 -   Syntax
  1.2835 -     BODY message-id
  1.2836 -     BODY number
  1.2837 -     BODY
  1.2838 -
  1.2839 -   Responses
  1.2840 -
  1.2841 -   First form (message-id specified)
  1.2842 -     222 0|n message-id    Body follows (multi-line)
  1.2843 -     430                   No article with that message-id
  1.2844 -
  1.2845 -   Second form (article number specified)
  1.2846 -     222 n message-id      Body follows (multi-line)
  1.2847 -     412                   No newsgroup selected
  1.2848 -     423                   No article with that number
  1.2849 -
  1.2850 -
  1.2851 -
  1.2852 -
  1.2853 -
  1.2854 -
  1.2855 -
  1.2856 -Feather                     Standards Track                    [Page 51]
  1.2857 -
  1.2858 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2859 -
  1.2860 -
  1.2861 -   Third form (current article number used)
  1.2862 -     222 n message-id      Body follows (multi-line)
  1.2863 -     412                   No newsgroup selected
  1.2864 -     420                   Current article number is invalid
  1.2865 -
  1.2866 -   Parameters
  1.2867 -     number        Requested article number
  1.2868 -     n             Returned article number
  1.2869 -     message-id    Article message-id
  1.2870 -
  1.2871 -6.2.3.2.  Description
  1.2872 -
  1.2873 -   The BODY command behaves identically to the ARTICLE command except
  1.2874 -   that, if the article exists, the response code is 222 instead of 220
  1.2875 -   and only the body is presented (the empty line separating the headers
  1.2876 -   and body MUST NOT be included).
  1.2877 -
  1.2878 -6.2.3.3.  Examples
  1.2879 -
  1.2880 -   Example of a successful retrieval of the body of an article
  1.2881 -   (explicitly not using an article number):
  1.2882 -
  1.2883 -      [C] GROUP misc.test
  1.2884 -      [S] 211 1234 3000234 3002322 misc.test
  1.2885 -      [C] BODY
  1.2886 -      [S] 222 3000234 <45223423@example.com>
  1.2887 -      [S] This is just a test article.
  1.2888 -      [S] .
  1.2889 -
  1.2890 -   Example of a successful retrieval of the body of an article by
  1.2891 -   message-id:
  1.2892 -
  1.2893 -      [C] BODY <45223423@example.com>
  1.2894 -      [S] 222 0 <45223423@example.com>
  1.2895 -      [S] This is just a test article.
  1.2896 -      [S] .
  1.2897 -
  1.2898 -   Example of an unsuccessful retrieval of the body of an article by
  1.2899 -   message-id:
  1.2900 -
  1.2901 -      [C] BODY <i.am.not.there@example.com>
  1.2902 -      [S] 430 No Such Article Found
  1.2903 -
  1.2904 -
  1.2905 -
  1.2906 -
  1.2907 -
  1.2908 -
  1.2909 -
  1.2910 -
  1.2911 -
  1.2912 -Feather                     Standards Track                    [Page 52]
  1.2913 -
  1.2914 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2915 -
  1.2916 -
  1.2917 -   Example of an unsuccessful retrieval of the body of an article by
  1.2918 -   number:
  1.2919 -
  1.2920 -      [C] GROUP misc.test
  1.2921 -      [S] 211 1234 3000234 3002322 misc.test
  1.2922 -      [C] BODY 300256
  1.2923 -      [S] 423 No article with that number
  1.2924 -
  1.2925 -   Example of an unsuccessful retrieval of the body of an article by
  1.2926 -   number because no newsgroup was selected first:
  1.2927 -
  1.2928 -      [Assumes currently selected newsgroup is invalid.]
  1.2929 -      [C] BODY 300256
  1.2930 -      [S] 412 No newsgroup selected
  1.2931 -
  1.2932 -   Example of an attempt to retrieve the body of an article when the
  1.2933 -   currently selected newsgroup is empty:
  1.2934 -
  1.2935 -      [C] GROUP example.empty.newsgroup
  1.2936 -      [S] 211 0 0 0 example.empty.newsgroup
  1.2937 -      [C] BODY
  1.2938 -      [S] 420 No current article selected
  1.2939 -
  1.2940 -6.2.4.  STAT
  1.2941 -
  1.2942 -6.2.4.1.  Usage
  1.2943 -
  1.2944 -   This command is mandatory.
  1.2945 -
  1.2946 -   Syntax
  1.2947 -     STAT message-id
  1.2948 -     STAT number
  1.2949 -     STAT
  1.2950 -
  1.2951 -   Responses
  1.2952 -
  1.2953 -   First form (message-id specified)
  1.2954 -     223 0|n message-id    Article exists
  1.2955 -     430                   No article with that message-id
  1.2956 -
  1.2957 -   Second form (article number specified)
  1.2958 -     223 n message-id      Article exists
  1.2959 -     412                   No newsgroup selected
  1.2960 -     423                   No article with that number
  1.2961 -
  1.2962 -
  1.2963 -
  1.2964 -
  1.2965 -
  1.2966 -
  1.2967 -
  1.2968 -Feather                     Standards Track                    [Page 53]
  1.2969 -
  1.2970 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.2971 -
  1.2972 -
  1.2973 -   Third form (current article number used)
  1.2974 -     223 n message-id      Article exists
  1.2975 -     412                   No newsgroup selected
  1.2976 -     420                   Current article number is invalid
  1.2977 -
  1.2978 -   Parameters
  1.2979 -     number        Requested article number
  1.2980 -     n             Returned article number
  1.2981 -     message-id    Article message-id
  1.2982 -
  1.2983 -6.2.4.2.  Description
  1.2984 -
  1.2985 -   The STAT command behaves identically to the ARTICLE command except
  1.2986 -   that, if the article exists, it is NOT presented to the client and
  1.2987 -   the response code is 223 instead of 220.  Note that the response is
  1.2988 -   NOT multi-line.
  1.2989 -
  1.2990 -   This command allows the client to determine whether an article exists
  1.2991 -   and, in the second and third forms, what its message-id is, without
  1.2992 -   having to process an arbitrary amount of text.
  1.2993 -
  1.2994 -6.2.4.3.  Examples
  1.2995 -
  1.2996 -   Example of STAT on an existing article (explicitly not using an
  1.2997 -   article number):
  1.2998 -
  1.2999 -      [C] GROUP misc.test
  1.3000 -      [S] 211 1234 3000234 3002322 misc.test
  1.3001 -      [C] STAT
  1.3002 -      [S] 223 3000234 <45223423@example.com>
  1.3003 -
  1.3004 -   Example of STAT on an existing article by message-id:
  1.3005 -
  1.3006 -      [C] STAT <45223423@example.com>
  1.3007 -      [S] 223 0 <45223423@example.com>
  1.3008 -
  1.3009 -   Example of STAT on an article not on the server by message-id:
  1.3010 -
  1.3011 -      [C] STAT <i.am.not.there@example.com>
  1.3012 -      [S] 430 No Such Article Found
  1.3013 -
  1.3014 -   Example of STAT on an article not in the server by number:
  1.3015 -
  1.3016 -      [C] GROUP misc.test
  1.3017 -      [S] 211 1234 3000234 3002322 misc.test
  1.3018 -      [C] STAT 300256
  1.3019 -      [S] 423 No article with that number
  1.3020 -
  1.3021 -
  1.3022 -
  1.3023 -
  1.3024 -Feather                     Standards Track                    [Page 54]
  1.3025 -
  1.3026 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3027 -
  1.3028 -
  1.3029 -   Example of STAT on an article by number when no newsgroup was
  1.3030 -   selected first:
  1.3031 -
  1.3032 -      [Assumes currently selected newsgroup is invalid.]
  1.3033 -      [C] STAT 300256
  1.3034 -      [S] 412 No newsgroup selected
  1.3035 -
  1.3036 -   Example of STAT on an article when the currently selected newsgroup
  1.3037 -   is empty:
  1.3038 -
  1.3039 -      [C] GROUP example.empty.newsgroup
  1.3040 -      [S] 211 0 0 0 example.empty.newsgroup
  1.3041 -      [C] STAT
  1.3042 -      [S] 420 No current article selected
  1.3043 -
  1.3044 -   Example of STAT by message-id on a server that sometimes reports the
  1.3045 -   actual article number:
  1.3046 -
  1.3047 -      [C] GROUP misc.test
  1.3048 -      [S] 211 1234 3000234 3002322 misc.test
  1.3049 -      [C] STAT
  1.3050 -      [S] 223 3000234 <45223423@example.com>
  1.3051 -      [C] STAT <45223423@example.com>
  1.3052 -      [S] 223 0 <45223423@example.com>
  1.3053 -      [C] STAT <45223423@example.com>
  1.3054 -      [S] 223 3000234 <45223423@example.com>
  1.3055 -      [C] GROUP example.empty.newsgroup
  1.3056 -      [S] 211 0 0 0 example.empty.newsgroup
  1.3057 -      [C] STAT <45223423@example.com>
  1.3058 -      [S] 223 0 <45223423@example.com>
  1.3059 -      [C] GROUP alt.crossposts
  1.3060 -      [S] 211 9999 111111 222222 alt.crossposts
  1.3061 -      [C] STAT <45223423@example.com>
  1.3062 -      [S] 223 123456 <45223423@example.com>
  1.3063 -      [C] STAT
  1.3064 -      [S] 223 111111 <23894720@example.com>
  1.3065 -
  1.3066 -   The first STAT command establishes the identity of an article in the
  1.3067 -   group.  The second and third show that the server may, but need not,
  1.3068 -   give the article number when the message-id is specified.  The fourth
  1.3069 -   STAT command shows that zero must be specified if the article isn't
  1.3070 -   in the currently selected newsgroup.  The fifth shows that the
  1.3071 -   number, if provided, must be that relating to the currently selected
  1.3072 -   newsgroup.  The last one shows that the current article number is
  1.3073 -   still not changed by the use of STAT with a message-id even if it
  1.3074 -   returns an article number.
  1.3075 -
  1.3076 -
  1.3077 -
  1.3078 -
  1.3079 -
  1.3080 -Feather                     Standards Track                    [Page 55]
  1.3081 -
  1.3082 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3083 -
  1.3084 -
  1.3085 -6.3.  Article Posting
  1.3086 -
  1.3087 -   Article posting is done in one of two ways: individual article
  1.3088 -   posting from news-reading clients using POST, and article transfer
  1.3089 -   from other news servers using IHAVE.
  1.3090 -
  1.3091 -6.3.1.  POST
  1.3092 -
  1.3093 -6.3.1.1.  Usage
  1.3094 -
  1.3095 -   Indicating capability: POST
  1.3096 -
  1.3097 -   This command MUST NOT be pipelined.
  1.3098 -
  1.3099 -   Syntax
  1.3100 -     POST
  1.3101 -
  1.3102 -   Responses
  1.3103 -
  1.3104 -   Initial responses
  1.3105 -     340    Send article to be posted
  1.3106 -     440    Posting not permitted
  1.3107 -
  1.3108 -   Subsequent responses
  1.3109 -     240    Article received OK
  1.3110 -     441    Posting failed
  1.3111 -
  1.3112 -6.3.1.2.  Description
  1.3113 -
  1.3114 -   If posting is allowed, a 340 response MUST be returned to indicate
  1.3115 -   that the article to be posted should be sent.  If posting is
  1.3116 -   prohibited for some installation-dependent reason, a 440 response
  1.3117 -   MUST be returned.
  1.3118 -
  1.3119 -   If posting is permitted, the article MUST be in the format specified
  1.3120 -   in Section 3.6 and MUST be sent by the client to the server as a
  1.3121 -   multi-line data block (see Section 3.1.1).  Thus a single dot (".")
  1.3122 -   on a line indicates the end of the text, and lines starting with a
  1.3123 -   dot in the original text have that dot doubled during transmission.
  1.3124 -
  1.3125 -   Following the presentation of the termination sequence by the client,
  1.3126 -   the server MUST return a response indicating success or failure of
  1.3127 -   the article transfer.  Note that response codes 340 and 440 are used
  1.3128 -   in direct response to the POST command while 240 and 441 are returned
  1.3129 -   after the article is sent.
  1.3130 -
  1.3131 -
  1.3132 -
  1.3133 -
  1.3134 -
  1.3135 -
  1.3136 -Feather                     Standards Track                    [Page 56]
  1.3137 -
  1.3138 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3139 -
  1.3140 -
  1.3141 -   A response of 240 SHOULD indicate that, barring unforeseen server
  1.3142 -   errors, the posted article will be made available on the server
  1.3143 -   and/or transferred to other servers, as appropriate, possibly
  1.3144 -   following further processing.  In other words, articles not wanted by
  1.3145 -   the server SHOULD be rejected with a 441 response, rather than being
  1.3146 -   accepted and then discarded silently.  However, the client SHOULD NOT
  1.3147 -   assume that the article has been successfully transferred unless it
  1.3148 -   receives an affirmative response from the server and SHOULD NOT
  1.3149 -   assume that it is being made available to other clients without
  1.3150 -   explicitly checking (for example, using the STAT command).
  1.3151 -
  1.3152 -   If the session is interrupted before the response is received, it is
  1.3153 -   possible that an affirmative response was sent but has been lost.
  1.3154 -   Therefore, in any subsequent session, the client SHOULD either check
  1.3155 -   whether the article was successfully posted before resending or
  1.3156 -   ensure that the server will allocate the same message-id to the new
  1.3157 -   attempt (see Appendix A.2).  The latter approach is preferred since
  1.3158 -   the article might not have been made available for reading yet (for
  1.3159 -   example, it may have to go through a moderation process).
  1.3160 -
  1.3161 -6.3.1.3.  Examples
  1.3162 -
  1.3163 -   Example of a successful posting:
  1.3164 -
  1.3165 -      [C] POST
  1.3166 -      [S] 340 Input article; end with <CR-LF>.<CR-LF>
  1.3167 -      [C] From: "Demo User" <nobody@example.net>
  1.3168 -      [C] Newsgroups: misc.test
  1.3169 -      [C] Subject: I am just a test article
  1.3170 -      [C] Organization: An Example Net
  1.3171 -      [C]
  1.3172 -      [C] This is just a test article.
  1.3173 -      [C] .
  1.3174 -      [S] 240 Article received OK
  1.3175 -
  1.3176 -   Example of an unsuccessful posting:
  1.3177 -
  1.3178 -      [C] POST
  1.3179 -      [S] 340 Input article; end with <CR-LF>.<CR-LF>
  1.3180 -      [C] From: "Demo User" <nobody@example.net>
  1.3181 -      [C] Newsgroups: misc.test
  1.3182 -      [C] Subject: I am just a test article
  1.3183 -      [C] Organization: An Example Net
  1.3184 -      [C]
  1.3185 -      [C] This is just a test article.
  1.3186 -      [C] .
  1.3187 -      [S] 441 Posting failed
  1.3188 -
  1.3189 -
  1.3190 -
  1.3191 -
  1.3192 -Feather                     Standards Track                    [Page 57]
  1.3193 -
  1.3194 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3195 -
  1.3196 -
  1.3197 -   Example of an attempt to post when posting is not allowed:
  1.3198 -
  1.3199 -      [Initial connection set-up completed.]
  1.3200 -      [S] 201 NNTP Service Ready, posting prohibited
  1.3201 -      [C] POST
  1.3202 -      [S] 440 Posting not permitted
  1.3203 -
  1.3204 -6.3.2.  IHAVE
  1.3205 -
  1.3206 -6.3.2.1.  Usage
  1.3207 -
  1.3208 -   Indicating capability: IHAVE
  1.3209 -
  1.3210 -   This command MUST NOT be pipelined.
  1.3211 -
  1.3212 -   Syntax
  1.3213 -     IHAVE message-id
  1.3214 -
  1.3215 -   Responses
  1.3216 -
  1.3217 -   Initial responses
  1.3218 -     335    Send article to be transferred
  1.3219 -     435    Article not wanted
  1.3220 -     436    Transfer not possible; try again later
  1.3221 -
  1.3222 -   Subsequent responses
  1.3223 -     235    Article transferred OK
  1.3224 -     436    Transfer failed; try again later
  1.3225 -     437    Transfer rejected; do not retry
  1.3226 -
  1.3227 -   Parameters
  1.3228 -     message-id    Article message-id
  1.3229 -
  1.3230 -6.3.2.2.  Description
  1.3231 -
  1.3232 -   The IHAVE command informs the server that the client has an article
  1.3233 -   with the specified message-id.  If the server desires a copy of that
  1.3234 -   article, a 335 response MUST be returned, instructing the client to
  1.3235 -   send the entire article.  If the server does not want the article
  1.3236 -   (if, for example, the server already has a copy of it), a 435
  1.3237 -   response MUST be returned, indicating that the article is not wanted.
  1.3238 -   Finally, if the article isn't wanted immediately but the client
  1.3239 -   should retry later if possible (if, for example, another client is in
  1.3240 -   the process of sending the same article to the server), a 436
  1.3241 -   response MUST be returned.
  1.3242 -
  1.3243 -
  1.3244 -
  1.3245 -
  1.3246 -
  1.3247 -
  1.3248 -Feather                     Standards Track                    [Page 58]
  1.3249 -
  1.3250 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3251 -
  1.3252 -
  1.3253 -   If transmission of the article is requested, the client MUST send the
  1.3254 -   entire article, including headers and body, to the server as a
  1.3255 -   multi-line data block (see Section 3.1.1).  Thus, a single dot (".")
  1.3256 -   on a line indicates the end of the text, and lines starting with a
  1.3257 -   dot in the original text have that dot doubled during transmission.
  1.3258 -   The server MUST return a 235 response, indicating that the article
  1.3259 -   was successfully transferred; a 436 response, indicating that the
  1.3260 -   transfer failed but should be tried again later; or a 437 response,
  1.3261 -   indicating that the article was rejected.
  1.3262 -
  1.3263 -   This function differs from the POST command in that it is intended
  1.3264 -   for use in transferring already-posted articles between hosts.  It
  1.3265 -   SHOULD NOT be used when the client is a personal news-reading
  1.3266 -   program, since use of this command indicates that the article has
  1.3267 -   already been posted at another site and is simply being forwarded
  1.3268 -   from another host.  However, despite this, the server MAY elect not
  1.3269 -   to post or forward the article if, after further examination of the
  1.3270 -   article, it deems it inappropriate to do so.  Reasons for such
  1.3271 -   subsequent rejection of an article may include problems such as
  1.3272 -   inappropriate newsgroups or distributions, disc space limitations,
  1.3273 -   article lengths, garbled headers, and the like.  These are typically
  1.3274 -   restrictions enforced by the server host's news software and not
  1.3275 -   necessarily by the NNTP server itself.
  1.3276 -
  1.3277 -   The client SHOULD NOT assume that the article has been successfully
  1.3278 -   transferred unless it receives an affirmative response from the
  1.3279 -   server.  A lack of response (such as a dropped network connection or
  1.3280 -   a network timeout) SHOULD be treated the same as a 436 response.
  1.3281 -
  1.3282 -   Because some news server software may not immediately be able to
  1.3283 -   determine whether an article is suitable for posting or forwarding,
  1.3284 -   an NNTP server MAY acknowledge the successful transfer of the article
  1.3285 -   (with a 235 response) but later silently discard it.
  1.3286 -
  1.3287 -
  1.3288 -
  1.3289 -
  1.3290 -
  1.3291 -
  1.3292 -
  1.3293 -
  1.3294 -
  1.3295 -
  1.3296 -
  1.3297 -
  1.3298 -
  1.3299 -
  1.3300 -
  1.3301 -
  1.3302 -
  1.3303 -
  1.3304 -Feather                     Standards Track                    [Page 59]
  1.3305 -
  1.3306 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3307 -
  1.3308 -
  1.3309 -6.3.2.3.  Examples
  1.3310 -
  1.3311 -   Example of successfully sending an article to another site:
  1.3312 -
  1.3313 -      [C] IHAVE <i.am.an.article.you.will.want@example.com>
  1.3314 -      [S] 335 Send it; end with <CR-LF>.<CR-LF>
  1.3315 -      [C] Path: pathost!demo!somewhere!not-for-mail
  1.3316 -      [C] From: "Demo User" <nobody@example.com>
  1.3317 -      [C] Newsgroups: misc.test
  1.3318 -      [C] Subject: I am just a test article
  1.3319 -      [C] Date: 6 Oct 1998 04:38:40 -0500
  1.3320 -      [C] Organization: An Example Com, San Jose, CA
  1.3321 -      [C] Message-ID: <i.am.an.article.you.will.want@example.com>
  1.3322 -      [C]
  1.3323 -      [C] This is just a test article.
  1.3324 -      [C] .
  1.3325 -      [S] 235 Article transferred OK
  1.3326 -
  1.3327 -   Example of sending an article to another site that rejects it.  Note
  1.3328 -   that the message-id in the IHAVE command is not the same as the one
  1.3329 -   in the article headers; while this is bad practice and SHOULD NOT be
  1.3330 -   done, it is not forbidden.
  1.3331 -
  1.3332 -      [C] IHAVE <i.am.an.article.you.will.want@example.com>
  1.3333 -      [S] 335 Send it; end with <CR-LF>.<CR-LF>
  1.3334 -      [C] Path: pathost!demo!somewhere!not-for-mail
  1.3335 -      [C] From: "Demo User" <nobody@example.com>
  1.3336 -      [C] Newsgroups: misc.test
  1.3337 -      [C] Subject: I am just a test article
  1.3338 -      [C] Date: 6 Oct 1998 04:38:40 -0500
  1.3339 -      [C] Organization: An Example Com, San Jose, CA
  1.3340 -      [C] Message-ID: <i.am.an.article.you.have@example.com>
  1.3341 -      [C]
  1.3342 -      [C] This is just a test article.
  1.3343 -      [C] .
  1.3344 -      [S] 437 Article rejected; don't send again
  1.3345 -
  1.3346 -
  1.3347 -
  1.3348 -
  1.3349 -
  1.3350 -
  1.3351 -
  1.3352 -
  1.3353 -
  1.3354 -
  1.3355 -
  1.3356 -
  1.3357 -
  1.3358 -
  1.3359 -
  1.3360 -Feather                     Standards Track                    [Page 60]
  1.3361 -
  1.3362 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3363 -
  1.3364 -
  1.3365 -   Example of sending an article to another site where the transfer
  1.3366 -   fails:
  1.3367 -
  1.3368 -      [C] IHAVE <i.am.an.article.you.will.want@example.com>
  1.3369 -      [S] 335 Send it; end with <CR-LF>.<CR-LF>
  1.3370 -      [C] Path: pathost!demo!somewhere!not-for-mail
  1.3371 -      [C] From: "Demo User" <nobody@example.com>
  1.3372 -      [C] Newsgroups: misc.test
  1.3373 -      [C] Subject: I am just a test article
  1.3374 -      [C] Date: 6 Oct 1998 04:38:40 -0500
  1.3375 -      [C] Organization: An Example Com, San Jose, CA
  1.3376 -      [C] Message-ID: <i.am.an.article.you.will.want@example.com>
  1.3377 -      [C]
  1.3378 -      [C] This is just a test article.
  1.3379 -      [C] .
  1.3380 -      [S] 436 Transfer failed
  1.3381 -
  1.3382 -   Example of sending an article to a site that already has it:
  1.3383 -
  1.3384 -      [C] IHAVE <i.am.an.article.you.have@example.com>
  1.3385 -      [S] 435 Duplicate
  1.3386 -
  1.3387 -   Example of sending an article to a site that requests that the
  1.3388 -   article be tried again later:
  1.3389 -
  1.3390 -      [C] IHAVE <i.am.an.article.you.defer@example.com>
  1.3391 -      [S] 436 Retry later
  1.3392 -
  1.3393 -7.  Information Commands
  1.3394 -
  1.3395 -   This section lists other commands that may be used at any time
  1.3396 -   between the beginning of a session and its termination.  Using these
  1.3397 -   commands does not alter any state information, but the response
  1.3398 -   generated from their use may provide useful information to clients.
  1.3399 -
  1.3400 -7.1.  DATE
  1.3401 -
  1.3402 -7.1.1.  Usage
  1.3403 -
  1.3404 -   Indicating capability: READER
  1.3405 -
  1.3406 -   Syntax
  1.3407 -     DATE
  1.3408 -
  1.3409 -   Responses
  1.3410 -     111 yyyymmddhhmmss    Server date and time
  1.3411 -
  1.3412 -
  1.3413 -
  1.3414 -
  1.3415 -
  1.3416 -Feather                     Standards Track                    [Page 61]
  1.3417 -
  1.3418 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3419 -
  1.3420 -
  1.3421 -   Parameters
  1.3422 -     yyyymmddhhmmss    Current UTC date and time on server
  1.3423 -
  1.3424 -7.1.2.  Description
  1.3425 -
  1.3426 -   This command exists to help clients find out the current Coordinated
  1.3427 -   Universal Time [TF.686-1] from the server's perspective.  This
  1.3428 -   command SHOULD NOT be used as a substitute for NTP [RFC1305] but to
  1.3429 -   provide information that might be useful when using the NEWNEWS
  1.3430 -   command (see Section 7.4).
  1.3431 -
  1.3432 -   The DATE command MUST return a timestamp from the same clock as is
  1.3433 -   used for determining article arrival and group creation times (see
  1.3434 -   Section 6).  This clock SHOULD be monotonic, and adjustments SHOULD
  1.3435 -   be made by running it fast or slow compared to "real" time rather
  1.3436 -   than by making sudden jumps.  A system providing NNTP service SHOULD
  1.3437 -   keep the system clock as accurate as possible, either with NTP or by
  1.3438 -   some other method.
  1.3439 -
  1.3440 -   The server MUST return a 111 response specifying the date and time on
  1.3441 -   the server in the form yyyymmddhhmmss.  This date and time is in
  1.3442 -   Coordinated Universal Time.
  1.3443 -
  1.3444 -7.1.3.  Examples
  1.3445 -
  1.3446 -      [C] DATE
  1.3447 -      [S] 111 19990623135624
  1.3448 -
  1.3449 -7.2.  HELP
  1.3450 -
  1.3451 -7.2.1.  Usage
  1.3452 -
  1.3453 -   This command is mandatory.
  1.3454 -
  1.3455 -   Syntax
  1.3456 -     HELP
  1.3457 -
  1.3458 -   Responses
  1.3459 -     100    Help text follows (multi-line)
  1.3460 -
  1.3461 -7.2.2.  Description
  1.3462 -
  1.3463 -   This command provides a short summary of the commands that are
  1.3464 -   understood by this implementation of the server.  The help text will
  1.3465 -   be presented as a multi-line data block following the 100 response
  1.3466 -   code.
  1.3467 -
  1.3468 -
  1.3469 -
  1.3470 -
  1.3471 -
  1.3472 -Feather                     Standards Track                    [Page 62]
  1.3473 -
  1.3474 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3475 -
  1.3476 -
  1.3477 -   This text is not guaranteed to be in any particular format (but must
  1.3478 -   be UTF-8) and MUST NOT be used by clients as a replacement for the
  1.3479 -   CAPABILITIES command described in Section 5.2.
  1.3480 -
  1.3481 -7.2.3.  Examples
  1.3482 -
  1.3483 -      [C] HELP
  1.3484 -      [S] 100 Help text follows
  1.3485 -      [S] This is some help text.  There is no specific
  1.3486 -      [S] formatting requirement for this test, though
  1.3487 -      [S] it is customary for it to list the valid commands
  1.3488 -      [S] and give a brief definition of what they do.
  1.3489 -      [S] .
  1.3490 -
  1.3491 -7.3.  NEWGROUPS
  1.3492 -
  1.3493 -7.3.1.  Usage
  1.3494 -
  1.3495 -   Indicating capability: READER
  1.3496 -
  1.3497 -   Syntax
  1.3498 -     NEWGROUPS date time [GMT]
  1.3499 -
  1.3500 -   Responses
  1.3501 -     231    List of new newsgroups follows (multi-line)
  1.3502 -
  1.3503 -   Parameters
  1.3504 -     date    Date in yymmdd or yyyymmdd format
  1.3505 -     time    Time in hhmmss format
  1.3506 -
  1.3507 -7.3.2.  Description
  1.3508 -
  1.3509 -   This command returns a list of newsgroups created on the server since
  1.3510 -   the specified date and time.  The results are in the same format as
  1.3511 -   the LIST ACTIVE command (see Section 7.6.3).  However, they MAY
  1.3512 -   include groups not available on the server (and so not returned by
  1.3513 -   LIST ACTIVE) and MAY omit groups for which the creation date is not
  1.3514 -   available.
  1.3515 -
  1.3516 -   The date is specified as 6 or 8 digits in the format [xx]yymmdd,
  1.3517 -   where xx is the first two digits of the year (19-99), yy is the last
  1.3518 -   two digits of the year (00-99), mm is the month (01-12), and dd is
  1.3519 -   the day of the month (01-31).  Clients SHOULD specify all four digits
  1.3520 -   of the year.  If the first two digits of the year are not specified
  1.3521 -   (this is supported only for backward compatibility), the year is to
  1.3522 -   be taken from the current century if yy is smaller than or equal to
  1.3523 -   the current year, and the previous century otherwise.
  1.3524 -
  1.3525 -
  1.3526 -
  1.3527 -
  1.3528 -Feather                     Standards Track                    [Page 63]
  1.3529 -
  1.3530 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3531 -
  1.3532 -
  1.3533 -   The time is specified as 6 digits in the format hhmmss, where hh is
  1.3534 -   the hours in the 24-hour clock (00-23), mm is the minutes (00-59),
  1.3535 -   and ss is the seconds (00-60, to allow for leap seconds).  The token
  1.3536 -   "GMT" specifies that the date and time are given in Coordinated
  1.3537 -   Universal Time [TF.686-1]; if it is omitted, then the date and time
  1.3538 -   are specified in the server's local timezone.  Note that there is no
  1.3539 -   way of using the protocol specified in this document to establish the
  1.3540 -   server's local timezone.
  1.3541 -
  1.3542 -   Note that an empty list is a possible valid response and indicates
  1.3543 -   that there are no new newsgroups since that date-time.
  1.3544 -
  1.3545 -   Clients SHOULD make all queries using Coordinated Universal Time
  1.3546 -   (i.e., by including the "GMT" argument) when possible.
  1.3547 -
  1.3548 -7.3.3.  Examples
  1.3549 -
  1.3550 -   Example where there are new groups:
  1.3551 -
  1.3552 -      [C] NEWGROUPS 19990624 000000 GMT
  1.3553 -      [S] 231 list of new newsgroups follows
  1.3554 -      [S] alt.rfc-writers.recovery 4 1 y
  1.3555 -      [S] tx.natives.recovery 89 56 y
  1.3556 -      [S] .
  1.3557 -
  1.3558 -   Example where there are no new groups:
  1.3559 -
  1.3560 -      [C] NEWGROUPS 19990624 000000 GMT
  1.3561 -      [S] 231 list of new newsgroups follows
  1.3562 -      [S] .
  1.3563 -
  1.3564 -7.4.  NEWNEWS
  1.3565 -
  1.3566 -7.4.1.  Usage
  1.3567 -
  1.3568 -   Indicating capability: NEWNEWS
  1.3569 -
  1.3570 -   Syntax
  1.3571 -     NEWNEWS wildmat date time [GMT]
  1.3572 -
  1.3573 -   Responses
  1.3574 -     230    List of new articles follows (multi-line)
  1.3575 -
  1.3576 -   Parameters
  1.3577 -     wildmat    Newsgroups of interest
  1.3578 -     date       Date in yymmdd or yyyymmdd format
  1.3579 -     time       Time in hhmmss format
  1.3580 -
  1.3581 -
  1.3582 -
  1.3583 -
  1.3584 -Feather                     Standards Track                    [Page 64]
  1.3585 -
  1.3586 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3587 -
  1.3588 -
  1.3589 -7.4.2.  Description
  1.3590 -
  1.3591 -   This command returns a list of message-ids of articles posted or
  1.3592 -   received on the server, in the newsgroups whose names match the
  1.3593 -   wildmat, since the specified date and time.  One message-id is sent
  1.3594 -   on each line; the order of the response has no specific significance
  1.3595 -   and may vary from response to response in the same session.  A
  1.3596 -   message-id MAY appear more than once; if it does, it has the same
  1.3597 -   meaning as if it appeared only once.
  1.3598 -
  1.3599 -   Date and time are in the same format as the NEWGROUPS command (see
  1.3600 -   Section 7.3).
  1.3601 -
  1.3602 -   Note that an empty list is a possible valid response and indicates
  1.3603 -   that there is currently no new news in the relevant groups.
  1.3604 -
  1.3605 -   Clients SHOULD make all queries in Coordinated Universal Time (i.e.,
  1.3606 -   by using the "GMT" argument) when possible.
  1.3607 -
  1.3608 -7.4.3.  Examples
  1.3609 -
  1.3610 -   Example where there are new articles:
  1.3611 -
  1.3612 -      [C] NEWNEWS news.*,sci.* 19990624 000000 GMT
  1.3613 -      [S] 230 list of new articles by message-id follows
  1.3614 -      [S] <i.am.a.new.article@example.com>
  1.3615 -      [S] <i.am.another.new.article@example.com>
  1.3616 -      [S] .
  1.3617 -
  1.3618 -   Example where there are no new articles:
  1.3619 -
  1.3620 -      [C] NEWNEWS alt.* 19990624 000000 GMT
  1.3621 -      [S] 230 list of new articles by message-id follows
  1.3622 -      [S] .
  1.3623 -
  1.3624 -7.5.  Time
  1.3625 -
  1.3626 -   As described in Section 6, each article has an arrival timestamp.
  1.3627 -   Each newsgroup also has a creation timestamp.  These timestamps are
  1.3628 -   used by the NEWNEWS and NEWGROUP commands to construct their
  1.3629 -   responses.
  1.3630 -
  1.3631 -   Clients can ensure that they do not have gaps in lists of articles or
  1.3632 -   groups by using the DATE command in the following manner:
  1.3633 -
  1.3634 -   First session:
  1.3635 -      Issue DATE command and record result.
  1.3636 -      Issue NEWNEWS command using a previously chosen timestamp.
  1.3637 -
  1.3638 -
  1.3639 -
  1.3640 -Feather                     Standards Track                    [Page 65]
  1.3641 -
  1.3642 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3643 -
  1.3644 -
  1.3645 -   Subsequent sessions:
  1.3646 -      Issue DATE command and hold result in temporary storage.
  1.3647 -      Issue NEWNEWS command using timestamp saved from previous session.
  1.3648 -      Overwrite saved timestamp with that currently in temporary
  1.3649 -      storage.
  1.3650 -
  1.3651 -   In order to allow for minor errors, clients MAY want to adjust the
  1.3652 -   timestamp back by two or three minutes before using it in NEWNEWS.
  1.3653 -
  1.3654 -7.5.1.  Examples
  1.3655 -
  1.3656 -   First session:
  1.3657 -
  1.3658 -      [C] DATE
  1.3659 -      [S] 111 20010203112233
  1.3660 -      [C] NEWNEWS local.chat 20001231 235959 GMT
  1.3661 -      [S] 230 list follows
  1.3662 -      [S] <article.1@local.service>
  1.3663 -      [S] <article.2@local.service>
  1.3664 -      [S] <article.3@local.service>
  1.3665 -      [S] .
  1.3666 -
  1.3667 -   Second session (the client has subtracted 3 minutes from the
  1.3668 -   timestamp returned previously):
  1.3669 -
  1.3670 -      [C] DATE
  1.3671 -      [S] 111 20010204003344
  1.3672 -      [C] NEWNEWS local.chat 20010203 111933 GMT
  1.3673 -      [S] 230 list follows
  1.3674 -      [S] <article.3@local.service>
  1.3675 -      [S] <article.4@local.service>
  1.3676 -      [S] <article.5@local.service>
  1.3677 -      [S] .
  1.3678 -
  1.3679 -   Note how <article.3@local.service> arrived in the 3 minute gap and so
  1.3680 -   is listed in both responses.
  1.3681 -
  1.3682 -7.6.  The LIST Commands
  1.3683 -
  1.3684 -   The LIST family of commands all return information that is multi-line
  1.3685 -   and that can, in general, be expected not to change during the
  1.3686 -   session.  Often the information is related to newsgroups, in which
  1.3687 -   case the response has one line per newsgroup and a wildmat MAY be
  1.3688 -   provided to restrict the groups for which information is returned.
  1.3689 -
  1.3690 -   The set of available keywords (including those provided by
  1.3691 -   extensions) is given in the capability list with capability label
  1.3692 -   LIST.
  1.3693 -
  1.3694 -
  1.3695 -
  1.3696 -Feather                     Standards Track                    [Page 66]
  1.3697 -
  1.3698 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3699 -
  1.3700 -
  1.3701 -7.6.1.  LIST
  1.3702 -
  1.3703 -7.6.1.1.  Usage
  1.3704 -
  1.3705 -   Indicating capability: LIST
  1.3706 -
  1.3707 -   Syntax
  1.3708 -     LIST [keyword [wildmat|argument]]
  1.3709 -
  1.3710 -   Responses
  1.3711 -     215    Information follows (multi-line)
  1.3712 -
  1.3713 -   Parameters
  1.3714 -     keyword     Information requested [1]
  1.3715 -     argument    Specific to keyword
  1.3716 -     wildmat     Groups of interest
  1.3717 -
  1.3718 -   [1] If no keyword is provided, it defaults to ACTIVE.
  1.3719 -
  1.3720 -7.6.1.2.  Description
  1.3721 -
  1.3722 -   The LIST command allows the server to provide blocks of information
  1.3723 -   to the client.  This information may be global or may be related to
  1.3724 -   newsgroups; in the latter case, the information may be returned
  1.3725 -   either for all groups or only for those matching a wildmat.  Each
  1.3726 -   block of information is represented by a different keyword.  The
  1.3727 -   command returns the specific information identified by the keyword.
  1.3728 -
  1.3729 -   If the information is available, it is returned as a multi-line data
  1.3730 -   block following the 215 response code.  The format of the information
  1.3731 -   depends on the keyword.  The information MAY be affected by the
  1.3732 -   additional argument, but the format MUST NOT be.
  1.3733 -
  1.3734 -   If the information is based on newsgroups and the optional wildmat
  1.3735 -   argument is specified, the response is limited to only the groups (if
  1.3736 -   any) whose names match the wildmat and for which the information is
  1.3737 -   available.
  1.3738 -
  1.3739 -   Note that an empty list is a possible valid response; for a
  1.3740 -   newsgroup-based keyword, it indicates that there are no groups
  1.3741 -   meeting the above criteria.
  1.3742 -
  1.3743 -   If the keyword is not recognised, or if an argument is specified and
  1.3744 -   the keyword does not expect one, a 501 response code MUST BE
  1.3745 -   returned.  If the keyword is recognised but the server does not
  1.3746 -   maintain the information, a 503 response code MUST BE returned.
  1.3747 -
  1.3748 -
  1.3749 -
  1.3750 -
  1.3751 -
  1.3752 -Feather                     Standards Track                    [Page 67]
  1.3753 -
  1.3754 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3755 -
  1.3756 -
  1.3757 -   The LIST command MUST NOT change the visible state of the server in
  1.3758 -   any way; that is, the behaviour of subsequent commands MUST NOT be
  1.3759 -   affected by whether the LIST command was issued.  For example, it
  1.3760 -   MUST NOT make groups available that otherwise would not have been.
  1.3761 -
  1.3762 -7.6.1.3.  Examples
  1.3763 -
  1.3764 -   Example of LIST with the ACTIVE keyword:
  1.3765 -
  1.3766 -      [C] LIST ACTIVE
  1.3767 -      [S] 215 list of newsgroups follows
  1.3768 -      [S] misc.test 3002322 3000234 y
  1.3769 -      [S] comp.risks 442001 441099 m
  1.3770 -      [S] alt.rfc-writers.recovery 4 1 y
  1.3771 -      [S] tx.natives.recovery 89 56 y
  1.3772 -      [S] tx.natives.recovery.d 11 9 n
  1.3773 -      [S] .
  1.3774 -
  1.3775 -   Example of LIST with no keyword:
  1.3776 -
  1.3777 -      [C] LIST
  1.3778 -      [S] 215 list of newsgroups follows
  1.3779 -      [S] misc.test 3002322 3000234 y
  1.3780 -      [S] comp.risks 442001 441099 m
  1.3781 -      [S] alt.rfc-writers.recovery 4 1 y
  1.3782 -      [S] tx.natives.recovery 89 56 y
  1.3783 -      [S] tx.natives.recovery.d 11 9 n
  1.3784 -      [S] .
  1.3785 -
  1.3786 -   The output is identical to that of the previous example.
  1.3787 -
  1.3788 -   Example of LIST on a newsgroup-based keyword with and without
  1.3789 -   wildmat:
  1.3790 -
  1.3791 -      [C] LIST ACTIVE.TIMES
  1.3792 -      [S] 215 information follows
  1.3793 -      [S] misc.test 930445408 <creatme@isc.org>
  1.3794 -      [S] alt.rfc-writers.recovery 930562309 <m@example.com>
  1.3795 -      [S] tx.natives.recovery 930678923 <sob@academ.com>
  1.3796 -      [S] .
  1.3797 -      [C] LIST ACTIVE.TIMES tx.*
  1.3798 -      [S] 215 information follows
  1.3799 -      [S] tx.natives.recovery 930678923 <sob@academ.com>
  1.3800 -      [S] .
  1.3801 -
  1.3802 -
  1.3803 -
  1.3804 -
  1.3805 -
  1.3806 -
  1.3807 -
  1.3808 -Feather                     Standards Track                    [Page 68]
  1.3809 -
  1.3810 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3811 -
  1.3812 -
  1.3813 -   Example of LIST returning an error where the keyword is recognized
  1.3814 -   but the software does not maintain this information:
  1.3815 -
  1.3816 -      [C] CAPABILITIES
  1.3817 -      [S] 101 Capability list:
  1.3818 -      [S] VERSION 2
  1.3819 -      [S] READER
  1.3820 -      [S] LIST ACTIVE NEWSGROUPS ACTIVE.TIMES XTRA.DATA
  1.3821 -      [S] .
  1.3822 -      [C] LIST XTRA.DATA
  1.3823 -      [S] 503 Data item not stored
  1.3824 -
  1.3825 -   Example of LIST where the keyword is not recognised:
  1.3826 -
  1.3827 -      [C] CAPABILITIES
  1.3828 -      [S] 101 Capability list:
  1.3829 -      [S] VERSION 2
  1.3830 -      [S] READER
  1.3831 -      [S] LIST ACTIVE NEWSGROUPS ACTIVE.TIMES XTRA.DATA
  1.3832 -      [S] .
  1.3833 -      [C] LIST DISTRIB.PATS
  1.3834 -      [S] 501 Syntax Error
  1.3835 -
  1.3836 -7.6.2.  Standard LIST Keywords
  1.3837 -
  1.3838 -   This specification defines the following LIST keywords:
  1.3839 -
  1.3840 -   +--------------+---------------+------------------------------------+
  1.3841 -   | Keyword      | Definition    | Status                             |
  1.3842 -   +--------------+---------------+------------------------------------+
  1.3843 -   | ACTIVE       | Section 7.6.3 | Mandatory if the READER capability |
  1.3844 -   |              |               | is advertised                      |
  1.3845 -   |              |               |                                    |
  1.3846 -   | ACTIVE.TIMES | Section 7.6.4 | Optional                           |
  1.3847 -   |              |               |                                    |
  1.3848 -   | DISTRIB.PATS | Section 7.6.5 | Optional                           |
  1.3849 -   |              |               |                                    |
  1.3850 -   | HEADERS      | Section 8.6   | Mandatory if the HDR capability is |
  1.3851 -   |              |               | advertised                         |
  1.3852 -   |              |               |                                    |
  1.3853 -   | NEWSGROUPS   | Section 7.6.6 | Mandatory if the READER capability |
  1.3854 -   |              |               | is advertised                      |
  1.3855 -   |              |               |                                    |
  1.3856 -   | OVERVIEW.FMT | Section 8.4   | Mandatory if the OVER capability   |
  1.3857 -   |              |               | is advertised                      |
  1.3858 -   +--------------+---------------+------------------------------------+
  1.3859 -
  1.3860 -
  1.3861 -
  1.3862 -
  1.3863 -
  1.3864 -Feather                     Standards Track                    [Page 69]
  1.3865 -
  1.3866 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3867 -
  1.3868 -
  1.3869 -   Where one of these LIST keywords is supported by a server, it MUST
  1.3870 -   have the meaning given in the relevant sub-section.
  1.3871 -
  1.3872 -7.6.3.  LIST ACTIVE
  1.3873 -
  1.3874 -   This keyword MUST be supported by servers advertising the READER
  1.3875 -   capability.
  1.3876 -
  1.3877 -   LIST ACTIVE returns a list of valid newsgroups and associated
  1.3878 -   information.  If no wildmat is specified, the server MUST include
  1.3879 -   every group that the client is permitted to select with the GROUP
  1.3880 -   command (Section 6.1.1).  Each line of this list consists of four
  1.3881 -   fields separated from each other by one or more spaces:
  1.3882 -
  1.3883 -   o  The name of the newsgroup.
  1.3884 -   o  The reported high water mark for the group.
  1.3885 -   o  The reported low water mark for the group.
  1.3886 -   o  The current status of the group on this server.
  1.3887 -
  1.3888 -   The reported high and low water marks are as described in the GROUP
  1.3889 -   command (see Section 6.1.1), but note that they are in the opposite
  1.3890 -   order to the 211 response to that command.
  1.3891 -
  1.3892 -   The status field is typically one of the following:
  1.3893 -
  1.3894 -   "y" Posting is permitted.
  1.3895 -
  1.3896 -   "n" Posting is not permitted.
  1.3897 -
  1.3898 -   "m" Postings will be forwarded to the newsgroup moderator.
  1.3899 -
  1.3900 -   The server SHOULD use these values when these meanings are required
  1.3901 -   and MUST NOT use them with any other meaning.  Other values for the
  1.3902 -   status may exist; the definition of these other values and the
  1.3903 -   circumstances under which they are returned may be specified in an
  1.3904 -   extension or may be private to the server.  A client SHOULD treat an
  1.3905 -   unrecognized status as giving no information.
  1.3906 -
  1.3907 -   The status of a newsgroup only indicates how posts to that newsgroup
  1.3908 -   are normally processed and is not necessarily customised to the
  1.3909 -   specific client.  For example, if the current client is forbidden
  1.3910 -   from posting, then this will apply equally to groups with status "y".
  1.3911 -   Conversely, a client with special privileges (not defined by this
  1.3912 -   specification) might be able to post to a group with status "n".
  1.3913 -
  1.3914 -
  1.3915 -
  1.3916 -
  1.3917 -
  1.3918 -
  1.3919 -
  1.3920 -Feather                     Standards Track                    [Page 70]
  1.3921 -
  1.3922 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3923 -
  1.3924 -
  1.3925 -   For example:
  1.3926 -
  1.3927 -      [C] LIST ACTIVE
  1.3928 -      [S] 215 list of newsgroups follows
  1.3929 -      [S] misc.test 3002322 3000234 y
  1.3930 -      [S] comp.risks 442001 441099 m
  1.3931 -      [S] alt.rfc-writers.recovery 4 1 y
  1.3932 -      [S] tx.natives.recovery 89 56 y
  1.3933 -      [S] tx.natives.recovery.d 11 9 n
  1.3934 -      [S] .
  1.3935 -
  1.3936 -   or, on an implementation that includes leading zeroes:
  1.3937 -
  1.3938 -      [C] LIST ACTIVE
  1.3939 -      [S] 215 list of newsgroups follows
  1.3940 -      [S] misc.test 0003002322 0003000234 y
  1.3941 -      [S] comp.risks 0000442001 0000441099 m
  1.3942 -      [S] alt.rfc-writers.recovery 0000000004 0000000001 y
  1.3943 -      [S] tx.natives.recovery 0000000089 0000000056 y
  1.3944 -      [S] tx.natives.recovery.d 0000000011 0000000009 n
  1.3945 -      [S] .
  1.3946 -
  1.3947 -   The information is newsgroup based, and a wildmat MAY be specified,
  1.3948 -   in which case the response is limited to only the groups (if any)
  1.3949 -   whose names match the wildmat.  For example:
  1.3950 -
  1.3951 -      [C] LIST ACTIVE *.recovery
  1.3952 -      [S] 215 list of newsgroups follows
  1.3953 -      [S] alt.rfc-writers.recovery 4 1 y
  1.3954 -      [S] tx.natives.recovery 89 56 y
  1.3955 -      [S] .
  1.3956 -
  1.3957 -7.6.4.  LIST ACTIVE.TIMES
  1.3958 -
  1.3959 -   This keyword is optional.
  1.3960 -
  1.3961 -   The active.times list is maintained by some NNTP servers to contain
  1.3962 -   information about who created a particular newsgroup and when.  Each
  1.3963 -   line of this list consists of three fields separated from each other
  1.3964 -   by one or more spaces.  The first field is the name of the newsgroup.
  1.3965 -   The second is the time when this group was created on this news
  1.3966 -   server, measured in seconds since the start of January 1, 1970.  The
  1.3967 -   third is plain text intended to describe the entity that created the
  1.3968 -   newsgroup; it is often a mailbox as defined in RFC 2822 [RFC2822].
  1.3969 -   For example:
  1.3970 -
  1.3971 -
  1.3972 -
  1.3973 -
  1.3974 -
  1.3975 -
  1.3976 -Feather                     Standards Track                    [Page 71]
  1.3977 -
  1.3978 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.3979 -
  1.3980 -
  1.3981 -      [C] LIST ACTIVE.TIMES
  1.3982 -      [S] 215 information follows
  1.3983 -      [S] misc.test 930445408 <creatme@isc.org>
  1.3984 -      [S] alt.rfc-writers.recovery 930562309 <m@example.com>
  1.3985 -      [S] tx.natives.recovery 930678923 <sob@academ.com>
  1.3986 -      [S] .
  1.3987 -
  1.3988 -   The list MAY omit newsgroups for which the information is unavailable
  1.3989 -   and MAY include groups not available on the server; in particular, it
  1.3990 -   MAY omit all groups created before the date and time of the oldest
  1.3991 -   entry.  The client MUST NOT assume that the list is complete or that
  1.3992 -   it matches the list returned by the LIST ACTIVE command
  1.3993 -   (Section 7.6.3).  The NEWGROUPS command (Section 7.3) may provide a
  1.3994 -   better way to access this information, and the results of the two
  1.3995 -   commands SHOULD be consistent except that, if the latter is invoked
  1.3996 -   with a date and time earlier than the oldest entry in active.times
  1.3997 -   list, its result may include extra groups.
  1.3998 -
  1.3999 -   The information is newsgroup based, and a wildmat MAY be specified,
  1.4000 -   in which case the response is limited to only the groups (if any)
  1.4001 -   whose names match the wildmat.
  1.4002 -
  1.4003 -7.6.5.  LIST DISTRIB.PATS
  1.4004 -
  1.4005 -   This keyword is optional.
  1.4006 -
  1.4007 -   The distrib.pats list is maintained by some NNTP servers to assist
  1.4008 -   clients to choose a value for the content of the Distribution header
  1.4009 -   of a news article being posted.  Each line of this list consists of
  1.4010 -   three fields separated from each other by a colon (":").  The first
  1.4011 -   field is a weight, the second field is a wildmat (which may be a
  1.4012 -   simple newsgroup name), and the third field is a value for the
  1.4013 -   Distribution header content.  For example:
  1.4014 -
  1.4015 -      [C] LIST DISTRIB.PATS
  1.4016 -      [S] 215 information follows
  1.4017 -      [S] 10:local.*:local
  1.4018 -      [S] 5:*:world
  1.4019 -      [S] 20:local.here.*:thissite
  1.4020 -      [S] .
  1.4021 -
  1.4022 -   The client MAY use this information to construct an appropriate
  1.4023 -   Distribution header given the name of a newsgroup.  To do so, it
  1.4024 -   should determine the lines whose second field matches the newsgroup
  1.4025 -   name, select from among them the line with the highest weight (with 0
  1.4026 -   being the lowest), and use the value of the third field to construct
  1.4027 -   the Distribution header.
  1.4028 -
  1.4029 -
  1.4030 -
  1.4031 -
  1.4032 -Feather                     Standards Track                    [Page 72]
  1.4033 -
  1.4034 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4035 -
  1.4036 -
  1.4037 -   The information is not newsgroup based, and an argument MUST NOT be
  1.4038 -   specified.
  1.4039 -
  1.4040 -7.6.6.  LIST NEWSGROUPS
  1.4041 -
  1.4042 -   This keyword MUST be supported by servers advertising the READER
  1.4043 -   capability.
  1.4044 -
  1.4045 -   The newsgroups list is maintained by NNTP servers to contain the name
  1.4046 -   of each newsgroup that is available on the server and a short
  1.4047 -   description about the purpose of the group.  Each line of this list
  1.4048 -   consists of two fields separated from each other by one or more space
  1.4049 -   or TAB characters (the usual practice is a single TAB).  The first
  1.4050 -   field is the name of the newsgroup, and the second is a short
  1.4051 -   description of the group.  For example:
  1.4052 -
  1.4053 -      [C] LIST NEWSGROUPS
  1.4054 -      [S] 215 information follows
  1.4055 -      [S] misc.test General Usenet testing
  1.4056 -      [S] alt.rfc-writers.recovery RFC Writers Recovery
  1.4057 -      [S] tx.natives.recovery Texas Natives Recovery
  1.4058 -      [S] .
  1.4059 -
  1.4060 -   The list MAY omit newsgroups for which the information is unavailable
  1.4061 -   and MAY include groups not available on the server.  The client MUST
  1.4062 -   NOT assume that the list is complete or that it matches the list
  1.4063 -   returned by LIST ACTIVE.
  1.4064 -
  1.4065 -   The description SHOULD be in UTF-8.  However, servers often obtain
  1.4066 -   the information from external sources.  These sources may have used
  1.4067 -   different encodings (ones that use octets in the range 128 to 255 in
  1.4068 -   some other manner) and, in that case, the server MAY pass it on
  1.4069 -   unchanged.  Therefore, clients MUST be prepared to receive such
  1.4070 -   descriptions.
  1.4071 -
  1.4072 -   The information is newsgroup based, and a wildmat MAY be specified,
  1.4073 -   in which case the response is limited to only the groups (if any)
  1.4074 -   whose names match the wildmat.
  1.4075 -
  1.4076 -8.  Article Field Access Commands
  1.4077 -
  1.4078 -   This section lists commands that may be used to access specific
  1.4079 -   article fields; that is, headers of articles and metadata about
  1.4080 -   articles.  These commands typically fetch data from an "overview
  1.4081 -   database", which is a database of headers extracted from incoming
  1.4082 -   articles plus metadata determined as the article arrives.  Only
  1.4083 -   certain fields are included in the database.
  1.4084 -
  1.4085 -
  1.4086 -
  1.4087 -
  1.4088 -Feather                     Standards Track                    [Page 73]
  1.4089 -
  1.4090 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4091 -
  1.4092 -
  1.4093 -   This section is based on the Overview/NOV database [ROBE1995]
  1.4094 -   developed by Geoff Collyer.
  1.4095 -
  1.4096 -8.1.  Article Metadata
  1.4097 -
  1.4098 -   Article "metadata" is data about articles that does not occur within
  1.4099 -   the article itself.  Each metadata item has a name that MUST begin
  1.4100 -   with a colon (and that MUST NOT contain a colon elsewhere within it).
  1.4101 -   As with header names, metadata item names are not case sensitive.
  1.4102 -
  1.4103 -   When generating a metadata item, the server MUST compute it for
  1.4104 -   itself and MUST NOT trust any related value provided in the article.
  1.4105 -   (In particular, a Lines or Bytes header in the article MUST NOT be
  1.4106 -   assumed to specify the correct number of lines or bytes in the
  1.4107 -   article.)  If the server has access to several non-identical copies
  1.4108 -   of an article, the value returned MUST be correct for any copy of
  1.4109 -   that article retrieved during the same session.
  1.4110 -
  1.4111 -   This specification defines two metadata items: ":bytes" and ":lines".
  1.4112 -   Other metadata items may be defined by extensions.  The names of
  1.4113 -   metadata items defined by registered extensions MUST NOT begin with
  1.4114 -   ":x-".  To avoid the risk of a clash with a future registered
  1.4115 -   extension, the names of metadata items defined by private extensions
  1.4116 -   SHOULD begin with ":x-".
  1.4117 -
  1.4118 -8.1.1.  The :bytes Metadata Item
  1.4119 -
  1.4120 -   The :bytes metadata item for an article is a decimal integer.  It
  1.4121 -   SHOULD equal the number of octets in the entire article: headers,
  1.4122 -   body, and separating empty line (counting a CRLF pair as two octets,
  1.4123 -   and excluding both the "." CRLF terminating the response and any "."
  1.4124 -   added for "dot-stuffing" purposes).
  1.4125 -
  1.4126 -   Note to client implementers: some existing servers return a value
  1.4127 -   different from that above.  The commonest reasons for this are as
  1.4128 -   follows:
  1.4129 -
  1.4130 -   o  Counting a CRLF pair as one octet.
  1.4131 -
  1.4132 -   o  Including the "." character used for dot-stuffing in the number.
  1.4133 -
  1.4134 -   o  Including the terminating "." CRLF in the number.
  1.4135 -
  1.4136 -   o  Using one copy of an article for counting the octets but then
  1.4137 -      returning another one that differs in some (permitted) manner.
  1.4138 -
  1.4139 -   Implementations should be prepared for such variation and MUST NOT
  1.4140 -   rely on the value being accurate.
  1.4141 -
  1.4142 -
  1.4143 -
  1.4144 -Feather                     Standards Track                    [Page 74]
  1.4145 -
  1.4146 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4147 -
  1.4148 -
  1.4149 -8.1.2.  The :lines Metadata Item
  1.4150 -
  1.4151 -   The :lines metadata item for an article is a decimal integer.  It
  1.4152 -   MUST equal the number of lines in the article body (excluding the
  1.4153 -   empty line separating headers and body).  Equivalently, it is two
  1.4154 -   less than the number of CRLF pairs that the BODY command would return
  1.4155 -   for that article (the extra two are those following the response code
  1.4156 -   and the termination octet).
  1.4157 -
  1.4158 -8.2.  Database Consistency
  1.4159 -
  1.4160 -   The information stored in the overview database may change over time.
  1.4161 -   If the database records the content or absence of a given field (that
  1.4162 -   is, a header or metadata item) for all articles, it is said to be
  1.4163 -   "consistent" for that field.  If it records the content of a header
  1.4164 -   for some articles but not for others that nevertheless included that
  1.4165 -   header, or if it records a metadata item for some articles but not
  1.4166 -   for others to which that item applies, it is said to be
  1.4167 -   "inconsistent" for that field.
  1.4168 -
  1.4169 -   The LIST OVERVIEW.FMT command SHOULD list all the fields for which
  1.4170 -   the database is consistent at that moment.  It MAY omit such fields
  1.4171 -   (for example, if it is not known whether the database is consistent
  1.4172 -   or inconsistent).  It MUST NOT include fields for which the database
  1.4173 -   is inconsistent or that are not stored in the database.  Therefore,
  1.4174 -   if a header appears in the LIST OVERVIEW.FMT output but not in the
  1.4175 -   OVER output for a given article, that header does not appear in the
  1.4176 -   article (similarly for metadata items).
  1.4177 -
  1.4178 -   These rules assume that the fields being stored in the database
  1.4179 -   remain constant for long periods of time, and therefore the database
  1.4180 -   will be consistent.  When the set of fields to be stored is changed,
  1.4181 -   it will be inconsistent until either the database is rebuilt or the
  1.4182 -   only articles remaining are those received since the change.
  1.4183 -   Therefore, the output from LIST OVERVIEW.FMT needs to be altered
  1.4184 -   twice.  Firstly, before any fields stop being stored they MUST be
  1.4185 -   removed from the output; then, when the database is once more known
  1.4186 -   to be consistent, the new fields SHOULD be added to the output.
  1.4187 -
  1.4188 -   If the HDR command uses the overview database rather than taking
  1.4189 -   information directly from the articles, the same issues of
  1.4190 -   consistency and inconsistency apply, and the LIST HEADERS command
  1.4191 -   SHOULD take the same approach as the LIST OVERVIEW.FMT command in
  1.4192 -   resolving them.
  1.4193 -
  1.4194 -
  1.4195 -
  1.4196 -
  1.4197 -
  1.4198 -
  1.4199 -
  1.4200 -Feather                     Standards Track                    [Page 75]
  1.4201 -
  1.4202 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4203 -
  1.4204 -
  1.4205 -8.3.  OVER
  1.4206 -
  1.4207 -8.3.1.  Usage
  1.4208 -
  1.4209 -   Indicating capability: OVER
  1.4210 -
  1.4211 -   Syntax
  1.4212 -     OVER message-id
  1.4213 -     OVER range
  1.4214 -     OVER
  1.4215 -
  1.4216 -   Responses
  1.4217 -
  1.4218 -   First form (message-id specified)
  1.4219 -     224    Overview information follows (multi-line)
  1.4220 -     430    No article with that message-id
  1.4221 -
  1.4222 -   Second form (range specified)
  1.4223 -     224    Overview information follows (multi-line)
  1.4224 -     412    No newsgroup selected
  1.4225 -     423    No articles in that range
  1.4226 -
  1.4227 -   Third form (current article number used)
  1.4228 -     224    Overview information follows (multi-line)
  1.4229 -     412    No newsgroup selected
  1.4230 -     420    Current article number is invalid
  1.4231 -
  1.4232 -   Parameters
  1.4233 -     range         Number(s) of articles
  1.4234 -     message-id    Message-id of article
  1.4235 -
  1.4236 -8.3.2.  Description
  1.4237 -
  1.4238 -   The OVER command returns the contents of all the fields in the
  1.4239 -   database for an article specified by message-id, or from a specified
  1.4240 -   article or range of articles in the currently selected newsgroup.
  1.4241 -
  1.4242 -   The message-id argument indicates a specific article.  The range
  1.4243 -   argument may be any of the following:
  1.4244 -
  1.4245 -   o  An article number.
  1.4246 -
  1.4247 -   o  An article number followed by a dash to indicate all following.
  1.4248 -
  1.4249 -   o  An article number followed by a dash followed by another article
  1.4250 -      number.
  1.4251 -
  1.4252 -   If neither is specified, the current article number is used.
  1.4253 -
  1.4254 -
  1.4255 -
  1.4256 -Feather                     Standards Track                    [Page 76]
  1.4257 -
  1.4258 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4259 -
  1.4260 -
  1.4261 -   Support for the first (message-id) form is optional.  If it is
  1.4262 -   supported, the OVER capability line MUST include the argument
  1.4263 -   "MSGID".  Otherwise, the capability line MUST NOT include this
  1.4264 -   argument, and the OVER command MUST return the generic response code
  1.4265 -   503 when this form is used.
  1.4266 -
  1.4267 -   If the information is available, it is returned as a multi-line data
  1.4268 -   block following the 224 response code and contains one line per
  1.4269 -   article, sorted in numerical order of article number.  (Note that
  1.4270 -   unless the argument is a range including a dash, there will be
  1.4271 -   exactly one line in the data block.)  Each line consists of a number
  1.4272 -   of fields separated by a TAB.  A field may be empty (in which case
  1.4273 -   there will be two adjacent TABs), and a sequence of trailing TABs may
  1.4274 -   be omitted.
  1.4275 -
  1.4276 -   The first 8 fields MUST be the following, in order:
  1.4277 -
  1.4278 -      "0" or article number (see below)
  1.4279 -      Subject header content
  1.4280 -      From header content
  1.4281 -      Date header content
  1.4282 -      Message-ID header content
  1.4283 -      References header content
  1.4284 -      :bytes metadata item
  1.4285 -      :lines metadata item
  1.4286 -
  1.4287 -   If the article is specified by message-id (the first form of the
  1.4288 -   command), the article number MUST be replaced with zero, except that
  1.4289 -   if there is a currently selected newsgroup and the article is present
  1.4290 -   in that group, the server MAY use the article's number in that group.
  1.4291 -   (See the ARTICLE command (Section 6.2.1) and STAT examples
  1.4292 -   (Section 6.2.4.3) for more details.)  In the other two forms of the
  1.4293 -   command, the article number MUST be returned.
  1.4294 -
  1.4295 -   Any subsequent fields are the contents of the other headers and
  1.4296 -   metadata held in the database.
  1.4297 -
  1.4298 -   For the five mandatory headers, the content of each field MUST be
  1.4299 -   based on the content of the header (that is, with the header name and
  1.4300 -   following colon and space removed).  If the article does not contain
  1.4301 -   that header, or if the content is empty, the field MUST be empty.
  1.4302 -   For the two mandatory metadata items, the content of the field MUST
  1.4303 -   be just the value, with no other text.
  1.4304 -
  1.4305 -   For all subsequent fields that contain headers, the content MUST be
  1.4306 -   the entire header line other than the trailing CRLF.  For all
  1.4307 -   subsequent fields that contain metadata, the field consists of the
  1.4308 -   metadata name, a single space, and then the value.
  1.4309 -
  1.4310 -
  1.4311 -
  1.4312 -Feather                     Standards Track                    [Page 77]
  1.4313 -
  1.4314 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4315 -
  1.4316 -
  1.4317 -   For all fields, the value is processed by first removing all CRLF
  1.4318 -   pairs (that is, undoing any folding and removing the terminating
  1.4319 -   CRLF) and then replacing each TAB with a single space.  If there is
  1.4320 -   no such header in the article, no such metadata item, or no header or
  1.4321 -   item stored in the database for that article, the corresponding field
  1.4322 -   MUST be empty.
  1.4323 -
  1.4324 -   Note that, after unfolding, the characters NUL, LF, and CR cannot
  1.4325 -   occur in the header of an article offered by a conformant server.
  1.4326 -   Nevertheless, servers SHOULD check for these characters and replace
  1.4327 -   each one by a single space (so that, for example, CR LF LF TAB will
  1.4328 -   become two spaces, since the CR and first LF will be removed by the
  1.4329 -   unfolding process).  This will encourage robustness in the face of
  1.4330 -   non-conforming data; it is also possible that future versions of this
  1.4331 -   specification could permit these characters to appear in articles.
  1.4332 -
  1.4333 -   The server SHOULD NOT produce output for articles that no longer
  1.4334 -   exist.
  1.4335 -
  1.4336 -   If the argument is a message-id and no such article exists, a 430
  1.4337 -   response MUST be returned.  If the argument is a range or is omitted
  1.4338 -   and the currently selected newsgroup is invalid, a 412 response MUST
  1.4339 -   be returned.  If the argument is a range and no articles in that
  1.4340 -   number range exist in the currently selected newsgroup, including the
  1.4341 -   case where the second number is less than the first one, a 423
  1.4342 -   response MUST be returned.  If the argument is omitted and the
  1.4343 -   current article number is invalid, a 420 response MUST be returned.
  1.4344 -
  1.4345 -8.3.3.  Examples
  1.4346 -
  1.4347 -   In the first four examples, TAB has been replaced by vertical bar and
  1.4348 -   some lines have been folded for readability.
  1.4349 -
  1.4350 -   Example of a successful retrieval of overview information for an
  1.4351 -   article (explicitly not using an article number):
  1.4352 -
  1.4353 -      [C] GROUP misc.test
  1.4354 -      [S] 211 1234 3000234 3002322 misc.test
  1.4355 -      [C] OVER
  1.4356 -      [S] 224 Overview information follows
  1.4357 -      [S] 3000234|I am just a test article|"Demo User"
  1.4358 -          <nobody@example.com>|6 Oct 1998 04:38:40 -0500|
  1.4359 -          <45223423@example.com>|<45454@example.net>|1234|
  1.4360 -          17|Xref: news.example.com misc.test:3000363
  1.4361 -      [S] .
  1.4362 -
  1.4363 -
  1.4364 -
  1.4365 -
  1.4366 -
  1.4367 -
  1.4368 -Feather                     Standards Track                    [Page 78]
  1.4369 -
  1.4370 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4371 -
  1.4372 -
  1.4373 -   Example of a successful retrieval of overview information for an
  1.4374 -   article by message-id:
  1.4375 -
  1.4376 -      [C] CAPABILITIES
  1.4377 -      [S] 101 Capability list:
  1.4378 -      [S] VERSION 2
  1.4379 -      [S] READER
  1.4380 -      [S] OVER MSGID
  1.4381 -      [S] LIST ACTIVE NEWSGROUPS OVERVIEW.FMT
  1.4382 -      [S] .
  1.4383 -      [C] OVER <45223423@example.com>
  1.4384 -      [S] 224 Overview information follows
  1.4385 -      [S] 0|I am just a test article|"Demo User"
  1.4386 -          <nobody@example.com>|6 Oct 1998 04:38:40 -0500|
  1.4387 -          <45223423@example.com>|<45454@example.net>|1234|
  1.4388 -          17|Xref: news.example.com misc.test:3000363
  1.4389 -      [S] .
  1.4390 -
  1.4391 -   Note that the article number has been replaced by "0".
  1.4392 -
  1.4393 -   Example of the same commands on a system that does not implement
  1.4394 -   retrieval by message-id:
  1.4395 -
  1.4396 -      [C] CAPABILITIES
  1.4397 -      [S] 101 Capability list:
  1.4398 -      [S] VERSION 2
  1.4399 -      [S] READER
  1.4400 -      [S] OVER
  1.4401 -      [S] LIST ACTIVE NEWSGROUPS OVERVIEW.FMT
  1.4402 -      [S] .
  1.4403 -      [C] OVER <45223423@example.com>
  1.4404 -      [S] 503 Overview by message-id unsupported
  1.4405 -
  1.4406 -
  1.4407 -
  1.4408 -
  1.4409 -
  1.4410 -
  1.4411 -
  1.4412 -
  1.4413 -
  1.4414 -
  1.4415 -
  1.4416 -
  1.4417 -
  1.4418 -
  1.4419 -
  1.4420 -
  1.4421 -
  1.4422 -
  1.4423 -
  1.4424 -Feather                     Standards Track                    [Page 79]
  1.4425 -
  1.4426 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4427 -
  1.4428 -
  1.4429 -   Example of a successful retrieval of overview information for a range
  1.4430 -   of articles:
  1.4431 -
  1.4432 -      [C] GROUP misc.test
  1.4433 -      [S] 211 1234 3000234 3002322 misc.test
  1.4434 -      [C] OVER 3000234-3000240
  1.4435 -      [S] 224 Overview information follows
  1.4436 -      [S] 3000234|I am just a test article|"Demo User"
  1.4437 -          <nobody@example.com>|6 Oct 1998 04:38:40 -0500|
  1.4438 -          <45223423@example.com>|<45454@example.net>|1234|
  1.4439 -          17|Xref: news.example.com misc.test:3000363
  1.4440 -      [S] 3000235|Another test article|nobody@nowhere.to
  1.4441 -          (Demo User)|6 Oct 1998 04:38:45 -0500|<45223425@to.to>||
  1.4442 -          4818|37||Distribution: fi
  1.4443 -      [S] 3000238|Re: I am just a test article|somebody@elsewhere.to|
  1.4444 -          7 Oct 1998 11:38:40 +1200|<kfwer3v@elsewhere.to>|
  1.4445 -          <45223423@to.to>|9234|51
  1.4446 -      [S] .
  1.4447 -
  1.4448 -   Note the missing "References" and Xref headers in the second line,
  1.4449 -   the missing trailing fields in the first and last lines, and that
  1.4450 -   there are only results for those articles that still exist.
  1.4451 -
  1.4452 -   Example of an unsuccessful retrieval of overview information on an
  1.4453 -   article by number:
  1.4454 -
  1.4455 -      [C] GROUP misc.test
  1.4456 -      [S] 211 1234 3000234 3002322 misc.test
  1.4457 -      [C] OVER 300256
  1.4458 -      [S] 423 No such article in this group
  1.4459 -
  1.4460 -   Example of an invalid range:
  1.4461 -
  1.4462 -      [C] GROUP misc.test
  1.4463 -      [S] 211 1234 3000234 3002322 misc.test
  1.4464 -      [C] OVER 3000444-3000222
  1.4465 -      [S] 423 Empty range
  1.4466 -
  1.4467 -   Example of an unsuccessful retrieval of overview information by
  1.4468 -   number because no newsgroup was selected first:
  1.4469 -
  1.4470 -      [Assumes currently selected newsgroup is invalid.]
  1.4471 -      [C] OVER
  1.4472 -      [S] 412 No newsgroup selected
  1.4473 -
  1.4474 -
  1.4475 -
  1.4476 -
  1.4477 -
  1.4478 -
  1.4479 -
  1.4480 -Feather                     Standards Track                    [Page 80]
  1.4481 -
  1.4482 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4483 -
  1.4484 -
  1.4485 -   Example of an attempt to retrieve information when the currently
  1.4486 -   selected newsgroup is empty:
  1.4487 -
  1.4488 -      [C] GROUP example.empty.newsgroup
  1.4489 -      [S] 211 0 0 0 example.empty.newsgroup
  1.4490 -      [C] OVER
  1.4491 -      [S] 420 No current article selected
  1.4492 -
  1.4493 -8.4.  LIST OVERVIEW.FMT
  1.4494 -
  1.4495 -8.4.1.  Usage
  1.4496 -
  1.4497 -   Indicating capability: OVER
  1.4498 -
  1.4499 -   Syntax
  1.4500 -     LIST OVERVIEW.FMT
  1.4501 -
  1.4502 -   Responses
  1.4503 -     215    Information follows (multi-line)
  1.4504 -
  1.4505 -8.4.2.  Description
  1.4506 -
  1.4507 -   See Section 7.6.1 for general requirements of the LIST command.
  1.4508 -
  1.4509 -   The LIST OVERVIEW.FMT command returns a description of the fields in
  1.4510 -   the database for which it is consistent (as described above).  The
  1.4511 -   information is returned as a multi-line data block following the 215
  1.4512 -   response code.  The information contains one line per field in the
  1.4513 -   order in which they are returned by the OVER command; the first 7
  1.4514 -   lines MUST (except for the case of letters) be exactly as follows:
  1.4515 -
  1.4516 -       Subject:
  1.4517 -       From:
  1.4518 -       Date:
  1.4519 -       Message-ID:
  1.4520 -       References:
  1.4521 -       :bytes
  1.4522 -       :lines
  1.4523 -
  1.4524 -   For compatibility with existing implementations, the last two lines
  1.4525 -   MAY instead be:
  1.4526 -
  1.4527 -       Bytes:
  1.4528 -       Lines:
  1.4529 -
  1.4530 -   even though they refer to metadata, not headers.
  1.4531 -
  1.4532 -
  1.4533 -
  1.4534 -
  1.4535 -
  1.4536 -Feather                     Standards Track                    [Page 81]
  1.4537 -
  1.4538 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4539 -
  1.4540 -
  1.4541 -   All subsequent lines MUST consist of either a header name followed by
  1.4542 -   ":full", or the name of a piece of metadata.
  1.4543 -
  1.4544 -   There are no leading or trailing spaces in the output.
  1.4545 -
  1.4546 -   Note that the 7 fixed lines describe the 2nd to 8th fields of the
  1.4547 -   OVER output.  The "full" suffix (which may use either uppercase,
  1.4548 -   lowercase, or a mix) is a reminder that the corresponding fields
  1.4549 -   include the header name.
  1.4550 -
  1.4551 -   This command MAY generate different results if it is used more than
  1.4552 -   once in a session.
  1.4553 -
  1.4554 -   If the OVER command is not implemented, the meaning of the output
  1.4555 -   from this command is not specified, but it must still meet the above
  1.4556 -   syntactic requirements.
  1.4557 -
  1.4558 -8.4.3.  Examples
  1.4559 -
  1.4560 -   Example of LIST OVERVIEW.FMT output corresponding to the example OVER
  1.4561 -   output above, in the preferred format:
  1.4562 -
  1.4563 -      [C] LIST OVERVIEW.FMT
  1.4564 -      [S] 215 Order of fields in overview database.
  1.4565 -      [S] Subject:
  1.4566 -      [S] From:
  1.4567 -      [S] Date:
  1.4568 -      [S] Message-ID:
  1.4569 -      [S] References:
  1.4570 -      [S] :bytes
  1.4571 -      [S] :lines
  1.4572 -      [S] Xref:full
  1.4573 -      [S] Distribution:full
  1.4574 -      [S] .
  1.4575 -
  1.4576 -
  1.4577 -
  1.4578 -
  1.4579 -
  1.4580 -
  1.4581 -
  1.4582 -
  1.4583 -
  1.4584 -
  1.4585 -
  1.4586 -
  1.4587 -
  1.4588 -
  1.4589 -
  1.4590 -
  1.4591 -
  1.4592 -Feather                     Standards Track                    [Page 82]
  1.4593 -
  1.4594 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4595 -
  1.4596 -
  1.4597 -   Example of LIST OVERVIEW.FMT output corresponding to the example OVER
  1.4598 -   output above, in the alternative format:
  1.4599 -
  1.4600 -      [C] LIST OVERVIEW.FMT
  1.4601 -      [S] 215 Order of fields in overview database.
  1.4602 -      [S] Subject:
  1.4603 -      [S] From:
  1.4604 -      [S] Date:
  1.4605 -      [S] Message-ID:
  1.4606 -      [S] References:
  1.4607 -      [S] Bytes:
  1.4608 -      [S] Lines:
  1.4609 -      [S] Xref:FULL
  1.4610 -      [S] Distribution:FULL
  1.4611 -      [S] .
  1.4612 -
  1.4613 -8.5.  HDR
  1.4614 -
  1.4615 -8.5.1.  Usage
  1.4616 -
  1.4617 -   Indicating capability: HDR
  1.4618 -
  1.4619 -   Syntax
  1.4620 -     HDR field message-id
  1.4621 -     HDR field range
  1.4622 -     HDR field
  1.4623 -
  1.4624 -   Responses
  1.4625 -
  1.4626 -   First form (message-id specified)
  1.4627 -     225    Headers follow (multi-line)
  1.4628 -     430    No article with that message-id
  1.4629 -
  1.4630 -   Second form (range specified)
  1.4631 -     225    Headers follow (multi-line)
  1.4632 -     412    No newsgroup selected
  1.4633 -     423    No articles in that range
  1.4634 -
  1.4635 -   Third form (current article number used)
  1.4636 -     225    Headers follow (multi-line)
  1.4637 -     412    No newsgroup selected
  1.4638 -     420    Current article number is invalid
  1.4639 -
  1.4640 -   Parameters
  1.4641 -     field         Name of field
  1.4642 -     range         Number(s) of articles
  1.4643 -     message-id    Message-id of article
  1.4644 -
  1.4645 -
  1.4646 -
  1.4647 -
  1.4648 -Feather                     Standards Track                    [Page 83]
  1.4649 -
  1.4650 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4651 -
  1.4652 -
  1.4653 -8.5.2.  Description
  1.4654 -
  1.4655 -   The HDR command provides access to specific fields from an article
  1.4656 -   specified by message-id, or from a specified article or range of
  1.4657 -   articles in the currently selected newsgroup.  It MAY take the
  1.4658 -   information directly from the articles or from the overview database.
  1.4659 -   In the case of headers, an implementation MAY restrict the use of
  1.4660 -   this command to a specific list of headers or MAY allow it to be used
  1.4661 -   with any header; it may behave differently when it is used with a
  1.4662 -   message-id argument and when it is used with a range or no argument.
  1.4663 -
  1.4664 -   The required field argument is the name of a header with the colon
  1.4665 -   omitted (e.g., "subject") or the name of a metadata item including
  1.4666 -   the leading colon (e.g., ":bytes"), and is case insensitive.
  1.4667 -
  1.4668 -   The message-id argument indicates a specific article.  The range
  1.4669 -   argument may be any of the following:
  1.4670 -
  1.4671 -   o  An article number.
  1.4672 -
  1.4673 -   o  An article number followed by a dash to indicate all following.
  1.4674 -
  1.4675 -   o  An article number followed by a dash followed by another article
  1.4676 -      number.
  1.4677 -
  1.4678 -   If neither is specified, the current article number is used.
  1.4679 -
  1.4680 -   If the information is available, it is returned as a multi-line data
  1.4681 -   block following the 225 response code and contains one line for each
  1.4682 -   article in the range that exists.  (Note that unless the argument is
  1.4683 -   a range including a dash, there will be exactly one line in the data
  1.4684 -   block.)  The line consists of the article number, a space, and then
  1.4685 -   the contents of the field.  In the case of a header, the header name,
  1.4686 -   the colon, and the first space after the colon are all omitted.
  1.4687 -
  1.4688 -   If the article is specified by message-id (the first form of the
  1.4689 -   command), the article number MUST be replaced with zero, except that
  1.4690 -   if there is a currently selected newsgroup and the article is present
  1.4691 -   in that group, the server MAY use the article's number in that group.
  1.4692 -   (See the ARTICLE command (Section 6.2.1) and STAT examples
  1.4693 -   (Section 6.2.4.3) for more details.)  In the other two forms of the
  1.4694 -   command, the article number MUST be returned.
  1.4695 -
  1.4696 -   Header contents are modified as follows: all CRLF pairs are removed,
  1.4697 -   and then each TAB is replaced with a single space.  (Note that this
  1.4698 -   is the same transformation as is performed by the OVER command
  1.4699 -   (Section 8.3.2), and the same comment concerning NUL, CR, and LF
  1.4700 -   applies.)
  1.4701 -
  1.4702 -
  1.4703 -
  1.4704 -Feather                     Standards Track                    [Page 84]
  1.4705 -
  1.4706 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4707 -
  1.4708 -
  1.4709 -   Note the distinction between headers and metadata appearing to have
  1.4710 -   the same meaning.  Headers are always taken unchanged from the
  1.4711 -   article; metadata are always calculated.  For example, a request for
  1.4712 -   "Lines" returns the contents of the "Lines" header of the specified
  1.4713 -   articles, if any, no matter whether they accurately state the number
  1.4714 -   of lines, while a request for ":lines" returns the line count
  1.4715 -   metadata, which is always the actual number of lines irrespective of
  1.4716 -   what any header may state.
  1.4717 -
  1.4718 -   If the requested header is not present in the article, or if it is
  1.4719 -   present but empty, a line for that article is included in the output,
  1.4720 -   but the header content portion of the line is empty (the space after
  1.4721 -   the article number MAY be retained or omitted).  If the header occurs
  1.4722 -   in a given article more than once, only the content of the first
  1.4723 -   occurrence is returned by HDR.  If any article number in the provided
  1.4724 -   range does not exist in the group, no line for that article number is
  1.4725 -   included in the output.
  1.4726 -
  1.4727 -   If the second argument is a message-id and no such article exists, a
  1.4728 -   430 response MUST be returned.  If the second argument is a range or
  1.4729 -   is omitted and the currently selected newsgroup is invalid, a 412
  1.4730 -   response MUST be returned.  If the second argument is a range and no
  1.4731 -   articles in that number range exist in the currently selected
  1.4732 -   newsgroup, including the case where the second number is less than
  1.4733 -   the first one, a 423 response MUST be returned.  If the second
  1.4734 -   argument is omitted and the current article number is invalid, a 420
  1.4735 -   response MUST be returned.
  1.4736 -
  1.4737 -   A server MAY only allow HDR commands for a limited set of fields; it
  1.4738 -   may behave differently in this respect for the first (message-id)
  1.4739 -   form from how it would for the other forms.  If so, it MUST respond
  1.4740 -   with the generic 503 response to attempts to request other fields,
  1.4741 -   rather than return erroneous results, such as a successful empty
  1.4742 -   response.
  1.4743 -
  1.4744 -   If HDR uses the overview database and it is inconsistent for the
  1.4745 -   requested field, the server MAY return what results it can, or it MAY
  1.4746 -   respond with the generic 503 response.  In the latter case, the field
  1.4747 -   MUST NOT appear in the output from LIST HEADERS.
  1.4748 -
  1.4749 -
  1.4750 -
  1.4751 -
  1.4752 -
  1.4753 -
  1.4754 -
  1.4755 -
  1.4756 -
  1.4757 -
  1.4758 -
  1.4759 -
  1.4760 -Feather                     Standards Track                    [Page 85]
  1.4761 -
  1.4762 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4763 -
  1.4764 -
  1.4765 -8.5.3.  Examples
  1.4766 -
  1.4767 -   Example of a successful retrieval of subject lines from a range of
  1.4768 -   articles (3000235 has no Subject header, and 3000236 is missing):
  1.4769 -
  1.4770 -      [C] GROUP misc.test
  1.4771 -      [S] 211 1234 3000234 3002322 misc.test
  1.4772 -      [C] HDR Subject 3000234-3000238
  1.4773 -      [S] 225 Headers follow
  1.4774 -      [S] 3000234 I am just a test article
  1.4775 -      [S] 3000235
  1.4776 -      [S] 3000237 Re: I am just a test article
  1.4777 -      [S] 3000238 Ditto
  1.4778 -      [S] .
  1.4779 -
  1.4780 -   Example of a successful retrieval of line counts from a range of
  1.4781 -   articles:
  1.4782 -
  1.4783 -      [C] GROUP misc.test
  1.4784 -      [S] 211 1234 3000234 3002322 misc.test
  1.4785 -      [C] HDR :lines 3000234-3000238
  1.4786 -      [S] 225 Headers follow
  1.4787 -      [S] 3000234 42
  1.4788 -      [S] 3000235 5
  1.4789 -      [S] 3000237 11
  1.4790 -      [S] 3000238 2378
  1.4791 -      [S] .
  1.4792 -
  1.4793 -   Example of a successful retrieval of the subject line from an article
  1.4794 -   by message-id:
  1.4795 -
  1.4796 -      [C] GROUP misc.test
  1.4797 -      [S] 211 1234 3000234 3002322 misc.test
  1.4798 -      [C] HDR subject <i.am.a.test.article@example.com>
  1.4799 -      [S] 225 Header information follows
  1.4800 -      [S] 0 I am just a test article
  1.4801 -      [S] .
  1.4802 -
  1.4803 -   Example of a successful retrieval of the subject line from the
  1.4804 -   current article:
  1.4805 -
  1.4806 -      [C] GROUP misc.test
  1.4807 -      [S] 211 1234 3000234 3002322 misc.test
  1.4808 -      [C] HDR subject
  1.4809 -      [S] 225 Header information follows
  1.4810 -      [S] 3000234 I am just a test article
  1.4811 -      [S] .
  1.4812 -
  1.4813 -
  1.4814 -
  1.4815 -
  1.4816 -Feather                     Standards Track                    [Page 86]
  1.4817 -
  1.4818 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4819 -
  1.4820 -
  1.4821 -   Example of an unsuccessful retrieval of a header from an article by
  1.4822 -   message-id:
  1.4823 -
  1.4824 -      [C] HDR subject <i.am.not.there@example.com>
  1.4825 -      [S] 430 No Such Article Found
  1.4826 -
  1.4827 -   Example of an unsuccessful retrieval of headers from articles by
  1.4828 -   number because no newsgroup was selected first:
  1.4829 -
  1.4830 -      [Assumes currently selected newsgroup is invalid.]
  1.4831 -      [C] HDR subject 300256-
  1.4832 -      [S] 412 No newsgroup selected
  1.4833 -
  1.4834 -   Example of an unsuccessful retrieval of headers because the currently
  1.4835 -   selected newsgroup is empty:
  1.4836 -
  1.4837 -      [C] GROUP example.empty.newsgroup
  1.4838 -      [S] 211 0 0 0 example.empty.newsgroup
  1.4839 -      [C] HDR subject 1-
  1.4840 -      [S] 423 No articles in that range
  1.4841 -
  1.4842 -   Example of an unsuccessful retrieval of headers because the server
  1.4843 -   does not allow HDR commands for that header:
  1.4844 -
  1.4845 -      [C] GROUP misc.test
  1.4846 -      [S] 211 1234 3000234 3002322 misc.test
  1.4847 -      [C] HDR Content-Type 3000234-3000238
  1.4848 -      [S] 503 HDR not permitted on Content-Type
  1.4849 -
  1.4850 -8.6.  LIST HEADERS
  1.4851 -
  1.4852 -8.6.1.  Usage
  1.4853 -
  1.4854 -   Indicating capability: HDR
  1.4855 -
  1.4856 -   Syntax
  1.4857 -     LIST HEADERS [MSGID|RANGE]
  1.4858 -
  1.4859 -   Responses
  1.4860 -     215    Field list follows (multi-line)
  1.4861 -
  1.4862 -   Parameters
  1.4863 -     MSGID    Requests list for access by message-id
  1.4864 -     RANGE    Requests list for access by range
  1.4865 -
  1.4866 -
  1.4867 -
  1.4868 -
  1.4869 -
  1.4870 -
  1.4871 -
  1.4872 -Feather                     Standards Track                    [Page 87]
  1.4873 -
  1.4874 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4875 -
  1.4876 -
  1.4877 -8.6.2.  Description
  1.4878 -
  1.4879 -   See Section 7.6.1 for general requirements of the LIST command.
  1.4880 -
  1.4881 -   The LIST HEADERS command returns a list of fields that may be
  1.4882 -   retrieved using the HDR command.
  1.4883 -
  1.4884 -   The information is returned as a multi-line data block following the
  1.4885 -   215 response code and contains one line for each field name
  1.4886 -   (excluding the trailing colon for headers and including the leading
  1.4887 -   colon for metadata items).  If the implementation allows any header
  1.4888 -   to be retrieved, it MUST NOT include any header names in the list but
  1.4889 -   MUST include the special entry ":" (a single colon on its own).  It
  1.4890 -   MUST still explicitly list any metadata items that are available.
  1.4891 -   The order of items in the list is not significant; the server need
  1.4892 -   not even consistently return the same order.  The list MAY be empty
  1.4893 -   (though in this circumstance there is little point in providing the
  1.4894 -   HDR command).
  1.4895 -
  1.4896 -   An implementation that also supports the OVER command SHOULD at least
  1.4897 -   permit all the headers and metadata items listed in the output from
  1.4898 -   the LIST OVERVIEW.FMT command.
  1.4899 -
  1.4900 -   If the server treats the first form of the HDR command (message-id
  1.4901 -   specified) differently from the other two forms (range specified or
  1.4902 -   current article number used) in respect of which headers or metadata
  1.4903 -   items are available, then the following apply:
  1.4904 -
  1.4905 -   o  If the MSGID argument is specified, the results MUST be those
  1.4906 -      available for the first form of the HDR command.
  1.4907 -
  1.4908 -   o  If the RANGE argument is specified, the results MUST be those
  1.4909 -      available for the second and third forms of the HDR command.
  1.4910 -
  1.4911 -   o  If no argument is specified, the results MUST be those available
  1.4912 -      in all forms of the HDR command (that is, it MUST only list those
  1.4913 -      items listed in both the previous cases).
  1.4914 -
  1.4915 -   If the server does not treat the various forms differently, then it
  1.4916 -   MUST ignore any argument and always produce the same results (though
  1.4917 -   not necessarily always in the same order).
  1.4918 -
  1.4919 -   If the HDR command is not implemented, the meaning of the output from
  1.4920 -   this command is not specified, but it must still meet the above
  1.4921 -   syntactic requirements.
  1.4922 -
  1.4923 -
  1.4924 -
  1.4925 -
  1.4926 -
  1.4927 -
  1.4928 -Feather                     Standards Track                    [Page 88]
  1.4929 -
  1.4930 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4931 -
  1.4932 -
  1.4933 -8.6.3.  Examples
  1.4934 -
  1.4935 -   Example of an implementation providing access to only a few headers:
  1.4936 -
  1.4937 -      [C] LIST HEADERS
  1.4938 -      [S] 215 headers supported:
  1.4939 -      [S] Subject
  1.4940 -      [S] Message-ID
  1.4941 -      [S] Xref
  1.4942 -      [S] .
  1.4943 -
  1.4944 -   Example of an implementation providing access to the same fields as
  1.4945 -   the first example in Section 8.4.3:
  1.4946 -
  1.4947 -      [C] CAPABILITIES
  1.4948 -      [S] 101 Capability list:
  1.4949 -      [S] VERSION 2
  1.4950 -      [S] READER
  1.4951 -      [S] OVER
  1.4952 -      [S] HDR
  1.4953 -      [S] LIST ACTIVE NEWSGROUPS HEADERS OVERVIEW.FMT
  1.4954 -      [S] .
  1.4955 -      [C] LIST HEADERS
  1.4956 -      [S] 215 headers and metadata items supported:
  1.4957 -      [S] Date
  1.4958 -      [S] Distribution
  1.4959 -      [S] From
  1.4960 -      [S] Message-ID
  1.4961 -      [S] References
  1.4962 -      [S] Subject
  1.4963 -      [S] Xref
  1.4964 -      [S] :bytes
  1.4965 -      [S] :lines
  1.4966 -      [S] .
  1.4967 -
  1.4968 -   Example of an implementation providing access to all headers:
  1.4969 -
  1.4970 -      [C] LIST HEADERS
  1.4971 -      [S] 215 metadata items supported:
  1.4972 -      [S] :
  1.4973 -      [S] :lines
  1.4974 -      [S] :bytes
  1.4975 -      [S] :x-article-number
  1.4976 -      [S] .
  1.4977 -
  1.4978 -
  1.4979 -
  1.4980 -
  1.4981 -
  1.4982 -
  1.4983 -
  1.4984 -Feather                     Standards Track                    [Page 89]
  1.4985 -
  1.4986 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.4987 -
  1.4988 -
  1.4989 -   Example of an implementation distinguishing the first form of the HDR
  1.4990 -   command from the other two forms:
  1.4991 -
  1.4992 -      [C] LIST HEADERS RANGE
  1.4993 -      [S] 215 metadata items supported:
  1.4994 -      [S] :
  1.4995 -      [S] :lines
  1.4996 -      [S] :bytes
  1.4997 -      [S] .
  1.4998 -      [C] LIST HEADERS MSGID
  1.4999 -      [S] 215 headers and metadata items supported:
  1.5000 -      [S] Date
  1.5001 -      [S] Distribution
  1.5002 -      [S] From
  1.5003 -      [S] Message-ID
  1.5004 -      [S] References
  1.5005 -      [S] Subject
  1.5006 -      [S] :lines
  1.5007 -      [S] :bytes
  1.5008 -      [S] :x-article-number
  1.5009 -      [S] .
  1.5010 -      [C] LIST HEADERS
  1.5011 -      [S] 215 headers and metadata items supported:
  1.5012 -      [S] Date
  1.5013 -      [S] Distribution
  1.5014 -      [S] From
  1.5015 -      [S] Message-ID
  1.5016 -      [S] References
  1.5017 -      [S] Subject
  1.5018 -      [S] :lines
  1.5019 -      [S] :bytes
  1.5020 -      [S] .
  1.5021 -
  1.5022 -   Note that :x-article-number does not appear in the last set of
  1.5023 -   output.
  1.5024 -
  1.5025 -9.  Augmented BNF Syntax for NNTP
  1.5026 -
  1.5027 -9.1.  Introduction
  1.5028 -
  1.5029 -   Each of the following sections describes the syntax of a major
  1.5030 -   element of NNTP.  This syntax extends and refines the descriptions
  1.5031 -   elsewhere in this specification and should be given precedence when
  1.5032 -   resolving apparent conflicts.  Note that ABNF [RFC4234] strings are
  1.5033 -   case insensitive.  Non-terminals used in several places are defined
  1.5034 -   in a separate section at the end.
  1.5035 -
  1.5036 -
  1.5037 -
  1.5038 -
  1.5039 -
  1.5040 -Feather                     Standards Track                    [Page 90]
  1.5041 -
  1.5042 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5043 -
  1.5044 -
  1.5045 -   Between them, the non-terminals <command-line>, <command-datastream>,
  1.5046 -   <command-continuation>, and <response> specify the text that flows
  1.5047 -   between client and server.  A consistent naming scheme is used in
  1.5048 -   this document for the non-terminals relating to each command, and
  1.5049 -   SHOULD be used by the specification of registered extensions.
  1.5050 -
  1.5051 -   For each command, the sequence is as follows:
  1.5052 -
  1.5053 -   o  The client sends an instance of <command-line>; the syntax for the
  1.5054 -      EXAMPLE command is <example-command>.
  1.5055 -
  1.5056 -   o  If the client is one that immediately streams data, it sends an
  1.5057 -      instance of <command-datastream>; the syntax for the EXAMPLE
  1.5058 -      command is <example-datastream>.
  1.5059 -
  1.5060 -   o  The server sends an instance of <response>.
  1.5061 -
  1.5062 -      *  The initial response line is independent of the command that
  1.5063 -         generated it; if the 000 response has arguments, the syntax of
  1.5064 -         the initial line is <response-000-content>.
  1.5065 -
  1.5066 -      *  If the response is multi-line, the initial line is followed by
  1.5067 -         a <multi-line-data-block>.  The syntax for the contents of this
  1.5068 -         block after "dot-stuffing" has been removed is (for the 000
  1.5069 -         response to the EXAMPLE command) <example-000-ml-content> and
  1.5070 -         is an instance of <multi-line-response-content>.
  1.5071 -
  1.5072 -   o  While the latest response is one that indicates more data is
  1.5073 -      required (in general, a 3xx response):
  1.5074 -
  1.5075 -      *  the client sends an instance of <command-continuation>; the
  1.5076 -         syntax for the EXAMPLE continuation following a 333 response is
  1.5077 -         <example-333-continuation>;
  1.5078 -
  1.5079 -      *  the server sends another instance of <response>, as above.
  1.5080 -
  1.5081 -   (There are no commands in this specification that immediately stream
  1.5082 -   data, but this non-terminal is defined for the convenience of
  1.5083 -   extensions.)
  1.5084 -
  1.5085 -
  1.5086 -
  1.5087 -
  1.5088 -
  1.5089 -
  1.5090 -
  1.5091 -
  1.5092 -
  1.5093 -
  1.5094 -
  1.5095 -
  1.5096 -Feather                     Standards Track                    [Page 91]
  1.5097 -
  1.5098 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5099 -
  1.5100 -
  1.5101 -9.2.  Commands
  1.5102 -
  1.5103 -   This syntax defines the non-terminal <command-line>, which represents
  1.5104 -   what is sent from the client to the server (see section 3.1 for
  1.5105 -   limits on lengths).
  1.5106 -
  1.5107 -     command-line = command EOL
  1.5108 -     command = X-command
  1.5109 -     X-command = keyword *(WS token)
  1.5110 -
  1.5111 -     command =/ article-command /
  1.5112 -           body-command /
  1.5113 -           capabilities-command /
  1.5114 -           date-command /
  1.5115 -           group-command /
  1.5116 -           hdr-command /
  1.5117 -           head-command /
  1.5118 -           help-command /
  1.5119 -           ihave-command /
  1.5120 -           last-command /
  1.5121 -           list-command /
  1.5122 -           listgroup-command /
  1.5123 -           mode-reader-command /
  1.5124 -           newgroups-command /
  1.5125 -           newnews-command /
  1.5126 -           next-command /
  1.5127 -           over-command /
  1.5128 -           post-command /
  1.5129 -           quit-command /
  1.5130 -           stat-command
  1.5131 -
  1.5132 -     article-command = "ARTICLE" [WS article-ref]
  1.5133 -     body-command = "BODY" [WS article-ref]
  1.5134 -     capabilities-command = "CAPABILITIES" [WS keyword]
  1.5135 -     date-command = "DATE"
  1.5136 -     group-command = "GROUP" [WS newsgroup-name]
  1.5137 -     hdr-command = "HDR" WS header-meta-name [WS range-ref]
  1.5138 -     head-command = "HEAD" [WS article-ref]
  1.5139 -     help-command = "HELP"
  1.5140 -     ihave-command = "IHAVE" WS message-id
  1.5141 -     last-command = "LAST"
  1.5142 -     list-command = "LIST" [WS list-arguments]
  1.5143 -     listgroup-command = "LISTGROUP" [WS newsgroup-name [WS range]]
  1.5144 -     mode-reader-command = "MODE" WS "READER"
  1.5145 -     newgroups-command = "NEWGROUPS" WS date-time
  1.5146 -     newnews-command = "NEWNEWS" WS wildmat WS date-time
  1.5147 -     next-command = "NEXT"
  1.5148 -     over-command = "OVER" [WS range-ref]
  1.5149 -
  1.5150 -
  1.5151 -
  1.5152 -Feather                     Standards Track                    [Page 92]
  1.5153 -
  1.5154 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5155 -
  1.5156 -
  1.5157 -     post-command = "POST"
  1.5158 -     quit-command = "QUIT"
  1.5159 -     stat-command = "STAT" [WS article-ref]
  1.5160 -
  1.5161 -     article-ref = article-number / message-id
  1.5162 -     date = date2y / date4y
  1.5163 -     date4y = 4DIGIT 2DIGIT 2DIGIT
  1.5164 -     date2y = 2DIGIT 2DIGIT 2DIGIT
  1.5165 -     date-time = date WS time [WS "GMT"]
  1.5166 -     header-meta-name = header-name / metadata-name
  1.5167 -     list-arguments = keyword [WS token]
  1.5168 -     metadata-name = ":" 1*A-NOTCOLON
  1.5169 -     range = article-number ["-" [article-number]]
  1.5170 -     range-ref = range / message-id
  1.5171 -     time = 2DIGIT 2DIGIT 2DIGIT
  1.5172 -
  1.5173 -9.3.  Command Continuation
  1.5174 -
  1.5175 -   This syntax defines the further material sent by the client in the
  1.5176 -   case of multi-stage commands and those that stream data.
  1.5177 -
  1.5178 -     command-datastream = UNDEFINED
  1.5179 -       ; not used, provided as a hook for extensions
  1.5180 -     command-continuation = ihave-335-continuation /
  1.5181 -           post-340-continuation
  1.5182 -
  1.5183 -     ihave-335-continuation = encoded-article
  1.5184 -     post-340-continuation = encoded-article
  1.5185 -
  1.5186 -     encoded-article = multi-line-data-block
  1.5187 -       ; after undoing the "dot-stuffing", this MUST match <article>
  1.5188 -
  1.5189 -9.4.  Responses
  1.5190 -
  1.5191 -9.4.1.  Generic Responses
  1.5192 -
  1.5193 -   This syntax defines the non-terminal <response>, which represents the
  1.5194 -   generic form of responses; that is, what is sent from the server to
  1.5195 -   the client in response to a <command> or a <command-continuation>.
  1.5196 -
  1.5197 -     response = simple-response / multi-line-response
  1.5198 -     simple-response = initial-response-line
  1.5199 -     multi-line-response = initial-response-line multi-line-data-block
  1.5200 -
  1.5201 -     initial-response-line =
  1.5202 -           initial-response-content [SP trailing-comment] CRLF
  1.5203 -     initial-response-content = X-initial-response-content
  1.5204 -     X-initial-response-content = 3DIGIT *(SP response-argument)
  1.5205 -
  1.5206 -
  1.5207 -
  1.5208 -Feather                     Standards Track                    [Page 93]
  1.5209 -
  1.5210 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5211 -
  1.5212 -
  1.5213 -     response-argument = 1*A-CHAR
  1.5214 -     trailing-comment = *U-CHAR
  1.5215 -
  1.5216 -9.4.2.  Initial Response Line Contents
  1.5217 -
  1.5218 -   This syntax defines the specific initial response lines for the
  1.5219 -   various commands in this specification (see section 3.1 for limits on
  1.5220 -   lengths).  Only those response codes with arguments are listed.
  1.5221 -
  1.5222 -     initial-response-content =/ response-111-content /
  1.5223 -           response-211-content /
  1.5224 -           response-220-content /
  1.5225 -           response-221-content /
  1.5226 -           response-222-content /
  1.5227 -           response-223-content /
  1.5228 -           response-401-content
  1.5229 -
  1.5230 -     response-111-content = "111" SP date4y time
  1.5231 -     response-211-content = "211" 3(SP article-number) SP newsgroup-name
  1.5232 -     response-220-content = "220" SP article-number SP message-id
  1.5233 -     response-221-content = "221" SP article-number SP message-id
  1.5234 -     response-222-content = "222" SP article-number SP message-id
  1.5235 -     response-223-content = "223" SP article-number SP message-id
  1.5236 -     response-401-content = "401" SP capability-label
  1.5237 -
  1.5238 -9.4.3.  Multi-line Response Contents
  1.5239 -
  1.5240 -   This syntax defines the content of the various multi-line responses;
  1.5241 -   more precisely, it defines the part of the response in the multi-line
  1.5242 -   data block after any "dot-stuffing" has been undone.  The numeric
  1.5243 -   portion of each non-terminal name indicates the response code that is
  1.5244 -   followed by this data.
  1.5245 -
  1.5246 -     multi-line-response-content = article-220-ml-content /
  1.5247 -           body-222-ml-content /
  1.5248 -           capabilities-101-ml-content /
  1.5249 -           hdr-225-ml-content /
  1.5250 -           head-221-ml-content /
  1.5251 -           help-100-ml-content /
  1.5252 -           list-215-ml-content /
  1.5253 -           listgroup-211-ml-content /
  1.5254 -           newgroups-231-ml-content /
  1.5255 -           newnews-230-ml-content /
  1.5256 -           over-224-ml-content
  1.5257 -
  1.5258 -     article-220-ml-content = article
  1.5259 -     body-222-ml-content = body
  1.5260 -     capabilities-101-ml-content = version-line CRLF
  1.5261 -
  1.5262 -
  1.5263 -
  1.5264 -Feather                     Standards Track                    [Page 94]
  1.5265 -
  1.5266 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5267 -
  1.5268 -
  1.5269 -           *(capability-line CRLF)
  1.5270 -     hdr-225-ml-content = *(article-number SP hdr-content CRLF)
  1.5271 -     head-221-ml-content = 1*header
  1.5272 -     help-100-ml-content = *(*U-CHAR CRLF)
  1.5273 -     list-215-ml-content = list-content
  1.5274 -     listgroup-211-ml-content = *(article-number CRLF)
  1.5275 -     newgroups-231-ml-content = active-groups-list
  1.5276 -     newnews-230-ml-content = *(message-id CRLF)
  1.5277 -     over-224-ml-content = *(article-number over-content CRLF)
  1.5278 -
  1.5279 -     active-groups-list = *(newsgroup-name SPA article-number
  1.5280 -           SPA article-number SPA newsgroup-status CRLF)
  1.5281 -     hdr-content = *S-NONTAB
  1.5282 -     hdr-n-content = [(header-name ":" / metadata-name) SP hdr-content]
  1.5283 -     list-content = body
  1.5284 -     newsgroup-status = %x79 / %x6E / %x6D / private-status
  1.5285 -     over-content = 1*6(TAB hdr-content) /
  1.5286 -           7(TAB hdr-content) *(TAB hdr-n-content)
  1.5287 -     private-status = token ; except the values in newsgroup-status
  1.5288 -
  1.5289 -9.5.  Capability Lines
  1.5290 -
  1.5291 -   This syntax defines the generic form of a capability line in the
  1.5292 -   capabilities list (see Section 3.3.1).
  1.5293 -
  1.5294 -     capability-line = capability-entry
  1.5295 -     capability-entry = X-capability-entry
  1.5296 -     X-capability-entry = capability-label *(WS capability-argument)
  1.5297 -     capability-label = keyword
  1.5298 -     capability-argument = token
  1.5299 -
  1.5300 -   This syntax defines the specific capability entries for the
  1.5301 -   capabilities in this specification.
  1.5302 -
  1.5303 -     capability-entry =/
  1.5304 -           hdr-capability /
  1.5305 -           ihave-capability /
  1.5306 -           implementation-capability /
  1.5307 -           list-capability /
  1.5308 -           mode-reader-capability /
  1.5309 -           newnews-capability /
  1.5310 -           over-capability /
  1.5311 -           post-capability /
  1.5312 -           reader-capability
  1.5313 -
  1.5314 -     hdr-capability = "HDR"
  1.5315 -     ihave-capability = "IHAVE"
  1.5316 -     implementation-capability = "IMPLEMENTATION" *(WS token)
  1.5317 -
  1.5318 -
  1.5319 -
  1.5320 -Feather                     Standards Track                    [Page 95]
  1.5321 -
  1.5322 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5323 -
  1.5324 -
  1.5325 -     list-capability = "LIST" 1*(WS keyword)
  1.5326 -     mode-reader-capability = "MODE-READER"
  1.5327 -     newnews-capability = "NEWNEWS"
  1.5328 -     over-capability = "OVER" [WS "MSGID"]
  1.5329 -     post-capability = "POST"
  1.5330 -     reader-capability = "READER"
  1.5331 -
  1.5332 -     version-line = "VERSION" 1*(WS version-number)
  1.5333 -     version-number = nzDIGIT *5DIGIT
  1.5334 -
  1.5335 -9.6.  LIST Variants
  1.5336 -
  1.5337 -   This section defines more specifically the keywords for the LIST
  1.5338 -   command and the syntax of the corresponding response contents.
  1.5339 -
  1.5340 -     ; active
  1.5341 -     list-arguments =/ "ACTIVE" [WS wildmat]
  1.5342 -     list-content =/ list-active-content
  1.5343 -     list-active-content = active-groups-list
  1.5344 -
  1.5345 -
  1.5346 -     ; active.times
  1.5347 -     list-arguments =/ "ACTIVE.TIMES" [WS wildmat]
  1.5348 -     list-content =/ list-active-times-content
  1.5349 -     list-active-times-content =
  1.5350 -           *(newsgroup-name SPA 1*DIGIT SPA newsgroup-creator CRLF)
  1.5351 -     newsgroup-creator = U-TEXT
  1.5352 -
  1.5353 -
  1.5354 -     ; distrib.pats
  1.5355 -     list-arguments =/ "DISTRIB.PATS"
  1.5356 -     list-content =/ list-distrib-pats-content
  1.5357 -     list-distrib-pats-content =
  1.5358 -           *(1*DIGIT ":" wildmat ":" distribution CRLF)
  1.5359 -     distribution = token
  1.5360 -
  1.5361 -
  1.5362 -     ; headers
  1.5363 -     list-arguments =/ "HEADERS" [WS ("MSGID" / "RANGE")]
  1.5364 -     list-content =/ list-headers-content
  1.5365 -     list-headers-content = *(header-meta-name CRLF) /
  1.5366 -           *((metadata-name / ":") CRLF)
  1.5367 -
  1.5368 -
  1.5369 -     ; newsgroups
  1.5370 -     list-arguments =/ "NEWSGROUPS" [WS wildmat]
  1.5371 -     list-content =/ list-newsgroups-content
  1.5372 -     list-newsgroups-content =
  1.5373 -
  1.5374 -
  1.5375 -
  1.5376 -Feather                     Standards Track                    [Page 96]
  1.5377 -
  1.5378 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5379 -
  1.5380 -
  1.5381 -           *(newsgroup-name WS newsgroup-description CRLF)
  1.5382 -     newsgroup-description = S-TEXT
  1.5383 -
  1.5384 -
  1.5385 -     ; overview.fmt
  1.5386 -     list-arguments =/ "OVERVIEW.FMT"
  1.5387 -     list-content =/ list-overview-fmt-content
  1.5388 -     list-overview-fmt-content = "Subject:" CRLF
  1.5389 -           "From:" CRLF
  1.5390 -           "Date:" CRLF
  1.5391 -           "Message-ID:" CRLF
  1.5392 -           "References:" CRLF
  1.5393 -           ( ":bytes" CRLF ":lines" / "Bytes:" CRLF "Lines:") CRLF
  1.5394 -           *((header-name ":full" / metadata-name) CRLF)
  1.5395 -
  1.5396 -9.7.  Articles
  1.5397 -
  1.5398 -   This syntax defines the non-terminal <article>, which represents the
  1.5399 -   format of an article as described in Section 3.6.
  1.5400 -
  1.5401 -     article = 1*header CRLF body
  1.5402 -     header = header-name ":" [CRLF] SP header-content CRLF
  1.5403 -     header-content = *(S-CHAR / [CRLF] WS)
  1.5404 -     body = *(*B-CHAR CRLF)
  1.5405 -
  1.5406 -9.8.  General Non-terminals
  1.5407 -
  1.5408 -   These non-terminals are used at various places in the syntax and are
  1.5409 -   collected here for convenience.  A few of these non-terminals are not
  1.5410 -   used in this specification but are provided for the consistency and
  1.5411 -   convenience of extension authors.
  1.5412 -
  1.5413 -     multi-line-data-block = content-lines termination
  1.5414 -     content-lines = *([content-text] CRLF)
  1.5415 -     content-text = (".." / B-NONDOT) *B-CHAR
  1.5416 -     termination = "." CRLF
  1.5417 -
  1.5418 -     article-number = 1*16DIGIT
  1.5419 -     header-name = 1*A-NOTCOLON
  1.5420 -     keyword = ALPHA 2*(ALPHA / DIGIT / "." / "-")
  1.5421 -     message-id = "<" 1*248A-NOTGT ">"
  1.5422 -     newsgroup-name = 1*wildmat-exact
  1.5423 -     token = 1*P-CHAR
  1.5424 -
  1.5425 -     wildmat = wildmat-pattern *("," ["!"] wildmat-pattern)
  1.5426 -     wildmat-pattern = 1*wildmat-item
  1.5427 -     wildmat-item = wildmat-exact / wildmat-wild
  1.5428 -     wildmat-exact = %x22-29 / %x2B / %x2D-3E / %x40-5A / %x5E-7E /
  1.5429 -
  1.5430 -
  1.5431 -
  1.5432 -Feather                     Standards Track                    [Page 97]
  1.5433 -
  1.5434 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5435 -
  1.5436 -
  1.5437 -          UTF8-non-ascii  ; exclude ! * , ? [ \ ]
  1.5438 -     wildmat-wild = "*" / "?"
  1.5439 -
  1.5440 -     base64 = *(4base64-char) [base64-terminal]
  1.5441 -     base64-char = UPPER / LOWER / DIGIT / "+" / "/"
  1.5442 -     base64-terminal = 2base64-char "==" / 3base64-char "="
  1.5443 -
  1.5444 -     ; Assorted special character sets
  1.5445 -     ;   A- means based on US-ASCII, excluding controls and SP
  1.5446 -     ;   P- means based on UTF-8, excluding controls and SP
  1.5447 -     ;   U- means based on UTF-8, excluding NUL CR and LF
  1.5448 -     ;   B- means based on bytes, excluding NUL CR and LF
  1.5449 -     A-CHAR     = %x21-7E
  1.5450 -     A-NOTCOLON = %x21-39 / %x3B-7E  ; exclude ":"
  1.5451 -     A-NOTGT    = %x21-3D / %x3F-7E  ; exclude ">"
  1.5452 -     P-CHAR     = A-CHAR / UTF8-non-ascii
  1.5453 -     U-CHAR     = CTRL / TAB / SP / A-CHAR / UTF8-non-ascii
  1.5454 -     U-NONTAB   = CTRL /       SP / A-CHAR / UTF8-non-ascii
  1.5455 -     U-TEXT     = P-CHAR *U-CHAR
  1.5456 -     B-CHAR     = CTRL / TAB / SP / %x21-FF
  1.5457 -     B-NONDOT   = CTRL / TAB / SP / %x21-2D / %x2F-FF  ; exclude "."
  1.5458 -
  1.5459 -     ALPHA = UPPER / LOWER   ; use only when case-insensitive
  1.5460 -     CR = %x0D
  1.5461 -     CRLF = CR LF
  1.5462 -     CTRL = %x01-08 / %x0B-0C / %x0E-1F
  1.5463 -     DIGIT = %x30-39
  1.5464 -     nzDIGIT = %x31-39
  1.5465 -     EOL = *(SP / TAB) CRLF
  1.5466 -     LF = %x0A
  1.5467 -     LOWER = %x61-7A
  1.5468 -     SP = %x20
  1.5469 -     SPA = 1*SP
  1.5470 -     TAB = %x09
  1.5471 -     UPPER = %x41-5A
  1.5472 -     UTF8-non-ascii = UTF8-2 / UTF8-3 / UTF8-4
  1.5473 -     UTF8-2    = %xC2-DF UTF8-tail
  1.5474 -     UTF8-3    = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2UTF8-tail /
  1.5475 -                 %xED %x80-9F UTF8-tail / %xEE-EF 2UTF8-tail
  1.5476 -     UTF8-4    = %xF0 %x90-BF 2UTF8-tail / %xF1-F3 3UTF8-tail /
  1.5477 -                 %xF4 %x80-8F 2UTF8-tail
  1.5478 -     UTF8-tail = %x80-BF
  1.5479 -     WS = 1*(SP / TAB)
  1.5480 -
  1.5481 -   The following non-terminals require special consideration.  They
  1.5482 -   represent situations where material SHOULD be restricted to UTF-8,
  1.5483 -   but implementations MUST be able to cope with other character
  1.5484 -   encodings.  Therefore, there are two sets of definitions for them.
  1.5485 -
  1.5486 -
  1.5487 -
  1.5488 -Feather                     Standards Track                    [Page 98]
  1.5489 -
  1.5490 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5491 -
  1.5492 -
  1.5493 -   Implementations MUST accept any content that meets this syntax:
  1.5494 -
  1.5495 -     S-CHAR   = %x21-FF
  1.5496 -     S-NONTAB = CTRL / SP / S-CHAR
  1.5497 -     S-TEXT   = (CTRL / S-CHAR) *B-CHAR
  1.5498 -
  1.5499 -   and MAY pass such content on unaltered.
  1.5500 -
  1.5501 -   When generating new content or re-encoding existing content,
  1.5502 -   implementations SHOULD conform to this syntax:
  1.5503 -
  1.5504 -     S-CHAR   = P-CHAR
  1.5505 -     S-NONTAB = U-NONTAB
  1.5506 -     S-TEXT   = U-TEXT
  1.5507 -
  1.5508 -9.9.  Extensions and Validation
  1.5509 -
  1.5510 -   The specification of a registered extension MUST include formal
  1.5511 -   syntax that defines additional forms for the following non-terminals:
  1.5512 -
  1.5513 -   command
  1.5514 -      for each new command other than a variant of the LIST command -
  1.5515 -      the syntax of each command MUST be compatible with the definition
  1.5516 -      of <X-command>;
  1.5517 -
  1.5518 -   command-datastream
  1.5519 -      for each new command that immediately streams data;
  1.5520 -
  1.5521 -   command-continuation
  1.5522 -      for each new command that sends further material after the initial
  1.5523 -      command line - the syntax of each continuation MUST be exactly
  1.5524 -      what is sent to the server, including any escape mechanisms such
  1.5525 -      as "dot-stuffing";
  1.5526 -
  1.5527 -   initial-response-content
  1.5528 -      for each new response code that has arguments - the syntax of each
  1.5529 -      response MUST be compatible with the definition of <X-initial-
  1.5530 -      response-content>;
  1.5531 -
  1.5532 -   multi-line-response-content
  1.5533 -      for each new response code that has a multi-line response - the
  1.5534 -      syntax MUST show the response after the lines containing the
  1.5535 -      response code and the terminating octet have been removed and any
  1.5536 -      "dot-stuffing" undone;
  1.5537 -
  1.5538 -   capability-entry
  1.5539 -      for each new capability label - the syntax of each entry MUST be
  1.5540 -      compatible with the definition of <X-capability-entry>;
  1.5541 -
  1.5542 -
  1.5543 -
  1.5544 -Feather                     Standards Track                    [Page 99]
  1.5545 -
  1.5546 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5547 -
  1.5548 -
  1.5549 -   list-arguments
  1.5550 -      for each new variant of the LIST command - the syntax of each
  1.5551 -      entry MUST be compatible with the definition of <X-command>;
  1.5552 -
  1.5553 -   list-content
  1.5554 -      for each new variant of the LIST command - the syntax MUST show
  1.5555 -      the response after the lines containing the 215 response code and
  1.5556 -      the terminating octet have been removed and any "dot-stuffing"
  1.5557 -      undone.
  1.5558 -
  1.5559 -   The =/ notation of ABNF [RFC4234] and the naming conventions
  1.5560 -   described in Section 9.1 SHOULD be used for this.
  1.5561 -
  1.5562 -   When the syntax in this specification, or syntax based on it, is
  1.5563 -   validated, it should be noted that:
  1.5564 -
  1.5565 -   o  the non-terminals <command-line>, <command-datastream>,
  1.5566 -      <command-continuation>, <response>, and
  1.5567 -      <multi-line-response-content> describe basic concepts of the
  1.5568 -      protocol and are not referred to by any other rule;
  1.5569 -
  1.5570 -   o  the non-terminal <base64> is provided for the convenience of
  1.5571 -      extension authors and is not referred to by any rule in this
  1.5572 -      specification;
  1.5573 -
  1.5574 -   o  for the reasons given above, the non-terminals <S-CHAR>,
  1.5575 -      <S-NONTAB>, and <S-TEXT> each have two definitions; and
  1.5576 -
  1.5577 -   o  the non-terminal <UNDEFINED> is deliberately not defined.
  1.5578 -
  1.5579 -10.  Internationalisation Considerations
  1.5580 -
  1.5581 -10.1.  Introduction and Historical Situation
  1.5582 -
  1.5583 -   RFC 977 [RFC977] was written at a time when internationalisation was
  1.5584 -   not seen as a significant issue.  As such, it was written on the
  1.5585 -   assumption that all communication would be in ASCII and use only a
  1.5586 -   7-bit transport layer, although in practice just about all known
  1.5587 -   implementations are 8-bit clean.
  1.5588 -
  1.5589 -   Since then, Usenet and NNTP have spread throughout the world.  In the
  1.5590 -   absence of standards for handling the issues of language and
  1.5591 -   character sets, countries, newsgroup hierarchies, and individuals
  1.5592 -   have found a variety of solutions that work for them but that are not
  1.5593 -   necessarily appropriate elsewhere.  For example, some have adopted a
  1.5594 -   default 8-bit character set appropriate to their needs (such as
  1.5595 -   ISO/IEC 8859-1 in Western Europe or KOI-8 in Russia), others have
  1.5596 -   used ASCII (either US-ASCII or national variants) in headers but
  1.5597 -
  1.5598 -
  1.5599 -
  1.5600 -Feather                     Standards Track                   [Page 100]
  1.5601 -
  1.5602 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5603 -
  1.5604 -
  1.5605 -   local 16-bit character sets in article bodies, and still others have
  1.5606 -   gone for a combination of MIME [RFC2045] and UTF-8.  With the
  1.5607 -   increased use of MIME in email, it is becoming more common to find
  1.5608 -   NNTP articles containing MIME headers that identify the character set
  1.5609 -   of the body, but this is far from universal.
  1.5610 -
  1.5611 -   The resulting confusion does not help interoperability.
  1.5612 -
  1.5613 -   One point that has been generally accepted is that articles can
  1.5614 -   contain octets with the top bit set, and NNTP is only expected to
  1.5615 -   operate on 8-bit clean transport paths.
  1.5616 -
  1.5617 -10.2.  This Specification
  1.5618 -
  1.5619 -   Part of the role of this present specification is to eliminate this
  1.5620 -   confusion and promote interoperability as far as possible.  At the
  1.5621 -   same time, it is necessary to accept the existence of the present
  1.5622 -   situation and not break existing implementations and arrangements
  1.5623 -   gratuitously, even if they are less than optimal.  Therefore, the
  1.5624 -   current practice described above has been taken into consideration in
  1.5625 -   producing this specification.
  1.5626 -
  1.5627 -   This specification extends NNTP from US-ASCII [ANSI1986] to UTF-8
  1.5628 -   [RFC3629].  Except in the two areas discussed below, UTF-8 (which is
  1.5629 -   a superset of US-ASCII) is mandatory, and implementations MUST NOT
  1.5630 -   use any other encoding.
  1.5631 -
  1.5632 -   Firstly, the use of MIME for article headers and bodies is strongly
  1.5633 -   recommended.  However, given widely divergent existing practices, an
  1.5634 -   attempt to require a particular encoding and tagging standard would
  1.5635 -   be premature at this time.  Accordingly, this specification allows
  1.5636 -   the use of arbitrary 8-bit data in articles subject to the following
  1.5637 -   requirements and recommendations.
  1.5638 -
  1.5639 -   o  The names of headers (e.g., "From" or "Subject") MUST be in
  1.5640 -      US-ASCII.
  1.5641 -
  1.5642 -   o  Header values SHOULD use US-ASCII or an encoding based on it, such
  1.5643 -      as RFC 2047 [RFC2047], until such time as another approach has
  1.5644 -      been standardised.  At present, 8-bit encodings (including UTF-8)
  1.5645 -      SHOULD NOT be used because they are likely to cause
  1.5646 -      interoperability problems.
  1.5647 -
  1.5648 -   o  The character set of article bodies SHOULD be indicated in the
  1.5649 -      article headers, and this SHOULD be done in accordance with MIME.
  1.5650 -
  1.5651 -   o  Where an article is obtained from an external source, an
  1.5652 -      implementation MAY pass it on and derive data from it (such as the
  1.5653 -
  1.5654 -
  1.5655 -
  1.5656 -Feather                     Standards Track                   [Page 101]
  1.5657 -
  1.5658 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5659 -
  1.5660 -
  1.5661 -      response to the HDR command), even though the article or the data
  1.5662 -      does not meet the above requirements.  Implementations MUST
  1.5663 -      transfer such articles and data correctly and unchanged; they MUST
  1.5664 -      NOT attempt to convert or re-encode the article or derived data.
  1.5665 -      (Nevertheless, a client or server MAY elect not to post or forward
  1.5666 -      the article if, after further examination of the article, it deems
  1.5667 -      it inappropriate to do so.)
  1.5668 -
  1.5669 -   This requirement affects the ARTICLE (Section 6.2.1), BODY
  1.5670 -   (Section 6.2.3), HDR (Section 8.5), HEAD (Section 6.2.2), IHAVE
  1.5671 -   (Section 6.3.2), OVER (Section 8.3), and POST (Section 6.3.1)
  1.5672 -   commands.
  1.5673 -
  1.5674 -   Secondly, the following requirements are placed on the newsgroups
  1.5675 -   list returned by the LIST NEWSGROUPS command (Section 7.6.6):
  1.5676 -
  1.5677 -   o  Although this specification allows UTF-8 for newsgroup names, they
  1.5678 -      SHOULD be restricted to US-ASCII until a successor to RFC 1036
  1.5679 -      [RFC1036] standardises another approach. 8-bit encodings SHOULD
  1.5680 -      NOT be used because they are likely to cause interoperability
  1.5681 -      problems.
  1.5682 -
  1.5683 -   o  The newsgroup description SHOULD be in US-ASCII or UTF-8 unless
  1.5684 -      and until a successor to RFC 1036 standardises other encoding
  1.5685 -      arrangements.  8-bit encodings other than UTF-8 SHOULD NOT be used
  1.5686 -      because they are likely to cause interoperability problems.
  1.5687 -
  1.5688 -   o  Implementations that obtain this data from an external source MUST
  1.5689 -      handle it correctly even if it does not meet the above
  1.5690 -      requirements.  Implementations (in particular, clients) MUST
  1.5691 -      handle such data correctly.
  1.5692 -
  1.5693 -10.3.  Outstanding Issues
  1.5694 -
  1.5695 -   While the primary use of NNTP is for transmitting articles that
  1.5696 -   conform to RFC 1036 (Netnews articles), it is also used for other
  1.5697 -   formats (see Appendix A).  It is therefore most appropriate that
  1.5698 -   internationalisation issues related to article formats be addressed
  1.5699 -   in the relevant specifications.  For Netnews articles, this is any
  1.5700 -   successor to RFC 1036.  For email messages, it is RFC 2822 [RFC2822].
  1.5701 -
  1.5702 -   Of course, any article transmitted via NNTP needs to conform to this
  1.5703 -   specification as well.
  1.5704 -
  1.5705 -   Restricting newsgroup names to UTF-8 is not a complete solution.  In
  1.5706 -   particular, when new newsgroup names are created or a user is asked
  1.5707 -   to enter a newsgroup name, some scheme of canonicalisation will need
  1.5708 -   to take place.  This specification does not attempt to define that
  1.5709 -
  1.5710 -
  1.5711 -
  1.5712 -Feather                     Standards Track                   [Page 102]
  1.5713 -
  1.5714 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5715 -
  1.5716 -
  1.5717 -   canonicalization; further work is needed in this area, in conjunction
  1.5718 -   with the article format specifications.  Until such specifications
  1.5719 -   are published, implementations SHOULD match newsgroup names octet by
  1.5720 -   octet.  It is anticipated that any approved scheme will be applied
  1.5721 -   "at the edges", and therefore octet-by-octet comparison will continue
  1.5722 -   to apply to most, if not all, uses of newsgroup names in NNTP.
  1.5723 -
  1.5724 -   In the meantime, any implementation experimenting with UTF-8
  1.5725 -   newsgroup names is strongly cautioned that a future specification may
  1.5726 -   require that those names be canonicalized when used with NNTP in a
  1.5727 -   way that is not compatible with their experiments.
  1.5728 -
  1.5729 -   Since the primary use of NNTP is with Netnews, and since newsgroup
  1.5730 -   descriptions are normally distributed through specially formatted
  1.5731 -   articles, it is recommended that the internationalisation issues
  1.5732 -   related to them be addressed in any successor to RFC 1036.
  1.5733 -
  1.5734 -11.  IANA Considerations
  1.5735 -
  1.5736 -   This specification requires IANA to keep a registry of capability
  1.5737 -   labels.  The initial contents of this registry are specified in
  1.5738 -   Section 3.3.4.  As described in Section 3.3.3, labels beginning with
  1.5739 -   X are reserved for private use, while all other names are expected to
  1.5740 -   be associated with a specification in an RFC on the standards track
  1.5741 -   or defining an IESG-approved experimental protocol.
  1.5742 -
  1.5743 -   Different entries in the registry MUST use different capability
  1.5744 -   labels.
  1.5745 -
  1.5746 -   Different entries in the registry MUST NOT use the same command name.
  1.5747 -   For this purpose, variants distinguished by a second or subsequent
  1.5748 -   keyword (e.g., "LIST HEADERS" and "LIST OVERVIEW.FMT") count as
  1.5749 -   different commands.  If there is a need for two extensions to use the
  1.5750 -   same command, a single harmonised specification MUST be registered.
  1.5751 -
  1.5752 -12.  Security Considerations
  1.5753 -
  1.5754 -   This section is meant to inform application developers, information
  1.5755 -   providers, and users of the security limitations in NNTP as described
  1.5756 -   by this document.  The discussion does not include definitive
  1.5757 -   solutions to the problems revealed, though it does make some
  1.5758 -   suggestions for reducing security risks.
  1.5759 -
  1.5760 -
  1.5761 -
  1.5762 -
  1.5763 -
  1.5764 -
  1.5765 -
  1.5766 -
  1.5767 -
  1.5768 -Feather                     Standards Track                   [Page 103]
  1.5769 -
  1.5770 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5771 -
  1.5772 -
  1.5773 -12.1.  Personal and Proprietary Information
  1.5774 -
  1.5775 -   NNTP, because it was created to distribute network news articles,
  1.5776 -   will forward whatever information is stored in those articles.
  1.5777 -   Specification of that information is outside this scope of this
  1.5778 -   document, but it is likely that some personal and/or proprietary
  1.5779 -   information is available in some of those articles.  It is very
  1.5780 -   important that designers and implementers provide informative
  1.5781 -   warnings to users so that personal and/or proprietary information in
  1.5782 -   material that is added automatically to articles (e.g., in headers)
  1.5783 -   is not disclosed inadvertently.  Additionally, effective and easily
  1.5784 -   understood mechanisms to manage the distribution of news articles
  1.5785 -   SHOULD be provided to NNTP Server administrators, so that they are
  1.5786 -   able to report with confidence the likely spread of any particular
  1.5787 -   set of news articles.
  1.5788 -
  1.5789 -12.2.  Abuse of Server Log Information
  1.5790 -
  1.5791 -   A server is in the position to save session data about a user's
  1.5792 -   requests that might identify their reading patterns or subjects of
  1.5793 -   interest.  This information is clearly confidential in nature, and
  1.5794 -   its handling can be constrained by law in certain countries.  People
  1.5795 -   using this protocol to provide data are responsible for ensuring that
  1.5796 -   such material is not distributed without the permission of any
  1.5797 -   individuals that are identifiable by the published results.
  1.5798 -
  1.5799 -12.3.  Weak Authentication and Access Control
  1.5800 -
  1.5801 -   There is no user-based or token-based authentication in the basic
  1.5802 -   NNTP specification.  Access is normally controlled by server
  1.5803 -   configuration files.  Those files specify access by using domain
  1.5804 -   names or IP addresses.  However, this specification does permit the
  1.5805 -   creation of extensions to NNTP for such purposes; one such extension
  1.5806 -   is [NNTP-AUTH].  While including such mechanisms is optional, doing
  1.5807 -   so is strongly encouraged.
  1.5808 -
  1.5809 -   Other mechanisms are also available.  For example, a proxy server
  1.5810 -   could be put in place that requires authentication before connecting
  1.5811 -   via the proxy to the NNTP server.
  1.5812 -
  1.5813 -12.4.  DNS Spoofing
  1.5814 -
  1.5815 -   Many existing NNTP implementations authorize incoming connections by
  1.5816 -   checking the IP address of that connection against the IP addresses
  1.5817 -   obtained via DNS lookups of lists of domain names given in local
  1.5818 -   configuration files.  Servers that use this type of authentication
  1.5819 -   and clients that find a server by doing a DNS lookup of the server
  1.5820 -   name rely very heavily on the Domain Name Service, and are thus
  1.5821 -
  1.5822 -
  1.5823 -
  1.5824 -Feather                     Standards Track                   [Page 104]
  1.5825 -
  1.5826 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5827 -
  1.5828 -
  1.5829 -   generally prone to security attacks based on the deliberate
  1.5830 -   misassociation of IP addresses and DNS names.  Clients and servers
  1.5831 -   need to be cautious in assuming the continuing validity of an IP
  1.5832 -   number/DNS name association.
  1.5833 -
  1.5834 -   In particular, NNTP clients and servers SHOULD rely on their name
  1.5835 -   resolver for confirmation of an IP number/DNS name association,
  1.5836 -   rather than cache the result of previous host name lookups.  Many
  1.5837 -   platforms already can cache host name lookups locally when
  1.5838 -   appropriate, and they SHOULD be configured to do so.  It is proper
  1.5839 -   for these lookups to be cached, however, only when the TTL (Time To
  1.5840 -   Live) information reported by the name server makes it likely that
  1.5841 -   the cached information will remain useful.
  1.5842 -
  1.5843 -   If NNTP clients or servers cache the results of host name lookups in
  1.5844 -   order to achieve a performance improvement, they MUST observe the TTL
  1.5845 -   information reported by DNS.  If NNTP clients or servers do not
  1.5846 -   observe this rule, they could be spoofed when a previously accessed
  1.5847 -   server's IP address changes.  As network renumbering is expected to
  1.5848 -   become increasingly common, the possibility of this form of attack
  1.5849 -   will increase.  Observing this requirement thus reduces this
  1.5850 -   potential security vulnerability.
  1.5851 -
  1.5852 -   This requirement also improves the load-balancing behaviour of
  1.5853 -   clients for replicated servers using the same DNS name and reduces
  1.5854 -   the likelihood of a user's experiencing failure in accessing sites
  1.5855 -   that use that strategy.
  1.5856 -
  1.5857 -12.5.  UTF-8 Issues
  1.5858 -
  1.5859 -   UTF-8 [RFC3629] permits only certain sequences of octets and
  1.5860 -   designates others as either malformed or "illegal".  The Unicode
  1.5861 -   standard identifies a number of security issues related to illegal
  1.5862 -   sequences and forbids their generation by conforming implementations.
  1.5863 -
  1.5864 -   Implementations of this specification MUST NOT generate malformed or
  1.5865 -   illegal sequences and SHOULD detect them and take some appropriate
  1.5866 -   action.  This could include the following:
  1.5867 -
  1.5868 -   o  Generating a 501 response code.
  1.5869 -
  1.5870 -   o  Replacing such sequences by the sequence %xEF.BF.BD, which encodes
  1.5871 -      the "replacement character" U+FFFD.
  1.5872 -
  1.5873 -   o  Closing the connection.
  1.5874 -
  1.5875 -   o  Replacing such sequences by a "guessed" valid sequence (based on
  1.5876 -      properties of the UTF-8 encoding).
  1.5877 -
  1.5878 -
  1.5879 -
  1.5880 -Feather                     Standards Track                   [Page 105]
  1.5881 -
  1.5882 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5883 -
  1.5884 -
  1.5885 -   In the last case, the implementation MUST ensure that any replacement
  1.5886 -   cannot be used to bypass validity or security checks.  For example,
  1.5887 -   the illegal sequence %xC0.A0 is an over-long encoding for space
  1.5888 -   (%x20).  If it is replaced by the correct encoding in a command line,
  1.5889 -   this needs to happen before the command line is parsed into
  1.5890 -   individual arguments.  If the replacement came after parsing, it
  1.5891 -   would be possible to generate an argument with an embedded space,
  1.5892 -   which is forbidden.  Use of the "replacement character" does not have
  1.5893 -   this problem, since it is permitted wherever non-US-ASCII characters
  1.5894 -   are.  Implementations SHOULD use one of the first two solutions where
  1.5895 -   the general structure of the NNTP stream remains intact and SHOULD
  1.5896 -   close the connection if it is no longer possible to parse it
  1.5897 -   sensibly.
  1.5898 -
  1.5899 -12.6.  Caching of Capability Lists
  1.5900 -
  1.5901 -   The CAPABILITIES command provides a capability list, which is
  1.5902 -   information about the current capabilities of the server.  Whenever
  1.5903 -   there is a relevant change to the server state, the results of this
  1.5904 -   command are required to change accordingly.
  1.5905 -
  1.5906 -   In most situations, the capabilities list in a given server state
  1.5907 -   will not change from session to session; for example, a given
  1.5908 -   extension will be installed permanently on a server.  Some clients
  1.5909 -   may therefore wish to remember which extensions a server supports to
  1.5910 -   avoid the delay of an additional command and response, particularly
  1.5911 -   if they open multiple connections in the same session.
  1.5912 -
  1.5913 -   However, information about extensions related to security and privacy
  1.5914 -   MUST NOT be cached, since this could allow a variety of attacks.
  1.5915 -
  1.5916 -   For example, consider a server that permits the use of cleartext
  1.5917 -   passwords on links that are encrypted but not otherwise:
  1.5918 -
  1.5919 -      [Initial connection set-up completed.]
  1.5920 -      [S] 200 NNTP Service Ready, posting permitted
  1.5921 -      [C] CAPABILITIES
  1.5922 -      [S] 101 Capability list:
  1.5923 -      [S] VERSION 2
  1.5924 -      [S] READER
  1.5925 -      [S] NEWNEWS
  1.5926 -      [S] POST
  1.5927 -      [S] XENCRYPT
  1.5928 -      [S] LIST ACTIVE NEWSGROUPS
  1.5929 -      [S] .
  1.5930 -      [C] XENCRYPT
  1.5931 -      [Client and server negotiate encryption on the link]
  1.5932 -      [S] 283 Encrypted link established
  1.5933 -
  1.5934 -
  1.5935 -
  1.5936 -Feather                     Standards Track                   [Page 106]
  1.5937 -
  1.5938 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5939 -
  1.5940 -
  1.5941 -      [C] CAPABILITIES
  1.5942 -      [S] 101 Capability list:
  1.5943 -      [S] VERSION 2
  1.5944 -      [S] READER
  1.5945 -      [S] NEWNEWS
  1.5946 -      [S] POST
  1.5947 -      [S] XSECRET
  1.5948 -      [S] LIST ACTIVE NEWSGROUPS
  1.5949 -      [S] .
  1.5950 -      [C] XSECRET fred flintstone
  1.5951 -      [S] 290 Password for fred accepted
  1.5952 -
  1.5953 -   If the client caches the last capabilities list, then on the next
  1.5954 -   session it will attempt to use XSECRET on an unencrypted link:
  1.5955 -
  1.5956 -      [Initial connection set-up completed.]
  1.5957 -      [S] 200 NNTP Service Ready, posting permitted
  1.5958 -      [C] XSECRET fred flintstone
  1.5959 -      [S] 483 Only permitted on secure links
  1.5960 -
  1.5961 -   This exposes the password to any eavesdropper.  While the primary
  1.5962 -   cause of this is passing a secret without first checking the security
  1.5963 -   of the link, caching of capability lists can increase the risk.
  1.5964 -
  1.5965 -   Any security extension should include requirements to check the
  1.5966 -   security state of the link in a manner appropriate to that extension.
  1.5967 -
  1.5968 -   Caching should normally only be considered for anonymous clients that
  1.5969 -   do not use any security or privacy extensions and for which the time
  1.5970 -   required for an additional command and response is a noticeable
  1.5971 -   issue.
  1.5972 -
  1.5973 -13.  Acknowledgements
  1.5974 -
  1.5975 -   This document is the result of much effort by the present and past
  1.5976 -   members of the NNTP Working Group, chaired by Russ Allbery and Ned
  1.5977 -   Freed.  It could not have been produced without them.
  1.5978 -
  1.5979 -   The author acknowledges the original authors of NNTP as documented in
  1.5980 -   RFC 977 [RFC977]: Brian Kantor and Phil Lapsey.
  1.5981 -
  1.5982 -   The author gratefully acknowledges the following:
  1.5983 -
  1.5984 -   o  The work of the NNTP committee chaired by Eliot Lear.  The
  1.5985 -      organization of this document was influenced by the last available
  1.5986 -      version from this working group.  A special thanks to Eliot for
  1.5987 -      generously providing the original machine-readable sources for
  1.5988 -      that document.
  1.5989 -
  1.5990 -
  1.5991 -
  1.5992 -Feather                     Standards Track                   [Page 107]
  1.5993 -
  1.5994 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.5995 -
  1.5996 -
  1.5997 -   o  The work of the DRUMS working group, specifically RFC 1869
  1.5998 -      [RFC1869], that drove the original thinking that led to the
  1.5999 -      CAPABILITIES command and the extensions mechanism detailed in this
  1.6000 -      document.
  1.6001 -
  1.6002 -   o  The authors of RFC 2616 [RFC2616] for providing specific and
  1.6003 -      relevant examples of security issues that should be considered for
  1.6004 -      HTTP.  Since many of the same considerations exist for NNTP, those
  1.6005 -      examples that are relevant have been included here with some minor
  1.6006 -      rewrites.
  1.6007 -
  1.6008 -   o  The comments and additional information provided by the following
  1.6009 -      individuals in preparing one or more of the progenitors of this
  1.6010 -      document:
  1.6011 -
  1.6012 -         Russ Allbery <rra@stanford.edu>
  1.6013 -         Wayne Davison <davison@armory.com>
  1.6014 -         Chris Lewis <clewis@bnr.ca>
  1.6015 -         Tom Limoncelli <tal@mars.superlink.net>
  1.6016 -         Eric Schnoebelen <eric@egsner.cirr.com>
  1.6017 -         Rich Salz <rsalz@osf.org>
  1.6018 -
  1.6019 -   This work was motivated by the work of various news reader authors
  1.6020 -   and news server authors, including those listed below:
  1.6021 -
  1.6022 -   Rick Adams
  1.6023 -      Original author of the NNTP extensions to the RN news reader and
  1.6024 -      last maintainer of Bnews.
  1.6025 -
  1.6026 -   Stan Barber
  1.6027 -      Original author of the NNTP extensions to the news readers that
  1.6028 -      are part of Bnews.
  1.6029 -
  1.6030 -   Geoff Collyer
  1.6031 -      Original author of the OVERVIEW database proposal and one of the
  1.6032 -      original authors of CNEWS.
  1.6033 -
  1.6034 -   Dan Curry
  1.6035 -      Original author of the xvnews news reader.
  1.6036 -
  1.6037 -   Wayne Davison
  1.6038 -      Author of the first threading extensions to the RN news reader
  1.6039 -      (commonly called TRN).
  1.6040 -
  1.6041 -   Geoff Huston
  1.6042 -      Original author of ANU NEWS.
  1.6043 -
  1.6044 -
  1.6045 -
  1.6046 -
  1.6047 -
  1.6048 -Feather                     Standards Track                   [Page 108]
  1.6049 -
  1.6050 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6051 -
  1.6052 -
  1.6053 -   Phil Lapsey
  1.6054 -      Original author of the UNIX reference implementation for NNTP.
  1.6055 -
  1.6056 -   Iain Lea
  1.6057 -      Original maintainer of the TIN news reader.
  1.6058 -
  1.6059 -   Chris Lewis
  1.6060 -      First known implementer of the AUTHINFO GENERIC extension.
  1.6061 -
  1.6062 -   Rich Salz
  1.6063 -      Original author of INN.
  1.6064 -
  1.6065 -   Henry Spencer
  1.6066 -      One of the original authors of CNEWS.
  1.6067 -
  1.6068 -   Kim Storm
  1.6069 -      Original author of the NN news reader.
  1.6070 -
  1.6071 -   Other people who contributed to this document include:
  1.6072 -
  1.6073 -      Matthias Andree
  1.6074 -      Greg Andruk
  1.6075 -      Daniel Barclay
  1.6076 -      Maurizio Codogno
  1.6077 -      Mark Crispin
  1.6078 -      Andrew Gierth
  1.6079 -      Juergen Helbing
  1.6080 -      Scott Hollenbeck
  1.6081 -      Urs Janssen
  1.6082 -      Charles Lindsey
  1.6083 -      Ade Lovett
  1.6084 -      David Magda
  1.6085 -      Ken Murchison
  1.6086 -      Francois Petillon
  1.6087 -      Peter Robinson
  1.6088 -      Rob Siemborski
  1.6089 -      Howard Swinehart
  1.6090 -      Ruud van Tol
  1.6091 -      Jeffrey Vinocur
  1.6092 -      Erik Warmelink
  1.6093 -
  1.6094 -   The author thanks them all and apologises to anyone omitted.
  1.6095 -
  1.6096 -   Finally, the present author gratefully acknowledges the vast amount
  1.6097 -   of work put into previous versions by the previous author:
  1.6098 -
  1.6099 -      Stan Barber <sob@academ.com>
  1.6100 -
  1.6101 -
  1.6102 -
  1.6103 -
  1.6104 -Feather                     Standards Track                   [Page 109]
  1.6105 -
  1.6106 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6107 -
  1.6108 -
  1.6109 -14.  References
  1.6110 -
  1.6111 -14.1.  Normative References
  1.6112 -
  1.6113 -   [ANSI1986]    American National Standards Institute, "Coded Character
  1.6114 -                 Set - 7-bit American Standard Code for Information
  1.6115 -                 Interchange", ANSI X3.4, 1986.
  1.6116 -
  1.6117 -   [RFC977]      Kantor, B. and P. Lapsley, "Network News Transfer
  1.6118 -                 Protocol", RFC 977, February 1986.
  1.6119 -
  1.6120 -   [RFC2045]     Freed, N. and N. Borenstein, "Multipurpose Internet
  1.6121 -                 Mail Extensions (MIME) Part One: Format of Internet
  1.6122 -                 Message Bodies", RFC 2045, November 1996.
  1.6123 -
  1.6124 -   [RFC2047]     Moore, K., "MIME (Multipurpose Internet Mail
  1.6125 -                 Extensions) Part Three: Message Header Extensions for
  1.6126 -                 Non-ASCII Text", RFC 2047, November 1996.
  1.6127 -
  1.6128 -   [RFC2119]     Bradner, S., "Key words for use in RFCs to Indicate
  1.6129 -                 Requirement Levels", BCP 14, RFC 2119, March 1997.
  1.6130 -
  1.6131 -   [RFC3629]     Yergeau, F., "UTF-8, a transformation format of ISO
  1.6132 -                 10646", STD 63, RFC 3629, November 2003.
  1.6133 -
  1.6134 -   [RFC4234]     Crocker, D., Ed. and P. Overell, "Augmented BNF for
  1.6135 -                 Syntax Specifications: ABNF", RFC 4234, October 2005.
  1.6136 -
  1.6137 -   [RFC4648]     Josefsson, S., "The Base16, Base32, and Base64 Data
  1.6138 -                 Encodings", RFC 4648, October 2006.
  1.6139 -
  1.6140 -   [TF.686-1]    International Telecommunications Union - Radio,
  1.6141 -                 "Glossary, ITU-R Recommendation TF.686-1",
  1.6142 -                 ITU-R Recommendation TF.686-1, October 1997.
  1.6143 -
  1.6144 -14.2.  Informative References
  1.6145 -
  1.6146 -   [NNTP-AUTH]   Vinocur, J., Murchison, K., and C. Newman, "Network
  1.6147 -                 News Transfer Protocol (NNTP) Extension for
  1.6148 -                 Authentication",
  1.6149 -                 RFC 4643, October 2006.
  1.6150 -
  1.6151 -   [NNTP-STREAM] Vinocur, J. and K. Murchison, "Network News Transfer
  1.6152 -                 Protocol (NNTP) Extension for Streaming Feeds",
  1.6153 -                 RFC 4644, October 2006.
  1.6154 -
  1.6155 -
  1.6156 -
  1.6157 -
  1.6158 -
  1.6159 -
  1.6160 -Feather                     Standards Track                   [Page 110]
  1.6161 -
  1.6162 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6163 -
  1.6164 -
  1.6165 -   [NNTP-TLS]    Murchison, K., Vinocur, J., and C. Newman, "Using
  1.6166 -                 Transport Layer Security (TLS) with Network News
  1.6167 -                 Transfer Protocol (NNTP)", RFC 4642, October 2006.
  1.6168 -
  1.6169 -   [RFC1036]     Horton, M. and R. Adams, "Standard for interchange of
  1.6170 -                 USENET messages", RFC 1036, December 1987.
  1.6171 -
  1.6172 -   [RFC1305]     Mills, D., "Network Time Protocol (Version 3)
  1.6173 -                 Specification, Implementation and Analysis", RFC 1305,
  1.6174 -                 March 1992.
  1.6175 -
  1.6176 -   [RFC1869]     Klensin, J., Freed, N., Rose, M., Stefferud, E., and D.
  1.6177 -                 Crocker, "SMTP Service Extensions", STD 10, RFC 1869,
  1.6178 -                 November 1995.
  1.6179 -
  1.6180 -   [RFC2616]     Fielding,  R., Gettys, J., Mogul, J., Frystyk, H.,
  1.6181 -                 Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
  1.6182 -                 Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
  1.6183 -
  1.6184 -   [RFC2629]     Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629,
  1.6185 -                 June 1999.
  1.6186 -
  1.6187 -   [RFC2822]     Resnick, P., "Internet Message Format", RFC 2822, April
  1.6188 -                 2001.
  1.6189 -
  1.6190 -   [RFC2980]     Barber, S., "Common NNTP Extensions", RFC 2980, October
  1.6191 -                 2000.
  1.6192 -
  1.6193 -   [ROBE1995]    Robertson, R., "FAQ: Overview database / NOV General
  1.6194 -                 Information", January 1995.
  1.6195 -
  1.6196 -                 There is no definitive copy of this document known to
  1.6197 -                 the author.  It was previously posted as the Usenet
  1.6198 -                 article <news:nov-faq-1-930909720@agate.Berkeley.EDU>
  1.6199 -
  1.6200 -   [SALZ1992]    Salz, R., "Manual Page for wildmat(3) from the INN 1.4
  1.6201 -                 distribution, Revision 1.10", April 1992.
  1.6202 -
  1.6203 -                 There is no definitive copy of this document known to
  1.6204 -                 the author.
  1.6205 -
  1.6206 -
  1.6207 -
  1.6208 -
  1.6209 -
  1.6210 -
  1.6211 -
  1.6212 -
  1.6213 -
  1.6214 -
  1.6215 -
  1.6216 -Feather                     Standards Track                   [Page 111]
  1.6217 -
  1.6218 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6219 -
  1.6220 -
  1.6221 -Appendix A.  Interaction with Other Specifications
  1.6222 -
  1.6223 -   NNTP is most often used for transferring articles that conform to
  1.6224 -   RFC 1036 [RFC1036] (such articles are called "Netnews articles"
  1.6225 -   here).  It is also sometimes used for transferring email messages
  1.6226 -   that conform to RFC 2822 [RFC2822] (such articles are called "email
  1.6227 -   articles" here).  In this situation, articles must conform both to
  1.6228 -   this specification and to that other one; this appendix describes
  1.6229 -   some relevant issues.
  1.6230 -
  1.6231 -A.1.  Header Folding
  1.6232 -
  1.6233 -   NNTP allows a header line to be folded (by inserting a CRLF pair)
  1.6234 -   before any space or TAB character.
  1.6235 -
  1.6236 -   Both email and Netnews articles are required to have at least one
  1.6237 -   octet other than space or TAB on each header line.  Thus, folding can
  1.6238 -   only happen at one point in each sequence of consecutive spaces or
  1.6239 -   TABs.  Netnews articles are further required to have the header name,
  1.6240 -   colon, and following space all on the first line; folding may only
  1.6241 -   happen beyond that space.  Finally, some non-conforming software will
  1.6242 -   remove trailing spaces and TABs from a line.  Therefore, it might be
  1.6243 -   inadvisable to fold a header after a space or TAB.
  1.6244 -
  1.6245 -   For maximum safety, header lines SHOULD conform to the following
  1.6246 -   syntax rather than to that in Section 9.7.
  1.6247 -
  1.6248 -
  1.6249 -     header = header-name ":" SP [header-content] CRLF
  1.6250 -     header-content = [WS] token *( [CRLF] WS token )
  1.6251 -
  1.6252 -A.2.  Message-IDs
  1.6253 -
  1.6254 -   Every article handled by an NNTP server MUST have a unique
  1.6255 -   message-id.  For the purposes of this specification, a message-id is
  1.6256 -   an arbitrary opaque string that merely needs to meet certain
  1.6257 -   syntactic requirements and is just a way to refer to the article.
  1.6258 -
  1.6259 -   Because there is a significant risk that old articles will be
  1.6260 -   reinjected into the global Usenet system, RFC 1036 [RFC1036] requires
  1.6261 -   that message-ids are globally unique for all time.
  1.6262 -
  1.6263 -   This specification states that message-ids are the same if and only
  1.6264 -   if they consist of the same sequence of octets.  Other specifications
  1.6265 -   may define two different sequences as being equal because they are
  1.6266 -   putting an interpretation on particular characters.  RFC 2822
  1.6267 -   [RFC2822] has a concept of "quoted" and "escaped" characters.  It
  1.6268 -   therefore considers the three message-ids:
  1.6269 -
  1.6270 -
  1.6271 -
  1.6272 -Feather                     Standards Track                   [Page 112]
  1.6273 -
  1.6274 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6275 -
  1.6276 -
  1.6277 -      <ab.cd@example.com>
  1.6278 -      <"ab.cd"@example.com>
  1.6279 -      <"ab.\cd"@example.com>
  1.6280 -
  1.6281 -   as being identical.  Therefore, an NNTP implementation handing email
  1.6282 -   articles must ensure that only one of these three appears in the
  1.6283 -   protocol and that the other two are converted to it as and when
  1.6284 -   necessary, such as when a client checks the results of a NEWNEWS
  1.6285 -   command against an internal database of message-ids.  Note that
  1.6286 -   RFC 1036 [RFC1036] never treats two different strings as being
  1.6287 -   identical.  Its successor (as of the time of writing) restricts the
  1.6288 -   syntax of message-ids so that, whenever RFC 2822 would treat two
  1.6289 -   strings as equivalent, only one of them is valid (in the above
  1.6290 -   example, only the first string is valid).
  1.6291 -
  1.6292 -   This specification does not describe how the message-id of an article
  1.6293 -   is determined; it may be deduced from the contents of the article or
  1.6294 -   derived from some external source.  If the server is also conforming
  1.6295 -   to another specification that contains a definition of message-id
  1.6296 -   compatible with this one, the server SHOULD use those message-ids.  A
  1.6297 -   common approach, and one that SHOULD be used for email and Netnews
  1.6298 -   articles, is to extract the message-id from the contents of a header
  1.6299 -   with name "Message-ID".  This may not be as simple as copying the
  1.6300 -   entire header contents; it may be necessary to strip off comments and
  1.6301 -   undo quoting, or to reduce "equivalent" message-ids to a canonical
  1.6302 -   form.
  1.6303 -
  1.6304 -   If an article is obtained through the IHAVE command, there will be a
  1.6305 -   message-id provided with the command.  The server MAY either use it
  1.6306 -   or determine one from the article contents.  However, whichever it
  1.6307 -   does, it SHOULD ensure that, if the IHAVE command is repeated with
  1.6308 -   the same argument and article, it will be recognized as a duplicate.
  1.6309 -
  1.6310 -   If an article does not contain a message-id that the server can
  1.6311 -   identify, it MUST synthesize one.  This could, for example, be a
  1.6312 -   simple sequence number or be based on the date and time when the
  1.6313 -   article arrived.  When email or Netnews articles are handled, a
  1.6314 -   Message-ID header SHOULD be added to ensure global consistency and
  1.6315 -   uniqueness.
  1.6316 -
  1.6317 -   Note that, because the message-id might not have been derived from
  1.6318 -   the Message-ID header in the article, the following example is
  1.6319 -   legitimate (though unusual):
  1.6320 -
  1.6321 -
  1.6322 -
  1.6323 -
  1.6324 -
  1.6325 -
  1.6326 -
  1.6327 -
  1.6328 -Feather                     Standards Track                   [Page 113]
  1.6329 -
  1.6330 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6331 -
  1.6332 -
  1.6333 -      [C] HEAD <45223423@example.com>
  1.6334 -      [S] 221 0 <45223423@example.com>
  1.6335 -      [S] Path: pathost!demo!whitehouse!not-for-mail
  1.6336 -      [S] Message-ID: <1234@example.net>
  1.6337 -      [S] From: "Demo User" <nobody@example.net>
  1.6338 -      [S] Newsgroups: misc.test
  1.6339 -      [S] Subject: I am just a test article
  1.6340 -      [S] Date: 6 Oct 1998 04:38:40 -0500
  1.6341 -      [S] Organization: An Example Net, Uncertain, Texas
  1.6342 -      [S] .
  1.6343 -
  1.6344 -A.3.  Article Posting
  1.6345 -
  1.6346 -   As far as NNTP is concerned, the POST and IHAVE commands provide the
  1.6347 -   same basic facilities in a slightly different way.  However, they
  1.6348 -   have rather different intentions.
  1.6349 -
  1.6350 -   The IHAVE command is intended for transmitting conforming articles
  1.6351 -   between a system of NNTP servers, with all articles perhaps also
  1.6352 -   conforming to another specification (e.g., all articles are Netnews
  1.6353 -   articles).  It is expected that the client will already have done any
  1.6354 -   necessary validation (or that it has in turn obtained the article
  1.6355 -   from a third party that has done so); therefore, the contents SHOULD
  1.6356 -   be left unchanged.
  1.6357 -
  1.6358 -   In contrast, the POST command is intended for use when an end-user is
  1.6359 -   injecting a newly created article into a such a system.  The article
  1.6360 -   being transferred might not be a conforming email or Netnews article,
  1.6361 -   and the server is expected to validate it and, if necessary, to
  1.6362 -   convert it to the right form for onward distribution.  This is often
  1.6363 -   done by a separate piece of software on the server installation; if
  1.6364 -   so, the NNTP server SHOULD pass the incoming article to that software
  1.6365 -   unaltered, making no attempt to filter characters, to fold or limit
  1.6366 -   lines, or to process the incoming text otherwise.
  1.6367 -
  1.6368 -   The POST command can fail in various ways, and clients should be
  1.6369 -   prepared to re-send an article.  When doing so, however, it is often
  1.6370 -   important to ensure (as far as possible) that the same message-id is
  1.6371 -   allocated to both attempts so that the server, or other servers, can
  1.6372 -   recognize the two articles as duplicates.  In the case of email or
  1.6373 -   Netnews articles, therefore, the posted article SHOULD contain a
  1.6374 -   header with the name "Message-ID", and the contents of this header
  1.6375 -   SHOULD be identical on each attempt.  The server SHOULD ensure that
  1.6376 -   two POSTed articles with the same contents for this header are
  1.6377 -   recognized as identical and that the same message-id is allocated,
  1.6378 -   whether or not those contents are suitable for use as the message-id.
  1.6379 -
  1.6380 -
  1.6381 -
  1.6382 -
  1.6383 -
  1.6384 -Feather                     Standards Track                   [Page 114]
  1.6385 -
  1.6386 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6387 -
  1.6388 -
  1.6389 -Appendix B.  Summary of Commands
  1.6390 -
  1.6391 -   This section contains a list of every command defined in this
  1.6392 -   document, ordered by command name and by indicating capability.
  1.6393 -
  1.6394 -                         Ordered by command name:
  1.6395 -
  1.6396 -       +-------------------+-----------------------+---------------+
  1.6397 -       | Command           | Indicating capability | Definition    |
  1.6398 -       +-------------------+-----------------------+---------------+
  1.6399 -       | ARTICLE           | READER                | Section 6.2.1 |
  1.6400 -       | BODY              | READER                | Section 6.2.3 |
  1.6401 -       | CAPABILITIES      | mandatory             | Section 5.2   |
  1.6402 -       | DATE              | READER                | Section 7.1   |
  1.6403 -       | GROUP             | READER                | Section 6.1.1 |
  1.6404 -       | HDR               | HDR                   | Section 8.5   |
  1.6405 -       | HEAD              | mandatory             | Section 6.2.2 |
  1.6406 -       | HELP              | mandatory             | Section 7.2   |
  1.6407 -       | IHAVE             | IHAVE                 | Section 6.3.2 |
  1.6408 -       | LAST              | READER                | Section 6.1.3 |
  1.6409 -       | LIST              | LIST                  | Section 7.6.1 |
  1.6410 -       | LIST ACTIVE.TIMES | LIST                  | Section 7.6.4 |
  1.6411 -       | LIST ACTIVE       | LIST                  | Section 7.6.3 |
  1.6412 -       | LIST DISTRIB.PATS | LIST                  | Section 7.6.5 |
  1.6413 -       | LIST HEADERS      | HDR                   | Section 8.6   |
  1.6414 -       | LIST NEWSGROUPS   | LIST                  | Section 7.6.6 |
  1.6415 -       | LIST OVERVIEW.FMT | OVER                  | Section 8.4   |
  1.6416 -       | LISTGROUP         | READER                | Section 6.1.2 |
  1.6417 -       | MODE READER       | MODE-READER           | Section 5.3   |
  1.6418 -       | NEWGROUPS         | READER                | Section 7.3   |
  1.6419 -       | NEWNEWS           | NEWNEWS               | Section 7.4   |
  1.6420 -       | NEXT              | READER                | Section 6.1.4 |
  1.6421 -       | OVER              | OVER                  | Section 8.3   |
  1.6422 -       | POST              | POST                  | Section 6.3.1 |
  1.6423 -       | QUIT              | mandatory             | Section 5.4   |
  1.6424 -       | STAT              | mandatory             | Section 6.2.4 |
  1.6425 -       +-------------------+-----------------------+---------------+
  1.6426 -
  1.6427 -
  1.6428 -
  1.6429 -
  1.6430 -
  1.6431 -
  1.6432 -
  1.6433 -
  1.6434 -
  1.6435 -
  1.6436 -
  1.6437 -
  1.6438 -
  1.6439 -
  1.6440 -Feather                     Standards Track                   [Page 115]
  1.6441 -
  1.6442 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6443 -
  1.6444 -
  1.6445 -                     Ordered by indicating capability:
  1.6446 -
  1.6447 -       +-------------------+-----------------------+---------------+
  1.6448 -       | Command           | Indicating capability | Definition    |
  1.6449 -       +-------------------+-----------------------+---------------+
  1.6450 -       | CAPABILITIES      | mandatory             | Section 5.2   |
  1.6451 -       | HEAD              | mandatory             | Section 6.2.2 |
  1.6452 -       | HELP              | mandatory             | Section 7.2   |
  1.6453 -       | QUIT              | mandatory             | Section 5.4   |
  1.6454 -       | STAT              | mandatory             | Section 6.2.4 |
  1.6455 -       | HDR               | HDR                   | Section 8.5   |
  1.6456 -       | LIST HEADERS      | HDR                   | Section 8.6   |
  1.6457 -       | IHAVE             | IHAVE                 | Section 6.3.2 |
  1.6458 -       | LIST              | LIST                  | Section 7.6.1 |
  1.6459 -       | LIST ACTIVE       | LIST                  | Section 7.6.3 |
  1.6460 -       | LIST ACTIVE.TIMES | LIST                  | Section 7.6.4 |
  1.6461 -       | LIST DISTRIB.PATS | LIST                  | Section 7.6.5 |
  1.6462 -       | LIST NEWSGROUPS   | LIST                  | Section 7.6.6 |
  1.6463 -       | MODE READER       | MODE-READER           | Section 5.3   |
  1.6464 -       | NEWNEWS           | NEWNEWS               | Section 7.4   |
  1.6465 -       | OVER              | OVER                  | Section 8.3   |
  1.6466 -       | LIST OVERVIEW.FMT | OVER                  | Section 8.4   |
  1.6467 -       | POST              | POST                  | Section 6.3.1 |
  1.6468 -       | ARTICLE           | READER                | Section 6.2.1 |
  1.6469 -       | BODY              | READER                | Section 6.2.3 |
  1.6470 -       | DATE              | READER                | Section 7.1   |
  1.6471 -       | GROUP             | READER                | Section 6.1.1 |
  1.6472 -       | LAST              | READER                | Section 6.1.3 |
  1.6473 -       | LISTGROUP         | READER                | Section 6.1.2 |
  1.6474 -       | NEWGROUPS         | READER                | Section 7.3   |
  1.6475 -       | NEXT              | READER                | Section 6.1.4 |
  1.6476 -       +-------------------+-----------------------+---------------+
  1.6477 -
  1.6478 -
  1.6479 -
  1.6480 -
  1.6481 -
  1.6482 -
  1.6483 -
  1.6484 -
  1.6485 -
  1.6486 -
  1.6487 -
  1.6488 -
  1.6489 -
  1.6490 -
  1.6491 -
  1.6492 -
  1.6493 -
  1.6494 -
  1.6495 -
  1.6496 -Feather                     Standards Track                   [Page 116]
  1.6497 -
  1.6498 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6499 -
  1.6500 -
  1.6501 -Appendix C.  Summary of Response Codes
  1.6502 -
  1.6503 -   This section contains a list of every response code defined in this
  1.6504 -   document and indicates whether it is multi-line, which commands can
  1.6505 -   generate it, what arguments it has, and what its meaning is.
  1.6506 -
  1.6507 -   Response code 100 (multi-line)
  1.6508 -      Generated by: HELP
  1.6509 -      Meaning: help text follows.
  1.6510 -
  1.6511 -   Response code 101 (multi-line)
  1.6512 -      Generated by: CAPABILITIES
  1.6513 -      Meaning: capabilities list follows.
  1.6514 -
  1.6515 -   Response code 111
  1.6516 -      Generated by: DATE
  1.6517 -      1 argument: yyyymmddhhmmss
  1.6518 -      Meaning: server date and time.
  1.6519 -
  1.6520 -   Response code 200
  1.6521 -      Generated by: initial connection, MODE READER
  1.6522 -      Meaning: service available, posting allowed.
  1.6523 -
  1.6524 -   Response code 201
  1.6525 -      Generated by: initial connection, MODE READER
  1.6526 -      Meaning: service available, posting prohibited.
  1.6527 -
  1.6528 -   Response code 205
  1.6529 -      Generated by: QUIT
  1.6530 -      Meaning: connection closing (the server immediately closes the
  1.6531 -      connection).
  1.6532 -
  1.6533 -   Response code 211
  1.6534 -      The 211 response code has two completely different forms,
  1.6535 -      depending on which command generated it:
  1.6536 -
  1.6537 -         (not multi-line)
  1.6538 -         Generated by: GROUP
  1.6539 -         4 arguments: number low high group
  1.6540 -         Meaning: group selected.
  1.6541 -
  1.6542 -         (multi-line)
  1.6543 -         Generated by: LISTGROUP
  1.6544 -         4 arguments: number low high group
  1.6545 -         Meaning: article numbers follow.
  1.6546 -
  1.6547 -
  1.6548 -
  1.6549 -
  1.6550 -
  1.6551 -
  1.6552 -Feather                     Standards Track                   [Page 117]
  1.6553 -
  1.6554 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6555 -
  1.6556 -
  1.6557 -   Response code 215 (multi-line)
  1.6558 -      Generated by: LIST
  1.6559 -      Meaning: information follows.
  1.6560 -
  1.6561 -   Response code 220 (multi-line)
  1.6562 -      Generated by: ARTICLE
  1.6563 -      2 arguments: n message-id
  1.6564 -      Meaning: article follows.
  1.6565 -
  1.6566 -   Response code 221 (multi-line)
  1.6567 -      Generated by: HEAD
  1.6568 -      2 arguments: n message-id
  1.6569 -      Meaning: article headers follow.
  1.6570 -
  1.6571 -   Response code 222 (multi-line)
  1.6572 -      Generated by: BODY
  1.6573 -      2 arguments: n message-id
  1.6574 -      Meaning: article body follows.
  1.6575 -
  1.6576 -   Response code 223
  1.6577 -      Generated by: LAST, NEXT, STAT
  1.6578 -      2 arguments: n message-id
  1.6579 -      Meaning: article exists and selected.
  1.6580 -
  1.6581 -   Response code 224 (multi-line)
  1.6582 -      Generated by: OVER
  1.6583 -      Meaning: overview information follows.
  1.6584 -
  1.6585 -   Response code 225 (multi-line)
  1.6586 -      Generated by: HDR
  1.6587 -      Meaning: headers follow.
  1.6588 -
  1.6589 -   Response code 230 (multi-line)
  1.6590 -      Generated by: NEWNEWS
  1.6591 -      Meaning: list of new articles follows.
  1.6592 -
  1.6593 -   Response code 231 (multi-line)
  1.6594 -      Generated by: NEWGROUPS
  1.6595 -      Meaning: list of new newsgroups follows.
  1.6596 -
  1.6597 -   Response code 235
  1.6598 -      Generated by: IHAVE (second stage)
  1.6599 -      Meaning: article transferred OK.
  1.6600 -
  1.6601 -   Response code 240
  1.6602 -      Generated by: POST (second stage)
  1.6603 -      Meaning: article received OK.
  1.6604 -
  1.6605 -
  1.6606 -
  1.6607 -
  1.6608 -Feather                     Standards Track                   [Page 118]
  1.6609 -
  1.6610 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6611 -
  1.6612 -
  1.6613 -   Response code 335
  1.6614 -      Generated by: IHAVE (first stage)
  1.6615 -      Meaning: send article to be transferred.
  1.6616 -
  1.6617 -   Response code 340
  1.6618 -      Generated by: POST (first stage)
  1.6619 -      Meaning: send article to be posted.
  1.6620 -
  1.6621 -   Response code 400
  1.6622 -      Generic response and generated by initial connection
  1.6623 -      Meaning: service not available or no longer available (the server
  1.6624 -      immediately closes the connection).
  1.6625 -
  1.6626 -   Response code 401
  1.6627 -      Generic response
  1.6628 -      1 argument: capability-label
  1.6629 -      Meaning: the server is in the wrong mode; the indicated capability
  1.6630 -      should be used to change the mode.
  1.6631 -
  1.6632 -   Response code 403
  1.6633 -      Generic response
  1.6634 -      Meaning: internal fault or problem preventing action being taken.
  1.6635 -
  1.6636 -   Response code 411
  1.6637 -      Generated by: GROUP, LISTGROUP
  1.6638 -      Meaning: no such newsgroup.
  1.6639 -
  1.6640 -   Response code 412
  1.6641 -      Generated by: ARTICLE, BODY, GROUP, HDR, HEAD, LAST, LISTGROUP,
  1.6642 -      NEXT, OVER, STAT
  1.6643 -      Meaning: no newsgroup selected.
  1.6644 -
  1.6645 -   Response code 420
  1.6646 -      Generated by: ARTICLE, BODY, HDR, HEAD, LAST, NEXT, OVER, STAT
  1.6647 -      Meaning: current article number is invalid.
  1.6648 -
  1.6649 -   Response code 421
  1.6650 -      Generated by: NEXT
  1.6651 -      Meaning: no next article in this group.
  1.6652 -
  1.6653 -   Response code 422
  1.6654 -      Generated by: LAST
  1.6655 -      Meaning: no previous article in this group.
  1.6656 -
  1.6657 -   Response code 423
  1.6658 -      Generated by: ARTICLE, BODY, HDR, HEAD, OVER, STAT
  1.6659 -      Meaning: no article with that number or in that range.
  1.6660 -
  1.6661 -
  1.6662 -
  1.6663 -
  1.6664 -Feather                     Standards Track                   [Page 119]
  1.6665 -
  1.6666 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6667 -
  1.6668 -
  1.6669 -   Response code 430
  1.6670 -      Generated by: ARTICLE, BODY, HDR, HEAD, OVER, STAT
  1.6671 -      Meaning: no article with that message-id.
  1.6672 -
  1.6673 -   Response code 435
  1.6674 -      Generated by: IHAVE (first stage)
  1.6675 -      Meaning: article not wanted.
  1.6676 -
  1.6677 -   Response code 436
  1.6678 -      Generated by: IHAVE (either stage)
  1.6679 -      Meaning: transfer not possible (first stage) or failed (second
  1.6680 -      stage); try again later.
  1.6681 -
  1.6682 -   Response code 437
  1.6683 -      Generated by: IHAVE (second stage)
  1.6684 -      Meaning: transfer rejected; do not retry.
  1.6685 -
  1.6686 -   Response code 440
  1.6687 -      Generated by: POST (first stage)
  1.6688 -      Meaning: posting not permitted.
  1.6689 -
  1.6690 -   Response code 441
  1.6691 -      Generated by: POST (second stage)
  1.6692 -      Meaning: posting failed.
  1.6693 -
  1.6694 -   Response code 480
  1.6695 -      Generic response
  1.6696 -      Meaning: command unavailable until the client has authenticated
  1.6697 -      itself.
  1.6698 -
  1.6699 -   Response code 483
  1.6700 -      Generic response
  1.6701 -      Meaning: command unavailable until suitable privacy has been
  1.6702 -      arranged.
  1.6703 -
  1.6704 -   Response code 500
  1.6705 -      Generic response
  1.6706 -      Meaning: unknown command.
  1.6707 -
  1.6708 -   Response code 501
  1.6709 -      Generic response
  1.6710 -      Meaning: syntax error in command.
  1.6711 -
  1.6712 -
  1.6713 -
  1.6714 -
  1.6715 -
  1.6716 -
  1.6717 -
  1.6718 -
  1.6719 -
  1.6720 -Feather                     Standards Track                   [Page 120]
  1.6721 -
  1.6722 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6723 -
  1.6724 -
  1.6725 -   Response code 502
  1.6726 -      Generic response and generated by initial connection
  1.6727 -
  1.6728 -      Meaning for the initial connection and the MODE READER command:
  1.6729 -      service permanently unavailable (the server immediately closes the
  1.6730 -      connection).
  1.6731 -
  1.6732 -      Meaning for all other commands: command not permitted (and there
  1.6733 -      is no way for the client to change this).
  1.6734 -
  1.6735 -   Response code 503
  1.6736 -      Generic response
  1.6737 -      Meaning: feature not supported.
  1.6738 -
  1.6739 -   Response code 504
  1.6740 -      Generic response
  1.6741 -      Meaning: error in base64-encoding [RFC4648] of an argument.
  1.6742 -
  1.6743 -Appendix D.  Changes from RFC 977
  1.6744 -
  1.6745 -   In general every attempt has been made to ensure that the protocol
  1.6746 -   specification in this document is compatible with the version
  1.6747 -   specified in RFC 977 [RFC977] and the various facilities adopted from
  1.6748 -   RFC 2980 [RFC2980].  However, there have been a number of changes,
  1.6749 -   some compatible and some not.
  1.6750 -
  1.6751 -   This appendix lists these changes.  It is not guaranteed to be
  1.6752 -   exhaustive or correct and MUST NOT be relied on.
  1.6753 -
  1.6754 -   o  A formal syntax specification (Section 9) has been added.
  1.6755 -
  1.6756 -   o  The default character set is changed from US-ASCII [ANSI1986] to
  1.6757 -      UTF-8 [RFC3629] (note that US-ASCII is a subset of UTF-8).  This
  1.6758 -      matter is discussed further in Section 10.
  1.6759 -
  1.6760 -   o  All articles are required to have a message-id, eliminating the
  1.6761 -      "<0>" placeholder used in RFC 977 in some responses.
  1.6762 -
  1.6763 -   o  The newsgroup name matching capabilities already documented in
  1.6764 -      RFC 977 ("wildmats", Section 4) are clarified and extended.  The
  1.6765 -      new facilities (e.g., the use of commas and exclamation marks) are
  1.6766 -      allowed wherever wildmats appear in the protocol.
  1.6767 -
  1.6768 -   o  Support for pipelining of commands (Section 3.5) is made
  1.6769 -      mandatory.
  1.6770 -
  1.6771 -
  1.6772 -
  1.6773 -
  1.6774 -
  1.6775 -
  1.6776 -Feather                     Standards Track                   [Page 121]
  1.6777 -
  1.6778 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6779 -
  1.6780 -
  1.6781 -   o  The principles behind response codes (Section 3.2) have been
  1.6782 -      tidied up.  In particular:
  1.6783 -
  1.6784 -      *  the x8x response code family, formerly used for private
  1.6785 -         extensions, is now reserved for authentication and privacy
  1.6786 -         extensions;
  1.6787 -
  1.6788 -      *  the x9x response code family, formerly intended for debugging
  1.6789 -         facilities, are now reserved for private extensions;
  1.6790 -
  1.6791 -      *  the 502 and 503 generic response codes (Section 3.2.1) have
  1.6792 -         been redefined;
  1.6793 -
  1.6794 -      *  new 401, 403, 480, 483, and 504 generic response codes have
  1.6795 -         been added.
  1.6796 -
  1.6797 -   o  The rules for article numbering (Section 6) have been clarified
  1.6798 -      (also see Section 6.1.1.2).
  1.6799 -
  1.6800 -   o  The SLAVE command (which was ill-defined) is removed from the
  1.6801 -      protocol.
  1.6802 -
  1.6803 -   o  Four-digit years are permitted in the NEWNEWS (Section 7.4) and
  1.6804 -      NEWGROUPS (Section 7.3) commands (two-digit years are still
  1.6805 -      permitted).  The optional distribution parameter to these commands
  1.6806 -      has been removed.
  1.6807 -
  1.6808 -   o  The LIST command (Section 7.6.1) is greatly extended; the original
  1.6809 -      is available as LIST ACTIVE, while new variants include
  1.6810 -      ACTIVE.TIMES, DISTRIB.PATS, and NEWSGROUPS.  A new "m" status flag
  1.6811 -      is added to the LIST ACTIVE response.
  1.6812 -
  1.6813 -   o  A new CAPABILITIES command (Section 5.2) allows clients to
  1.6814 -      determine what facilities are supported by a server.
  1.6815 -
  1.6816 -   o  The DATE command (Section 7.1) is adopted from RFC 2980
  1.6817 -      effectively unchanged.
  1.6818 -
  1.6819 -   o  The LISTGROUP command (Section 6.1.2) is adopted from RFC 2980.
  1.6820 -      An optional range argument has been added, and the 211 initial
  1.6821 -      response line now has the same format as the 211 response from the
  1.6822 -      GROUP command.
  1.6823 -
  1.6824 -   o  The MODE READER command (Section 5.3) is adopted from RFC 2980 and
  1.6825 -      its meaning and effects clarified.
  1.6826 -
  1.6827 -   o  The XHDR command in RFC 2980 has been formalised as the new HDR
  1.6828 -      (Section 8.5) and LIST HEADERS (Section 8.6) commands.
  1.6829 -
  1.6830 -
  1.6831 -
  1.6832 -Feather                     Standards Track                   [Page 122]
  1.6833 -
  1.6834 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6835 -
  1.6836 -
  1.6837 -   o  The XOVER command in RFC 2980 has been formalised as the new OVER
  1.6838 -      (Section 8.3) and LIST OVERVIEW.FMT (Section 8.4) commands.  The
  1.6839 -      former can be applied to a message-id as well as to a range.
  1.6840 -
  1.6841 -   o  The concept of article metadata (Section 8.1) has been formalised,
  1.6842 -      allowing the Bytes and Lines pseudo-headers to be deprecated.
  1.6843 -
  1.6844 -   Client authors should note in particular that lack of support for the
  1.6845 -   CAPABILITIES command is a good indication that the server does not
  1.6846 -   support this specification.
  1.6847 -
  1.6848 -
  1.6849 -
  1.6850 -
  1.6851 -
  1.6852 -
  1.6853 -
  1.6854 -
  1.6855 -
  1.6856 -
  1.6857 -
  1.6858 -
  1.6859 -
  1.6860 -
  1.6861 -
  1.6862 -
  1.6863 -
  1.6864 -
  1.6865 -
  1.6866 -
  1.6867 -
  1.6868 -
  1.6869 -
  1.6870 -
  1.6871 -
  1.6872 -
  1.6873 -
  1.6874 -
  1.6875 -
  1.6876 -
  1.6877 -
  1.6878 -
  1.6879 -
  1.6880 -
  1.6881 -
  1.6882 -
  1.6883 -
  1.6884 -
  1.6885 -
  1.6886 -
  1.6887 -
  1.6888 -Feather                     Standards Track                   [Page 123]
  1.6889 -
  1.6890 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6891 -
  1.6892 -
  1.6893 -Author's Address
  1.6894 -
  1.6895 -   Clive D.W. Feather
  1.6896 -   THUS plc
  1.6897 -   322 Regents Park Road
  1.6898 -   London
  1.6899 -   N3  2QQ
  1.6900 -   United Kingdom
  1.6901 -
  1.6902 -   Phone: +44 20 8495 6138
  1.6903 -   Fax:   +44 870 051 9937
  1.6904 -   EMail: clive@demon.net
  1.6905 -   URI:   http://www.davros.org/
  1.6906 -
  1.6907 -
  1.6908 -
  1.6909 -
  1.6910 -
  1.6911 -
  1.6912 -
  1.6913 -
  1.6914 -
  1.6915 -
  1.6916 -
  1.6917 -
  1.6918 -
  1.6919 -
  1.6920 -
  1.6921 -
  1.6922 -
  1.6923 -
  1.6924 -
  1.6925 -
  1.6926 -
  1.6927 -
  1.6928 -
  1.6929 -
  1.6930 -
  1.6931 -
  1.6932 -
  1.6933 -
  1.6934 -
  1.6935 -
  1.6936 -
  1.6937 -
  1.6938 -
  1.6939 -
  1.6940 -
  1.6941 -
  1.6942 -
  1.6943 -
  1.6944 -Feather                     Standards Track                   [Page 124]
  1.6945 -
  1.6946 -RFC 3977         Network News Transfer Protocol (NNTP)      October 2006
  1.6947 -
  1.6948 -
  1.6949 -Full Copyright Statement
  1.6950 -
  1.6951 -Copyright (C) The Internet Society (2006).
  1.6952 -
  1.6953 -   This document is subject to the rights, licenses and restrictions
  1.6954 -   contained in BCP 78, and except as set forth therein, the authors
  1.6955 -   retain all their rights.
  1.6956 -
  1.6957 -   This document and the information contained herein are provided on an
  1.6958 -   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
  1.6959 -   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
  1.6960 -   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
  1.6961 -   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
  1.6962 -   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
  1.6963 -   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  1.6964 -
  1.6965 -Intellectual Property
  1.6966 -
  1.6967 -   The IETF takes no position regarding the validity or scope of any
  1.6968 -   Intellectual Property Rights or other rights that might be claimed to
  1.6969 -   pertain to the implementation or use of the technology described in
  1.6970 -   this document or the extent to which any license under such rights
  1.6971 -   might or might not be available; nor does it represent that it has
  1.6972 -   made any independent effort to identify any such rights.  Information
  1.6973 -   on the procedures with respect to rights in RFC documents can be
  1.6974 -   found in BCP 78 and BCP 79.
  1.6975 -
  1.6976 -   Copies of IPR disclosures made to the IETF Secretariat and any
  1.6977 -   assurances of licenses to be made available, or the result of an
  1.6978 -   attempt made to obtain a general license or permission for the use of
  1.6979 -   such proprietary rights by implementers or users of this
  1.6980 -   specification can be obtained from the IETF on-line IPR repository at
  1.6981 -   http://www.ietf.org/ipr.
  1.6982 -
  1.6983 -   The IETF invites any interested party to bring to its attention any
  1.6984 -   copyrights, patents or patent applications, or other proprietary
  1.6985 -   rights that may cover technology that may be required to implement
  1.6986 -   this standard.  Please address the information to the IETF at ietf-
  1.6987 -   ipr@ietf.org.
  1.6988 -
  1.6989 -Acknowledgement
  1.6990 -
  1.6991 -   Funding for the RFC Editor function is provided by the IETF
  1.6992 -   Administrative Support Activity (IASA).
  1.6993 -
  1.6994 -
  1.6995 -
  1.6996 -
  1.6997 -
  1.6998 -
  1.6999 -
  1.7000 -Feather                     Standards Track                   [Page 125]
  1.7001 -