idnits 2.17.1 draft-ietf-nntpext-base-10.txt: ** The Abstract section seems to be numbered Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** Cannot find the required boilerplate sections (Copyright, IPR, etc.) in this document. Expected boilerplate is as follows today (2024-03-28) according to https://trustee.ietf.org/license-info : IETF Trust Legal Provisions of 28-dec-2009, Section 6.a: This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. IETF Trust Legal Provisions of 28-dec-2009, Section 6.b(i), paragraph 2: Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved. IETF Trust Legal Provisions of 28-dec-2009, Section 6.b(i), paragraph 3: This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- ** Missing document type: Expected "INTERNET-DRAFT" in the upper left hand corner of the first page ** The document seems to lack a 1id_guidelines paragraph about Internet-Drafts being working documents. ** The document seems to lack a 1id_guidelines paragraph about 6 months document validity -- however, there's a paragraph with a matching beginning. Boilerplate error? ** The document seems to lack a 1id_guidelines paragraph about the list of current Internet-Drafts -- however, there's a paragraph with a matching beginning. Boilerplate error? ** The document seems to lack a 1id_guidelines paragraph about the list of Shadow Directories. ** The document is more than 15 pages and seems to lack a Table of Contents. == No 'Intended status' indicated for this document; assuming Proposed Standard == The page length should not exceed 58 lines per page, but there was 61 longer pages, the longest (page 1) being 63 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an Abstract section. (A line matching the expected section header was found, but with an unexpected indentation: ' 2. Abstract' ) ** The document seems to lack a Security Considerations section. (A line matching the expected section header was found, but with an unexpected indentation: ' 14. Security Considerations' ) ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) ** The document seems to lack an Authors' Addresses Section. ** There are 408 instances of too long lines in the document, the longest one being 5 characters in excess of 72. ** The abstract seems to contain references ([2], [3], [4], [0-9a-zA-Z], [5], [6], [C], [7], [8], [9], [GMT], [S], [XX], [1]), which it shouldn't. Please replace those with straight textual mentions of the documents in question. == There are 6 instances of lines with non-RFC2606-compliant FQDNs in the document. == There are 3 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == Using lowercase 'not' together with uppercase 'MUST', 'SHALL', 'SHOULD', or 'RECOMMENDED' is not an accepted usage according to RFC 2119. Please use uppercase 'NOT' together with RFC 2119 keywords (if that is what you mean). Found 'SHOULD not' in this paragraph: The server SHOULD not produce output for articles that no longer exist. -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (July 2000) is 8657 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Missing reference section? '1' on line 3165 looks like a reference -- Missing reference section? '2' on line 3168 looks like a reference -- Missing reference section? '3' on line 3171 looks like a reference -- Missing reference section? '4' on line 3174 looks like a reference -- Missing reference section? '5' on line 3177 looks like a reference -- Missing reference section? '0-9a-zA-Z' on line 321 looks like a reference -- Missing reference section? '6' on line 3180 looks like a reference -- Missing reference section? 'C' on line 2880 looks like a reference -- Missing reference section? 'S' on line 2884 looks like a reference -- Missing reference section? '7' on line 3184 looks like a reference -- Missing reference section? '8' on line 3188 looks like a reference -- Missing reference section? 'GMT' on line 2837 looks like a reference -- Missing reference section? '9' on line 3192 looks like a reference Summary: 14 errors (**), 0 flaws (~~), 5 warnings (==), 15 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 INTERNET DRAFT S. Barber 3 Expires: January 15, 2001 Academ Consulting Services 4 July 2000 6 Network News Transport Protocol 8 draft-ietf-nntpext-base-10.txt 10 1. Status of this Document 12 This document is an Internet-Draft and is in full conformance 13 with Section 10 of RFC 2026. Internet-Drafts are working 14 documents of the Internet Engineering Task Force (IETF), its 15 areas, and its working groups. Note that other groups may 16 also distribute working documents as Internet-Drafts. 18 Internet-Drafts are draft documents valid for a maximum of six 19 months and may be updated, replaced, or made obsolete by other 20 documents at any time. It is inappropriate to use Internet- 21 Drafts as reference material or to cite them other than as 22 "work in progress." 24 The list of current Internet-Drafts can be accesses at 25 http://www.ietf.org/ietf/1id-abstracts.txt. 27 The list of Internet-Draft shadow directories can be accessed 28 at http://www.ietf.org/shadow.html. 30 This section will be updated with the appropriate verbiage 31 from RFC 2223 should this document has been found ready for 32 publication as an RFC. 34 This document is a product of the NNTP Working Group, chaired 35 by Ned Freed and Stan Barber. 37 2. Abstract 38 The Network News Transport Protocol has been in use in the 39 Internet for a decade and remains one of the most popular 40 protocols (by volume) in use today. This document is a 41 replacement for RFC 977 and officially updates the protocol 42 specification. It clarifies some vagueness in RFC 977, 43 includes some new base functionality and provides a specific 44 mechanism to add standardized extensions to NNTP. 46 3. Introduction 47 This document specifies the Network News Transport Protocol 48 (NNTP), which is used for the distribution, inquiry, 49 retrieval, and posting of net news articles using a reliable 50 stream-based mechanism. For news reading clients, NNTP enables 51 retrieval of news articles that are stored in a central 52 database, giving subscribers the ability to select only those 53 articles they wish to read. 55 The netnews model provides for indexing, cross-referencing, 56 and expiration of aged messages. For server-to-server 57 interaction, NNTP is designed for efficient transmission of 58 net news articles over a reliable full duplex communication 59 method. 61 Every attempt is made to insure that the protocol 62 specification in this document is compatible with the version 63 specified in RFC 977[1]. However, this version does not 64 support the ill-defined SLAVE command and permits four digit 65 years to be specified in the NEWNEWS and NEWGROUPS commands. 66 It changes the default character set to UTF-8[2] instead of 67 US-ASCII[3]. It also extends the newsgroup name matching 68 capabilities already documented in RFC 977. 70 Generally, new functionality is available using new keywords. 71 Part of that new functionality involves a mechanism to 72 discover what new functionality is available to clients from a 73 server. 75 This mechanism can also be used to add more functionality as 76 needs merit such additions. 78 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL 79 NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and 80 "OPTIONAL" in this document are to be interpreted as described 81 in RFC 2119[4]. 83 An implementation is not compliant if it fails to satisfy one 84 or more of the MUST requirements for this protocol. An 85 implementation that satisfies all the MUST and all the SHOULD 86 requirements for its protocols is said to be "unconditionally 87 compliant"; one that satisfies all the MUST requirements but 88 not all the SHOULD requirements for NNTP is said to be 89 "conditionally compliant". 91 For the remainder of this memo, the term "client host" refers 92 to a host making use of the NNTP service, while the term 93 "server host" refers to a host that offers the NNTP service. 94 In addition, where examples of interactions between a client 95 host and a server host are provided a "[C]" will be used to 96 represent the client host and a "[S]" will be used to 97 represent the server host. 99 4. Basic Operation. 101 Every NNTP session MUST involve the following in this order: 103 CONNECTION 104 GREETING 105 DISCONNECTION 107 Other steps may occur between the GREETING and DISCONNECTION 108 step. They are: 110 CAPABILITIES DISCOVERY 111 NEWS EXCHANGE 112 CONCLUSION 114 NNTP operates over any reliable data stream 8-bit-wide 115 channel. When running over TCP/IP, the official port for the 116 NNTP service is 119. Initially, the server host starts the 117 NNTP service by listening on a TCP port. When a client host 118 wishes to make use of the service, it MUST establish a TCP 119 connection with the server host by connecting to that host on 120 the same port on which the server is listening. This is the 121 CONNECTION step. When the connection is established, the NNTP 122 server host MUST send a greeting. This is the GREETING step. 123 The client host and server host SHOULD then exchange commands 124 and responses (respectively) until the connection is closed or 125 aborted. This final step is called the DISCONNECTION step. 127 If there is a CONCLUSION step, it MUST immediately precede the 128 DISCONNECTION step. There MUST be only one CONNECTION, 129 CONCLUSION and DISCONNECTION step for each NNTP session. All 130 other steps MAY be repeated as needed. For example, the 131 GREETING step may be repeated if the client makes use of the 132 MODE READER command (See Section 7.1.2 for more on the MODE 133 READER command). 135 The character set for all NNTP commands is UTF-8. Commands in 136 the NNTP MUST consist of an US-ASCII case-insensitive keyword, 137 which MAY be followed by one or more arguments. An US-ASCII 138 CRLF pair MUST terminate all commands. Multiple commands MUST 139 NOT be on the same line. Keywords MUST consist of printable 140 US-ASCII characters. Unless otherwise noted elsewhere in this 141 document, arguments SHOULD consist of printable US-ASCII 142 characters. Keywords and arguments MUST be each separated by 143 one or more US-ASCII SPACE or US-ASCII TAB characters. 144 Keywords MUST be at least three US-ASCII characters and MUST 145 NOT exceed 12 US-ASCII characters. Command lines MUST NOT 146 exceed 512 octets, which includes the terminating US-ASCII 147 CRLF pair. Arguments MUST NOT exceed 497 octets. 149 Each response MUST start with a three-digit response code that 150 is sufficient to distinguish all responses. Unless 151 specifically specified as one of the valid responses for a 152 command (such as those described later in this document), each 153 response is contained in a single line. However, certain 154 responses from commands may be multi-line. All multi-line 155 responses MUST adhere to the following format: After sending 156 the first line of the response and an US-ASCII CRLF, any 157 additional lines are sent, each terminated by an US-ASCII CRLF 158 pair. When all lines of the response have been sent, a final 159 line MUST be sent, consisting of a termination octet (US-ASCII 160 decimal code 046, ".") and an US-ASCII CRLF pair. If any line 161 of the multi-line response begins with the termination octet, 162 the line MUST be "byte-stuffed" by pre-pending the termination 163 octet to that line of the response. Hence, a multi-line 164 response is terminated with the five octets "CRLF.CRLF" (in 165 US-ASCII). When examining a multi-line response, the client 166 MUST check to see if the line begins with the termination 167 octet. If so and if octets other than US-ASCII CRLF follow, 168 the first octet of the line (the termination octet) MUST be 169 stripped away. If so and if US-ASCII CRLF immediately follows 170 the termination character, then the response from the NNTP 171 server is ended and the line containing ".CRLF" (in US-ASCII) 172 MUST NOT considered part of the multi-line response. The 173 keywords that support multi-line responses have the format of 174 those responses described in the responses section. 176 A NNTP server MAY have an inactivity autologout timer. Such a 177 timer MUST be of at least three minutes duration. The receipt 178 of any command from the client during that interval SHOULD 179 suffice to reset the autologout timer. When the timer 180 expires, the server should close the TCP connection without 181 sending any response to the client. 183 4.1 Response Codes 185 Each response MUST begin with a three-digit status indicator. 186 These are status reports from the server and indicate the 187 response to the last command received from the client. 189 The first digit of the response broadly indicates the success, 190 failure, or progress of the previous command. 192 1xx - Informative message 193 2xx - Command ok 194 3xx - Command ok so far, send the rest of it. 195 4xx - Command was correct, but couldn't be performed for some 196 reason. 197 5xx - Command unimplemented, or incorrect, or a serious 198 program error occurred. 199 The next digit in the code indicates the function response 200 category. 202 x0x - Connection, setup, and miscellaneous messages 203 x1x - Newsgroup selection 204 x2x - Article selection 205 x3x - Distribution functions 206 x4x - Posting 207 x8x - Nonstandard (private implementation) extensions 208 x9x - Debugging output 209 The exact response codes that can be returned in response to a 210 given command are detailed in the description of the keyword 211 that is the first part of the command. In addition, there is a 212 debugging set of response codes that MAY be received at any 213 time. These are described later in this section. 215 Certain response codes contain parameters such as numbers and 216 names in addition to the status indicator. In those cases, the 217 number and type of such parameters MUST be fixed for each 218 response code to simplify interpretation of the response. In 219 all other cases, the client MUST only use the status indicator 220 itself to determine the nature of the response. 222 Parameters MUST be separated from the numeric status indicator 223 and from each other by a single US-ASCII space. All numeric 224 parameters MUST be in base 10 (decimal) format, and MAY have 225 leading zeros. All string parameters MUST begin after the 226 separating space, and MUST end before the following separating 227 space or the US-ASCII CRLF pair at the end of the line. 228 (Therefore, string parameters MUST NOT contain US-ASCII 229 spaces.) All text, if any, in the response which is not a 230 parameter of the response must follow and be separated from 231 the last parameter by an US-ASCII space. Also, note that the 232 text following a response number may vary in different 233 implementations of the server. The 3-digit numeric status 234 indicator should be used to determine what response was sent. 236 Response codes not specified in this standard MAY be used for 237 any installation-specific additional commands also not 238 specified. These SHOULD be chosen to fit the pattern of x8x 239 specified above. (Note that debugging is provided for 240 explicitly in the x9x response codes.) 242 The use of unspecified response codes for a standard command 243 is prohibited. 245 The status indicator pattern x9x is provided for debugging. 246 Since much debugging output may be classed as "informative 247 messages", it MUST be the case that responses 190 through 199 248 WILL be used for various debugging outputs. There is no 249 requirement in this specification for debugging output. 250 However, if such is provided over the connected stream, it 251 MUST use these response codes. If appropriate to a specific 252 implementation, other x9x codes MAY be used for debugging. 253 (For example, response code 290 could be used to acknowledge a 254 remote debugging request.) By default, a server implementation 255 MUST NOT send debugging responses. Such behavior MUST only 256 occur when specifically activated. See section XX for 257 information on the DEBUG command. 259 A server MUST respond to an unrecognized, unimplemented, or 260 syntactically invalid command with a negative response code 261 (status indicators of the form 5XX). For unrecognized 262 commands, the 500 response code MUST be returned. This 263 includes servers that have not implemented the optional 264 extensions outlined later in this memo. For recognized 265 commands where the syntax is wrong, the 501 response code MUST 266 be returned. A server MUST respond to a command issued when 267 the session is in an incorrect state by responding with a 268 negative status indicator. This may be from either the 4XX or 269 5XX group as appropriate. 271 5. The WILDMAT format 273 The WILDMAT format[5] described here is based on the version 274 first developed by Rich Salz which was derived from the format 275 used in the UNIX "find" command to articulate file names. It 276 was developed to provide a uniform mechanism for matching 277 patterns in the same manner that the UNIX shell matches 278 filenames. Patterns are implicitly anchored at the beginning 279 and end of each string when testing for a match. There are 280 five pattern-matching operations other than a strict one-to- 281 one match between the pattern and the source to be checked for 282 a match. The first is an asterisk (*) to match any sequence of 283 zero or more UTF-8 characters. The second is a question mark 284 (?) to match any single UTF-8 character. The third specifies a 285 specific set of characters. The set is specified as a list of 286 characters, or as a range of characters where the beginning 287 and end of the range are separated by a minus (or dash) 288 character, or as any combination of lists and ranges. The dash 289 can also be included in the set as a character it if is the 290 beginning or end of the set. This set is enclosed in square 291 brackets. The close square bracket (]) may be used in a set if 292 it is the first character in the set. The fourth operation is 293 the same as the logical not of the third operation and is 294 specified the same way as the third with the addition of a 295 caret character (^) at the beginning of the test string just 296 inside the open square bracket. The final operation uses the 297 backslash character to invalidate the special meaning of the 298 open square bracket ([), the asterisk, backslash, or the 299 question mark. Two backslashes in sequence will result in the 300 evaluation of the backslash as a character with no special 301 meaning. 303 Implementers must be careful to apply the pattern-matching 304 operators to whole characters encoded in UTF-8, and not two 305 individual octets. 307 5.1 Negating the wildmat pattern 309 The exclamation point can be used at the beginning of a wildmat 310 to negate it. That is, if the remainder of the pattern would 311 match the string then the negated pattern does not, and vice 312 versa. If it appears as any other character other than the first 313 one, it has no special meaning. 315 5.2 Examples 317 a) [^]-] -- matches any single character other than a 318 close square bracket or a minus sign/dash. 319 b) *bdc -- matches any string that ends with the string 320 "bdc" including the string "bdc" (without quotes). 321 c) [0-9a-zA-Z] -- matches any single printable 322 alphanumeric ASCII character. 323 d) a??d -- matches any four character string which 324 begins with a and ends with d. 325 e)!bc*d -- matches any string that does not start with 326 "bc" and end with "d" (without quotes) 327 f)!\\x -- matches any string that does not start with 328 "\x" (without quotes) 330 6. Format for Keyword Descriptions 332 On the following pages are descriptions of each keyword 333 recognized by the NNTP server and the responses that will be 334 returned by those commands. These keywords are grouped by the 335 functional step in which they are used. 337 Each keyword is shown in upper case for clarity, although the 338 NNTP server ignores case in the interpretation of commands. 339 Any parameters are shown in lower case. A parameter shown in 340 [square brackets] is optional. For example,[wildmat] indicates 341 that a wildmat may be present or omitted. A parameter that may 342 be repeated is followed by an ellipsis. Mutually exclusive 343 parameters are separated by a vertical bar (|) character. For 344 example, ggg| indicates that a group name or a 345 may be specified, but not both. Unless stated 346 otherwise, a parameter name in lowercase represents a token 347 described elsewhere, while one in uppercase is a literal 348 string that is included as written. Some parameters may be 349 case or language specific. See RFC 1036[6] for these details. 351 In addition, certain commands make use of a pattern for 352 selection of multiple news groups. The pattern in all cases is 353 based on the WILDMAT format. Arguments expected to be in 354 wildmat format will be represented by the string wildmat. This 355 format is discussed in detail in section 5 of this memo. 357 7. The GREETING Step 359 7.1 Initial Connection 361 There is no keyword presented by the client upon initial 362 connection to the server. The server MUST present an 363 appropriate response code as a greeting to the client. This 364 response informs the client about what steps the client should 365 take to reach the news exchange step. 367 If the server will accept further commands from the client 368 including POST, the server MUST present a 200 greeting code. 370 If the server will accept further commands from the client, 371 but it is not authorized to post articles using the POST 372 command, the server MUST present a 201 greeting code. 374 Otherwise the server MUST present a 400 or 504 greeting code 375 and then immediately close the connection. 504 MUST be used if 376 the client is not permitted under any circumstances to 377 interact with the server and 400 otherwise. 379 7.1.1 Initial Connection Example 381 Example of a normal connection from an authorized client 383 [C] Initial TCP connection completed 385 [S] 200 NNTP Service Ready, posting permitted 387 Client can send commands at this point. In this example, the 388 client jumps directly to the conclusion step (See section 389 10.1). 391 [C] QUIT 393 [S] 205 NNTP Service exits normally 395 Example of a normal connection from an unauthorized client 397 [C] Initial TCP connection completed 399 [S] 504 NNTP Service Unavailable 401 At this point, the server closes the TCP connection. 403 Example of a normal connection from an authorized client that 404 is not permitted to post 406 [C] Initial TCP connection completed 408 [S] 201 NNTP Service Ready, posting prohibited 410 Client can send commands at this point. In this example, the 411 client jumps directly to the conclusion step (See section 412 10.1). 414 [C] QUIT 416 [S] 205 NNTP Service exits normally 418 Example of a connection from any client where the server is 419 unable to provide service 421 [C] Initial TCP connection completed 423 [S] 400 NNTP Service temporarily unavailable 425 At this point, the server closes the TCP connection. 427 7.1.2 MODE READER 429 MODE READER 431 MODE READER MAY be used by the client to indicate to the 432 server that it is a news reading client. This command may be 433 entered at any time. The server MUST present a greeting code 434 (as described in section 7.1.2.1) appropriate to the server's 435 ability to provide service to this client in this mode. 437 7.1.2.1 Responses 438 200 Hello, you can post 439 201 Hello, you can't post 440 400 Service temporarily unavailable 441 502 Service unavailable 443 7.1.2.2 MODE READER Examples 445 Example of use of the MODE READER command by an authorized 446 client 448 [C] MODE READER 450 [S] 200 NNTP Service Ready, posting permitted 452 Client can send commands at this point. In this example, the 453 client jumps directly to the conclusion step (See section 454 10.1). 456 [C] QUIT 458 [S] 205 NNTP Service exits normally 460 Example of use of MODE READER by a client not authorized to 461 receive service from the server as a news reader 463 [C] MODE READER 465 [S] 502 Service Unavailable 467 At this point, the server closes the TCP connection. 469 Example of a normal connection from an authorized client that 470 is not permitted to post 472 [C] MODE READER 474 [S] 201 NNTP Service Ready, posting prohibited 476 Client can send commands at this point. In this example, the 477 client jumps directly to the conclusion step (See section 478 10.1). 480 [C] QUIT 482 [S] 205 NNTP Service exits normally 484 Example of a connection from any client where the server is 485 unable to provide news reader service 487 [C] MODE READER 489 [S] 400 NNTP Service temporarily unavailable 491 At this point, the server closes the TCP connection. 493 8. The CAPABILITIES DISCOVERY Step 495 A client NNTP supporting NNTP service extensions should query 496 a server early in the session for extensions session by 497 issuing the LIST EXTENSIONS command. If the NNTP server 498 supports the NNTP service extensions it MUST give a successful 499 response (see section 8.1.1), a failure response (see section 500 8.1.2), or an error response (see section 8.1.3). If the NNTP 501 server does not support any NNTP service extensions, it MUST 502 generate an error response (see section 8.1.4). 504 8.1 LIST EXTENSIONS 506 If successful, the server NNTP MUST respond with code 202. On 507 failure, the server NNTP MUST respond with code 503. On error, 508 the server NNTP MUST respond with one of codes 400, 402, 500, 509 501 and 502. 511 This command MAY be issued at anytime during a session. It is 512 not required that the client issues this command before 513 attempting to make use of any extension. The response 514 generated by this command MAY change during a session because 515 of other state information. However, a client NNTP MUST NOT 516 cache (for use in another session) any information returned if 517 the LIST EXTENSIONS command succeeds. That is, a client NNTP 518 is only able to get the current and correct information 519 concerning available extensions during a session by issuing a 520 LIST EXTENSIONS command during that session and processing 521 that response. 523 8.1.1 Successful response 525 If the server NNTP implements and is able to perform the LIST 526 EXTENSIONS command, it MUST return code 202. 528 Text following the return code on the first line of the reply 529 is free form, and not interpreted, and has no practical use, 530 as this text is not expected to be revealed to end users. The 531 syntax of other reply lines is precisely defined, and if 532 present, MUST be exactly as specified. 534 Each line listing an extension in the extension-listing begins 535 with a single space. That space IS NOT optional, nor does it 536 indicate general white space. This space guarantees that the 537 line can never be misinterpreted as the end of the extension- 538 listing, but is required even where there is no possibility of 539 ambiguity. 541 Each extension supported MUST be listed on a separate line to 542 facilitate the possible inclusion of parameters supported by 543 each extension command. The extension-label to be used in the 544 response to the LIST EXTENSIONS command will be specified as 545 each new extension is added to the NNTP command set. Often it 546 will be the name of a new command added; however this IS NOT 547 required. In fact, it IS NOT required that a new feature 548 actually adds a new command or keyword. Any parameters 549 included are to be specified with the definition of the 550 command concerned. 552 That specification SHALL also specify how any parameters 553 present are to be interpreted and how each parameter is 554 separated from other parameters. 556 The extension-label is nominally case insensitive, however the 557 definitions of specific labels and parameters specify the 558 precise interpretation, and it is to be expected that those 559 definitions will usually specify the label in a case 560 independent manner. Where this is done, implementations are 561 recommended to use US-ASCII upper case letters when 562 transmitting the extension response. 564 Except where stated otherwise, the commands in this document 565 are understood (even if not supported) by all servers and are 566 not described in the list of features returned by the LIST 567 EXTENSIONS command. 569 The end of the list is defined by the usual period on a line 570 by itself. 572 A typical example reply to the LIST EXTENSIONS command might 573 be a multiline reply of the form: 575 [C] LIST EXTENSIONS 577 [S] 202 Extensions supported: 579 [S] OVER 581 [S] PAT 583 [S] LISTGROUP 585 [S] . 587 The particular extensions shown here are simply examples of 588 what may be defined in other places, no particular meaning 589 should be attributed to them. Recall also, that the extension 590 names returned are not command names, as such, but simply 591 indications that the server possesses some attribute or other. 593 The order in which the extensions are returned is of no 594 importance, NNTP server processes are not required to 595 implement any particular order, or even to consistently return 596 the same order when the command is repeated. 598 8.1.2 Failure response 600 If for some reason the server NNTP is unable to list the 601 service extensions it supports, it MUST return code 503. No 602 list (not even an empty one) will be returned. 604 In the case of a failure response, the client NNTP may try the 605 extensions either as the need arises or configure itself for 606 the basic NNTP functionality defined in this document. 608 8.1.3 Error responses from extended servers 610 If the server NNTP recognizes the LIST EXTENSIONS command, but 611 due to various conditions cannot make any extensions available 612 to the client at the time the client issued the LIST 613 EXTENSIONS command, it MUST return code 402. No list (not even 614 an empty one) will be returned. 616 The client NNTP should configure itself for the basic NNTP 617 functionality defined in this document, or issue commands that 618 might change the state of the server, or issue the QUIT 619 command (see section 10.1) if a particular extension is 620 required for the client to properly operate. 622 If the server NNTP determines that the NNTP service is no 623 longer available (e.g., due to imminent system shutdown), it 624 must return code 400. Note that this response code should not 625 be generated due to an inactivity timeout as described in 626 section 4. 628 In the case of any error response outlined in this section, 629 the client NNTP should issue the QUIT command (see section 630 10.1). This will facilitate an orderly shutdown of the 631 session. 633 8.1.4 Responses from servers without extensions 635 A server NNTP that conforms to this memo but does not support 636 the extensions specified here will not recognize the LIST 637 EXTENSIONS command and MUST consequently return code 500 or 638 code 501. The server NNTP SHALL stay in the same state after 639 returning this code. The client NNTP may try the extensions 640 either as the need arises or configure itself for the basic 641 NNTP functionality defined in this document. 643 8.1.5 Responses from improperly implemented servers 645 A server NNTP that improperly implements the LIST EXTENSIONS 646 command may return an empty list. Clients SHOULD accommodate 647 this protocol violation and interpret it as a response code 648 402. 650 The client NNTP should configure itself for the basic NNTP 651 functionality defined in this document, or issue commands that 652 might change the state of the server, or issue the QUIT 653 command (see section 10.1) if a particular extension is 654 required for the client to properly operate. 656 9. The NEWS EXCHANGE Step 658 During this step, two basic types of transactions occur: 660 . article retrieval from the server 661 . article posting to the server 663 9.1 Article Retrieval 665 News reading clients have available a variety of mechanisms to 666 retrieve articles via NNTP. The news articles are stored and 667 indexed using three types of keys. One key is the message id 668 of an article. According to RFC 1036, this identifier should 669 be globally unique. Another key is composed of the news group 670 name and the article number within that news group. That key 671 MUST be unique to a particular server (there will be only one 672 article with that number within a particular news group), but 673 is not required to be globally unique. Additionally, because 674 the same article can be cross-posted to multiple news groups, 675 there may be multiple keys that point to the same article on 676 the same server. The final key is the arrival timestamp, 677 giving the time that the article arrived at the server. 679 The server MUST ensure that article numbers are issued in 680 order of arrival timestamp; that is, articles arriving later 681 MUST have higher numbers than those that arrive earlier. The 682 server SHOULD allocate the next sequential unused number to 683 each new article. 685 Article numbers MUST lie between 1 and 4,294,967,295 686 inclusive. The client and server SHOULD NOT use leading zeroes 687 in specifying article numbers, and MUST NOT use more than 16 688 digits. In some situations, the value zero replaces an article 689 number to show some special situation. 691 9.1.1 Article Retrieval by News Group Name and Article Number 693 The following commands are used to set the current news group 694 name and the "current article pointer" which is used by other 695 commands for article retrieval. At the start of a NNTP 696 session, both of these values are undefined. 698 9.1.1.1 GROUP 700 GROUP ggg 702 The required parameter ggg is the name of the news group to be 703 selected (e.g. "news.software.b"). A list of valid news groups 704 may be obtained by using the LIST keyword. See section 9.4 705 for more information on the LIST keyword. 707 The successful selection response will return the article 708 numbers of the first and last articles in the group at the 709 moment of selection (these numbers are referred to as the 710 "reported low water mark" and the "reported high water mark"), 711 and an estimate of the number of articles on file in the 712 group. 714 If the group is not empty, the estimate MUST be at least the 715 actual number of articles available, and MUST be no greater 716 than one more than the difference between the reported low and 717 high water marks. (Some implementations will actually count 718 the number of articles on file. Others will just subtract the 719 low water mark from the high water mark and add one to get an 720 estimate.) 722 If the group is empty, one of the following three situations 723 will occur. Clients MUST accept all three cases; servers MUST 724 NOT represent an empty group in any other way. 726 . The high water mark will be one less than the low water mark, 727 and the estimated article count will be zero. Servers SHOULD 728 use this method to show an empty group. This is the only time 729 that the high water mark can be less than the low water mark. 730 . All three numbers will be zero. 731 . The high water mark is greater than or equal to the low water 732 mark; the estimated article count might be zero or non-zero; 733 if non-zero, the same requirements apply as for a non-empty 734 group. 736 The set of articles in a group may change after the GROUP 737 command is carried out. That is: 739 . articles may be removed from the group 740 . articles may be reinstated in the group with the same article 741 number, but those articles MUST have numbers no less than the 742 reported low water mark (note that this is a reinstatement of 743 the previous article, not a new article reusing the number) 744 . new articles may be added with article numbers greater than 745 the reported high water mark (if an article that was the one 746 with the highest number has been removed, the next new article 747 will not have the number one greater than the reported high 748 water mark) 750 Except when the group is empty and all three numbers are zero, 751 whenever a subsequent GROUP command for the same news group is 752 issued, either by the same client or a different client, the 753 reported low water mark in the response MUST be no less than 754 that in any previous response for that news group sent to any 755 client. The client may make use of the low water mark to 756 remove all remembered information about articles with lower 757 numbers, as these will never recur. This includes the 758 situation when the high water mark is one less than the low 759 water mark. 761 No similar assumption can be made about the high water mark, 762 as this can decrease if an article is removed, and then 763 increase again if it is reinstated or if new articles arrive. 765 When a valid group is selected by means of this command, the 766 internally maintained "current article pointer" MUST be set to 767 the first article in the group and the name of the current 768 news group MUST be set to the selected news group name. If an 769 invalid group is specified, the previously selected group, if 770 any, and article MUST remain selected. If an empty news group 771 is selected, the "current article pointer" is in an 772 indeterminate state and MUST NOT be used. 774 The GROUP keyword (or the LISTGROUP keyword, if implemented) 775 MUST be used by a client and a successful response received 776 before the any other command is used that depends on having 777 the "current article pointer" be valid. 779 9.1.1.1.1 Responses 781 211 n f l s group selected 782 (n = estimated number of articles in group, f = first 783 article number in the group, l = last article number in 784 the group, s = name of the group.) 785 411 no such news group 787 9.1.1.1.2 GROUP Examples 789 Example for a group known to the server 791 [C] GROUP misc.test 793 [S] 211 1234 3000234 3002322 misc.test 795 Example for a group unknown to the server 797 [C] GROUP example.is.sob.bradner.or.barber 799 [S] 411 example.is.sob.bradner.or.barber is unknown 801 9.1.1.2 LAST 803 LAST 805 If the current news group is valid, the internally maintained 806 "current article pointer" MUST be set to the previous article 807 in the current news group. If already positioned at the first 808 article of the news group, an error message MUST be returned 809 and the current article MUST remain selected. 811 There MAY be no previous article in the group, although the 812 current article number is not the reported low water mark. 813 There MUST NOT be a previous article when the current article 814 number is the reported low water mark. 816 Because articles can be removed and added, the results of 817 multiple LAST and NEXT commands MAY not be consistent over the 818 life of a particular NNTP session. 820 If successful, a response indicating the current article 821 number and a message-id string MUST be returned. No article 822 text is sent in response to this command. 824 9.1.1.2.1 Responses 826 223 n a article retrieved - request text separately (n = 827 article number, a = unique article id) 828 412 no news group selected 829 420 no current article has been selected 830 422 no previous article in this group 832 9.1.1.2.2 LAST Examples 834 Example of a successful article retrieval using LAST 835 [S] 200 NNTP Service Ready 837 [C] GROUP misc.test 839 [S] 211 1234 3000234 3002322 misc.test 841 [C] NEXT 843 [S] 223 3000237 <668929@domain.com> retrieved 845 [C] LAST 847 [S] 223 3000234 <45223423@to.to> retrieved 849 Example of an attempt to retrieve an article without having 850 selected a group (via the GROUP command) first 852 [S] 200 NNTP Service ready 854 [C] LAST 856 [S] 412 no newsgroup selected 857 Example of an attempt to retrieve an article using the LAST 858 command when the current article pointer is pointing at the 859 first article in the group 861 [S] 200 NNTP Service Ready 863 [C] GROUP misc.test 865 [S] 211 1234 3000234 3002322 misc.test 867 [C] LAST 869 [S] 422 No previous article to retrieve 871 Example of an attempt to retrieve an article using the LAST 872 command when the current group selected is empty 874 [S] 200 NNTP Service Ready 876 [C] GROUP example.empty.newsgroup 878 [S] 211 0 0 0 example.empty.newsgroup 880 [C] LAST 882 [S] 420 No current article selected 884 9.1.1.3 NEXT 886 NEXT 888 If the current news group is valid, the internally maintained 889 "current article pointer" MUST be advanced to the next article 890 in the current news group. If no more articles remain in the 891 current group, an error message MUST be returned and the 892 current article MUST remain selected. 894 If successful, a response indicating the current article 895 number and the message-id string MUST be returned. No article 896 text is sent in response to this command. 898 9.1.1.3.1 Responses 900 223 n a article retrieved - request text separately (n = 901 article number, a = unique article id) 902 412 no news group selected 903 420 no current article has been selected 904 421 no next article in this group 905 9.1.1.3.2 NEXT Examples 907 Example of a successful article retrieval using NEXT 908 [S] 200 NNTP Service Ready 910 [C] GROUP misc.test 912 [S] 211 1234 3000234 3002322 misc.test 914 [C] NEXT 916 [S] 223 3000237 <668929@domain.com> retrieved 918 Example of an attempt to retrieve an article without having 919 selected a group (via the GROUP command) first 921 [S] 200 NNTP Service ready 923 [C] NEXT 925 [S] 412 no newsgroup selected 927 Example of an attempt to retrieve an article using the NEXT 928 command when the current article pointer is pointing at the 929 last article in the group 931 [S] 200 NNTP Service Ready 933 [C] GROUP misc.test 935 [S] 211 1234 3000234 3002322 misc.test 937 [C] ARTICLE 3002322 939 [S] 220 3002322 <411@whitehouse.gov> retrieved 941 [S] Path: pathost!demo!whitehouse!not-for-mail 943 [S] From: nobody@whitehouse.gov(Demo User) 945 [S] Newsgroups: misc.test 947 [S] Subject: I am just a test article 949 [S] Date: 6 Oct 1998 04:38:40 -0500 951 [S] Organization: The White House, Washington, DC 953 [S] Message-ID: <411@whitehouse.gov> 955 [S] 957 [S] This is just a test article. 959 [S] . 961 [C] NEXT 963 [S] 422 No next article to retrieve 965 Example of an attempt to retrieve an article using the NEXT 966 command when the current group selected is empty 968 [S] 200 NNTP Service Ready 970 [C] GROUP example.empty.newsgroup 972 [S] 211 0 0 0 example.empty.newsgroup 974 [C] NEXT 976 [S] 420 No current article selected 978 9.2 Retrieval of Articles and Article Sections 980 There are two forms to the ARTICLE command (and the related 981 BODY, HEAD, and STAT commands), each using a different method 982 of specifying the article to be retrieved. The first form 983 specifies the article by using an argument which consists of a 984 message-id in angle brackets ("<" and ">"). The article number 985 specified in the response to this form of the command must be 986 zero. The second form requires that the current news group be 987 valid and specifies the message by using a numeric parameter 988 or no parameter at all. 990 An article, as defined by RFC 1036, consists of two parts: the 991 article headers and the article body. When responding to an 992 article command, the server returns the entire article 993 contents and does not attempt to alter or translate them in 994 any way. 996 9.2.1 ARTICLE 998 ARTICLE [|nnn] 1000 This response displays the header, a blank line, then the body 1001 (text) of the specified article. The optional parameter nnn is 1002 the numeric id of an article in the current news group and 1003 should be chosen from the range of articles provided when the 1004 news group was selected. If it is omitted, the current 1005 article is assumed. Message-id is the message id of an article 1006 as shown in that article's header. 1008 The internally maintained "current article pointer" MUST NOT 1009 be altered when the message-id argument is used. This is both 1010 to facilitate the presentation of articles that may be 1011 referenced within an article being read, and because of the 1012 semantic difficulties of determining the proper sequence and 1013 membership of an article which may have been posted to more 1014 than one news group. 1016 When a valid article number is specified as the argument, the 1017 internally-maintained "current article pointer" MUST be set to 1018 point to retrieve article. This includes the case when an 1019 article number is implied by the use of no argument. 1021 A previously valid article number MAY become invalid if the 1022 article has been removed. A previously invalid article number 1023 MAY become valid if the article has been reinstated, but such 1024 an article number MUST be no less than the reported low water 1025 mark for that group. 1027 If there is a valid article to present in a reply to this 1028 command, a response indicating the current article number (or 1029 zero when the message-id argument is used), a message-id 1030 string, and that text is to follow MUST be returned. 1032 The message-id string is an identification string contained 1033 within angle brackets ("<" and ">"), which is derived from the 1034 header of the article itself. The Message-ID header line 1035 (required by RFC 1036) from the article must be used to supply 1036 this information. If the message-id header line is missing 1037 from the article, a single digit "0" (zero) should be supplied 1038 within the angle brackets. 1040 Since the message-id field is unique for each article, it may 1041 be used by a news reading program to skip duplicate displays 1042 of articles that have been posted more than once, or to more 1043 than one news group. 1045 9.2.1.1 Responses 1046 220 n article retrieved - head and body follow (n = 1047 article number, = message-id) 1048 412 no news group has been selected 1049 420 no current article has been selected 1050 423 no such article number in this group 1051 430 no such article found 1052 502 Service unavailable 1053 9.2.1.2 Examples 1054 Example of a successful retrieval of an article (using no 1055 article number) 1057 [S] 200 NNTP Service Ready 1059 [C] GROUP misc.test 1061 [S] 211 1234 3000234 3002322 misc.test 1063 [C] ARTICLE 1065 [S] 220 3000234 <45223423@to.to> 1067 [S] Path: pathost!demo!somewhere!not-for-mail 1069 [S] From: nobody@nowhere.to (Demo User) 1071 [S] Newsgroups: misc.test 1073 [S] Subject: I am just a test article 1075 [S] Date: 6 Oct 1998 04:38:40 -0500 1077 [S] Organization: Nowhere, To 1079 [S] Message-ID: <45223423@to.to> 1081 [S] 1083 [S] This is just a test article. 1085 [S] . 1087 Example of a successful retrieval of an article by message-id 1089 [S] 200 NNTP Service Ready 1091 [C] ARTICLE <45223423@to.to> 1093 [S] 220 0 <45223423@to.to> 1095 [S] Path: pathost!demo!somewhere!not-for-mail 1097 [S] From: nobody@nowhere.to (Demo User) 1099 [S] Newsgroups: misc.test 1101 [S] Subject: I am just a test article 1103 [S] Date: 6 Oct 1998 04:38:40 -0500 1105 [S] Organization: Nowhere, To 1107 [S] Message-ID: <45223423@to.to> 1109 [S] 1111 [S] This is just a test article. 1113 [S] . 1115 Example of an unsuccessful retrieval of an article by message- 1116 id 1118 [S] 200 NNTP Service Ready 1120 [C] ARTICLE 1122 [S] 430 No Such Article Found 1124 Example of an unsuccessful retrieval of an article by number 1126 [S] 200 NNTP Service Ready 1128 [C] GROUP misc.test 1130 [S] 211 1234 3000234 3002322 news.groups 1132 [C] ARTICLE 300256 1134 [S] 423 No such article number in this group 1136 Example of an unsuccessful retrieval of an article by number 1137 because no news group was selected first 1139 [S] 200 NNTP Service Ready 1141 [C] ARTICLE 300256 1143 [S] 412 No news group selected 1145 Example of an attempt to retrieve an article when the current 1146 group selected is empty 1148 [S] 200 NNTP Service Ready 1150 [C] GROUP example.empty.newsgroup 1152 [S] 211 0 0 0 example.empty.newsgroup 1154 [C] ARTICLE 1156 [S] 420 No current article selected 1158 Example of a failure due to the service being unavailable 1160 [S] 200 NNTP Service Ready 1162 [C] ARTICLE 1164 [S] 502 Service unavailable 1166 9.2.2 HEAD 1167 HEAD [|nnn] 1169 This response displays the header of the specified article. 1170 The optional parameter nnn is the numeric id of an article in 1171 the current news group and should be chosen from the range of 1172 articles provided when the news group was selected. If it is 1173 omitted, the current article is assumed. Message-id is the 1174 message id of an article as shown in that article's header. 1176 The internally maintained "current article pointer" MUST NOT 1177 be altered when the message-id argument is used. This is both 1178 to facilitate the presentation of articles that may be 1179 referenced within an article being read, and because of the 1180 semantic difficulties of determining the proper sequence and 1181 membership of an article which may have been posted to more 1182 than one news group. 1184 When a valid article number is specified as the argument, the 1185 internally-maintained "current article pointer" MUST be set to 1186 point to the retrieved article. This includes the case when an 1187 article number is implied by the use of no argument. 1189 A previously valid article number MAY become invalid if the 1190 article has been removed. A previously invalid article number 1191 MAY become valid if the article has been reinstated, but such 1192 an article number MUST be no less than the reported low water 1193 mark for that group. 1195 If there is a valid article to present in a reply to this 1196 command, a response indicating the current article number (or 1197 zero when the message-id argument is used), a message-id 1198 string, and that text is to follow MUST be returned. 1200 The message-id string returned is an identification string 1201 contained within angle brackets ("<" and ">"), which is 1202 derived from the header of the article itself. The Message-ID 1203 header line (required by RFC 1036) from the article must be 1204 used to supply this information. If the message-id header line 1205 is missing from the article, a single digit "0" (zero) should 1206 be supplied within the angle brackets. 1208 Since the message-id field is unique for each article, it may 1209 be used by a news reading program to skip duplicate displays 1210 of articles that have been posted more than once, or to more 1211 than one news group. 1213 9.2.2.1 Responses 1214 221 n article retrieved - head follows 1215 412 no news group has been selected 1216 420 no current article has been selected 1217 423 no such article number in this group 1218 430 no such article found 1219 502 Service unavailable 1221 9.2.2.2 Examples 1222 Example of a successful retrieval of the headers in an article 1223 (using no article number) 1225 [S] 200 NNTP Service Ready 1227 [C] GROUP misc.test 1229 [S] 211 1234 3000234 3002322 misc.test 1231 [C] HEAD 1233 [S] 220 3000234 <45223423@to.to> 1235 [S] Path: pathost!demo!somewhere!not-for-mail 1237 [S] From: nobody@nowhere.to (Demo User) 1239 [S] Newsgroups: misc.test 1241 [S] Subject: I am just a test article 1243 [S] Date: 6 Oct 1998 04:38:40 -0500 1245 [S] Organization: Nowhere, To 1247 [S] Message-ID: <45223423@to.to> 1249 [S] . 1251 Example of a successful retrieval of the headers in an article 1252 by message-id 1254 [S] 200 NNTP Service Ready 1256 [C] HEAD <45223423@to.to> 1258 [S] 220 0 <45223423@to.to> 1260 [S] Path: pathost!demo!somewhere!not-for-mail 1262 [S] From: nobody@nowhere.to (Demo User) 1264 [S] Newsgroups: misc.test 1266 [S] Subject: I am just a test article 1268 [S] Date: 6 Oct 1998 04:38:40 -0500 1270 [S] Organization: Nowhere, To 1272 [S] Message-ID: <45223423@to.to> 1274 [S] . 1276 Example of an unsuccessful retrieval of the header of an 1277 article by message-id 1279 [S] 200 NNTP Service Ready 1281 [C] HEAD 1283 [S] 430 No Such Article Found 1285 Example of an unsuccessful retrieval of the header of an 1286 article by number 1288 [S] 200 NNTP Service Ready 1290 [C] GROUP misc.test 1292 [S] 211 1234 3000234 3002322 misc.test 1294 [C] HEAD 300256 1296 [S] 423 No such article number in this group 1298 Example of an unsuccessful retrieval the header of an article 1299 by number because no news group was selected first 1301 [S] 200 NNTP Service Ready 1303 [C] HEAD 300256 1305 [S] 412 No news group selected 1307 Example of an attempt to retrieve the header of an article 1308 when the current group selected is empty 1310 [S] 200 NNTP Service Ready 1312 [C] GROUP example.empty.newsgroup 1314 [S] 211 0 0 0 example.empty.newsgroup 1316 [C] HEAD 1318 [S] 420 No current article selected 1320 Example of a failure due to the service being unavailable 1322 [S] 200 NNTP Service Ready 1324 [C] HEAD 1326 [S] 502 Service unavailable 1328 9.2.3 BODY 1329 BODY [|nnn] 1331 This response displays the body (text) of the specified 1332 article. The optional parameter nnn is the numeric id of an 1333 article in the current news group and should be chosen from 1334 the range of articles provided when the news group was 1335 selected. If it is omitted, the current article is assumed. 1336 Message-id is the message id of an article as shown in that 1337 article's header. 1339 The internally maintained "current article pointer" MUST NOT 1340 be altered when the message-id argument is used. This is both 1341 to facilitate the presentation of articles that may be 1342 referenced within an article being read, and because of the 1343 semantic difficulties of determining the proper sequence and 1344 membership of an article which may have been posted to more 1345 than one news group. 1347 When a valid article number is specified, the internally- 1348 maintained "current article pointer" MUST be set point to the 1349 retrieve article. This includes the case when an article 1350 number is implied by the use of no argument. 1352 A previously valid article number MAY become invalid if the 1353 article has been removed. A previously invalid article number 1354 MAY become valid if the article has been reinstated, but such 1355 an article number MUST be no less than the reported low water 1356 mark for that group. 1358 If there is a valid article to present in a reply to this 1359 command, a response indicating the current article number (or 1360 zero when the message-id argument is used), a message-id 1361 string, and that text is to follow MUST be returned. 1363 The message-id string returned is an identification string 1364 contained within angle brackets ("<" and ">"), which is 1365 derived from the header of the article itself. The Message-ID 1366 header line (required by RFC 1036) from the article must be 1367 used to supply this information. If the message-id header line 1368 is missing from the article, a single digit "0" (zero) should 1369 be supplied within the angle brackets. 1371 Since the message-id field is unique for each article, it may 1372 be used by a news reading program to skip duplicate displays 1373 of articles that have been posted more than once, or to more 1374 than one news group. 1376 9.2.3.1 Responses 1377 222 n article retrieved - body follows 1378 412 no news group has been selected 1379 420 no current article has been selected 1380 423 no such article number in this group 1381 430 no such article found 1382 502 Service unavailable 1384 9.2.3.2 Examples 1385 Example of a successful retrieval of the body of an article 1386 (using no article number) 1388 [S] 200 NNTP Service Ready 1390 [C] GROUP misc.test 1392 [S] 211 1234 3000234 3002322 misc.test 1394 [C] BODY 1396 [S] 222 3000234 <45223423@to.to> 1398 [S] This is just a test article. 1400 [S] . 1402 Example of a successful retrieval of the body of an article by 1403 message-id 1405 [S] 200 NNTP Service Ready 1407 [C] BODY <45223423@to.to> 1409 [S] 222 0 <45223423@to.to> 1411 [S] This is just a test article. 1413 [S] . 1415 Example of an unsuccessful retrieval of the body of an article 1416 by message-id 1418 [S] 200 NNTP Service Ready 1420 [C] BODY 1422 [S] 430 No Such Article Found 1424 Example of an unsuccessful retrieval of the body of an article 1425 by number 1427 [S] 200 NNTP Service Ready 1429 [C] GROUP misc.test 1431 [S] 211 1234 3000234 3002322 misc.test 1433 [C] BODY 300256 1435 [S] 423 No such article number in this group 1437 Example of an unsuccessful retrieval of the body of an article 1438 by number because no news group was selected first 1440 [S] 200 NNTP Service Ready 1442 [C] BODY 300256 1444 [S] 412 No news group selected 1446 Example of an attempt to retrieve the body of an article when 1447 the current group selected is empty 1449 [S] 200 NNTP Service Ready 1451 [C] GROUP example.empty.newsgroup 1453 [S] 211 0 0 0 example.empty.newsgroup 1455 [C] BODY 1457 [S] 420 No current article selected 1459 Example of a failure due to the service being unavailable 1461 [S] 200 NNTP Service Ready 1463 [C] BODY 1465 [S] 502 Service unavailable 1467 9.2.4 STAT 1468 STAT [|nnn] 1470 This response returns only status information; no article 1471 contents are returned. The optional parameter nnn is the 1472 numeric id of an article in the current news group and should 1473 be chosen from the range of articles provided when the news 1474 group was selected. If it is omitted, the current article is 1475 assumed. Message-id is the message id of an article as shown 1476 in that article's header. 1478 The internally maintained "current article pointer" MUST NOT 1479 be altered when the message-id argument is used. This is both 1480 to facilitate the presentation of articles that may be 1481 referenced within an article being read, and because of the 1482 semantic difficulties of determining the proper sequence and 1483 membership of an article which may have been posted to more 1484 than one news group. 1486 When a valid article number is specified, the internally- 1487 maintained "current article pointer" MUST be set point to the 1488 retrieved article. This includes the case when an article 1489 number is implied by the use of no argument. 1491 A previously valid article number MAY become invalid if the 1492 article has been removed. A previously invalid article number 1493 MAY become valid if the article has been reinstated, but such 1494 an article number MUST be no less than the reported low water 1495 mark for that group. 1497 If there is a valid article to present in a reply to this 1498 command, a response indicating the current article number (or 1499 zero when the message-id argument is used) and a message-id 1500 string MUST be returned. 1502 The message-id string returned is an identification string 1503 contained within angle brackets ("<" and ">"), which is 1504 derived from the header of the article itself. The Message-ID 1505 header line (required by RFC 1036) from the article must be 1506 used to supply this information. If the message-id header line 1507 is missing from the article, a single digit "0" (zero) should 1508 be supplied within the angle brackets. 1510 Since the message-id field is unique for each article, it may 1511 be used by a news reading program to skip duplicate displays 1512 of articles that have been posted more than once, or to more 1513 than one news group. 1515 9.2.4.1 Responses 1516 223 n article retrieved - request text separately 1517 412 no news group has been selected 1518 420 no current article has been selected 1519 423 no such article number in this group 1520 430 no such article found 1521 502 Service unavailable 1523 9.2.4.2 Examples 1524 Example of STAT on an existing article (using no article 1525 number) 1527 [S] 200 NNTP Service Ready 1529 [C] GROUP misc.test 1531 [S] 211 1234 3000234 3002322 misc.test 1533 [C] STAT 1535 [S] 223 3000234 <45223423@to.to> 1536 Example of a STAT of an existing article by message-id 1538 [S] 200 NNTP Service Ready 1540 [C] STAT <45223423@to.to> 1542 [S] 223 0 <45223423@to.to> 1544 Example of an STAT of an article not on the server by message- 1545 id 1547 [S] 200 NNTP Service Ready 1549 [C] STAT 1551 [S] 430 No Such Article Found 1553 Example of STAT of an article not in the server by number 1555 [S] 200 NNTP Service Ready 1557 [C] GROUP misc.test 1559 [S] 211 1234 3000234 3002322 misc.test 1561 [C] STAT 300256 1563 [S] 423 No such article number in this group 1565 Example of STAT of an article by number when no news group was 1566 selected first 1568 [S] 200 NNTP Service Ready 1570 [C] STAT 300256 1572 [S] 412 No news group selected 1574 Example of STAT of an article when the current group selected 1575 is empty 1577 [S] 200 NNTP Service Ready 1579 [C] GROUP example.empty.newsgroup 1581 [S] 211 0 0 0 example.empty.newsgroup 1583 [C] STAT 1585 [S] 420 No current article selected 1587 Example of a failure due to the service being unavailable 1589 [S] 200 NNTP Service Ready 1591 [C] STAT 1593 [S] 502 Service unavailable 1595 9.3 Article Posting 1597 Article posting is done in one of two modes: individual 1598 article posting from news reading clients and article transfer 1599 from other news servers. 1601 9.3.1 POST 1603 POST 1605 If posting is allowed, response code 340 MUST be returned to 1606 indicate that the article to be posted should be sent. 1607 Response code 440 MUST be sent if that posting is prohibited 1608 for some installation-dependent reason. 1610 If posting is permitted, the article MUST be presented to the 1611 server by the client in the format specified by RFC 1036. The 1612 text forming the header and body of the message to be posted 1613 MUST be sent by the client using the conventions for text 1614 received from the news server: A single period (".") on a line 1615 indicates the end of the text, with lines starting with a 1616 period in the original text having that period doubled during 1617 transmission. 1619 Following the presentation of the termination sequence by the 1620 client, the server MUST return a response code indicating 1621 success or failure of the article transfer. Note that response 1622 codes 340 and 440 are used in direct response to the POST 1623 command. Others are returned following the sending of the 1624 article. 1626 No attempt shall be made by the server to filter characters, 1627 fold or limit lines, or otherwise process incoming text. The 1628 intent is that the server just passes the incoming message to 1629 be posted to the server installation's news posting software, 1630 which is not part of this specification. 1632 9.3.1.1 Responses 1634 240 article received ok 1635 340 send article to be posted. End with . 1636 440 posting not allowed 1637 441 posting failed 1638 9.3.1.2 Examples 1639 Example of a successful posting 1641 [S] 200 NNTP Service Ready 1643 [C] POST 1645 [S] 340 Input article. End with . 1647 [C] From: demo@testdomain.com(Demo User) 1649 [C] Newsgroups: misc.test 1651 [C] Subject: I am just a test article 1653 [C] Organization: Testdomain, USA 1655 [C] 1657 [C] This is just a test article. 1659 [C] . 1661 [S] 240 Article received ok 1663 Example of an unsuccessful posting 1665 [S] 200 NNTP Service Ready 1667 [C] POST 1669 [S] 340 Input article. End with . 1671 [C] From: demo@testdomain.com(Demo User) 1673 [C] Newsgroups: misc.test 1675 [C] Subject: I am just a test article 1677 [C] Organization: Testdomain, USA 1679 [C] 1681 [C] This is just a test article. 1683 [C] . 1685 [S] 441 Posting failed 1687 Example of an attempt to posting when posting is not allowed 1689 [S] 201 NNTP Service Ready, read-only 1691 [C] POST 1693 [S] 440 Posting not permitted 1695 9.3.2 IHAVE 1697 IHAVE 1699 The IHAVE command informs the server that the client has an 1700 article whose id is . If the server desires a copy 1701 of that article, it MUST return a response instructing the 1702 client to send the entire article. If the server does not want 1703 the article (if, for example, the server already has a copy of 1704 it), a response indicating that the article is not wanted MUST 1705 be returned. 1707 If transmission of the article is requested, the client MUST 1708 send the entire article, including header and body, in the 1709 manner specified for text transmission from the server. The 1710 server MUST return a response code indicating success or 1711 failure of the transferal of the article. 1713 This function differs from the POST command in that it is 1714 intended for use in transferring already-posted articles 1715 between hosts. It SHOULD NOT be used when the client is a 1716 personal news reading program. In particular, this function 1717 will invoke the server's news posting program with the 1718 appropriate settings (flags, options, etc.) to indicate that 1719 the forthcoming article is being forwarded from another host. 1721 However, the server MAY elect not to post or forward the 1722 article if after further examination of the article it deems 1723 it inappropriate to do so. Reasons for such subsequent 1724 rejection of an article may include such problems as 1725 inappropriate news groups or distributions, disk space 1726 limitations, article lengths, garbled headers, and the like. 1727 These are typically restrictions enforced by the server host's 1728 news software and not necessarily the NNTP server itself. 1730 9.3.2.1 Responses 1732 235 article transferred ok 1733 335 send article to be transferred. End with . 1735 435 article not wanted - do not send it 1736 436 transfer failed - try again later 1737 437 article rejected - do not try again 1739 Because some host news posting software may not be able to 1740 immediately render status on the whether an article is 1741 inappropriate for posting or forwarding, an NNTP server MAY 1742 acknowledge the successful transfer of the article and later 1743 silently discard it. Thus, an NNTP server MAY return the 235 1744 acknowledgment code and later discard the received article. 1746 9.3.2.2 Examples 1748 Example of successfully sending an article to another site 1750 [S] 200 NNTP Service Ready 1752 [C] IHAVE 1754 [S] 335 Send it. End with . 1756 [C] Path: pathost!demo!somewhere!not-for-mail 1758 [C] From: nobody@nowhere.to (Demo User) 1760 [C] Newsgroups: misc.test 1762 [C] Subject: I am just a test article 1764 [C] Date: 6 Oct 1998 04:38:40 -0500 1766 [C] Organization: Nowhere, To 1768 [C] Message-ID: 1770 [C] 1772 [C] This is just a test article. 1774 [C] . 1776 [S] 235 Article transferred ok 1778 Example of sending an article to another site that rejects it 1780 [S] 200 NNTP Service Ready 1782 [C] IHAVE 1784 [S] 335 Send it. End with . 1786 [C] Path: pathost!demo!somewhere!not-for-mail 1788 [C] From: nobody@nowhere.to (Demo User) 1790 [C] Newsgroups: misc.test 1792 [C] Subject: I am just a test article 1794 [C] Date: 6 Oct 1998 04:38:40 -0500 1796 [C] Organization: Nowhere, To 1798 [C] Message-ID: 1800 [C] 1802 [C] This is just a test article. 1804 [C] . 1806 [S] 437 Article rejected. Don't send again 1808 Example of sending an article to another site where the 1809 transfer fails 1811 [S] 200 NNTP Service Ready 1813 [C] IHAVE 1815 [S] 335 Send it. End with . 1817 [C] Path: pathost!demo!somewhere!not-for-mail 1819 [C] From: nobody@nowhere.to (Demo User) 1821 [C] Newsgroups: misc.test 1823 [C] Subject: I am just a test article 1825 [C] Date: 6 Oct 1998 04:38:40 -0500 1827 [C] Organization: Nowhere, To 1829 [C] Message-ID: 1831 [C] 1833 [C] This is just a test article. 1835 [C] . 1837 [S] 436 Transfer failed 1839 Example of sending an article to another site that rejects it 1841 [S] 200 NNTP Service Ready 1843 [C] IHAVE 1845 [S] 335 Send it. End with . 1847 [C] Path: pathost!demo!somewhere!not-for-mail 1849 [C] From: nobody@nowhere.to (Demo User) 1851 [C] Newsgroups: misc.test 1853 [C] Subject: I am just a test article 1855 [C] Date: 6 Oct 1998 04:38:40 -0500 1857 [C] Organization: Nowhere, To 1859 [C] Message-ID: 1861 [C] 1863 [C] This is just a test article. 1865 [C] . 1867 [S] 435 Don't send it again 1869 9.4 The LIST Keyword 1871 9.4.1 LIST 1873 LIST [ACTIVE [wildmat]] 1875 The response to the LIST keyword with no parameters returns a 1876 list of valid news groups and associated information. Each 1877 news group is sent as a line of text in the following format: 1879 group first last status 1881 where is the name of the news group, is the 1882 number of the last known article currently in that news group, 1883 is the number of the first article currently in the 1884 news group, and indicates the current status of the 1885 group on this server. Typically, the will be consist 1886 of the US-ASCII character `y' where posting is permitted, `n' 1887 where posting is not permitted and `m' where postings will be 1888 forwarded to the news group moderator by the news server. 1889 Other status strings may exist. The definition of these other 1890 values and the circumstances under which they are returned is 1891 covered in other specifications. 1893 The and fields will always be numeric. They 1894 may have leading zeros. The field corresponds to the 1895 "reported low water mark" and the field corresponds to 1896 the "reported high water mark" described in the GROUP command 1897 (see Section 9.1.1.1). 1899 The status of a news group only indicates how posts to that 1900 news group are processed. It does not if the current client is 1901 permitted to post. That is indicated by the status code 1902 returned as part of the greeting. 1904 Please note that an empty list (i.e., the text body returned 1905 by this command consists only of the terminating period) is a 1906 possible valid response, and indicates that there are 1907 currently no valid news groups. 1909 If the optional wildmat parameter is specified, the list is 1910 limited to only the groups that match the pattern. 1912 Specifying a single group is usually very efficient for the 1913 server. Multiple groups may be specified by using wildmat 1914 patterns (described in section 5). 1916 9.4.1.1 Responses 1917 215 list of news groups follows 1919 9.4.1.2 Examples 1921 Example of LIST returning a list of news groups 1922 [S] 200 NNTP Service Ready 1924 [C] LIST 1926 [S] 215 list of news groups follows 1928 [S] misc.test 3000234 3002322 y 1930 [S] alt.fc-writers.recovery 1 4 y 1932 [S] tx.natives.recovery 56 89 y 1934 [S] . 1936 Example of LIST returning no news groups 1938 [S] 200 NNTP Service Ready 1940 [C] LIST 1942 [S] 215 list of news groups follows 1944 [S] . 1946 9.4.2 LIST ACTIVE.TIMES 1948 LIST ACTIVE.TIMES [wildmat] 1949 The active.times file is maintained by some news transport 1950 systems to contain information about who created a particular 1951 news group and when. The format of this file includes three 1952 fields. The first field is the name of the news group. The 1953 second is the time when this group was created on this news 1954 server measured in seconds since the start of January 1, 1970. 1955 The third is the email address of the entity that created the 1956 news group. When executed, the information is displayed 1957 following the 215 response. When display is completed, the 1958 server will send a period on a line by itself. If the 1959 information is not available, the server will return the 503 1960 error response. If the server does not recognize the command, 1961 it SHOULD return the 501 error response. 1963 If the optional wildmat parameter is specified, the list is 1964 limited to only the groups that match the pattern. 1966 Specifying a single group is usually very efficient for the 1967 server. Multiple groups may be specified by using wildmat 1968 patterns (described in section 5). 1970 9.4.2.1 Responses 1972 215 information follows 1973 501 Syntax error 1974 503 program error, function not performed 1976 9.4.2.2 Examples 1978 Example of LIST ACTIVE.TIMES returning a list of news groups 1979 [S] 200 NNTP Service Ready 1981 [C] LIST ACTIVE.TIMES 1983 [S] 215 information follows 1985 [S] misc.test 930445408 1987 [S] alt.rfc-writers.recovery 930562309 1989 [S] tx.natives.recovery 930678923 1991 [S] . 1993 Example of LIST ACTIVE.TIMES returning an error (The server 1994 software is not configured to maintain this information, but 1995 does recognize the command as valid.) 1997 [S] 200 NNTP Service Ready 1999 [C] LIST ACTIVE.TIMES 2001 [S] 503 program error, function not performed 2003 Example of LIST ACTIVE.TIMES sent to a server that does not 2004 recognize this argument (e.g. The software does not maintain 2005 this information.) 2007 [S] 200 NNTP Service Ready 2009 [C] LIST ACTIVE.TIMES 2011 [S] 501 Syntax Error 2013 9.4.3 LIST DISTRIBUTIONS 2015 LIST DISTRIBUTIONS 2017 The distributions file is maintained by some news transport 2018 systems to contain information about valid values for the 2019 Distribution: line in a news article header and about what the 2020 values mean. Each line contains two fields, the value and a 2021 short explanation on the meaning of the value. When executed, 2022 the information is displayed following the 215 response. When 2023 display is completed, the server will send a period on a line 2024 by itself. If the information is not available, the server 2025 will return the 503 error response. If the server does not 2026 recognize this command, it SHOULD return the 501 error 2027 response. 2029 9.4.3.1 Responses 2031 215 information follows 2032 501 Syntax error 2033 503 program error, function not performed 2035 9.4.3.2 Examples 2036 Example of LIST DISTRIBUTIONS returning a list of news groups 2037 [S] 200 NNTP Service Ready 2039 [C] LIST DISTRIBUTIONS 2041 [S] 215 information follows 2043 [S] usa United States of America 2045 [S] na North America 2047 [S] world All over the World 2049 [S] . 2051 Example of LIST DISTRIBUTIONS returning an error (e.g. The 2052 server software is not configured to maintain this 2053 information, but does recognize the command as valid.) 2055 [S] 200 NNTP Service Ready 2057 [C] LIST DISTRIBUTIONS 2059 [S] 503 program error, function not performed 2061 Example of LIST DISTRIBUTIONS sent to a server that does not 2062 recognize the command (e.g. The server does not maintain this 2063 information regardless of configuration.) 2065 [S] 200 NNTP Service Ready 2067 [C] LIST DISTRIBUTIONS 2069 [S] 501 Syntax Error 2071 9.4.4 LIST DISTRIB.PATS 2073 LIST DISTRIB.PATS 2075 The distrib.pats file is maintained by some news transport 2076 systems to allow clients to choose a value for the 2077 Distribution: line in the header of a news article being 2078 posted. The information returned consists of lines, in no 2079 particular order, each of which contains three fields 2080 separated by colons. These fields are a weight, a group name 2081 or wildmat pattern, and a Distribution: value, in that order. 2083 The client MAY use this information to select a Distribution: 2084 value based on the name of a newsgroup. To do so, it should 2085 determine the lines whose second field matches the newsgroup 2086 name, select that line with the highest weight (with 0 being 2087 the lowest), and use the Distribution: field from that line. 2089 When executed, the information is displayed following the 215 2090 response. When display is completed, the server will send a 2091 period on a line by itself. If the information is not 2092 available, the server will return the 503 error response. If 2093 this command is not recognized, the server SHOULD return the 2094 501 error response. 2096 9.4.4.1 Responses 2098 215 information follows 2099 501 Syntax error 2100 503 program error, function not performed 2101 9.4.4.2 Examples 2103 Example of LIST DISTRIB.PATS returning a list of news groups 2104 [S] 200 NNTP Service Ready 2106 [C] LIST DISTRIB.PATS 2108 [S] 215 information follows 2110 [S] 10:local.*:local 2112 [S] . 2114 Example of LIST DISTRIB.PATS returning an error (e.g. The 2115 server software is not configured to maintain this 2116 information, but does recognize the command as valid.) 2118 [S] 200 NNTP Service Ready 2120 [C] LIST DISTRIB.PATS 2122 [S] 503 program error, function not performed 2124 Example of LIST DISTRIB.PATS sent to a server that does not 2125 recognize the command (e.g. The software does not maintain 2126 this information regardless of configuration.) 2128 [S] 200 NNTP Service Ready 2130 [C] LIST DISTRIB.PATS 2132 [S] 501 Syntax Error 2134 9.4.5 LIST NEWSGROUPS 2136 LIST NEWSGROUPS [wildmat] 2138 The newsgroups file is maintained by some news transport 2139 systems to contain the name of each news group that is 2140 active on the server and a short description about the 2141 purpose of each news group. Each line in the file contains 2142 two fields, the news group name and a short explanation of 2143 the purpose of that news group. When executed, the 2144 information is displayed following the 215 response. When 2145 display is completed, the server will send a period on a 2146 line by itself. If the information is not available, the 2147 server will return the 503 response. If the server does not 2148 recognize the command it should return a 501 response. If 2149 the optional matching parameter is specified, the list is 2150 limited to only the groups that match the pattern (no 2151 matching is done on the group descriptions). Specifying a 2152 single group is usually very efficient for the server, and 2153 multiple groups may be specified by using wildmat patterns 2154 (see section 5), not regular expressions. If nothing is 2155 matched an empty list is returned, not an error. 2157 9.4.5.1 Responses 2159 215 information follows 2160 501 Syntax error 2161 503 program error, function not performed 2163 9.4.5.2 Examples 2164 Example of LIST NEWSGROUPS returning a list of news groups 2166 [S] 200 NNTP Service Ready 2168 [C] LIST NEWSGROUPS 2170 [S] 215 information follows 2172 [S] misc.test General Usenet testing 2174 [S] alt.rfc-writers.recovery RFC Writers Recovery 2176 [S] tx.natives.recovery Texas Natives Recovery 2178 [S] . 2180 Example of LIST NEWSGROUPS returning an error (e.g. The server 2181 software recognizes the command as valid, but the information 2182 is not available.) 2184 [S] 200 NNTP Service Ready 2186 [C] LIST NEWSGROUPS 2188 [S] 503 program error, function not performed 2190 9.5 Standard extensions 2192 Each of the following sections describes an extension that a 2193 server MAY provide. If the server provides the extension, it 2194 MUST include the appropriate extension label in the response 2195 to LIST EXTENSIONS. If it does not provide it, it MUST NOT 2196 include the appropriate extension label. The descriptions of 2197 facilities in each section are written as if the extension is 2198 provided. If it is not provided, the entire section should be 2199 ignored. 2201 9.5.1 LISTGROUP extension 2202 This extension provides one command and has the extension 2203 label LISTGROUP. 2205 9.5.1.1 The LISTGROUP Command 2207 LISTGROUP [ggg] 2209 The LISTGROUP command is used to get a listing of all the 2210 article numbers in a particular news group. 2212 The optional parameter ggg is the name of the news group to 2213 be selected (e.g. "news.software.b"). A list of valid news 2214 groups may be obtained from the LIST command. If no group is 2215 specified, the current group is used as the default 2216 argument. 2218 The successful selection response will be a list of the 2219 article numbers in the group followed by a period on a line 2220 by itself. The list starts on the next line following the 2221 211 response code. 2223 When a valid group is selected by means of this command, the 2224 internally maintained "current article pointer" MUST be set 2225 to the first article in the group and the name of the 2226 current news group MUST be set to the selected news group 2227 name. If an invalid group is specified, the previously 2228 selected group and article remain selected. If an empty 2229 news group is selected, the "current article pointer" may be 2230 in an indeterminate state and should not be used. 2232 The LISTGROUP keyword MAY be used by a client as a 2233 replacement for the GROUP command in establishing a valid 2234 "current article pointer." After a successful response is 2235 received, any other command may be used that depends on 2236 having the "current article pointer" be valid. 2238 The group name MUST match a news group obtained from the 2239 LIST command or an error will result, else the server will 2240 respond with the 411 error code. 2242 A server that does not implement this command SHOULD return 2243 a 500 error response. 2245 9.5.1.1.1 Responses 2247 211 list of article numbers follow 2248 411 No such group 2249 412 Not currently in news group 2250 500 Command not recognized 2252 9.5.1.1.2 Examples 2253 Example of a successful execution with a group that exists on 2254 the server 2256 [S] 200 NNTP Service Ready 2258 [C] LISTGROUP misc.test 2260 [S] 211 list of article numbers follow 2262 [S] 3000234 2264 [S] 3000237 2266 [S] 3000238 2268 [S] 3000239 2270 [S] 3002322 2272 [S] . 2274 Example of an unsuccessful execution with a group that does 2275 not exist on the server 2277 [S] 200 NNTP Service Ready 2279 [C] LISTGROUP this.group.is.not.here 2281 [S] 411 no such group 2283 Example of an attempt to retrieve an article when the current 2284 group selected is empty 2286 [S] 200 NNTP Service Ready 2288 [C] LISTGROUP example.empty.newsgroup 2290 [S] 412 No current article selected 2292 9.5.2 The OVER Extension 2294 This extension provides two commands, OVER and LIST 2295 OVERVIEW.FMT. The label for this extension is OVER. 2297 9.5.2.1 LIST OVERVIEW.FMT 2299 LIST OVERVIEW.FMT 2301 The overview.fmt file is maintained by some news transport 2302 systems to contain the order in which header information is 2303 stored in the overview databases for each news group. When 2304 executed, news article header fields are displayed one line at 2305 a time in the order in which they are stored in the overview 2306 database[7] following the 215 response. When display is 2307 completed, the server will send a period on a line by itself. 2308 If the information is not available, the server will return 2309 the 503 response. 2311 If the header has the word "full" (without quotes) after the 2312 colon, the header's name is prepended to its field in the 2313 output returned by the server. 2315 This is command is part of the optional OVER extension which 2316 includes the OVER command defined in section 9.5.2.2. If the 2317 OVER extension is not implemented, then this command MUST NOT 2318 be implemented. If that case, the server MUST return a 501 2319 error response when this command is presented by the client. 2321 9.5.2.1.1 Responses 2323 215 information follows 2324 501 Syntax Error 2325 503 program error, function not performed 2327 9.5.2.1.2 Examples 2328 Example of LIST OVERVIEW.FMT returning a list of news groups 2330 [S] 200 NNTP Service Ready 2332 [C] LIST OVERVIEW.FMT 2334 [S] 215 Order of fields in overview database. 2336 [S] Subject: 2338 [S] From: 2340 [S] Date: 2342 [S] Message-ID: 2344 [S] . 2346 Example of LIST OVERVIEW.FMT returning an error 2348 [S] 200 NNTP Service Ready 2350 [C] LIST OVERVIEW.FMT 2352 [S] 503 program error, function not performed 2353 9.5.2.2 OVER 2355 OVER [range] 2357 The OVER command returns specific header information for the 2358 article(s) specified from the current selected group. The 2359 information returned in the response to this command can be 2360 used by clients to follow discussion threads. 2362 The optional range argument may be any of the following: 2364 . an article number 2365 . an article number followed by a dash to indicate all following 2366 . an article number followed by a dash followed by another 2367 article number 2369 If no argument is specified, then information from the current 2370 article is displayed. Successful responses start with a 224 2371 response followed by the overview information for all matched 2372 messages. Once the output is complete, a period is sent on a 2373 line by itself. If no argument is specified, the information 2374 for the current article is returned. A news group must have 2375 been selected earlier, else a 412 error response is returned. 2376 If no articles are in the range specified, the server returns 2377 a 420 error response. A 502 response will be returned if the 2378 client only has permission to transfer articles. A 500 2379 response SHOULD be returned by servers do not implement this 2380 command. 2382 The output consists of one line per article, sorted in 2383 numerical order of article number. Each line consists of a 2384 number of fields separated by an US-ASCII TAB character. The 2385 first 8 fields MUST be the following, in order: 2386 article number, subject, author, date, message-ID, references, 2387 byte count, line count 2389 The content of any subsequent field is given by the response 2390 to the LIST OVERVIEW.FMT command. A field may be empty (in 2391 which case there will be two adjacent US-ASCII tabs, and a 2392 sequence of trailing US-ASCII tabs may be omitted). Any 2393 sequence of US-ASCII space or non-printing characters in a 2394 field MUST be replaced by a single US-ASCII space. 2396 The server SHOULD not produce output for articles that no 2397 longer exist. 2399 9.5.2.2.1 Responses 2401 224 Overview information follows 2402 412 No news group current selected 2403 420 No article(s) selected 2404 500 Command not recognized 2405 502 Service Unavailable 2407 9.5.2.2.2 Examples 2408 Example of a successful retrieval of overview information for 2409 an article (using no article number) 2411 [S] 200 NNTP Service Ready 2413 [C] GROUP misc.test 2415 [S] 211 1234 3000234 3002322 misc.test 2417 [C] OVER 2419 [S] 224 Overview information follows 2421 300234|I am just a test article|nobody@nowhere.to 2423 (Demo User)|6 Oct 1998 04:38:40 -0500| 2425 <45223423@to.to> 2427 [S] . 2429 [Please note that the line that begins with 300234 is all one 2430 line that has been wrapped for readability. A vertical bar has 2431 been inserted to show where the US-ASCII TAB should actually 2432 be.] 2434 Example of an unsuccessful retrieval of overview information 2435 on an article by number 2437 [S] 200 NNTP Service Ready 2439 [C] GROUP misc.test 2441 [S] 211 1234 3000234 3002322 misc.test 2443 [C] OVER 300256 2445 [S] 420 No such article in this group 2447 Example of an unsuccessful retrieval of overview information 2448 by number because no news group was selected first 2450 [S] 200 NNTP Service Ready 2452 [C] OVER 2454 [S] 412 No news group selected 2455 Example of an attempt to retrieve an article when the current 2456 group selected is empty 2458 [S] 200 NNTP Service Ready 2460 [C] GROUP example.empty.newsgroup 2462 [S] 211 0 0 0 example.empty.newsgroup 2464 [C] OVER 2466 [S] 420 No current article selected 2468 9.5.3 The PAT Extension 2469 This extension provides one new command, PAT. The label for 2470 this extension is PAT. 2472 9.5.3.1 PAT 2474 PAT header range| [wildmat[ wildmat...]] 2476 The PAT command is used to retrieve specific headers from 2477 specific articles in the currently selected group, based on 2478 pattern matching on the contents of the header. 2480 The required header parameter is the name of a header line 2481 (e.g. "subject") in a news group article. See RFC-1036 for a 2482 list of valid header lines. The required range argument may be 2483 any of the following: 2485 . an article number 2486 . an article number followed by a dash to indicate all following 2487 . an article number followed by a dash followed by another 2488 article number. 2490 The required message-id argument indicates a specific article. 2491 The range and message-id arguments are mutually exclusive. 2492 Additional arguments consisting of one or more wildmats, 2493 separated by an US-ASCII space, may be specified. The default 2494 is the single wildmat "*". 2496 A successful response consists of a 221 code followed by the 2497 output from the command. The output consists of one line for 2498 each article where the relevant header line matches one or 2499 more of the wildmats. The line consists of the article number, 2500 a US-ASCII space, and then the contents of the header (without 2501 the header name). A valid response includes an empty list 2502 (indicating that there were no matches). Once the output is 2503 complete, a period is sent on a line by itself. If the 2504 optional argument is a message-id and no such article exists, 2505 a 430 error response shall be returned. A 502 response shall 2506 be returned if the client only has permission to transfer 2507 articles. A 500 response SHOULD be issued by all servers that 2508 do not recognize this command. 2510 9.5.3.1.1 Responses 2512 221 Header follows 2513 412 no newsgroup selected 2514 430 no such article 2515 500 Command not recognized 2516 502 Service Unavailable 2518 9.5.3.1.2 Examples 2520 Example of a successful retrieval of subject lines from a 2521 range of articles 2523 [S] 200 NNTP Service Ready 2525 [C] GROUP misc.test 2527 [S] 211 1234 3000234 3002322 misc.test 2529 [C] PAT Subject 3000234-300238 2531 [S] 221 Header Follows 2533 [S] 3000234 I am just a test article 2535 [S] 3000237 Re: I am just a test article 2537 [S] 3000238 Ditto 2539 [S] . 2541 Example of a successful retrieval of subject lines from a 2542 range of articles with header pattern matching 2544 [S] 200 NNTP Service Ready 2546 [C] GROUP misc.test 2548 [S] 211 1234 3000234 3002322 misc.test 2550 [C] PAT Subject 3000234-300238 j* ? *est 2552 [S] 221 Header Follows 2554 [S] 3000234 I am just a test article 2556 [S] 3000237 Re: I am just a test article 2558 [S] . 2560 Example of a successful retrieval of header from an article by 2561 message-id 2563 [S] 200 NNTP Service Ready 2565 [C] PAT subject 2567 [S] 221 Header information follows 2569 [S] 3000345 I am just a test article 2571 [S] . 2573 Example of an unsuccessful retrieval of a header from an 2574 article by message-id 2576 [S] 200 NNTP Service Ready 2578 [C] PAT subject 2580 [S] 430 No Such Article Found 2582 Example of an unsuccessful retrieval of headers from articles 2583 by number because no news group was selected first 2585 [S] 200 NNTP Service Ready 2587 [C] PAT subject 300256- 2589 [S] 412 No news group selected 2591 Example of retrieving header information when the current 2592 group selected is empty 2594 [S] 200 NNTP Service Ready 2596 [C] GROUP example.empty.newsgroup 2598 [S] 211 0 0 0 example.empty.newsgroup 2600 [C] PAT subject 0- 2602 [S] 221 Headers follow 2604 . 2606 Example of a failure due to restrictions configured into the 2607 server 2609 [S] 200 NNTP Service Ready 2611 [C] GROUP news.group 2613 [S] 211 1234 3000234 3002322 misc.test 2615 [C] PAT Subject 3000234-300238 2617 [S] 502 Service Unavailable 2619 10. The CONCLUSION Step 2621 10.1 QUIT 2623 QUIT 2625 The server process MUST acknowledge the QUIT command and then 2626 close the connection to the client. This is the preferred 2627 method for a client to indicate that it has finished all its 2628 transactions with the NNTP server. 2630 If a client simply disconnects (or the connection times out or 2631 some other fault occurs), the server SHALL gracefully cease 2632 its attempts to service the client. 2634 10.1.1 Responses 2636 205 closing connection - goodbye! 2638 10.1.2 Example 2639 [S] 200 NNTP Service Ready 2641 [C] QUIT 2643 [S] 205 closing connection 2645 11. Other Keywords 2647 There are other keywords that may be used at any time between 2648 the beginning of a session and its termination. Using these 2649 keywords does not alter any state information, but the 2650 response generated from the use of these keywords may provide 2651 useful information to clients that use them. 2653 11.1 DATE 2655 DATE 2657 This command exists to help clients find out the current time 2658 from the server's perspective. This command SHOULD NOT be 2659 used as a substitute for NTP[8], but to provide information 2660 that might be useful when using the NEWNEWS command (see 2661 section 11.5). 2663 This command returns a one-line response code of 111 followed 2664 by the UTC (or GMT) date and time on the server in the form 2665 YYYYMMDDhhmmss. 2667 11.1.1 Responses 2669 111 YYYYMMDDhhmmss 2671 11.1.2 Example 2672 [S] 200 NNTP Service Ready 2674 [C] DATE 2676 [S] 111 19990623135624 2678 11.2 The DEBUG Command 2680 DEBUG ON|OFF|ACK 2682 The DEBUG command is available for implementers and system 2683 administrators to use in debugging problems with a server. 2685 A client sends the command DEBUG ON to activate the use of 2686 debugging responses. The client sends the command DEBUG OFF 2687 to deactivate the use of debugging responses. A client sends 2688 the command DEBUG ACK acknowledge the presentation of a 2689 DEBUG response code. Once a DEBUG ACK has been sent the 2690 client should expect the server to respond with another 2691 debugging result code or a response code appropriate to the 2692 command sent that started the most recent protocol 2693 transaction. Servers that recognize but are not configured 2694 to permit the use of DEBUG commands will return a 502 2695 command when the DEBUG command is used. Servers that do not 2696 recognize the DEBUG command will return a 500 error code. 2698 11.2.1 Responses 2700 291 DEBUG ON Acknowledged 2701 292 DEBUG OFF Acknowledged 2702 500 Command not recognized 2703 502 Service unavailable 2705 11.2.2 Examples 2707 An example of activating, running a command and then 2708 deactivating the DEBUG responses [Different servers may have 2709 different debug response codes in use for different commands. 2710 This is just an example using code 191.] 2712 [S] 200 NNTP Service Ready 2714 [C] DEBUG ON 2716 [S] 291 DEBUG ON Acknowledged 2718 [C] GROUP misc.test 2720 [S] 191 Searching active file to see if group exists 2722 [C] DEBUG ACK 2724 [S] 211 1234 3000234 3002322 misc.test 2726 [C] DEBUG OFF 2728 [S] 292 DEBUG OFF Acknowledged 2730 An example of a negative response to DEBUG ON [The server does 2731 not disconnect after presenting the negative response.] 2733 [S] 200 NNTP Service Ready 2735 [C] DEBUG ON 2737 [S] 502 Service unavailable 2739 11.3 The HELP Command 2741 HELP 2743 This command provides a short summary of commands that are 2744 understood by this implementation of the server. The help text 2745 will be presented as a textual response terminated by a single 2746 period on a line by itself. 2748 This text is not guaranteed to be in any particular format and 2749 SHALL NOT be used by clients as a replacement for the LIST 2750 EXTENSIONS command described in section 8.1. 2752 11.3.1 Responses 2754 100 help text follows 2756 11.3.2 Example 2757 [S] 200 NNTP Service Ready 2759 [C] HELP 2761 [S] 100 Help text follows 2763 [S] This is some help text. There is no specific 2765 [S] formatting requirement for this test, though 2767 [S] it is customary for it to list the valid commands 2769 [S] and give a brief definition of what they do 2771 [S] . 2773 11.4 NEWGROUPS 2775 NEWGROUPS date time [GMT|UTC] 2777 A list of newsgroups created since MUST be 2778 listed in the same format as the LIST command. 2780 The date is sent as 6 or 8 digits in the format [XX]YYMMDD, 2781 where XX is the first two digits of the year, YY is the last 2782 two digits of the year, MM is the two digits of the month 2783 (with leading zero, if appropriate), and DD is the day of the 2784 month (with leading zero, if appropriate). If the first two 2785 digits of the year are not specified, the year is to be taken 2786 from the current century if YY is smaller than or equal to the 2787 current year, otherwise the year is from the previous century. 2789 Time must also be specified. It must be as 6 digits HHMMSS 2790 with HH being hours in the 24-hour clock 00-23, MM minutes 00- 2791 59, and SS seconds 00-60, which allows for leap seconds. The 2792 tokens "GMT" and "UTC" specifies that the date and time are 2793 given in UTC. If the tokens "GMT" and "UTC" are omitted then 2794 the date and time are specified in the server's local 2795 timezone. Note that there is no way within this specification 2796 of NNTP to establish the server's local timezone. 2798 Note that an empty list (i.e., the text body returned by this 2799 command consists only of the terminating period) is a possible 2800 valid response, and indicates that there are currently no new 2801 newsgroups. 2803 Clients SHOULD make all queries using GMT/UTC time when 2804 possible. 2806 11.4.1 Responses 2808 231 list of new newsgroups follows 2810 11.4.2 Examples 2811 Example where there are new groups 2813 [S] 200 NNTP Service Ready 2815 [C] NEWGROUPS 19990624 000000 UTC 2817 [S] 230 list of new newsgroups follows 2819 [S] alt.rfc-writers.recovery 2821 [S] tx.natives.recovery 2823 [S] . 2825 Example where there are no new groups 2827 [S] 200 NNTP Service Ready 2829 [C] NEWGROUPS 19990624 000000 UTC 2831 [S] 230 list of new newsgroups follows 2833 [S] . 2835 11.5 NEWNEWS 2837 NEWNEWS newsgroups date time [GMT] 2839 A list of message-ids of articles posted or received to the 2840 specified news group or groups since "date" will be listed. 2841 The format of the listing will be one message-id per line, as 2842 though text were being sent. Each message-id SHALL appear only 2843 once in a response. The order of the response has no specific 2844 significance and may vary from response to response in the 2845 same session. A single line consisting solely of one period 2846 followed by CR-LF will terminate the list. 2848 Date and time are in the same format as the NEWGROUPS command. 2849 The newsgroups parameter MUST be in wildmat format and MAY 2850 consist of multiple wildmat constructs separated by an US- 2851 ASCII comma character. 2853 Note that an empty list (i.e., the text body returned by this 2854 command consists only of the terminating period) is a possible 2855 valid response, and indicates that there is currently no new 2856 news. 2858 Clients SHOULD make all queries in GMT/UTC time when possible. 2860 11.5.1 Responses 2862 230 list of new articles by message-id follows 2863 11.5.2 Examples 2864 Example where there are new articles 2866 [S] 200 NNTP Service Ready 2868 [C] NEWNEWS news.*,sci.* 19990624 000000 2870 [S] 230 list of new articles by message-id follows 2872 [S] 2874 [S] 2876 Example where there are no new articles 2878 [S] 200 NNTP Service Ready 2880 [C] NEWNEWS alt.* 19990624 000000 2882 [S] 230 list of new articles by message-id follows 2884 [S] . 2886 12. Framework for NNTP Extensions 2888 Although NNTP is widely and robustly deployed, some parts of 2889 the Internet community might wish to extend the NNTP service. 2890 This memo defines a means whereby an extended NNTP client may 2891 query the server to determine the service extensions that it 2892 supports. 2894 It must be emphasized that any extension to the NNTP service 2895 should not be considered lightly. NNTP's strength comes 2896 primarily from its simplicity. Experience with many protocols 2897 has shown that: 2899 Protocols with few options tend towards ubiquity, whilst 2900 protocols with many options tend towards obscurity. 2902 This means that each and every extension, regardless of its 2903 benefits, must be carefully scrutinized with respect to its 2904 implementation, deployment, and interoperability costs. In 2905 many cases, the cost of extending the NNTP service will likely 2906 outweigh the benefit. 2908 Given this environment, the framework for the extensions 2909 described in this memo consists of: 2911 a) a mechanism for clients to determine a server's available 2912 extensions 2913 b) a registry of NNTP service extensions 2914 The LIST EXTENSIONS command is described in section 8.1 of 2915 this memo and is the mechanism for clients to use to determine 2916 what extensions are available for client use. 2918 The IANA shall maintain a registry of NNTP service extensions. 2920 Associated with each such extension is a corresponding NNTP 2921 keyword value. Each service extension registered with the IANA 2922 MUST be defined in an RFC. Such RFCs either must be on the 2923 standards-track or must define an IESG-approved experimental 2924 protocol. The definition must include: 2926 . the textual name of the NNTP service extension 2927 . the label that is returned by LIST EXTENSIONS that would 2928 indicate to the client that the server supports this 2929 particular extension 2930 . any new NNTP keywords associated with the extension 2931 . the syntax and possible values of parameters associated with 2932 the new NNTP keywords 2933 . any new parameters the extension associates with any other 2934 pre-existing NNTP keywords 2935 . how support for the extension affects the behavior of a server 2936 and client NNTP 2937 . any increase in the maximum length of commands over the value 2938 specified in this memo 2940 In addition, any NNTP keyword value that starts with an upper 2941 or lower case "X" refers to a local NNTP service extension, 2942 which is used through bilateral, rather than standardized, 2943 agreement. Keywords beginning with "X" MUST NOT be used in a 2944 registered service extension. 2946 Any keyword values presented in the NNTP response that do not 2947 begin with "X" must correspond to a standard, standards-track, 2948 or IESG-approved experimental NNTP service extension 2949 registered with IANA. A conforming server MUST NOT offer non 2950 "X" prefixed keyword values that are not described in a 2951 registered extension. 2953 Additional keywords are bound by the same rules as NNTP 2954 keywords; specifically, keywords beginning with "X" are local 2955 extensions that MUST NOT be registered or standardized and 2956 keywords not beginning with "X" must always be registered. 2958 12.1 Initial IANA Registry 2960 The IANA's initial registry of NNTP service extensions 2961 consists of these entries: 2963 Service Extension NNTP Extension Label Added Behavior 2965 Overview Support OVER Defined in this 2966 document 2968 Specific Article LISTGROUP Defined in this 2969 Numbers document 2971 Header Pattern PAT Defined in this 2972 Matching document 2974 13. Augmented BNF[9] Syntax for NNTP Commands 2976 This syntax defines the non-terminal "command". The non-terminal 2977 "parameter" is used for command parameters whose syntax is 2978 specified elsewhere. The syntax is in alphabetical order. Note 2979 that ABNF strings are case insensitive. 2981 article-command = "ARTICLE" [1*WSP (msg-id / article-number)] 2982 *WSP CRLF 2983 article-number = 1*16DIGIT 2984 augument = parameter ; excluding sequence ".." 2985 body-command = "BODY" [1*WSP (msg-id / article-number)] *WSP 2986 CRLF 2987 command = article-command / 2988 body-command / 2989 debug-command / 2990 date-command / 2991 group-command / 2992 head-command / 2993 help-command / 2994 ihave-command / 2995 last-command / 2996 list-active-times-command / 2997 list-distrib-pats-command / 2998 list-distributions-command / 2999 list-extensions-command / 3000 list-newsgroups-command / 3001 list-overview-fmt-command / 3002 list-command / 3003 listgroup-command / 3004 mode-reader-command / 3005 newgroups-command / 3006 newnews-command / 3007 next-command / 3008 over-command / 3009 pat-command / 3010 post-command / 3011 quit-command / 3012 stat-command 3013 CR = %x0D 3014 CRLF = CR LF 3015 date-command = "DATE" *WSP CRLF 3016 date = 6*8DIGIT 3017 DIGIT = %x30-39 3018 debug-command = "DEBUG" 1*WSP ("ON"/"OFF"/"ACK") *WSP CRLF 3019 group-command = "GROUP" 1*WSP newsgroup *WSP CRLF 3020 head-command = "HEAD" [1*WSP (msg-id / article-number)] *WSP 3021 CRLF 3022 header = parameter 3023 help-command = "HELP" *WSP CRLF 3024 HT = %x09 3025 ihave-command = "IHAVE" 1*WSP msg-id *WSP CRLF 3026 last-command = "LAST" *WSP CRLF 3027 LF = %x0A 3028 list-active-times-command = "LIST" 1*WSP "ACTIVE.TIMES" 3029 [1*WSP wildmat] *WSP CRLF 3030 list-command = "LIST" [1*WSP "ACTIVE" [1*WSP wildmat]] *WSP 3031 CRLF 3032 list-distrib-pats-command = "LIST" 1*WSP "DISTRIB.PATS" *WSP 3033 CRLF 3034 list-distributions-command = "LIST" 1*WSP "DISTRIBUTIONS" *WSP 3035 CRLF 3036 list-extensions-command = "LIST" 1*WSP "EXTENSIONS" *WSP CRLF 3037 list-newsgroups-command = "LIST" 1*WSP "NEWSGROUPS" [1*WSP 3038 wildmat] 3039 *WSP CRLF 3040 list-overview-fmt-command = "LIST" 1*WSP "OVERVIEW.FMT" *WSP 3041 CRLF 3042 listgroup-command = "LISTGROUP" [1*WSP newsgroup] *WSP CRLF 3043 mode-reader-command = "MODE" 1*WSP "READER" *WSP CRLF 3044 msg-id = 3045 newgroups-command = "NEWGROUPS" 1*WSP date 1*WSP time [1*WSP 3046 "GMT"/"UTC"] *WSP CRLF 3047 newnews-command = "NEWNEWS" 1*WSP newsgroup *("," newsgroup) 3048 1*WSP date 1*WSP time [1*WSP "GMT"/"UTC"] 3049 *WSP CRLF 3050 newsgroup = parameter 3051 next-command = "NEXT" *WSP CRLF 3052 over-command = "OVER" [1*WSP range] *WSP CRLF 3053 parameter = 1*(%x21-FF) ; generic command parameter 3054 pat-command = "PAT" 1*WSP header 1*WSP (range / msg-id) 3055 *(1*WSP wildmat) *WSP CRLF 3056 post-command = "POST" *WSP CRLF 3057 quit-command = "QUIT" *WSP CRLF 3058 range = article-number ["-" [article-number]] 3059 SP = %x20 3060 stat-command = "STAT" [1*WSP (msg-id / article-number)] *WSP 3061 CRLF 3062 time = 6DIGIT 3063 UTF-8-non-ascii = UTF8-2 / UTF8-3 / UTF8-4 / UTF8-5 / UTF8-6 3064 UTF8-1 = %x80-BF 3065 UTF8-2 = %xC0-DF UTF8-1 3066 UTF8-3 = %xE0-EF 2UTF8-1 3067 UTF8-4 = %xF0-F7 3UTF8-1 3068 UTF8-5 = %xF8-FB 4UTF8-1 3069 UTF8-6 = %xFC-FD 5UTF8-1 3070 wildmat = ["!"]1*("*" / "?" / wildmat-exact / wildmat-set / 3071 "\" (%x22-7F / UTF-8-non-ascii)) 3072 wildmat-exact = %x22-29 / %x2B-3E / %x40-5A / %x5D-7F / UTF-8- 3073 non-ascii ; exclude space ! * ? [ \ 3074 wildmat-non-hyphen = %x21-2C / %x2E-7F / UTF-8-non-ascii ; 3075 exclude space - 3076 wildmat-set = "[" ["^"] ["]" / "-"] *(wildmat-non-hyphen"["-" 3077 wildmat-non-hyphen]) ["-"] 3078 WSP = SP / HT 3080 14. Security Considerations 3082 This section is meant to inform application developers, 3083 information providers, and users of the security limitations 3084 in NNTP as described by this document. The discussion does not 3085 include definitive solutions to the problems revealed, though 3086 it does make some suggestions for reducing security risks. 3088 14.1 Personal and Proprietary Information 3090 NNTP, because it was created to distribute network news 3091 articles, will forward whatever information is stored in those 3092 articles. Specification of that information is outside this 3093 scope of this document, but it is likely that some personal 3094 and/or proprietary information is available in some of those 3095 articles. It is very important that designers and implementers 3096 provide informative warnings to users so personal and/or 3097 proprietary information is not disclosed inadvertently. 3098 Additionally, effective and easily understood mechanisms to 3099 manage the distribution of news articles must be provided to 3100 NNTP Server administrators, so that they are able to report 3101 with confidence what information is and is not being forwarded 3102 in news articles passing though their servers. 3104 14.2 Abuse of Server Log Information 3106 A server is in the position to save session data about a 3107 user's requests that might identify their reading patterns or 3108 subjects of interest. This information is clearly confidential 3109 in nature and its handling can be constrained by law in 3110 certain countries. People using the NNTP protocol to provide 3111 data are responsible for ensuring that such material is not 3112 distributed without the permission of any individuals that are 3113 identifiable by the published results. 3115 14.3 DNS Spoofing 3117 Clients and Servers using NNTP rely heavily on the Domain Name 3118 Service, and are thus generally prone to security attacks 3119 based on the deliberate mis-association of IP addresses and 3120 DNS names. Clients and Servers need to be cautious in assuming 3121 the continuing validity of an IP number/DNS name association. 3123 In particular, NNTP clients and servers SHOULD rely on their 3124 name resolver for confirmation of an IP number/DNS name 3125 association, rather than caching the result of previous host 3126 name lookups. Many platforms already can cache host name 3127 lookups locally when appropriate, and they SHOULD be 3128 configured to do so. It is proper for these lookups to be 3129 cached, however, only when the TTL (Time To Live) information 3130 reported by the name server makes it likely that the cached 3131 information will remain useful. 3133 If NNTP clients or servers cache the results of host name 3134 lookups in order to achieve a performance improvement, they 3135 MUST observe the TTL information reported by DNS. 3137 If NNTP clients or servers do not observe this rule, they 3138 could be spoofed when a previously-accessed server's IP 3139 address changes. As network renumbering is expected to become 3140 increasingly common, the possibility of this form of attack 3141 will grow. Observing this requirement thus reduces this 3142 potential security vulnerability. 3144 This requirement also improves the load-balancing behavior of 3145 clients for replicated servers using the same DNS name and 3146 reduces the likelihood of a user's experiencing failure in 3147 accessing sites which use that strategy. 3149 14.4 Weak Authentication and Access Control 3151 There is no user-based or token-based authentication in the 3152 basic NNTP specification. Access is normally controlled by 3153 server configuration files. Those files specify access by 3154 using domain names or IP addresses. However, this 3155 specification does permit the creation of extensions to the 3156 NNTP protocol itself for such purposes. While including such 3157 mechanisms is optional, doing so is strongly encouraged. 3159 Other mechanisms are also available. For example, a proxy 3160 server could be put in place that requires authentication 3161 before connecting via the proxy to the NNTP server. 3163 15. References 3165 [1] Kantor, B and P. Lapsley, "Network News Transfer Protocol", 3166 RFC-977, U.C. San Diego and U.C. Berkeley. 3168 [2] Yergeau, F., "UTF-8, a transformation format of ISO 10646", 3169 RFC 2279, Alis Technologies. 3171 [3] Coded Character Set-7-bit American Standard Code for 3172 Information Interchange, ANSI x3.4-1986. 3174 [4] Bradner, Scott, "Key words for use in RFCs to Indicate 3175 Requirement Levels", RFC-2119, Harvard University. 3177 [5] Salz, Rich, Manual Page for wildmat(3) from the INN 1.4 3178 distribution, UUNET Technologies, Revision 1.10, April, 1992. 3180 [6] Horton, M.R. and R. Adams, "Standard for interchange of 3181 USENET messages", RFC-1036, AT&T Bell Laboratories and Center 3182 for Seismic Studies, December, 1987. 3184 [7] Robertson, Rob, "FAQ: Overview database / NOV General 3185 Information", ftp://ftp.uu.net/networking/news/nntp/inn/faq- 3186 nov.Z, January, 1995. 3188 [8] Mills, David L., "Network Time Protocol (Version 3), 3189 Specification, Implementation and Analysis", RFC-1305, 3190 University of Delaware, March 1992. 3192 [9] Crocker, D. and Overell, P., "Augmented BNF for Syntax 3193 Specifications: ABNF", RFC-2234, Internet Mail Consortium and 3194 Demon Internet, Ltd. 3196 16. Notes 3198 UNIX is a registered trademark of the X/Open Consortium. 3200 17. Acknowledgments 3202 The author acknowledges the original authors of NNTP as 3203 documented in RFC 977: Brian Kantor and Phil Lapsey. 3205 The author gratefully acknowledges the work of the NNTP 3206 committee chaired by Eliot Lear. The organization of this 3207 document was influenced by the last available draft from this 3208 working group. A special thanks to Eliot for generously 3209 providing the original machine readable sources for that 3210 document. 3212 The author gratefully acknowledges the work of the Marshall 3213 Rose & John G. Meyers in RFC 1939 and the work of the DRUMS 3214 working group, specifically RFC 1869, which is the basis of 3215 the NNTP extensions mechanism detailed in this document. 3217 The author gratefully acknowledges the authors of RFC 2616 for 3218 providing specific and relevant examples of security issues 3219 that should be considered for HTTP. Since many of the same 3220 considerations exist for NNTP, those examples that are 3221 relevant have been included here with some minor rewrites. 3223 The author gratefully acknowledges the comments and additional 3224 information provided by the following individuals in preparing 3225 one of the progenitors of this document: 3227 . Wayne Davison 3228 . Clive D.W. Feather 3229 . Chris Lewis 3230 . Tom Limoncelli 3231 . Eric Schnoebelen 3232 . Rich Salz 3234 This work was motivated by the work of various newsreader 3235 authors and newsserver authors, which includes those listed 3236 below: 3238 . Rick Adams -- Original author of the NNTP extensions to the RN 3239 newsreader and last maintainer of Bnews 3240 . Stan Barber -- Original author of the NNTP extensions to the 3241 newsreaders that are part of Bnews. 3242 . Geoff Collyer -- Original author of the OVERVIEW database 3243 proposal and one of the original authors of CNEWS 3244 . Dan Curry -- Original author of the xvnews newsreader 3245 . Wayne Davision -- Author of the first threading extensions to the 3246 RN newsreader (commonly called TRN). 3247 . Geoff Huston -- Original author of ANU NEWS 3248 . Phil Lapsey -- Original author of the UNIX reference 3249 implementation 3250 . Ian Lea -- Maintainer of the TIN newsreader 3251 . Chris Lewis -- First known implementor of the AUTHINFO GENERIC 3252 extension 3253 . Rich Salz -- Original author of INN 3254 . Henry Spencer -- One of the original authors of CNEWS 3255 . Kim Storm -- Original author of the NN newsreader 3257 18. Author's Address 3259 Stan Barber 3260 P.O. Box 300481 3261 Houston, Texas 77230 3262 Email: 3263 This document expires January 15, 2001.