| SNMP-USER-BASED-SM-MIB DEFINITIONS ::= BEGIN |
| |
| IMPORTS |
| MODULE-IDENTITY, OBJECT-TYPE, |
| OBJECT-IDENTITY, |
| snmpModules, Counter32 FROM SNMPv2-SMI |
| TEXTUAL-CONVENTION, TestAndIncr, |
| RowStatus, RowPointer, |
| StorageType, AutonomousType FROM SNMPv2-TC |
| MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF |
| SnmpAdminString, SnmpEngineID, |
| snmpAuthProtocols, snmpPrivProtocols FROM SNMP-FRAMEWORK-MIB; |
| |
| snmpUsmMIB MODULE-IDENTITY |
| LAST-UPDATED "200210160000Z" -- 16 Oct 2002, midnight |
| ORGANIZATION "SNMPv3 Working Group" |
| CONTACT-INFO "WG-email: snmpv3@lists.tislabs.com |
| Subscribe: majordomo@lists.tislabs.com |
| In msg body: subscribe snmpv3 |
| |
| Chair: Russ Mundy |
| Network Associates Laboratories |
| postal: 15204 Omega Drive, Suite 300 |
| Rockville, MD 20850-4601 |
| USA |
| email: mundy@tislabs.com |
| |
| phone: +1 301-947-7107 |
| |
| Co-Chair: David Harrington |
| Enterasys Networks |
| Postal: 35 Industrial Way |
| P. O. Box 5004 |
| Rochester, New Hampshire 03866-5005 |
| USA |
| EMail: dbh@enterasys.com |
| Phone: +1 603-337-2614 |
| |
| Co-editor Uri Blumenthal |
| Lucent Technologies |
| postal: 67 Whippany Rd. |
| Whippany, NJ 07981 |
| USA |
| email: uri@lucent.com |
| phone: +1-973-386-2163 |
| |
| Co-editor: Bert Wijnen |
| Lucent Technologies |
| postal: Schagen 33 |
| 3461 GL Linschoten |
| Netherlands |
| email: bwijnen@lucent.com |
| phone: +31-348-480-685 |
| " |
| DESCRIPTION "The management information definitions for the |
| SNMP User-based Security Model. |
| |
| Copyright (C) The Internet Society (2002). This |
| version of this MIB module is part of RFC 3414; |
| see the RFC itself for full legal notices. |
| " |
| -- Revision history |
| |
| REVISION "200210160000Z" -- 16 Oct 2002, midnight |
| DESCRIPTION "Changes in this revision: |
| - Updated references and contact info. |
| - Clarification to usmUserCloneFrom DESCRIPTION |
| clause |
| - Fixed 'command responder' into 'command generator' |
| in last para of DESCRIPTION clause of |
| usmUserTable. |
| This revision published as RFC3414. |
| " |
| REVISION "199901200000Z" -- 20 Jan 1999, midnight |
| DESCRIPTION "Clarifications, published as RFC2574" |
| |
| REVISION "199711200000Z" -- 20 Nov 1997, midnight |
| DESCRIPTION "Initial version, published as RFC2274" |
| ::= { snmpModules 15 } |
| |
| -- Administrative assignments **************************************** |
| |
| usmMIBObjects OBJECT IDENTIFIER ::= { snmpUsmMIB 1 } |
| usmMIBConformance OBJECT IDENTIFIER ::= { snmpUsmMIB 2 } |
| |
| -- Identification of Authentication and Privacy Protocols ************ |
| |
| usmNoAuthProtocol OBJECT-IDENTITY |
| STATUS current |
| DESCRIPTION "No Authentication Protocol." |
| ::= { snmpAuthProtocols 1 } |
| |
| usmHMACMD5AuthProtocol OBJECT-IDENTITY |
| STATUS current |
| DESCRIPTION "The HMAC-MD5-96 Digest Authentication Protocol." |
| REFERENCE "- H. Krawczyk, M. Bellare, R. Canetti HMAC: |
| Keyed-Hashing for Message Authentication, |
| RFC2104, Feb 1997. |
| - Rivest, R., Message Digest Algorithm MD5, RFC1321. |
| " |
| ::= { snmpAuthProtocols 2 } |
| |
| usmHMACSHAAuthProtocol OBJECT-IDENTITY |
| STATUS current |
| DESCRIPTION "The HMAC-SHA-96 Digest Authentication Protocol." |
| REFERENCE "- H. Krawczyk, M. Bellare, R. Canetti, HMAC: |
| Keyed-Hashing for Message Authentication, |
| RFC2104, Feb 1997. |
| - Secure Hash Algorithm. NIST FIPS 180-1. |
| " |
| ::= { snmpAuthProtocols 3 } |
| |
| usmNoPrivProtocol OBJECT-IDENTITY |
| STATUS current |
| DESCRIPTION "No Privacy Protocol." |
| ::= { snmpPrivProtocols 1 } |
| |
| usmDESPrivProtocol OBJECT-IDENTITY |
| STATUS current |
| DESCRIPTION "The CBC-DES Symmetric Encryption Protocol." |
| REFERENCE "- Data Encryption Standard, National Institute of |
| Standards and Technology. Federal Information |
| Processing Standard (FIPS) Publication 46-1. |
| |
| Supersedes FIPS Publication 46, |
| (January, 1977; reaffirmed January, 1988). |
| |
| - Data Encryption Algorithm, American National |
| Standards Institute. ANSI X3.92-1981, |
| (December, 1980). |
| |
| - DES Modes of Operation, National Institute of |
| Standards and Technology. Federal Information |
| Processing Standard (FIPS) Publication 81, |
| (December, 1980). |
| |
| - Data Encryption Algorithm - Modes of Operation, |
| American National Standards Institute. |
| ANSI X3.106-1983, (May 1983). |
| " |
| ::= { snmpPrivProtocols 2 } |
| |
| -- Textual Conventions *********************************************** |
| |
| KeyChange ::= TEXTUAL-CONVENTION |
| STATUS current |
| DESCRIPTION |
| "Every definition of an object with this syntax must identify |
| a protocol P, a secret key K, and a hash algorithm H |
| that produces output of L octets. |
| |
| The object's value is a manager-generated, partially-random |
| value which, when modified, causes the value of the secret |
| key K, to be modified via a one-way function. |
| |
| The value of an instance of this object is the concatenation |
| of two components: first a 'random' component and then a |
| 'delta' component. |
| |
| The lengths of the random and delta components |
| are given by the corresponding value of the protocol P; |
| if P requires K to be a fixed length, the length of both the |
| random and delta components is that fixed length; if P |
| allows the length of K to be variable up to a particular |
| maximum length, the length of the random component is that |
| maximum length and the length of the delta component is any |
| length less than or equal to that maximum length. |
| For example, usmHMACMD5AuthProtocol requires K to be a fixed |
| length of 16 octets and L - of 16 octets. |
| usmHMACSHAAuthProtocol requires K to be a fixed length of |
| 20 octets and L - of 20 octets. Other protocols may define |
| other sizes, as deemed appropriate. |
| |
| When a requester wants to change the old key K to a new |
| key keyNew on a remote entity, the 'random' component is |
| obtained from either a true random generator, or from a |
| pseudorandom generator, and the 'delta' component is |
| computed as follows: |
| |
| - a temporary variable is initialized to the existing value |
| of K; |
| - if the length of the keyNew is greater than L octets, |
| then: |
| - the random component is appended to the value of the |
| temporary variable, and the result is input to the |
| the hash algorithm H to produce a digest value, and |
| the temporary variable is set to this digest value; |
| - the value of the temporary variable is XOR-ed with |
| the first (next) L-octets (16 octets in case of MD5) |
| of the keyNew to produce the first (next) L-octets |
| (16 octets in case of MD5) of the 'delta' component. |
| - the above two steps are repeated until the unused |
| portion of the keyNew component is L octets or less, |
| - the random component is appended to the value of the |
| temporary variable, and the result is input to the |
| hash algorithm H to produce a digest value; |
| - this digest value, truncated if necessary to be the same |
| length as the unused portion of the keyNew, is XOR-ed |
| with the unused portion of the keyNew to produce the |
| (final portion of the) 'delta' component. |
| |
| For example, using MD5 as the hash algorithm H: |
| |
| iterations = (lenOfDelta - 1)/16; /* integer division */ |
| temp = keyOld; |
| for (i = 0; i < iterations; i++) { |
| temp = MD5 (temp || random); |
| delta[i*16 .. (i*16)+15] = |
| temp XOR keyNew[i*16 .. (i*16)+15]; |
| } |
| temp = MD5 (temp || random); |
| delta[i*16 .. lenOfDelta-1] = |
| temp XOR keyNew[i*16 .. lenOfDelta-1]; |
| |
| The 'random' and 'delta' components are then concatenated as |
| described above, and the resulting octet string is sent to |
| the recipient as the new value of an instance of this object. |
| |
| At the receiver side, when an instance of this object is set |
| to a new value, then a new value of K is computed as follows: |
| |
| - a temporary variable is initialized to the existing value |
| of K; |
| - if the length of the delta component is greater than L |
| octets, then: |
| - the random component is appended to the value of the |
| temporary variable, and the result is input to the |
| hash algorithm H to produce a digest value, and the |
| temporary variable is set to this digest value; |
| - the value of the temporary variable is XOR-ed with |
| the first (next) L-octets (16 octets in case of MD5) |
| of the delta component to produce the first (next) |
| L-octets (16 octets in case of MD5) of the new value |
| of K. |
| - the above two steps are repeated until the unused |
| portion of the delta component is L octets or less, |
| - the random component is appended to the value of the |
| temporary variable, and the result is input to the |
| hash algorithm H to produce a digest value; |
| - this digest value, truncated if necessary to be the same |
| length as the unused portion of the delta component, is |
| XOR-ed with the unused portion of the delta component to |
| produce the (final portion of the) new value of K. |
| |
| For example, using MD5 as the hash algorithm H: |
| |
| iterations = (lenOfDelta - 1)/16; /* integer division */ |
| temp = keyOld; |
| for (i = 0; i < iterations; i++) { |
| temp = MD5 (temp || random); |
| keyNew[i*16 .. (i*16)+15] = |
| temp XOR delta[i*16 .. (i*16)+15]; |
| } |
| temp = MD5 (temp || random); |
| keyNew[i*16 .. lenOfDelta-1] = |
| temp XOR delta[i*16 .. lenOfDelta-1]; |
| |
| The value of an object with this syntax, whenever it is |
| retrieved by the management protocol, is always the zero |
| length string. |
| |
| Note that the keyOld and keyNew are the localized keys. |
| |
| Note that it is probably wise that when an SNMP entity sends |
| a SetRequest to change a key, that it keeps a copy of the old |
| key until it has confirmed that the key change actually |
| succeeded. |
| " |
| SYNTAX OCTET STRING |
| |
| -- Statistics for the User-based Security Model ********************** |
| |
| usmStats OBJECT IDENTIFIER ::= { usmMIBObjects 1 } |
| |
| usmStatsUnsupportedSecLevels OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because they requested a |
| securityLevel that was unknown to the SNMP engine |
| or otherwise unavailable. |
| " |
| ::= { usmStats 1 } |
| |
| usmStatsNotInTimeWindows OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because they appeared |
| outside of the authoritative SNMP engine's window. |
| " |
| ::= { usmStats 2 } |
| |
| usmStatsUnknownUserNames OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because they referenced a |
| user that was not known to the SNMP engine. |
| " |
| ::= { usmStats 3 } |
| |
| usmStatsUnknownEngineIDs OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because they referenced an |
| snmpEngineID that was not known to the SNMP engine. |
| " |
| ::= { usmStats 4 } |
| |
| usmStatsWrongDigests OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because they didn't |
| contain the expected digest value. |
| " |
| ::= { usmStats 5 } |
| |
| usmStatsDecryptionErrors OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because they could not be |
| decrypted. |
| " |
| ::= { usmStats 6 } |
| |
| -- The usmUser Group ************************************************ |
| |
| usmUser OBJECT IDENTIFIER ::= { usmMIBObjects 2 } |
| |
| usmUserSpinLock OBJECT-TYPE |
| SYNTAX TestAndIncr |
| MAX-ACCESS read-write |
| STATUS current |
| DESCRIPTION "An advisory lock used to allow several cooperating |
| Command Generator Applications to coordinate their |
| use of facilities to alter secrets in the |
| usmUserTable. |
| " |
| ::= { usmUser 1 } |
| |
| -- The table of valid users for the User-based Security Model ******** |
| |
| usmUserTable OBJECT-TYPE |
| SYNTAX SEQUENCE OF UsmUserEntry |
| MAX-ACCESS not-accessible |
| STATUS current |
| DESCRIPTION "The table of users configured in the SNMP engine's |
| Local Configuration Datastore (LCD). |
| |
| To create a new user (i.e., to instantiate a new |
| conceptual row in this table), it is recommended to |
| follow this procedure: |
| |
| 1) GET(usmUserSpinLock.0) and save in sValue. |
| |
| 2) SET(usmUserSpinLock.0=sValue, |
| usmUserCloneFrom=templateUser, |
| usmUserStatus=createAndWait) |
| You should use a template user to clone from |
| which has the proper auth/priv protocol defined. |
| |
| If the new user is to use privacy: |
| |
| 3) generate the keyChange value based on the secret |
| privKey of the clone-from user and the secret key |
| to be used for the new user. Let us call this |
| pkcValue. |
| 4) GET(usmUserSpinLock.0) and save in sValue. |
| 5) SET(usmUserSpinLock.0=sValue, |
| usmUserPrivKeyChange=pkcValue |
| usmUserPublic=randomValue1) |
| 6) GET(usmUserPulic) and check it has randomValue1. |
| If not, repeat steps 4-6. |
| |
| If the new user will never use privacy: |
| |
| 7) SET(usmUserPrivProtocol=usmNoPrivProtocol) |
| |
| If the new user is to use authentication: |
| |
| 8) generate the keyChange value based on the secret |
| authKey of the clone-from user and the secret key |
| to be used for the new user. Let us call this |
| akcValue. |
| 9) GET(usmUserSpinLock.0) and save in sValue. |
| 10) SET(usmUserSpinLock.0=sValue, |
| usmUserAuthKeyChange=akcValue |
| usmUserPublic=randomValue2) |
| 11) GET(usmUserPulic) and check it has randomValue2. |
| If not, repeat steps 9-11. |
| |
| If the new user will never use authentication: |
| |
| 12) SET(usmUserAuthProtocol=usmNoAuthProtocol) |
| |
| Finally, activate the new user: |
| |
| 13) SET(usmUserStatus=active) |
| |
| The new user should now be available and ready to be |
| used for SNMPv3 communication. Note however that access |
| to MIB data must be provided via configuration of the |
| SNMP-VIEW-BASED-ACM-MIB. |
| |
| The use of usmUserSpinlock is to avoid conflicts with |
| another SNMP command generator application which may |
| also be acting on the usmUserTable. |
| " |
| ::= { usmUser 2 } |
| |
| usmUserEntry OBJECT-TYPE |
| SYNTAX UsmUserEntry |
| MAX-ACCESS not-accessible |
| STATUS current |
| DESCRIPTION "A user configured in the SNMP engine's Local |
| Configuration Datastore (LCD) for the User-based |
| Security Model. |
| " |
| INDEX { usmUserEngineID, |
| usmUserName |
| } |
| ::= { usmUserTable 1 } |
| |
| UsmUserEntry ::= SEQUENCE |
| { |
| usmUserEngineID SnmpEngineID, |
| usmUserName SnmpAdminString, |
| usmUserSecurityName SnmpAdminString, |
| usmUserCloneFrom RowPointer, |
| usmUserAuthProtocol AutonomousType, |
| usmUserAuthKeyChange KeyChange, |
| usmUserOwnAuthKeyChange KeyChange, |
| usmUserPrivProtocol AutonomousType, |
| usmUserPrivKeyChange KeyChange, |
| usmUserOwnPrivKeyChange KeyChange, |
| usmUserPublic OCTET STRING, |
| usmUserStorageType StorageType, |
| usmUserStatus RowStatus |
| } |
| |
| usmUserEngineID OBJECT-TYPE |
| SYNTAX SnmpEngineID |
| MAX-ACCESS not-accessible |
| STATUS current |
| DESCRIPTION "An SNMP engine's administratively-unique identifier. |
| |
| In a simple agent, this value is always that agent's |
| own snmpEngineID value. |
| |
| The value can also take the value of the snmpEngineID |
| of a remote SNMP engine with which this user can |
| communicate. |
| " |
| ::= { usmUserEntry 1 } |
| |
| usmUserName OBJECT-TYPE |
| SYNTAX SnmpAdminString (SIZE(1..32)) |
| MAX-ACCESS not-accessible |
| STATUS current |
| DESCRIPTION "A human readable string representing the name of |
| the user. |
| |
| This is the (User-based Security) Model dependent |
| security ID. |
| " |
| ::= { usmUserEntry 2 } |
| |
| usmUserSecurityName OBJECT-TYPE |
| SYNTAX SnmpAdminString |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "A human readable string representing the user in |
| Security Model independent format. |
| |
| The default transformation of the User-based Security |
| Model dependent security ID to the securityName and |
| vice versa is the identity function so that the |
| securityName is the same as the userName. |
| " |
| ::= { usmUserEntry 3 } |
| |
| usmUserCloneFrom OBJECT-TYPE |
| SYNTAX RowPointer |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "A pointer to another conceptual row in this |
| usmUserTable. The user in this other conceptual |
| row is called the clone-from user. |
| |
| When a new user is created (i.e., a new conceptual |
| row is instantiated in this table), the privacy and |
| authentication parameters of the new user must be |
| cloned from its clone-from user. These parameters are: |
| - authentication protocol (usmUserAuthProtocol) |
| - privacy protocol (usmUserPrivProtocol) |
| They will be copied regardless of what the current |
| value is. |
| |
| Cloning also causes the initial values of the secret |
| authentication key (authKey) and the secret encryption |
| |
| key (privKey) of the new user to be set to the same |
| values as the corresponding secrets of the clone-from |
| user to allow the KeyChange process to occur as |
| required during user creation. |
| |
| The first time an instance of this object is set by |
| a management operation (either at or after its |
| instantiation), the cloning process is invoked. |
| Subsequent writes are successful but invoke no |
| action to be taken by the receiver. |
| The cloning process fails with an 'inconsistentName' |
| error if the conceptual row representing the |
| clone-from user does not exist or is not in an active |
| state when the cloning process is invoked. |
| |
| When this object is read, the ZeroDotZero OID |
| is returned. |
| " |
| ::= { usmUserEntry 4 } |
| |
| usmUserAuthProtocol OBJECT-TYPE |
| SYNTAX AutonomousType |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "An indication of whether messages sent on behalf of |
| this user to/from the SNMP engine identified by |
| usmUserEngineID, can be authenticated, and if so, |
| the type of authentication protocol which is used. |
| |
| An instance of this object is created concurrently |
| with the creation of any other object instance for |
| the same user (i.e., as part of the processing of |
| the set operation which creates the first object |
| instance in the same conceptual row). |
| |
| If an initial set operation (i.e. at row creation time) |
| tries to set a value for an unknown or unsupported |
| protocol, then a 'wrongValue' error must be returned. |
| |
| The value will be overwritten/set when a set operation |
| is performed on the corresponding instance of |
| usmUserCloneFrom. |
| |
| Once instantiated, the value of such an instance of |
| this object can only be changed via a set operation to |
| the value of the usmNoAuthProtocol. |
| |
| If a set operation tries to change the value of an |
| |
| existing instance of this object to any value other |
| than usmNoAuthProtocol, then an 'inconsistentValue' |
| error must be returned. |
| |
| If a set operation tries to set the value to the |
| usmNoAuthProtocol while the usmUserPrivProtocol value |
| in the same row is not equal to usmNoPrivProtocol, |
| then an 'inconsistentValue' error must be returned. |
| That means that an SNMP command generator application |
| must first ensure that the usmUserPrivProtocol is set |
| to the usmNoPrivProtocol value before it can set |
| the usmUserAuthProtocol value to usmNoAuthProtocol. |
| " |
| DEFVAL { usmNoAuthProtocol } |
| ::= { usmUserEntry 5 } |
| |
| usmUserAuthKeyChange OBJECT-TYPE |
| SYNTAX KeyChange -- typically (SIZE (0 | 32)) for HMACMD5 |
| -- typically (SIZE (0 | 40)) for HMACSHA |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "An object, which when modified, causes the secret |
| authentication key used for messages sent on behalf |
| of this user to/from the SNMP engine identified by |
| usmUserEngineID, to be modified via a one-way |
| function. |
| |
| The associated protocol is the usmUserAuthProtocol. |
| The associated secret key is the user's secret |
| authentication key (authKey). The associated hash |
| algorithm is the algorithm used by the user's |
| usmUserAuthProtocol. |
| |
| When creating a new user, it is an 'inconsistentName' |
| error for a set operation to refer to this object |
| unless it is previously or concurrently initialized |
| through a set operation on the corresponding instance |
| of usmUserCloneFrom. |
| |
| When the value of the corresponding usmUserAuthProtocol |
| is usmNoAuthProtocol, then a set is successful, but |
| effectively is a no-op. |
| |
| When this object is read, the zero-length (empty) |
| string is returned. |
| |
| The recommended way to do a key change is as follows: |
| |
| 1) GET(usmUserSpinLock.0) and save in sValue. |
| 2) generate the keyChange value based on the old |
| (existing) secret key and the new secret key, |
| let us call this kcValue. |
| |
| If you do the key change on behalf of another user: |
| |
| 3) SET(usmUserSpinLock.0=sValue, |
| usmUserAuthKeyChange=kcValue |
| usmUserPublic=randomValue) |
| |
| If you do the key change for yourself: |
| |
| 4) SET(usmUserSpinLock.0=sValue, |
| usmUserOwnAuthKeyChange=kcValue |
| usmUserPublic=randomValue) |
| |
| If you get a response with error-status of noError, |
| then the SET succeeded and the new key is active. |
| If you do not get a response, then you can issue a |
| GET(usmUserPublic) and check if the value is equal |
| to the randomValue you did send in the SET. If so, then |
| the key change succeeded and the new key is active |
| (probably the response got lost). If not, then the SET |
| request probably never reached the target and so you |
| can start over with the procedure above. |
| " |
| DEFVAL { ''H } -- the empty string |
| ::= { usmUserEntry 6 } |
| |
| usmUserOwnAuthKeyChange OBJECT-TYPE |
| SYNTAX KeyChange -- typically (SIZE (0 | 32)) for HMACMD5 |
| -- typically (SIZE (0 | 40)) for HMACSHA |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "Behaves exactly as usmUserAuthKeyChange, with one |
| notable difference: in order for the set operation |
| to succeed, the usmUserName of the operation |
| requester must match the usmUserName that |
| indexes the row which is targeted by this |
| operation. |
| In addition, the USM security model must be |
| used for this operation. |
| |
| The idea here is that access to this column can be |
| public, since it will only allow a user to change |
| his own secret authentication key (authKey). |
| Note that this can only be done once the row is active. |
| |
| When a set is received and the usmUserName of the |
| requester is not the same as the umsUserName that |
| indexes the row which is targeted by this operation, |
| then a 'noAccess' error must be returned. |
| |
| When a set is received and the security model in use |
| is not USM, then a 'noAccess' error must be returned. |
| " |
| DEFVAL { ''H } -- the empty string |
| ::= { usmUserEntry 7 } |
| |
| usmUserPrivProtocol OBJECT-TYPE |
| SYNTAX AutonomousType |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "An indication of whether messages sent on behalf of |
| this user to/from the SNMP engine identified by |
| usmUserEngineID, can be protected from disclosure, |
| and if so, the type of privacy protocol which is used. |
| |
| An instance of this object is created concurrently |
| with the creation of any other object instance for |
| the same user (i.e., as part of the processing of |
| the set operation which creates the first object |
| instance in the same conceptual row). |
| |
| If an initial set operation (i.e. at row creation time) |
| tries to set a value for an unknown or unsupported |
| protocol, then a 'wrongValue' error must be returned. |
| |
| The value will be overwritten/set when a set operation |
| is performed on the corresponding instance of |
| usmUserCloneFrom. |
| |
| Once instantiated, the value of such an instance of |
| this object can only be changed via a set operation to |
| the value of the usmNoPrivProtocol. |
| |
| If a set operation tries to change the value of an |
| existing instance of this object to any value other |
| than usmNoPrivProtocol, then an 'inconsistentValue' |
| error must be returned. |
| |
| Note that if any privacy protocol is used, then you |
| must also use an authentication protocol. In other |
| words, if usmUserPrivProtocol is set to anything else |
| than usmNoPrivProtocol, then the corresponding instance |
| of usmUserAuthProtocol cannot have a value of |
| |
| usmNoAuthProtocol. If it does, then an |
| 'inconsistentValue' error must be returned. |
| " |
| DEFVAL { usmNoPrivProtocol } |
| ::= { usmUserEntry 8 } |
| |
| usmUserPrivKeyChange OBJECT-TYPE |
| SYNTAX KeyChange -- typically (SIZE (0 | 32)) for DES |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "An object, which when modified, causes the secret |
| encryption key used for messages sent on behalf |
| of this user to/from the SNMP engine identified by |
| usmUserEngineID, to be modified via a one-way |
| function. |
| |
| The associated protocol is the usmUserPrivProtocol. |
| The associated secret key is the user's secret |
| privacy key (privKey). The associated hash |
| algorithm is the algorithm used by the user's |
| usmUserAuthProtocol. |
| |
| When creating a new user, it is an 'inconsistentName' |
| error for a set operation to refer to this object |
| unless it is previously or concurrently initialized |
| through a set operation on the corresponding instance |
| of usmUserCloneFrom. |
| |
| When the value of the corresponding usmUserPrivProtocol |
| is usmNoPrivProtocol, then a set is successful, but |
| effectively is a no-op. |
| |
| When this object is read, the zero-length (empty) |
| string is returned. |
| See the description clause of usmUserAuthKeyChange for |
| a recommended procedure to do a key change. |
| " |
| DEFVAL { ''H } -- the empty string |
| ::= { usmUserEntry 9 } |
| |
| usmUserOwnPrivKeyChange OBJECT-TYPE |
| SYNTAX KeyChange -- typically (SIZE (0 | 32)) for DES |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "Behaves exactly as usmUserPrivKeyChange, with one |
| notable difference: in order for the Set operation |
| to succeed, the usmUserName of the operation |
| requester must match the usmUserName that indexes |
| |
| the row which is targeted by this operation. |
| In addition, the USM security model must be |
| used for this operation. |
| |
| The idea here is that access to this column can be |
| public, since it will only allow a user to change |
| his own secret privacy key (privKey). |
| Note that this can only be done once the row is active. |
| |
| When a set is received and the usmUserName of the |
| requester is not the same as the umsUserName that |
| indexes the row which is targeted by this operation, |
| then a 'noAccess' error must be returned. |
| |
| When a set is received and the security model in use |
| is not USM, then a 'noAccess' error must be returned. |
| " |
| DEFVAL { ''H } -- the empty string |
| ::= { usmUserEntry 10 } |
| |
| usmUserPublic OBJECT-TYPE |
| SYNTAX OCTET STRING (SIZE(0..32)) |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "A publicly-readable value which can be written as part |
| of the procedure for changing a user's secret |
| authentication and/or privacy key, and later read to |
| determine whether the change of the secret was |
| effected. |
| " |
| DEFVAL { ''H } -- the empty string |
| ::= { usmUserEntry 11 } |
| |
| usmUserStorageType OBJECT-TYPE |
| SYNTAX StorageType |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "The storage type for this conceptual row. |
| |
| Conceptual rows having the value 'permanent' must |
| allow write-access at a minimum to: |
| |
| - usmUserAuthKeyChange, usmUserOwnAuthKeyChange |
| and usmUserPublic for a user who employs |
| authentication, and |
| - usmUserPrivKeyChange, usmUserOwnPrivKeyChange |
| and usmUserPublic for a user who employs |
| privacy. |
| |
| Note that any user who employs authentication or |
| privacy must allow its secret(s) to be updated and |
| thus cannot be 'readOnly'. |
| |
| If an initial set operation tries to set the value to |
| 'readOnly' for a user who employs authentication or |
| privacy, then an 'inconsistentValue' error must be |
| returned. Note that if the value has been previously |
| set (implicit or explicit) to any value, then the rules |
| as defined in the StorageType Textual Convention apply. |
| |
| It is an implementation issue to decide if a SET for |
| a readOnly or permanent row is accepted at all. In some |
| contexts this may make sense, in others it may not. If |
| a SET for a readOnly or permanent row is not accepted |
| at all, then a 'wrongValue' error must be returned. |
| " |
| DEFVAL { nonVolatile } |
| ::= { usmUserEntry 12 } |
| |
| usmUserStatus OBJECT-TYPE |
| SYNTAX RowStatus |
| MAX-ACCESS read-create |
| STATUS current |
| DESCRIPTION "The status of this conceptual row. |
| |
| Until instances of all corresponding columns are |
| appropriately configured, the value of the |
| corresponding instance of the usmUserStatus column |
| is 'notReady'. |
| |
| In particular, a newly created row for a user who |
| employs authentication, cannot be made active until the |
| corresponding usmUserCloneFrom and usmUserAuthKeyChange |
| have been set. |
| |
| Further, a newly created row for a user who also |
| employs privacy, cannot be made active until the |
| usmUserPrivKeyChange has been set. |
| |
| The RowStatus TC [RFC2579] requires that this |
| DESCRIPTION clause states under which circumstances |
| other objects in this row can be modified: |
| |
| The value of this object has no effect on whether |
| other objects in this conceptual row can be modified, |
| except for usmUserOwnAuthKeyChange and |
| usmUserOwnPrivKeyChange. For these 2 objects, the |
| |
| value of usmUserStatus MUST be active. |
| " |
| ::= { usmUserEntry 13 } |
| |
| -- Conformance Information ******************************************* |
| |
| usmMIBCompliances OBJECT IDENTIFIER ::= { usmMIBConformance 1 } |
| usmMIBGroups OBJECT IDENTIFIER ::= { usmMIBConformance 2 } |
| |
| -- Compliance statements |
| |
| usmMIBCompliance MODULE-COMPLIANCE |
| STATUS current |
| DESCRIPTION "The compliance statement for SNMP engines which |
| implement the SNMP-USER-BASED-SM-MIB. |
| " |
| |
| MODULE -- this module |
| MANDATORY-GROUPS { usmMIBBasicGroup } |
| |
| OBJECT usmUserAuthProtocol |
| MIN-ACCESS read-only |
| DESCRIPTION "Write access is not required." |
| |
| OBJECT usmUserPrivProtocol |
| MIN-ACCESS read-only |
| DESCRIPTION "Write access is not required." |
| ::= { usmMIBCompliances 1 } |
| |
| -- Units of compliance |
| usmMIBBasicGroup OBJECT-GROUP |
| OBJECTS { |
| usmStatsUnsupportedSecLevels, |
| usmStatsNotInTimeWindows, |
| usmStatsUnknownUserNames, |
| usmStatsUnknownEngineIDs, |
| usmStatsWrongDigests, |
| usmStatsDecryptionErrors, |
| usmUserSpinLock, |
| usmUserSecurityName, |
| usmUserCloneFrom, |
| usmUserAuthProtocol, |
| usmUserAuthKeyChange, |
| usmUserOwnAuthKeyChange, |
| usmUserPrivProtocol, |
| usmUserPrivKeyChange, |
| usmUserOwnPrivKeyChange, |
| usmUserPublic, |
| usmUserStorageType, |
| usmUserStatus |
| } |
| STATUS current |
| DESCRIPTION "A collection of objects providing for configuration |
| of an SNMP engine which implements the SNMP |
| User-based Security Model. |
| " |
| ::= { usmMIBGroups 1 } |
| |
| END |