home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / rfc / rfc2167 < prev    next >
Text File  |  1997-06-20  |  136KB  |  3,868 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                      S. Williamson
  8. Request for Comments: 2167                                    M. Kosters
  9. Obsoletes: RFC 1714                                            D. Blacka
  10. Category: Informational                                         J. Singh
  11.                                                              K. Zeilstra
  12.                                                  Network Solutions, Inc.
  13.                                                                June 1997
  14.  
  15.                  Referral Whois (RWhois) Protocol V1.5
  16.  
  17. Status of this Memo
  18.  
  19.    This memo provides information for the Internet community.  This memo
  20.    does not specify an Internet standard of any kind.  Distribution of
  21.    this memo is unlimited.
  22.  
  23. Abstract
  24.  
  25.    This memo describes Version 1.5 of the client/server interaction of
  26.    RWhois.  RWhois provides a distributed system for the discovery,
  27.    retrieval, and maintenance of directory information. This system is
  28.    primarily hierarchical by design. It allows for the deterministic
  29.    routing of a query based on hierarchical tags, referring the user
  30.    closer to the maintainer of the information. While RWhois can be
  31.    considered a generic directory services protocol, it distinguishes
  32.    itself from other protocols by providing an integrated, hierarchical
  33.    architecture and query routing mechanism.
  34.  
  35. 1. Introduction
  36.  
  37.    Early in the development of the ARPANET, the SRI-NIC established a
  38.    centralized Whois database that provided host and network information
  39.    about the systems connected to the network and the electronic mail
  40.    (email) addresses of the users on those systems [RFC 954]. The
  41.    ARPANET experiment evolved into a global network, the Internet, with
  42.    countless people and hundreds of thousands of end systems. The sheer
  43.    size and effort needed to maintain a centralized database
  44.    necessitates an alternate, decentralized approach to storing and
  45.    retrieving this information.
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Williamson, et. al.          Informational                      [Page 1]
  59.  
  60. RFC 2167                    RWhois Protocol                    June 1997
  61.  
  62.  
  63.    The original Whois function was to be a central directory of
  64.    resources and people on ARPANET. However, it could not adequately
  65.    meet the needs of the expanded Internet. RWhois extends and enhances
  66.    the Whois concept in a hierarchical and scaleable fashion. In
  67.    accordance with this, RWhois focuses primarily on the distribution of
  68.    "network objects", or the data representing Internet resources or
  69.    people, and uses the inherently hierarchical nature of these network
  70.    objects (domain names, Internet Protocol (IP) networks, email
  71.    addresses) to more accurately discover the requested information.
  72.  
  73.    RWhois synthesizes concepts from other, established Internet
  74.    protocols. The RWhois protocol and architecture derive a great deal
  75.    of structure from the Domain Name System (DNS) [RFC 1034] and borrow
  76.    directory service concepts from other directory service efforts,
  77.    primarily [X.500]. The protocol is also influenced by earlier
  78.    established Internet protocols, such as the Simple Mail Transport
  79.    Protocol (SMTP) [RFC 821].
  80.  
  81.    This RWhois specification defines both a directory access protocol
  82.    and a directory architecture. The directory access protocol
  83.    specifically describes the syntax of the client/server interaction.
  84.    It describes how an RWhois client can search for data on an RWhois
  85.    server, or how the client can modify data on the server. It also
  86.    describes how the server is to interpret input from the client, and
  87.    how the client should interpret the results returned by the server.
  88.    The architecture portion of this document describes the conceptual
  89.    framework behind the RWhois protocol. It details the concepts upon
  90.    which the protocol is based and describes its structural elements.
  91.    The protocol implements the architecture.
  92.  
  93.    This document uses language like SHOULD and SHALL that have special
  94.    meaning as specified in "Key words for use in RFCs to Indicate
  95.    Requirement Levels". [RFC2119]
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. Williamson, et. al.          Informational                      [Page 2]
  115.  
  116. RFC 2167                    RWhois Protocol                    June 1997
  117.  
  118.  
  119. 2. Architecture
  120.  
  121. 2.1 Overview
  122.  
  123.    As a directory service, RWhois is a distributed database, where data
  124.    is split across multiple servers to keep database sizes manageable.
  125.    The architecture portion of this document details the concepts upon
  126.    which the protocol is based and describes its structural elements.
  127.    Specifically, the architecture is concerned with how the data is
  128.    split across the different servers. The basis of this splitting is
  129.    the lexically hierarchical label (or tag), which is a text string
  130.    whose position in a hierarchy can be determined from the structure of
  131.    the string itself.
  132.  
  133.    All data can follow some sort of hierarchy, even if the hierarchy
  134.    seems somewhat arbitrary. For example, person names can be arranged
  135.    into hierarchical groups via geography. If all the people in
  136.    particular towns are grouped into town groups, then all of the town
  137.    groups can be grouped into state (or province) groups, and then all
  138.    of the state groups can be grouped into a country group. Then, a
  139.    particular name would belong in a town group, a state group, and a
  140.    country group. However, just given a name, it would be impossible to
  141.    determine where in the hierarchy it belongs.  Therefore, a person
  142.    name is not lexically hierarchical.
  143.  
  144.    However, there are certain types of data whose position in the
  145.    hierarchy can be determined by deciphering the data itself, for
  146.    example, phone numbers. A phone number is grouped according to
  147.    country code, area code, local exchange, and local extension. By
  148.    looking at a phone number, it is possible to determine to which of
  149.    all these groups the number belongs:  1-303-555-2367 is in country
  150.    code 1, area code 303, local exchange 555, and has a local extension
  151.    of 2367. Therefore, a phone number is lexically hierarchical.
  152.  
  153.    On the Internet, two such types of data are widely used: domain names
  154.    and IP networks. Domain names are organized via a label-dot system,
  155.    reading from a more specific label to a more general label left to
  156.    right; for example, war.west.netsol.com is a part of west.netsol.com,
  157.    which is a part of netsol.com, which is a part of com. IP networks
  158.    are also lexically hierarchical labels using the Classless Inter-
  159.    Domain Routing (CIDR) notation, but their hierarchy is not easily
  160.    determined with simple text manipulation; for example, 198.41.0.0/22
  161.    is a part of 198.41.0.0/16, which is a part of 198.40.0.0/15.
  162.    Instead, an IP network's hierarchy is determined by converting the
  163.    network to binary notation and applying successively shorter bit
  164.    masks.
  165.  
  166.  
  167.  
  168.  
  169.  
  170. Williamson, et. al.          Informational                      [Page 3]
  171.  
  172. RFC 2167                    RWhois Protocol                    June 1997
  173.  
  174.  
  175.    It is important to note that, while very little real data is
  176.    lexically hierarchical in nature, people often create label systems
  177.    (or namespaces) to help manage the data and provide an element of
  178.    uniqueness, for example, Social Security Numbers, ISBNs, or the Dewey
  179.    Decimal System. RWhois leverages lexically hierarchical labels,
  180.    domain names and IP networks, for its data splitting using the
  181.    concepts of authority areas and referrals. An authority area is
  182.    associated with an RWhois server and a lexically hierarchical label,
  183.    which is considered to be its name. An authority area is a piece of
  184.    the distributed database that speaks with authority about its
  185.    assigned part of the hierarchy. All data associated with a particular
  186.    lexically hierarchical tag should be located within that authority
  187.    area's database. Authority areas are further explained in Section
  188.    2.4.
  189.  
  190.    RWhois directs clients toward the appropriate authority area by
  191.    generating referrals. Referrals are pointers to other servers that
  192.    are presumed to be closer to the desired data. The client uses this
  193.    referral to contact the next server and ask the same question. The
  194.    next server may respond with data, an error, or another referral (or
  195.    referrals). By following this chain of referrals, the client will
  196.    eventually reach the server with the appropriate authority area. In
  197.    the RWhois architecture, referrals are generated by identifying a
  198.    lexically hierarchical label and deciphering the label to determine
  199.    the next server. Referrals are further explained in Section 2.5.
  200.  
  201.    When a number of RWhois servers containing authority areas are
  202.    brought on line and informed about each other, they form an RWhois
  203.    tree. The tree has a root authority area, which is the group that
  204.    contains all other groups.  The root authority area must keep
  205.    pointers to the servers and authority areas that form the first level
  206.    of the hierarchy. The authority areas in the first level of the
  207.    hierarchy are then responsible for keeping pointers to the authority
  208.    areas below them and for keeping a pointer to the root.
  209.  
  210. 2.2 Design Philosophy
  211.  
  212.    The design goals for the RWhois protocol are as follows.
  213.  
  214.       * It should be a directory access protocol. The server should be
  215.         able to access and update the data residing on it.
  216.       * It should facilitate query routing. An unresolved query should
  217.         be redirected to a server that is presumed to be closer to the
  218.         desired data.
  219.       * It should enable data replication. The server should be able to
  220.         duplicate its data on another server.
  221.       * The server should be lightweight and delegate more functions to
  222.         the client.
  223.  
  224.  
  225.  
  226. Williamson, et. al.          Informational                      [Page 4]
  227.  
  228. RFC 2167                    RWhois Protocol                    June 1997
  229.  
  230.  
  231.    The concepts used to achieve these design goals are explained in the
  232.    remaining document.
  233.  
  234. 2.3 Schema Model
  235.  
  236.    As a directory service, RWhois uses various database schema to store
  237.    and represent data. Schema, in this document, has two definitions.
  238.    First, it refers to the entire structure of a database, all the
  239.    tables and fields forming a complete database. When schema is used in
  240.    this context, it is called the "database schema". Database schema
  241.    consists of attributes, classes, and objects. Schema may also refer
  242.    to a single piece of the database, a single table with fields. When
  243.    schema is used in this context, it is just called "schema" or it is
  244.    preceded by the name of the particular piece: contact schema or
  245.    domain schema, for example. In this usage, schema is equivalent to
  246.    "class", defined below.
  247.  
  248.    There is no standard database schema in the RWhois architecture. Each
  249.    authority area is presumed to be able to define its own local schema.
  250.    However, an authority area that is part of a larger RWhois tree is
  251.    expected to have some part of its schema pertain to the lexically
  252.    hierarchical label upon which the RWhois tree is based. An authority
  253.    area schema may not change throughout much of an RWhois tree.
  254.  
  255. 2.3.1 Attributes
  256.  
  257.    An attribute is a named field and is the smallest typed unit in the
  258.    database schema. It is equivalent to a relational database's field.
  259.    An attribute is not considered to be data by itself; it is simply
  260.    used to give data a type. When a piece of data has been typed by an
  261.    attribute, it is typically referred to as a value and is represented
  262.    as an attribute-value pair. The RWhois syntax for the attribute-value
  263.    pair is to separate them with a colon, for example:
  264.  
  265.    First-Name:Bill
  266.  
  267.    Attributes have a number of properties, some mandated by the RWhois
  268.    protocol and some that are implementation dependent. These properties
  269.    are usually a reflection of the database system used by the server.
  270.    The following is a list of the protocol-mandated properties and their
  271.    descriptions.
  272.  
  273.     Attribute    This is the name of the attribute.
  274.  
  275.     Description  This is a natural language description of the
  276.                  attribute.
  277.  
  278.  
  279.  
  280.  
  281.  
  282. Williamson, et. al.          Informational                      [Page 5]
  283.  
  284. RFC 2167                    RWhois Protocol                    June 1997
  285.  
  286.  
  287.     Type         This is a parameter that broadly indicates the use
  288.                  of the attribute to the protocol. There are three
  289.                  standard types:  TEXT, ID, and SEE-ALSO. The default is
  290.                  TEXT, which indicates that the value is a text string.
  291.                  ID indicates that the attribute contains the ID of
  292.                  another RWhois object. This type of attribute is used
  293.                  for database normalization.  SEE-ALSO indicates that
  294.                  the attribute contains a pointer (a Uniform Resource
  295.                  Identifier (URI)) to some other kind of external data;
  296.                  for example, a World Wide Web page or FTP site.
  297.  
  298.     Format       This is an interpretable string that describes the
  299.                  acceptance format of the value. The server (and
  300.                  optionally the client) should match the value to the
  301.                  format string to determine if the value is acceptable.
  302.                  The format of this property is a keyword indicating the
  303.                  syntax of the format string, followed by a colon,
  304.                  followed by the format string itself. Currently, the
  305.                  only keyword recognized is "re" for POSIX.2 extended
  306.                  regular expressions.
  307.  
  308.     Indexed      This is a true or false flag indicating that this
  309.                  attribute should be indexed (and therefore able to be
  310.                  searched).
  311.  
  312.     Required     This is a true or false flag indicating that this
  313.                  attribute must have a value in an instance of the
  314.                  class.
  315.  
  316.     Multi-Line   This is a true or false flag indicating that this
  317.                  attribute may have multiple instances in a class, but
  318.                  all of the instances are to be considered as multiple
  319.                  lines of the same attribute instance. This allows
  320.                  normal line terminators to terminate values.
  321.  
  322.     Repeatable   This is a true or false flag indicating that there may
  323.                  be multiple instances of this attribute in a class and
  324.                  each instance is to be interpreted as a separate
  325.                  instance (in contrast to Multi-Line). This flag is
  326.                  mutually exclusive with Multi-Line: if Multi-Line is
  327.                  true, then Repeatable must be false and vice versa.
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338. Williamson, et. al.          Informational                      [Page 6]
  339.  
  340. RFC 2167                    RWhois Protocol                    June 1997
  341.  
  342.  
  343.     Primary      This is a true or false flag that indicates that this
  344.                  attribute is a primary key. If more than one attribute
  345.                  in a class is marked as primary, then these attributes
  346.                  together form a single primary key. The primary key is
  347.                  intended to be used to force uniqueness among class
  348.                  instances. Therefore, there can be only one instance of
  349.                  a primary key in a database. The Primary flag implies
  350.                  that the attribute is also required.
  351.  
  352.     Hierarchical This is a true or false flag that indicates that this
  353.                  attribute is lexically hierarchical.
  354.  
  355.     Private      This is a true or false flag that indicates whether or
  356.                  not this attribute is private (that is, publicly not
  357.                  viewable).  It defaults to false. If it is true, then
  358.                  only the clients that satisfy the
  359.                  authentication/encryption requirements of a guardian
  360.                  (described below) are able to view the attribute-value
  361.                  pair.
  362.  
  363. 2.3.2 Class
  364.  
  365.    A class is a collection of attributes; it is a structure, not data.
  366.    The concept is equivalent to that of a relational database table. It
  367.    is also equivalent to the second definition of schema, above.
  368.  
  369.    A class also has some properties that are sometimes referred to as
  370.    its "meta" information. These properties are listed below.
  371.  
  372.     Version     This is a time/date stamp that is used to quickly detect
  373.                 when a class definition has been changed.
  374.  
  375.     Description This is a natural language description of the class.
  376.  
  377. 2.3.3 Object
  378.  
  379.    An object is an instance of a class. It is data with a type of
  380.    <class>.
  381.  
  382. 2.3.4 Base Class
  383.  
  384.    While RWhois does not have or advocate using a specific, standardized
  385.    schema, it does impose a few requirements. It requires that all
  386.    defined classes inherit attributes from a particular base class (or
  387.    base schema).  The RWhois specification does not require the actual
  388.    implementation of inheritance. Instead, all classes must include the
  389.    attributes defined in the base class.
  390.  
  391.  
  392.  
  393.  
  394. Williamson, et. al.          Informational                      [Page 7]
  395.  
  396. RFC 2167                    RWhois Protocol                    June 1997
  397.  
  398.  
  399.    The base class has the following attributes.
  400.  
  401.     Class-Name    This attribute contains the name of the class to which
  402.                   the object belongs. It is the type of the object
  403.                   itself. It is of type TEXT and is required.
  404.  
  405.     Auth-Area     This attribute contains the name of the authority area
  406.                   to which the object belongs. It, along with Class-
  407.                   Name, definitively defines the type of the object. It
  408.                   is of type TEXT and is required.
  409.  
  410.     ID            This attribute is a universal identifier for the
  411.                   object. It is formed by choosing a string that is
  412.                   unique within an authority area and appending the
  413.                   authority area to it, separating the local string from
  414.                   the authority area name with a period. The only
  415.                   restrictions on the local string are that it must be
  416.                   unique within the authority area and not contain the
  417.                   period character. This attribute is hierarchical in
  418.                   nature. It is always generated by the server (for
  419.                   example, during a register operation). It is of type
  420.                   TEXT and is required.
  421.  
  422.     Updated       This attribute is a time/date stamp that indicates the
  423.                   time of last modification of the object. It is both
  424.                   informational and a form of record locking. It
  425.                   prevents two clients from modifying the same object at
  426.                   the same time. It is of type TEXT and is required.
  427.  
  428.     Guardian      This attribute is a link to a guardian object
  429.                   (described below). Its value is the ID of a guardian
  430.                   object. It is of type ID and is optional. It is
  431.                   repeatable, since an object may have multiple
  432.                   guardians.
  433.  
  434.     Private      This attribute is a true or false flag that indicates
  435.                   whether or not an object is private (that is, publicly
  436.                   not viewable). It defaults to false. If it is true,
  437.                   then only the clients that satisfy the
  438.                   authentication/encryption requirements of one of the
  439.                   object's guardians are able to view the object. If the
  440.                   object is publicly viewable, then the Private
  441.                   attribute property of each of its attributes still
  442.                   applies.
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Williamson, et. al.          Informational                      [Page 8]
  451.  
  452. RFC 2167                    RWhois Protocol                    June 1997
  453.  
  454.  
  455.     TTL           This attribute is the "time-to-live" of a given
  456.                   object. It is included only if an object has a
  457.                   different time-to-live than the default given in the
  458.                   Start of Authority information. Its value is specified
  459.                   in seconds. It is of type TEXT and is optional.
  460.  
  461.    The RWhois specification defines two standard classes that should be
  462.    included in all implementations: the referral and guardian classes.
  463.  
  464. 2.3.5 Referral Class
  465.  
  466.    The referral class is defined to hold referral information (typically
  467.    for link referrals). It consists of attributes defined as part of the
  468.    base class, the protocol-specific attributes described below, and any
  469.    installation-specific attributes.
  470.  
  471.     Referred-Auth-Area This attribute contains the name of the authority
  472.                        area to which the referral points. It is used as
  473.                        a search key during the query routing. It is of
  474.                        type TEXT and is required. It is repeatable,
  475.                        since referrals can point to servers hosting more
  476.                        than one authority area.
  477.  
  478.     Referral           This attribute contains the referral itself. It
  479.                        is an RWhois URL. It is of type TEXT and is
  480.                        required. It is repeatable, since more than one
  481.                        server can host a Referred-Auth-Area.
  482.  
  483. 2.3.6 Guardian Class
  484.  
  485.    The guardian class is defined to hold security information. The
  486.    fundamental concept behind the guardian class is that an object (or
  487.    another structure) is "guarded" by containing a pointer to a guardian
  488.    object [Guardian]. To modify, delete, or possibly view the guarded
  489.    object, the authentication (or encryption, or both) scheme must be
  490.    satisfied. Guardians are intended to not have rank: if an object is
  491.    guarded by more than one guardian object, satisfying any one of those
  492.    guardians is sufficient. A guardian object that does not have any
  493.    Guardian attribute linking it to other guardians guards itself. That
  494.    is, the authentication scheme in the guardian object itself must be
  495.    satisfied to modify, delete, or possibly view it.
  496.  
  497.    Guardian objects are typically linked to actual database objects with
  498.    the Guardian attribute found in the base class. However, a guardian
  499.    may also be linked to an entire authority area, in which case the
  500.    guardian becomes implicitly linked to all of the objects contained
  501.    within the authority area.
  502.  
  503.  
  504.  
  505.  
  506. Williamson, et. al.          Informational                      [Page 9]
  507.  
  508. RFC 2167                    RWhois Protocol                    June 1997
  509.  
  510.  
  511.    The guardian class consists of the base class, the protocol-specific
  512.    attributes described below, and any installation-specific attributes.
  513.  
  514.     Guard-Scheme This attribute contains a keyword indicating the
  515.                  authentication methodology. Its value must be
  516.                  understood by both the client and server, and its value
  517.                  dictates the contents of the Guard-Info attribute. It
  518.                  is of type TEXT and is required.
  519.  
  520.     Guard-Info   This attribute contains that data that is used by the
  521.                  Guard-Scheme to verify the authentication. Its actual
  522.                  format is dictated by the Guard-Scheme, for example, it
  523.                  could contain a password or Pretty Good Privacy (PGP)
  524.                  public key id [RFC 1991]. For security reasons, it
  525.                  should not be displayed, and its Private attribute
  526.                  property should be set to true. It is of type TEXT and
  527.                  is required.
  528.  
  529. 2.4 Authority Areas
  530.  
  531.    The concept of authority areas is pivotal to the RWhois architecture.
  532.    When an RWhois tree is created for a particular lexically
  533.    hierarchical namespace, the different pieces of the hierarchy are
  534.    mapped to authority areas. The most important concept behind an
  535.    authority area is the ability for a portion of the RWhois tree to
  536.    definitively control that portion of the hierarchy. This means that
  537.    an authority area is able to state whether or not a hierarchical tag
  538.    is in the whole RWhois tree. It does this either by returning the
  539.    object containing this tag, returning a referral to a sub-authority
  540.    area, or returning a response indicating that no objects were found.
  541.  
  542.    This structure enables efficient routing of queries based on the
  543.    hierarchical label to the piece of the hierarchy responsible for it.
  544.    For example, in the domain name namespace as served by RWhois, the
  545.    root of the tree would be an authority area named ".", which would
  546.    delegate a "us" sub-authority area, which would delegate "va", "co",
  547.    "md", and "ca" authority areas, and so forth. When the server with
  548.    the "va.us" authority area is asked about "loudoun.va.us", it will be
  549.    able to authoritatively state that either no "loudoun.va.us" exists
  550.    or it will provide an object for or a referral to "loudoun.va.us".
  551.    Further, if the server is asked about "howard.md.us", it cannot
  552.    answer authoritatively, so it must provide a referral to its
  553.    hierarchical parent ("us" or the root).
  554.  
  555.    This use of authority area strongly indicates where data should be
  556.    stored within an RWhois tree. Because RWhois uses a specific query
  557.    routing model, data needs to be placed under the proper authority
  558.    area. It is certainly possible to place a piece of data under the
  559.  
  560.  
  561.  
  562. Williamson, et. al.          Informational                     [Page 10]
  563.  
  564. RFC 2167                    RWhois Protocol                    June 1997
  565.  
  566.  
  567.    wrong authority area, for example, putting an object for
  568.    "howard.md.us" under the "va.us" authority area. In such cases, the
  569.    data is considered to be misplaced and unable to be found within the
  570.    RWhois tree. However, while data should be placed under the lowest
  571.    (most specific) authority area, it is also possible that it could be
  572.    placed in a higher (least specific) authority area, for example,
  573.    putting an object for "loudoun.va.us" under the "us" authority. This
  574.    may be acceptable since, in most cases, the data would be able to be
  575.    found.
  576.  
  577.    In addition to controlling a part of an RWhois hierarchy, an
  578.    authority area is considered to be autonomous. Each authority area is
  579.    treated as a separate database by the protocol. However, it is
  580.    recommended that an authority area share some core schema with the
  581.    rest of the RWhois tree for interoperability reasons. Each authority
  582.    area, however, is not bound by the database schema of its
  583.    hierarchical parent or by any of its sub-authority areas.
  584.  
  585. 2.5 Query Routing
  586.  
  587.    RWhois is not only a directory access protocol but it can also route
  588.    queries. Routing a query involves redirecting the query to another
  589.    server that is presumed to be closer to the desired data. To route a
  590.    query, the server first determines the location of the next server.
  591.    It then either forwards the query to that server and returns the
  592.    result to the client or returns the location of that server to the
  593.    client. The location of the server must contain its host name (or IP
  594.    address), port number, and authority area.
  595.  
  596.    The location of the server to which a query is routed is called a
  597.    referral.  There are two types of referrals: punt and link referrals.
  598.    A punt referral is a pointer to a server that is further up an RWhois
  599.    tree, and a link referral is a pointer to a server that is further
  600.    down the tree. For example, in Figure 1, when the server for the
  601.    "va.us" authority area routes a query up to the server for the "us"
  602.    authority area, it generates a punt referral. Alternatively, when it
  603.    routes a query down to the server for the "loudon.va.us" authority
  604.    area, it generates a link referral.
  605.  
  606.    Query routing depends on whether or not the search value in a query
  607.    is lexically hierarchical. If the search value is hierarchical, the
  608.    server can generate punt or link referrals using the association of
  609.    authority areas with lexically hierarchical labels. Otherwise, the
  610.    server may send the query to a special index server that gathers the
  611.    indexing information for both hierarchical and non-hierarchical data
  612.    from the directory servers and returns referrals to these servers
  613.    [CIP]. If the server receives one or more referrals from the index
  614.    server, it should return them to the client.
  615.  
  616.  
  617.  
  618. Williamson, et. al.          Informational                     [Page 11]
  619.  
  620. RFC 2167                    RWhois Protocol                    June 1997
  621.  
  622.  
  623.    It is important to note that the server may route a query whether it
  624.    could resolve the query or not. Even if a query has been resolved
  625.    locally, the server may also return referrals to the client by
  626.    sending the query to the index server. For example, if the server for
  627.    the "com" authority area receives the "domain Org-Name=IBM" query, it
  628.    may return all the domain objects for IBM within the "com" authority
  629.    area. In addition, it may also return referrals to the server for the
  630.    "nl" authority area if that server contains domain objects for IBM in
  631.    the Netherlands and has fed the corresponding indexing information to
  632.    the index server. This way the client can get back information for
  633.    both "ibm.com" and "ibm.nl" domains.
  634.  
  635. 2.5.1 Query Routing Rules
  636.  
  637.    An RWhois server routes a query based on certain rules. The objective
  638.    is to determine the location of a server to which to route the query.
  639.    A query may contain one or more query terms. The query routing rules
  640.    are applied on each query term until a referral is found. The rules
  641.    are listed below.
  642.  
  643.       * Is the search value in the query term hierarchical? If not, go
  644.         to the next query term.
  645.       * Parse the hierarchical portion of the search value. Is it is
  646.         within one of the authority areas? If not, go to the next query
  647.         term.
  648.       * Does the found authority area have any referral objects
  649.         (instances of the referral class)? If not, return the "230 No
  650.         objects found" error to the client.
  651.       * Is the hierarchical portion of the search value within the
  652.         Referred-Auth-Area attribute of one of the referral objects? If
  653.         it is, return the value of the Referral attribute of the found
  654.         referral object as a link referral to the client.
  655.       * Are the search values of some of the query terms hierarchical
  656.         but not within any of the authority areas? If they are, return a
  657.         punt referral to the client.
  658.       * Are the search values of all the query terms non-hierarchical?
  659.         If they are, send the query to a special index server that
  660.         gathers the indexing information for both hierarchical and non-
  661.         hierarchical data from the directory servers and returns
  662.         referrals to these servers. If the server receives one or more
  663.         referrals from the index server, return them to the client.
  664.  
  665.    Note that there can be more than one referral returned to the client.
  666.    These referrals may point to servers serving different authority
  667.    areas. The client may follow them in any order.
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Williamson, et. al.          Informational                     [Page 12]
  675.  
  676. RFC 2167                    RWhois Protocol                    June 1997
  677.  
  678.  
  679.    The pseudo code for the above rules is:
  680.  
  681.    for each query term in the query
  682.     if the search value in the query term is hierarchical
  683.      if the search value is within one of the authority areas
  684.        if the search value is within one of the referred authority areas
  685.         the server sends link referral(s)
  686.        else
  687.         the server sends a "230 No objects found" error
  688.        endif
  689.      endif
  690.     endif
  691.    endfor
  692.  
  693.    if the search values of some of the query terms are hierarchical but
  694.      not within any of the authority areas
  695.     the server sends Punt referral(s)
  696.    endif
  697.  
  698.    if the search values of all the query terms are non-hierarchical
  699.     the server sends Referral(s) from an index server
  700.    endif
  701.  
  702. 2.6 Data Replication
  703.  
  704.    An RWhois server can replicate (duplicate) data from another RWhois
  705.    server on a per-authority area basis. Data replication makes the
  706.    RWhois service more reliable. Further, it increases throughput by
  707.    distributing queries to more than one server.
  708.  
  709.    There can be two types of servers serving an authority area: a master
  710.    server and a slave server. A master server is where data is
  711.    registered for an authority area. It answers authoritatively to
  712.    queries in that authority area. There must be one and only one master
  713.    server for an authority area. A master server is also called a
  714.    primary server.
  715.  
  716.    A slave server is where data is replicated from the master server for
  717.    an authority area. It also answers authoritatively to queries in that
  718.    authority area. There may be one or more slave servers for an
  719.    authority area. A slave server is also called a secondary server.
  720.    Note that a slave server must not register data for an authority
  721.    area.
  722.  
  723.    It is recommended that the master and slave servers for an authority
  724.    area be geographically separate. Therefore, network unreachability at
  725.    one site will not completely shut down the RWhois service for that
  726.    authority area.
  727.  
  728.  
  729.  
  730. Williamson, et. al.          Informational                     [Page 13]
  731.  
  732. RFC 2167                    RWhois Protocol                    June 1997
  733.  
  734.  
  735. 2.6.1 Data to Replicate
  736.  
  737.    In RWhois, data is replicated on a per-authority area basis. The
  738.    smallest type of data a slave server can replicate is an attribute of
  739.    a class.  Therefore, a slave server can replicate data for all the
  740.    classes, some classes, or some attributes of some classes.
  741.  
  742.    The amount of data a slave server can replicate each time is either
  743.    all of the data or the data that has changed since the last
  744.    replication. The process of replicating all of the data is called
  745.    complete replication. The process of replicating the data that has
  746.    changed since the last replication is called incremental replication.
  747.  
  748. 2.6.2 Start Of Authority Variables
  749.  
  750.    Each authority area has some administrative variables, defined at the
  751.    master server, to control data replication. These variables are
  752.    called the Start Of Authority (SOA) variables. They are listed below.
  753.  
  754.     Serial-Number     This is the serial number of the data in an
  755.                       authority area. The master server should update
  756.                       this variable whenever the data in the authority
  757.                       area is changed. Its value is a time/date stamp.
  758.  
  759.     Refresh-Interval  This is the time interval before a slave server
  760.                       checks for complete replication. Its value is
  761.                       specified in seconds.
  762.  
  763.     Increment-IntervalThis is the time interval before a slave server
  764.                       checks for incremental replication. Its value is
  765.                       specified in seconds.
  766.  
  767.     Retry-Interval    This is the time interval before a slave server
  768.                       tries again to connect to a master server that
  769.                       appears to be out-of-service. Its value is
  770.                       specified in seconds.
  771.  
  772.     Time-To-Live      This is the default time to live for the data in
  773.                       an authority area at a slave server. The slave
  774.                       server should not answer authoritatively to
  775.                       queries for such stale data. Its value is
  776.                       specified in seconds.
  777.  
  778.     Admin-Contact     This is the email address of an individual or a
  779.                       role account responsible for the data integrity in
  780.                       an authority area at the master server.
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Williamson, et. al.          Informational                     [Page 14]
  787.  
  788. RFC 2167                    RWhois Protocol                    June 1997
  789.  
  790.  
  791.     Tech-Contact      This is the email address of an individual or a
  792.                       role account responsible for the operation of the
  793.                       master server for an authority area.
  794.  
  795.     Hostmaster        This is the email address of an individual or a
  796.                       role account to whom email messages to update the
  797.                       data in an authority area at the master server are
  798.                       sent.
  799.  
  800.     Primary-Server    This is the location of the master server for an
  801.                       authority area. Its value must contain both the
  802.                       host name (or IP address) and port number of the
  803.                       master server.
  804.  
  805. 3. Protocol
  806.  
  807. 3.1 Overview
  808.  
  809.    The above sections describe the directory service architecture based
  810.    on the RWhois protocol. The remaining sections describe the syntax of
  811.    the protocol; the sequence and syntax of the information exchanged
  812.    between a server and a client. There are five types of information
  813.    that may be exchanged during a client/server session: directive,
  814.    response, query, result, and info.
  815.  
  816. 3.1.1 Directive
  817.  
  818.    A directive is a command that a client sends to a server to set a
  819.    control parameter for the session, get the meta-information (class
  820.    definitions and SOA information) about an authority area, or get the
  821.    data in an authority area. The first character of a directive must be
  822.    a "-". The server must support the "-rwhois" directive; all other
  823.    directives are optional. The server must indicate in the banner which
  824.    directives are implemented (see Section 3.1.9).
  825.  
  826. 3.1.2 Response
  827.  
  828.    A response is the information that a server returns to a client for a
  829.    directive. It is comprised of one or more lines, and the last line
  830.    always indicates the success or failure of the directive. The first
  831.    character of each response line must be a "%". If a server runs a
  832.    directive successfully, the last response line must be "%ok".
  833.    Otherwise, it must be "%error <error-code> <error-text>". A line with
  834.    the string "%ok" or "%error" in the first position must occur only
  835.    once in a server response and must always be the last line. The
  836.    server may send the "%info" response for special messages.
  837.  
  838.  
  839.  
  840.  
  841.  
  842. Williamson, et. al.          Informational                     [Page 15]
  843.  
  844. RFC 2167                    RWhois Protocol                    June 1997
  845.  
  846.  
  847.    A client must understand the "%ok", "%error", and "%info" responses.
  848.    The client must also understand directive specific responses, if it
  849.    uses the related directives to communicate with the server. For
  850.    example, if the client sends the "-schema" directive to the server,
  851.    the client must understand the "%schema" response.
  852.  
  853. 3.1.3 Query
  854.  
  855.    A query is a command that a client sends to a server to access the
  856.    data in an authority area. The first character of a query must not be
  857.    a "-", since the server checks the first character of each command
  858.    from a client to determine whether it is a directive or a query.
  859.  
  860. 3.1.4 Result
  861.  
  862.    A result is the information that a server returns to a client for a
  863.    query.  It can be either the accessed data or referrals to other
  864.    servers. It is comprised of one or more lines, and the last line
  865.    always indicates the success or failure of the query. If a server
  866.    returns either data or referrals for a query, the last result line
  867.    must be "%ok". Otherwise, it must be "%error <error-code> <error-
  868.    text>".
  869.  
  870. 3.1.5 Info
  871.  
  872.    An info message contains miscellaneous information that a server
  873.    sends to a client. The server may use it to send special messages,
  874.    for example a "message of the day" (MOTD), to the client. The first
  875.    info line must be "%info on", and the last info line must be "%info
  876.    off".
  877.  
  878. 3.1.6 Client/Server Session
  879.  
  880.    A typical RWhois client/server session has the following sequence of
  881.    messages.
  882.  
  883.       * The client connects to the server.
  884.       * The server returns a banner identifying its protocol versions
  885.         and capabilities.
  886.       * The client sends one or more directives to the server.
  887.       * The server returns the response to each directive.
  888.       * The client finally sends a query to the server.
  889.       * The server returns the query results.
  890.       * The server closes the connection, unless the client has directed
  891.         it not to close the connection.
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898. Williamson, et. al.          Informational                     [Page 16]
  899.  
  900. RFC 2167                    RWhois Protocol                    June 1997
  901.  
  902.  
  903. 3.1.7 Examples
  904.  
  905.    This section gives some common examples of the client/server
  906.    interaction.  The notation in the examples uses a prefix to indicate
  907.    from where the information comes. A "C" indicates that the client
  908.    sends the data to the server. An "S" indicates that the server sends
  909.    the data to the client. The line is a comment when "#" is used. The
  910.    space after the prefix is not part of the data.
  911.  
  912.    The following example illustrates a successful query.
  913.  
  914.    # The client connects to the server.
  915.    # The server returns a banner identifying its protocol versions and
  916.    # capabilities.
  917.    S %rwhois V-1.5:00ffff:00 master.rwhois.net (Network Solutions V-1.5)
  918.    # The client sends a directive to limit the number of search hits
  919.    # to 20.
  920.    C -limit 20
  921.    # The server returns a successful response.
  922.    S %ok
  923.    # The client sends a query to search for rwhois.net domain.
  924.    C domain rwhois.net
  925.    # The server returns the data for rwhois.net domain.
  926.    S domain:ID:dom-1.rwhois.net
  927.    S domain:Auth-Area:rwhois.net
  928.    S domain:Class-Name:domain
  929.    S domain:Updated:19970107201111000
  930.    S domain:Domain:rwhois.net
  931.    S domain:Server;I:hst-1.rwhois.net
  932.    S domain:Server;I:hst-2.rwhois.net
  933.    S
  934.    S %ok
  935.    # The server closes the connection.
  936.  
  937.    The following example illustrates the link and punt referrals.
  938.  
  939.    # The client connects to the server.
  940.    # The server returns a banner identifying its protocol versions and
  941.    # capabilities.
  942.    S %rwhois V-1.5:00ffff:00 master.rwhois.net (Network Solutions V-1.5)
  943.    # The client sends a directive to hold the connection until it sends
  944.    # a directive to close the connection.
  945.    C -holdconnect on
  946.    # The server returns a successful response.
  947.    S %ok
  948.    # The client sends a query to search for a.b.rwhois.net domain.
  949.    C domain a.b.rwhois.net
  950.    # The server returns a link referral to a server serving the
  951.  
  952.  
  953.  
  954. Williamson, et. al.          Informational                     [Page 17]
  955.  
  956. RFC 2167                    RWhois Protocol                    June 1997
  957.  
  958.  
  959.    # b.rwhois.net authority area.
  960.    S %referral rwhois://master.b.rwhois.net:4321/auth-area=b.rwhois.net
  961.    S %ok
  962.    # The client sends a query to search for internic.net domain.
  963.    C domain internic.net
  964.    # The server returns a punt referral to a server serving the root
  965.    # authority area.
  966.    S %referral rwhois://rs.internic.net:4321/auth-area=.
  967.    S %ok
  968.    # The client sends a directive to close the connection.
  969.    C -quit
  970.    S %ok
  971.    # The server closes the connection.
  972.  
  973.    The following example illustrates a query error.
  974.  
  975.    # The client connects to the server.
  976.    # The server returns a banner identifying its protocol versions and
  977.    # capabilities.
  978.    S %rwhois V-1.5:00ffff:00 master.rwhois.net (Network Solutions V-1.5)
  979.    # The client sends a query to search for c.rwhois.net domain.
  980.    C domain c.rwhois.net
  981.    # The server returns an error, since neither data nor referrals for
  982.    # c.rwhois.net domain are found within the rwhois.net authority area.
  983.    S %error 230 No objects found
  984.    # The server closes the connection.
  985.  
  986. 3.1.8 Notation
  987.  
  988.    The following sections use the Augmented Backus-Naur Form (ABNF)
  989.    notation to describe the syntax of the protocol. For further
  990.    information, see Section 2 of [RFC822]. The notation in the examples
  991.    uses a prefix to indicate from where the information comes. A "C"
  992.    indicates that the client sends the data to the server. An "S"
  993.    indicates that the server sends the data to the client. The line is a
  994.    comment when "#" is used. The space after the prefix is not part of
  995.    the data.
  996.  
  997. 3.1.9 General ABNF definitions
  998.  
  999.    Lexical Tokens
  1000.  
  1001.    alpha = "a".."z" / "A".."Z"
  1002.    digit = "0".."9"
  1003.    hex-digit = digit / "a".."f" / "A".. "F"
  1004.    id-char = alpha / digit / "_" / "-"
  1005.    any-char = <ASCII 1..255,
  1006.               except LF (linefeed) and CR (carriage return)>
  1007.  
  1008.  
  1009.  
  1010. Williamson, et. al.          Informational                     [Page 18]
  1011.  
  1012. RFC 2167                    RWhois Protocol                    June 1997
  1013.  
  1014.  
  1015.    dns-char = alpha / digit / "-"
  1016.    email-char = <see [RFC 822]>
  1017.    space = " "
  1018.    tab = <ASCII TAB (tab)>
  1019.    lf = <ASCII LF (linefeed)>
  1020.    cr = <ASCII CR (carriage return)>
  1021.    crlf = cr lf
  1022.  
  1023.    Grammar
  1024.  
  1025.    year = 4digit
  1026.    month = 2digit
  1027.    day = 2digit
  1028.    hour = 2digit
  1029.    minute = 2digit
  1030.    second = 2digit
  1031.    milli-second = 3digit
  1032.    host-name = dns-char *(dns-char / ".")
  1033.    ip-address = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
  1034.    email = 1*email-char "@" host-name
  1035.    authority-area = (dns-char / ".") *(dns-char / "." / "/")
  1036.    object-id = 1*id-char "." authority-area
  1037.    host-port = (host-name / ip-address) ":" 1*5digit
  1038.    class-name = 1*id-char
  1039.    attribute-name = 1*id-char
  1040.    attribute-value = 1*any-char
  1041.    time-stamp = year month day hour minute second milli-second
  1042.    on-off = "on" / "off"
  1043.  
  1044.    Note that the time-stamp must be in the Greenwich Mean Time (GMT)
  1045.    time zone.  Also note that since in the above any-char is 1..255
  1046.    ASCII that the RWhois protocol is an 8 bit protocol.
  1047.  
  1048.    Response
  1049.  
  1050.    The general response for every directive and query is either "%ok" or
  1051.    "%error". In addition, a "%info" response may be sent.
  1052.  
  1053.    response = ok-response crlf / error-response crlf / info-response
  1054.    ok-response = "%ok"
  1055.    error-response = "%error" space error-code space error-text
  1056.    error-code = 3digit
  1057.    error-text = 1*any-char
  1058.    info-response = "%info" space "on" crlf *(*any-char crlf) "%info"
  1059.            space "off" crlf
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066. Williamson, et. al.          Informational                     [Page 19]
  1067.  
  1068. RFC 2167                    RWhois Protocol                    June 1997
  1069.  
  1070.  
  1071.    Banner
  1072.  
  1073.    The server must send a banner to the client when the connection is
  1074.    opened.  The banner contains the version(s) of the protocol the
  1075.    server supports and a capability ID of encoded bit flags that
  1076.    indicates which directives are implemented. If the server supports
  1077.    more than one version of the protocol, the lowest-numbered version
  1078.    must be specified first. The bits in extra-id are reserved for future
  1079.    use. The end of the banner should contain a free-form string
  1080.    indicating the name of the server implementation. A server must
  1081.    support at least one version of the protocol, and may accept more
  1082.    versions for compatibility reasons.
  1083.  
  1084.    rwhois-banner = "%rwhois" space version-list space host-name
  1085.          [space implementation] crlf
  1086.    version-list = version *("," version)
  1087.    version = version-number [":" capability-id]
  1088.            / "V-1.5" ":" capability-id
  1089.    version-number = "V-" 1*digit "." 1*digit
  1090.    capability-id = response-id ":" extra-id
  1091.    response-id = 6hex-digit
  1092.    extra-id = 2hex-digit
  1093.    implementation = 1*any-char
  1094.  
  1095.    Protocol
  1096.  
  1097.    The entire RWhois protocol can be defined as a series of directives,
  1098.    responses, queries, and results.
  1099.  
  1100.    rwhois-protocol = client-sends / server-returns
  1101.    client-sends = *(directives / rwhois-query)
  1102.    server-returns = *(responses / rwhois-query-result)
  1103.  
  1104. 3.2 Required Directives
  1105.  
  1106.    The server must implement the following directives.
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122. Williamson, et. al.          Informational                     [Page 20]
  1123.  
  1124. RFC 2167                    RWhois Protocol                    June 1997
  1125.  
  1126.  
  1127. 3.2.1 rwhois
  1128.  
  1129.    Description
  1130.  
  1131.    The "-rwhois" directive may be issued by the client at the start of
  1132.    every session . It tells the server which version of the protocol the
  1133.    client can handle. The server must respond with a banner containing
  1134.    the protocol version and directives it implements. This banner is the
  1135.    same banner that is sent by the server when the connection is opened,
  1136.    except that the server must indicate only one version number. The
  1137.    banner issued when opening a connection may contain more than one
  1138.    version number. The directive flags are encoded into three octets,
  1139.    which are described in Appendix D.
  1140.  
  1141.    ABNF
  1142.  
  1143.    rwhois-dir = "-rwhois" space version-number [space implementation]
  1144.                 crlf
  1145.    rwhois-response = "%rwhois" space version space host-name
  1146.            [space implementation] crlf
  1147.  
  1148.    Errors
  1149.  
  1150.    300 Not compatible with version
  1151.    338 Invalid directive syntax
  1152.  
  1153.    Examples
  1154.  
  1155.    # When a connection is opened, the server issues the banner.
  1156.    S %rwhois V-1.0,V-1.5:00ffff:00 rs.internic.net (NSI Server 1.5.4)
  1157.    # The client sends the rwhois directive.
  1158.    C -rwhois V-1.5 NSI Client 1.2.3
  1159.    S %rwhois V-1.5:00ffff:00 rs.internic.net (NSI Server 1.5.4)
  1160.    S %ok
  1161.  
  1162. 3.3 Optional Directives
  1163.  
  1164.    The server should implement the following directives.
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178. Williamson, et. al.          Informational                     [Page 21]
  1179.  
  1180. RFC 2167                    RWhois Protocol                    June 1997
  1181.  
  1182.  
  1183. 3.3.1 class
  1184.  
  1185.    Description
  1186.  
  1187.    The "-class" directive can be used by the client to get the meta-
  1188.    information for one or more classes in an authority area. The
  1189.    response must contain the description and version number of each
  1190.    specified class and may be expanded in the future with additional
  1191.    attributes. When no class name is given, the server must return the
  1192.    meta-information for all the classes in the authority area. Every
  1193.    class record must end with an empty "%class" line.
  1194.  
  1195.    ABNF
  1196.  
  1197.    class-dir = "-class" space authority-area *(space class-name) crlf
  1198.    class-response = *class-record response
  1199.    class-record = *class-line "%class" crlf
  1200.    class-line = "%class" space class-name ":" "description" ":"
  1201.                 1*any-char crlf
  1202.       / "%class" space class-name ":" "version" ":" time-stamp crlf
  1203.       / "%class" space class-name ":" meta-field ":" meta-value crlf
  1204.    meta-field = 1*id-char
  1205.    meta-value = 1*any-char
  1206.  
  1207.    The following fields are required.
  1208.  
  1209.     meta-field   meta-value  Description
  1210.  
  1211.     description  1*any-char  Class description.
  1212.                            Time/date stamp indicating version of class,
  1213.  
  1214.     version      time-stamp  must be updated after class definition is
  1215.                              changed.
  1216.  
  1217.    Errors
  1218.  
  1219.    338 Invalid directive syntax
  1220.    340 Invalid authority area
  1221.    341 Invalid class
  1222.    400 Directive not available
  1223.    401 Not authorized for directive
  1224.  
  1225.    Examples
  1226.  
  1227.    C -class rwhois.net domain host
  1228.    S %class domain:description:Domain information
  1229.    S %class domain:version:19970103101232000
  1230.    S %class
  1231.  
  1232.  
  1233.  
  1234. Williamson, et. al.          Informational                     [Page 22]
  1235.  
  1236. RFC 2167                    RWhois Protocol                    June 1997
  1237.  
  1238.  
  1239.    S %class host:description:Host information
  1240.    S %class host:version:19970214213241000
  1241.    S %class
  1242.    S %ok
  1243.  
  1244. 3.3.2 directive
  1245.  
  1246.    Description
  1247.  
  1248.    The "-directive" directive can be used by the client to get
  1249.    information about the directives that the server supports. The
  1250.    response must contain the name and description of each specified
  1251.    directive and may be expanded in the future with additional
  1252.    attributes. When no directive name is given, the server must return
  1253.    information about all the directives. Every directive record must end
  1254.    with an empty "%directive" line.
  1255.  
  1256.    ABNF
  1257.  
  1258.    directive-dir = "-directive" *(space directive-name) crlf
  1259.    directive-name = 1*id-char
  1260.    directive-response = *directive-record response
  1261.    directive-record = "%directive" space "directive" ":" directive-name
  1262.                       crlf *directive-line "%directive" crlf
  1263.    directive-line = "%directive" space "description" ":" 1*any-char crlf
  1264.            / "%directive" space attribute-name ":" attribute-value crlf
  1265.  
  1266.    Errors
  1267.  
  1268.    338 Invalid directive syntax
  1269.    400 Directive not available
  1270.    401 Not authorized for directive
  1271.  
  1272.    Examples
  1273.  
  1274.    Without parameters:
  1275.  
  1276.    C -directive
  1277.    S %directive directive:rwhois
  1278.    S %directive description:RWhois directive
  1279.    S %directive
  1280.    S %directive directive:quit
  1281.    S %directive description:Quit connection
  1282.    S %directive
  1283.    S %ok
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290. Williamson, et. al.          Informational                     [Page 23]
  1291.  
  1292. RFC 2167                    RWhois Protocol                    June 1997
  1293.  
  1294.  
  1295.    With parameters:
  1296.  
  1297.    C -directive quit
  1298.    S %directive directive:quit
  1299.    S %directive description:Quit connection
  1300.    S %directive
  1301.    S %ok
  1302.  
  1303. 3.3.3 display
  1304.  
  1305.    Description
  1306.  
  1307.    By default, the server uses the dump format for the output of a query
  1308.    result. The output format can be changed with the "-display"
  1309.    directive.  When no parameter is given, the server must list all the
  1310.    display formats it supports. Every display record must end with an
  1311.    empty "%display" line.
  1312.  
  1313.    Currently, only the dump format is standard and must be supported by
  1314.    the server. Other output formats may be added in the future. See
  1315.    Section 3.4 for the definition of the dump format.
  1316.  
  1317.    ABNF
  1318.  
  1319.    display-dir = "-display" crlf
  1320.        / "-display" space display-name crlf
  1321.    display-name = 1*id-char
  1322.    display-response = *(display-record) response
  1323.    display-record = "%display" space "name" ":" display-name crlf
  1324.    *display-line "%display" crlf
  1325.    display-line = "%display" space attribute-name ":"
  1326.                   attribute-value crlf
  1327.  
  1328.    Errors
  1329.  
  1330.    338 Invalid directive syntax
  1331.    400 Directive not available
  1332.    401 Not authorized for directive
  1333.    436 Invalid display format
  1334.  
  1335.    Examples
  1336.  
  1337.    # Get the available display formats.
  1338.    C -display
  1339.    S %display name:dump
  1340.    S %display
  1341.    S %ok
  1342.  
  1343.  
  1344.  
  1345.  
  1346. Williamson, et. al.          Informational                     [Page 24]
  1347.  
  1348. RFC 2167                    RWhois Protocol                    June 1997
  1349.  
  1350.  
  1351.    # Change the active display format.
  1352.    C -display dump
  1353.    S %ok
  1354.  
  1355. 3.3.4 forward
  1356.  
  1357.    Description
  1358.  
  1359.    The "-forward" directive instructs the server to follow all the
  1360.    referrals and return the results to the client. This directive can be
  1361.    used to run an RWhois server as a proxy server. The default value
  1362.    must be "off". When the value is set to "on", the server must not
  1363.    return referrals.
  1364.  
  1365.    ABNF
  1366.  
  1367.    forward-dir = "-forward" space on-off crlf
  1368.    forward-response = response
  1369.  
  1370.    Errors
  1371.  
  1372.    338 Invalid directive syntax
  1373.    400 Directive not available
  1374.    401 Not authorized for directive
  1375.  
  1376.    Examples
  1377.  
  1378.    C -forward on
  1379.    S %ok
  1380.  
  1381.    C -forward off
  1382.    S %ok
  1383.  
  1384. 3.3.5 holdconnect
  1385.  
  1386.    Description
  1387.  
  1388.    Normally, the server closes the connection after each query. This
  1389.    behavior is controlled by the holdconnect state, which can be changed
  1390.    with the "-holdconnect" directive. When the holdconnect state is set
  1391.    to "off", the server must close the connection after a query; when it
  1392.    is set to "on", the server must not close the connection after a
  1393.    query. By default, the holdconnect state must be set to "off" for
  1394.    each connection.
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402. Williamson, et. al.          Informational                     [Page 25]
  1403.  
  1404. RFC 2167                    RWhois Protocol                    June 1997
  1405.  
  1406.  
  1407.    ABNF
  1408.  
  1409.    holdconnect-dir = "-holdconnect" space on-off crlf
  1410.    holdconnect-response = response
  1411.  
  1412.    Errors
  1413.  
  1414.    338 Invalid directive syntax
  1415.    400 Directive not available
  1416.    401 Not authorized for directive
  1417.  
  1418.    Examples
  1419.  
  1420.    C -holdconnect on
  1421.    S %ok
  1422.  
  1423.    C -holdconnect off
  1424.    S %ok
  1425.  
  1426. 3.3.6 limit
  1427.  
  1428.    Description
  1429.  
  1430.    When returning a query result, the server should limit the number of
  1431.    objects returned to the client. The "-limit" directive changes this
  1432.    limit.  The default and maximum limit is server-dependent. The client
  1433.    can get the current limit by using the "-status" directive (see
  1434.    Section 3.3.13).
  1435.  
  1436.    ABNF
  1437.  
  1438.    limit-dir = "-limit" space 1*digit crlf
  1439.    limit-response = response
  1440.  
  1441.    Errors
  1442.  
  1443.    331 Invalid limit
  1444.    338 Invalid directive syntax
  1445.    400 Directive not available
  1446.    401 Not authorized for directive
  1447.  
  1448.    Examples
  1449.  
  1450.    C -limit 100
  1451.    S %ok
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458. Williamson, et. al.          Informational                     [Page 26]
  1459.  
  1460. RFC 2167                    RWhois Protocol                    June 1997
  1461.  
  1462.  
  1463. 3.3.7 notify
  1464.  
  1465.    Description
  1466.  
  1467.    The "-notify" directive performs several functions.
  1468.  
  1469.       * If the server returns a referral that results in an error, the
  1470.         client can report the bad referral to the server using the
  1471.         "badref" option.
  1472.       * When the client follows referrals and goes through the same
  1473.         referral twice, that referral is a recursive referral and causes
  1474.         a referral loop. The client can report the recursive referral to
  1475.         the server using the "recurref" option.
  1476.       * When the data in an authority area changes, a master server can
  1477.         use the "update" option to notify its slave servers to update
  1478.         the data.
  1479.       * The "inssec" option allows an RWhois server to register itself
  1480.         as a slave server for an authority area with a master server.
  1481.         The master server may reject the request on the basis of its
  1482.         registration policy.
  1483.       * The "delsec" option allows a slave server to cancel its
  1484.         registration with the master server.
  1485.  
  1486.    ABNF
  1487.  
  1488.    notify-dir = "-notify" space "badref" space referral-query crlf
  1489.            / "-notify" space "recurref" space referral-query crlf
  1490.       / "-notify" space "update" space host-port ":" authority-area crlf
  1491.            / "-notify" space "inssec" space host-port ":"
  1492.              authority-area crlf
  1493.            / "-notify" space "delsec" space host-port ":"
  1494.              authority-area crlf
  1495.    referral-query = referral-url space [class-name space] query
  1496.    notify-response = response
  1497.  
  1498.    See Section 3.4 for the definitions of referral-url and query.
  1499.  
  1500.    Errors
  1501.  
  1502.    338 Invalid directive syntax
  1503.    340 Invalid authority area
  1504.    342 Invalid host/port
  1505.    400 Directive not available
  1506.    401 Not authorized for directive
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514. Williamson, et. al.          Informational                     [Page 27]
  1515.  
  1516. RFC 2167                    RWhois Protocol                    June 1997
  1517.  
  1518.  
  1519.    Examples
  1520.  
  1521.    # The client reports a bad referral to rwhois.foobar.com to the
  1522.    # server.
  1523.    C -notify badref rwhois://rwhois.foobar.com:4321/auth-area=foobar.com
  1524.      domain foobar.com
  1525.    S %ok
  1526.  
  1527.    # The client reports a recursive referral to rwhois.foobar.com to the
  1528.    # server.
  1529.    C -notify recurref rwhois://rwhois.foobar.com:4321/auth-area=
  1530.      foobar.com contact Last-Name="Beeblebrox"
  1531.    S %ok
  1532.  
  1533.    # The master server for the foobar.com authority area notifies its
  1534.    # slave servers to update the data.
  1535.    C -notify update master.foobar.com:4321:foobar.com
  1536.    S %ok
  1537.  
  1538.    # The server rwhois2.foobar.com registers as a slave server for the
  1539.    # foobar.com authority area.
  1540.    C -notify inssec rwhois2.foobar.com:4321:foobar.com
  1541.    S %ok
  1542.  
  1543.    # The server rwhois2.foobar.com cancels its registration as a slave
  1544.    # server for the foobar.com authority area.
  1545.    C -notify delsec rwhois2.foobar.com:4321:foobar.com
  1546.    S %ok
  1547.  
  1548. 3.3.8 quit
  1549.  
  1550.    Description
  1551.  
  1552.    The "-quit" directive can be used by the client to close the
  1553.    connection.  Before the server closes the connection, it must respond
  1554.    with "%ok".
  1555.  
  1556.    ABNF
  1557.  
  1558.    quit-dir = "-quit" crlf
  1559.    quit-response = response
  1560.  
  1561.    Errors
  1562.  
  1563.    No errors.
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570. Williamson, et. al.          Informational                     [Page 28]
  1571.  
  1572. RFC 2167                    RWhois Protocol                    June 1997
  1573.  
  1574.  
  1575.    Examples
  1576.  
  1577.    C -quit
  1578.    S %ok
  1579.  
  1580. 3.3.9 register
  1581.  
  1582.    Description
  1583.  
  1584.    The "-register" directive can be used by the client to add, modify,
  1585.    or delete objects in the server's database. The client must wait to
  1586.    send the registration data until the "%ok" response is received from
  1587.    the server.  This directive has the following options.
  1588.  
  1589.       * The "add" option indicates that the object being sent should be
  1590.         added to the server's database.
  1591.       * The "mod" option indicates that the object being sent is a
  1592.         modification of an object that already resides on the server's
  1593.         database. During a modify operation, the "_NEW_" tag is used to
  1594.         delineate the end of the original (unmodified) object and the
  1595.         beginning of the replacement object. That is, the identifying
  1596.         characteristics of the original object are sent first, then the
  1597.         "_NEW_" separator is sent, and then the entire replacement
  1598.         object is sent.
  1599.       The "del" option indicates that the object being sent should be
  1600.       deleted from the server's database.
  1601.  
  1602.    After a register operation (add, modify, or delete an object) in an
  1603.    authority area, the server should update the "Serial-Number" variable
  1604.    in the SOA information for the authority area. This is useful for
  1605.    data replication because a slave server checks the "Serial-Number"
  1606.    variable to detect a data change at the master server (see Section
  1607.    3.6.2).
  1608.  
  1609.    ABNF
  1610.  
  1611.    register-dir = register-on space "add" space maintainer-id crlf
  1612.                   register-add register-off
  1613.            / register-on space "mod" space maintainer-id crlf
  1614.              register-mod register-off
  1615.            / register-on space "del" space maintainer-id crlf
  1616.              register-del register-off
  1617.    register-on = "-register" space "on"
  1618.    register-off = "-register" space "off" crlf
  1619.    register-add = 1*(register-line crlf)
  1620.    register-mod = 1*(register-line crlf) "_NEW_" crlf
  1621.                   1*(register-line crlf)
  1622.    register-del = 1*(register-line crlf)
  1623.  
  1624.  
  1625.  
  1626. Williamson, et. al.          Informational                     [Page 29]
  1627.  
  1628. RFC 2167                    RWhois Protocol                    June 1997
  1629.  
  1630.  
  1631.    maintainer-id = email
  1632.    register-line = attribute-name ":" attribute-value
  1633.    register-on-response = response
  1634.    register-off-response = "%register" space "ID" ":" object-id crlf
  1635.                            response
  1636.            / "%register" space "Updated" ":" time-stamp crlf response
  1637.            / response
  1638.  
  1639.       * The server must return the register-on-response for the
  1640.         "-register on" directive and the register-off-response for the
  1641.         "-register off" directive.
  1642.       * The maintainer-id identifies, for maintenance purposes, the
  1643.         sender of registration information. The server should not use it
  1644.         to authenticate the sender.
  1645.       * For the "add" option, the client must send all the required
  1646.         attributes for the object, including the Class-Name and Auth-
  1647.         Area attributes.  However, the client must not send the ID and
  1648.         Updated attributes. These attributes are assigned by the server
  1649.         and returned in the response.
  1650.       * For the "mod" option, the client must send the identifying
  1651.         information for the object to be modified, followed by the
  1652.         "_NEW_" separator and the entire replacement object. The
  1653.         identifying information must contain the ID and Updated
  1654.         attributes; it may contain other attributes, but the server may
  1655.         not check them. The ID, Auth-Area, and Class-Name attributes
  1656.         must match in both the original object data and the replacement
  1657.         object. The original object data is sent before the replacement
  1658.         object to enable the server to lock the record in the database.
  1659.       * For the "del" option, the client must send the identifying
  1660.         information for the object to be deleted. The identifying
  1661.         information must contain the ID and Updated attributes; it may
  1662.         contain other attributes, but the server may not check them.
  1663.  
  1664.    Errors
  1665.  
  1666.    120 Registration deferred
  1667.    320 Invalid attribute
  1668.    321 Invalid attribute syntax
  1669.    322 Required attribute missing
  1670.    323 Object reference not found
  1671.    324 Primary key not unique
  1672.    325 Failed to update outdated object
  1673.    336 Object not found
  1674.    338 Invalid directive syntax
  1675.    340 Invalid authority area
  1676.    341 Invalid class
  1677.    400 Directive not available
  1678.    401 Not authorized for directive
  1679.  
  1680.  
  1681.  
  1682. Williamson, et. al.          Informational                     [Page 30]
  1683.  
  1684. RFC 2167                    RWhois Protocol                    June 1997
  1685.  
  1686.  
  1687.    Examples
  1688.  
  1689.    # Add an object.
  1690.    C -register on add joe@netsol.com
  1691.    S %ok
  1692.    C Class-Name:contact
  1693.    C Auth-Area:a.com
  1694.    C First-Name:Scott
  1695.    C Last-Name:Williamson
  1696.    C Name:Williamson, Scott
  1697.    C Email:scottw@a.com
  1698.    C -register off
  1699.    S %register ID:23456789.a.com
  1700.    S %register Updated:19961205224403000
  1701.    S %ok
  1702.  
  1703.    # Modify an object.
  1704.    C -register on mod joe@netsol.com
  1705.    S %ok
  1706.    C ID:23456789.a.com
  1707.    C Updated:19961205124403000
  1708.    C _NEW_
  1709.    C Class-Name:contact
  1710.    C Auth-Area:a.com
  1711.    C ID:23456789.a.com
  1712.    C First-Name:Scott
  1713.    C Last-Name:Williamson
  1714.    C Name:Williamson, Scott
  1715.    C Email:sw@a.com
  1716.    C -register off
  1717.    S %ok
  1718.  
  1719.    # Delete an object.
  1720.    C -register on del joe@netsol.com
  1721.    S %ok
  1722.    C ID:23456789.a.com
  1723.    C Updated:19961205224403000
  1724.    C -register off
  1725.    S %ok
  1726.  
  1727. 3.3.10 schema
  1728.  
  1729.    Description
  1730.  
  1731.    The "-schema" directive can be used by the client to get the
  1732.    attribute definitions of one or more classes in an authority area. If
  1733.    the client specifies class names, the server must return the
  1734.    attribute definitions of the specified classes. Otherwise, the server
  1735.  
  1736.  
  1737.  
  1738. Williamson, et. al.          Informational                     [Page 31]
  1739.  
  1740. RFC 2167                    RWhois Protocol                    June 1997
  1741.  
  1742.  
  1743.    must return the attribute definitions of all the classes in the
  1744.    authority area. Every schema record must end with an empty "%schema"
  1745.    line.
  1746.  
  1747.    ABNF
  1748.  
  1749.    schema-dir = "-schema" space authority-area *(space class-name) crlf
  1750.    schema-response = *schema-record response
  1751.    schema-record = *schema-line "%schema" crlf
  1752.    schema-line = "%schema" space class-name ":" attribute-name ":"
  1753.                  attribute-value crlf
  1754.  
  1755.    Errors
  1756.  
  1757.    338 Invalid directive syntax
  1758.    340 Invalid authority area
  1759.    341 Invalid class
  1760.    400 Directive not available
  1761.    401 Not authorized for directive
  1762.  
  1763.    Examples
  1764.  
  1765.    C -schema map
  1766.    S %schema map:attribute:Class-Name
  1767.    S %schema map:description:Type of the object
  1768.    S %schema map:type:TEXT
  1769.    S %schema map:format:re:[a-zA-Z0-9-]+
  1770.    S %schema map:indexed:OFF
  1771.    S %schema map:required:ON
  1772.    S %schema map:multi-line:OFF
  1773.    S %schema map:repeatable:OFF
  1774.    S %schema map:primary:OFF
  1775.    S %schema map:hierarchical:OFF
  1776.    S %schema map:private:OFF
  1777.    S %schema
  1778.    S %schema map:attribute:ID
  1779.    S %schema map:description:Globally unique object identifier
  1780.    S %schema map:type:TEXT
  1781.    S %schema map:format:re:[0-9]+.[a-zA-Z0-9.-]+
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  
  1792.  
  1793.  
  1794. Williamson, et. al.          Informational                     [Page 32]
  1795.  
  1796. RFC 2167                    RWhois Protocol                    June 1997
  1797.  
  1798.  
  1799.    S %schema map:indexed:ON
  1800.    S %schema map:required:ON
  1801.    S %schema map:multi-line:OFF
  1802.    S %schema map:repeatable:OFF
  1803.    S %schema map:primary:ON
  1804.    S %schema map:hierarchical:OFF
  1805.    S %schema map:private:OFF
  1806.    S %schema
  1807.    # This is an abbreviated example, more attributes usually follow.
  1808.    S %ok
  1809.  
  1810. 3.3.11 security
  1811.  
  1812.    Description
  1813.  
  1814.    The "-security" directive enables either a client request or a server
  1815.    response to be authenticated and/or encrypted. Currently, RWhois uses
  1816.    two standard security methods: password and PGP. Password provides
  1817.    authentication only, and PGP provides both authentication and
  1818.    encryption.  This directive can be used to securely access or update
  1819.    any information (meta or data) in an authority area that is protected
  1820.    by one or more guardian objects.
  1821.  
  1822.    ABNF
  1823.  
  1824.    security-dir = "-security" space "on" space direction space
  1825.            security-method [space security-data] crlf
  1826.            security-payload ["-security" space "off" crlf]
  1827.    direction = "request" / "response"
  1828.    security-method = "password" / "pgp" / 1*id-char
  1829.    security-data = password-data / pgp-data / 1*any-char
  1830.    password-data = 1*any-char
  1831.    pgp-data = "signed" / "encrypt" [space key-id] / "signed-encrypt"
  1832.               [space key-id]
  1833.    security-payload = *(*any-char crlf)
  1834.    security-response = response
  1835.  
  1836.       * The "password" security-method is available in the "request"
  1837.         direction only. For password, the security-data is a cleartext
  1838.         password.
  1839.       * The "pgp" security-method is available in both the "request" and
  1840.         "response" directions. For PGP, the security-data indicates how
  1841.         to treat the security-payload: signed, encrypted, or signed and
  1842.         encrypted. To encrypt the security-payload in the "response"
  1843.         direction, the security-data must include the public key ID with
  1844.         which to encrypt it.
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850. Williamson, et. al.          Informational                     [Page 33]
  1851.  
  1852. RFC 2167                    RWhois Protocol                    June 1997
  1853.  
  1854.  
  1855.    Errors
  1856.  
  1857.    338 Invalid directive syntax
  1858.    352 Invalid security method
  1859.    353 Authentication failed
  1860.    354 Encryption failed
  1861.    400 Directive not available
  1862.    401 Not authorized for directive
  1863.  
  1864.    Examples
  1865.  
  1866.    # Authenticate a request using password.
  1867.    C -security on request password hello!1
  1868.    S %ok
  1869.  
  1870.    # Authenticate a PGP signed request.
  1871.    C -security on request pgp signed
  1872.    S %ok
  1873.    C -register on mod joe@netsol.com
  1874.    S %ok
  1875.    C -----BEGIN PGP MESSAGE-----
  1876.    C Version: 2.6.2
  1877.    C
  1878.    C owHrZJjKzMpgdP9D9crUhdpBYnwHGRnPbmVhmHlV7Hef9je/n7vyzhmE6589/+Dg
  1879.    C jPpVm59tNz92vPSmrFB/4ankBRz+xgY+7z9OUYjefGahbWSNwzzxbw6TpWZGerU+
  1880.    C uOUg/Cygs33JBdHqjwEc+wyfZPp+N5p2bu+ywoaOu8eLPyn+m2Mt/T9p1UaG68vP
  1881.    C Zd2d9EPw+Ywpio7dco6yh3b/v7zmQxJHcWpyaVFmSSUDEHi6WBkZm5iamVtY6iXq
  1882.    C JefnKnCFFqQklqSmWBlaWpoZGhmYGhqZmBgYGxgYKHA55yQWF+v6JeamWiXn55Uk
  1883.    C JpcocDmWlmToOhalJlpB9cf7uYbHE6kWi/VumUXFJRB9wcn5JUBdPokwgfDMnJzM
  1884.    C xNzi/DwFLjQBHQWoatfcxMwcq+JyB6h5AA==
  1885.    C =a0sQ
  1886.    C -----END PGP MESSAGE-----
  1887.    C -register off
  1888.    S %ok
  1889.  
  1890.    # Encrypt a response using PGP. 52160EC1 is the public key ID with
  1891.    # which the response is encrypted.
  1892.    C -security on response pgp encrypt 52160EC1
  1893.    S %ok
  1894.    C -xfer com class=domain attribute=Domain-Name
  1895.      attribute=Organization-Name
  1896.    S -----BEGIN PGP MESSAGE-----
  1897.    S Version: 2.6.2
  1898.    S
  1899.    S hIwDqWWhK1IWDsEBBACOXssTzD2CbB7Vjj2cNURScpJc2as2TbUDOQiwkT+8qFgG
  1900.    S ZyRfktpwNNTawRIcGOk1Kcs84z8a3vvTA/oje9vZexHtzfJwBHFdiIZxPuCEpvgv
  1901.    S 2ppK7WqlmHGcQKVBJJHYw7Fq83CUkeGJB9P1M3CQiXeW8h8MwAuhxSgbgt23PKYA
  1902.    S AABuhknJrXeh9Owm81+MvyzgLOyM7sjDYmttU9sj/yuOYmAhS9V+34MT/Mwn4wO8
  1903.  
  1904.  
  1905.  
  1906. Williamson, et. al.          Informational                     [Page 34]
  1907.  
  1908. RFC 2167                    RWhois Protocol                    June 1997
  1909.  
  1910.  
  1911.    S 2BCsJqBHXbwOuYKs02p0se4jyKFtZR8MDPWNm9QyAP+oNMTjsufy6ZRa9PegUC6t
  1912.    S HDhXymkiP03mKMMVK1//7X0=
  1913.    S =vZ2x
  1914.    S -----END PGP MESSAGE-----
  1915.    S %ok
  1916.  
  1917. 3.3.12 soa
  1918.  
  1919.    Description
  1920.  
  1921.    The "-soa" directive can be used by the client to retrieve the SOA
  1922.    information for one or more authority areas. When no authority area
  1923.    name is given, the server must return the SOA information for all the
  1924.    authority areas. Every SOA record must end with an empty "%soa" line.
  1925.  
  1926.    ABNF
  1927.  
  1928.    soa-dir = "-soa" *(space authority-area) crlf
  1929.    soa-response = *soa-record response
  1930.    soa-record = *soa-line "%soa" crlf
  1931.    soa-line = "%soa" space "authority" ":" authority-area crlf
  1932.       / "%soa" space "ttl" ":" 1*digit crlf
  1933.       / "%soa" space "serial" ":" time-stamp crlf
  1934.       / "%soa" space "refresh" ":" 1*digit crlf
  1935.       / "%soa" space "increment" ":" 1*digit crlf
  1936.       / "%soa" space "retry" ":" 1*digit crlf
  1937.       / "%soa" space "tech-contact" ":" email crlf
  1938.       / "%soa" space "admin-contact" ":" email crlf
  1939.       / "%soa" space "hostmaster" ":" email crlf
  1940.       / "%soa" space "primary" ":" host-port crlf
  1941.       / "%soa" space attribute-name ":" attribute-value crlf
  1942.  
  1943.    The server must return the following SOA information for an authority
  1944.    area.
  1945.  
  1946.  attribute-name  attribute-value Comments
  1947.  
  1948.  authority       authority-area  This is the name of the authority area.
  1949.  
  1950.  ttl             1*digit         This is the default time to live for
  1951.                                  the data in the authority area.
  1952.  
  1953.  serial          time-stamp      This is the serial number of the data
  1954.                                  in the authority area; it changes
  1955.                                  when the data changes.
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962. Williamson, et. al.          Informational                     [Page 35]
  1963.  
  1964. RFC 2167                    RWhois Protocol                    June 1997
  1965.  
  1966.  
  1967.  refresh         1*digit         This is the time interval before a
  1968.                                  slave server checks for complete
  1969.                                  replication.
  1970.  
  1971.  increment       1*digit         This is the time interval before a
  1972.                                  slave server checks for incremental
  1973.                                  replication.
  1974.  
  1975.  retry           1*digit         This is the time interval before a
  1976.                                  slave server tries again to connect
  1977.                                  to a master server that appears to be
  1978.                                  out-of-service.
  1979.  
  1980.  tech-contact    email           This is the contact for the operation
  1981.                                  of the master server.
  1982.  
  1983.  admin-contact   email           This is the contact for the data
  1984.                                  integrity at the master server.
  1985.  
  1986.  hostmaster      email           This is the contact for sending update
  1987.                                  requests at the master server.
  1988.  
  1989.  primary         host-port       This is the host name (or IP address)
  1990.                                  and port number of the master server.
  1991.  
  1992.    Errors
  1993.  
  1994.    338 Invalid directive syntax
  1995.    340 Invalid authority area
  1996.    400 Directive not available
  1997.    401 Not authorized for directive
  1998.  
  1999.    Examples
  2000.  
  2001.    C -soa org
  2002.    S %soa authority:org
  2003.    S %soa ttl:86400
  2004.    S %soa serial:19961119111535000
  2005.    S %soa refresh:3600
  2006.    S %soa increment:1800
  2007.    S %soa retry:180
  2008.    S %soa tech-contact:tech@internic.net
  2009.    S %soa admin-contact:admin@internic.net
  2010.    S %soa hostmaster:hostmaster@internic.net
  2011.    S %soa primary:rs.internic.net:4321
  2012.    S %soa
  2013.    S %ok
  2014.  
  2015.  
  2016.  
  2017.  
  2018. Williamson, et. al.          Informational                     [Page 36]
  2019.  
  2020. RFC 2167                    RWhois Protocol                    June 1997
  2021.  
  2022.  
  2023. 3.3.13 status
  2024.  
  2025.    Description
  2026.  
  2027.    The "-status" directive can be used by the client to get various
  2028.    status flags from the server. The response must include the number of
  2029.    objects in all the authority areas, the current display format, the
  2030.    server contact information, and the status flags for the state-
  2031.    oriented directives:  "-limit", "-holdconnect", and "-forward".
  2032.  
  2033.    ABNF
  2034.  
  2035.    status-dir = "-status" crlf
  2036.    status-response = *status-line response
  2037.    status-line = "%status" space "limit" ":" 1*digit crlf
  2038.       / "%status" space "holdconnect" ":" on-off crlf
  2039.       / "%status" space "forward" ":" on-off crlf
  2040.       / "%status" space "objects" ":" 1*digit crlf
  2041.       / "%status" space "display" ":" 1*any-char crlf
  2042.       / "%status" space "contact" ":" email crlf
  2043.       / "%status" space attribute-name ":" attribute-value crlf
  2044.  
  2045.    Errors
  2046.  
  2047.    338 Invalid directive syntax
  2048.    400 Directive not available
  2049.    401 Not authorized for directive
  2050.  
  2051.    Examples
  2052.  
  2053.    C -status
  2054.    S %status limit:20
  2055.    S %status holdconnect:OFF
  2056.    S %status forward:OFF
  2057.    S %status objects:12345
  2058.    S %status display:dump
  2059.    S %status contact:joe@rwhois.net
  2060.    S %ok
  2061.  
  2062. 3.3.14 xfer
  2063.  
  2064.    Description
  2065.  
  2066.    The "-xfer" directive can be used by the client (generally, a slave
  2067.    server) to transfer the data in an authority area. The client can
  2068.    control the amount of data transferred using one of the following
  2069.    options.
  2070.  
  2071.  
  2072.  
  2073.  
  2074. Williamson, et. al.          Informational                     [Page 37]
  2075.  
  2076. RFC 2167                    RWhois Protocol                    June 1997
  2077.  
  2078.  
  2079.       * serial-number: The client can transfer all the objects that have
  2080.         been added, modified or deleted since a certain time, specifying
  2081.         the serial-number that indicates that time. This option is used
  2082.         for incremental replication.
  2083.       * class: The client can limit the data transfer to one or more
  2084.         classes, using the "class=<class-name>" option. The server must
  2085.         return data for only the specified classes. If no class name is
  2086.         specified, the server must return data for all the classes.
  2087.       * attribute: The client can limit the data transfer to one or more
  2088.         attributes of a class, using the "attribute=<attribute-name>"
  2089.         option in combination with the "class=<class-name>" option. The
  2090.         server must return data for only the specified attributes of the
  2091.         class. The client can specify multiple "class=" and "attribute="
  2092.         pairs.
  2093.  
  2094.    ABNF
  2095.  
  2096.    xfer-dir = "-xfer" space authority-area *attribute-def
  2097.            [space serial-number] crlf
  2098.    attribute-def = [space "class=" class-name] *(space "attribute="
  2099.                    attribute-name)
  2100.    serial-number = time-stamp
  2101.    xfer-response = *xfer-record response
  2102.    xfer-record = *xfer-line "%xfer" crlf
  2103.    xfer-line = "%xfer" space class-name ":" attribute-name ":"
  2104.                attribute-value crlf
  2105.  
  2106.    Errors
  2107.  
  2108.    332 Nothing to transfer
  2109.    333 Not master for authority area
  2110.    338 Invalid directive syntax
  2111.    340 Invalid authority area
  2112.    341 Invalid class
  2113.    342 Invalid attribute
  2114.    400 Directive not available
  2115.    401 Not authorized for directive
  2116.  
  2117.  
  2118.  
  2119.  
  2120.  
  2121.  
  2122.  
  2123.  
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130. Williamson, et. al.          Informational                     [Page 38]
  2131.  
  2132. RFC 2167                    RWhois Protocol                    June 1997
  2133.  
  2134.  
  2135.    Examples
  2136.  
  2137.    C -xfer com class=domain attribute=Domain-Name
  2138.      attribute=Organization-Name
  2139.    S %xfer domain:Domain-Name:acme.com
  2140.    S %xfer domain:Organization-Name:Acme Inc.
  2141.    S %xfer
  2142.    S %xfer domain:Domain-Name:vogon.com
  2143.    S %xfer domain:Organization-Name:Vogon Heavy Industries
  2144.    S %xfer
  2145.    S %ok
  2146.  
  2147. 3.3.15 X
  2148.  
  2149.    Description
  2150.  
  2151.    The "-X" directive is used to specify an additional, non-standard
  2152.    directive. It can be implemented by executing an external program, by
  2153.    internal functions, or by other means. It may interact with the
  2154.    client or simply produce output like one of the standard directives.
  2155.  
  2156.    ABNF
  2157.  
  2158.    x-dir = "-X-" x-directive [space x-arguments] crlf *x-line
  2159.    x-directive = 1*id-char
  2160.    x-arguments = *any-char
  2161.    x-response = *(*any-char crlf) response
  2162.    x-line = *any-char crlf
  2163.  
  2164.    Errors
  2165.  
  2166.    338 Invalid directive syntax
  2167.    400 Directive not available
  2168.    401 Not authorized for directive
  2169.  
  2170.    Examples
  2171.  
  2172.    The following example uses an implementation that executes an
  2173.    external program, the UNIX "date" command. The server runs the "date"
  2174.    command and returns its output to the client.
  2175.  
  2176.    C -X-date
  2177.    S Mon Jan 6 13:21:20 EST 1997
  2178.    S %ok
  2179.  
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186. Williamson, et. al.          Informational                     [Page 39]
  2187.  
  2188. RFC 2167                    RWhois Protocol                    June 1997
  2189.  
  2190.  
  2191. 3.4 Query
  2192.  
  2193.    Description
  2194.  
  2195.    The query allows the client to retrieve objects from the server's
  2196.    database.  The server must support the following types of queries.
  2197.  
  2198.       * Unrestricted query: It is a single word or a quoted string. The
  2199.         server must return all the matching objects where one or more
  2200.         attributes match the query, regardless of the class.
  2201.       * Class-restricted query: It is a class name specified in front
  2202.         of the unrestricted query. The server must return all the
  2203.         matching objects where one or more attributes of the specified
  2204.         class match the query.
  2205.       * Attribute-restricted query: It is of the
  2206.         "<attribute-name>=<search-string>" form. The server must return
  2207.         all the matching objects where the specified attribute matches
  2208.         the query.
  2209.  
  2210.    The server may implement the following types of queries.
  2211.  
  2212.       * Boolean operator query: It consists of simpler queries combined
  2213.         using the "and" and "or" operators.
  2214.       * Wild card query: It consists of an asterisk ("*") in the front
  2215.         and/or at the end of the search string. The server may support
  2216.         partial matching using the asterisk.
  2217.  
  2218.    In response to the query, the server will return the objects that
  2219.    match the query. If the server does not support complex queries,
  2220.    with, for example, wild cards or boolean operators, the server may
  2221.    return the "351 Query too complex" error. When the number of objects
  2222.    found exceeds the limit (set by the "-limit" directive), the server
  2223.    should return the objects, followed by the "330 Exceeded maximum
  2224.    objects limit" error.
  2225.  
  2226.    The default object output format is the dump format that uses the
  2227.    "<class-name>:<attribute-name>;<type character>:<attribute-value>"
  2228.    form.  The type character is optional and identifies the type of the
  2229.    attribute value. The type character is a shorthand for the Type field
  2230.    of the attribute definition (see Section 2.3.1). The type characters
  2231.    are defined as follows.
  2232.  
  2233.  
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242. Williamson, et. al.          Informational                     [Page 40]
  2243.  
  2244. RFC 2167                    RWhois Protocol                    June 1997
  2245.  
  2246.  
  2247.     Type          Attribute
  2248.     character     Type
  2249.  
  2250.     T             TEXT
  2251.  
  2252.     I             ID
  2253.  
  2254.     S             SEE-ALSO
  2255.  
  2256.    When no type character is given, the client should assume the "T"
  2257.    type character. The server must provide the type character when the
  2258.    attribute type is ID or SEE-ALSO. The purpose of the type character
  2259.    is to aid the client in displaying the data. For example, when an
  2260.    attribute value is an ID, the client may indicate to the end-user
  2261.    that it is possible to retrieve the object indicated by the ID.
  2262.  
  2263.    The server may return one or more referrals in the "%referral
  2264.    rwhois://<host-name>:<port-number>/auth-area=<authority area>" form.
  2265.    The client can distinguish multiple referrals by comparing their
  2266.    authority areas; if all the referrals refer to the same authority
  2267.    area, the client should follow only one of them. Otherwise, the
  2268.    client should follow all of them. To follow a referral, the client
  2269.    must connect to the specified host name and port number, and issue
  2270.    the same query.
  2271.  
  2272.    ABNF
  2273.  
  2274.    rwhois-query = [class-name space] query crlf
  2275.    query = query-string / attribute-query / query bin-boolean query
  2276.    query-char = <any-char, except """, space, tab>
  2277.    quoted-query-char = query-char / space / tab / "
  2278.    query-string = ["*"] 1*query-char ["*"] / """ ["*"]
  2279.            1*quoted-query-char ["*"] """
  2280.    attribute-query = attribute-name "=" query-string
  2281.    bin-boolean = "and" / "or"
  2282.  
  2283.    rwhois-query-result = *(query-record / referral-record) response
  2284.    query-record = 1*query-line crlf
  2285.    query-line = class-name ":" attribute-name [";" type-char] ":"
  2286.            attribute-value crlf
  2287.    type-char = "T" / "I" / "S"
  2288.    referral-record = 1*(referral-line crlf)
  2289.    referral-line = "%referral" space referral-url
  2290.    referral-url = "rwhois" ":" "//" host-port "/" "auth-area="
  2291.                   authority-area
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298. Williamson, et. al.          Informational                     [Page 41]
  2299.  
  2300. RFC 2167                    RWhois Protocol                    June 1997
  2301.  
  2302.  
  2303.    Errors
  2304.  
  2305.    130 Object not authoritative
  2306.    230 No objects found
  2307.    330 Exceeded maximum objects limit
  2308.    340 Invalid authority area
  2309.    341 Invalid class
  2310.    342 Invalid attribute
  2311.    350 Invalid query syntax
  2312.    351 Query too complex
  2313.  
  2314.    Examples
  2315.  
  2316.    This example illustrates a query, where no objects are found.
  2317.  
  2318.    C vogon
  2319.    S %error 230 No objects found
  2320.  
  2321.    This example illustrates a query, where two different objects are
  2322.    returned.
  2323.  
  2324.    C ibm
  2325.    S domain:ID:IBMLIFEPRO-DOM.com
  2326.    S domain:Auth-Area:com
  2327.    S domain:Domain-Name:IBMLIFEPRO.COM
  2328.    S domain:Org-Name:IBM
  2329.    S domain:Server;I:NS12345-HST.NET
  2330.    S domain:Server;I:NS12345-HST.NET
  2331.    S domain:Admin-Contact;I:TW1234.COM
  2332.    S domain:Tech-Contact;I:BN123.NET
  2333.    S domain:Updated:19961120123455000
  2334.    S domain:Updated-By:autoreg@internic.net
  2335.    S domain:Class-Name:domain
  2336.    S
  2337.    S network:ID:NET-IBMNET-3.0.0.0/0
  2338.    S network:Auth-Area:0.0.0.0/0
  2339.    S network:Network-Name:IBMNET-3
  2340.    S network:IP-Network:123.45.67.0/24
  2341.    S network:Org-Name:IBM
  2342.    S network:Street-Address:1234 Maneck Avenue
  2343.    S network:City:Black Plains
  2344.    S network:State:NY
  2345.    S network:Postal-Code:12345
  2346.    S network:Country-Code:US
  2347.    S network:Tech-Contact;I:MG305.COM
  2348.    S network:Updated:19931120123455000
  2349.    S network:Updated-By:joeblo@nic.ddn.mil
  2350.    S network:Class-Name:network
  2351.  
  2352.  
  2353.  
  2354. Williamson, et. al.          Informational                     [Page 42]
  2355.  
  2356. RFC 2167                    RWhois Protocol                    June 1997
  2357.  
  2358.  
  2359.    S
  2360.    S %ok
  2361.  
  2362.    This example illustrates a query with a class restrictor, where the
  2363.    number of objects found exceeds the limit set by the "-limit"
  2364.    directive.
  2365.  
  2366.    C -limit 1
  2367.    S %ok
  2368.    C domain ibm
  2369.    S domain:ID:IBMLIFEPRO-DOM.com
  2370.    S domain:Auth-Area:com
  2371.    S domain:Domain-Name:IBMLIFEPRO.COM
  2372.    S domain:Org-Name:IBM
  2373.    S domain:Server;I:NS12345-HST.NET
  2374.    S domain:Server;I:NS12345-HST.NET
  2375.    S domain:Admin-Contact;I:TW1234.COM
  2376.    S domain:Tech-Contact;I:BN123.NET
  2377.    S domain:Updated:19961120123455000
  2378.    S domain:Updated-By:erice@internic.net
  2379.    S domain:Class-Name:domain
  2380.    S
  2381.    S %error 330 Exceeded maximum objects limit
  2382.  
  2383.    This is an example of attribute matching.
  2384.  
  2385.    C domain Domain-Name=konabo.com
  2386.    S domain:ID:12345678.com
  2387.    S domain:Auth-Area:com
  2388.    S domain:Domain-Name:konabo.com
  2389.    S domain:Org-Name:ACME
  2390.    S domain:Server;I:12345670.com
  2391.    S domain:Server;I:12345671.com
  2392.    S domain:Admin-Contact;I:12345660.com
  2393.    S domain:Tech-Contact;I:12345665.com
  2394.    S domain:Updated:19961120123455000
  2395.    S domain:Updated-By:joeblo@internic.net
  2396.    S domain:Class-Name:domain
  2397.    S
  2398.    S %ok
  2399.  
  2400.    This example illustrates a link referral.
  2401.  
  2402.    C domain a.b.rwhois.net
  2403.    # The server returns a link referral to a server serving the
  2404.    # b.rwhois.net authority area.
  2405.    S %referral rwhois://master.b.rwhois.net:4321/auth-area=b.rwhois.net
  2406.    S %ok
  2407.  
  2408.  
  2409.  
  2410. Williamson, et. al.          Informational                     [Page 43]
  2411.  
  2412. RFC 2167                    RWhois Protocol                    June 1997
  2413.  
  2414.  
  2415.    This example illustrates a punt referral.
  2416.  
  2417.    C domain internic.net
  2418.    # The server returns a punt referral to a server serving the root
  2419.    # authority area.
  2420.    S %referral rwhois://rs.internic.net:4321/auth-area=.
  2421.    S %ok
  2422.  
  2423.    This example illustrates multiple referrals that refer to the same
  2424.    authority area. The client should follow only one of them.
  2425.  
  2426.    C domain a.b.rwhois.net
  2427.    # The server returns link referrals to two RWhois servers serving the
  2428.    # b.rwhois.net authority area.
  2429.    S %referral rwhois://master.b.rwhois.net:4321/auth-area=b.rwhois.net
  2430.    S %referral rwhois://slave.b.rwhois.net:4321/auth-area=b.rwhois.net
  2431.    S %ok
  2432.  
  2433.    This example illustrates multiple referrals that refer to different
  2434.    authority areas. The client should follow all of them.
  2435.  
  2436.    C contact Last-Name="Beeblebrox"
  2437.    # The server returns a link referral to a server serving the
  2438.    # b.rwhois.net authority area.
  2439.    S %referral rwhois://master.b.rwhois.net:4321/auth-area=b.rwhois.net
  2440.    # The server also returns a punt referral to a server serving the
  2441.    # net authority area since the query matched an entry in the
  2442.    # non-hierarchical index received from it.
  2443.    S %referral rwhois://rs.internic.net:4321/auth-area=net
  2444.    S %ok
  2445.  
  2446.  
  2447.  
  2448.  
  2449.  
  2450.  
  2451.  
  2452.  
  2453.  
  2454.  
  2455.  
  2456.  
  2457.  
  2458.  
  2459.  
  2460.  
  2461.  
  2462.  
  2463.  
  2464.  
  2465.  
  2466. Williamson, et. al.          Informational                     [Page 44]
  2467.  
  2468. RFC 2167                    RWhois Protocol                    June 1997
  2469.  
  2470.  
  2471.    This is an example of a boolean operator and wildcard matching.
  2472.  
  2473.    C ibm and jubliana*
  2474.    S host:ID:JUBLIANA-HST.root
  2475.    S host:Auth-Area:.
  2476.    S host:Host-Name:JUBLIANA.TRL.IBM.CO.JP
  2477.    S host:IP-Address:123.156.220.68
  2478.    S host:Org-Name:IBM
  2479.    S host:Street-Address:1234 Maneck Avenue
  2480.    S host:City:Black Plains
  2481.    S host:State:NY
  2482.    S host:Postal-Code:12345
  2483.    S host:Country-Code:US
  2484.    S host:Updated:19961120123455000
  2485.    S host:Updated-By:joeblo@nic.ddn.mil
  2486.    S host:Class-Name:host
  2487.    S
  2488.    S %ok
  2489.  
  2490. 3.5 Connection Model
  2491.  
  2492.    An RWhois client can connect to an RWhois server using one of the
  2493.    following transport protocols.
  2494.  
  2495. 3.5.1 Transmission Control Protocol (TCP)
  2496.  
  2497.    TCP provides a reliable stream transport service between a client and
  2498.    a server. In RWhois, TCP is the default transport protocol because,
  2499.    during a particular session, a client can send more than one query
  2500.    and a server can reliably return a large amount of data for each of
  2501.    those queries. By default, a TCP RWhois server should run on the
  2502.    standard, Internet Assigned Number Authority (IANA)-assigned port
  2503.    4321. However, if port 4321 is not available, it may run on an
  2504.    available port in the non-reserved range (1024 - 65535).
  2505.  
  2506. 3.5.2 User Datagram Protocol (UDP)
  2507.  
  2508.    UDP provides an unreliable connectionless transport service between a
  2509.    client and a server. In RWhois, UDP may be used as the transport
  2510.    protocol if a client wants to quickly send only one query, without
  2511.    incurring the overhead of establishing a TCP connection with a
  2512.    server. By default, a UDP RWhois server should run on the standard,
  2513.    IANA-assigned port 4321. However, if port 4321 is not available, it
  2514.    may run on an available port in the non-reserved range (1024 -
  2515.    65535). A separate document will describe the use of UDP as the
  2516.    transport protocol in RWhois.
  2517.  
  2518.  
  2519.  
  2520.  
  2521.  
  2522. Williamson, et. al.          Informational                     [Page 45]
  2523.  
  2524. RFC 2167                    RWhois Protocol                    June 1997
  2525.  
  2526.  
  2527. 3.6 Data Replication
  2528.  
  2529.    This section discusses when and how a slave server should replicate
  2530.    data.  Further, it describes the server registration and location
  2531.    mechanisms.
  2532.  
  2533. 3.6.1 When to Replicate Data
  2534.  
  2535.    The time when a slave server may replicate data for an authority area
  2536.    is determined by the SOA variables for that authority area. The
  2537.    possible times are the following.
  2538.  
  2539.       * When the "Refresh-Interval" expires, a slave server may
  2540.         completely replicate data.
  2541.       * When the "Increment-Interval" expires, a slave server may
  2542.         incrementally replicate data.
  2543.       * A slave server fails to connect to its master server to
  2544.         replicate data. When the "Retry-Interval" expires, it tries
  2545.         again to replicate data.
  2546.       * When the data in an authority area is changed and its "Serial-
  2547.         Number" updated, a master server may notify its slave servers to
  2548.         immediately update the data. To notify about the data change,
  2549.         the master server should send the "-notify update <host-
  2550.         name>:<port-number>:<authority-area>" directive to its slave
  2551.         servers.
  2552.  
  2553. 3.6.2 How to Replicate Data
  2554.  
  2555.    To replicate data, a slave server sends a series of directives to its
  2556.    master server and checks each response before sending the next
  2557.    directive.  The following sections describe the protocols for
  2558.    complete and incremental replication.
  2559.  
  2560.    Complete Replication
  2561.  
  2562.    The protocol between a master server and a slave server to completely
  2563.    replicate data for an authority area is as follows.
  2564.  
  2565.      1. The slave server should connect to the master server. If there
  2566.         is a connection error, the slave server should log an error and
  2567.         exit.
  2568.  
  2569.      2. The slave server should send the "-soa <authority-area>"
  2570.         directive to the master server and parse the SOA variables from
  2571.         the response. Let the "Serial-Number" variable in this response
  2572.         be called the "old-serial-number".
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578. Williamson, et. al.          Informational                     [Page 46]
  2579.  
  2580. RFC 2167                    RWhois Protocol                    June 1997
  2581.  
  2582.  
  2583.      3. The slave server should send the "-class <authority-area>"
  2584.         directive to the master server and parse the versions of all the
  2585.         classes from the response.
  2586.      4. The slave server should send the "-schema <authority-area>"
  2587.         directive to the master server and parse the definitions of all
  2588.         the classes from the response.
  2589.      5. The slave server should send the "-xfer <authority-area>"
  2590.         directive to the master server and parse the data objects from
  2591.         the response. The master server should return all the data
  2592.         objects, excluding the deleted ones, in the authority area. The
  2593.         slave server should index these data objects.
  2594.      6. When the "Refresh-Interval" expires, the slave server should
  2595.         to the master server. If there is a connection error, the slave
  2596.         server should try again after the "Retry-Interval".
  2597.      7. The slave server should send the "-soa <authority-area>"
  2598.         directive to the master server and parse the SOA variables from
  2599.         the response. Let the "Serial-Number" variable in this response
  2600.         be called the "new-serial-number". If the "new-serial-number" is
  2601.         not greater than the "old-serial-number", go back to step 6.
  2602.         Otherwise, it indicates a data change at the master server.
  2603.      8. The slave server should send the "-class <authority-area>"
  2604.         directive to the master server and parse the versions of all the
  2605.         classes from the response. If the version of any of the classes
  2606.         has changed, the slave server should send the "-schema
  2607.         <authority-area>" directive to the master server and parse the
  2608.         definitions of all the classes from the response.
  2609.      9. The slave server should send the "-xfer <authority-area>"
  2610.         directive the master server and parse the data objects from the
  2611.         response. The master server should return all the data objects,
  2612.         excluding the deleted ones, in the authority area. The slave
  2613.         server should index these data objects and seamlessly replace
  2614.         the old index with the new one. Further, it should assign the
  2615.         "new-serial-number" to the "old-serial-number".
  2616.      10. Go back to step 6.
  2617.  
  2618.    Note that the "-class", "-schema", and "-xfer" directives change when
  2619.    a slave server replicates data for only a subset of the schema for an
  2620.    authority area.
  2621.  
  2622.    In the following example, a slave server completely replicates data
  2623.    for all the classes in an authority area. The notation in the example
  2624.    uses a prefix to indicate from where the information is coming. An
  2625.    "M" indicates that the master server sends the data to the slave
  2626.    server. An "S" indicates that the slave server sends the data to the
  2627.    master server. The line is a comment when "#" is used. The space
  2628.    after the prefix is not part of the data. The example authority area
  2629.    is "rwhois.net".
  2630.  
  2631.  
  2632.  
  2633.  
  2634. Williamson, et. al.          Informational                     [Page 47]
  2635.  
  2636. RFC 2167                    RWhois Protocol                    June 1997
  2637.  
  2638.  
  2639.    # The slave server connects to the master server.
  2640.    M %rwhois V-1.5:00ffff:00 master.rwhois.net
  2641.    S -soa rwhois.net
  2642.    M ...
  2643.    M %soa serial:19970103102258000
  2644.    M %soa refresh:3600
  2645.    M ...
  2646.    S -class rwhois.net
  2647.    # The master server returns the versions of all the classes in the
  2648.    # rwhois.net authority area.
  2649.    S -schema rwhois.net
  2650.    # The master server returns the definitions of all the classes in the
  2651.    # rwhois.net authority area.
  2652.    S -xfer rwhois.net
  2653.    # The master server returns all the data objects, excluding the
  2654.    # deleted ones, in the rwhois.net authority area. The slave server
  2655.    # indexes these data objects.
  2656.    # The refresh interval of 3600 seconds expires.
  2657.    S -soa rwhois.net
  2658.    M ...
  2659.    M %soa serial:19970103103258000
  2660.    M %soa refresh:3600
  2661.    M ...
  2662.    # The new serial number 19970103103258000 is greater than the old
  2663.    # serial number 19970103102258000. It indicates a data change at the
  2664.    # master server.
  2665.    S -class rwhois.net
  2666.    # The master server returns the versions of all the classes in the
  2667.    # rwhois.net authority area. If the version of any of the classes has
  2668.    # changed, the slave server logs an error and closes the connection.
  2669.    S -xfer rwhois.net
  2670.    # The master server returns all the data objects, excluding the
  2671.    # deleted ones, in the rwhois.net authority area. The slave server
  2672.    # indexes these data objects and seamlessly replaces the old index.
  2673.    # The refresh interval of 3600 seconds expires.
  2674.    S ...
  2675.  
  2676.    Incremental Replication
  2677.  
  2678.    The protocol between a master server and a slave server to
  2679.    incrementally replicate data for an authority area is as follows.
  2680.  
  2681.      1. The slave server should connect to the master server. If there
  2682.         is a connection error, the slave server should log an error and
  2683.         exit.
  2684.  
  2685.  
  2686.  
  2687.  
  2688.  
  2689.  
  2690. Williamson, et. al.          Informational                     [Page 48]
  2691.  
  2692. RFC 2167                    RWhois Protocol                    June 1997
  2693.  
  2694.  
  2695.      2. The slave server should send the "-soa <authority-area>"
  2696.         directive to the master server and parse the SOA variables from
  2697.         the response. Let the "Serial-Number" variable in this response
  2698.         be called the "old-serial-number".
  2699.      3. The slave server should send the "-class <authority-area>"
  2700.         directive to the master server and parse the versions of all the
  2701.         classes from the response.
  2702.      4. The slave server should send the "-schema <authority-area>"
  2703.         directive to the master server and parse the definitions of all
  2704.         the classes from the response.
  2705.      5. The slave server should send the "-xfer <authority-area>"
  2706.         directive to the master server and parse the data objects from
  2707.         the response. The master server should return all the data
  2708.         objects, excluding the deleted ones, in the authority area. The
  2709.         slave server should index these data objects.
  2710.      6. When the "Increment-Interval" expires, the slave server should
  2711.         connect to the master server. If there is a connection error,
  2712.         the slave server should try again after the "Retry-Interval".
  2713.      7. The slave server should send the "-soa <authority-area>"
  2714.         directive to the master server and parse the SOA variables from
  2715.         the response. Let the "Serial-Number" variable in this response
  2716.         be called the "new-serial-number". If the "new-serial-number" is
  2717.         not greater than the "old-serial-number", go back to step 6.
  2718.         Otherwise, it indicates a data change at the master server.
  2719.      8. The slave server should send the "-class <authority-area>"
  2720.         directive to the master server and parse the versions of all the
  2721.         classes from the response. If the version of any of the classes
  2722.         has changed, the slave server should send the "-schema
  2723.         <authority-area>" directive to the master server and parse the
  2724.         definitions of all the classes from the response. The slave
  2725.         server should then send the "-xfer <authority-area>" directive
  2726.         to the master server and parse the data objects from the
  2727.         response. The master server should return all the data objects,
  2728.         excluding the deleted ones, in the authority area. The slave
  2729.         server should index these data objects and seamlessly replace
  2730.         the old index with the new one. Further, it should assign the
  2731.         "new-serial-number" to the "old-serial-number". If the version
  2732.         of any of the classes has changed, go back to step 6.
  2733.      9. The slave server should send the "-xfer <authority-area>
  2734.         <old-serial-number>" directive to the master server and parse
  2735.         the data objects from the response. The master server should
  2736.         return all the data objects in the authority area that have been
  2737.         inserted, updated, or deleted since the "old-serial-number". The
  2738.         slave server should index all the data again after purging stale
  2739.         data objects and seamlessly replace the old index with the new
  2740.         one. Further, it should assign the "new-serial-number" to the
  2741.         "old-serial-number".
  2742.      10. Go back to step 6.
  2743.  
  2744.  
  2745.  
  2746. Williamson, et. al.          Informational                     [Page 49]
  2747.  
  2748. RFC 2167                    RWhois Protocol                    June 1997
  2749.  
  2750.  
  2751.    Note that the "-class", "-schema", and "-xfer" directives change when
  2752.    a slave server replicates data for only a subset of the schema for an
  2753.    authority area.
  2754.  
  2755.    In the following example, a slave server incrementally replicates
  2756.    data for all the classes in an authority area. The notation in the
  2757.    example uses a prefix to indicate from where the information is
  2758.    coming. An "M" indicates that the master server sends the data to the
  2759.    slave server. An "S" indicates the slave server sends the data to the
  2760.    master server. The line is a comment when "#" is used. The space
  2761.    after the prefix is not part of the data. The example authority area
  2762.    is "rwhois.net".
  2763.  
  2764.    # The slave server connects to the master server.
  2765.    M %rwhois V-1.5:00ffff:00 master.rwhois.net
  2766.    S -soa rwhois.net
  2767.    M ...
  2768.    M %soa serial:19970103102258000
  2769.    M %soa increment:1800
  2770.    M ...
  2771.    S -class rwhois.net
  2772.    # The master server returns the versions of all the classes in the
  2773.    # rwhois.net authority area.
  2774.    S -schema rwhois.net
  2775.    # The master server returns the definitions of all the classes in the
  2776.    # rwhois.net authority area.
  2777.    S -xfer rwhois.net
  2778.    # The master server returns all the data objects, excluding the
  2779.    # deleted ones, in the rwhois.net authority area. The slave server
  2780.    # indexes these data objects.
  2781.    # The increment interval of 1800 seconds expires.
  2782.    S -soa rwhois.net
  2783.    M ...
  2784.    M %soa serial:19970103103258000
  2785.    M %soa increment:1800
  2786.    M ...
  2787.    # The new serial number 19970103103258000 is greater than the old
  2788.    # serial number 19970103102258000. It indicates a data change at
  2789.    # the master server.
  2790.    S -class rwhois.net
  2791.    # The master server returns the versions of all the classes in the
  2792.    # rwhois.net authority area. If the version of any of the classes has
  2793.    # changed, the slave server logs an error and closes the connection.
  2794.    S -xfer rwhois.net 19970103102258000
  2795.  
  2796.  
  2797.  
  2798.  
  2799.  
  2800.  
  2801.  
  2802. Williamson, et. al.          Informational                     [Page 50]
  2803.  
  2804. RFC 2167                    RWhois Protocol                    June 1997
  2805.  
  2806.  
  2807.    # The master server returns all the data objects in the rwhois.net
  2808.    # authority area that have been inserted, updated, or deleted since
  2809.    # 19970103102258000. The slave server indexes all the data again
  2810.    # after purging stale data objects and seamlessly replaces the old
  2811.    # index. The increment interval of 1800 seconds expires.
  2812.    S ...
  2813.  
  2814. 3.6.3 Server Registration
  2815.  
  2816.    This section discusses how an RWhois server can register itself or
  2817.    cancel its registration as a slave server for an authority area with
  2818.    a master server.
  2819.  
  2820.    The initial list of slave servers for an authority area should be
  2821.    manually configured at the master server. To register itself as a
  2822.    slave server, the server should send the "-notify inssec <host-
  2823.    name>:<port-number>:<authority-area>" directive to the master server.
  2824.    The master server may reject the request on the basis of its
  2825.    registration policy. To cancel its registration as a slave server,
  2826.    the server should send the "-notify delsec <host-name>:<port-
  2827.    number>:<authority-area>" directive to the master server. Note that
  2828.    the "host-name" and "port-number" in the above directives correspond
  2829.    to the requesting server.
  2830.  
  2831. 3.6.4 Server Location
  2832.  
  2833.    To resolve a query in a particular authority area, an RWhois client
  2834.    may need to first locate the master and slave servers for that
  2835.    authority area.  The different server location mechanisms are as
  2836.    follows.
  2837.  
  2838.    Referrals
  2839.  
  2840.    An RWhois client should know about at least one RWhois server. It
  2841.    should send the "referral <authority-area>" query to that server. The
  2842.    query may be routed up or down the RWhois tree before getting
  2843.    resolved. If the query does get resolved, the result should be a
  2844.    referral object for that authority area. The client should parse the
  2845.    "Referral" attributes from the result to obtain a list of servers
  2846.    serving that authority area.
  2847.  
  2848.    The client should then send the "-soa <authority-area>" directive to
  2849.    one of the above servers and parse the "Primary-Server" variable from
  2850.    the response. The value of this variable is the master server. Then,
  2851.    the remaining servers in the list are the slave servers.
  2852.  
  2853.  
  2854.  
  2855.  
  2856.  
  2857.  
  2858. Williamson, et. al.          Informational                     [Page 51]
  2859.  
  2860. RFC 2167                    RWhois Protocol                    June 1997
  2861.  
  2862.  
  2863.    SRV RRs
  2864.  
  2865.    The Server Resource Record (SRV RR), defined for DNS, can be used to
  2866.    locate the master and slave servers for an authority area. An SRV RR
  2867.    specifies the location of a network service in an organization's DNS.
  2868.    It is defined in [RFC 2052] as follows.
  2869.  
  2870.    Service.Proto.Name TTL Class SRV Priority Weight Port Target
  2871.  
  2872.    Since an authority area identifier is generally a domain name or an
  2873.    IP address, the RWhois SRV RRs can be added to the DNS file for that
  2874.    domain or IP address. For example, the RWhois SRV RRs for the
  2875.    "rwhois.net" authority area could be:
  2876.  
  2877.    rwhois.tcp.rwhois.net. 86400 IN SRV 10 0 4321 master.rwhois.net.
  2878.                                    SRV 20 0 4322 slave.rwhois.net.
  2879.  
  2880.    where the "master.rwhois.net" server has a higher priority than the
  2881.    "slave.rwhois.net" server. The client must try to connect to the
  2882.    server with a higher (lower-numbered) priority.
  2883.  
  2884. 4. Security Considerations
  2885.  
  2886.    RWhois provides security using the guardian class (see Section
  2887.    2.3.6). Any information (meta or data) in an authority area can be
  2888.    guarded by containing pointers to one or more guardian objects; that
  2889.    is, it can be securely updated and accessed. Currently, there are two
  2890.    standard security methods: password and PGP (see Section 3.3.11).
  2891.    Password provides authentication only, and PGP provides both
  2892.    authentication and encryption.  PGP is the recommended security
  2893.    method in RWhois.
  2894.  
  2895.    The following sections discuss how to securely update and access the
  2896.    data in an authority area.
  2897.  
  2898. 4.1 Data Update
  2899.  
  2900.    This involves the ability to securely add, modify, or delete some
  2901.    information (meta or data) in an authority area. An authority area,
  2902.    on the whole, can be guarded by linking guardians to its SOA and
  2903.    schema information. Only these guardians should be allowed to add
  2904.    objects to the authority area and modify its SOA and schema
  2905.    information. In addition, they can also modify or delete existing
  2906.    objects in the authority area. However, the function of modifying or
  2907.    deleting existing objects can be delegated to other guardians by
  2908.    linking them to objects on a per-object basis.
  2909.  
  2910.  
  2911.  
  2912.  
  2913.  
  2914. Williamson, et. al.          Informational                     [Page 52]
  2915.  
  2916. RFC 2167                    RWhois Protocol                    June 1997
  2917.  
  2918.  
  2919. 4.2 Access Control
  2920.  
  2921.    There are two access control issues; the first is the ability to
  2922.    securely transfer data between the slave and master servers. To
  2923.    transfer data for an authority area, a slave server can authenticate
  2924.    itself by satisfying one of the guardians linked to the SOA
  2925.    information of the authority area at the master server. In addition,
  2926.    the master server may encrypt the transferred data.
  2927.  
  2928.    The second issue is the ability to make public only a subset of the
  2929.    data in an authority area. If all the objects of a particular class
  2930.    need to be private, the Private attribute of the class should be set
  2931.    to true. If only some attributes of all the objects of a particular
  2932.    class need to be private, the Private attribute property of each of
  2933.    those attributes should be set to true. The guardians of such objects
  2934.    must be able to view them completely.
  2935.  
  2936. 5. Acknowledgments
  2937.  
  2938.    The authors would like to acknowledge the following individuals.
  2939.  
  2940.    Stan Borinski
  2941.    C. Ming Lu
  2942.    Leslie Meador
  2943.    Michael Mealling
  2944.    Greg Pierce
  2945.    Amar Rao
  2946.  
  2947. 6. References
  2948.  
  2949.    [CIP] Allen, J., "The Common Indexing Protocol (CIP)", Bunyip
  2950.    Information Systems, November 1996, Work in Progress.
  2951.  
  2952.    [Guardian] Singh, J., M. Kosters, "The InterNIC Guardian Object",
  2953.    ftp://rs.internic.net/policy/internic/internic-gen-1.txt, Network
  2954.    Solutions, February 1996.
  2955.  
  2956.    [RFC 821] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC
  2957.    821, ISI, August 1982.
  2958.  
  2959.    [RFC 822] Crocker, D, "Standards for the Format of ARPA Internet Text
  2960.    Messages", STD 11, RFC 822, University of Delaware, August 1982.
  2961.  
  2962.    [RFC 954] Harrenstien, K., Stahl, M., Feinler, E., "NICNAME/WHOIS",
  2963.    RFC 954, SRI, October 1985.
  2964.  
  2965.    [RFC 1034] Mockapetris, P. V., "Domain names - concepts and
  2966.    facilities", STD 13, RFC 1034, November 1987.
  2967.  
  2968.  
  2969.  
  2970. Williamson, et. al.          Informational                     [Page 53]
  2971.  
  2972. RFC 2167                    RWhois Protocol                    June 1997
  2973.  
  2974.  
  2975.    [RFC 1714] Williamson, S., Kosters, M., "Referral Whois Protocol",
  2976.    RFC 1714, Network Solutions, November 1994.
  2977.  
  2978.    [RFC 1738] T. Berners-Lee, L. Masinter, M. McCahill, "Uniform
  2979.    Resource Locators (URL)", RFC 1738, CERN, Xerox Corporation,
  2980.    University of Minnesota, December 1994.
  2981.  
  2982.    [RFC 1991] Atkins, D.,  W. Stallings, P. Zimmermann, "PGP Message
  2983.    Exchange Formats", RFC 1991, MIT, Comp-Comm Consulting, Boulder
  2984.    Software Engineering, August 1996.
  2985.  
  2986.    [RFC 2052] Gulbrandsen, A., P. Vixie, "A DNS RR for specifying the
  2987.    location of services (DNS SRV)", RFC 2052, Troll Technologies, Vixie
  2988.    Enterprises, October 1996.
  2989.  
  2990.    [X.500] "The Directory: Overview of Concepts, Models and Service",
  2991.    CCITT Recommendation X.500, 1988.
  2992.  
  2993. Authors' Addresses
  2994.  
  2995.    Scott Williamson (scottw@rwhois.net)
  2996.    Mark Kosters (markk@internic.net)
  2997.    David Blacka (davidb@rwhois.net)
  2998.    Jasdip Singh (jasdips@rwhois.net)
  2999.    Koert Zeilstra (kzeil@rwhois.net)
  3000.  
  3001.    Postal Address:
  3002.    505 Huntmar Park Drive
  3003.    Herndon, VA 22070-5100
  3004.    Telephone: 703-742-0400
  3005.  
  3006.  
  3007.  
  3008.  
  3009.  
  3010.  
  3011.  
  3012.  
  3013.  
  3014.  
  3015.  
  3016.  
  3017.  
  3018.  
  3019.  
  3020.  
  3021.  
  3022.  
  3023.  
  3024.  
  3025.  
  3026. Williamson, et. al.          Informational                     [Page 54]
  3027.  
  3028. RFC 2167                    RWhois Protocol                    June 1997
  3029.  
  3030.  
  3031.    Appendix A: Glossary Of Terms
  3032.  
  3033.    ABNF: Augmented Backus-Naur Form. Refined version of BNF, defined in
  3034.    [RFC 822]. See BNF.
  3035.  
  3036.    Attribute: A named field and the smallest typed unit in a database
  3037.    schema.  See Database Schema.
  3038.  
  3039.    Authority Area: An autonomous part of an RWhois tree. It is
  3040.    associated and named after a particular piece of a hierarchy and is
  3041.    able to state authoritatively whether or not an instance of
  3042.    hierarchical data is present within the RWhois tree. See RWhois Tree.
  3043.  
  3044.    Banner: A line sent by a server indicating which protocol versions it
  3045.    supports and which directives are implemented. This line is issued by
  3046.    the server after a connection is opened and as a response to the "-
  3047.    rwhois" directive. See Directive and Response.
  3048.  
  3049.    Base Class: A class from which all defined classes in a database
  3050.    schema inherit attributes. See Attribute, Class, and Database Schema.
  3051.  
  3052.    BNF: Backus-Naur Form. Language to precisely define the syntax of
  3053.    protocols and computer languages.
  3054.  
  3055.    Class: A collection of attributes. See Attribute.
  3056.  
  3057.    Complete Replication: The process of replicating all of the data for
  3058.    an authority area. See Replication.
  3059.  
  3060.    Database Schema: A collection of all the classes forming an RWhois
  3061.    database. See Class.
  3062.  
  3063.    Directive: A command that a client sends to a server to set a control
  3064.    parameter for the session, get the meta-information (class
  3065.    definitions and SOA information) about an authority area, or get the
  3066.    data in an authority area. See Class and SOA.
  3067.  
  3068.    Guardian Class: A standard class that contains security information.
  3069.    An object is guarded by containing a pointer to a guardian object.
  3070.    See Class and Object.
  3071.  
  3072.    Incremental Replication: The process of replicating the data that has
  3073.    changed since the last replication for an authority area. See
  3074.    Replication.
  3075.  
  3076.    Info: The miscellaneous information that a server sends to a client.
  3077.  
  3078.  
  3079.  
  3080.  
  3081.  
  3082. Williamson, et. al.          Informational                     [Page 55]
  3083.  
  3084. RFC 2167                    RWhois Protocol                    June 1997
  3085.  
  3086.  
  3087.    Lexically Hierarchical Label: A text string whose position in a
  3088.    hierarchy is encoded in the string itself.
  3089.  
  3090.    Link Referral: A pointer to another server that is further down an
  3091.    RWhois tree. It is used to route a query down the tree. See Referral
  3092.    and RWhois Tree.
  3093.  
  3094.    Master Server: A server where the data is registered for an authority
  3095.    area.  It answers authoritatively to queries in the authority area.
  3096.    It is also called a primary server. See Authority Area.
  3097.  
  3098.    Namespace: A particular naming system defined by a set of rules
  3099.    describing the format of a name. Alternately, all of the names
  3100.    satisfying the rules.
  3101.  
  3102.    Object: An instance of a class. It is data with a type of <class>.
  3103.    See Class.
  3104.  
  3105.    PGP: Pretty Good Privacy. An authentication and encryption scheme.
  3106.  
  3107.    Primary Server: See Master Server.
  3108.  
  3109.    Punt Referral: A pointer to another server that is further up an
  3110.    RWhois tree. It is used to route a query up the tree. See Referral
  3111.    and RWhois Tree.
  3112.  
  3113.    Query: A command that a client sends to a server to access the data
  3114.    in an authority area.
  3115.  
  3116.    Query Routing: Redirecting a query to another server for resolution.
  3117.    See Query.
  3118.  
  3119.    Referral: A pointer to another server that is presumed to be closer
  3120.    to the desired data. It is used to route a query. See Query Routing.
  3121.  
  3122.    Referral Class: A standard class that contains referral information
  3123.    for an authority area. See Class and Referral.
  3124.  
  3125.    Replication: A server duplicating data from another server on a per-
  3126.    authority area basis. See Authority Area.
  3127.  
  3128.    Response: The information that a server returns to a client for a
  3129.    directive. See Directive.
  3130.  
  3131.    Result: The information that a server returns to a client for a
  3132.    query. It can be either the accessed data or referrals to other
  3133.    servers. See Query and Referral.
  3134.  
  3135.  
  3136.  
  3137.  
  3138. Williamson, et. al.          Informational                     [Page 56]
  3139.  
  3140. RFC 2167                    RWhois Protocol                    June 1997
  3141.  
  3142.  
  3143.    RWhois Tree: A data information tree of RWhois servers where the data
  3144.    is arranged hierarchically in the authority areas. See Authority
  3145.    Area.
  3146.  
  3147.    Schema: See Class.
  3148.  
  3149.    Secondary Server: See Slave Server.
  3150.  
  3151.    Slave Server: A server where the data is replicated from the master
  3152.    server for an authority area. It also answers authoritatively to
  3153.    queries in the authority area. It is also called a secondary server.
  3154.    See Master Server.
  3155.  
  3156.    SOA: Start Of Authority. Administrative variables, defined at the
  3157.    master server, to control replication for an authority area. See
  3158.    Master Server and Replication.
  3159.  
  3160. Appendix B: RWhois ABNF
  3161.  
  3162.    This specification uses the Augmented Backus-Naur Form (ABNF)
  3163.    notation, as defined in Section 2 of [RFC 822].
  3164.  
  3165.    General Definitions
  3166.  
  3167.    Lexical Tokens
  3168.  
  3169.    alpha = "a".."z" / "A".."Z"
  3170.    digit = "0".."9"
  3171.    hex-digit = digit / "a".."f" / "A".. "F"
  3172.    id-char = alpha / digit / "_" / "-"
  3173.    any-char = <ASCII 1..255,
  3174.               except LF (linefeed) and CR (carriage return)>
  3175.    dns-char = alpha / digit / "-"
  3176.    email-char = <see [RFC 822]>
  3177.    space = " "
  3178.    tab = <ASCII TAB (tab)>
  3179.    lf = <ASCII LF (linefeed)>
  3180.    cr = <ASCII CR (carriage return)>
  3181.    crlf = cr lf
  3182.  
  3183.    Grammar
  3184.  
  3185.    year = 4digit
  3186.    month = 2digit
  3187.    day = 2digit
  3188.    hour = 2digit
  3189.    minute = 2digit
  3190.    second = 2digit
  3191.  
  3192.  
  3193.  
  3194. Williamson, et. al.          Informational                     [Page 57]
  3195.  
  3196. RFC 2167                    RWhois Protocol                    June 1997
  3197.  
  3198.  
  3199.    milli-second = 3digit
  3200.    host-name = dns-char *(dns-char / ".")
  3201.    email = 1*email-char "@" host-name
  3202.    authority-area = (dns-char / ".") *(dns-char / "." / "/")
  3203.    object-id = 1*id-char "." authority-area
  3204.    host-port = (host-name / ip-address) ":" 1*5digit
  3205.    ip-address = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
  3206.    class-name = 1*id-char
  3207.    attribute-name = 1*id-char
  3208.    attribute-value = 1*any-char
  3209.    time-stamp = year month day hour minute second milli-second
  3210.    on-off = "on" / "off"
  3211.  
  3212.    Note that the time-stamp must be in the Greenwich Mean Time (GMT)
  3213.    time zone.
  3214.  
  3215.    response = ok-response crlf / error-response crlf / info-response
  3216.    ok-response = "%ok"
  3217.    error-response = "%error" space error-code space error-text
  3218.    error-code = 3digit
  3219.    error-text = 1*any-char
  3220.    info-response = "%info" space "on" crlf *(*any-char crlf) "%info"
  3221.            space "off" crlf
  3222.  
  3223.    rwhois-banner = "%rwhois" space version-list space host-name
  3224.            [space implementation] crlf
  3225.    version-list = version *("," version)
  3226.    version = version-number [":" capability-id]
  3227.            / "V-1.5" ":" capability-id
  3228.    version-number = "V-" 1*digit "." 1*digit
  3229.    capability-id = response-id ":" extra-id
  3230.    response-id = 6hex-digit
  3231.    extra-id = 2hex-digit
  3232.    implementation = 1*any-char
  3233.  
  3234.    rwhois-protocol = client-sends / server-returns
  3235.    client-sends = *(directives / rwhois-query)
  3236.    server-returns = *(responses / rwhois-query-result)
  3237.  
  3238.    directives = rwhois-dir / class-dir / directive-dir / display-dir /
  3239.            holdconnect-dir / limit-dir / notify-dir / quit-dir /
  3240.            register-dir / schema-dir / security-dir / soa-dir /
  3241.            status-dir / xfer-dir / x-dir
  3242.  
  3243.  
  3244.  
  3245.  
  3246.  
  3247.  
  3248.  
  3249.  
  3250. Williamson, et. al.          Informational                     [Page 58]
  3251.  
  3252. RFC 2167                    RWhois Protocol                    June 1997
  3253.  
  3254.  
  3255.    responses = rwhois-response / class-response/ directive-response/
  3256.            display-response/ holdconnect-response/ limit-response/
  3257.            notify-response/ quit-response/ register-response/
  3258.            schema-response / security-response/ soa-response/
  3259.            status-response/ xfer-response/ x-response
  3260.  
  3261.    Required Directives
  3262.  
  3263.    rwhois
  3264.  
  3265.    rwhois-dir = "-rwhois" space version-number [space implementation]
  3266.                 crlf
  3267.    rwhois-response = "%rwhois" space version space host-name
  3268.            [space implementation] crlf
  3269.  
  3270.    Optional Directives
  3271.  
  3272.    class
  3273.  
  3274.    class-dir = "-class" space authority-area *(space class-name) crlf
  3275.    class-response = *class-record response
  3276.    class-record = *class-line "%class" crlf
  3277.    class-line = "%class" space class-name ":" "description" ":"
  3278.                 1*any-char crlf
  3279.       / "%class" space class-name ":" "version" ":" time-stamp crlf
  3280.       / "%class" space class-name ":" meta-field ":" meta-value crlf
  3281.    meta-field = 1*id-char
  3282.    meta-value = 1*any-char
  3283.  
  3284.    directive
  3285.  
  3286.    directive-dir = "-directive" *(space directive-name)crlf
  3287.    directive-name = 1*id-char
  3288.    directive-response = *directive-record response
  3289.    directive-record = "%directive" space "directive" ":"
  3290.            directive-name crlf *directive-line "%directive" crlf
  3291.    directive-line = "%directive" space "description" ":" 1*any-char crlf
  3292.            / "%directive" space attribute-name ":" attribute-value crlf
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304.  
  3305.  
  3306. Williamson, et. al.          Informational                     [Page 59]
  3307.  
  3308. RFC 2167                    RWhois Protocol                    June 1997
  3309.  
  3310.  
  3311.    display
  3312.  
  3313.    display-dir = "-display" crlf
  3314.       / "-display" space display-name crlf
  3315.    display-name = 1*id-char
  3316.    display-response = *display-record response
  3317.    display-record = "%display" space "name" ":" display-name crlf
  3318.    *display-line "%display" crlf
  3319.    display-line = "%display" space attribute-name ":" attribute-value
  3320.                   crlf
  3321.  
  3322.    holdconnect
  3323.  
  3324.    holdconnect-dir = "-holdconnect" space on-off crlf
  3325.    holdconnect-response = response
  3326.  
  3327.    limit
  3328.  
  3329.    limit-dir = "-limit" space 1*digit crlf
  3330.    limit-response = response
  3331.  
  3332.    notify
  3333.  
  3334.    notify-dir = "-notify" space "badref" space referral-query crlf
  3335.            / "-notify" space "recurref" space referral-query crlf
  3336.            / "-notify" space "update" space host-port ":" authority-area
  3337.              crlf
  3338.            / "-notify" space "inssec" space host-port ":" authority-area
  3339.              crlf
  3340.            / "-notify" space "delsec" space host-port ":" authority-area
  3341.              crlf
  3342.    referral-query = referral-url space [class-name space] query
  3343.    notify-response = response
  3344.  
  3345.    See the query section for the definitions of referral-url and query.
  3346.  
  3347.    quit
  3348.  
  3349.    quit-dir = "-quit" crlf
  3350.    quit-response = response
  3351.  
  3352.  
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.  
  3360.  
  3361.  
  3362. Williamson, et. al.          Informational                     [Page 60]
  3363.  
  3364. RFC 2167                    RWhois Protocol                    June 1997
  3365.  
  3366.  
  3367.    register
  3368.  
  3369.    register-dir = register-on space "add" space maintainer-id crlf
  3370.            register-add register-off
  3371.            / register-on space "mod" space maintainer-id crlf
  3372.                    register-mod register-off
  3373.            / register-on space "del" space maintainer-id crlf
  3374.                    register-del register-off
  3375.    register-on = "-register" space "on"
  3376.    register-off = "-register" space "off" crlf
  3377.    register-add = 1*(register-line crlf)
  3378.    register-mod = 1*(register-line crlf) "_NEW_" crlf
  3379.                   1*(register-line crlf)
  3380.    register-del = 1*(register-line crlf)
  3381.    maintainer-id = email
  3382.    register-line = attribute-name ":" attribute-value
  3383.    register-on-response = response
  3384.    register-off-response = "%register" space "ID" ":" object-id crlf
  3385.                            response
  3386.            / "%register" space "Updated" ":" time-stamp crlf response
  3387.            / response
  3388.  
  3389.    schema
  3390.  
  3391.    schema-dir = "-schema" space authority-area *(space class-name) crlf
  3392.    schema-response = *schema-record response
  3393.    schema-record = *schema-line "%schema" crlf
  3394.    schema-line = "%schema" space class-name ":" attribute-name ":"
  3395.            attribute-value crlf
  3396.  
  3397.    security
  3398.  
  3399.    security-dir = "-security" space "on" space direction space
  3400.            security-method [space security-data] crlf security-payload
  3401.            ["-security" space "off" crlf]
  3402.    direction = "request" / "response"
  3403.    security-method = "password" / "pgp" / 1*id-char
  3404.    security-data = password-data / pgp-data / 1*any-char
  3405.    password-data = 1*any-char
  3406.    pgp-data = "signed" / "encrypt" [space key-id] / "signed-encrypt"
  3407.               [space key-id]
  3408.    security-payload = *(*any-char crlf)
  3409.    security-response = response
  3410.  
  3411.  
  3412.  
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418. Williamson, et. al.          Informational                     [Page 61]
  3419.  
  3420. RFC 2167                    RWhois Protocol                    June 1997
  3421.  
  3422.  
  3423.    soa
  3424.  
  3425.    soa-dir = "-soa" *(space authority-area) crlf
  3426.    soa-response = *soa-record response
  3427.    soa-record = *soa-line "%soa" crlf
  3428.    soa-line = "%soa" space "authority" ":" authority-area crlf
  3429.       / "%soa" space "ttl" ":" 1*digit crlf
  3430.       / "%soa" space "serial" ":" time-stamp crlf
  3431.       / "%soa" space "refresh" ":" 1*digit crlf
  3432.       / "%soa" space "increment" ":" 1*digit crlf
  3433.       / "%soa" space "retry" ":" 1*digit crlf
  3434.       / "%soa" space "tech-contact" ":" email crlf
  3435.       / "%soa" space "admin-contact" ":" email crlf
  3436.       / "%soa" space "hostmaster" ":" email crlf
  3437.       / "%soa" space "primary" ":" host-port crlf
  3438.       / "%soa" space attribute-name ":" attribute-value crlf
  3439.  
  3440.    status
  3441.  
  3442.    status-dir = "-status" crlf
  3443.    status-response = *status-line response
  3444.    status-line = "%status" space "limit" ":" 1*digit crlf
  3445.       / "%status" space "holdconnect" ":" on-off crlf
  3446.       / "%status" space "forward" ":" on-off crlf
  3447.       / "%status" space "authority" ":" 1*digit crlf
  3448.       / "%status" space "display" ":" 1*any-char crlf
  3449.       / "%status" space "contact" ":" email crlf
  3450.       / "%status" space attribute-name ":" attribute-value crlf
  3451.  
  3452.    xfer
  3453.  
  3454.    xfer-dir = "-xfer" space authority-area *attribute-def
  3455.            [space serial-number] crlf
  3456.    attribute-def = [space "class=" class-name]
  3457.                    *(space "attribute=" attribute-name)
  3458.    serial-number = time-stamp
  3459.    xfer-response = *xfer-record response
  3460.    xfer-record = *xfer-line "%xfer" crlf
  3461.    xfer-line = "%xfer" space class-name ":" attribute-name ":"
  3462.                attribute-value crlf
  3463.  
  3464.    X
  3465.  
  3466.    x-dir = "-X-" x-directive [space *[x-arguments]] crlf
  3467.    x-directive = 1*id-char
  3468.    x-arguments = *any-char
  3469.    x-response = *(*any-char crlf) response
  3470.  
  3471.  
  3472.  
  3473.  
  3474. Williamson, et. al.          Informational                     [Page 62]
  3475.  
  3476. RFC 2167                    RWhois Protocol                    June 1997
  3477.  
  3478.  
  3479.    Query
  3480.  
  3481.    rwhois-query = [class-name space] query crlf
  3482.    query = query-string / attribute-query / query bin-boolean query
  3483.    query-char = <any-char, except """, space, tab>
  3484.    quoted-query-char = query-char / space / tab / "
  3485.    query-string = 1*query-char ["*"] / """ 1*quoted-query-char ["*"] """
  3486.    attribute-query = attribute-name "=" query-string
  3487.    bin-boolean = "and" / "or"
  3488.  
  3489.    rwhois-query-result = *(query-record / referral-record) response
  3490.    query-record = 1*query-line crlf
  3491.    query-line = class-name ":" attribute-name [";" type-char] ":"
  3492.            attribute-value crlf
  3493.    type-char = "T" / "I" / "S"
  3494.    referral-record = 1*(referral-line crlf)
  3495.    referral-line = "%referral" space referral-url
  3496.    referral-url = "rwhois" ":" "//" host-port "/" "auth-area="
  3497.                   authority-area
  3498.  
  3499. Appendix C: Error Codes
  3500.  
  3501.    When a server fails to run a command (directive or query), it returns
  3502.    an error response. The ABNF for an error response is as follows.
  3503.  
  3504.    error-response = "%error" space error-code space error-text
  3505.    error-code = 3digit
  3506.    error-text = 1*any-char
  3507.  
  3508.    An error text may be modified, but its meaning must remain the same.
  3509.    The server may append additional information to it, for example
  3510.    "%error 333 Not master for authority area: foobar.com".
  3511.  
  3512.  
  3513.  
  3514.  
  3515.  
  3516.  
  3517.  
  3518.  
  3519.  
  3520.  
  3521.  
  3522.  
  3523.  
  3524.  
  3525.  
  3526.  
  3527.  
  3528.  
  3529.  
  3530. Williamson, et. al.          Informational                     [Page 63]
  3531.  
  3532. RFC 2167                    RWhois Protocol                    June 1997
  3533.  
  3534.  
  3535.    The following table describes the possible digits in the first,
  3536.    second, and third positions of an error code.
  3537.     XXX    Description
  3538.     1XX    Information only, no action required
  3539.     2XX    Information, action required
  3540.     3XX    Specific command error, retry that command or try another one
  3541.     4XX    Serious for current command, may correct with another command
  3542.     5XX    Fatal, must disconnect
  3543.     X0X    System wide, no specific command
  3544.     X1X    System wide, no specific command
  3545.     X2X    Registration error
  3546.     X3X    Specific command
  3547.     X4X    Specific command
  3548.     X5X    Specific command
  3549.     X6X    Extended message (version specific)
  3550.     XXX    Sequential order
  3551.  
  3552.    The following table gives an ordered list of RWhois error codes.
  3553.    These codes may be extended with implementation- specific codes. An
  3554.    implementation- specific code must have a "6" in the second position.
  3555.  
  3556.     Code    Text
  3557.     120     Registration deferred
  3558.     130     Object not authoritative
  3559.     230     No objects found
  3560.     300     Not compatible with version
  3561.     320     Invalid attribute
  3562.     321     Invalid attribute syntax
  3563.     322     Required attribute missing
  3564.     323     Object reference not found
  3565.     324     Primary key not unique
  3566.     325     Failed to update outdated object
  3567.     330     Exceeded maximum objects limit
  3568.     331     Invalid limit
  3569.     332     Nothing to transfer
  3570.     333     Not master for authority area
  3571.     336     Object not found
  3572.     338     Invalid directive syntax
  3573.     340     Invalid authority area
  3574.     341     Invalid class
  3575.     342     Invalid host/port
  3576.     350     Invalid query syntax
  3577.     351     Query too complex
  3578.     352     Invalid security method
  3579.     353     Authentication failed
  3580.     354     Encryption failed
  3581.     400     Directive not available
  3582.     401     Not authorized for directive
  3583.  
  3584.  
  3585.  
  3586. Williamson, et. al.          Informational                     [Page 64]
  3587.  
  3588. RFC 2167                    RWhois Protocol                    June 1997
  3589.  
  3590.  
  3591.     402     Unidentified error
  3592.     420     Registration not authorized
  3593.     436     Invalid display format
  3594.     500     Memory allocation problem
  3595.     501     Service not available
  3596.     502     Unrecoverable error
  3597.     503     Idle time exceeded
  3598.  
  3599.    The following error codes, defined in [RFC 1714], have been made
  3600.    obsolete:  100, 200, 231, 334, 335, 337, 421, 431, 432, 433, 434,
  3601.    460, 461, and 530.
  3602.  
  3603. Appendix D: Capability ID
  3604.  
  3605.    The capability ID encodes which directives are implemented in the
  3606.    server.  To create a capability ID, perform a logical OR on all the
  3607.    hexadecimal numbers corresponding to the implemented directives. The
  3608.    resulting number is used in the banner, which is sent by the server
  3609.    after opening a connection and as a response to the "-rwhois"
  3610.    directive. The eight most significant bits of the capability ID are
  3611.    reserved for future use:
  3612.  
  3613.     class        000001h
  3614.     directive    000002h
  3615.     display      000004h
  3616.     forward      000008h
  3617.     holdconnect  000010h
  3618.     limit        000020h
  3619.     notify       000040h
  3620.     quit         000080h
  3621.     register     000100h
  3622.     schema       000200h
  3623.     security     000400h
  3624.     soa          000800h
  3625.     status       001000h
  3626.     xfer         002000h
  3627.     X            004000h
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.  
  3640.  
  3641.  
  3642. Williamson, et. al.          Informational                     [Page 65]
  3643.  
  3644. RFC 2167                    RWhois Protocol                    June 1997
  3645.  
  3646.  
  3647. Appendix E: Schema Definitions
  3648.  
  3649. Attribute Definition Model
  3650.  
  3651.  Name         Type  Description
  3652.  
  3653.  Attribute    N     This is the name of the attribute.
  3654.  
  3655.  Description  S     This is a free-form description of the attribute.
  3656.  
  3657.  Type         T     This is a parameter that broadly indicates the use
  3658.                     of the attribute to the protocol. There are three
  3659.                     standard types: TEXT, ID, and SEE-ALSO. The default
  3660.                     is TEXT, which indicates that the value is a text
  3661.                     string.  ID indicates that the attribute contains
  3662.                     the ID of another RWhois object. This type of
  3663.                     attribute is used for database normalization. SEE-
  3664.                     ALSO indicates that the attribute contains a pointer
  3665.                     (a Uniform Resource Identifier (URI)) to some other
  3666.                     kind of external data; for example, a World Wide Web
  3667.                     page or FTP site.
  3668.  
  3669.  Format       S     This is an interpretable string that describes the
  3670.                     acceptance format of the value. The server (and
  3671.                     optionally the client) should match the value to the
  3672.                     format string to determine if the value is
  3673.                     acceptable.  The format of this property is a
  3674.                     keyword indicating the syntax of the format string,
  3675.                     followed by a colon, followed by the format string
  3676.                     itself. Currently, the only keyword recognized is
  3677.                     "re" for POSIX.2 extended regular expressions.
  3678.  
  3679.  Indexed      B     This is a true or false flag that indicates that
  3680.                     this attribute should be indexed (and therefore able
  3681.                     to be searched).
  3682.  
  3683.  Required     B     This is a true or false flag that indicates that
  3684.                     this attribute must have a value.
  3685.  
  3686.  Multi-Line   B     This is a true or false flag that indicates that
  3687.                     this attribute may have multiple instances in an
  3688.                     object; all the instances are to be considered as
  3689.                     multiple lines of the same attribute instance.
  3690.  
  3691.  
  3692.  
  3693.  
  3694.  
  3695.  
  3696.  
  3697.  
  3698. Williamson, et. al.          Informational                     [Page 66]
  3699.  
  3700. RFC 2167                    RWhois Protocol                    June 1997
  3701.  
  3702.  
  3703.  Repeatable   B     This is a true or false flag that indicates that
  3704.                     there may be multiple instances of this attribute in
  3705.                     a class and each instance is to be interpreted as a
  3706.                     separate instance (in contrast to Multi-Line). This
  3707.                     flag is mutually exclusive with Multi-Line: if
  3708.                     Multi-Line is true, then Repeatable must be false
  3709.                     and vice versa.
  3710.  
  3711.  Primary      B     This is a true or false flag that indicates that
  3712.                     this attribute is a primary key. If more than one
  3713.                     attribute in a class is marked as primary, then
  3714.                     these attributes together form a single primary key.
  3715.                     The primary key is intended to be used to force
  3716.                     uniqueness among class instances. Therefore, there
  3717.                     can be only one instance of a primary key in a
  3718.                     database. The Primary flag implies that the
  3719.                     attribute is also required.
  3720.  
  3721.  Hierarchical B     This is a true or false flag that indicates that
  3722.                     this attribute is lexically hierarchical.
  3723.  
  3724.  Private      B     This is a true or false flag that indicates whether
  3725.                     or not this attribute is private (that is, publicly
  3726.                     not viewable). It defaults to false. If it is true,
  3727.                     then only the clients that satisfy the
  3728.                     authentication/encryption requirements of a guardian
  3729.                     are able to view the attribute-value pair.
  3730.  
  3731.  
  3732.  
  3733.  
  3734.  
  3735.  
  3736.  
  3737.  
  3738.  
  3739.  
  3740.  
  3741.  
  3742.  
  3743.  
  3744.  
  3745.  
  3746.  
  3747.  
  3748.  
  3749.  
  3750.  
  3751.  
  3752.  
  3753.  
  3754. Williamson, et. al.          Informational                     [Page 67]
  3755.  
  3756. RFC 2167                    RWhois Protocol                    June 1997
  3757.  
  3758.  
  3759.    Type is defined as follows:
  3760.  
  3761.     Type  ABNF Definition
  3762.  
  3763.      B     "ON" / "OFF"
  3764.      N     1*id-char
  3765.      S     1*any-char
  3766.      T     "ID" / "SEE-ALSO" / "TEXT"
  3767.  
  3768.    Base Class
  3769.  
  3770.  Name       Type   Required  RepeatableDescription
  3771.  
  3772.  Class-Name TEXT   Y         N         This attribute is the name of the
  3773.                                        class to which the object
  3774.                                        belongs.
  3775.  
  3776.  Auth-Area  TEXT   Y         N         This attribute is the name of the
  3777.                                        authority area to which the
  3778.                                        object belongs.
  3779.  
  3780.  ID         TEXT   Y         N         This attribute is the universal
  3781.                                        identifier of the object.
  3782.  
  3783.  Updated    TEXT   Y         N         This attribute is a time/date
  3784.                                        stamp that indicates the time of
  3785.                                        last modification of the object.
  3786.  
  3787.  Guardian   ID     N         Y         This attribute is a link to a
  3788.                                        guardian object. Its value is the
  3789.                                        ID of a guardian object.
  3790.  
  3791.  Private    TEXT   N         N         This attribute is a true or false
  3792.                                        flag that indicates whether or
  3793.                                        not an object is private (that
  3794.                                        is, publicly not viewable). It
  3795.                                        defaults to false. If it is
  3796.                                        true, then only the clients
  3797.                                        that satisfy the
  3798.                                        authentication/encryption
  3799.                                        requirements of one of the
  3800.                                        object's guardians are able to
  3801.                                        view the object. If the object
  3802.                                        is publicly viewable, then the
  3803.                                        Private attribute property of
  3804.                                        each of its attributes still
  3805.                                        applies.
  3806.  
  3807.  
  3808.  
  3809.  
  3810. Williamson, et. al.          Informational                     [Page 68]
  3811.  
  3812. RFC 2167                    RWhois Protocol                    June 1997
  3813.  
  3814.  
  3815.  TTL        TEXT   N         N         This attribute is the
  3816.                                        "time-to-live" of a given object.
  3817.                                        It is included only if an object
  3818.                                        has a different time-to-live than
  3819.                                        the default given in the Start of
  3820.                                        Authority information. Its value
  3821.                                        is specified in seconds.
  3822.  
  3823.  
  3824. Appendix F: Changes RWhois V1.0 - V1.5
  3825.  
  3826.    General
  3827.  
  3828.       * Multiple authority areas per server.
  3829.       * Data replication.
  3830.       * Revised schema model.
  3831.       * Revised query routing rules.
  3832.       * Revised error codes.
  3833.       * Removed unnecessary spaces in responses and results.
  3834.  
  3835.    Directives
  3836.  
  3837.       * Class: New. Returns meta-information for a class.
  3838.       * Display: Can return supported display formats.
  3839.       * Load: Obsolete.
  3840.       * Notify: Syntax change.
  3841.       * Private: Obsolete.
  3842.       * Register: Syntax change.
  3843.       * Schema: Syntax change.
  3844.       * Security: Obsoletes Private.
  3845.       * Xfer: Syntax change.
  3846.  
  3847.    Query
  3848.  
  3849.       * Display option removed.
  3850.       * Output format: Only the dump format is standard; optional type
  3851.         character added.
  3852.       * Attribute-restricted query.
  3853.       * Revised referral syntax.
  3854.  
  3855.  
  3856.  
  3857.  
  3858.  
  3859.  
  3860.  
  3861.  
  3862.  
  3863.  
  3864.  
  3865.  
  3866. Williamson, et. al.          Informational                     [Page 69]
  3867.  
  3868.