home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / rfc / rfc1835 < prev    next >
Text File  |  1995-08-16  |  81KB  |  2,300 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                         P. Deutsch
  8. Request for Comments: 1835              BUNYIP INFORMATION SYSTEMS, Inc.
  9. Category: Standards Track                                    R. Schoultz
  10.                                                                   KTHNOC
  11.                                                             P. Faltstrom
  12.                                         BUNYIP INFORMATION SYSTEMS, Inc.
  13.                                                                C. Weider
  14.                                         BUNYIP INFORMATION SYSTEMS, Inc.
  15.                                                              August 1995
  16.  
  17.  
  18.                   Architecture of the WHOIS++ service
  19.  
  20. Status of this Memo
  21.  
  22.    This document specifies an Internet standards track protocol for the
  23.    Internet community, and requests discussion and suggestions for
  24.    improvements.  Please refer to the current edition of the "Internet
  25.    Official Protocol Standards" (STD 1) for the standardization state
  26.    and status of this protocol.  Distribution of this memo is unlimited.
  27.  
  28. Abstract
  29.  
  30.    This document describes WHOIS++, an extension to the trivial WHOIS
  31.    service described in RFC 954 to permit WHOIS-like servers to make
  32.    available more structured information to the Internet.  We describe
  33.    an extension to the simple WHOIS data model and query protocol and a
  34.    companion extensible, distributed indexing service.  A number of
  35.    options have also been added such as the use of multiple languages
  36.    and character sets, more advanced search expressions, structured data
  37.    and a number of other useful features.  An optional authentication
  38.    mechanism for protecting all or part of the associated WHOIS++
  39.    information database from unauthorized access is also described.
  40.  
  41. Table of Contents
  42.  
  43.    Part I - WHOIS++ Overview .................................  3
  44.    1.1.  Purpose and Motivation ..............................  3
  45.    1.2.  Basic Information Model .............................  4
  46.    1.2.1.  Changes to the current WHOIS Model ................  5
  47.    1.2.2.  Registering WHOIS++ servers .......................  5
  48.    1.2.3.  The WHOIS++ Search Selection Mechanism ............  7
  49.    1.2.4.  The WHOIS++ Architecture ..........................  7
  50.    1.3.  Indexing in WHOIS++ .................................  8
  51.    1.4.  Getting Help ........................................  9
  52.    1.4.1.  Minimum HELP Required .............................  9
  53.    1.5.  Options and Constraints ............................. 10
  54.    1.6.  Formatting Responses ................................ 10
  55.  
  56.  
  57.  
  58. Deutsch, et al              Standards Track                     [Page 1]
  59.  
  60. RFC 1835          Architecture of the WHOIS++ service        August 1995
  61.  
  62.  
  63.    1.7.  Reporting Warnings and Errors ....................... 11
  64.    1.8.  Privacy and Security Issues ......................... 11
  65.    Part II - WHOIS++ Implementation .......................... 12
  66.    2.1.  The WHOIS++ interaction model ....................... 12
  67.    2.2.  The WHOIS++ Command set ............................. 12
  68.    2.2.1.  System Commands ................................... 13
  69.    2.2.1.1.  The COMMANDS command ............................ 14
  70.    2.2.1.2.  The CONSTRAINTS command ......................... 15
  71.    2.2.1.3.  The DESCRIBE command ............................ 15
  72.    2.2.1.4.  The HELP command ................................ 15
  73.    2.2.1.5.  The LIST command ................................ 15
  74.    2.2.1.6.  The POLLED-BY command ........................... 15
  75.    2.2.1.7.  The POLLED-FOR command .......................... 16
  76.    2.2.1.8.  The SHOW command ................................ 16
  77.    2.2.1.9.  The VERSION command ............................. 16
  78.    2.2.2.  The Search Command ................................ 16
  79.    2.2.2.1.  Format of a Search Term ......................... 17
  80.    2.2.2.2.  Format of a Search String ....................... 18
  81.    2.3.  WHOIS++ Constraints ................................. 19
  82.    2.3.1.  Required Constraints .............................. 20
  83.    2.3.2.  Optional CONSTRAINTS .............................. 21
  84.    2.3.2.1.  The SEARCH Constraint ........................... 22
  85.    2.3.2.2.  The FORMAT Constraint ........................... 22
  86.    2.3.2.3.  The MAXFULL Constraint .......................... 22
  87.    2.3.2.4.  The MAXHITS Constraint .......................... 23
  88.    2.3.2.5.  The CASE Constraint ............................. 23
  89.    2.3.2.6.  The AUTHENTICATE Constraint ..................... 23
  90.    2.3.2.7.  The NAME Constraint ............................. 23
  91.    2.3.2.8.  The PASSWORD Constraint ......................... 23
  92.    2.3.2.9.  The LANGUAGE Constraint ......................... 23
  93.    2.3.2.10.  The INCHARSET Constraint ....................... 24
  94.    2.3.2.11.  The IGNORE Constraint .......................... 24
  95.    2.3.2.12.  The INCLUDE Constraint ......................... 24
  96.    2.4.  Server Response Modes ............................... 24
  97.    2.4.1.  Default Responses ................................. 25
  98.    2.4.2.  Format of Responses ............................... 25
  99.    2.4.3.  Syntax of a Formatted Response .................... 26
  100.    2.4.3.1.  A FULL format response .......................... 26
  101.    2.4.3.2.  ABRIDGED Format Response ........................ 27
  102.    2.4.3.3.  HANDLE Format Response .......................... 27
  103.    2.4.3.4.  SUMMARY Format Response ......................... 27
  104.    2.4.3.5.  SERVERS-TO-ASK Response ......................... 28
  105.    2.4.4.  System Generated Messages ......................... 28
  106.    2.5.  Compatibility with Older WHOIS Servers .............. 29
  107.    3.  Miscellaneous ......................................... 29
  108.    3.1.  Acknowledgements .................................... 29
  109.    3.2.  References .......................................... 29
  110.    3.3.  Authors' Addresses .................................. 30
  111.  
  112.  
  113.  
  114. Deutsch, et al              Standards Track                     [Page 2]
  115.  
  116. RFC 1835          Architecture of the WHOIS++ service        August 1995
  117.  
  118.  
  119.    Appendix A - Some Sample Queries .......................... 31
  120.    Appendix B - Some sample responses ........................ 31
  121.    Appendix C - Sample responses to system commands .......... 33
  122.    Appendix D - Sample whois++ session ....................... 35
  123.    Appendix E - System messages .............................. 36
  124.    Appendix F - The WHOIS++ BNF Grammar ...................... 38
  125.    Appendix G - Description of Regular expressions ........... 40
  126.  
  127. 1.  Part I - WHOIS++ Overview
  128.  
  129. 1.1.  Purpose and Motivation
  130.  
  131.    The current NIC WHOIS service [HARR85] is used to provide a very
  132.    limited directory service, serving information about a small number
  133.    of Internet users registered with the DDN NIC. Over time the basic
  134.    service has been expanded to serve additional information and similar
  135.    services have also been set up on other hosts.  Unfortunately, these
  136.    additions and extensions have been done in an ad hoc and
  137.    uncoordinated manner.
  138.  
  139.    The basic WHOIS information model represents each individual record
  140.    as a Rolodex-like collection of text. Each record has a unique
  141.    identifier (or handle), but otherwise is assumed to have little
  142.    structure. The current service allows users to issue searches for
  143.    individual strings within individual records, as well as searches for
  144.    individual record handles using a very simple query-response
  145.    protocol.
  146.  
  147.    Despite its utility, the current NIC WHOIS service cannot function as
  148.    a general White Pages service for the entire Internet. Given the
  149.    inability of a single server to offer guaranteed response or
  150.    reliability, the huge volume of traffic that a full scale directory
  151.    service will generate and the potentially huge number of users of
  152.    such a service, such a trivial architecture is obviously unsuitable
  153.    for the current Internet's needs for information services.
  154.  
  155.    This document describes the architecture and protocol for WHOIS++, a
  156.    simple, distributed and extensible information lookup service based
  157.    upon a small set of extensions to the original WHOIS information
  158.    model.  These extensions allow the new service to address the
  159.    community's needs for a simple directory service, yet the extensible
  160.    architecture is expected to also allow it to find application in a
  161.    number of other information service areas.
  162.  
  163.    Added features include an extension to the trivial WHOIS data model
  164.    and query protocol and a companion extensible, distributed indexing
  165.    service. A number of other options have also been added, like boolean
  166.    operators, more powerful search constraints and search methods, and
  167.  
  168.  
  169.  
  170. Deutsch, et al              Standards Track                     [Page 3]
  171.  
  172. RFC 1835          Architecture of the WHOIS++ service        August 1995
  173.  
  174.  
  175.    most specificly structured the data to make both the client and the
  176.    server part of the dialogue more stringent and parseable. An optional
  177.    authentication mechanism for protecting all or parts of the
  178.    associated WHOIS++ information database from unauthorized access is
  179.    also briefly described.
  180.  
  181.    The basic architecture of WHOIS++ allows distributed maintenance of
  182.    the directory contents and the use of the WHOIS++ indexing service
  183.    for locating additional WHOIS++ servers. Although a general overview
  184.    of this service is included for completeness, the indexing extensions
  185.    are described in a separate paper.
  186.  
  187. 1.2.  Basic Information Model
  188.  
  189.    The WHOIS++ service is centered in a recommendation to structure user
  190.    information around a series of standardized information templates.
  191.    Such templates consist of ordered sets of data elements (or
  192.    attribute-value pairs).
  193.  
  194.    It is intended that adding such structured templates to a server and
  195.    subsequently identifying and searching them be simple tasks.  The
  196.    creation and use of customized templates should also be possible with
  197.    little effort, although their use should be discouraged where
  198.    appropriate standardized templates exist.
  199.  
  200.    We also offer methods to allow the user to constrain searches to
  201.    desired attributes or template types, in addition to the existing
  202.    commands for specifying handles or simple strings.
  203.  
  204.    It is expected that the minimalist approach we have taken will find
  205.    application where the high cost of configuring and operating
  206.    traditional White Pages services can not currently be justified.
  207.  
  208.    Also note that the architecture makes no assumptions about the search
  209.    and retrieval mechanisms used within individual servers.  Operators
  210.    are free to use dedicated database formats, fast indexing software or
  211.    even provide gateways to other directory services to store and
  212.    retrieve information, if desired.
  213.  
  214.    The WHOIS++ server simply functions as a known front end, offering a
  215.    simple data model and communicating through a well known port and
  216.    query protocol. The format of both queries and replies has been
  217.    structured to allow the use of client software for generating
  218.    searches and displaying the results. At the same time, some effort
  219.    has been made to keep responses at least to some degree readible by
  220.    humans, to ensure low entry cost and to ease debugging.
  221.  
  222.  
  223.  
  224.  
  225.  
  226. Deutsch, et al              Standards Track                     [Page 4]
  227.  
  228. RFC 1835          Architecture of the WHOIS++ service        August 1995
  229.  
  230.  
  231.    The actual implemention details of an individual WHOIS++ search
  232.    engine are left to the imagination of the implementor and it is hoped
  233.    that the simple, extensible approach taken will encourage
  234.    experimentation and the development of improved search engines.
  235.  
  236. 1.2.1.  Changes to the current WHOIS Model
  237.  
  238.    The current WHOIS service is based upon an extremely simple data
  239.    model.  The NIC WHOIS database consists of a series of individual
  240.    records, each of which is identified by a single unique identifer
  241.    (the "handle"). Each record contains one or more lines of
  242.    information. Currently, there is no structure or implicit ordering of
  243.    this information, although by implication each record is concerned
  244.    with information about a single user or service.
  245.  
  246.    We have implemented two basic changes to this model. First, we have
  247.    structured the information within the database as collections of data
  248.    elements, or simple attribute/value pairs. Each individual record
  249.    contains a specified ordered set of these data elements.
  250.  
  251.    Secondly, we have introduced typing of the database records. In
  252.    effect, each record is based upon one of a specified set of
  253.    templates, each containing a finite and specified number of data
  254.    elements. This allow users to easily limit searches to specific
  255.    collections of information, such as information about users,
  256.    services, abstracts of papers, descriptions of software, and so on.
  257.  
  258.    As a final extension, we require that each individual WHOIS++
  259.    database on the Internet be assigned a unique handle, analogous to
  260.    the handle associated with each database record.
  261.  
  262.    The WHOIS++ database structure is shown in Fig. 1.
  263.  
  264. 1.2.2.  Registering WHOIS++ servers
  265.  
  266.    We propose that individual database handles be registered through the
  267.    Internet Assigned Numbers Authority (the IANA), ensuring their
  268.    uniqueness. This will allow us to specify each WHOIS++ entry on the
  269.    Internet as a unique pair consisting of a server handle and a record
  270.    handle.
  271.  
  272.    A unique registered handle is preferable to using the host's IP
  273.    address, since it is conceivable that the WHOIS++ server for a
  274.    particular domain may move over time.  If we preserve the unique
  275.    WHOIS++ handle in such cases we have the option of using it for
  276.    resource discovery and networked information retrieval (see [IIIR]
  277.    for a discussion of resource and discovery and support issues).
  278.  
  279.  
  280.  
  281.  
  282. Deutsch, et al              Standards Track                     [Page 5]
  283.  
  284. RFC 1835          Architecture of the WHOIS++ service        August 1995
  285.  
  286.  
  287.    There are many ways of guaranteeing uniqueness of server handles; we
  288.    will discuss them in a separate paper.
  289.  
  290.    We believe that organizing information around a series of such
  291.    templates will make it easier for administrators to gather and
  292.    maintain this information and thus encourage them to make such
  293.    information available.  At the same time, as users become more
  294.    familiar with the data elements available within specific templates
  295.    they will be better able to specify their searches, leading to a more
  296.    useful service.
  297.  
  298.  ______________________________________________________________________
  299. |                                                                      |
  300. |   +  Single unique WHOIS++ database handle                           |
  301. |                                                                      |
  302. |              _______                 _______                _______  |
  303. |    handle3  |..  .. |      handle6  |..  .. |     handle9  |..  .. | |
  304. |            _______  |              _______  |             _______  | |
  305. |  handle2  |..  .. |      handle5  |..  .. |     handle8  |..  .. |   |
  306. |           _______ |               _______ |              _______ |   |
  307. | handle1  |..  .. |      handle4  |..  .. |     handle7  |..  .. |    |
  308. |          |..  .. |               |..  .. |              |..  .. |    |
  309. |           -------                 -------                -------     |
  310. |      Template                   Template               Template      |
  311. |       Type 1                     Type 2                 Type 3       |
  312. |                                                                      |
  313. |                                                                      |
  314. |                                                                      |
  315. |                                                                      |
  316. |               Fig.1 - Structure of a WHOIS++ database.               |
  317. |                                                                      |
  318. | Notes: - Entire database is identified by a single unique WHOIS      |
  319. |          handle.                                                     |
  320. |        - Each record has a single unique handle and a specific set   |
  321. |          of attributes, determined by the template type used.        |
  322. |        - Each value associated with an attribute can be any ASCII    |
  323. |          string up to a specified length.                            |
  324. |______________________________________________________________________|
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338. Deutsch, et al              Standards Track                     [Page 6]
  339.  
  340. RFC 1835          Architecture of the WHOIS++ service        August 1995
  341.  
  342.  
  343. 1.2.3.  The WHOIS++ Search Selection Mechanism
  344.  
  345.    The WHOIS++ search mechanism is intended to be extremely simple. A
  346.    search command consists of one or more search terms, with an optional
  347.    set of global constraints (specifiers that modify or control a
  348.    search).
  349.  
  350.    Search terms allow the user to specify template type, attribute,
  351.    value or handle that any record returns must satisfy. Each search
  352.    term can have an optional set of local constraints that apply to only
  353.    that term.
  354.  
  355.    A WHOIS++ database may be seen as a single rolodex-like collection of
  356.    typed records.  Each term specifies a further constraint that the
  357.    selected set of output records must satisfy. Each term may thus be
  358.    thought of as performing a subtractive selection, in the sense that
  359.    any record that does not fulfil the term is discarded from the result
  360.    set.  Boolean searches are possible by the use of AND, OR, NOT and
  361.    parenthesis.
  362.  
  363. 1.2.4.  The WHOIS++ Architecture
  364.  
  365.    The WHOIS++ directory service has an architecture which is separated
  366.    into two components; the base level server, which is described in
  367.    this paper, and a indexing server. A single physical server can act
  368.    as both a base level server and an indexing server.
  369.  
  370.    A base level server is one which contains only filled templates. An
  371.    indexing server is one which contains forward knowledge (q.v.) and
  372.    pointers to other indexing servers or base level servers.
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Deutsch, et al              Standards Track                     [Page 7]
  395.  
  396. RFC 1835          Architecture of the WHOIS++ service        August 1995
  397.  
  398.  
  399. 1.3.  Indexing in WHOIS++
  400.  
  401.    Indexing in WHOIS++ is used to tie together many base level servers
  402.    and index servers into a unified directory service.
  403.  
  404.    Each base level server and index server which wishes to participate
  405.    in the unified directory service must generate "forward knowledge"
  406.    for the entries it contains. One type of forward knowledge is the
  407.    "centroid".
  408.  
  409.    An example of a centroid is as follows: if a whois++ server contained
  410.    exactly three records, as follows:
  411.  
  412.         Record 1                        Record 2
  413.         Template: Person                Template: Person
  414.         First-Name: John                First-Name: Joe
  415.         Last-Name: Smith                Last-Name: Smith
  416.         Favourite-Drink: Labatt Beer    Favourite-Drink: Molson Beer
  417.  
  418.         Record 3
  419.         Template: Domain
  420.         Domain-Name: foo.edu
  421.         Contact-Name: Mike Foobar
  422.  
  423.         the centroid for this server would be
  424.  
  425.         Template:       Person
  426.         First-Name:     Joe
  427.                         John
  428.         Last-Name:      Smith
  429.         Favourite-Drink:Beer
  430.                         Labatt
  431.                         Molson
  432.  
  433.         Template:       Domain
  434.         Domain-Name:    foo.edu
  435.         Contact-Name:   Mike
  436.                         Foobar
  437.  
  438.    An index server would then collect this centroid for this server as
  439.    forward knowledge.
  440.  
  441.    Index servers can collect forward knowledge for any servers it
  442.    wishes.  In effect, all of the servers that the index server knows
  443.    about can be searched with a single query to the index server; the
  444.    index server holds the forward knowledge along with pointers to the
  445.    servers it indexes, and can refer the query to servers which might
  446.    hold information which satisfies the query.
  447.  
  448.  
  449.  
  450. Deutsch, et al              Standards Track                     [Page 8]
  451.  
  452. RFC 1835          Architecture of the WHOIS++ service        August 1995
  453.  
  454.  
  455.    Implementors of this protocol are strongly encouraged to incorporate
  456.    centroid generation abilities into their servers.
  457.  
  458. -------------------------------------------------------------------
  459.  
  460.                               ____             ____
  461. top level                    |    |           |    |
  462. whois index                  |    |           |    |
  463. servers                       ----             ----
  464.  
  465.  
  466.                         ____                ____
  467. first level            |    |              |    |
  468. whois index            |    |              |    |
  469. servers                 ----                ----
  470.  
  471.  
  472.                     ____                ____                ____
  473. individual         |    |              |    |              |    |
  474. whois servers      |    |              |    |              |    |
  475.                     ----                ----                ----
  476.  
  477.  
  478.                  Fig. 2 - Indexing system architecture.
  479.  
  480. -------------------------------------------------------------------
  481.  
  482. 1.4.  Getting Help
  483.  
  484.    Another extension to the basic WHOIS service is the requirement that
  485.    all servers support at least a minimal set of help commands, allowing
  486.    users to find out information about both the individual server and
  487.    the entire WHOIS++ service itself. This is done in the context of the
  488.    new extended information model by defining two specific template
  489.    formats and requiring each server to offer at least one example of
  490.    each record using these formats. The operator of each WHOIS service
  491.    is therefor expected to have, as a minimum, a single example of
  492.    SERVICES and HELP records, which can be accessed through appropriate
  493.    commands.
  494.  
  495. 1.4.1.  Minimum HELP Required
  496.  
  497.      Executing the command:
  498.  
  499.              DESCRIBE
  500.  
  501.      gives a brief information about the WHOIS++ server.
  502.  
  503.  
  504.  
  505.  
  506. Deutsch, et al              Standards Track                     [Page 9]
  507.  
  508. RFC 1835          Architecture of the WHOIS++ service        August 1995
  509.  
  510.  
  511.      Executing the command:
  512.  
  513.              HELP
  514.  
  515.      gives a brief description of the WHOIS++ service itself.
  516.  
  517.      The text of both required helped records should contain pointers to
  518.      additional help subjects that are available.
  519.  
  520.  
  521.      Executing the command:
  522.  
  523.              HELP <searchstring>
  524.  
  525.      may give information on any topic.
  526.  
  527. 1.5.  Options and Constraints
  528.  
  529.    The WHOIS++ service is based upon a minimal core set of commands and
  530.    controlling constraints. A small set of additional optional commands
  531.    and constraints can be supported. These would allow users to perform
  532.    such tasks as provide security options, modify the information
  533.    contents of a server or add multilingual support. The required set of
  534.    WHOIS++ commands are summarized in section 2.2.  WHOIS++ constraints
  535.    are described in section 2.3. Optional constraints are described in
  536.    section 2.3.2.
  537.  
  538. 1.6.  Formatting Responses
  539.  
  540.    The output returned by a WHOIS++ server is structured to allow
  541.    machine parsing and automated handling. Of particular interest in the
  542.    ability to return summary information about a search (without having
  543.    to return the entire results).
  544.  
  545.    All output of searches will be returned in one of five output
  546.    formats, which will be one of FULL, ABRIDGED, HANDLE, SUMMARY or
  547.    SERVER-TO-ASK.  Note that a conforming server is only required to
  548.    support the first four formats.
  549.  
  550.    When available, SERVER-TO-ASK format is used to indicate that a
  551.    search cannot be completed but that one or more alternative WHOIS++
  552.    servers may be able to perform the search.
  553.  
  554.    Details of each output format are specified in section 2.4.
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562. Deutsch, et al              Standards Track                    [Page 10]
  563.  
  564. RFC 1835          Architecture of the WHOIS++ service        August 1995
  565.  
  566.  
  567. 1.7.  Reporting Warnings and Errors
  568.  
  569.    The formatted response of WHOIS++ commands allows the encoding of
  570.    warning or error messages to simplify parsing and machine handling.
  571.    The syntax of output formats are described in detail in section 2.4,
  572.    and details of WHOIS++ warnings and error conditions are given in
  573.    Appendix E.
  574.  
  575.    All system messages are numerical, but can be tagged with text. It is
  576.    the clients decision if the text is presented to the user.
  577.  
  578. 1.8.  Privacy and Security Issues
  579.  
  580.    The basic WHOIS++ service was conceived as a simple, unauthenticated
  581.    information lookup service, but there are occasions when
  582.    authentication mechanisms are required. To handle such cases, an
  583.    optional mechanism is provided for authenticating each WHOIS++
  584.    transaction.
  585.  
  586.    The current identified authentication mechanism is PASSWORD, which
  587.    uses simple password authentication. Any other scheme name used must
  588.    begin with the characters "X-" and should thus be regarded as
  589.    experimental and non-standard.
  590.  
  591.    Note that the WHOIS++ authentication mechanism does not dictate the
  592.    actual authentication scheme used, it merely provides a framework for
  593.    indicating that a particular transaction is to be authenticated, and
  594.    the appropriate mechanisms to use. This mechanism is extensible and
  595.    individual implementors are free to add additional mechanisms.
  596.  
  597.    This document includes a very simple authentication scheme where a
  598.    combination of username and password is sent together with the search
  599.    string so the server can verify that the user have access to the
  600.    information. Note that this is NOT by any means a method recommended
  601.    to secure the data itself because both password and information are
  602.    tranferred unencrypted over the network.
  603.  
  604.    Given the unauthenticated nature that default services like white
  605.    pages services are, it is easy to either forget the implications of
  606.    this and just show all data to the public Internet, or think that
  607.    Internet is so dangerous that information is hidden from the Internet
  608.    so the whole idea of a global white pages service is lost.  Therefore
  609.    the type of authentication scheme selected and the public nature of
  610.    the Internet environment must still be taken into consideration when
  611.    assessing the security and authentication of the information served.
  612.  
  613.    A more detailed exposition on security is outside the scope of this
  614.    document.
  615.  
  616.  
  617.  
  618. Deutsch, et al              Standards Track                    [Page 11]
  619.  
  620. RFC 1835          Architecture of the WHOIS++ service        August 1995
  621.  
  622.  
  623. 2.  Part II - WHOIS++ Implementation
  624.  
  625. 2.1.  The WHOIS++ interaction model
  626.  
  627.    A WHOIS++ server will normally listen for a TCP connections on the
  628.    allocated WHOIS++ port (although a WHOIS++ server can be accessed
  629.    over any TCP connection). Once a connection is established, the
  630.    server issues a banner message, and listens for input. The command
  631.    specified in this input is processed and the results returned
  632.    including an ending system message. If the optional HOLD constraint
  633.    has not been specified the connection is then terminated.
  634.  
  635.    If the server supports the optional HOLD constraint, and this
  636.    constraint is specified as part of any command, the server continues
  637.    to listen on the connection for another line of input.  This cycle
  638.    continues as long as the sender continues to append the required HOLD
  639.    constraint to each subsequent command.
  640.  
  641.    At the same time, each server is permitted to set an optional timeout
  642.    value (which should be indicated in the response to the CONSTRAINTS
  643.    command). If set, the server is free to terminate an idle connection
  644.    at any time after this delay has passed with no input from the
  645.    client. If the server terminates the connection due to timeout, it
  646.    will be indicated by the system message. The timeout value is not
  647.    changeable by the client.
  648.  
  649. 2.2.  The WHOIS++ Command set
  650.  
  651.    There are two types of WHOIS++ commands - system commands and the
  652.    WHOIS++ search command.
  653.  
  654.    The WHOIS++ command set consists of a core set of required systems
  655.    commands, a single required search command and an set of optional
  656.    system commands which support features that are not required by all
  657.    servers. The set of required WHOIS++ system commands are listed in
  658.    Table I. Details of the allowable search terms for the search command
  659.    are included in Table II.
  660.  
  661.    Each WHOIS++ command also allows the use of one or more controlling
  662.    constraints, when selected can be used to override defaults or
  663.    otherwise modify server behavior. There is a core set of constraints
  664.    that must be supported by all conforming servers. These include
  665.    SEARCH (which controls the type of search performed), FORMAT (which
  666.    determines the output format used) and MAXHITS (which determines the
  667.    maximum number of matches that a search can return).
  668.  
  669.    These required constraints are summarized in Table III.
  670.  
  671.  
  672.  
  673.  
  674. Deutsch, et al              Standards Track                    [Page 12]
  675.  
  676. RFC 1835          Architecture of the WHOIS++ service        August 1995
  677.  
  678.  
  679.    An additional set of optional constraints are used to provide support
  680.    for different character sets, indicate the need and type of
  681.    authentication to perform on a transaction, and permit multiple
  682.    transactions during a single communications session. These optional
  683.    constraints are listed in Table IV.
  684.  
  685.    It is possible, using the required COMMANDS and CONSTRAINTS system
  686.    commands, to query any WHOIS++ server for its list of supported
  687.    commands and constraints.
  688.  
  689. 2.2.1.  System Commands
  690.  
  691.    System commands are commands to the server for information or to
  692.    control its operation. These include commands to list the template
  693.    types available from individual servers, to obtain a single blank
  694.    template of any available type, and commands to obtain the list of
  695.    valid commands and constraints supported on a server.
  696.  
  697.    There are also commands to obtain the current version of the WHOIS++
  698.    protocol supported, to access a simple help subsystem, to obtain a
  699.    brief description of the service (which is intended, among other
  700.    things, to support the automated registration of the service by
  701.    yellow pages directory services). All of these commands are required
  702.    from a conforming WHOIS++ server.
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. Deutsch, et al              Standards Track                    [Page 13]
  731.  
  732. RFC 1835          Architecture of the WHOIS++ service        August 1995
  733.  
  734.  
  735. ------------------------------------------------------------------------
  736.  
  737. Short  Long Form                               Functionality
  738. -----  ---------                               -------------
  739.        COMMANDS        [ ':' HOLD ]          list valid WHOIS++ commands
  740.                                              supported by this server
  741.  
  742.        CONSTRAINTS     [ ':' HOLD ]          List valid constraints
  743.                                              supported by this server
  744.  
  745.        DESCRIBE        [ ':' HOLD ]          Describe this server,
  746.                                              formating the response
  747.                                              using a standard
  748.                                              "Services" template
  749.  
  750.  '?'   HELP [<string>  [':' <cnstrnts>]]     System help, using a "Help"
  751.                                              template
  752.  
  753.        LIST            [':' <cnstrnts>]      List templates supported
  754.                                              by this system
  755.  
  756.        POLLED-BY       [ ':' HOLD ]          List indexing servers
  757.                                              that are know to track
  758.                                              this server
  759.  
  760.        POLLED-FOR      [ ':' HOLD ]          List information about
  761.                                              what this server is
  762.                                              tracking for
  763.  
  764.        SHOW <string>   [':' <cnstrnts>]      Show contents of templates
  765.                                              specified
  766.  
  767.        VERSION         [ ':' HOLD ]          return current version of
  768.                                              the protocol supported.
  769.  
  770.               Table I - Required WHOIS++ SYSTEM commands.
  771.  
  772. ------------------------------------------------------------------------
  773.  
  774.    Below follows a descriptions for each command. Examples of responses
  775.    to each command is in Appendix C.
  776.  
  777. 2.2.1.1.  The COMMANDS command
  778.  
  779.    The COMMANDS command returns a list of commands that the server
  780.    supports. The response is formatted as a FULL response.
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Deutsch, et al              Standards Track                    [Page 14]
  787.  
  788. RFC 1835          Architecture of the WHOIS++ service        August 1995
  789.  
  790.  
  791. 2.2.1.2.  The CONSTRAINTS command
  792.  
  793.    The CONSTRAINTS command returns a list of constraints and the values
  794.    of those that the server supports. The response is formatted as a
  795.    FULL response, where every constraint is represented as a separate
  796.    record. The template name for these records is CONSTRAINT.  No
  797.    attention is paid to handles. Each record has, as a minimum, the
  798.    following two fields:
  799.  
  800.      - "Constraint", which contains the attribute name described -
  801.        "Default", which shows the default value for this constraint.
  802.  
  803.    If the client is permitted to change the value of the constraint,
  804.    there is also:
  805.  
  806.      - "Range" field, which contains a list of values that this
  807.        server supports, as a comma separated list; Or, if the range
  808.        is numerical, as a pair of numbers separated with a hyphen.
  809.  
  810. 2.2.1.3.  The DESCRIBE command
  811.  
  812.    The DESCRIBE command gives a brief description about the server in a
  813.    "Services" template. The result is formatted as a FULL response.
  814.  
  815. 2.2.1.4.  The HELP command
  816.  
  817.    The HELP command takes an optional argument as subject to get help
  818.    for.
  819.  
  820. 2.2.1.5.  The LIST command
  821.  
  822.    The LIST command returns the name of the templates available on the
  823.    server. The answer is formatted FULL format response.
  824.  
  825. 2.2.1.6.  The POLLED-BY command
  826.  
  827.    The POLLED-BY command returns a list of servers and the templates and
  828.    attribute names that those server polled as centroids from this
  829.    server. The format is in FULL format with two attributes, Template
  830.    and Field. Each of these is a list of names of the templates or
  831.    fields polled.  An empty result means either that the server is not
  832.    polled by anyone, or that it doesn't support indexing.
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842. Deutsch, et al              Standards Track                    [Page 15]
  843.  
  844. RFC 1835          Architecture of the WHOIS++ service        August 1995
  845.  
  846.  
  847. 2.2.1.7.  The POLLED-FOR command
  848.  
  849.    The POLLED-FOR command returns a list of servers that this server has
  850.    polled, and the template and attribute names for each of those.  The
  851.    answer is in FULL format with two attributes, Template and Field.  An
  852.    empty result means either that the server is not polling anyone, or
  853.    that it doesn't support indexing.
  854.  
  855. 2.2.1.8.  The SHOW command
  856.  
  857.    The SHOW command takes a template name as argument and returns
  858.    information about a specific template, formatted as a FULL response.
  859.    The answer is formatted as a blank template with the requested name.
  860.  
  861. 2.2.1.9.  The VERSION command
  862.  
  863.    The output format is a FULL response containg a record with template
  864.    name VERSION. The record must have attribute name "Version", which
  865.    value is "1.0" for this version of the protocol.  The record may also
  866.    have the additional fields "Program-Name" and "Program-Version" which
  867.    gives information about the server implementation if the server so
  868.    desires.
  869.  
  870. 2.2.2.  The Search Command
  871.  
  872.    A search command consists of one or more search terms, which might
  873.    each have local constraints, followed by an optional colon with a set
  874.    of global search constraints.
  875.  
  876.    Each attribute value in the WHOIS++ database is divided into one or
  877.    more words separated by whitespace. Each search term operates on
  878.    every word in the attribute value.
  879.  
  880.    Two or more search terms may be combined with boolean operators AND,
  881.    OR or NOT (other than the implied AND between terms). The operator
  882.    AND has higher precedence than the operator OR, but this can be
  883.    changed by the use of parentheses.
  884.  
  885.    Search constraints that apply to every search term are specified as
  886.    global constraints. Local constraints override global constraints for
  887.    the search term they are bound to. The search terms and the global
  888.    constraints are separated with a colon (':'). Additional global
  889.    constraints are appended to the end of the search command delimited
  890.    with a semicolon ';'.
  891.  
  892.    If different search constraints can not be fulfilled, or the
  893.    combination of different search constraints is uncombinable, the
  894.    server may choose to ignore some constraints, but still do the search
  895.  
  896.  
  897.  
  898. Deutsch, et al              Standards Track                    [Page 16]
  899.  
  900. RFC 1835          Architecture of the WHOIS++ service        August 1995
  901.  
  902.  
  903.    and return some records.
  904.  
  905.    The set of required constraints are summarized in Table III. The set
  906.    of optional constraints are summarized in Table IV.
  907.  
  908.    As an option, the server may accept specifications for attributes for
  909.    either inclusion or exclusion from a reply. Thus, users could specify
  910.    -only- those attributes to return, or specific attributes to filter
  911.    out, thus creating custom views.
  912.  
  913. 2.2.2.1.  Format of a Search Term
  914.  
  915.    Each search term consists of one of the following:
  916.  
  917.      1) A search string, followed by an optional semicolon and set of
  918.         semicolon-separated local constraints.
  919.  
  920.      2) A search term specifier (as listed in Table II), followed by a
  921.         '=', followed by a search string, an optional semicolon and a
  922.         set of semicolon-separate local constraints.
  923.  
  924.      3) An abbreviated search term specifier, followed by a search
  925.         string, followed by an optional semicolon and set of
  926.         semicolon-separated local constraints.
  927.  
  928.      4) A combination of attribute name, followed by '=', followed by
  929.         a search string, followed by an optional semicolon and set of
  930.         semicolon-separate local constraints.
  931.  
  932.    If no term identifier is provided, then the search will be applied to
  933.    attribute values only. This corresponds to an identifier of VALUE.
  934.  
  935.    If a SEARCH-ALL specifier is used then the search will be applied to
  936.    all template names, handles, attribute names and attribute values.
  937.  
  938.    When the user specifies the search term using the form:
  939.  
  940.              "<attribute_name> = <value>"
  941.  
  942.    this is considered to be an ATTRIBUTE-VALUE search.
  943.  
  944.    For discussion of the system reply format, and selecting the
  945.    appropriate reply format, see section 2.4.
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954. Deutsch, et al              Standards Track                    [Page 17]
  955.  
  956. RFC 1835          Architecture of the WHOIS++ service        August 1995
  957.  
  958.  
  959.      -------------------------------------------------------------------
  960.  
  961.      Valid specifiers:
  962.      -----------------
  963.  
  964.       Name                                  Functionality
  965.       ----                                  -------------
  966.  
  967.       ATTRIBUTE-VALUE [ ';' <constrnt>]*    allows combining
  968.                                             attribute and value
  969.                                             specifiers in one term.
  970.       HANDLE          [ ';' <constrnt>]*    Confine search to handles.
  971.       SEARCH-ALL      [ ';' <constrnt>]*    Search everything.
  972.       TEMPLATE        [ ';' <constrnt>]*    Confine search to
  973.                                             template names.
  974.       VALUE           [ ';' <constrnt>]*    Confine search to attribute
  975.                                             values. This is the default.
  976.  
  977.      (Note: The name HANDLE can be replaced with the shortname '!')
  978.  
  979.      Acceptable forms of a search specifier:
  980.      ---------------------------------------
  981.  
  982.      1) <searchstring>  [';' <constraint>]*
  983.  
  984.      2) <specifier> = <searchstring> [';' <constraint>]*
  985.  
  986.      3) <shortspecifier> <searchstring>  [';' <constraint>]*
  987.  
  988.      4) <attribute_name> = <searchstring>  [';' <constraint>]*
  989.  
  990.      (Note: A <constraint> is a name of a valid local constraint.)
  991.  
  992.             Table II - Valid search command term specifiers.
  993.  
  994.      -------------------------------------------------------------------
  995.  
  996. 2.2.2.2.  Format of a Search String
  997.  
  998.    Special characters that need to be quoted are preceeded by a
  999.    backslash, '\'.
  1000.  
  1001.    Special characters are space ' ', tab, equal sign '=', comma ',',
  1002.    colon ':', backslash '\', semicolon ';', asterisk '*', period '.',
  1003.    parenthesis '()', square brackets '[]', dollar sign '$' and
  1004.    circumflex '^'.
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010. Deutsch, et al              Standards Track                    [Page 18]
  1011.  
  1012. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1013.  
  1014.  
  1015.    If the search term is given in some other character set than ISO-
  1016.    8859-1, it must be specified by the constraint INCHARSET.
  1017.  
  1018. 2.3.  WHOIS++ Constraints
  1019.  
  1020.    Constraints are intended to be hints or recommendations to the server
  1021.    about how to process a command. They may also be used to override
  1022.    default behaviour, such as requesting that a server not drop the
  1023.    connection after performing a command.
  1024.  
  1025.    Thus, a user might specify a search constraint as "SEARCH=exact",
  1026.    which means that the search engine is to perform an exact match
  1027.    search. It might also specify "LANGUAGE=Fr", which implies that the
  1028.    server should use French in fuzzy matches. It might also be able to
  1029.    issue system messages in French.
  1030.  
  1031.    In general, contraints take the form "<constraintname>=<value>", with
  1032.    <value> being one of a specified set of valid values. The notable
  1033.    exception is "HOLD", which takes no argument.
  1034.  
  1035.    All constraints can be used as a global constraint, but only a few
  1036.    can be used as local. See tables IV and V for information of which
  1037.    constraints can be local.
  1038.  
  1039.    The CONSTRAINTS system command is used to list the search constraints
  1040.    supported by an individual server.
  1041.  
  1042.    If a server cannot satisfy the specified constraint there will be a
  1043.    mechanism for informing the user in the reply, using system messages.
  1044.    In such cases, the search is still performed, with the the server
  1045.    ignoring unsupported constraints.
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066. Deutsch, et al              Standards Track                    [Page 19]
  1067.  
  1068. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1069.  
  1070.  
  1071. 2.3.1.  Required Constraints
  1072.  
  1073.    The following CONSTRAINTS must be supported in all conforming WHOIS++
  1074.    servers.
  1075.  
  1076.      ------------------------------------------------------------------
  1077.  
  1078.       Format                                           LOCAL/GLOBAL
  1079.       ------                                           -------------
  1080.  
  1081.      SEARCH=   {exact | lstring }                      LOCAL/GLOBAL
  1082.  
  1083.      FORMAT=   {full | abridged | handle | summary }   GLOBAL
  1084.  
  1085.      MAXHITS=  { 1-<max-allowed> }                     GLOBAL
  1086.  
  1087.      Table III - Required WHOIS++ constraints.
  1088.  
  1089.      ------------------------------------------------------------------
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122. Deutsch, et al              Standards Track                    [Page 20]
  1123.  
  1124. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1125.  
  1126.  
  1127. 2.3.2.  Optional CONSTRAINTS
  1128.  
  1129.    The following CONSTRAINTS and constraint values are not required of a
  1130.    conforming WHOIS++ server, but may be supported. If supported, their
  1131.    names and supported values must be returned in the response to the
  1132.    CONSTRAINTS command.
  1133.  
  1134.   ---------------------------------------------------------------------
  1135.  
  1136.    Format                                                  LOCAL/GLOBAL
  1137.    ------                                                  -------------
  1138.  
  1139.   SEARCH=       { regex | fuzzy | substring | <X-format> } LOCAL/GLOBAL
  1140.  
  1141.   CASE=         { ignore | consider }                      LOCAL/GLOBAL
  1142.  
  1143.   FORMAT=       { server-to-ask | <X-format> }             GLOBAL
  1144.  
  1145.   MAXFULL=      { 1-<max-allowed> }                        GLOBAL
  1146.  
  1147.   AUTHENTICATE= password                                   GLOBAL
  1148.  
  1149.   NAME=         <string>                                   GLOBAL
  1150.  
  1151.   PASSWORD=     <string>                                   GLOBAL
  1152.  
  1153.   INCHARSET=    { us-ascii | iso-8859-* }                  GLOBAL
  1154.  
  1155.   LANGUAGE=     <As defined in ISO 639:1988>               GLOBAL
  1156.  
  1157.   HOLD                                                     GLOBAL
  1158.  
  1159.   IGNORE=       {attributelist}                            GLOBAL
  1160.  
  1161.   INCLUDE=      {attributelist}                            GLOBAL
  1162.  
  1163.                 Table IV - Optional WHOIS++ constraints.
  1164.  
  1165.   ----------------------------------------------------------------------
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178. Deutsch, et al              Standards Track                    [Page 21]
  1179.  
  1180. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1181.  
  1182.  
  1183. 2.3.2.1.  The SEARCH Constraint
  1184.  
  1185.    The SEARCH constraint is used for specifying the method that is to be
  1186.    used for the search. The default method is "exact". Following is a
  1187.    definition of each search method.
  1188.  
  1189.  
  1190.    exact           The search will succeed for a word that exactly
  1191.                    matches the search string.
  1192.  
  1193.    substring       The search will succeed for a word that matches
  1194.                    a part of a word.
  1195.  
  1196.    regex           The search will succeed for a word when a regular
  1197.                    expression matches the searched data. Regular
  1198.                    expression is built up by using constructions of
  1199.                    '*', '.', '^', '$', and '[]'. For use of
  1200.                    regular expressions see Appendix G.
  1201.  
  1202.    fuzzy           The search will succeed for words that matches the
  1203.                    search string by using an algorithm designed to catch
  1204.                    closely related names with different spelling, e.g.
  1205.                    names with the same pronounciation.  The server
  1206.                    chooses which algorithm to use, but it may vary
  1207.                    depending on template name, attribute name and
  1208.                    language used (see Constraint Language above).
  1209.  
  1210.    lstring         The search will succed for words that begins
  1211.                    with the search string.
  1212.  
  1213. 2.3.2.2.  The FORMAT Constraint
  1214.  
  1215.    The FORMAT constraint describes what format the result will be in.
  1216.    Default format is FULL. For a description of each format, see Server
  1217.    Response Modes below.
  1218.  
  1219. 2.3.2.3.  The MAXFULL Constraint
  1220.  
  1221.    The MAXFULL constraint sets the limit of the number of matching
  1222.    records the server allows before it enforces SUMMARY responses.  The
  1223.    client may attempt to override this value by specifying another value
  1224.    to that constraint. Example: If, for privacy reasons, the server will
  1225.    return the response in SUMMARY format if the number of hits exceeds
  1226.    2, the MAXFULL constraint is set to 2 by the server.
  1227.  
  1228.    Regardless of what format the client did or did not ask for, the
  1229.    server will change the response format to SUMMARY when the number of
  1230.    matching records equals or exceeds this value.
  1231.  
  1232.  
  1233.  
  1234. Deutsch, et al              Standards Track                    [Page 22]
  1235.  
  1236. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1237.  
  1238.  
  1239. 2.3.2.4.  The MAXHITS Constraint
  1240.  
  1241.    The MAXHITS constraint sets the maximum number of records the client
  1242.    can get in a search respone.
  1243.  
  1244. 2.3.2.5.  The CASE Constraint
  1245.  
  1246.    The CASE constraint defines if the search should be done case
  1247.    sensistive or not. Default value is to have case ignored.
  1248.  
  1249. 2.3.2.6.  The AUTHENTICATE Constraint
  1250.  
  1251.    The AUTHENTICATE constraint describes which authentication method to
  1252.    use when executing the search. By using a specific authentication
  1253.    method, some other constraints might be needed which is specified by
  1254.    the authentication method.
  1255.  
  1256.    The only authentication method described in this document is
  1257.    "password", if used, also the two other constraints "name" and
  1258.    "password" need to be set.
  1259.  
  1260. 2.3.2.7.  The NAME Constraint
  1261.  
  1262.    The NAME constraint is only used together with some authentication
  1263.    method named by the constraint "authenticate". The only use described
  1264.    in this document is by sending a username as a string of characters
  1265.    which together with the string given as an argument to the "password"
  1266.    constraint is sent to the server. The server can use that pair of
  1267.    strings to do a simple authentication check, similar to the UNIX
  1268.    login program.
  1269.  
  1270. 2.3.2.8.  The PASSWORD Constraint
  1271.  
  1272.    The PASSWORD constraint is only used together with some
  1273.    authentication method named by the constraint "authenticate". The
  1274.    only use described in this document is by sending a password as a
  1275.    string of characters which together with the string given as an
  1276.    argument to the "name" constraint is sent to the server. The server
  1277.    can use that pair of strings to do a simple authentication check,
  1278.    similar tothe UNIX login program.
  1279.  
  1280. 2.3.2.9.  The LANGUAGE Constraint
  1281.  
  1282.    The LANGUAGE constraints can be used as an extra information to the
  1283.    fuzzy matching search method, and it might also be used to tell the
  1284.    server to give the system responses in another language, although
  1285.    this ability should be handled by the client. The language code
  1286.    defined in RFC 1766 [ALVE95] can be used as a value for the language
  1287.  
  1288.  
  1289.  
  1290. Deutsch, et al              Standards Track                    [Page 23]
  1291.  
  1292. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1293.  
  1294.  
  1295.    constraint.  In these, the case of the letters are insignigicant.
  1296.  
  1297. 2.3.2.10.  The INCHARSET Constraint
  1298.  
  1299.    The INCHARSET constraint tells the server in which character set the
  1300.    search string itself is given in. The default character set is ISO-
  1301.    8859-1.
  1302.  
  1303. 2.3.2.11.  The IGNORE Constraint
  1304.  
  1305.    The IGNORE constraint specifies which attributes to NOT include in
  1306.    the result. All other attributes will be included (as if named
  1307.    explicitly by the "include" constraint).
  1308.  
  1309.    If an attribute is named both with the "include" and "ignore"
  1310.    constraint, the attribute is to be included in the result, but the
  1311.    system message must be "% 205 Requested constraint not fulfilled".
  1312.  
  1313. 2.3.2.12.  The INCLUDE Constraint
  1314.  
  1315.    The INCLUDE constraint specifies which attributes to include in the
  1316.    result. All other attributes will be excluded (as if named explicitly
  1317.    by the "ignore" constraint).
  1318.  
  1319.    If an attribute is named both with the "include" and "ignore"
  1320.    constraint, the attribute is to be included in the result, but the
  1321.    system message must be "% 205 Requested constraint not fulfilled".
  1322.  
  1323. 2.4.  Server Response Modes
  1324.  
  1325.    There are currently a total of five different response modes possible
  1326.    for WHOIS++ servers. These are FULL, ABRIDGED, HANDLE, SUMMARY and
  1327.    SERVER-TO-ASK. The syntax of each output format is specified in more
  1328.    detail in the following section.
  1329.  
  1330.      1) A FULL format response provides the complete contents of a
  1331.         template matching the specified query, including the template
  1332.         type, the server handle and an optional record handle.
  1333.  
  1334.      2) An ABRIDGED format response provides a brief summary, including
  1335.         (as a minimum) the server handle, the corresponding record handle
  1336.         and relevant information for that template.
  1337.  
  1338.      3) A HANDLE format response returns a line with information about
  1339.         the server handle and record handle for a record that matched
  1340.         the specified query.
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346. Deutsch, et al              Standards Track                    [Page 24]
  1347.  
  1348. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1349.  
  1350.  
  1351.      4) A SUMMARY response provides only a brief summary of information
  1352.         the number of matches and the list of template types in which the
  1353.         matches occured.
  1354.  
  1355.      5) A SERVER-TO-ASK response only returns pointers to other index
  1356.         servers which might possibly be able to answer the specified
  1357.         query.
  1358.  
  1359.    The server may respond with a null answer and may also respond with a
  1360.    null answer together with a correct system message to indicate that
  1361.    the query was too complex.
  1362.  
  1363. 2.4.1.  Default Responses
  1364.  
  1365.    By default, a WHOIS++ server will provide FULL responses. This may be
  1366.    changed by the client with the use of the global constraint "format".
  1367.  
  1368.    The server is allowed to provide response in SUMMARY format if the
  1369.    number of hits exceeds the value of the global constraint "maxfull".
  1370.  
  1371.    The server will not respond with more matches than the value
  1372.    specified with the global constraint "maxhits"; Not in any response
  1373.    format. If the number of matches exceeds this value, the server will
  1374.    issues the system message 110 (maxhits value exceeded), but will
  1375.    still show the responses, up to the number of the "maxhits"
  1376.    constraint value.  This mechanism will allow the server to hide the
  1377.    number of possible matches to a search command.
  1378.  
  1379.    The server response modes are summarized in Table V.
  1380.  
  1381. 2.4.2.  Format of Responses
  1382.  
  1383.    Each response consists of a numerical system generated message, which
  1384.    can be tagged with text, followed by an optional formatted response
  1385.    message, followed by a second system generated messages.
  1386.  
  1387.    That is:
  1388.  
  1389.         '%' <system messages> <nl>
  1390.  
  1391.         [ <formatted response> ]
  1392.  
  1393.         '%' <system messages> <nl>
  1394.  
  1395.  
  1396.    If there are no matches to a query, the system is not required to
  1397.    generate any output as a formatted response, although it must still
  1398.    generate system messages.
  1399.  
  1400.  
  1401.  
  1402. Deutsch, et al              Standards Track                    [Page 25]
  1403.  
  1404. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1405.  
  1406.  
  1407.    For information about the format for system messages, see Appendix E.
  1408.  
  1409. 2.4.3.  Syntax of a Formatted Response
  1410.  
  1411.    All formatted responses except for the HANDLE response, consists of a
  1412.    response-specific START line, followed by an optional response-
  1413.    specific data section, followed by a TERMINATION line.  The HANDLE
  1414.    response is different in that it only consists of a START line.  It
  1415.    is permissible to insert any number of lines consisting solely of
  1416.    newlines within a formatted response to improve readibility.
  1417.  
  1418.    Each line shall be limited to no more than 81 characters, including
  1419.    the terminating newline.  If a line (including the required leading
  1420.    single space) would exceed 81 characters, it is to be broken into
  1421.    lines of no more than 81 characters, with each continuation line
  1422.    beginning with a "+" character in the first column instead of the
  1423.    leading character.
  1424.  
  1425.    If an attribute value in a data section includes a line break, the
  1426.    line break must be replaced by a CR/LF pair and the following line
  1427.    begin with a "-" character in the first column, instead of the
  1428.    leading character. The attribute name is not repeated on consecutive
  1429.    lines.
  1430.  
  1431.    A TERMINATION line consists of a line with a '#' in the first column,
  1432.    followed by one white space character (SPACE or TAB), followed by the
  1433.    keyword END, followed by zero or more characters, followed by a
  1434.    newline.
  1435.  
  1436.    A response-specific section will be one of the following:
  1437.  
  1438.        1) FULL Format Response
  1439.        2) ABRIDGED Format Response
  1440.        3) HANDLE Format Response
  1441.        4) SUMMARY Format Response
  1442.        5) SERVER-TO-ASK Format Response
  1443.  
  1444.         The details of each are specified in the following sections:
  1445.  
  1446. 2.4.3.1.  A FULL format response
  1447.  
  1448.    A FULL format response consists of a series of responses, each
  1449.    consisting of a START line, followed by the complete template
  1450.    information for the matching record and a TERMINATION line.
  1451.  
  1452.    Each START line consists of a '#' in the first column, followed by
  1453.    one white space character, the word "FULL", a white space character,
  1454.    the name of the corresponding template type, one white space
  1455.  
  1456.  
  1457.  
  1458. Deutsch, et al              Standards Track                    [Page 26]
  1459.  
  1460. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1461.  
  1462.  
  1463.    character, the server handle, a white space character, an optional
  1464.    handle for the record, and a terminating newline.
  1465.  
  1466.    The template information for the record will be returned as a series
  1467.    of lines consisting of a single space, followed by the corresponding
  1468.    line of the record.
  1469.  
  1470.    The line of the record shall consist of a single space and the
  1471.    attribute name followed by a ':', a single space, the value of that
  1472.    attribute, and a newline.
  1473.  
  1474. 2.4.3.2.  ABRIDGED Format Response
  1475.  
  1476.    Each ABRIDGED format response consists of a START line, a single line
  1477.    excerpt of the template information from each matching record and a
  1478.    TERMINATION line. The excerpt information shall include information
  1479.    that is relevant to the template type.
  1480.  
  1481.    The START line consists of a '#' in the first column, followed by one
  1482.    white space character, the word "ABRIDGED", a white space character,
  1483.    the name of the corresponding template type, a white space character,
  1484.    the server handle, a white space character, the handle for the
  1485.    record, and a terminating newline.
  1486.  
  1487.    The abridged template information will be returned as a line,
  1488.    consisting of a single space, followed by the abridged line of the
  1489.    record and a newline pair.
  1490.  
  1491. 2.4.3.3.  HANDLE Format Response
  1492.  
  1493.    A HANDLE response consists of a single START line, which shall start
  1494.    with a '#' in the first column, followed by one white space
  1495.    character, the word "HANDLE", a white space character, the name of
  1496.    the corresponding template, a white space character, the handle for
  1497.    the server, a white space character, the handle for that record, and
  1498.    a terminating newline.
  1499.  
  1500. 2.4.3.4.  SUMMARY Format Response
  1501.  
  1502.    A SUMMARY format response consists of a single set of responses,
  1503.    consisting of a line listing the number of matches to the specified
  1504.    query, followed by a list of all template types which satisfied the
  1505.    query at least once.
  1506.  
  1507.    The START line shall begin with a '#' in the first column, be
  1508.    followed by one white space character, the word "SUMMARY", a white
  1509.    space character, the handle for the server, and a terminating
  1510.    newline.
  1511.  
  1512.  
  1513.  
  1514. Deutsch, et al              Standards Track                    [Page 27]
  1515.  
  1516. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1517.  
  1518.  
  1519.    All following lines until the TERMINATION line starts with a leading
  1520.    space.  The first line shall begin with the string "matches: ", be
  1521.    followed by a space and the number of responses to the query and
  1522.    terminated by a newline.  The second line shall begin with the string
  1523.    "templates: ", be followed by a newline separated list of the name of
  1524.    the template types which matched the query.  Each line following the
  1525.    first which include the text "templates:" must begin with a '-'
  1526.    instead of a space.
  1527.  
  1528. 2.4.3.5.  SERVER-TO-ASK Response
  1529.  
  1530.    A SERVER-TO-ASK response consists of information to the client about
  1531.    a server to contact next to resolve a query.  If the server has
  1532.    pointers to more than one server, it will present additional SERVER-
  1533.    TO-ASK responses.
  1534.  
  1535.    The SERVER-TO-ASK response will consist of a START line and a number
  1536.    of lines with attribute-value pairs, separated by CRLF. Each line is
  1537.    indented with one space. The end of a SERVER-TO-ASK response is
  1538.    indicated with a TERMINATION line.
  1539.  
  1540.    Each START line consists of a '#' in the first column, followed by
  1541.    one white space character, the word "SERVER-TO-ASK", a white space
  1542.    character, the handle of the server and a terminating newline.
  1543.  
  1544.    1. "Server-Handle" - The server handle of the server pointed at.
  1545.       (req.)
  1546.    2. "Host-Name" - A cached host named for the server pointed at. (opt.)
  1547.    3. "Host-Port" - A cached port number for the server pointed at.
  1548.       (opt.)
  1549.  
  1550.    Other attributes may be present, depending on the index server.
  1551.  
  1552. 2.4.4.  System Generated Messages
  1553.  
  1554.    All system generated messages must begin with a '%' as the first
  1555.    character, a space as the second one, followed by a three digit
  1556.    number, a space and an optional text message. The total length of the
  1557.    line must be no more than 81 characters long, including the
  1558.    terminating CR LF pair. There is no limit to the number of system
  1559.    messages that may be generated.
  1560.  
  1561.    The format for multiline replies requires that every line, except the
  1562.    last, begin with "%", followed by space, the reply code, a hyphen,
  1563.    and an optional text.  The last line will begin with "%", followed by
  1564.    space, the reply code, a space and some optional text.
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570. Deutsch, et al              Standards Track                    [Page 28]
  1571.  
  1572. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1573.  
  1574.  
  1575.    System generated messages displayed before or after the formatted
  1576.    response section are expected to refer to operation of the system or
  1577.    refer to the entire query. System generated messages within the
  1578.    output of an individual record during a FULL reponse are expected to
  1579.    refer to that record only, and could (for example) be used to
  1580.    indicate problems with that record of the response. See Appendix E
  1581.    for a description of system messages.
  1582.  
  1583. 2.5.  Compatibility with Older WHOIS Servers
  1584.  
  1585.    Note that this format, although potentially more verbose, is still in
  1586.    a human readible form. Responses from older systems that do not
  1587.    follow this format are still conformant, since their responses would
  1588.    be interpreted as being equivalent to optional text messages, without
  1589.    a formatted response.  Clients written to this specification would
  1590.    display the responses as a advisory text message, where it would
  1591.    still be readible by the user.
  1592.  
  1593. 3.  Miscellaneous
  1594.  
  1595. 3.1.  Acknowledgements
  1596.  
  1597.    The WHOIS++ effort began as an intensive brainstorming session at the
  1598.    24th IETF, in Boston Massachusetts.  Present at the birth, and
  1599.    contributing ideas through this early phase, were (alphabetically)
  1600.    Peter Deutsch, Alan Emtage, Jim Fullton, Joan Gargano, Brad
  1601.    Passwaters, Simon Spero, and Chris Weider. Others who have since
  1602.    helped shape this document with feedback and suggestions include
  1603.    Roxana Bradescu, Patrik Faltstrom, Kevin Gamiel, Dan Kegel, Michael
  1604.    Mealling, Mark Prior and Rickard Schoultz.
  1605.  
  1606. 3.2  References
  1607.  
  1608.    [ALVE95]        Alvestrand H., "Tags for the Identification of
  1609.                    Languages", RFC 1766, UNINETT, March 1995.
  1610.  
  1611.    [HARR85]        Harrenstein K., Stahl M., and E. Feinler,
  1612.                    "NICNAME/WHOIS", RFC 954, SRI, October 1985.
  1613.  
  1614.    [IIIR]          Weider C., and P. Deutsch, "A Vision of an
  1615.                    Integrated Internet Information Service", RFC 1727
  1616.                    Bunyip Information Systems, Inc., December 1994.
  1617.  
  1618.    [POST82]        Postel J., "Simple Mail Transfer Protocol", STD 10,
  1619.                    RFC 821, USC/Information Sciences Institute,
  1620.                    August 1982.
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626. Deutsch, et al              Standards Track                    [Page 29]
  1627.  
  1628. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1629.  
  1630.  
  1631. 3.3.  Authors' Addresses
  1632.  
  1633.    Peter Deutsch
  1634.    BUNYIP INFORMATION SYSTEMS, Inc.
  1635.    310 St-Catherine St West,
  1636.    Suite 202,
  1637.    Montreal, Quebec H2X 2A1
  1638.    CANADA
  1639.  
  1640.    EMail: peterd@bunyip.com
  1641.  
  1642.  
  1643.    Rickard Schoultz
  1644.    KTHNOC, SUNET/NORDUnet/Ebone Operations Centre
  1645.    100 44 STOCKHOLM
  1646.    SWEDEN
  1647.  
  1648.    EMail: schoultz@sunet.se
  1649.  
  1650.  
  1651.    Patrik Faltstrom
  1652.    BUNYIP INFORMATION SYSTEMS, Inc.
  1653.    310 St-Catherine St West,
  1654.    Suite 202,
  1655.    Montreal, Quebec H2X 2A1
  1656.    CANADA
  1657.  
  1658.    EMail: paf@bunyip.com
  1659.  
  1660.  
  1661.    Chris Weider
  1662.    BUNYIP INFORMATION SYSTEMS, Inc.
  1663.    2001 S. Huron Parkway, #12
  1664.    Ann Arbor, MI 48104
  1665.    USA
  1666.  
  1667.    EMail: clw@bunyip.com
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682. Deutsch, et al              Standards Track                    [Page 30]
  1683.  
  1684. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1685.  
  1686.  
  1687. Appendix A - Some Sample Queries
  1688.  
  1689.        author=chris and template=user
  1690.  
  1691.    The result will consist of all records where attribute "author"
  1692.    matches "chris" with case ignored. Only USER templates will be
  1693.    searched. An example of a matching record is "Author=Chris Weider".
  1694.    This is the typical case of search.
  1695.  
  1696.        schoultz and rick;search=lstring
  1697.  
  1698.    The result will consist of all records which have one attribute value
  1699.    matching "schoultz" exactly and one having "rick" as leading
  1700.    substring, both with case ignored. One example is "Name=Rickard
  1701.    choultz".
  1702.  
  1703.        value=phone;search=substring
  1704.  
  1705.    The result will consist of all records which have attribute values
  1706.    matching *phone*, for example the record "Name=Acme telephone inc.",
  1707.    but will not match the attribute name "phone". (Since "value" term
  1708.    specifier is the default, the search term could be "phone" as well as
  1709.    "value=phone".)
  1710.  
  1711.        search-all=Peter ; search=substring;case=consider
  1712.  
  1713.    The result will consist of all records which have attribute names,
  1714.    template names or attribute values matching "Peter" with respect to
  1715.    case. One example is "Friend-Of-Peter: Yes".
  1716.  
  1717.       ucdavis;search=substring and (gargano or joan):include=name,email
  1718.  
  1719.    This search command will find records which have records containing
  1720.    the words "gargano" or "joan" somewhere in the record, and has the
  1721.    word "ucdavis" somewhere in a word. The result will only show the
  1722.    "name" and "email" fields.
  1723.  
  1724. Appendix B - Some sample responses
  1725.  
  1726.       1) FULL format responses:
  1727.  
  1728.       # FULL USER SERVERHANDLE1 PD45
  1729.        Name: Peter Deutsch
  1730.        email: peterd@bunyip.com
  1731.       # END
  1732.       # FULL USER SERVERHANDLE1 AE1
  1733.        Name: Alan Emtage
  1734.        email: bajan@bunyip.com
  1735.  
  1736.  
  1737.  
  1738. Deutsch, et al              Standards Track                    [Page 31]
  1739.  
  1740. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1741.  
  1742.  
  1743.       # END
  1744.       # FULL USER SERVERHANDLE1 NW1
  1745.        Name: Nick West
  1746.        Favourite-Bicycle-Forward-Wheel-Brand: New Bicy
  1747.       +cles Acme Inc.
  1748.        email: nick@bicycle.acme.com
  1749.        My-favourite-song: Happy birthday to you!
  1750.       -Happy birthday to you!
  1751.       -Happy birthday dear Nick!
  1752.       -Happy birthday to you.
  1753.       # END
  1754.       # FULL SERVICES SERVERHANDLE1 WWW1
  1755.        Type: World Wide Web
  1756.        Location: the world
  1757.       # END
  1758.  
  1759.                           --------------------
  1760.  
  1761.  
  1762.       2) An ABRIDGED format response:
  1763.  
  1764.       # ABRIDGED USER SERVERHANDLE1 PD45
  1765.        Peter Deutsch             peterd@bunyip.com
  1766.       # END
  1767.       # ABRIDGED USER SERVERHANDLE1 AE1
  1768.        Alan Emtage               bajan@bunyip.com
  1769.       # END
  1770.       # ABRIDGED USER SERVERHANDLE1 WWW1
  1771.        World Wide Web            the world
  1772.       # END
  1773.  
  1774.  
  1775.                           --------------------
  1776.  
  1777.  
  1778.       3) HANDLE format responses:
  1779.  
  1780.  
  1781.       # HANDLE USER SERVERHANDLE1 PD45
  1782.       # HANDLE USER SERVERHANDLE1 AE1
  1783.       # HANDLE SERVICES SERVERHANDLE1 WWW1
  1784.  
  1785.  
  1786.                           --------------------
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  
  1792.  
  1793.  
  1794. Deutsch, et al              Standards Track                    [Page 32]
  1795.  
  1796. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1797.  
  1798.  
  1799.       4) A SUMMARY HANDLE format response:
  1800.  
  1801.       # SUMMARY SERVERHANDLE1
  1802.  
  1803.         Matches:      175
  1804.         Templates:    User
  1805.       -               Services
  1806.       -               Abstracts
  1807.       # END
  1808.  
  1809. Appendix C - Sample responses to system commands
  1810.  
  1811.    C.1 Response to the LIST command
  1812.  
  1813.       # FULL LIST SERVERHANDLE1
  1814.        Templates: USER
  1815.       -SERVICES
  1816.       -HELP
  1817.       # END
  1818.  
  1819.  
  1820.    C.2 Response to the SHOW command
  1821.  
  1822.       This example shows the result after issuing "show user":
  1823.  
  1824.       # FULL USER SERVERHANDLE1
  1825.         Name:
  1826.         Email:
  1827.         Work-Phone:
  1828.         Organization-Name:
  1829.         City:
  1830.         Country:
  1831.       # END
  1832.  
  1833.    C.3 Response to the POLLED-BY command
  1834.  
  1835.       # FULL POLLED-BY SERVERHANDLE1
  1836.        Server-handle: serverhandle2
  1837.        Cached-Host-Name: sunic.sunet.se
  1838.        Cached-Host-Port: 7070
  1839.        Template: USER
  1840.        Field: ALL
  1841.       # END
  1842.       # FULL POLLED-BY SERVERHANDLE1
  1843.        Server-handle: serverhandle3
  1844.        Cached-Host-Name: kth.se
  1845.        Cached-Host-Port: 7070
  1846.        Template: ALL
  1847.  
  1848.  
  1849.  
  1850. Deutsch, et al              Standards Track                    [Page 33]
  1851.  
  1852. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1853.  
  1854.  
  1855.        Field: Name,Email
  1856.       # END
  1857.  
  1858.  
  1859.    C.4 Response to the POLLED-FOR command
  1860.  
  1861.       # FULL POLLED-FOR SERVERHANDLE1
  1862.        Server-Handle: serverhandle5
  1863.        Template: ALL
  1864.        Field: Name,Address,Job-Title,Organization-Name,
  1865.       +Organization-Address,Organization-Name
  1866.       # END
  1867.       # FULL POLLED-FOR SERVERHANDLE1
  1868.        Server-Handle: serverhandle4
  1869.        Template: USER
  1870.        Field: ALL
  1871.       # END
  1872.  
  1873.  
  1874.    C.5 Response to the VERSION command
  1875.  
  1876.       # FULL VERSION BUNYIP.COM
  1877.        Version: 1.0
  1878.        Program-Name: kth-whoisd
  1879.        Program-Version: 2.0
  1880.       # END
  1881.  
  1882.  
  1883.    C.6 Response to the CONSTRAINTS command
  1884.  
  1885.       # FULL CONSTRAINT COMEDIA.SE
  1886.        Constraint: format
  1887.        Default: full
  1888.        Range: full,abridged,summary,handle
  1889.       # END
  1890.       # FULL CONSTRAINT COMEDIA.SE
  1891.        Constraint: maxhits
  1892.        Default: 200
  1893.        Range: 1-1000
  1894.       # END
  1895.       # FULL CONSTRAINT COMEDIA.SE
  1896.        Constraint: search
  1897.        Default: exact
  1898.        Range: exact,substring,lstring
  1899.       # END
  1900.       # FULL CONSTRAINT COMEDIA.SE
  1901.        Constraint: maxfull
  1902.        Default: 20
  1903.  
  1904.  
  1905.  
  1906. Deutsch, et al              Standards Track                    [Page 34]
  1907.  
  1908. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1909.  
  1910.  
  1911.       # END
  1912.  
  1913.    C.3 Response to the COMMANDS command
  1914.  
  1915.       # FULL COMMANDS SERVERHANDLE1
  1916.        Commands: commands
  1917.       -constraints
  1918.       -describe
  1919.       -help
  1920.       -list
  1921.       -polled-by
  1922.       -polled-for
  1923.       -show
  1924.       -version
  1925.       # END
  1926.  
  1927. Appendix D - Sample whois++ session
  1928.  
  1929.    Below is an example of a session between a client and a server. The
  1930.    angle brackets to the left is not part of the communication, but is
  1931.    just put there to denonte the direction of the communication between
  1932.    the server or the client. Text appended to '>' means messages from
  1933.    the server and '<' from the client.
  1934.  
  1935.      Client connects to the server
  1936.  
  1937.      >% 220-Welcome to
  1938.      >% 220-the whois++ server
  1939.      >% 220 at ACME inc.
  1940.      <name=Nick:hold
  1941.      >% 200 Command okay
  1942.      >
  1943.      ># FULL USER ACME.COM NW1
  1944.      > name: Nick West
  1945.      > email: nick@acme.com
  1946.      ># END
  1947.      ># SERVER-TO-ASK ACME.COM
  1948.      > Server-Handle: SUNETSE01
  1949.      > Host-Name: whois.sunet.se
  1950.      > Host-Port: 7070
  1951.      ># END
  1952.      ># SERVER-TO-ASK ACME.COM
  1953.      > Server-Handle: KTHSE01
  1954.      ># END
  1955.      >% 226 Tranfer complete
  1956.      <version
  1957.      >% 200 Command okay
  1958.      ># FULL VERSION ACME.COM
  1959.  
  1960.  
  1961.  
  1962. Deutsch, et al              Standards Track                    [Page 35]
  1963.  
  1964. RFC 1835          Architecture of the WHOIS++ service        August 1995
  1965.  
  1966.  
  1967.      > Version: 1.0
  1968.      ># END
  1969.      >% 226 Tranfer complete
  1970.      >% 203 Bye
  1971.      Server closes the connection
  1972.  
  1973.    In the example above, the client connected to a whois++ server and
  1974.    queried for all records where the attribute "name" equals "Nick", and
  1975.    asked the server not to close the connection after the response by
  1976.    using the global constraint "HOLD".
  1977.  
  1978.    The server responds with one record and a pointer to two other
  1979.    servers that either holds records or pointers to other servers.
  1980.  
  1981.    The client continues with asking for the servers version number
  1982.    without using the HOLD constraint.  After responding with protocol
  1983.    version, the server closes the connection.
  1984.  
  1985.    Note that each response from the server begins system message 200
  1986.    (Command OK), and ends with system message 226 (Transfer Complete).
  1987.  
  1988. Appendix E - System messages
  1989.  
  1990.    A system message begins with a '%', followed by a space and a three
  1991.    digit number, a space, and an optional text message. The line message
  1992.    must be no more than 81 characters long, including the terminating CR
  1993.    LF pair. There is no limit to the number of system messages that may
  1994.    be generated.
  1995.  
  1996.    A multiline system message have a hyphen instead of a space in column
  1997.    6, immediately after the numeric response code in all lines, except
  1998.    the last one, where the space is used.
  1999.  
  2000.      Example 1
  2001.  
  2002.      % 200 Command okay
  2003.  
  2004.      Example 2
  2005.  
  2006.      % 220-Welcome to
  2007.      % 220-the whois++ server
  2008.      % 220 at ACME inc.
  2009.  
  2010.    The client is not expected to parse the text part of the response
  2011.    message except when receiving reply 600, in which case the text part
  2012.    is the name of a character set that will be used by the server in the
  2013.    rest of the response. The valid values for characters sets is
  2014.    specified in the "characterset" list in the BNF listing in Appendix
  2015.  
  2016.  
  2017.  
  2018. Deutsch, et al              Standards Track                    [Page 36]
  2019.  
  2020. RFC 1835          Architecture of the WHOIS++ service        August 1995
  2021.  
  2022.  
  2023.    F.
  2024.  
  2025.    The theory of reply codes is described in Appendix E in STD 10, RFC
  2026.    821 [POST82].
  2027.  
  2028. ------------------------------------------------------------------------
  2029.  
  2030. List of system response codes
  2031. ------------------------------
  2032.  
  2033. 110 Too many hits                         The number of matches exceeded
  2034.                                           the value specified by the
  2035.                                           maxhits constraint. Server
  2036.                                           will still reply with as many
  2037.                                           records as "maxhits" allows.
  2038.  
  2039. 111 Requested constraint not supported    One or more constraints in
  2040.                                           query is not implemented, but
  2041.                                           the search is still done.
  2042.  
  2043. 112 Requested constraint not fullfilled   One or more constraints in
  2044.                                           query has unacceptable value
  2045.                                           and was therefore not used,
  2046.                                           but the search is still done.
  2047.  
  2048. 200 Command Ok                            Command accepted and executed.
  2049.                                           The client must wait for a
  2050.                                           transaction end system message.
  2051.  
  2052. 201 Command Completed successfully        Command accepted and executed.
  2053.  
  2054. 203 Bye                                   Server is closing connection
  2055.  
  2056. 220 Service Ready                         Greeting message. Server is
  2057.                                           accepting commands.
  2058.  
  2059. 226 Transaction complete                  End of data. All responses to
  2060.                                           query are sent.
  2061.  
  2062. 430 Authentication needed                 Client requested information
  2063.                                           that needs authentication.
  2064.  
  2065. 500 Syntax error
  2066.  
  2067. 502 Search expression too complicated     This message is sent when the
  2068.                                           server is not able to resolve
  2069.                                           a query (i.e. when a client
  2070.                                           sent a regular expression that
  2071.  
  2072.  
  2073.  
  2074. Deutsch, et al              Standards Track                    [Page 37]
  2075.  
  2076. RFC 1835          Architecture of the WHOIS++ service        August 1995
  2077.  
  2078.  
  2079.                                           is too deeply nested).
  2080.  
  2081. 530 Authentication failed                 The authentication phase
  2082.                                           failed.
  2083.  
  2084. 600 <token>                               Subsequent attribute values
  2085.                                           are encoded in the charater
  2086.                                           set specified by <token>.
  2087.  
  2088.                     Table V - System response codes
  2089.  
  2090. ------------------------------------------------------------------------
  2091.  
  2092. Appendix F - The WHOIS++ BNF Grammar
  2093.  
  2094.  
  2095.  
  2096.    whois-command   =   ( system-command [":" "hold"]
  2097.                        / terms [":" globalcnstrnts] ) NL
  2098.  
  2099.    system-command  =   "constraints"
  2100.                        / "describe"
  2101.                        / "commands"
  2102.                        / "polled-by"
  2103.                        / "polled-for"
  2104.                        / "version"
  2105.                        / "list"
  2106.                        / "show" [1*SP string]
  2107.                        / "help" [1*SP string]
  2108.                        / "?" [string]
  2109.  
  2110.    terms           =   and-expr *("or" and-expr)
  2111.  
  2112.    and-expr        =   not-expr *("and" not-expr)
  2113.  
  2114.    not-expr        =   ["not"] (term / ( "(" terms ")" ))
  2115.  
  2116.    term            =   generalterm / specificterm
  2117.                        / shorthandle / combinedterm
  2118.  
  2119.    generalterm     =   string *(";" localcnstrnt)
  2120.  
  2121.    specificterm    =   specificname "=" string
  2122.                        *(";" localcnstrnt)
  2123.  
  2124.    specificname    =   "handle" / "value"
  2125.  
  2126.    shorthandle     =   "!" string *(";" localcnstrnt)
  2127.  
  2128.  
  2129.  
  2130. Deutsch, et al              Standards Track                    [Page 38]
  2131.  
  2132. RFC 1835          Architecture of the WHOIS++ service        August 1995
  2133.  
  2134.  
  2135.    combinedterm    =   string "=" string *(";" localcnstrnt)
  2136.  
  2137.    globalcnstrnts  =   globalcnstrnt *(";" globalcnstrnt)
  2138.  
  2139.    globalcnstrnt   =   localcnstrnt
  2140.                        / "format" "=" format
  2141.                        / "maxfull" "=" 1*digit
  2142.                        / "maxhits" "=" 1*digit
  2143.                        / opt-globalcnst
  2144.  
  2145.    opt-globalcnst  =   "hold"
  2146.                        / "authenticate" "=" auth-method
  2147.                        / "name" "=" string
  2148.                        / "password" "=" string
  2149.                        / "language" "=" language
  2150.                        / "incharset" "=" characterset
  2151.                        / "ignore" "=" string
  2152.                        / "include" "=" string
  2153.  
  2154.    format          =   "full" / "abridged" / "handle" / "summary"
  2155.                        / "server-to-ask"
  2156.  
  2157.    language        = <The language code defined in RFC1766 [ALVE95]>
  2158.  
  2159.    characterset    =   "us-ascii" / "iso-8859-1" / "iso-8859-2" /
  2160.                        "iso-8859-3" / "iso-8859-4" / "iso-8859-5" /
  2161.                        "iso-8859-6" / "iso-8859-7" / "iso-8859-8" /
  2162.                        "iso-8859-9" / "iso-8859-10" / "utf-8" /
  2163.                        charset-value
  2164.  
  2165.    charset-value   =   1*char
  2166.  
  2167.    localcnstrnt    =   "search" "=" searchvalue /
  2168.                        "case" "=" casevalue
  2169.  
  2170.    searchvalue     =   "exact" / "substring" / "regex" / "fuzzy"
  2171.                        / "lstring"
  2172.  
  2173.    casevalue       =   "ignore" / "consider"
  2174.  
  2175.    auth-method     =   "password"
  2176.  
  2177.    string          =   0*char
  2178.  
  2179.    char            =   "\" specialchar
  2180.                        / <Characters 0-255 (decimal) except specialchar>
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186. Deutsch, et al              Standards Track                    [Page 39]
  2187.  
  2188. RFC 1835          Architecture of the WHOIS++ service        August 1995
  2189.  
  2190.  
  2191.    specialchar     =   " " / <tab> / "=" / "," / ":" / ";" / "\" /
  2192.                        "*" / "." / "(" / ")" / "[" / "]" / "^" /
  2193.                        "$" / "!" / "?"
  2194.  
  2195.    digit           =   "0" / "1" / "2" / "3" / "4" /
  2196.                        "5" / "6" / "7" / "8" / "9"
  2197.  
  2198.    NL              =   <CR LF (decimal 13 10)>
  2199.  
  2200.  
  2201.    NOTE: Significant blanks must be escaped.  The following
  2202.    characters, when significant to the query, may be preceded
  2203.    and/or followed by a single blank:
  2204.  
  2205.      : ; , ( ) = !
  2206.  
  2207. Appendix G - Description of Regular expressions
  2208.  
  2209.    The regular expressions described in this section is the same as used
  2210.    in many other applications and operating systems. It is though very
  2211.    simple and does not include logical operators AND and OR.
  2212.  
  2213.    Searches using regular expressions are always using substring
  2214.    matching except when the regular expression contains the characters
  2215.    '^' or '$'.
  2216.  
  2217.        Character                                Function
  2218.        ---------                                --------
  2219.  
  2220.         <any except those listed in this table> Matches itself
  2221.  
  2222.         .                                       Matches any character
  2223.  
  2224.         a*                                      Matches zero or more 'a'
  2225.  
  2226.         [ab]                                    Matches 'a' or 'b'
  2227.  
  2228.         [a-c]                                   Matches 'a', 'b' or 'c'
  2229.  
  2230.         ^                                       Matches beginning of
  2231.                                                 a token
  2232.  
  2233.         $                                       Matches end of a token
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242. Deutsch, et al              Standards Track                    [Page 40]
  2243.  
  2244. RFC 1835          Architecture of the WHOIS++ service        August 1995
  2245.  
  2246.  
  2247.           Examples
  2248.           ---------
  2249.  
  2250.             String         Matches       Matches not
  2251.             -------        -------       -----------
  2252.              hello          xhelloy         heello
  2253.              h.llo          hello           helio
  2254.              h.*o           hello           helloa
  2255.              h[a-f]llo      hello           hgllo
  2256.              ^he.*          hello           ehello
  2257.              .*lo$          hello           helloo
  2258.  
  2259.  
  2260.  
  2261.  
  2262.  
  2263.  
  2264.  
  2265.  
  2266.  
  2267.  
  2268.  
  2269.  
  2270.  
  2271.  
  2272.  
  2273.  
  2274.  
  2275.  
  2276.  
  2277.  
  2278.  
  2279.  
  2280.  
  2281.  
  2282.  
  2283.  
  2284.  
  2285.  
  2286.  
  2287.  
  2288.  
  2289.  
  2290.  
  2291.  
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298. Deutsch, et al              Standards Track                    [Page 41]
  2299.  
  2300.