Articles may be referenced using either their number (from the listgroup command) or their message identifier:
head 2
221 2 ‹7g5bhm$8f$2@news.vbrew.com› head
Path: news.vbrew.com!not-for-mail
From: terry@richard.geek.org.au
Newsgroups: junk
Subject: test message number 2
Date: 27 Apr 1999 21:51:50 GMT
Organization: The Virtual brewery
Lines: 2
Message-ID: ‹7g5bhm$8f$2@news.vbrew.com›
NNTP-Posting-Host: localhost
X-Server-Date: 27 Apr 1999 21:51:50 GMT
Body:
Xref: news.vbrew.com junk:2
.
Retrieving an Article Body Only
If, on the other hand, the user decides she does want to read the article, her newsreader needs a way of requesting that the message body be transmitted. The body command is used for this purpose. It operates in much the same way as the head command, except that only the message body is returned:
body 2
222 2 ‹7g5bhm$8f$2@news.vbrew.com› body
This is another test message, please feel free to ignore it too.
.
Reading an Article from a Group
While it is normally most efficient to separately transfer the headers and bodies of selected articles, there are occasions when we are better off transferring the complete article. A good example of this is in applications through which we want to transfer all of the artices in a group without any sort of preselection, such as when we are using an NNTP cache program like leafnode. [134] leafnode is available by anonymous FTP from wpxx02.toxi.uni-wuerzburg.de in the /pub/ directory.
Naturally, NNTP provides a means of doing this, and not surprisingly, it operates almost identically to the head command as well. The article command also accepts an article number or message ID as an argument, but returns the whole article including its header:
article 1
220 1 ‹7g2o5r$aa$6@news.vbrew.com› article
Path: news.vbrew.com!not-for-mail
From: terry@richard.geek.org.au
Newsgroups: junk
Subject: test message number 1
Date: 26 Apr 1999 22:08:59 GMT
Organization: The Virtual brewery
Lines: 2
Message-ID: ‹7g2o5r$aa$6@news.vbrew.com›
NNTP-Posting-Host: localhost
X-Server-Date: 26 Apr 1999 22:08:59 GMT
Body:
Xref: news.vbrew.com junk:1
This is a test message, please feel free to ignore it.
.
If you attempt to retrieve an unknown article, the server will return a message with an appropriately coded response code and perhaps a readable text message:
article 4
423 Bad article number
We've described how the most important NNTP commands are used in this section. If you're interested in developing software that implements the NNTP protocol, you should refer to the relevant RFC documents; they provide a great deal of detail that we couldn't include here.
Let's now look at NNTP in action through the nntpdserver.
Installing the NNTP Server
The NNTP server ( nntpd) may be compiled in two ways, depending on the expected load on the news system. There are no compiled versions available, because of some site-specific defaults that are hardcoded into the executable. All configuration is done through macros defined in common/conf.h .
nntpdmay be configured as either a standalone server that is started at system boot time from an rc file, or a daemon managed by inetd. In the latter case, you have to have the following entry in /etc/inetd.conf :
nntp stream tcp nowait news /usr/etc/in.nntpd nntpd
The inetd.conf syntax is described in detail in Chapter 12, Important Network Features. If you configure nntpd as standalone, make sure that any such line in inetd.conf is commented out. In either case, you have to make sure the following line appears in /etc/services :
nntp 119/tcp readnews untp # Network News Transfer Protocol
To temporarily store any incoming articles, nntpd also needs a .tmp directory in your news spool. You should create it using the following commands:
# mkdir /var/spool/news/.tmp
# chown news.news /var/spool/news/.tmp
Access to NNTP resources is governed by the file nntp_access in /etc/news . Lines in this file describe the access rights granted to foreign hosts. Each line has the following format:
site read|xfer|both|no post|no [! exceptgroups ]
If a client connects to the NNTP port, nntpdattempts to obtain the host's fully qualified domain name from its IP address using reverse lookup. The client's hostname and IP address are checked against the site field of each entry in the order in which they appear in the file. Matches may be either partial or exact. If an entry matches exactly, it applies; if the match is partial, it applies only if there is no other match following it that is at least as good. site may be specified in one of the following ways:
Hostname
This is a fully qualified domain name of a host. If this matches the client's canonical hostname literally, the entry applies, and all following entries are ignored.
IP address
This is an IP address in dotted quad notation. If the client's IP address matches this, the entry applies, and all following entries are ignored.
Domain name
This is a domain name, specified as *.domain . If the client's hostname matches the domain name, the entry matches.
Network name
This is the name of a network as specified in /etc/networks . If the network number of the client's IP address matches the network number associated with the network name, the entry matches.
Default
The string default matches any client.
Entries with a more general site specification should be specified earlier, because any matches will be overridden by later, more exact matches.
The second and third fields describe the access rights granted to the client. The second field details the permissions to retrieve news by pulling ( read ), and transmit news by pushing ( xfer ). A value of both enables both; no denies access altogether. The third field grants the client the right to post articles, i.e., deliver articles with incomplete header information, which is completed by the news software. If the second field contains no , the third field is ignored.
The fourth field is optional and contains a comma-separated list of groups to which the client is denied access.
This is a sample nntp_access file:
#
# by default, anyone may transfer news, but not read or post
default xfer no
#
# public.vbrew.com offers public access via modem. We allow
# them to read and post to any but the local.* groups
public.vbrew.com read post!local
#
# all other hosts at the brewery may read and post
Читать дальше