doc/RFC3977
changeset 36 c404a87db5b7
parent 1 6fceb66e1ad7
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/doc/RFC3977	Sun Aug 29 17:43:58 2010 +0200
     1.3 @@ -0,0 +1,6998 @@
     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 +