draft-ietf-asid-whoispp-01.txt   draft-ietf-asid-whoispp-02.txt 
ASID Working Group Patrik Faltstrom ASID Working Group Patrik Faltstrom
Internet-Draft Tele 2 Internet-Draft Tele 2
Expires: September 1997 Sima Newell Expires: September 11, 1998 Leslie L. Daigle
draft-ietf-asid-whoispp-01.txt Bunyip Information Systems Inc. draft-ietf-asid-whoispp-02.txt Bunyip Information Systems Inc.
Replaces: RFC-1835 Leslie L. Daigle Replaces: RFC-1835 Sima Newell
Bunyip Information Systems Inc. Bunyip Information Systems Inc.
Architecture of the Whois++ service Architecture of the Whois++ service
Status of this Memo Status of this Memo
This document is an Internet-Draft. Internet-Drafts are working This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its documents of the Internet Engineering Task Force (IETF), its
areas, and its working groups. Note that other groups may also areas, and its working groups. Note that other groups may also
distribute working documents as Internet-Drafts. distribute working documents as Internet-Drafts.
skipping to change at line 47 skipping to change at page 1, line 48
an extension to the simple WHOIS data model and query protocol and a an extension to the simple WHOIS data model and query protocol and a
companion extensible, distributed indexing service. A number of companion extensible, distributed indexing service. A number of
options have also been added such as the use of multiple languages options have also been added such as the use of multiple languages
and character sets, more advanced search expressions, structured data and character sets, more advanced search expressions, structured data
and a number of other useful features. An optional authentication and a number of other useful features. An optional authentication
mechanism for protecting all or part of the associated Whois++ mechanism for protecting all or part of the associated Whois++
information database from unauthorized access is also described. information database from unauthorized access is also described.
Table of Contents Table of Contents
Part I - Whois++ Overview ................................. Part I - Whois++ Overview ................................. 3
1.1. Purpose and Motivation .............................. 1.1. Purpose and Motivation .............................. 3
1.2. Basic Information Model ............................. 1.2. Basic Information Model ............................. 4
1.2.1. Changes to the current WHOIS Model ................ 1.2.1. Changes to the current WHOIS Model ................ 5
1.2.2. Registering Whois++ servers ....................... 1.2.2. Registering Whois++ servers ....................... 6
1.2.3. The Whois++ Search Selection Mechanism ............ 1.2.3. The Whois++ Search Selection Mechanism ............ 6
1.2.4. The Whois++ Architecture .......................... 1.2.4. The Whois++ Architecture .......................... 7
1.3. Indexing in Whois++ ................................. 1.3. Indexing in Whois++ ................................. 7
1.4. Getting Help ........................................ 1.4. Getting Help ........................................ 8
1.4.1. Minimum HELP Required ............................. 1.4.1. Minimum HELP Required ............................. 8
1.5. Options and Constraints ............................. 1.5. Options and Constraints ............................. 9
1.6. Formatting Responses ................................ 1.6. Formatting Responses ................................ 9
1.7. Reporting Warnings and Errors ....................... 1.7. Reporting Warnings and Errors ....................... 10
1.8. Privacy and Security Issues ......................... 1.8. Privacy and Security Issues ......................... 10
Part II - Whois++ Implementation .......................... Part II - Whois++ Implementation ........................... 10
2.1. The Whois++ interaction model ....................... 2.1. The Whois++ interaction model ....................... 10
2.2. The Whois++ Command set ............................. 2.2. The Whois++ Command set ............................. 11
2.2.1. System Commands ................................... 2.2.1. System Commands ................................... 11
2.2.1.1. The COMMANDS command ............................ 2.2.1.1. The COMMANDS command ............................ 12
2.2.1.2. The CONSTRAINTS command ......................... 2.2.1.2. The CONSTRAINTS command ......................... 13
2.2.1.3. The DESCRIBE command ............................ 2.2.1.3. The DESCRIBE command ............................ 13
2.2.1.4. The HELP command ................................ 2.2.1.4. The HELP command ................................ 13
2.2.1.5. The LIST command ................................ 2.2.1.5. The LIST command ................................ 13
2.2.1.6. The POLLED-BY command ........................... 2.2.1.6. The POLLED-BY command ........................... 13
2.2.1.7. The POLLED-FOR command .......................... 2.2.1.7. The POLLED-FOR command .......................... 14
2.2.1.8. The SHOW command ................................ 2.2.1.8. The SHOW command ................................ 14
2.2.1.9. The VERSION command ............................. 2.2.1.9. The VERSION command ............................. 14
2.2.2. The Search Command ................................ 2.2.2. The Search Command ................................ 14
2.2.2.1. Format of a Search Term ......................... 2.2.2.1. Format of a Search Term ......................... 15
2.2.2.2. Format of a Search String ....................... 2.2.2.2. Format of a Search String ....................... 16
2.3. Whois++ Constraints ................................. 2.3. Whois++ Constraints ................................. 16
2.3.1. Required Constraints .............................. 2.3.1. Required Constraints .............................. 17
2.3.2. Optional CONSTRAINTS .............................. 2.3.2. Optional CONSTRAINTS .............................. 17
2.3.2.1. The SEARCH Constraint ........................... 2.3.2.1. The SEARCH Constraint ........................... 18
2.3.2.2. The FORMAT Constraint ........................... 2.3.2.2. The FORMAT Constraint ........................... 18
2.3.2.3. The MAXFULL Constraint .......................... 2.3.2.3. The MAXFULL Constraint .......................... 18
2.3.2.4. The MAXHITS Constraint .......................... 2.3.2.4. The MAXHITS Constraint .......................... 19
2.3.2.5. The CASE Constraint ............................. 2.3.2.5. The CASE Constraint ............................. 19
2.3.2.6. The AUTHENTICATE Constraint ..................... 2.3.2.6. The AUTHENTICATE Constraint ..................... 19
2.3.2.7. The NAME Constraint ............................. 2.3.2.7. The LANGUAGE Constraint ......................... 19
2.3.2.8. The PASSWORD Constraint ......................... 2.3.2.8. The INCHARSET Constraint ....................... 20
2.3.2.9. The LANGUAGE Constraint ......................... 2.3.2.9. The INCHARSET Constraint ....................... 20
2.3.2.10. The INCHARSET Constraint ....................... 2.3.2.10. The IGNORE Constraint .......................... 20
2.3.2.11. The INCHARSET Constraint ....................... 2.3.2.11. The INCLUDE Constraint ......................... 20
2.3.2.12. The IGNORE Constraint .......................... 2.3.2.12. The HOLD Constraint ............................ 20
2.3.2.13. The INCLUDE Constraint ......................... 2.4. Server Response Modes ............................... 21
2.4. Server Response Modes ............................... 2.4.1. Default Responses ................................. 21
2.4.1. Default Responses ................................. 2.4.2. Format of Responses ............................... 22
2.4.2. Format of Responses ............................... 2.4.3. Syntax of a Formatted Response .................... 22
2.4.3. Syntax of a Formatted Response .................... 2.4.3.1. A FULL format response .......................... 23
2.4.3.1. A FULL format response .......................... 2.4.3.2. ABRIDGED Format Response ........................ 23
2.4.3.2. ABRIDGED Format Response ........................ 2.4.3.3. HANDLE Format Response .......................... 23
2.4.3.3. HANDLE Format Response .......................... 2.4.3.4. SUMMARY Format Response ......................... 23
2.4.3.4. SUMMARY Format Response ......................... 2.4.3.5. SERVER-TO-ASK Response .......................... 24
2.4.3.5. SERVERS-TO-ASK Response ......................... 2.4.4. System Generated Messages ......................... 24
2.4.4. System Generated Messages ......................... 2.5. Compatibility with Older WHOIS Servers .............. 25
2.5. Compatibility with Older WHOIS Servers .............. 3. Miscellaneous ......................................... 25
3. Miscellaneous ......................................... 3.1. Acknowledgements .................................... 25
3.1. Acknowledgements .................................... 3.2. References .......................................... 26
3.2. References .......................................... 3.3. Authors' Addresses .................................. 26
3.3. Authors' Addresses .................................. Appendix A - Some Sample Queries ........................... 27
Appendix A - Some Sample Queries .......................... Appendix B - Some sample responses ........................ 28
Appendix B - Some sample responses ........................ Appendix C - Sample responses to system commands .......... 29
Appendix C - Sample responses to system commands .......... Appendix D - Sample Whois++ session ....................... 31
Appendix D - Sample Whois++ session ....................... Appendix E - System messages .............................. 32
Appendix E - System messages .............................. Appendix F - The Whois++ Input Syntax ..................... 34
Appendix F - The Whois++ Input Syntax ..................... Appendix G - The Whois++ Response Syntax .................. 36
Appendix G - The Whois++ Response Syntax .................. Appendix H - Description of Regular expressions ........... 39
Appendix H - Description of Regular expressions ...........
1. Part I - Whois++ Overview 1. Part I - Whois++ Overview
1.1. Purpose and Motivation 1.1. Purpose and Motivation
The current NIC WHOIS service [HARR85] is used to provide a very The current NIC WHOIS service [HARR85] is used to provide a very
limited directory service, serving information about a small number limited directory service, serving information about a small number
of Internet users registered with the DDN NIC. Over time the basic of Internet users registered with the DDN NIC. Over time the basic
service has been expanded to serve additional information and similar service has been expanded to serve additional information and similar
services have also been set up on other hosts. Unfortunately, these services have also been set up on other hosts. Unfortunately, these
skipping to change at line 169 skipping to change at page 4, line 9
parsed. An optional authentication mechanism for protecting all or parsed. An optional authentication mechanism for protecting all or
parts of the associated Whois++ information database from parts of the associated Whois++ information database from
unauthorized access is also briefly described. unauthorized access is also briefly described.
The architecture of Whois++ allows distributed maintenance of The architecture of Whois++ allows distributed maintenance of
the directory contents and the use of the Whois++ indexing service the directory contents and the use of the Whois++ indexing service
for locating additional Whois++ servers. Although a general overview for locating additional Whois++ servers. Although a general overview
of this service is included for completeness, the indexing extensions of this service is included for completeness, the indexing extensions
are described described separately in [WINDX]. are described described separately in [WINDX].
It should be noted that Whois++ is not backward compatible with WHOIS. It should be noted that Whois++ is not backward compatible with
WHOIS.
1.2. The Whois++ Information Model 1.2. The Whois++ Information Model
The Whois++ service is based on the use of information templates, which The Whois++ service is based on the use of information templates,
consist of ordered sets of data elements (or attribute-value pairs). which consist of ordered sets of data elements (or attribute-value
It underlying recommendation is to use standardized templates where pairs). It underlying recommendation is to use standardized
available. templates where available.
It is intended that adding structured template types to a server It is intended that adding structured template types to a server
and subsequently searching through information stored in templates and subsequently searching through information stored in templates
of a specified type should be simple tasks. The creation and use of of a specified type should be simple tasks. The creation and use of
customized templates should also be possible with little effort, although customized templates should also be possible with little effort,
their use is discouraged where appropriate standardized templates exist. although their use is discouraged where appropriate standardized
templates exist.
Registration and schema definitions are done on an attribute by Registration and schema definitions are done on an attribute by
attribute basis, so a client that receives a record parses the attribute basis, so a client that receives a record parses the
record structure one attribute at a time. Because of this system, record structure one attribute at a time. Because of this system,
the client does not need to know the structure of the whole record, the client does not need to know the structure of the whole record,
only individual attributes. If the client sees an unknown only individual attributes. If the client sees an unknown
attribute, it will skip that one and continue parsing the attribute, it will skip that one and continue parsing the
subsequent attributes. A server that defines schemas can therefore subsequent attributes. A server that defines schemas can therefore
add its own unregistered attributes to a well-defined template type. add its own unregistered attributes to a well-defined template type.
skipping to change at line 231 skipping to change at page 5, line 19
The current WHOIS service is based upon an extremely simple data The current WHOIS service is based upon an extremely simple data
model. The NIC WHOIS database consists of a series of individual model. The NIC WHOIS database consists of a series of individual
records, each of which is identified by a single unique identifer records, each of which is identified by a single unique identifer
(the "handle"). Each record contains one or more lines of (the "handle"). Each record contains one or more lines of
information. Currently, there is no structure or implicit ordering of information. Currently, there is no structure or implicit ordering of
this information, although each record is implicitly concerned this information, although each record is implicitly concerned
with information about a single user or service. with information about a single user or service.
We have implemented two basic changes to this model. First, we have We have implemented two basic changes to this model. First, we have
structured the information within the database as collections of data structured the information within the database as collections of data
elements that are simple attribute/value pairs. Each individual record elements that are simple attribute/value pairs. Each individual
contains a specified ordered set of these data elements. record contains a specified ordered set of these data elements.
Second, we have introduced the classing of database records into Second, we have introduced the classing of database records into
template types. In effect, each record is based upon one template of a template types. In effect, each record is based upon one template
specified set; each template contains a finite and specified number of a specified set; each template contains a finite and specified
of data elements. This classing allows users to limit searches number of data elements. This classing allows users to limit
to specific collections of information, such as information about searches to specific collections of information, such as information
users, services, abstracts of papers, or descriptions of software. about users, services, abstracts of papers, or descriptions of
software.
Since the data typing is done at the attribute level, not the template Since the data typing is done at the attribute level, not the
level, it is also possible to add non-standard attributes to a template level, it is also possible to add non-standard attributes to
well-known template type. a well-known template type.
As an addition to the model, we require that each individual Whois++ As an addition to the model, we require that each individual Whois++
database on the Internet be assigned a unique handle, analogous to database on the Internet be assigned a unique handle, analogous to
the handle associated with each database record. the handle associated with each database record.
The Whois++ database structure is shown in Fig. 1. The Whois++ database structure is shown in Fig. 1.
______________________________________________________________________ ______________________________________________________________________
| | | |
| + Single unique Whois++ server handle | | + Single unique Whois++ server handle |
skipping to change at line 295 skipping to change at page 6, line 31
Internet as a unique pair consisting of a server handle and a record Internet as a unique pair consisting of a server handle and a record
handle. handle.
A unique registered handle is preferable to using the host's IP A unique registered handle is preferable to using the host's IP
address, since it is conceivable that the Whois++ server for a address, since it is conceivable that the Whois++ server for a
particular domain may move over time. If we preserve the unique particular domain may move over time. If we preserve the unique
Whois++ handle in such cases we have the option of using it for Whois++ handle in such cases we have the option of using it for
resource discovery and networked information retrieval (see [IIIR] resource discovery and networked information retrieval (see [IIIR]
for a discussion of resource and discovery and support issues). for a discussion of resource and discovery and support issues).
Uniqueness of server handles can be guaranteed by registering them with Uniqueness of server handles can be guaranteed by registering them
IANA. with IANA.
We believe that organizing information around a series of such We believe that organizing information around a series of such
templates will make it easier for administrators to gather and templates will make it easier for administrators to gather and
maintain this information and thus encourage them to make such maintain this information and thus encourage them to make such
information available. At the same time, as users become more information available. At the same time, as users become more
familiar with the data elements available within specific templates familiar with the data elements available within specific templates
they will be able to specify their searches better, and the service they will be able to specify their searches better, and the service
will become more useful. will become more useful.
1.2.3. The Whois++ Search Selection Mechanism 1.2.3. The Whois++ Search Selection Mechanism
The WHOIS++ search mechanism is intended to be extremely simple. A The WHOIS++ search mechanism is intended to be extremely simple. A
search command comprises one required element and one optional search command comprises one required element and one optional
element. The first (required) element is a set of one or more search element. The first (required) element is a set of one or more search
terms. The second (optional) element is a colon followed by set of terms. The second (optional) element is a colon followed by set of
one or more global constraints, which modify or control the search. one or more global constraints, which modify or control the search.
Within each search term, the user may specify the template type, Within each search term, the user may specify the template type,
attribute, value or handle that any record returned must satisfy. Each attribute, value or handle that any record returned must satisfy.
search term can have an optional set of local constraints that apply Each search term can have an optional set of local constraints that
only to that term. apply only to that term.
A Whois++ database may be seen as a single collection of A Whois++ database may be seen as a single collection of
typed records. Each search term specifies a further constraint that the typed records. Each search term specifies a further constraint that
selected set of output records must satisfy. Each term may thus be the selected set of output records must satisfy. Each term may thus
thought of as performing a subtractive selection, in the sense that be thought of as performing a subtractive selection, in the sense
any record that does not fulfill the term is discarded from the result that any record that does not fulfill the term is discarded from the
set. Result sets can be further specified by supplying multiple search result set. Result sets can be further specified by supplying
terms, related by logical connectives (AND, OR, NOT). multiple search terms, related by logical connectives (AND, OR, NOT).
1.2.4. The Whois++ Architecture 1.2.4. The Whois++ Architecture
The Whois++ directory service has an architecture which is separated The Whois++ directory service has an architecture which is separated
into two components: the base level server, which is described in into two components: the base level server, which is described in
this paper, and an indexing server (described in [WINDX]). A single this paper, and an indexing server (described in [WINDX]). A single
physical server can act as both a base level server and an indexing server. physical server can act as both a base level server and an indexing
server.
A base level server is one which contains only filled templates. An A base level server is one which contains only filled templates. An
indexing server is one which contains forward knowledge (q.v.) and indexing server is one which contains forward knowledge (q.v.) and
pointers to other indexing servers or base level servers. pointers to other indexing servers or base level servers.
1.3. Indexing in Whois++ 1.3. Indexing in Whois++
Indexing in Whois++ is used to tie together many base level servers Indexing in Whois++ is used to tie together many base level servers
and index servers into a unified directory service. For more detailed and index servers into a unified directory service. For more
information on this subject, see [WINDX]. detailed information on this subject, see [WINDX].
Each base level server and index server that is to participate Each base level server and index server that is to participate
in the unified directory service must generate forward knowledge in the unified directory service must generate forward knowledge
for the entries it contains. One type of forward knowledge is the for the entries it contains. One type of forward knowledge is the
"centroid". "centroid".
An example of a centroid is as follows. Consider a Whois++ server An example of a centroid is as follows. Consider a Whois++ server
that contains exactly three records: that contains exactly three records:
Record 1 Record 2 Record 1 Record 2
skipping to change at line 391 skipping to change at page 8, line 22
Index servers can collect forward knowledge for any servers it Index servers can collect forward knowledge for any servers it
polls. In effect, all of the servers that the index server knows polls. In effect, all of the servers that the index server knows
about can be searched with a single query to the index server; the about can be searched with a single query to the index server; the
index server holds the forward knowledge along with pointers to the index server holds the forward knowledge along with pointers to the
servers it indexes, and can refer the query to servers which might servers it indexes, and can refer the query to servers which might
hold information which satisfies the query. hold information which satisfies the query.
Implementors of this protocol are strongly encouraged to incorporate Implementors of this protocol are strongly encouraged to incorporate
centroid generation abilities into their servers. centroid generation abilities into their servers.
Whois++ uses the Common Indexing Protocol, which was originally described Whois++ uses the Common Indexing Protocol, which was originally
in [WINDX] as a centroid-like object to provide index information described in [WINDX] as a centroid-like object to provide index
(forward knowledge) about server contents. This work is being extended in information (forward knowledge) about server contents. This work
the IETF's FIND Working-Group. is being extended in the IETF's FIND Working-Group.
------------------------------------------------------------------- -------------------------------------------------------------------
____ ____ ---- ----
top level | | | | top level | | | |
whois index | | | | whois index | | | |
servers ---- ---- servers ---- ----
/ \________ / / \________ /
/ \ / / \ /
____ ____ ____ ____
first level | | | | first level | | | |
whois index | | | | whois index | | | |
servers ---- ---- servers ---- ----
/ / \ / / \
skipping to change at line 470 skipping to change at page 9, line 49
perform such tasks as provide security options, modify the perform such tasks as provide security options, modify the
information contents of a server or add multilingual support. The information contents of a server or add multilingual support. The
required set of Whois++ commands are listed in section 2.2. required set of Whois++ commands are listed in section 2.2.
Whois++ constraints are described in section 2.3. Optional Whois++ constraints are described in section 2.3. Optional
constraints are described in section 2.3.2. constraints are described in section 2.3.2.
1.6. Formatting Responses 1.6. Formatting Responses
The output returned by a Whois++ server is structured to allow The output returned by a Whois++ server is structured to allow
machine parsing and automated handling. Of particular interest is the machine parsing and automated handling. Of particular interest is the
ability to return summary information about a search instead of having ability to return summary information about a search instead of
to return the entire results. having to return the entire results.
All output of searches will be returned in one of five output All output of searches will be returned in one of five output
formats, which will be one of FULL, ABRIDGED, HANDLE, SUMMARY or formats, which will be one of FULL, ABRIDGED, HANDLE, SUMMARY or
SERVER-TO-ASK. Note that a conforming server is only required to SERVER-TO-ASK. Note that a conforming server is only required to
support the FULL format. support the FULL format.
When available, SERVER-TO-ASK format is used to indicate that a When available, SERVER-TO-ASK format is used to indicate that a
search cannot be completed but that one or more alternative Whois++ search cannot be completed but that one or more alternative Whois++
servers may be able to perform the search. servers may be able to perform the search.
skipping to change at line 502 skipping to change at page 10, line 29
All system messages are numerical, but can be tagged with text. It is All system messages are numerical, but can be tagged with text. It is
the client's decision if the text is presented to the user. the client's decision if the text is presented to the user.
1.8. Privacy and Security Issues 1.8. Privacy and Security Issues
The basic Whois++ service was conceived as a simple, unauthenticated The basic Whois++ service was conceived as a simple, unauthenticated
information lookup service, but there are occasions when information lookup service, but there are occasions when
authentication mechanisms are required. To handle such cases, one authentication mechanisms are required. To handle such cases, one
optional mechanism is provided for authenticating each Whois++ optional mechanism is provided for authenticating each Whois++
transaction. This is the ability to name a (mutually-recognized) transaction. This is the ability to name a (mutually-recognized)
authentication scheme in the optional AUTHENTICATE global constraint. authentication scheme in the optional AUTHENTICATE global
constraint.
The one currently defined authentication scheme is PASSWORD, which
uses simple password authentication. Any other scheme name used must
begin with the characters "X-" and should thus be regarded as
experimental and non-standard.
Note that the Whois++ authentication mechanism does not dictate the Note that the Whois++ authentication mechanism does not dictate the
actual authentication scheme used, it merely provides a framework for actual authentication scheme used, it merely provides a framework for
indicating that a particular transaction is to be authenticated, and indicating that a particular transaction is to be authenticated, and
the appropriate scheme to use. This mechanism is extensible and the appropriate scheme to use. This mechanism is extensible and
individual implementors are free to add additional schemes. individual implementors are free to add additional schemes.
This document describes a very simple authentication scheme in which a Sophisticated security and authentication schemes may be proposed to
combination of username and password is sent together with the search address specific needs. For example, the Simple Authentication and
string so the server can verify that the user have access to the Security Layer (SASL) work proposed by John Myers (particularly for
information. Note that this is NOT by any means a method recommended POP and IMAP) may be applicable here.
to secure the data itself because both password and information are
transferred unencrypted over the network.
Other, more sophisticated security and authentication schemes may
be proposed to address specific needs. For example, the Simple
Authentication and Security Layer (SASL) work proposed by John Myers
(particularly for POP and IMAP) may be applicable here.
2. Part II - Whois++ Implementation 2. Part II - Whois++ Implementation
2.1. The Whois++ interaction model 2.1. The Whois++ interaction model
The Whois++ service has an assigned port number -- number 63. The Whois++ service has an assigned port number -- number 63.
However, there is nothing inherent the Whois++ protocol or interaction However, there is nothing inherent the Whois++ protocol or
model that prevents it from being used on any TCP connection on interaction model that prevents it from being used on any TCP
any port -- the specification of the connection is outside the scope connection on any port -- the specification of the connection is
of this protocol spec. Once a connection is established, the outside the scope of this protocol spec. Once a connection is
server issues a banner message, and listens for input. The command established, the server issues a banner message, and listens for
specified in this input is processed and the results returned input. The command specified in this input is processed and the
including an ending system message. If the client results returned including an ending system message. If the client
does not specify the optional HOLD constraint, the connection is does not specify the optional HOLD constraint, the connection is
then terminated. then terminated.
If the server supports the optional HOLD constraint, and this If the server supports the optional HOLD constraint, and this
constraint is specified as part of any command, the server continues constraint is specified as part of any command, the server continues
to listen on the connection for another (single) line of input. to listen on the connection for another (single) line of input.
This cycle continues as long as the sender continues to append the This cycle continues as long as the sender continues to append the
required HOLD constraint to each subsequent command. required HOLD constraint to each subsequent command.
2.2. The Whois++ Command set 2.2. The Whois++ Command set
The Whois++ command set consists of a core set of required systems The Whois++ command set consists of a core set of required systems
commands, a single required search command and an set of optional commands, a single required search command and an set of optional
system commands which support features that are not required by all system commands which support features that are not required by all
servers. The set of required Whois++ system commands are listed in servers. The set of required Whois++ system commands are listed in
Table I. Valid search terms for the search command Table I. Valid search terms for the search command are described in
are described in Table II. Table II.
Each Whois++ command also allows the use of one or more controlling Each Whois++ command also allows the use of one or more controlling
constraints, which, when selected, are used to override defaults or constraints, which, when selected, are used to override defaults or
otherwise modify the server's behavior. There is a core set of otherwise modify the server's behavior. There is a core set of
constraints that must be supported by all conforming servers: constraints that must be supported by all conforming servers:
SEARCH (which controls the type of search performed), FORMAT (which SEARCH (which controls the type of search performed), FORMAT (which
determines the output format used) and MAXHITS (which determines the determines the output format used) and MAXHITS (which determines the
maximum number of matches that a search can return). These required maximum number of matches that a search can return). These required
constraints are summarized in Table III. constraints are summarized in Table III.
An additional set of optional constraints are used to provide support An additional set of optional constraints are used to provide support
for different character sets, provide data for the authentication for different character sets, provide data for the authentication
scheme, and requesting multiple transactions during a single communications scheme, and requesting multiple transactions during a single
session. These optional constraints are listed in Table IV. communications session. These optional constraints are listed in
Table IV.
It is possible, using the required COMMANDS and CONSTRAINTS system It is possible, using the required COMMANDS and CONSTRAINTS system
commands, to query any Whois++ server for its list of supported commands, to query any Whois++ server for its list of supported
commands and constraints. commands and constraints.
Please note that the line terminator is defined as a carriage Please note that the line terminator is defined as a carriage
return and line feed (CR/LF) pair. Also, none of the commands or return and line feed (CR/LF) pair. Also, none of the commands or
constraints supported by Whois++ are case sensitive. For example, constraints supported by Whois++ are case sensitive. For example,
the following are equivalent: HELP, Help, help, hElp. the following are equivalent: HELP, Help, help, hElp.
Capitalization of all letters (e.g. HELP) is used only to improve Capitalization of all letters (e.g. HELP) is used only to improve
skipping to change at line 616 skipping to change at page 12, line 26
CONSTRAINTS [ ':' HOLD ] List valid constraints CONSTRAINTS [ ':' HOLD ] List valid constraints
supported by this server supported by this server
DESCRIBE [ ':' HOLD ] Describe this server, DESCRIBE [ ':' HOLD ] Describe this server,
formating the response formating the response
using a standard using a standard
SERVICES template SERVICES template
'?' HELP [<string> [':' (<othercnstrnts> / HOLD) '?' HELP [<string> [':' (<othercnstrnts> / HOLD)
0*(';' (<otherconstraints> / HOLD))]] 0*(';' (<otherconstraints> / HOLD))]]
Provide help specific to this Provide help specific to
Whois++ server, using a this Whois++ server, using
"Help" template a "Help" template
LIST [':' (<othercnstrnts> / HOLD) LIST [':' (<othercnstrnts> / HOLD)
0*(';' (<otherconstraints> / HOLD))] 0*(';' (<otherconstraints> / HOLD))]
List templates supported List templates supported
by this server by this server
POLLED-BY [ ':' HOLD ] List indexing servers POLLED-BY [ ':' HOLD ] List indexing servers
that are known to poll that are known to poll
this server this server
skipping to change at line 643 skipping to change at page 12, line 53
specified in <string> specified in <string>
VERSION [ ':' HOLD ] Show the version of VERSION [ ':' HOLD ] Show the version of
the protocol supported by the protocol supported by
this server this server
Table I - Required Whois++ SYSTEM commands. Table I - Required Whois++ SYSTEM commands.
------------------------------------------------------------------------ ------------------------------------------------------------------------
Below follows a descriptions for each command. Examples of responses Descriptions of each command follow. Examples of responses
to each command are provided in Appendix C. to each command are provided in Appendix C.
2.2.1.1. The COMMANDS command 2.2.1.1. The COMMANDS command
The COMMANDS command returns a list of commands that the server The COMMANDS command returns a list of commands that the server
supports. The response is formatted as a FULL response. supports. The response is formatted as a FULL response.
2.2.1.2. The CONSTRAINTS command 2.2.1.2. The CONSTRAINTS command
The CONSTRAINTS command returns a list of both the constraints and The CONSTRAINTS command returns a list of both the constraints and
their values that the server supports. The response is formatted as a their values that the server supports. The response is formatted as a
FULL response, where every constraint is represented as a separate FULL response, where every constraint is represented as a separate
record. The template name for these records is CONSTRAINT. No record. The template name for these records is CONSTRAINT. No
attention is paid to handles. Each record has, as a minimum, the attention is paid to handles. Each record has, as a minimum, the
skipping to change at line 670 skipping to change at page 13, line 26
- "Constraint", whose value is the constraint name - "Constraint", whose value is the constraint name
- "Default", which shows the default value for this constraint. - "Default", which shows the default value for this constraint.
If the client is permitted to change the value of the constraint, If the client is permitted to change the value of the constraint,
there is also: there is also:
- "Range", which contains a list of values that this - "Range", which contains a list of values that this
server supports, as a comma separated list, or, if the range server supports, as a comma separated list, or, if the range
is numerical, as a pair of numbers separated with a hyphen. is numerical, as a pair of numbers separated with a hyphen.
Note that, irrespective of whether a session is continued (with the HOLD Note that, irrespective of whether a session is continued (with the
constraint) or not, constraints are set to the default value unless HOLD constraint) or not, constraints are set to the default value
explicitly changed with a constraint in each query. unless explicitly changed with a constraint in each query.
2.2.1.3. The DESCRIBE command 2.2.1.3. The DESCRIBE command
The DESCRIBE command gives a brief description about the server in a The DESCRIBE command gives a brief description about the server in a
"Services" template. The result is formatted as a FULL response with "Services" template. The result is formatted as a FULL response with
as a minimum one attribute: as a minimum one attribute:
- "Text", which describes the service in a form legible by human users. - "Text", which describes the service in a form legible by human
users.
2.2.1.4. The HELP command 2.2.1.4. The HELP command
The HELP command takes an optional argument which is the subject on The HELP command takes an optional argument which is the subject on
which to get help. The answer is formatted as a FULL format response. which to get help. The answer is formatted as a FULL format response.
2.2.1.5. The LIST command 2.2.1.5. The LIST command
The LIST command returns the name of the templates available on the The LIST command returns the name of the templates available on the
server. The answer is formatted as a FULL format response. server. The answer is formatted as a FULL format response.
skipping to change at line 734 skipping to change at page 14, line 37
If the server also supports the earlier version of the protocol, If the server also supports the earlier version of the protocol,
"1.0", two records are given back as a response to the VERSION "1.0", two records are given back as a response to the VERSION
command, one for each version supported. command, one for each version supported.
2.2.2. The SEARCH Command 2.2.2. The SEARCH Command
A SEARCH command comprises one required element and one optional A SEARCH command comprises one required element and one optional
element. The first (required) element is a set of one or more search element. The first (required) element is a set of one or more search
terms. The second (optional) element is a set of global constraints, terms. The second (optional) element is a set of global constraints,
which modify or control the search. Each search term can have an which modify or control the search.
optional set of local constraints that apply only to that term.
Each attribute value in the Whois++ database is divided into one or Each attribute value in the Whois++ database is divided into one or
more words separated by whitespace (see Appendix F for a definition more words separated by whitespace:
of whitespace) . Each search term operates on every word in the attribute
value.
Two or more search terms have to be combined with boolean operators AND, whitespace = 1*( %d32 / %d09 / %d10 / %d13 / %d64 )
OR or NOT. The operator AND has higher precedence than the operator OR, ; space tab LF CR @
but this can be changed by the use of parentheses.
Each search term operates on every word in the attribute value.
Two or more search terms have to be combined with boolean operators
AND, OR or NOT. The operator AND has higher precedence than the
operator OR, but this can be changed by the use of parentheses.
Boolean operators function as follows for two search terms, A and Boolean operators function as follows for two search terms, A and
B. Let A1 be the result set from the first search term and B1 be the B. Let A1 be the result set from the first search term and B1 be the
result set from the second search. The operation A AND B returns the result set from the second search. The operation A AND B returns the
hits in the intersection of sets A1 and B1. The operation A OR B hits in the intersection of sets A1 and B1. The operation A OR B
returns the hits in the union of the sets A1 and B1. The operation returns the hits in the union of the sets A1 and B1. The operation
NOT A returns all possible results that are not in set A1. The NOT A returns all possible results that are not in set A1. The
behaviour of the boolean operators can be generalized to N search behaviour of the boolean operators can be generalized to N search
terms where N > 2. Note that NOT has a higher precedence than AND terms where N > 2. Note that NOT has a higher precedence than AND
or OR, so NOT A AND B returns the hits in B that are not in A. or OR, so NOT A AND B returns the hits in B that are not in A.
Search constraints that apply to all search terms are specified as Search constraints that apply to all search terms are specified as
global constraints. Local constraints override global constraints for global constraints. The search terms and the global constraints are
the search term they are bound to. The search terms and the global separated with a colon (':'). Each additional global constraint is
constraints are separated with a colon (':'). Each additional global appended to the end of the search command, and a semicolon ';' is
constraint is appended to the end of the search command, and a used as the delimiter between global constraints.
semicolon ';' is used as the delimiter between global constraints.
If any of the search constraints can not be fulfilled, or if If any of the search constraints can not be fulfilled, or if
several of the specified constraints are mutually exclusive, the several of the specified constraints are mutually exclusive, the
server ignores the constraints that can not be fulfilled and those server ignores the constraints that can not be fulfilled and those
that are mutually exclusive. The server performs the search using that are mutually exclusive. The server performs the search using
only the remaining constraints and returns the corresponding set of only the remaining constraints and returns the corresponding set of
records. records.
The set of required constraints are listed in Table III. The set The set of required constraints are listed in Table III. The set
of optional constraints are listed in Table IV. of optional constraints are listed in Table IV.
As an option, the server may accept specifications for attributes As an option, the server may accept specifications for attributes
to be included or excluded from a reply. Thus, users could specify to be included or excluded from a reply. Thus, users could specify
-only- those attributes to return, or specific attributes to filter -only- those attributes to return, or specific attributes to filter
out, thus creating custom views. out, thus creating custom views.
2.2.2.1. Format of a Search Term 2.2.2.1. Format of a Search Term
Each search term consists of one of the following: Each search term consists of one of the following:
1) A search string, followed by an optional set of semicolon- 1) A search string
separated local constraints. If local constraints are
specified, they are separated from the search string by a
semicolon. This is noted as:
<value> [';' <constraint>]* <value>
2) A search term specifier (as listed in Table II), followed by a 2) A search term specifier (as listed in Table II), followed by a
'=', followed by a search string, an optional set of '=', followed by a search string. This is noted as:
semicolon-separated local constraints. If local constraints are
specified, they are separated from the search string by a
semicolon. This is noted as:
<specifier> = <value> [';' <constraint>]* <specifier> = <value>
3) An attribute name, followed by '=', followed by 3) An attribute name, followed by '=', followed by
a search string, followed by an optional set of a search string:
semicolon-separate local constraints. If local constraints are
specified, they are separated from the search string by a
semicolon.
<attribute_name> = <value> [';' <constraint>]*
(Note: A <constraint> is a valid local constraint specification.) <attribute_name> = <value>
If no search term specifier is provided, then the search will be If no search term specifier is provided, then the search will be
applied to attribute values only. This corresponds to an identifier applied to attribute values only. This corresponds to an identifier
of VALUE. of VALUE.
When the user specifies the search term using the form: When the user specifies the search term using the form:
"<attribute_name> = <value>" "<attribute_name> = <value>"
this is considered to be an ATTRIBUTE-VALUE search. this is considered to be an ATTRIBUTE-VALUE search.
skipping to change at line 832 skipping to change at page 16, line 14
Valid specifiers: Valid specifiers:
----------------- -----------------
Name Functionality Name Functionality
---- ------------- ---- -------------
HANDLE Confine search to handles. HANDLE Confine search to handles.
VALUE Confine search to attribute VALUE Confine search to attribute
values. values.
(Note: The specifier HANDLE= can be replaced with the shorthand '!')
Table II - Valid search command term specifiers. Table II - Valid search command term specifiers.
------------------------------------------------------------------- -------------------------------------------------------------------
2.2.2.2. Format of a Search String 2.2.2.2. Format of a Search String
Special characters that need to be quoted are preceeded by a Special characters that need to be quoted are preceeded by a
backslash, '\'. backslash, ''.
Special characters are space ' ', tab, equal sign '=', comma ',', Special characters are space ' ', tab, equal sign '=', comma ',',
colon ':', backslash '\', semicolon ';', asterisk '*', period '.', colon ':', backslash '', semicolon ';', asterisk '*', period '.',
parenthesis '()', square brackets '[]', dollar sign '$' and parenthesis '()', square brackets '[]', dollar sign '$' and
circumflex '^'. circumflex '^'.
If the search term is given in some other character set than ISO- If the search term is given in some other character set than ISO-
8859-1, it must be specified by the constraint INCHARSET. 8859-1, it must be specified by the constraint INCHARSET.
2.3. Whois++ Constraints 2.3. Whois++ Constraints
Constraints are intended to be hints or recommendations to the server Constraints are intended to be hints or recommendations to the server
about how to process a command. They may also be used to override about how to process a command. They may also be used to override
default behaviour, such as requesting that a server not drop the default behaviour, such as requesting that a server not drop the
connection after performing a command. connection after performing a command.
Thus, a user might specify a search constraint as "SEARCH=exact", Thus, a user might specify a search constraint as "SEARCH=exact",
which means that the search engine is to perform an exact match which means that the search engine is to perform an exact match
search. The user might also specify "LANGUAGE=Fr", which means that the search. The user might also specify "LANGUAGE=Fr", which means that
server should (if possible) display the French versions of the attribute the server should (if possible) display the French versions of the
values, and if possible use French in fuzzy matches. The server should also attribute values, and if possible use French in fuzzy matches. The
issue system messages in French. server should also issue system messages in French.
In general, constraints take the form "<constraintname>=<value>", where In general, constraints take the form "<constraintname>=<value>",
<value> is one of a specified set of valid values. The notable where <value> is one of a specified set of valid values. The notable
exception is "HOLD", which takes no argument. exception is "HOLD", which takes no argument.
All constraints can be used as a global constraint (i.e., on the
whole query transaction). Only a few can be used as a constraint
local to a search term. See tables III and IV for information about which
constraints can be local.
The CONSTRAINTS system command is used to list the search constraints The CONSTRAINTS system command is used to list the search constraints
supported by an individual server. supported by an individual server.
If a server cannot satisfy the specified constraint, the server should If a server cannot satisfy the specified constraint, the server
indicate this to the user through the use of system messages. should indicate this to the user through the use of system messages.
In such cases, the search is still performed, with the the server In such cases, the search is still performed, with the the server
ignoring unsupported constraints. ignoring unsupported constraints.
2.3.1. Required Constraints 2.3.1. Required Constraints
The following CONSTRAINTS must be supported in all conforming Whois++ The following CONSTRAINTS must be supported in all conforming Whois++
servers. servers.
------------------------------------------------------------------ ------------------------------------------------------------------
Format LOCAL/GLOBAL Format
------ ------------- ------
SEARCH= exact / lstring LOCAL/GLOBAL SEARCH= exact / lstring
FORMAT= full / abridged / handle / summary GLOBAL FORMAT= full / abridged / handle / summary
MAXHITS= 1-<max-allowed> GLOBAL MAXHITS= 1-<max-allowed>
Table III - Required Whois++ constraints. Table III - Required Whois++ constraints.
------------------------------------------------------------------ ------------------------------------------------------------------
2.3.2. Optional CONSTRAINTS 2.3.2. Optional CONSTRAINTS
The following CONSTRAINTS and constraint values are not required of a The following CONSTRAINTS and constraint values are not required of a
conforming Whois++ server, but may be supported. If supported, their conforming Whois++ server, but may be supported. If supported, their
names and supported values must be returned in the response to the names and supported values must be returned in the response to the
CONSTRAINTS command. CONSTRAINTS command.
--------------------------------------------------------------------- ---------------------------------------------------------------------
Format LOCAL/GLOBAL Format
------ ------------- ------
SEARCH= regex / fuzzy / substring LOCAL/GLOBAL
CASE= ignore | consider LOCAL/GLOBAL
FORMAT= server-to-ask GLOBAL SEARCH= regex / fuzzy / substring
MAXFULL= 1-<max-allowed> GLOBAL CASE= ignore / consider
AUTHENTICATE= password GLOBAL FORMAT= server-to-ask
NAME= <string> GLOBAL MAXFULL= 1-<max-allowed>
PASSWORD= <string> GLOBAL AUTHENTICATE= data
INCHARSET= us-ascii / iso-8859-* / INCHARSET= us-ascii / iso-8859-* /
UNICODE-1-1-UTF-8 / UNICODE-2-0-UTF-8 GLOBAL UNICODE-1-1-UTF-8 / UNICODE-2-0-UTF-8 / UTF-8
OUTCHARSET= us-ascii / iso-8859-* / OUTCHARSET= us-ascii / iso-8859-* /
UNICODE-1-1-UTF-8 / UNICODE-2-0-UTF-8 GLOBAL UNICODE-1-1-UTF-8 / UNICODE-2-0-UTF-8 / UTF-8
LANGUAGE= <As defined in ISO 639:1988> GLOBAL LANGUAGE= <As defined in RFC 1766 [ALVE95]>
HOLD GLOBAL HOLD
IGNORE= <attributelist> GLOBAL IGNORE= <attributelist>
INCLUDE= <attributelist>
INCLUDE= <attributelist> GLOBAL N.B.: "UTF-8" is as defined in [RFC2279]. This is the character set
label that should be used for UTF encoded information; the
labels "UNICODE-2-0-UTF-8" and "UNICODE-1-1-UTF-8" are retained
primarily for compatibility with older Whois++ servers, and
as outlined in [RFC2279].
Table IV - Optional Whois++ constraints. Table IV - Optional Whois++ constraints.
---------------------------------------------------------------------- ----------------------------------------------------------------------
2.3.2.1. The SEARCH Constraint 2.3.2.1. The SEARCH Constraint
The SEARCH constraint is used for specifying the method that is to be The SEARCH constraint is used for specifying the method that is to be
used for the search. The default method is "exact". Following is a used for the search. The default method is "exact". Following is a
definition of each search method. definition of each search method.
skipping to change at line 986 skipping to change at page 19, line 4
The FORMAT constraint describes what format the result will be in. The FORMAT constraint describes what format the result will be in.
Default format is FULL. For a description of each format, see Server Default format is FULL. For a description of each format, see Server
Response Modes below. Response Modes below.
2.3.2.3. The MAXFULL Constraint 2.3.2.3. The MAXFULL Constraint
The MAXFULL constraint sets the limit of the number of matching The MAXFULL constraint sets the limit of the number of matching
records the server allows before it enforces SUMMARY responses. The records the server allows before it enforces SUMMARY responses. The
client may attempt to override this value by specifying another value client may attempt to override this value by specifying another value
to that constraint. Example: If, for privacy reasons, the server is to to that constraint. Example: If, for privacy reasons, the server is
return the response in SUMMARY format if the number of hits exceeds to return the response in SUMMARY format if the number of hits
2, the MAXFULL constraint is set to 2 by the server. exceeds 2, the MAXFULL constraint is set to 2 by the server.
Regardless of what format the client asked for, the server will change the Regardless of what format the client asked for, the server will
response format to SUMMARY when the number of matching records equals or change the response format to SUMMARY when the number of matching
exceeds this value. records equals or exceeds this value.
2.3.2.4. The MAXHITS Constraint 2.3.2.4. The MAXHITS Constraint
The MAXHITS constraint sets the maximum number of records returned to the The MAXHITS constraint sets the maximum number of records returned
client in response to a query. to the client in response to a query.
2.3.2.5. The CASE Constraint 2.3.2.5. The CASE Constraint
The CASE constraint defines if the search should be case The CASE constraint defines if the search should be case
sensitive or not. Default value is to have case ignored. sensitive or not. Default value is to have case ignored.
2.3.2.6. The AUTHENTICATE Constraint 2.3.2.6. The AUTHENTICATE Constraint
The AUTHENTICATE constraint describes which authentication scheme to The AUTHENTICATE constraint describes which authentication scheme to
use when executing the search. Depending on the authentication scheme use when executing the search. Depending on the authentication
used, some other constraints may have to be specified. The authentication scheme used, some other constraints may have to be specified. The
scheme definition identifies which constraints it requires. authentication scheme definition identifies which constraints it
requires.
The only authentication scheme described in this document is
"password". If used, also the two other constraints "name" and
"password" need to be set.
2.3.2.7. The NAME Constraint
The NAME constraint is only used together with some authentication
scheme named by the constraint "authenticate".
With the password authentication scheme, this is expected to be a string
of characters representing a username, for which the specified password
should be verified (i.e., similar to the UNIX login program).
2.3.2.8. The PASSWORD Constraint
The PASSWORD constraint is only used together with some
authentication scheme named by the constraint "authenticate".
The password authentication scheme requires that the password associated
with the username be supplied by this constraint. The server
can use that pair of strings to do a simple authentication check,
similar to the UNIX login program.
2.3.2.9. The LANGUAGE Constraint 2.3.2.7. The LANGUAGE Constraint
The LANGUAGE constraint specifies the language in which the client The LANGUAGE constraint specifies the language in which the client
wishes to receive responses. It therefore specifies which attribute wishes to receive responses. It therefore specifies which attribute
values should be presented to the user (i.e., only those in the specified values should be presented to the user (i.e., only those in the
language, or for which no language information is available). specified language, or for which no language information is
It can also be used as an extra information to the fuzzy matching search available). It can also be used as an extra information to the
method, and it might also be used to tell the server to give the system fuzzy matching search method, and it might also be used to tell the
responses in another language. This should preferably be handled by server to give the system responses in another language. This
the client. The language codes defined in RFC 1766 [ALVE95] should be should preferably be handled by the client. The language codes
used as a value for the language constraint. In these, the case of defined in RFC 1766 [ALVE95] should be used as a value for the
the letters are insignificant. language constraint. In these, the case of the letters are
insignificant.
If a record has attribute values in different languages, and no LANGUAGE If a record has attribute values in different languages, and no
search constraint was given in the query, the switch between the LANGUAGE search constraint was given in the query, the switch
different languages should be given in the response by the use between the different languages should be given in the response by
of system messages 601 which has one argument only, the name of the the use of system messages 601 which has one argument only, the
language or one of the predefined strings "ANY" or "DEF". A block name of the language or one of the predefined strings "ANY" or "DEF".
of alternative attribute values starts with a language definition A block of alternative attribute values starts with a language
like "% 601 SE". After the first language specification, zero or definition like "% 601 SE". After the first language specification,
more language specifications can be given, each switching into the zero or more language specifications can be given, each switching
desired language. When all specific languages have been tagged, the into the desired language. When all specific languages have been
specification "% 601 DEF" can be used for specifying default attribute tagged, the specification "% 601 DEF" can be used for specifying
values. A block of alternative attributes must end with "% 601 ANY". default attribute values. A block of alternative attributes must
end with "% 601 ANY".
The following is an example of a response using the language messages: The following is an example of a response using the language
messages:
# FULL USER LOCAL USER-DOE # FULL USER LOCAL USER-DOE
% 601 FR % 601 FR
Name: Monsieur John Doe Name: Monsieur John Doe
% 601 SV % 601 SV
Name: Herr John Doe Name: Herr John Doe
% 601 DEF % 601 DEF
Name: Mister John Doe Name: Mister John Doe
% 601 ANY % 601 ANY
Email: jdoe@doe.pp.se Email: jdoe@doe.pp.se
# END # END
The language specifications may be suppressed by the server (using The language specifications may be suppressed by the server (using
the % 601 messages) if the client has explicitly, by using the global the % 601 messages) if the client has explicitly, by using the global
constraint LANGUAGE, asked for a specific language. constraint LANGUAGE, asked for a specific language.
2.3.2.10. The INCHARSET Constraint 2.3.2.8. The INCHARSET Constraint
The INCHARSET constraint tells the server in which character set the The INCHARSET constraint tells the server in which character set the
search string itself is given. The default character set is ISO- search string itself is given. The default character set is
8859-1. ISO-8859-1.
2.3.2.11. The OUTCHARSET Constraint 2.3.2.9. The OUTCHARSET Constraint
The OUTCHARSET constraint tells the server in which character set the The OUTCHARSET constraint tells the server in which character set the
search result is supposed to be given in. The default character set is search result data (not attributenames or system information) is
ISO-8859-1, but the server may choose something else. supposed to be given in. The default character set is ISO-8859-1,
but the server may choose something else.
2.3.2.12. The IGNORE Constraint 2.3.2.10. The IGNORE Constraint
The IGNORE constraint specifies which attributes NOT to include in The IGNORE constraint specifies which attributes NOT to include in
the result. All other attributes will be included (as if named the result. All other attributes will be included (as if named
explicitly by the "include" constraint). explicitly by the "include" constraint).
If an attribute is named both with the "include" and "ignore" If an attribute is named both with the "include" and "ignore"
constraint, the attribute is to be included in the result, but the constraint, the attribute is to be included in the result, but the
system message "% 112 Requested constraint not fulfilled" must be system message "% 112 Requested constraint not fulfilled" must be
sent. sent.
2.3.2.13. The INCLUDE Constraint 2.3.2.11. The INCLUDE Constraint
The INCLUDE constraint specifies which attributes to include in the The INCLUDE constraint specifies which attributes to include in the
result. All other attributes will be excluded (as if named explicitly result. All other attributes will be excluded (as if named explicitly
by the "ignore" constraint). by the "ignore" constraint).
If an attribute is named both with the "include" and "ignore" If an attribute is named both with the "include" and "ignore"
constraint, the attribute is to be included in the result, but the constraint, the attribute is to be included in the result, but the
system message must be "% 112 Requested constraint not fulfilled". system message must be "% 112 Requested constraint not fulfilled".
2.3.2.14. The HOLD Constraint 2.3.2.12. The HOLD Constraint
The HOLD constraint requests that the server hold open the connection The HOLD constraint requests that the server hold open the connection
after sending the response to the query. The server waits for another after sending the response to the query. The server waits for
user input string. another user input string.
2.4. Server Response Modes 2.4. Server Response Modes
The grammar for Whois++ responses is given in Appendix G, and described The grammar for Whois++ responses is given in Appendix G, and
below. described below.
There are currently a total of five different response modes possible There are currently a total of five different response modes possible
for Whois++ servers. These are FULL, ABRIDGED, HANDLE, SUMMARY and for Whois++ servers. These are FULL, ABRIDGED, HANDLE, SUMMARY and
SERVER-TO-ASK. The syntax of each output format is specified in more SERVER-TO-ASK. The syntax of each output format is specified in more
detail in Appendix G. detail in Appendix G.
1) A FULL format response provides the complete contents of a 1) A FULL format response provides the complete contents of a
template matching the specified query, including the template template matching the specified query, including the template
type, the server handle and an optional record handle. type, the server handle and an optional record handle.
2) An ABRIDGED format response provides a brief summary, including 2) An ABRIDGED format response provides a brief summary, including
(as a minimum) the server handle, the corresponding record handle (as a minimum) the server handle, the corresponding record
and relevant information for that template. handle and relevant information for that template.
3) A HANDLE format response returns a line with information about 3) A HANDLE format response returns a line with information about
the server handle and record handle for a record that matched the server handle and record handle for a record that matched
the specified query. the specified query.
4) A SUMMARY response provides only a brief summary of information 4) A SUMMARY response provides only a brief summary of information
the number of matches and the list of template types in which the the number of matches and the list of template types in which
matches occurred. the matches occurred.
5) A SERVER-TO-ASK response only returns pointers to other index 5) A SERVER-TO-ASK response only returns pointers to other index
servers which might possibly be able to answer the specified servers which might possibly be able to answer the specified
query. query.
The server may optionally respond with an empty result set and may also The server may optionally respond with an empty result set and may
respond with an empty response together with a system message to indicate also respond with an empty response together with a system message
that the query was too complex for it to fulfill. to indicate that the query was too complex for it to fulfill.
2.4.1. Default Responses 2.4.1. Default Responses
By default, a Whois++ server will provide FULL responses. This may be By default, a Whois++ server will provide FULL responses. This may be
changed by the client with the use of the global constraint "format". changed by the client with the use of the global constraint "format".
The server will not respond with more matches than the value The server will not respond with more matches than the value
specified with the global constraint "maxhits" in any response specified with the global constraint "maxhits" in any response
format. If the number of matches exceeds this value, the server will format. If the number of matches exceeds this value, the server will
issues the system message 110 (maxhits value exceeded), but will issues the system message 110 (maxhits value exceeded), but will
skipping to change at line 1163 skipping to change at page 22, line 4
The server will not respond with more matches than the value The server will not respond with more matches than the value
specified with the global constraint "maxhits" in any response specified with the global constraint "maxhits" in any response
format. If the number of matches exceeds this value, the server will format. If the number of matches exceeds this value, the server will
issues the system message 110 (maxhits value exceeded), but will issues the system message 110 (maxhits value exceeded), but will
still show the responses, up to the number of the "maxhits" still show the responses, up to the number of the "maxhits"
constraint value. This mechanism will allow the server to hide the constraint value. This mechanism will allow the server to hide the
number of possible matches to a search command. number of possible matches to a search command.
2.4.2. Format of Responses 2.4.2. Format of Responses
Each response consists of a numerical system generated message, which Each response consists of a numerical system generated message, which
can be tagged with text, followed by an optional formatted response can be tagged with text, followed by an optional formatted response
message, followed by a second system generated message. The formatted message, followed by a second system generated message. The formatted
response itself can include system messages, for example for switches in response itself can include system messages, for example for switches
language. in language.
That is: That is:
'%' <system messages> <nl> '%' <system messages> <CR/LF>
[ <formatted response> ] [ <formatted response> ]
'%' <system messages> <nl> '%' <system messages> <CR/LF>
If there are no matches to a query, the system is not required to If there are no matches to a query, the system is not required to
generate any output as a formatted response, although it must still generate any output as a formatted response, although it must still
generate system messages. generate system messages.
For information about the standard text for system messages, see For information about the standard text for system messages, see
Appendix E. Appendix E.
2.4.3. Syntax of a Formatted Response 2.4.3. Syntax of a Formatted Response
All formatted responses except for the HANDLE response, consist of a All formatted responses except for the HANDLE response, consist of a
response-specific START line, followed by an optional response- response-specific START line, followed by an optional response-
specific data section, followed by a TERMINATION line. The HANDLE specific data section, followed by a TERMINATION line. The HANDLE
response is different in that it only consists of a START line. It response is different in that it only consists of a START line. It
is permissible to insert any number of lines consisting solely of is permissible to insert any number of lines consisting solely of
CR/LF pairs within a formatted response to improve readability. CR/LF pairs within a formatted response to improve readability.
Each line shall be limited to no more than 81 characters, including Each line shall be limited to no more than 81 characters, including
the terminating CR/LF pair. If a line (including the required leading the terminating CR/LF pair. If a line (including the required
single space) would exceed 81 characters, it must be broken into leading single space) would exceed 81 characters, it must be broken
lines of no more than 81 characters, with each continuation line into lines of no more than 81 characters, with each continuation line
beginning with a "+" character in the first column instead of the beginning with a "+" character in the first column instead of the
leading character. leading character.
If an attribute value in a data section includes a line break, the If an attribute value in a data section includes a line break, the
line break must be replaced by a CR/LF pair and the following line line break must be replaced by a CR/LF pair and the following line
begin with a "-" character in the first column, instead of the begin with a "-" character in the first column, instead of the
leading character. The attribute name is not repeated on consecutive leading character. The attribute name is not repeated on consecutive
lines. lines.
A TERMINATION line consists of a line with a '#' in the first column, A TERMINATION line consists of a line with a '#' in the first column,
followed by one space (ASCII 32) character, followed by the keyword END, followed by one space (ASCII 32) character, followed by the keyword
followed by zero or more characters, followed by a CR/LF pair. END, followed by zero or more characters, followed by a CR/LF pair.
A response-specific section will be one of the following: A response-specific section will be one of the following:
1) FULL Format Response 1) FULL Format Response
2) ABRIDGED Format Response 2) ABRIDGED Format Response
3) HANDLE Format Response 3) HANDLE Format Response
4) SUMMARY Format Response 4) SUMMARY Format Response
5) SERVER-TO-ASK Format Response 5) SERVER-TO-ASK Format Response
2.4.3.1. A FULL format response 2.4.3.1. A FULL format response
skipping to change at line 1269 skipping to change at page 24, line 4
with a '#' in the first column, followed by one space with a '#' in the first column, followed by one space
character, the word "HANDLE", a space character, the name of character, the word "HANDLE", a space character, the name of
the corresponding template, a space character, the handle for the corresponding template, a space character, the handle for
the server, a space character, the handle for that record, and the server, a space character, the handle for that record, and
a terminating CR/LF pair. a terminating CR/LF pair.
2.4.3.4. SUMMARY Format Response 2.4.3.4. SUMMARY Format Response
A SUMMARY format response consists of a single response, A SUMMARY format response consists of a single response,
consisting of a line listing the number of matches to the specified consisting of a line listing the number of matches to the specified
query, optionally a count of referrals, followed by a list of all template query, optionally a count of referrals, followed by a list of all
types which satisfied the query at least once. template types which satisfied the query at least once.
The START line shall begin with a '#' in the first column, be The START line shall begin with a '#' in the first column, be
followed by one white space character, the word "SUMMARY", a white followed by one space character (decimal 32), the word "SUMMARY", a
space character, the handle for the server, and a terminating single space character, the handle for the server, and a terminating
CR/LF pair. CR/LF pair.
The format of the attributes in the SUMMARY format follows the The format of the attributes in the SUMMARY format follows the
rules for the FULL template, with the attributes "matches", rules for the FULL template, with the attributes "matches",
"referrals" and "templates". "matches" and "templates" are "referrals" and "templates". "matches" and "templates" are
mandatory, "referrals" optional. mandatory, "referrals" optional.
The first line must begin with the string "matches:", be The first line must begin with the string "matches:", be
followed by a space and the number of responses to the query and followed by a space and the number of responses to the query and
terminated by a CR/LF pair. terminated by a CR/LF pair.
skipping to change at line 1314 skipping to change at page 24, line 49
indicated with a TERMINATION line. indicated with a TERMINATION line.
Each START line consists of a '#' in the first column, followed by Each START line consists of a '#' in the first column, followed by
one space character, the word "SERVER-TO-ASK", a space one space character, the word "SERVER-TO-ASK", a space
character, the handle of the server and a terminating CR/LF pair. character, the handle of the server and a terminating CR/LF pair.
1. "Server-Handle" - The server handle of the server pointed at. 1. "Server-Handle" - The server handle of the server pointed at.
(req.) (req.)
2. "Host-Name" - Hostname for the server pointed at. 2. "Host-Name" - Hostname for the server pointed at.
3. "Host-Port" - Portnumber for the server pointed at. 3. "Host-Port" - Portnumber for the server pointed at.
4. "Protocol" - The protocol to use when contacting this server. (opt.) 4. "Protocol" - The protocol to use when contacting this server.
(opt.)
Other attributes may be present, depending on the index server. Other attributes may be present, depending on the index server.
The default protocol to use is Whois++. The default protocol to use is Whois++.
2.4.4. System Generated Messages 2.4.4. System Generated Messages
All system generated messages must have a '%' as the first All system generated messages must have a '%' as the first
character, a space as the second one, followed by a three digit character, a space as the second one, followed by a three digit
number, a space and an optional text message. The total length of the number, a space and an optional text message. The total length of the
line must be no more than 81 characters long, including the line must be no more than 81 characters long, including the
skipping to change at line 1356 skipping to change at page 25, line 38
be interpreted as being equivalent to optional text messages, without be interpreted as being equivalent to optional text messages, without
a formatted response. Clients written to this specification would a formatted response. Clients written to this specification would
display the responses as a advisory text message, where it would display the responses as a advisory text message, where it would
still be readable by the user. still be readable by the user.
3. Miscellaneous 3. Miscellaneous
3.1. Acknowledgements 3.1. Acknowledgements
This document has been through many iterations of refinement, with This document has been through many iterations of refinement, with
contributions of different natures along the way. These acknowledgements contributions of different natures along the way. These
accrue. acknowledgements accrue.
The Whois++ effort began as an intensive brainstorming session at the The Whois++ effort began as an intensive brainstorming session at the
24th IETF, in Boston Massachusetts. Present at the birth, and 24th IETF, in Boston Massachusetts. Present at the birth, and
contributing ideas through this early phase, were (alphabetically) contributing ideas through this early phase, were (alphabetically)
Peter Deutsch, Alan Emtage, Jim Fullton, Joan Gargano, Brad Peter Deutsch, Alan Emtage, Jim Fullton, Joan Gargano, Brad
Passwaters, Simon Spero, and Chris Weider. Others who have since Passwaters, Simon Spero, and Chris Weider. Others who have since
helped shape this document with feedback and suggestions include helped shape this document with feedback and suggestions include
Roxana Bradescu, Patrik Faltstrom, Kevin Gamiel, Dan Kegel, Michael Roxana Bradescu, Patrik Faltstrom, Kevin Gamiel, Dan Kegel, Michael
Mealling, Mark Prior and Rickard Schoultz. Mealling, Mark Prior and Rickard Schoultz.
Version 2 of the protocol is based on input during the lifetime of Version 2 of the protocol spec is based on input during the lifetime
version 1. Special mention goes to Jeff Allen, Leslie Daigle, of version 1. Special mention goes to Jeff Allen, Leslie Daigle,
and Philippe Boucher. During the polishing of the RFC for version 2, and Philippe Boucher. During the polishing of the RFC for version 2,
important input was given by Len Charest, Clarke Anderson and others important input was given by Len Charest, Clarke Anderson and others
in the ASID working group of the IETF. in the ASID working group of the IETF.
Work in the European ROADS project provided the opportunity to test this This work was supported in part by grant 12/39/01 from the UK
protocol specification from the point of view of developing a test suite. Electronic Libraries Programme (eLib), an initiative of the
The challenge was not only to provide AN implementation that satisfied the Joint Information Systems Committee (JISC). This grant has
document, but to build tools that would be able to respond to all provided the opportunity to test the protocol specification
POSSIBLE responses that could be implemented from the spec. This then by developing a test suite. The challenge was not only to provide AN
lead to the contribution of some textual clarifications. Specific thanks implementation that satisfied the document, but to build tools that
go to Bill Heelan and Philippe Boucher. would be able to respond to all POSSIBLE responses that could be
implemented from the spec. This lead to the contribution of some
textual clarifications. Specific thanks go to Bill Heelan and
Philippe Boucher.
3.2 References 3.2 References
[ALVE95] Alvestrand H., "Tags for the Identification of [ALVE95] Alvestrand H., "Tags for the Identification of
Languages", RFC 1766, UNINETT, March 1995. Languages", RFC 1766, UNINETT, March 1995.
[RFC822] Crocker, D., "Standard for the Format of ARPA Internet [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for
Text Messages", RFC 822, August 1982. Syntax Specifications: ABNF", RFC 2234, November
1997.
[HARR85] Harrenstein K., Stahl M., and E. Feinler, [HARR85] Harrenstein K., Stahl M., and E. Feinler,
"NICNAME/WHOIS", RFC 954, SRI, October 1985. "NICNAME/WHOIS", RFC 954, SRI, October 1985.
[POST82] Postel J., "Simple Mail Transfer Protocol", STD 10, [POST82] Postel J., "Simple Mail Transfer Protocol", STD 10,
RFC 821, USC/Information Sciences Institute, RFC 821, USC/Information Sciences Institute,
August 1982. August 1982.
[IIIR] Weider C., and P. Deutsch, "A Vision of an [IIIR] Weider C., and P. Deutsch, "A Vision of an
Integrated Internet Information Service", RFC 1727 Integrated Internet Information Service", RFC 1727
Bunyip Information Systems, Inc., December 1994. Bunyip Information Systems, Inc., December 1994.
[WINDX] Weider, C., J. Fullton, and S. Spero, "Architecture of [WINDX] Weider, C., J. Fullton, and S. Spero, "Architecture
the Whois++ Index Service", RFC 1913, February 1996. of the Whois++ Index Service", RFC 1913, February
1996.
[RFC2279] F. Yergeau, " UTF-8, a transformation format of ISO
10646", RFC 2279, January 1998.
3.3. Authors Addresses 3.3. Authors Addresses
Patrik Faltstrom Patrik Faltstrom
Tele2 Tele2
Borgarfjordsgatan 16 Borgarfjordsgatan 16
BOX 62 BOX 62
194 64 Kista 194 64 Kista
SWEDEN SWEDEN
Email: paf@swip.net Email: paf@swip.net
Sima Newell Leslie L. Daigle
Bunyip Information Systems Inc. Bunyip Information Systems Inc.
310 Ste. Catherine St. W 310 Ste. Catherine St. W
Suite 300 Suite 300
Montreal, Quebec, CANADA Montreal, Quebec, CANADA
H2X 2A1 H2X 2A1
Email: sima@bunyip.com Email: leslie@bunyip.com
Leslie L. Daigle Sima Newell
Bunyip Information Systems Inc. Bunyip Information Systems Inc.
310 Ste. Catherine St. W 310 Ste. Catherine St. W
Suite 300 Suite 300
Montreal, Quebec, CANADA Montreal, Quebec, CANADA
H2X 2A1 H2X 2A1
Email: leslie@bunyip.com Email: sima@bunyip.com
Appendix A - Some Sample Queries Appendix A - Some Sample Queries
author=leslie and template=user author=leslie and template=user
The result will consist of all records where attribute "author" The result will consist of all records where attribute "author"
matches "leslie" with case ignored. Only USER templates will be matches "leslie" with case ignored. Only USER templates will be
searched. An example of a matching attribute is "Author=Leslie L. Daigle". searched. An example of a matching attribute is
"Author=Leslie L. Daigle".
This is the typical case of searching. This is the typical case of searching.
author=leslie and template=user:language=fr author=leslie and template=user:language=fr
The result will consist of the same records as above, but if The result will consist of the same records as above, but if
attributes are available in alternative languages, only the attributes are available in alternative languages, only the
ones in French will be displayed. These are either the ones which ones in French will be displayed. These are either the ones which
have explicitly been tagged as having French values, or ones that have explicitly been tagged as having French values, or ones that
are tagged as being in the "DEF" (default) language. are tagged as being in the "DEF" (default) language.
schoultz and rick;search=lstring schoultz and rick;search=lstring
The result will consist of all records which have one attribute value The result will consist of all records which have one attribute value
matching "schoultz" exactly (because the default search type is exact) matching "schoultz" exactly (because the default search type is
and one attribute with "rick" as leading substring, both with case ignored. exact) and one attribute with "rick" as leading substring, both with
One example is "Name=Rickard Schoultz". case ignored. One example is "Name=Rickard Schoultz".
value=phone;search=substring value=phone;search=substring
The result will consist of all records which have attribute values The result will consist of all records which have attribute values
matching *phone*, for example the record "Name=Acme telephone inc.", matching *phone*, for example the record "Name=Acme telephone inc.",
but will not match the attribute name "phone". (Since term specifier but will not match the attribute name "phone". (Since term specifier
is "value" by default, the search term could just as well have been is "value" by default, the search term could just as well have been
simply "phone"). simply "phone").
ucdavis;search=substring and (gargano or joan):include=name,email ucdavis;search=substring and (gargano or joan):include=name,email
skipping to change at line 1623 skipping to change at page 31, line 7
RANGE: exact, lstring, substring, fuzzy RANGE: exact, lstring, substring, fuzzy
# END # END
# FULL CONSTRAINTS SERVERHANDLE1 # FULL CONSTRAINTS SERVERHANDLE1
CONSTRAINT: language CONSTRAINT: language
DEFAULT: DEF DEFAULT: DEF
RANGE: FR, EN, SV, ANY, DEF RANGE: FR, EN, SV, ANY, DEF
# END # END
# FULL CONSTRAINTS SERVERHANDLE1 # FULL CONSTRAINTS SERVERHANDLE1
CONSTRAINT: incharset CONSTRAINT: incharset
DEFAULT: ISO-8859-1 DEFAULT: ISO-8859-1
RANGE: ISO-8859-1, UNICODE-1-1-UTF8 RANGE: ISO-8859-1, UTF-8
# END # END
# FULL CONSTRAINTS SERVERHANDLE1 # FULL CONSTRAINTS SERVERHANDLE1
CONSTRAINT: outcharset CONSTRAINT: outcharset
DEFAULT: ISO-8859-1 DEFAULT: ISO-8859-1
RANGE: ISO-8859-1, UNICODE-1-1-UTF8, HTML RANGE: ISO-8859-1, UTF-8, HTML
# END # END
C.7 Response to the COMMANDS command C.7 Response to the COMMANDS command
# FULL COMMANDS SERVERHANDLE1 # FULL COMMANDS SERVERHANDLE1
Commands: commands Commands: commands
-constraints -constraints
-describe -describe
-help -help
-list -list
skipping to change at line 1724 skipping to change at page 33, line 4
Example 2 Example 2
% 220-Welcome to % 220-Welcome to
% 220-the Whois++ server % 220-the Whois++ server
% 220 at ACME inc. % 220 at ACME inc.
The client is not expected to parse the text part of the response The client is not expected to parse the text part of the response
message except when receiving reply 600 or 601, in which case the message except when receiving reply 600 or 601, in which case the
text part is in the former case the name of a character set that text part is in the former case the name of a character set that
will be used by the server in the rest of the response, and in the will be used by the server in the rest of the response, and in the
latter case when it specifies what language the attribute value is in. latter case when it specifies what language the attribute value is
The valid values for characters sets is specified in the "characterset" in. The valid values for characters sets is specified in the
list in the grammar in Appendix F. "characterset" list in the grammar in Appendix F.
The theory of reply codes is described in Appendix E in STD 10, RFC The theory of reply codes is described in Appendix E in STD 10, RFC
821 [POST82]. 821 [POST82].
------------------------------------------------------------------------ ------------------------------------------------------------------------
List of system response codes List of system response codes
------------------------------ ------------------------------
110 Too many hits The number of matches exceeded 110 Too many hits The number of matches exceeded
skipping to change at line 1754 skipping to change at page 33, line 34
the search is still done. the search is still done.
112 Requested constraint not fulfilled One or more constraints in 112 Requested constraint not fulfilled One or more constraints in
query has unacceptable value query has unacceptable value
and was therefore not used, and was therefore not used,
but the search is still done. but the search is still done.
200 Command Ok Command accepted (i.e., syntax 200 Command Ok Command accepted (i.e., syntax
okay, will be executed). okay, will be executed).
The client must wait for a The client must wait for a
transaction end system message. transaction end system
message.
201 Command Completed successfully Command accepted and executed. 201 Command Completed successfully Command accepted and executed.
203 Bye Server is closing connection 203 Bye Server is closing connection
220 Service Ready Greeting message. Server is 220 Service Ready Greeting message. Server is
accepting commands. accepting commands.
226 Transaction complete End of data. All responses to 226 Transaction complete End of data. All responses to
query are sent. query are sent.
skipping to change at line 1803 skipping to change at page 34, line 31
601 ANY Subsequent attribute values 601 ANY Subsequent attribute values
are for all languages. are for all languages.
Table V - System response codes Table V - System response codes
------------------------------------------------------------------------ ------------------------------------------------------------------------
Appendix F - The Whois++ Input Grammar Appendix F - The Whois++ Input Grammar
The following grammar, which uses BNF-like notation as defined in [RFC822], The following grammar, which uses BNF-like notation as defined in
defines the set of acceptable input to a Whois++ server. [RFC2234] defines the set of acceptable input to a Whois++ server.
N.B.: All Whois++ command, constraint, and value literals are shown here in N.B.: As outlined in the ABNF definition, rule names and string
lower case for simplicity. These literals are to be accepted in upper, lower, literals are in the US-ASCII character set, and are case-insensitive.
or mixed case.
whois-command = ( system-command [":" "hold"] whois-command = ( system-command [":" "hold"]
/ terms [":" globalcnstrnts] ) NL / terms [":" globalcnstrnts] ) nl
system-command = "constraints" system-command = "constraints"
/ "describe" / "describe"
/ "commands" / "commands"
/ "polled-by" / "polled-by"
/ "polled-for" / "polled-for"
/ "version" / "version"
/ "list" / "list"
/ "show" [1*SP string] / "show" [1*sp bytestring]
/ "help" [1*SP string] / "help" [1*sp bytestring]
/ "?" [string] / "?" [bytestring]
terms = and-expr *("or" and-expr) terms = and-expr *("or" and-expr)
and-expr = not-expr *("and" not-expr) and-expr = not-expr *("and" not-expr)
not-expr = ["not"] (term / ( "(" terms ")" )) not-expr = ["not"] (term / ( "(" terms ")" ))
term = generalterm / specificterm term = generalterm / specificterm
/ shorthandle / combinedterm / combinedterm
generalterm = string *(";" localcnstrnt) generalterm = bytestring
specificterm = specificname "=" string specificterm = specificname "=" bytestring
*(";" localcnstrnt)
specificname = "handle" / "value" specificname = "handle" / "value"
shorthandle = "!" string *(";" localcnstrnt) combinedterm = attributename "=" bytestring
combinedterm = attributename "=" string *(";" localcnstrnt)
globalcnstrnts = globalcnstrnt *(";" globalcnstrnt) globalcnstrnts = globalcnstrnt *(";" globalcnstrnt)
globalcnstrnt = localcnstrnt globalcnstrnt = "format" "=" format
/ "format" "=" format
/ "maxfull" "=" 1*digit / "maxfull" "=" 1*digit
/ "maxhits" "=" 1*digit / "maxhits" "=" 1*digit
/ opt-globalcnst / opt-globalcnst
opt-globalcnst = "hold" opt-globalcnst = "hold"
/ "authenticate" "=" auth-method / "authenticate" "=" auth-method
/ "name" "=" string
/ "password" "=" string
/ "language" "=" language / "language" "=" language
/ "incharset" "=" characterset / "incharset" "=" characterset
/ "ignore" "=" string / "ignore" "=" bytestring
/ "include" "=" string / "include" "=" bytestring
format = "full" / "abridged" / "handle" / "summary" format = "full" / "abridged" / "handle" / "summary"
/ "server-to-ask" / "server-to-ask"
auth-method = bytestring
language = <The language code defined in RFC1766 [ALVE95]> language = <The language code defined in RFC1766 [ALVE95]>
characterset = "us-ascii" / "iso-8859-1" / "iso-8859-2" / characterset = "us-ascii" / "iso-8859-1" / "iso-8859-2" /
"iso-8859-3" / "iso-8859-4" / "iso-8859-5" / "iso-8859-3" / "iso-8859-4" / "iso-8859-5" /
"iso-8859-6" / "iso-8859-7" / "iso-8859-8" / "iso-8859-6" / "iso-8859-7" / "iso-8859-8" /
"iso-8859-9" / "iso-8859-10" / "UNICODE-1-1-UTF-8" / "iso-8859-9" / "iso-8859-10" /
"UNICODE-2-0-UTF-8" / charset-value "UNICODE-1-1-UTF-8" / "UNICODE-2-0-UTF-8"
"UTF-8"
charset-value = 1*char
localcnstrnt = "search" "=" searchvalue / ;"UTF-8" is as defined in [RFC2279]. This is
"case" "=" casevalue ;the character set label that should be used
;for UTF encoded information; the labels
;"UNICODE-2-0-UTF-8" and "UNICODE-1-1-UTF-8"
;are retained primarily for compatibility with
;older Whois++ servers (and as outlined in
;[RFC2279]).
searchvalue = "exact" / "substring" / "regex" / "fuzzy" searchvalue = "exact" / "substring" / "regex" / "fuzzy"
/ "lstring" / "lstring"
casevalue = "ignore" / "consider" casevalue = "ignore" / "consider"
auth-method = "password" bytestring = 0*charbyte
attributename = 1*attrbyte
string = 0*char
attributename = 1*normalchar charbyte = "
char = "\" specialchar / normalchar normalbyte = <%d33-255, except specialbyte>
normalchar = <Characters 32 to 254(decimal) except specialchar> attrbyte = <%d33-127 except specialbyte> /
"
specialchar = " " / <tab> / "=" / "," / ":" / ";" / "\" / specialbyte = " " / tab / "=" / "," / ":" / ";" / "
"*" / "." / "(" / ")" / "[" / "]" / "^" / "*" / "." / "(" / ")" / "[" / "]" / "^" /
"$" / "!" / "?" "$" / "!" / "?"
whitespace = 1*(" " / <tab> / <CR> / <LF> / "@")
tab = %d09
sp = %d32 ; space
digit = "0" / "1" / "2" / "3" / "4" / digit = "0" / "1" / "2" / "3" / "4" /
"5" / "6" / "7" / "8" / "9" "5" / "6" / "7" / "8" / "9"
NL = <CR LF (decimal 13 10)> nl = %d13 %d10 ; CR LF
NOTE: Blanks that are significant to a query must be escaped. The NOTE: Blanks that are significant to a query must be escaped. The
following characters, when significant to the query, may be preceded following characters, when significant to the query, may be preceded
and/or followed by a single blank: and/or followed by a single blank:
: ; , ( ) = ! : ; , ( ) = !
Appendix G - The Whois++ Response Grammar Appendix G - The Whois++ Response Grammar
The following grammar, which uses BNF-like notation as defined in [RFC822], The following grammar, which uses ABNF-like notation as defined in
defines the set of responses expected from a Whois++ server upon receipt of a [RFC2234], defines the set of responses expected from a Whois++ server
valid Whois++ query. upon receipt of a valid Whois++ query.
N.B.: All the literals supplied by the Whois++ server may be in upper, lower, N.B.: As outlined in the ABNF definition, rule names and string
or mixed case. For clarity, they are shown here in upper case only. literals are in the US-ASCII character set, and are case-insensitive.
server = goodmessage mnl output mnl endmessage onlynl server = goodmessage mnl output mnl endmessage nl
/ badmessage onlynl endmessage onlynl / badmessage nl endmessage nl
output = full / abridged / summary / handle output = full / abridged / summary / handle
full = 0*(full-record / server-to-ask) full = 0*(full-record / server-to-ask)
abridged = 0*(abridged-record / server-to-ask) abridged = 0*(abridged-record / server-to-ask)
summary = summary-record summary = summary-record
handle = 0*(handle-record / server-to-ask) handle = 0*(handle-record / server-to-ask)
full-record = "# FULL " template serverhandle localhandle nl full-record = "# FULL " template serverhandle localhandle
1*(fulldata nl) system-nl
"# END" nl 1*(fulldata system-nl)
"# END" system-nl
abridged-record = "# ABRIDGED " template serverhandle localhandle nl abridged-record = "# ABRIDGED " template serverhandle localhandle
abridgeddata nl system-nl
"# END" nl abridgeddata
"# END" system-nl
summary-record = "# SUMMARY " serverhandle nl summary-record = "# SUMMARY " serverhandle system-nl
summarydata nl summarydata
"# END" nl "# END" system-nl
handle-record = "# HANDLE " template serverhandle localhandle nl handle-record = "# HANDLE " template serverhandle localhandle
system-nl
server-to-ask = "# SERVER-TO-ASK " serverhandle nl server-to-ask = "# SERVER-TO-ASK " serverhandle system-nl
server-to-askdata nl server-to-askdata
"# END" nl "# END" system-nl
fulldata = " " attributename ": " attributevalue fulldata = " " attributename ": " attributevalue
abridgeddata = " " 0*( attributevalue / tab ) abridgeddata = " " 0*( attributevalue / tab )
summarydata = " Matches: " number nl summarydata = " Matches: " number system-nl
[" Referrals: " number nl] [" Referrals: " number system-nl]
" Templates: " template 0*( nl "-" template) " Templates: " template 0*( system-nl "-"
template)
server-to-ask-data = " Server-Handle:" <serverhandle> <nl> server-to-ask-data = " Server-Handle:" serverhandle system-nl
" Host-Name: " hostname nl " Host-Name: " hostname system-nl
" Host-Port: " number nl " Host-Port: " number system-nl
[" Protocol: " prot nl] [" Protocol: " prot system-nl]
0*(" " sstring ": " sstring nl) 0*(" " labelstring ": " labelstring system-nl)
attributename = sstring attributename = 1*attrbyte
attributevalue = longstring attrbyte = <%d33-127 except specialbyte>
template = sstring attributevalue = longstring
serverhandle = sstring template = labelstring
localhandle = sstring serverhandle = labelstring
hostname = sstring localhandle = labelstring
prot = sstring hostname = labelstring
longstring = string 0*( nl ( "+" / "-" ) string ) prot = labelstring
string = 0*char longstring = bytestring 0*( nl ( "+" / "-" ) bytestring )
bytestring = 0*charbyte
sstring = 0*schar labelstring = 0*restrictedbyte
schar = <Characters 32-254 (decimal) except special-char> restrictedbyte = <%d32-%d255 except specialbyte>
char = <Characters 32-254 (decimal) except nl> charbyte = <%d32-%d255 except nl>
special-char = ":" / " " / tab / nl specialbyte = ":" / " " / tab / nl
tab = <TAB (decimal 9)> tab = %d09
mnl = 1*nl mnl = 1*system-nl
nl = onlynl [ 1*(message onlynl) ] system-nl = nl [ 1*(message nl) ]
onlynl = <CR LF (decimal 13 10)> nl = %d13 %d10
message = [1*( messagestart "-" string onlynl)] message = [1*( messagestart "-" bytestring nl)]
messagestart " " string onlynl messagestart " " bytestring nl
messagestart = "% " digit digit digit messagestart = "% " digit digit digit
goodmessage = [1*( goodmessagestart "-" string onlynl)] goodmessage = [1*( goodmessagestart "-" bytestring nl)]
goodmessagestart " " string onlynl goodmessagestart " " bytestring nl
goodmessagestart= "% 200" goodmessagestart= "% 200"
messagestart = "% " digit digit digit messagestart = "% " digit digit digit
badmessage = [1*( badmessagestart "-" string onlynl)] badmessage = [1*( badmessagestart "-" bytestring nl)]
badmessagestart " " string onlynl badmessagestart " " bytestring nl
badmessagestart = "% 5" digit digit badmessagestart = "% 5" digit digit
endmessage = endmessageclose / endmessagecont endmessage = endmessageclose / endmessagecont
endmessageclose = [endmessagestart " " string onlynl] endmessageclose = [endmessagestart " " bytestring nl]
byemessage byemessage
endmessagecont = endmessagestart " " string onlynl endmessagecont = endmessagestart " " bytestring nl
endmessagestart = "% 226" endmessagestart = "% 226"
byemessage = byemessagestart " " string onlynl byemessage = byemessagestart " " bytestring nl
endmessagestart = "% 203" endmessagestart = "% 203"
number = 1*( digit ) number = 1*( digit )
digit = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" digit = "0" / "1" / "2" / "3" / "4" / "5" /
"6" / "7" / "8" / "9"
Appendix H - Description of Regular expressions Appendix H - Description of Regular expressions
The regular expressions described in this section are the same as used The regular expressions described in this section are the same as
in many other applications and operating systems. However, it is very used in many other applications and operating systems. However, it
simple and does not include logical operators AND and OR. is very simple and does not include logical operators AND and OR.
Searches using regular expressions always use substring Searches using regular expressions always use substring
matching except when the regular expression contains the characters matching except when the regular expression contains the characters
'^' or '$'. '^' or '$'.
Character Function Character Function
--------- -------- --------- --------
<any except those listed in this table> Matches itself <any except those listed in this table> Matches itself
 End of changes. 160 change blocks. 
431 lines changed or deleted 407 lines changed or added

This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/