home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc1353.txt < prev    next >
Text File  |  1996-05-07  |  60KB  |  544 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                     K. McCloghrie Request for Comments: 1353                     Hughes LAN Systems, Inc.                                                                J. Davin                                     MIT Laboratory for Computer Science                                                               J. Galvin                                       Trusted Information Systems, Inc.                                                               July 1992 
  8.  
  9.                       Definitions of Managed Objects                    for Administration of SNMP Parties 
  10.  
  11. Status of this Memo 
  12.  
  13.    This document specifies an IAB standards track protocol for the    Internet community, and requests discussion and suggestions for    improvements. Please refer to the current edition of the "IAB    Official Protocol Standards" for the standardization state and status    of this protocol. Distribution of this memo is unlimited. 
  14.  
  15. Abstract 
  16.  
  17.    This memo defines a portion of the Management Information Base (MIB)    for use with network management protocols in TCP/IP-based internets.    In particular, it describes a representation of the SNMP parties    defined in [8] as objects defined according to the Internet Standard    SMI [1]. These definitions are consistent with the SNMP Security    protocols set forth in [9]. 
  18.  
  19. Table of Contents 
  20.  
  21.    1. The Network Management Framework ...........................    2    2. Objects ....................................................    2    2.1 Format of Definitions .....................................    3    3. Overview ...................................................    3    3.1 Structure .................................................    3    3.2 Instance Identifiers ......................................    3    3.3 Textual Conventions .......................................    4    4. Definitions ................................................    4    4.1 The SNMP Party Public Database Group ......................    9    4.2 The SNMP Party Secrets Database Group .....................   15    4.3 The SNMP Access Privileges Database Group .................   18    4.4 The MIB View Database Group ...............................   21    5. Acknowledgments ............................................   25    6. References .................................................   25    7. Security Considerations.....................................   26    8. Authors' Addresses..........................................   26 
  22.  
  23.  
  24.  
  25.  McCloghrie, Davin, & Galvin                                     [Page 1] 
  26.  RFC 1353                     SNMP Party MIB                    July 1992 
  27.  
  28.  1.  The Network Management Framework 
  29.  
  30.    the Internet-standard Network Management Framework consists of three    components.  They are: 
  31.  
  32.       RFC 1155 which defines the SMI, the mechanisms used for describing       and naming objects for the purpose of management.  RFC 1212       defines a more concise description mechanism, which is wholly       consistent with the SMI. 
  33.  
  34.       RFC 1156 which defines MIB-I, the core set of managed objects for       the Internet suite of protocols.  RFC 1213, defines MIB-II, an       evolution of MIB-I based on implementation experience and new       operational requirements. 
  35.  
  36.       RFC 1157 which defines the SNMP, the protocol used for network       access to managed objects. 
  37.  
  38.    The Framework permits new objects to be defined for the purpose of    experimentation and evaluation. 
  39.  
  40. 2.  Objects 
  41.  
  42.    Managed objects are accessed via a virtual information store, termed    the Management Information Base or MIB.  Objects in the MIB are    defined using the subset of Abstract Syntax Notation One (ASN.1) [5]    defined in the SMI.  In particular, each object has a name, a syntax,    and an encoding.  The name is an object identifier, an    administratively assigned name, which specifies an object type.  The    object type together with an object instance serves to uniquely    identify a specific instantiation of the object.  For human    convenience, we often use a textual string, termed the OBJECT    DESCRIPTOR, to also refer to the object type. 
  43.  
  44.    The syntax of an object type defines the abstract data structure    corresponding to that object type.  The ASN.1 language is used for    this purpose.  However, the SMI [1] purposely restricts the ASN.1    constructs which may be used.  These restrictions are explicitly made    for simplicity. 
  45.  
  46.    The encoding of an object type is simply how that object type is    represented using the object type's syntax.  Implicitly tied to the    notion of an object type's syntax and encoding is how the object type    is represented when being transmitted on the network. 
  47.  
  48.    The SMI specifies the use of the basic encoding rules of ASN.1 [6],    subject to the additional requirements imposed by the SNMP. 
  49.  
  50.  
  51.  
  52.  McCloghrie, Davin, & Galvin                                     [Page 2] 
  53.  RFC 1353                     SNMP Party MIB                    July 1992 
  54.  
  55.  2.1.  Format of Definitions 
  56.  
  57.    Section 4 contains the specification of all object types contained in    this MIB module.  The object types are defined using the conventions    defined in the SMI, as amended by the extensions specified in [7]. 
  58.  
  59. 3.  Overview 
  60.  
  61. 3.1.  Structure 
  62.  
  63.    This MIB contains the definitions for four tables, a number of OBJECT    IDENTIFIER assignments, and some conventions for initial use with    some of the assignments.  The four tables are the SNMP Party Public    database, the SNMP Party Secrets database, the SNMP Access Control    database, and the SNMP Views database. 
  64.  
  65.    The SNMP Party Public database and the SNMP Party Secrets database    are defined as separate tables specifically for the purpose of    positioning them in different parts of the MIB tree namespace.  In    particular, the SNMP Party Secrets database contains secret    information, for which security demands that access to it be limited    to parties which use both authentication and privacy.  It is    therefore positioned in a separate branch of the MIB tree so as to    provide for the easiest means of accommodating the required    limitation. 
  66.  
  67.    In contrast, the SNMP Party Public database contains public    information about SNMP parties.  In particular, it contains the    parties' clocks which need to be read-able (but not write-able) by    unauthenticated queries, since an unauthenticated query of a party's    clock is the first step of the procedure to re-establish clock    synchronization (see [9]). 
  68.  
  69.    The objects in this MIB are organized into four groups.  All four of    the groups are mandatory for those SNMP implementations that realize    the security framework and mechanisms defined in [8] and [9]. 
  70.  
  71. 3.2.  Instance Identifiers 
  72.  
  73.    In all four of the tables in this MIB, the object instances are    identified by values which have an underlying syntax of OBJECT    IDENTIFIER.  For the Party Public database and the Party Secrets    database, the index variable is the party identifier.  For the Access    Control database and the Views database, two index variables are    defined, both of which have a syntax of OBJECT IDENTIFIER.  (See the    INDEX clauses in the MIB definitions below for the specific    variables.) 
  74.  
  75.  
  76.  
  77.  McCloghrie, Davin, & Galvin                                     [Page 3] 
  78.  RFC 1353                     SNMP Party MIB                    July 1992 
  79.  
  80.     According to RFC 1212 [7], section 4.1.6, the syntax of the object(s)    specified in an INDEX clause indicates how to form the instance-    identifier.  In particular, for each index object which is object    identifier-valued, its contribution to the instance identifier is: 
  81.  
  82.       `n+1' sub-identifiers, where `n' is the number of sub-identifiers       in the value (the first sub-identifier is `n' itself, following       this, each sub-identifier in the value is copied). 
  83.  
  84. 3.3.  Textual Conventions 
  85.  
  86.    The datatypes, Party, Clock, and TAddress, are used as textual    conventions in this document.  These textual conventions have NO    effect on either the syntax nor the semantics of any managed object.    Objects defined using these conventions are always encoded by means    of the rules that define their primitive type.  Hence, no changes to    the SMI or the SNMP are necessary to accommodate these textual    conventions which are adopted merely for the convenience of readers. 
  87.  
  88. 4.  Definitions 
  89.  
  90.           RFC1353-MIB DEFINITIONS ::= BEGIN 
  91.  
  92.           IMPORTS                   system, mib, private, internet    FROM RFC1155-SMI                   OBJECT-TYPE                       FROM RFC-1212; 
  93.  
  94.           snmpParties     OBJECT IDENTIFIER ::= { mib-2 20 }           partyAdmin      OBJECT IDENTIFIER ::= { snmpParties 1 }           partyPublic     OBJECT IDENTIFIER ::= { snmpParties 2 } 
  95.  
  96.           snmpSecrets     OBJECT IDENTIFIER ::= { mib-2 21 }           partyPrivate    OBJECT IDENTIFIER ::= { snmpSecrets 1 }           partyAccess     OBJECT IDENTIFIER ::= { snmpSecrets 2 }           partyViews      OBJECT IDENTIFIER ::= { snmpSecrets 3 } 
  97.  
  98.            --                  Textual Conventions 
  99.  
  100.           --    A textual convention denoting a SNMP party identifier: 
  101.  
  102.           Party ::= OBJECT IDENTIFIER 
  103.  
  104.            --    A party's authentication clock - a non-negative integer           -- which is incremented as specified/allowed by the party's           -- Authentication Protocol.           --    For noAuth, a party's authentication clock is unused and 
  105.  
  106.  
  107.  
  108. McCloghrie, Davin, & Galvin                                     [Page 4] 
  109.  RFC 1353                     SNMP Party MIB                    July 1992 
  110.  
  111.            -- its value is undefined.           --    For md5AuthProtocol, a party's authentication clock is a           -- relative clock with 1-second granularity. 
  112.  
  113.           Clock ::= INTEGER (0..2147483647) 
  114.  
  115.            --    A textual convention denoting a transport service           -- address.           --    For rfc1351Domain, a TAddress is 6 octets long,           -- the initial 4 octets containing the IP-address in           -- network-byte order and the last 2 containing the           -- UDP port in network-byte order. 
  116.  
  117.           TAddress ::= OCTET STRING 
  118.  
  119.            --- Definitions of Security Protocols 
  120.  
  121.           partyProtocols               OBJECT IDENTIFIER ::= { partyAdmin 1 } 
  122.  
  123.           noAuth                  -- The protocol without authentication               OBJECT IDENTIFIER ::= { partyProtocols 1 } 
  124.  
  125.           noPriv                  -- The protocol without privacy               OBJECT IDENTIFIER ::= { partyProtocols 3 } 
  126.  
  127.           desPrivProtocol         -- The DES Privacy Protocol               OBJECT IDENTIFIER ::= { partyProtocols 4 } 
  128.  
  129.           md5AuthProtocol         -- The MD5 Authentication Protocol               OBJECT IDENTIFIER ::= { partyProtocols 5 } 
  130.  
  131.            --- definitions of Transport Domains 
  132.  
  133.           transportDomains               OBJECT IDENTIFIER ::= { partyAdmin 2 } 
  134.  
  135.           rfc1351Domain --- RFC-1351 (SNMP over UDP, using SNMP Parties)               OBJECT IDENTIFIER ::= { transportDomains 1 } 
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145. McCloghrie, Davin, & Galvin                                     [Page 5] 
  146.  RFC 1353                     SNMP Party MIB                    July 1992 
  147.  
  148.            --- definitions of Proxy Domains 
  149.  
  150.           proxyDomains               OBJECT IDENTIFIER ::= { partyAdmin 3 } 
  151.  
  152.           noProxy                --- Local operation               OBJECT IDENTIFIER ::= { proxyDomains 1 } 
  153.  
  154.            ---    Definition of Initial Party Identifiers 
  155.  
  156.           --  When devices are installed, they need to be configured           --  with an initial set of SNMP parties.  The configuration           --  of SNMP parties requires (among other things) the           --  assignment of several OBJECT IDENTIFIERs.  Any local           --  network administration can obtain the delegated           --  authority necessary to assign its own OBJECT           --  IDENTIFIERs.  However, to provide for those           --  administrations who have not obtained the necessary           --  authority, this document allocates a branch of the           --  naming tree for use with the following conventions. 
  157.  
  158.           initialPartyId               OBJECT IDENTIFIER ::= { partyAdmin 4 } 
  159.  
  160.           --  Note these are identified as "initial" party identifiers           --  since these allow secure SNMP communication to proceed,           --  thereby allowing further SNMP parties to be configured           --  through use of the SNMP itself. 
  161.  
  162.           --  The following definitions identify a party identifier,           --  and specify the initial values of various object           --  instances indexed by that identifier.  In addition,           --  the initial MIB view and access control parameters           --  assigned, by convention, to these parties are identified. 
  163.  
  164.           --    Party Identifiers for use as initial SNMP parties           --       at IP address  a.b.c.d 
  165.  
  166.           -- partyIdentity            = { initialPartyId a b c d 1 }           -- partyTDomain             = { rfc1351Domain }           -- partyTAddress            = a.b.c.d, 161           -- partyProxyFor            = { noProxy }           -- partyAuthProtocol        = { noAuth }           -- partyAuthClock           = 0           -- partySecretsAuthPrivate  = ''h    (the empty string)           -- partyAuthPublic          = ''h    (the empty string)           -- partyAuthLifetime        = 0 
  167.  
  168.  
  169.  
  170. McCloghrie, Davin, & Galvin                                     [Page 6] 
  171.  RFC 1353                     SNMP Party MIB                    July 1992 
  172.  
  173.            -- partyPrivProtocol        = { noPriv }           -- partySecretsPrivPrivate  = ''h    (the empty string)           -- partyPrivPublic          = ''h    (the empty string) 
  174.  
  175.           -- partyIdentity            = { initialPartyId a b c d 2 }           -- partyTDomain             = { rfc1351Domain }           -- partyTAddress            = assigned by local administration           -- partyProxyFor            = { noProxy }           -- partyAuthProtocol        = { noAuth }           -- partyAuthClock           = 0           -- partySecretsAuthPrivate  = ''h    (the empty string)           -- partyAuthPublic          = ''h    (the empty string)           -- partyAuthLifetime        = 0           -- partyPrivProtocol        = { noPriv }           -- partySecretsPrivPrivate  = ''h    (the empty string)           -- partyPrivPublic          = ''h    (the empty string) 
  176.  
  177.           -- partyIdentity            = { initialPartyId a b c d 3 }           -- partyTDomain             = { rfc1351Domain }           -- partyTAddress            = a.b.c.d, 161           -- partyProxyFor            = { noProxy }           -- partyAuthProtocol        = { md5AuthProtocol }           -- partyAuthClock           = 0           -- partySecretsAuthPrivate  = assigned by local administration           -- partyAuthPublic          = ''h    (the empty string)           -- partyAuthLifetime        = 300           -- partyPrivProtocol        = { noPriv }           -- partySecretsPrivPrivate  = ''h    (the empty string)           -- partyPrivPublic          = ''h    (the empty string) 
  178.  
  179.           -- partyIdentity            = { initialPartyId a b c d 4 }           -- partyTDomain             = { rfc1351Domain }           -- partyTAddress            = assigned by local administration           -- partyProxyFor            = { noProxy }           -- partyAuthProtocol        = { md5AuthProtocol }           -- partyAuthClock           = 0           -- partySecretsAuthPrivate  = assigned by local administration           -- partyAuthPublic          = ''h    (the empty string)           -- partyAuthLifetime        = 300           -- partyPrivProtocol        = { noPriv }           -- partySecretsPrivPrivate  = ''h    (the empty string)           -- partyPrivPublic          = ''h    (the empty string) 
  180.  
  181.           -- partyIdentity            = { initialPartyId a b c d 5 }           -- partyTDomain             = { rfc1351Domain }           -- partyTAddress            = a.b.c.d, 161           -- partyProxyFor            = { noProxy }           -- partyAuthProtocol        = { md5AuthProtocol } 
  182.  
  183.  
  184.  
  185. McCloghrie, Davin, & Galvin                                     [Page 7] 
  186.  RFC 1353                     SNMP Party MIB                    July 1992 
  187.  
  188.            -- partyAuthClock           = 0           -- partySecretsAuthPrivate  = assigned by local administration           -- partyAuthPublic          = ''h    (the empty string)           -- partyAuthLifetime        = 300           -- partyPrivProtocol        = { desPrivProtocol }           -- partySecretsPrivPrivate  = assigned by local administration           -- partyPrivPublic          = ''h    (the empty string) 
  189.  
  190.           -- partyIdentity            = { initialPartyId a b c d 6 }           -- partyTDomain             = { rfc1351Domain }           -- partyTAddress            = assigned by local administration           -- partyProxyFor            = { noProxy }           -- partyAuthProtocol        = { md5AuthProtocol }           -- partyAuthClock           = 0           -- partySecretsAuthPrivate  = assigned by local administration           -- partyAuthPublic          = ''h    (the empty string)           -- partyAuthLifetime        = 300           -- partyPrivProtocol        = { desPrivProtocol }           -- partySecretsPrivPrivate  = assigned by local administration           -- partyPrivPublic          = ''h   (the empty string) 
  191.  
  192.            --  The initial access control parameters assigned, by           --  convention, to these parties are: 
  193.  
  194.           -- aclTarget     = { initialPartyId a b c d 1 }           -- aclSubject    = { initialPartyId a b c d 2 }           -- aclPrivileges = 3 (Get & Get-Next) 
  195.  
  196.           -- aclTarget     = { initialPartyId a b c d 2 }           -- aclSubject    = { initialPartyId a b c d 1 }           -- aclPrivileges = 20 (GetResponse & Trap) 
  197.  
  198.           -- aclTarget     = { initialPartyId a b c d 3 }           -- aclSubject    = { initialPartyId a b c d 4 }           -- aclPrivileges = 11 (Get, Get-Next & Set) 
  199.  
  200.           -- aclTarget     = { initialPartyId a b c d 4 }           -- aclSubject    = { initialPartyId a b c d 3 }           -- aclPrivileges = 20 (GetResponse & Trap) 
  201.  
  202.           -- aclTarget     = { initialPartyId a b c d 5 }           -- aclSubject    = { initialPartyId a b c d 6 }           -- aclPrivileges = 11 (Get, Get-Next & Set) 
  203.  
  204.           -- aclTarget     = { initialPartyId a b c d 6 }           -- aclSubject    = { initialPartyId a b c d 5 }           -- aclPrivileges = 20 (GetResponse & Trap) 
  205.  
  206.  
  207.  
  208. McCloghrie, Davin, & Galvin                                     [Page 8] 
  209.  RFC 1353                     SNMP Party MIB                    July 1992 
  210.  
  211.            --  The initial MIB views assigned, by convention, to           --  these parties are: 
  212.  
  213.           -- viewParty    = { initialPartyId a b c d 1 }           -- viewSubtree  = { system }           -- viewStatus   = { included }           -- viewMask     = { ''h } 
  214.  
  215.           -- viewParty    = { initialPartyId a b c d 1 }           -- viewSubtree  = { snmpParties }           -- viewStatus   = { included }           -- viewMask     = { ''h } 
  216.  
  217.           -- viewParty    = { initialPartyId a b c d 3 }           -- viewSubtree  = { internet }           -- viewStatus   = { included }           -- viewMask     = { ''h } 
  218.  
  219.           -- viewParty    = { initialPartyId a b c d 3 }           -- viewSubtree  = { partyPrivate }           -- viewStatus   = { excluded }           -- viewMask     = { ''h } 
  220.  
  221.           -- viewParty    = { initialPartyId a b c d 5 }           -- viewSubtree  = { internet }           -- viewStatus   = { included }           -- viewMask     = { ''h } 
  222.  
  223.            --   The SNMP Party Public Database Group           --           -- The non-secret party information.           --           -- Implementation of the objects in this group is mandatory. 
  224.  
  225.           partyTable OBJECT-TYPE               SYNTAX  SEQUENCE OF PartyEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "The SNMP Party Public database. 
  226.  
  227.                       An agent must ensure that there is, at all times,                       a one-to-one correspondence between entries in                       this table and entries in the partySecretsTable. 
  228.  
  229.                       The creation/deletion of instances in this table                       via SNMP Set-Requests is not allowed.  Instead, 
  230.  
  231.  
  232.  
  233. McCloghrie, Davin, & Galvin                                     [Page 9] 
  234.  RFC 1353                     SNMP Party MIB                    July 1992 
  235.  
  236.                        entries in this table are created/deleted as a                       side-effect of the creation/deletion of                       corresponding entries in the partySecretsTable. 
  237.  
  238.                       Thus, a SNMP Set-Request whose varbinds contain a                       reference to a non-existent instance of a                       partyTable object, but no reference to the                       corresponding instance of a partySecretsTable                       object, will be rejected."           ::= { partyPublic 1 } 
  239.  
  240.           partyEntry OBJECT-TYPE               SYNTAX  PartyEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "Locally held non-secret information about a                       particular SNMP party, which is available for                       access by network management.  Note that this does                       not include all locally held information about a                       party.  In particular, it does not include the                       'last-timestamp' (i.e., the timestamp of the last                       authentic message received) or the 'nonce'                       values."               INDEX  { partyIdentity }               ::= { partyTable 1 } 
  241.  
  242.           PartyEntry ::=               SEQUENCE {                   partyIdentity                       Party,                   partyTDomain                       OBJECT IDENTIFIER,                   partyTAddress                       TAddress,                   partyProxyFor                       Party,                   partyAuthProtocol                       OBJECT IDENTIFIER,                   partyAuthClock                       Clock,                   partyAuthPublic                       OCTET STRING,                   partyAuthLifetime                       INTEGER,                   partyPrivProtocol                       OBJECT IDENTIFIER,                   partyPrivPublic 
  243.  
  244.  
  245.  
  246. McCloghrie, Davin, & Galvin                                    [Page 10] 
  247.  RFC 1353                     SNMP Party MIB                    July 1992 
  248.  
  249.                        OCTET STRING,                   partyMaxMessageSize                       INTEGER,                   partyStatus                       INTEGER               } 
  250.  
  251.           partyIdentity  OBJECT-TYPE               SYNTAX  Party               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "A party identifier uniquely identifying a                       particular SNMP party."               ::= { partyEntry 1 } 
  252.  
  253.           partyTDomain  OBJECT-TYPE               SYNTAX  OBJECT IDENTIFIER               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "Indicates the kind of transport service by which                       the party receives network management traffic. An                       example of a transport domain is 'rfc1351Domain'                       (SNMP over UDP)."               DEFVAL  { rfc1351Domain }               ::= { partyEntry 2 } 
  254.  
  255.           partyTAddress  OBJECT-TYPE               SYNTAX  TAddress               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The transport service address by which the party                       receives network management traffic, formatted                       according to the corresponding value of                       partyTDomain.  For rfc1351Domain, partyTAddress is                       formatted as a 4-octet IP Address concatenated                       with a 2-octet UDP port number."               DEFVAL  { '000000000000'h }               ::= { partyEntry 3 } 
  256.  
  257.           partyProxyFor OBJECT-TYPE               SYNTAX  Party               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The identity of a second SNMP party or other 
  258.  
  259.  
  260.  
  261. McCloghrie, Davin, & Galvin                                    [Page 11] 
  262.  RFC 1353                     SNMP Party MIB                    July 1992 
  263.  
  264.                        management entity with which interaction may be                       necessary to satisfy received management requests.                       In this context, the distinguished value { noProxy                       } signifies that the party responds to received                       management requests by entirely local mechanisms."               DEFVAL  { noProxy }               ::= { partyEntry 4 } 
  265.  
  266.           partyAuthProtocol OBJECT-TYPE               SYNTAX  OBJECT IDENTIFIER               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The authentication protocol by which all messages                       generated by the party are authenticated as to                       origin and integrity.  In this context, the value                       { noAuth } signifies that messages generated by                       the party are not authenticated."               DEFVAL  { md5AuthProtocol }               ::= { partyEntry 5 } 
  267.  
  268.           partyAuthClock OBJECT-TYPE               SYNTAX  Clock               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The authentication clock which represents the                       local notion of the current time specific to the                       party.  This value must not be decremented unless                       the party's secret information is changed                       simultaneously, at which time the party's nonce                       and last-timestamp values must also be reset to                       zero, and the new value of the clock,                       respectively."               DEFVAL  { 0 }               ::= { partyEntry 6 } 
  269.  
  270.           partyAuthPublic OBJECT-TYPE               SYNTAX  OCTET STRING -- for md5AuthProtocol: (SIZE (0..16))               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "A publically-readable value for the party. 
  271.  
  272.                       Depending on the party's authentication protocol,                       this value may be needed to support the party's                       authentication protocol.  Alternatively, it may be                       used by a manager during the procedure for 
  273.  
  274.  
  275.  
  276. McCloghrie, Davin, & Galvin                                    [Page 12] 
  277.  RFC 1353                     SNMP Party MIB                    July 1992 
  278.  
  279.                        altering secret information about a party.  (For                       example, by altering the value of an instance of                       this object in the same SNMP Set-Request used to                       update an instance of partyAuthPrivate, a                       subsequent Get-Request can determine if the Set-                       Request was successful in the event that no                       response to the Set-Request is received, see RFC                       1352.) 
  280.  
  281.                       The length of the value is dependent on the                       party's authentication protocol.  If not used by                       the authentication protocol, it is recommended                       that agents support values of any length up to and                       including the length of the corresponding                       partyAuthPrivate object."               DEFVAL  { ''h }      -- the empty string               ::= { partyEntry 7 } 
  282.  
  283.           partyAuthLifetime OBJECT-TYPE               SYNTAX  INTEGER (0..2147483647)               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The lifetime (in units of seconds) which                       represents an administrative upper bound on                       acceptable delivery delay for protocol messages                       generated by the party."               DEFVAL  { 300 }               ::= { partyEntry 8 } 
  284.  
  285.           partyPrivProtocol OBJECT-TYPE               SYNTAX  OBJECT IDENTIFIER               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The privacy protocol by which all protocol                       messages received by the party are protected from                       disclosure.  In this context, the value { noPriv }                       signifies that messages received by the party are                       not protected."               DEFVAL  { noPriv }               ::= { partyEntry 9 } 
  286.  
  287.           partyPrivPublic OBJECT-TYPE               SYNTAX  OCTET STRING -- for desPrivProtocol: (SIZE (0..16))               ACCESS  read-write               STATUS  mandatory               DESCRIPTION 
  288.  
  289.  
  290.  
  291. McCloghrie, Davin, & Galvin                                    [Page 13] 
  292.  RFC 1353                     SNMP Party MIB                    July 1992 
  293.  
  294.                        "A publically-readable value for the party. 
  295.  
  296.                       Depending on the party's privacy protocol, this                       value may be needed to support the party's privacy                       protocol.  Alternatively, it may be used by a                       manager as a part of its procedure for altering                       secret information about a party.  (For example,                       by altering the value of an instance of this                       object in the same SNMP Set-Request used to update                       an instance of partyPrivPrivate, a subsequent                       Get-Request can determine if the Set-Request was                       successful in the event that no response to the                       Set-Request is received, see RFC 1352.) 
  297.  
  298.                       The length of the value is dependent on the                       party's privacy protocol.  If not used by the                       privacy protocol, it is recommended that agents                       support values of any length up to and including                       the length of the corresponding partyPrivPrivate                       object."               DEFVAL  { ''h }     -- the empty string               ::= { partyEntry 10 } 
  299.  
  300.           partyMaxMessageSize OBJECT-TYPE               SYNTAX  INTEGER (484..65507)               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The maximum length in octets of a SNMP message                       which this party will accept.  For parties which                       execute at an agent, the agent initializes this                       object to the maximum length supported by the                       agent, and does not let the object be set to any                       larger value.  For parties which do not execute at                       the agent, the agent must allow the manager to set                       this object to any legal value, even if it is                       larger than the agent can generate."               DEFVAL  { 484 }               ::= { partyEntry 11 } 
  301.  
  302.           partyStatus OBJECT-TYPE               SYNTAX  INTEGER  { valid(1), invalid(2) }               ACCESS  read-only               STATUS  mandatory               DESCRIPTION                       "The status of the locally-held information on a                       particular SNMP party. 
  303.  
  304.  
  305.  
  306.  McCloghrie, Davin, & Galvin                                    [Page 14] 
  307.  RFC 1353                     SNMP Party MIB                    July 1992 
  308.  
  309.                        The instance of this object for a particular party                       and the instance of partySecretsStatus for the                       same party always have the same value. 
  310.  
  311.                       This object will typically provide unrestricted                       read-only access to the status of parties.  In                       contrast, partySecretsStatus will typically                       provide restricted read-write access to the status                       of parties."               ::= { partyEntry 12 } 
  312.  
  313.            --   The SNMP Party Secrets Database Group 
  314.  
  315.           -- The secret party information           --           -- Implementation of the objects in this group is mandatory. 
  316.  
  317.           partySecretsTable OBJECT-TYPE               SYNTAX  SEQUENCE OF PartySecretsEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "The SNMP Party Secrets database."           ::= { partyPrivate 1 } 
  318.  
  319.           partySecretsEntry OBJECT-TYPE               SYNTAX  PartySecretsEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "Locally held secret information about a                       particular SNMP party, which is available for                       access by network management. 
  320.  
  321.                       When a SNMP Set-Request is used to update the                       values of instances of objects in this table, it                       is recommended that the same SNMP Set-Request also                       alter the value of a non-secret object instance                       (e.g., an instance of partyAuthPublic or                       partyPrivPublic).  This allows a Get-Request of                       that non-secret object instance to determine if                       the Set-Request was successful in the event that                       no response which matches the Set-Request is                       received, see RFC 1352."               INDEX  { partySecretsIdentity }               ::= { partySecretsTable 1 } 
  322.  
  323.  
  324.  
  325.  McCloghrie, Davin, & Galvin                                    [Page 15] 
  326.  RFC 1353                     SNMP Party MIB                    July 1992 
  327.  
  328.            PartySecretsEntry ::=               SEQUENCE {                   partySecretsIdentity                       Party,                   partySecretsAuthPrivate                       OCTET STRING,                   partySecretsPrivPrivate                       OCTET STRING,                   partySecretsStatus                       INTEGER               } 
  329.  
  330.           partySecretsIdentity  OBJECT-TYPE               SYNTAX  Party               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "A party identifier uniquely identifying a                       particular SNMP party."               ::= { partySecretsEntry 1 } 
  331.  
  332.           partySecretsAuthPrivate OBJECT-TYPE               SYNTAX  OCTET STRING   -- for md5AuthProtocol: (SIZE (16))               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "An encoding of the party's private authentication                       key which may be needed to support the                       authentication protocol.  Although the value of                       this variable may be altered by a management                       operation (e.g., a SNMP Set-Request), its value                       can never be retrieved by a management operation:                       when read, the value of this variable is the zero                       length OCTET STRING. 
  333.  
  334.                       The private authentication key is NOT directly                       represented by the value of this variable, but                       rather it is represented according to an encoding.                       This encoding is the bitwise exclusive-OR of the                       old key with the new key, i.e., of the old private                       authentication key (prior to the alteration) with                       the new private authentication key (after the                       alteration).  Thus, when processing a received                       protocol Set operation, the new private                       authentication key is obtained from the value of                       this variable as the result of a bitwise                       exclusive-OR of the variable's value and the old                       private authentication key.  In calculating the 
  335.  
  336.  
  337.  
  338. McCloghrie, Davin, & Galvin                                    [Page 16] 
  339.  RFC 1353                     SNMP Party MIB                    July 1992 
  340.  
  341.                        exclusive-OR, if the old key is shorter than the                       new key, zero-valued padding is appended to the                       old key.  If no value for the old key exists, a                       zero-length OCTET STRING is used in the                       calculation."               DEFVAL  { ''h }     -- the empty string               ::= { partySecretsEntry 2 } 
  342.  
  343.           partySecretsPrivPrivate OBJECT-TYPE               SYNTAX  OCTET STRING   -- for desPrivProtocol: (SIZE (16))               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "An encoding of the party's private encryption key                       which may be needed to support the privacy                       protocol.  Although the value of this variable may                       be altered by a management operation (e.g., a SNMP                       Set-Request), its value can never be retrieved by                       a management operation: when read, the value of                       this variable is the zero length OCTET STRING. 
  344.  
  345.                       The private encryption key is NOT directly                       represented by the value of this variable, but                       rather it is represented according to an encoding.                       This encoding is the bitwise exclusive-OR of the                       old key with the new key, i.e., of the old private                       encryption key (prior to the alteration) with the                       new private encryption key (after the alteration).                       Thus, when processing a received protocol Set                       operation, the new private encryption key is                       obtained from the value of this variable as the                       result of a bitwise exclusive-OR of the variable's                       value and the old private encryption key.  In                       calculating the exclusive-OR, if the old key is                       shorter than the new key, zero-valued padding is                       appended to the old key.  If no value for the old                       key exists, a zero-length OCTET STRING is used in                       the calculation."               DEFVAL  { ''h }     -- the empty string               ::= { partySecretsEntry 3 } 
  346.  
  347.           partySecretsStatus OBJECT-TYPE               SYNTAX  INTEGER  { valid(1), invalid(2) }               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The status of the locally-held information on a                       particular SNMP party. 
  348.  
  349.  
  350.  
  351. McCloghrie, Davin, & Galvin                                    [Page 17] 
  352.  RFC 1353                     SNMP Party MIB                    July 1992 
  353.  
  354.                        Setting an instance of this object to the value                       'valid(1)' has the effect of ensuring that valid                       local knowledge exists for the corresponding                       party.  For valid local knowledge to exist, there                       must be corresponding instances of each object in                       this table and in the partyTable.  Thus, the                       creation of instances in the partyTable (but not                       in the aclTable or viewTable) occurs as a direct                       result of the creation of instances in this table. 
  355.  
  356.                       Setting an instance of this object to the value                       'invalid(2)' has the effect of invalidating all                       local knowledge of the corresponding party,                       including the invalidating of any/all entries in                       the partyTable, the partySecretsTable, the                       aclTable, and the viewTable which reference said                       party. 
  357.  
  358.                       It is an implementation-specific matter as to                       whether the agent removes an invalidated entry                       from the table.  Accordingly, management stations                       must be prepared to receive from agents tabular                       information corresponding to entries not currently                       in use.  Proper interpretation of such entries                       requires examination of the relevant                       partySecretsStatus object."               DEFVAL  { valid }               ::= { partySecretsEntry 4 } 
  359.  
  360.            --  The SNMP Access Privileges Database Group 
  361.  
  362.           --  This group of objects allows the SNMP itself to be used to           --  configure new SNMP parties, or to manipulate the access           --  privileges of existing parties.           --           --  Implementation of the objects in this group is mandatory. 
  363.  
  364.            aclTable OBJECT-TYPE               SYNTAX  SEQUENCE OF AclEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "The access privileges database."           ::= { partyAccess 1 } 
  365.  
  366.  
  367.  
  368.  
  369.  
  370. McCloghrie, Davin, & Galvin                                    [Page 18] 
  371.  RFC 1353                     SNMP Party MIB                    July 1992 
  372.  
  373.            aclEntry OBJECT-TYPE               SYNTAX  AclEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "The access privileges for a particular requesting                       SNMP party in accessing a particular target SNMP                       party."               INDEX  { aclTarget, aclSubject }               ::= { aclTable 1 } 
  374.  
  375.           AclEntry ::=               SEQUENCE {                   aclTarget                       Party,                   aclSubject                       Party,                   aclPrivileges                       INTEGER,                   aclStatus                       INTEGER               } 
  376.  
  377.           aclTarget OBJECT-TYPE               SYNTAX  Party               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The target SNMP party whose performance of                       management operations is constrained by this set                       of access privileges."               ::= { aclEntry 1 } 
  378.  
  379.           aclSubject OBJECT-TYPE               SYNTAX  Party               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The subject SNMP party whose requests for                       management operations to be performed is                       constrained by this set of access privileges."               ::= { aclEntry 2 } 
  380.  
  381.           aclPrivileges OBJECT-TYPE               SYNTAX  INTEGER (0..31)               ACCESS  read-write               STATUS  mandatory               DESCRIPTION 
  382.  
  383.  
  384.  
  385. McCloghrie, Davin, & Galvin                                    [Page 19] 
  386.  RFC 1353                     SNMP Party MIB                    July 1992 
  387.  
  388.                        "The access privileges which govern what                       management operations a particular target party                       may perform when requested by a particular subject                       party.  These privileges are specified as a sum of                       values, where each value specifies a SNMP PDU type                       by which the subject party may request a permitted                       operation.  The value for a particular PDU type is                       computed as 2 raised to the value of the ASN.1                       context-specific tag for the appropriate SNMP PDU                       type.  The values (for the tags defined in RFC                       1157) are defined in RFC 1351 as: 
  389.  
  390.                        Get         :   1                        GetNext     :   2                        GetResponse :   4                        Set         :   8                        Trap        :  16 
  391.  
  392.                       The null set is represented by the value zero."               DEFVAL  { 3 }      -- Get & Get-Next               ::= { aclEntry 3 } 
  393.  
  394.           aclStatus OBJECT-TYPE               SYNTAX  INTEGER  { valid(1), invalid(2) }               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The status of the access privileges for a                       particular requesting SNMP party in accessing a                       particular target SNMP party.  Setting an instance                       of this object to the value 'invalid(2)' has the                       effect of invalidating the corresponding access                       privileges. 
  395.  
  396.                       It is an implementation-specific matter as to                       whether the agent removes an invalidated entry                       from the table.  Accordingly, management stations                       must be prepared to receive from agents tabular                       information corresponding to entries not currently                       in use.  Proper interpretation of such entries                       requires examination of the relevant aclStatus                       object."               DEFVAL  { valid }               ::= { aclEntry 4 } 
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404. McCloghrie, Davin, & Galvin                                    [Page 20] 
  405.  RFC 1353                     SNMP Party MIB                    July 1992 
  406.  
  407.            --   The MIB View Database Group 
  408.  
  409.           --  This group of objects allows the SNMP itself to be used to           --  configure new SNMP parties, or to manipulate the MIB           --  MIB views of existing parties.           --           --  Implementation of the objects in this group is mandatory. 
  410.  
  411.            viewTable OBJECT-TYPE               SYNTAX  SEQUENCE OF ViewEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "The table contained in the local database which                       defines local MIB views.  Each SNMP party has a                       single MIB view which is defined by two                       collections of view subtrees: the included view                       subtrees, and the excluded view subtrees.  Every                       such subtree, both included and excluded, is                       defined in this table. 
  412.  
  413.                       To determine if a particular object instance is in                       a particular SNMP party's MIB view, compare the                       object instance's Object Identifier with each                       entry (for this party) in this table.  If none                       match, then the object instance is not in the MIB                       view.  If one or more match, then the object                       instance is included in, or excluded from, the MIB                       view according to the value of viewStatus in the                       entry whose value of viewSubtree has the most                       sub-identifiers.  If multiple entries match and                       have the same number of sub-identifiers, then the                       lexicographically greatest instance of viewStatus                       determines the inclusion or exclusion. 
  414.  
  415.                       An object instance's Object Identifier X matches                       an entry in this table when the number of sub-                       identifiers in X is at least as many as in the                       value of viewSubtree for the entry, and each sub-                       identifier in the value of viewSubtree matches its                       corresponding sub-identifier in X.  Two sub-                       identifiers match either if the corresponding bit                       of viewMask is zero (the 'wild card' value), or if                       they are equal. 
  416.  
  417.                       Due to this 'wild card' capability, we introduce                       the term, a 'family' of view subtrees, to refer to 
  418.  
  419.  
  420.  
  421. McCloghrie, Davin, & Galvin                                    [Page 21] 
  422.  RFC 1353                     SNMP Party MIB                    July 1992 
  423.  
  424.                        the set of subtrees defined by a particular                       combination of values of viewSubtree and viewMask.                       In the case where no 'wild card' is defined in                       viewMask, the family of view subtrees reduces to a                       single view subtree."           ::= { partyViews 1 } 
  425.  
  426.           viewEntry OBJECT-TYPE               SYNTAX  ViewEntry               ACCESS  not-accessible               STATUS  mandatory               DESCRIPTION                       "Information on a particular family of view                       subtrees included in or excluded from a particular                       SNMP party's MIB view."               INDEX  { viewParty, viewSubtree }               ::= { viewTable 1 } 
  427.  
  428.           ViewEntry ::=               SEQUENCE {                   viewParty                       Party,                   viewSubtree                       OBJECT IDENTIFIER,                   viewStatus                       INTEGER,                   viewMask                       OCTET STRING               } 
  429.  
  430.           viewParty  OBJECT-TYPE               SYNTAX  Party               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The SNMP party whose single MIB view includes or                       excludes a particular family of view subtrees."               ::= { viewEntry 1 } 
  431.  
  432.           viewSubtree OBJECT-TYPE               SYNTAX  OBJECT IDENTIFIER               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The view subtree which, in combination with the                       corresponding instance of viewMask, defines a                       family of view subtrees.  This family is included                       in, or excluded from the particular SNMP party's 
  433.  
  434.  
  435.  
  436. McCloghrie, Davin, & Galvin                                    [Page 22] 
  437.  RFC 1353                     SNMP Party MIB                    July 1992 
  438.  
  439.                        MIB view, according to the value of the                       corresponding instance of viewStatus."               ::= { viewEntry 2 } 
  440.  
  441.           viewStatus OBJECT-TYPE               SYNTAX  INTEGER  {                           included(1),                           excluded(2),                           invalid(3)                       }               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The status of a particular family of view                       subtrees within the particular SNMP party's MIB                       view.  The value 'included(1)' indicates that the                       corresponding instances of viewSubtree and                       viewMask define a family of view subtrees included                       in the MIB view.  The  value 'excluded(2)'                       indicates that the corresponding instances of                       viewSubtree and viewMask define a family of view                       subtrees excluded from the MIB view. 
  442.  
  443.                       Setting an instance of this object to the value                       'invalid(3)' has the effect of invalidating the                       presence or absence of the corresponding family of                       view subtrees in the corresponding SNMP party's                       MIB view. 
  444.  
  445.                       It is an implementation-specific matter as to                       whether the agent removes an invalidated entry                       from the table.  Accordingly, management stations                       must be prepared to receive from agents tabular                       information corresponding to entries not currently                       in use.  Proper interpretation of such entries                       requires examination of the relevant viewStatus                       object."               DEFVAL  { included }               ::= { viewEntry 3 } 
  446.  
  447.           viewMask  OBJECT-TYPE               SYNTAX  OCTET STRING (SIZE (0..16))               ACCESS  read-write               STATUS  mandatory               DESCRIPTION                       "The bit mask which, in combination with the                       corresponding instance of viewSubtree, defines a                       family of view subtrees. 
  448.  
  449.  
  450.  
  451. McCloghrie, Davin, & Galvin                                    [Page 23] 
  452.  RFC 1353                     SNMP Party MIB                    July 1992 
  453.  
  454.                        Each bit of this bit mask corresponds to a sub-                       identifier of viewSubtree, with the most                       significant bit of the i-th octet of this octet                       string value (extended if necessary, see below)                       corresponding to the (8*i - 7)-th sub-identifier,                       and the least significant bit of the i-th octet of                       this octet string corresponding to the (8*i)-th                       sub-identifier, where i is in the range 1 through                       16. 
  455.  
  456.                       Each bit of this bit mask specifies whether or not                       the corresponding sub-identifiers must match when                       determining if an Object Identifier is in this                       family of view subtrees; a '1' indicates that an                       exact match must occur; a '0' indicates 'wild                       card', i.e., any sub-identifier value matches. 
  457.  
  458.                       Thus, the Object Identifier X of an object                       instance is contained in a family of view subtrees                       if the following criteria are met: 
  459.  
  460.                            for each sub-identifier of the value of                            viewSubtree, either: 
  461.  
  462.                                 the i-th bit of viewMask is 0, or 
  463.  
  464.                                 the i-th sub-identifier of X is equal to                                 the i-th sub-identifier of the value of                                 viewSubtree. 
  465.  
  466.                       If the value of this bit mask is M bits long and                       there are more than M sub-identifiers in the                       corresponding instance of viewSubtree, then the                       bit mask is extended with 1's to be the required                       length. 
  467.  
  468.                       Note that when the value of this object is the                       zero-length string, this extension rule results in                       a mask of all-1's being used (i.e., no 'wild                       card'), and the family of view subtrees is the one                       view subtree uniquely identified by the                       corresponding instance of viewSubtree."               DEFVAL  { ''h }               ::= { viewEntry 4 } 
  469.  
  470.            END 
  471.  
  472.  
  473.  
  474.  McCloghrie, Davin, & Galvin                                    [Page 24] 
  475.  RFC 1353                     SNMP Party MIB                    July 1992 
  476.  
  477.  5.  Acknowledgments 
  478.  
  479.    This document was produced on behalf of the SNMP Security Working    Group of the Internet Engineering Task Force.  The authors wish to    thank the members of the working group, and others who contributed to    this effort. 
  480.  
  481. 6.  References 
  482.  
  483.    [1] Rose, M., and K. McCloghrie, "Structure and Identification of        Management Information for TCP/IP based internets", RFC 1155,        Performance Systems International, Hughes LAN Systems, May 1990. 
  484.  
  485.    [2] McCloghrie, K., and M. Rose, "Management Information Base for        Network Management of TCP/IP-based Internets", RFC 1156, Hughes        LAN Systems and Performance Systems International, May 1990. 
  486.  
  487.    [3] Case, J., M. Fedor, M. Schoffstall, and J. Davin, The Simple        Network Management Protocol", RFC 1157, University of Tennessee        at Knoxville, Performance Systems International, Performance        Systems International, and the MIT Laboratory for Computer        Science, May 1990. 
  488.  
  489.    [4] McCloghrie K., and M. Rose, Editors, "Management Information Base        for Network Management of TCP/IP-based internets", RFC 1213,        Performance Systems International, March 1991. 
  490.  
  491.    [5] Information processing systems - Open Systems Interconnection -        Specification of Abstract Syntax Notation One (ASN.1),        International Organization for Standardization, International        Standard 8824, December 1987. 
  492.  
  493.    [6] Information processing systems - Open Systems Interconnection -        Specification of Basic Encoding Rules for Abstract Notation One        (ASN.1), International Organization for Standardization,        International Standard 8825, December 1987. 
  494.  
  495.    [7] Rose, M., and K. McCloghrie, Editors, "Concise MIB Definitions",        RFC 1212, Performance Systems International, Hughes LAN Systems,        March 1991. 
  496.  
  497.    [8] Davin, J., Galvin, J., and K. McCloghrie, "SNMP Administrative        Model", RFC 1351, MIT Laboratory for Computer Science, Trusted        Information Systems, Inc., Hughes LAN Systems, Inc., July 1992. 
  498.  
  499.    [9] Galvin, J., McCloghrie, K., and J. Davin, "SNMP Security        Protocols", RFC 1352, Trusted Information Systems, Inc., Hughes        LAN Systems, Inc., MIT Laboratory for Computer Science, July 
  500.  
  501.  
  502.  
  503. McCloghrie, Davin, & Galvin                                    [Page 25] 
  504.  RFC 1353                     SNMP Party MIB                    July 1992 
  505.  
  506.         1992. 
  507.  
  508. Security Considerstions 
  509.  
  510.    Security issues are discussed in section 3.1. and in RFCs 1351 and    1352. 
  511.  
  512. Authors' Addresses 
  513.  
  514.    Keith McCloghrie    Hughes LAN Systems, Inc.    Mountain View, CA 94043 
  515.  
  516.    Phone:  (415) 966-7934    EMail:  kzm@hls.com 
  517.  
  518.     James R. Davin    MIT Laboratory for Computer Science    545 Technology Square    Cambridge, MA 02139 
  519.  
  520.    Phone:  (617) 253-6020    EMail:  jrd@ptt.lcs.mit.edu 
  521.  
  522.     James M. Galvin    Trusted Information Systems, Inc.    3060 Washington Road, Route 97    Glenwood, MD 21738 
  523.  
  524.    Phone:  (301) 854-6889    EMail:  galvin@tis.com 
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.   
  537.  
  538.  
  539.  
  540.  
  541.  
  542. McCloghrie, Davin, & Galvin                                    [Page 26] 
  543.  
  544.