SNMP-USER-BASED-SM-MIB
上传用户:aonuowh
上传日期:2021-05-23
资源大小:35390k
文件大小:37k
源码类别:

SNMP编程

开发平台:

C/C++

  1. SNMP-USER-BASED-SM-MIB DEFINITIONS ::= BEGIN
  2. IMPORTS
  3.     MODULE-IDENTITY, OBJECT-TYPE,
  4.     OBJECT-IDENTITY,
  5.     snmpModules, Counter32                FROM SNMPv2-SMI
  6.     TEXTUAL-CONVENTION, TestAndIncr,
  7.     RowStatus, RowPointer,
  8.     StorageType, AutonomousType           FROM SNMPv2-TC
  9.     MODULE-COMPLIANCE, OBJECT-GROUP       FROM SNMPv2-CONF
  10.     SnmpAdminString, SnmpEngineID,
  11.     snmpAuthProtocols, snmpPrivProtocols  FROM SNMP-FRAMEWORK-MIB;
  12. snmpUsmMIB MODULE-IDENTITY
  13.     LAST-UPDATED "9901200000Z"            -- 20 Jan 1999, midnight
  14.     ORGANIZATION "SNMPv3 Working Group"
  15.     CONTACT-INFO "WG-email:   snmpv3@lists.tislabs.com
  16.                   Subscribe:  majordomo@lists.tislabs.com
  17.                               In msg body:  subscribe snmpv3
  18.                   Chair:      Russ Mundy
  19.                               Trusted Information Systems
  20.                   postal:     3060 Washington Rd
  21.                               Glenwood MD 21738
  22.                               USA
  23.                   email:      mundy@tislabs.com
  24.                   phone:      +1-301-854-6889
  25.                   Co-editor   Uri Blumenthal
  26.                               IBM T. J. Watson Research
  27.                   postal:     30 Saw Mill River Pkwy,
  28.                               Hawthorne, NY 10532
  29.                               USA
  30.                   email:      uri@watson.ibm.com
  31.                   phone:      +1-914-784-7964
  32.                   Co-editor:  Bert Wijnen
  33.                               IBM T. J. Watson Research
  34.                   postal:     Schagen 33
  35.                               3461 GL Linschoten
  36.                               Netherlands
  37.                   email:      wijnen@vnet.ibm.com
  38.                   phone:      +31-348-432-794
  39.                  "
  40.     DESCRIPTION  "The management information definitions for the
  41.                   SNMP User-based Security Model.
  42.                  "
  43. --  Revision history
  44.     REVISION     "9901200000Z"            -- 20 Jan 1999, midnight
  45.     DESCRIPTION  "Clarifications, published as RFC2574"
  46.     REVISION     "9711200000Z"            -- 20 Nov 1997, midnight
  47.     DESCRIPTION  "Initial version, published as RFC2274"
  48.     ::= { snmpModules 15 }
  49. -- Administrative assignments ****************************************
  50. usmMIBObjects     OBJECT IDENTIFIER ::= { snmpUsmMIB 1 }
  51. usmMIBConformance OBJECT IDENTIFIER ::= { snmpUsmMIB 2 }
  52. -- Identification of Authentication and Privacy Protocols ************
  53. usmNoAuthProtocol OBJECT-IDENTITY
  54.     STATUS        current
  55.     DESCRIPTION  "No Authentication Protocol."
  56.     ::= { snmpAuthProtocols 1 }
  57. usmHMACMD5AuthProtocol OBJECT-IDENTITY
  58.     STATUS        current
  59.     DESCRIPTION  "The HMAC-MD5-96 Digest Authentication Protocol."
  60.     REFERENCE    "- H. Krawczyk, M. Bellare, R. Canetti HMAC:
  61.                     Keyed-Hashing for Message Authentication,
  62.                     RFC2104, Feb 1997.
  63.                   - Rivest, R., Message Digest Algorithm MD5, RFC1321.
  64.                  "
  65.     ::= { snmpAuthProtocols 2 }
  66. usmHMACSHAAuthProtocol OBJECT-IDENTITY
  67.     STATUS        current
  68.     DESCRIPTION  "The HMAC-SHA-96 Digest Authentication Protocol."
  69.     REFERENCE    "- H. Krawczyk, M. Bellare, R. Canetti, HMAC:
  70.                     Keyed-Hashing for Message Authentication,
  71.                     RFC2104, Feb 1997.
  72.                   - Secure Hash Algorithm. NIST FIPS 180-1.
  73.                  "
  74.     ::= { snmpAuthProtocols 3 }
  75. usmNoPrivProtocol OBJECT-IDENTITY
  76.     STATUS        current
  77.     DESCRIPTION  "No Privacy Protocol."
  78.     ::= { snmpPrivProtocols 1 }
  79. usmDESPrivProtocol OBJECT-IDENTITY
  80.     STATUS        current
  81.     DESCRIPTION  "The CBC-DES Symmetric Encryption Protocol."
  82.     REFERENCE    "- Data Encryption Standard, National Institute of
  83.                     Standards and Technology.  Federal Information
  84.                     Processing Standard (FIPS) Publication 46-1.
  85.                     Supersedes FIPS Publication 46,
  86.                     (January, 1977; reaffirmed January, 1988).
  87.                   - Data Encryption Algorithm, American National
  88.                     Standards Institute.  ANSI X3.92-1981,
  89.                     (December, 1980).
  90.                   - DES Modes of Operation, National Institute of
  91.                     Standards and Technology.  Federal Information
  92.                     Processing Standard (FIPS) Publication 81,
  93.                     (December, 1980).
  94.                   - Data Encryption Algorithm - Modes of Operation,
  95.                     American National Standards Institute.
  96.                     ANSI X3.106-1983, (May 1983).
  97.                  "
  98.     ::= { snmpPrivProtocols 2 }
  99. -- Textual Conventions ***********************************************
  100. KeyChange ::=     TEXTUAL-CONVENTION
  101.    STATUS         current
  102.    DESCRIPTION
  103.          "Every definition of an object with this syntax must identify
  104.           a protocol P, a secret key K, and a hash algorithm H
  105.           that produces output of L octets.
  106.           The object's value is a manager-generated, partially-random
  107.           value which, when modified, causes the value of the secret
  108.           key K, to be modified via a one-way function.
  109.           The value of an instance of this object is the concatenation
  110.           of two components: first a 'random' component and then a
  111.           'delta' component.
  112.           The lengths of the random and delta components
  113.           are given by the corresponding value of the protocol P;
  114.           if P requires K to be a fixed length, the length of both the
  115.           random and delta components is that fixed length; if P
  116.           allows the length of K to be variable up to a particular
  117.           maximum length, the length of the random component is that
  118.           maximum length and the length of the delta component is any
  119.           length less than or equal to that maximum length.
  120.           For example, usmHMACMD5AuthProtocol requires K to be a fixed
  121.           length of 16 octets and L - of 16 octets.
  122.           usmHMACSHAAuthProtocol requires K to be a fixed length of
  123.           20 octets and L - of 20 octets. Other protocols may define
  124.           other sizes, as deemed appropriate.
  125.           When a requester wants to change the old key K to a new
  126.           key keyNew on a remote entity, the 'random' component is
  127.           obtained from either a true random generator, or from a
  128.           pseudorandom generator, and the 'delta' component is
  129.           computed as follows:
  130.            - a temporary variable is initialized to the existing value
  131.              of K;
  132.            - if the length of the keyNew is greater than L octets,
  133.              then:
  134.               - the random component is appended to the value of the
  135.                 temporary variable, and the result is input to the
  136.                 the hash algorithm H to produce a digest value, and
  137.                 the temporary variable is set to this digest value;
  138.               - the value of the temporary variable is XOR-ed with
  139.                 the first (next) L-octets (16 octets in case of MD5)
  140.                 of the keyNew to produce the first (next) L-octets
  141.                 (16 octets in case of MD5) of the 'delta' component.
  142.               - the above two steps are repeated until the unused
  143.                 portion of the keyNew component is L octets or less,
  144.            - the random component is appended to the value of the
  145.              temporary variable, and the result is input to the
  146.              hash algorithm H to produce a digest value;
  147.            - this digest value, truncated if necessary to be the same
  148.              length as the unused portion of the keyNew, is XOR-ed
  149.              with the unused portion of the keyNew to produce the
  150.              (final portion of the) 'delta' component.
  151.            For example, using MD5 as the hash algorithm H:
  152.               iterations = (lenOfDelta - 1)/16; /* integer division */
  153.               temp = keyOld;
  154.               for (i = 0; i < iterations; i++) {
  155.                   temp = MD5 (temp || random);
  156.                   delta[i*16 .. (i*16)+15] =
  157.                          temp XOR keyNew[i*16 .. (i*16)+15];
  158.               }
  159.               temp = MD5 (temp || random);
  160.               delta[i*16 .. lenOfDelta-1] =
  161.                      temp XOR keyNew[i*16 .. lenOfDelta-1];
  162.           The 'random' and 'delta' components are then concatenated as
  163.           described above, and the resulting octet string is sent to
  164.           the recipient as the new value of an instance of this object.
  165.           At the receiver side, when an instance of this object is set
  166.           to a new value, then a new value of K is computed as follows:
  167.            - a temporary variable is initialized to the existing value
  168.              of K;
  169.            - if the length of the delta component is greater than L
  170.              octets, then:
  171.               - the random component is appended to the value of the
  172.                 temporary variable, and the result is input to the
  173.                 hash algorithm H to produce a digest value, and the
  174.                 temporary variable is set to this digest value;
  175.               - the value of the temporary variable is XOR-ed with
  176.                 the first (next) L-octets (16 octets in case of MD5)
  177.                 of the delta component to produce the first (next)
  178.                 L-octets (16 octets in case of MD5) of the new value
  179.                 of K.
  180.               - the above two steps are repeated until the unused
  181.                 portion of the delta component is L octets or less,
  182.            - the random component is appended to the value of the
  183.              temporary variable, and the result is input to the
  184.              hash algorithm H to produce a digest value;
  185.            - this digest value, truncated if necessary to be the same
  186.              length as the unused portion of the delta component, is
  187.              XOR-ed with the unused portion of the delta component to
  188.              produce the (final portion of the) new value of K.
  189.            For example, using MD5 as the hash algorithm H:
  190.               iterations = (lenOfDelta - 1)/16; /* integer division */
  191.               temp = keyOld;
  192.               for (i = 0; i < iterations; i++) {
  193.                   temp = MD5 (temp || random);
  194.                   keyNew[i*16 .. (i*16)+15] =
  195.                          temp XOR delta[i*16 .. (i*16)+15];
  196.               }
  197.               temp = MD5 (temp || random);
  198.               keyNew[i*16 .. lenOfDelta-1] =
  199.                      temp XOR delta[i*16 .. lenOfDelta-1];
  200.           The value of an object with this syntax, whenever it is
  201.           retrieved by the management protocol, is always the zero
  202.           length string.
  203.           Note that the keyOld and keyNew are the localized keys.
  204.           Note that it is probably wise that when an SNMP entity sends
  205.           a SetRequest to change a key, that it keeps a copy of the old
  206.           key until it has confirmed that the key change actually
  207.           succeeded.
  208.          "
  209.     SYNTAX       OCTET STRING
  210. -- Statistics for the User-based Security Model **********************
  211. usmStats         OBJECT IDENTIFIER ::= { usmMIBObjects 1 }
  212. usmStatsUnsupportedSecLevels OBJECT-TYPE
  213.     SYNTAX       Counter32
  214.     MAX-ACCESS   read-only
  215.     STATUS       current
  216.     DESCRIPTION "The total number of packets received by the SNMP
  217.                  engine which were dropped because they requested a
  218.                  securityLevel that was unknown to the SNMP engine
  219.                  or otherwise unavailable.
  220.                 "
  221.     ::= { usmStats 1 }
  222. usmStatsNotInTimeWindows OBJECT-TYPE
  223.     SYNTAX       Counter32
  224.     MAX-ACCESS   read-only
  225.     STATUS       current
  226.     DESCRIPTION "The total number of packets received by the SNMP
  227.                  engine which were dropped because they appeared
  228.                  outside of the authoritative SNMP engine's window.
  229.                 "
  230.     ::= { usmStats 2 }
  231. usmStatsUnknownUserNames OBJECT-TYPE
  232.     SYNTAX       Counter32
  233.     MAX-ACCESS   read-only
  234.     STATUS       current
  235.     DESCRIPTION "The total number of packets received by the SNMP
  236.                  engine which were dropped because they referenced a
  237.                  user that was not known to the SNMP engine.
  238.                 "
  239.     ::= { usmStats 3 }
  240. usmStatsUnknownEngineIDs OBJECT-TYPE
  241.     SYNTAX       Counter32
  242.     MAX-ACCESS   read-only
  243.     STATUS       current
  244.     DESCRIPTION "The total number of packets received by the SNMP
  245.                  engine which were dropped because they referenced an
  246.                  snmpEngineID that was not known to the SNMP engine.
  247.                 "
  248.     ::= { usmStats 4 }
  249. usmStatsWrongDigests OBJECT-TYPE
  250.     SYNTAX       Counter32
  251.     MAX-ACCESS   read-only
  252.     STATUS       current
  253.     DESCRIPTION "The total number of packets received by the SNMP
  254.                  engine which were dropped because they didn't
  255.                  contain the expected digest value.
  256.                 "
  257.     ::= { usmStats 5 }
  258. usmStatsDecryptionErrors OBJECT-TYPE
  259.     SYNTAX       Counter32
  260.     MAX-ACCESS   read-only
  261.     STATUS       current
  262.     DESCRIPTION "The total number of packets received by the SNMP
  263.                  engine which were dropped because they could not be
  264.                  decrypted.
  265.                 "
  266.     ::= { usmStats 6 }
  267. -- The usmUser Group ************************************************
  268. usmUser          OBJECT IDENTIFIER ::= { usmMIBObjects 2 }
  269. usmUserSpinLock  OBJECT-TYPE
  270.     SYNTAX       TestAndIncr
  271.     MAX-ACCESS   read-write
  272.     STATUS       current
  273.     DESCRIPTION "An advisory lock used to allow several cooperating
  274.                  Command Generator Applications to coordinate their
  275.                  use of facilities to alter secrets in the
  276.                  usmUserTable.
  277.                 "
  278.     ::= { usmUser 1 }
  279. -- The table of valid users for the User-based Security Model ********
  280. usmUserTable     OBJECT-TYPE
  281.     SYNTAX       SEQUENCE OF UsmUserEntry
  282.     MAX-ACCESS   not-accessible
  283.     STATUS       current
  284.     DESCRIPTION "The table of users configured in the SNMP engine's
  285.                  Local Configuration Datastore (LCD).
  286.                  To create a new user (i.e., to instantiate a new
  287.                  conceptual row in this table), it is recommended to
  288.                  follow this procedure:
  289.                    1)  GET(usmUserSpinLock.0) and save in sValue.
  290.                    2)  SET(usmUserSpinLock.0=sValue,
  291.                            usmUserCloneFrom=templateUser,
  292.                            usmUserStatus=createAndWait)
  293.                        You should use a template user to clone from
  294.                        which has the proper auth/priv protocol defined.
  295.                  If the new user is to use privacy:
  296.                    3)  generate the keyChange value based on the secret
  297.                        privKey of the clone-from user and the secret key
  298.                        to be used for the new user. Let us call this
  299.                        pkcValue.
  300.                    4)  GET(usmUserSpinLock.0) and save in sValue.
  301.                    5)  SET(usmUserSpinLock.0=sValue,
  302.                            usmUserPrivKeyChange=pkcValue
  303.                            usmUserPublic=randomValue1)
  304.                    6)  GET(usmUserPulic) and check it has randomValue1.
  305.                        If not, repeat steps 4-6.
  306.                  If the new user will never use privacy:
  307.                    7)  SET(usmUserPrivProtocol=usmNoPrivProtocol)
  308.                  If the new user is to use authentication:
  309.                    8)  generate the keyChange value based on the secret
  310.                        authKey of the clone-from user and the secret key
  311.                        to be used for the new user. Let us call this
  312.                        akcValue.
  313.                    9)  GET(usmUserSpinLock.0) and save in sValue.
  314.                    10) SET(usmUserSpinLock.0=sValue,
  315.                            usmUserAuthKeyChange=akcValue
  316.                            usmUserPublic=randomValue2)
  317.                    11) GET(usmUserPulic) and check it has randomValue2.
  318.                        If not, repeat steps 9-11.
  319.                  If the new user will never use authentication:
  320.                    12) SET(usmUserAuthProtocol=usmNoAuthProtocol)
  321.                  Finally, activate the new user:
  322.                    13) SET(usmUserStatus=active)
  323.                  The new user should now be available and ready to be
  324.                  used for SNMPv3 communication. Note however that access
  325.                  to MIB data must be provided via configuration of the
  326.                  SNMP-VIEW-BASED-ACM-MIB.
  327.                  The use of usmUserSpinlock is to avoid conflicts with
  328.                  another SNMP command responder application which may
  329.                  also be acting on the usmUserTable.
  330.                 "
  331.     ::= { usmUser 2 }
  332. usmUserEntry     OBJECT-TYPE
  333.     SYNTAX       UsmUserEntry
  334.     MAX-ACCESS   not-accessible
  335.     STATUS       current
  336.     DESCRIPTION "A user configured in the SNMP engine's Local
  337.                  Configuration Datastore (LCD) for the User-based
  338.                  Security Model.
  339.                 "
  340.     INDEX       { usmUserEngineID,
  341.                   usmUserName
  342.                 }
  343.     ::= { usmUserTable 1 }
  344. UsmUserEntry ::= SEQUENCE
  345.     {
  346.         usmUserEngineID         SnmpEngineID,
  347.         usmUserName             SnmpAdminString,
  348.         usmUserSecurityName     SnmpAdminString,
  349.         usmUserCloneFrom        RowPointer,
  350.         usmUserAuthProtocol     AutonomousType,
  351.         usmUserAuthKeyChange    KeyChange,
  352.         usmUserOwnAuthKeyChange KeyChange,
  353.         usmUserPrivProtocol     AutonomousType,
  354.         usmUserPrivKeyChange    KeyChange,
  355.         usmUserOwnPrivKeyChange KeyChange,
  356.         usmUserPublic           OCTET STRING,
  357.         usmUserStorageType      StorageType,
  358.         usmUserStatus           RowStatus
  359.     }
  360. usmUserEngineID  OBJECT-TYPE
  361.     SYNTAX       SnmpEngineID
  362.     MAX-ACCESS   not-accessible
  363.     STATUS       current
  364.     DESCRIPTION "An SNMP engine's administratively-unique identifier.
  365.                  In a simple agent, this value is always that agent's
  366.                  own snmpEngineID value.
  367.                  The value can also take the value of the snmpEngineID
  368.                  of a remote SNMP engine with which this user can
  369.                  communicate.
  370.                 "
  371.     ::= { usmUserEntry 1 }
  372. usmUserName      OBJECT-TYPE
  373.     SYNTAX       SnmpAdminString (SIZE(1..32))
  374.     MAX-ACCESS   not-accessible
  375.     STATUS       current
  376.     DESCRIPTION "A human readable string representing the name of
  377.                  the user.
  378.                  This is the (User-based Security) Model dependent
  379.                  security ID.
  380.                 "
  381.     ::= { usmUserEntry 2 }
  382. usmUserSecurityName OBJECT-TYPE
  383.     SYNTAX       SnmpAdminString
  384.     MAX-ACCESS   read-only
  385.     STATUS       current
  386.     DESCRIPTION "A human readable string representing the user in
  387.                  Security Model independent format.
  388.                  The default transformation of the User-based Security
  389.                  Model dependent security ID to the securityName and
  390.                  vice versa is the identity function so that the
  391.                  securityName is the same as the userName.
  392.                 "
  393.     ::= { usmUserEntry 3 }
  394. usmUserCloneFrom OBJECT-TYPE
  395.     SYNTAX       RowPointer
  396.     MAX-ACCESS   read-create
  397.     STATUS       current
  398.     DESCRIPTION "A pointer to another conceptual row in this
  399.                  usmUserTable.  The user in this other conceptual
  400.                  row is called the clone-from user.
  401.                  When a new user is created (i.e., a new conceptual
  402.                  row is instantiated in this table), the privacy and
  403.                  authentication parameters of the new user must be
  404.                  cloned from its clone-from user. These parameters are:
  405.                    - authentication protocol (usmUserAuthProtocol)
  406.                    - privacy protocol (usmUserPrivProtocol)
  407.                  They will be copied regardless of what the current
  408.                  value is.
  409.                  Cloning also causes the initial values of the secret
  410.                  authentication key (authKey) and the secret encryption
  411.                  key (privKey) of the new user to be set to the same
  412.                  value as the corresponding secret of the clone-from
  413.                  user.
  414.                  The first time an instance of this object is set by
  415.                  a management operation (either at or after its
  416.                  instantiation), the cloning process is invoked.
  417.                  Subsequent writes are successful but invoke no
  418.                  action to be taken by the receiver.
  419.                  The cloning process fails with an 'inconsistentName'
  420.                  error if the conceptual row representing the
  421.                  clone-from user does not exist or is not in an active
  422.                  state when the cloning process is invoked.
  423.                  When this object is read, the ZeroDotZero OID
  424.                  is returned.
  425.                 "
  426.     ::= { usmUserEntry 4 }
  427. usmUserAuthProtocol OBJECT-TYPE
  428.     SYNTAX       AutonomousType
  429.     MAX-ACCESS   read-create
  430.     STATUS       current
  431.     DESCRIPTION "An indication of whether messages sent on behalf of
  432.                  this user to/from the SNMP engine identified by
  433.                  usmUserEngineID, can be authenticated, and if so,
  434.                  the type of authentication protocol which is used.
  435.                  An instance of this object is created concurrently
  436.                  with the creation of any other object instance for
  437.                  the same user (i.e., as part of the processing of
  438.                  the set operation which creates the first object
  439.                  instance in the same conceptual row).
  440.                  If an initial set operation (i.e. at row creation time)
  441.                  tries to set a value for an unknown or unsupported
  442.                  protocol, then a 'wrongValue' error must be returned.
  443.                  The value will be overwritten/set when a set operation
  444.                  is performed on the corresponding instance of
  445.                  usmUserCloneFrom.
  446.                  Once instantiated, the value of such an instance of
  447.                  this object can only be changed via a set operation to
  448.                  the value of the usmNoAuthProtocol.
  449.                  If a set operation tries to change the value of an
  450.                  existing instance of this object to any value other
  451.                  than usmNoAuthProtocol, then an 'inconsistentValue'
  452.                  error must be returned.
  453.                  If a set operation tries to set the value to the
  454.                  usmNoAuthProtocol while the usmUserPrivProtocol value
  455.                  in the same row is not equal to usmNoPrivProtocol,
  456.                  then an 'inconsistentValue' error must be returned.
  457.                  That means that an SNMP command generator application
  458.                  must first ensure that the usmUserPrivProtocol is set
  459.                  to the usmNoPrivProtocol value before it can set
  460.                  the usmUserAuthProtocol value to usmNoAuthProtocol.
  461.                 "
  462.     DEFVAL      { usmNoAuthProtocol }
  463.     ::= { usmUserEntry 5 }
  464. usmUserAuthKeyChange OBJECT-TYPE
  465.     SYNTAX       KeyChange   -- typically (SIZE (0 | 32)) for HMACMD5
  466.                              -- typically (SIZE (0 | 40)) for HMACSHA
  467.     MAX-ACCESS   read-create
  468.     STATUS       current
  469.     DESCRIPTION "An object, which when modified, causes the secret
  470.                  authentication key used for messages sent on behalf
  471.                  of this user to/from the SNMP engine identified by
  472.                  usmUserEngineID, to be modified via a one-way
  473.                  function.
  474.                  The associated protocol is the usmUserAuthProtocol.
  475.                  The associated secret key is the user's secret
  476.                  authentication key (authKey). The associated hash
  477.                  algorithm is the algorithm used by the user's
  478.                  usmUserAuthProtocol.
  479.                  When creating a new user, it is an 'inconsistentName'
  480.                  error for a set operation to refer to this object
  481.                  unless it is previously or concurrently initialized
  482.                  through a set operation on the corresponding instance
  483.                  of usmUserCloneFrom.
  484.                  When the value of the corresponding usmUserAuthProtocol
  485.                  is usmNoAuthProtocol, then a set is successful, but
  486.                  effectively is a no-op.
  487.                  When this object is read, the zero-length (empty)
  488.                  string is returned.
  489.                  The recommended way to do a key change is as follows:
  490.                    1) GET(usmUserSpinLock.0) and save in sValue.
  491.                    2) generate the keyChange value based on the old
  492.                       (existing) secret key and the new secret key,
  493.                       let us call this kcValue.
  494.                  If you do the key change on behalf of another user:
  495.                    3) SET(usmUserSpinLock.0=sValue,
  496.                           usmUserAuthKeyChange=kcValue
  497.                           usmUserPublic=randomValue)
  498.                  If you do the key change for yourself:
  499.                    4) SET(usmUserSpinLock.0=sValue,
  500.                           usmUserOwnAuthKeyChange=kcValue
  501.                           usmUserPublic=randomValue)
  502.                  If you get a response with error-status of noError,
  503.                  then the SET succeeded and the new key is active.
  504.                  If you do not get a response, then you can issue a
  505.                  GET(usmUserPublic) and check if the value is equal
  506.                  to the randomValue you did send in the SET. If so, then
  507.                  the key change succeeded and the new key is active
  508.                  (probably the response got lost). If not, then the SET
  509.                  request probably never reached the target and so you
  510.                  can start over with the procedure above.
  511.                 "
  512.     DEFVAL      { ''H }    -- the empty string
  513.     ::= { usmUserEntry 6 }
  514. usmUserOwnAuthKeyChange OBJECT-TYPE
  515.     SYNTAX       KeyChange   -- typically (SIZE (0 | 32)) for HMACMD5
  516.                              -- typically (SIZE (0 | 40)) for HMACSHA
  517.     MAX-ACCESS   read-create
  518.     STATUS       current
  519.     DESCRIPTION "Behaves exactly as usmUserAuthKeyChange, with one
  520.                  notable difference: in order for the set operation
  521.                  to succeed, the usmUserName of the operation
  522.                  requester must match the usmUserName that
  523.                  indexes the row which is targeted by this
  524.                  operation.
  525.                  In addition, the USM security model must be
  526.                  used for this operation.
  527.                  The idea here is that access to this column can be
  528.                  public, since it will only allow a user to change
  529.                  his own secret authentication key (authKey).
  530.                  Note that this can only be done once the row is active.
  531.                  When a set is received and the usmUserName of the
  532.                  requester is not the same as the umsUserName that
  533.                  indexes the row which is targeted by this operation,
  534.                  then a 'noAccess' error must be returned.
  535.                  When a set is received and the security model in use
  536.                  is not USM, then a 'noAccess' error must be returned.
  537.                 "
  538.     DEFVAL      { ''H }    -- the empty string
  539.     ::= { usmUserEntry 7 }
  540. usmUserPrivProtocol OBJECT-TYPE
  541.     SYNTAX       AutonomousType
  542.     MAX-ACCESS   read-create
  543.     STATUS       current
  544.     DESCRIPTION "An indication of whether messages sent on behalf of
  545.                  this user to/from the SNMP engine identified by
  546.                  usmUserEngineID, can be protected from disclosure,
  547.                  and if so, the type of privacy protocol which is used.
  548.                  An instance of this object is created concurrently
  549.                  with the creation of any other object instance for
  550.                  the same user (i.e., as part of the processing of
  551.                  the set operation which creates the first object
  552.                  instance in the same conceptual row).
  553.                  If an initial set operation (i.e. at row creation time)
  554.                  tries to set a value for an unknown or unsupported
  555.                  protocol, then a 'wrongValue' error must be returned.
  556.                  The value will be overwritten/set when a set operation
  557.                  is performed on the corresponding instance of
  558.                  usmUserCloneFrom.
  559.                  Once instantiated, the value of such an instance of
  560.                  this object can only be changed via a set operation to
  561.                  the value of the usmNoPrivProtocol.
  562.                  If a set operation tries to change the value of an
  563.                  existing instance of this object to any value other
  564.                  than usmNoPrivProtocol, then an 'inconsistentValue'
  565.                  error must be returned.
  566.                  Note that if any privacy protocol is used, then you
  567.                  must also use an authentication protocol. In other
  568.                  words, if usmUserPrivProtocol is set to anything else
  569.                  than usmNoPrivProtocol, then the corresponding instance
  570.                  of usmUserAuthProtocol cannot have a value of
  571.                  usmNoAuthProtocol. If it does, then an
  572.                  'inconsistentValue' error must be returned.
  573.                 "
  574.     DEFVAL      { usmNoPrivProtocol }
  575.     ::= { usmUserEntry 8 }
  576. usmUserPrivKeyChange OBJECT-TYPE
  577.     SYNTAX       KeyChange  -- typically (SIZE (0 | 32)) for DES
  578.     MAX-ACCESS   read-create
  579.     STATUS       current
  580.     DESCRIPTION "An object, which when modified, causes the secret
  581.                  encryption key used for messages sent on behalf
  582.                  of this user to/from the SNMP engine identified by
  583.                  usmUserEngineID, to be modified via a one-way
  584.                  function.
  585.                  The associated protocol is the usmUserPrivProtocol.
  586.                  The associated secret key is the user's secret
  587.                  privacy key (privKey). The associated hash
  588.                  algorithm is the algorithm used by the user's
  589.                  usmUserAuthProtocol.
  590.                  When creating a new user, it is an 'inconsistentName'
  591.                  error for a set operation to refer to this object
  592.                  unless it is previously or concurrently initialized
  593.                  through a set operation on the corresponding instance
  594.                  of usmUserCloneFrom.
  595.                  When the value of the corresponding usmUserPrivProtocol
  596.                  is usmNoPrivProtocol, then a set is successful, but
  597.                  effectively is a no-op.
  598.                  When this object is read, the zero-length (empty)
  599.                  string is returned.
  600.                  See the description clause of usmUserAuthKeyChange for
  601.                  a recommended procedure to do a key change.
  602.                 "
  603.     DEFVAL      { ''H }    -- the empty string
  604.     ::= { usmUserEntry 9 }
  605. usmUserOwnPrivKeyChange OBJECT-TYPE
  606.     SYNTAX       KeyChange  -- typically (SIZE (0 | 32)) for DES
  607.     MAX-ACCESS   read-create
  608.     STATUS       current
  609.     DESCRIPTION "Behaves exactly as usmUserPrivKeyChange, with one
  610.                  notable difference: in order for the Set operation
  611.                  to succeed, the usmUserName of the operation
  612.                  requester must match the usmUserName that indexes
  613.                  the row which is targeted by this operation.
  614.                  In addition, the USM security model must be
  615.                  used for this operation.
  616.                  The idea here is that access to this column can be
  617.                  public, since it will only allow a user to change
  618.                  his own secret privacy key (privKey).
  619.                  Note that this can only be done once the row is active.
  620.                  When a set is received and the usmUserName of the
  621.                  requester is not the same as the umsUserName that
  622.                  indexes the row which is targeted by this operation,
  623.                  then a 'noAccess' error must be returned.
  624.                  When a set is received and the security model in use
  625.                  is not USM, then a 'noAccess' error must be returned.
  626.                 "
  627.     DEFVAL      { ''H }    -- the empty string
  628.     ::= { usmUserEntry 10 }
  629. usmUserPublic    OBJECT-TYPE
  630.     SYNTAX       OCTET STRING (SIZE(0..32))
  631.     MAX-ACCESS   read-create
  632.     STATUS       current
  633.     DESCRIPTION "A publicly-readable value which can be written as part
  634.                  of the procedure for changing a user's secret
  635.                  authentication and/or privacy key, and later read to
  636.                  determine whether the change of the secret was
  637.                  effected.
  638.                 "
  639.     DEFVAL      { ''H }  -- the empty string
  640.     ::= { usmUserEntry 11 }
  641. usmUserStorageType OBJECT-TYPE
  642.     SYNTAX       StorageType
  643.     MAX-ACCESS   read-create
  644.     STATUS       current
  645.     DESCRIPTION "The storage type for this conceptual row.
  646.                  Conceptual rows having the value 'permanent' must
  647.                  allow write-access at a minimum to:
  648.                  - usmUserAuthKeyChange, usmUserOwnAuthKeyChange
  649.                    and usmUserPublic for a user who employs
  650.                    authentication, and
  651.                  - usmUserPrivKeyChange, usmUserOwnPrivKeyChange
  652.                    and usmUserPublic for a user who employs
  653.                    privacy.
  654.                  Note that any user who employs authentication or
  655.                  privacy must allow its secret(s) to be updated and
  656.                  thus cannot be 'readOnly'.
  657.                  If an initial set operation tries to set the value to
  658.                  'readOnly' for a user who employs authentication or
  659.                  privacy, then an 'inconsistentValue' error must be
  660.                  returned.  Note that if the value has been previously
  661.                  set (implicit or explicit) to any value, then the rules
  662.                  as defined in the StorageType Textual Convention apply.
  663.                  It is an implementation issue to decide if a SET for
  664.                  a readOnly or permanent row is accepted at all. In some
  665.                  contexts this may make sense, in others it may not. If
  666.                  a SET for a readOnly or permanent row is not accepted
  667.                  at all, then a 'wrongValue' error must be returned.
  668.                 "
  669.     DEFVAL      { nonVolatile }
  670.     ::= { usmUserEntry 12 }
  671. usmUserStatus    OBJECT-TYPE
  672.     SYNTAX       RowStatus
  673.     MAX-ACCESS   read-create
  674.     STATUS       current
  675.     DESCRIPTION "The status of this conceptual row.
  676.                  Until instances of all corresponding columns are
  677.                  appropriately configured, the value of the
  678.                  corresponding instance of the usmUserStatus column
  679.                  is 'notReady'.
  680.                  In particular, a newly created row for a user who
  681.                  employs authentication, cannot be made active until the
  682.                  corresponding usmUserCloneFrom and usmUserAuthKeyChange
  683.                  have been set.
  684.                  Further, a newly created row for a user who also
  685.                  employs privacy, cannot be made active until the
  686.                  usmUserPrivKeyChange has been set.
  687.                  The RowStatus TC [RFC2579] requires that this
  688.                  DESCRIPTION clause states under which circumstances
  689.                  other objects in this row can be modified:
  690.                  The value of this object has no effect on whether
  691.                  other objects in this conceptual row can be modified,
  692.                  except for usmUserOwnAuthKeyChange and
  693.                  usmUserOwnPrivKeyChange. For these 2 objects, the
  694.                  value of usmUserStatus MUST be active.
  695.                 "
  696.     ::= { usmUserEntry 13 }
  697. -- Conformance Information *******************************************
  698. usmMIBCompliances OBJECT IDENTIFIER ::= { usmMIBConformance 1 }
  699. usmMIBGroups      OBJECT IDENTIFIER ::= { usmMIBConformance 2 }
  700. -- Compliance statements
  701. usmMIBCompliance MODULE-COMPLIANCE
  702.     STATUS       current
  703.     DESCRIPTION "The compliance statement for SNMP engines which
  704.                  implement the SNMP-USER-BASED-SM-MIB.
  705.                 "
  706.     MODULE       -- this module
  707.         MANDATORY-GROUPS { usmMIBBasicGroup }
  708.         OBJECT           usmUserAuthProtocol
  709.         MIN-ACCESS       read-only
  710.         DESCRIPTION     "Write access is not required."
  711.         OBJECT           usmUserPrivProtocol
  712.         MIN-ACCESS       read-only
  713.         DESCRIPTION     "Write access is not required."
  714.     ::= { usmMIBCompliances 1 }
  715. -- Units of compliance
  716. usmMIBBasicGroup OBJECT-GROUP
  717.     OBJECTS     {
  718.                   usmStatsUnsupportedSecLevels,
  719.                   usmStatsNotInTimeWindows,
  720.                   usmStatsUnknownUserNames,
  721.                   usmStatsUnknownEngineIDs,
  722.                   usmStatsWrongDigests,
  723.                   usmStatsDecryptionErrors,
  724.                   usmUserSpinLock,
  725.                   usmUserSecurityName,
  726.                   usmUserCloneFrom,
  727.                   usmUserAuthProtocol,
  728.                   usmUserAuthKeyChange,
  729.                   usmUserOwnAuthKeyChange,
  730.                   usmUserPrivProtocol,
  731.                   usmUserPrivKeyChange,
  732.                   usmUserOwnPrivKeyChange,
  733.                   usmUserPublic,
  734.                   usmUserStorageType,
  735.                   usmUserStatus
  736.                 }
  737.     STATUS       current
  738.     DESCRIPTION "A collection of objects providing for configuration
  739.                  of an SNMP engine which implements the SNMP
  740.                  User-based Security Model.
  741.                 "
  742.     ::= { usmMIBGroups 1 }
  743. END