usmDHUserKeyTable_data_set.c0000644
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:43k
源码类别:
SNMP编程
开发平台:
Unix_Linux
- /*
- * Note: this file originally auto-generated by mib2c using
- * version : 1.18 $ of : mfd-data-set.m2c,v $
- *
- * $Id: usmDHUserKeyTable_data_set.c,v 1.7 2004/10/16 00:35:35 rstory Exp $
- *
- */
- /*
- * standard Net-SNMP includes
- */
- #include <net-snmp/net-snmp-config.h>
- #include <net-snmp/net-snmp-includes.h>
- #include <net-snmp/agent/net-snmp-agent-includes.h>
- #include <openssl/dh.h>
- /*
- * include our parent header
- */
- #define NEED_USMDH_FUNCTIONS
- #include "usmDHUserKeyTable.h"
- int
- usmDHUserCheckValue(struct usmUser *user, int for_auth_key,
- char *val, size_t val_len)
- {
- /*
- * The set value must be composed of 2 parts, the first being the
- * current value
- */
- char *current_value;
- size_t current_value_len;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserCheckValue",
- "calledn"));
- usmDHGetUserKeyChange(user, for_auth_key,
- ¤t_value, ¤t_value_len);
- if (!current_value)
- return MFD_ERROR;
- if (val_len != current_value_len * 2)
- return MFD_NOT_VALID_NOW;
- if (memcmp(current_value, val, current_value_len) != 0)
- return SNMP_ERR_WRONGVALUE; /* mandated error string */
- return MFD_SUCCESS;
- }
- int
- usmDHSetKey(struct usmUser *user, int for_auth_key,
- char *val, size_t val_len)
- {
- DH *dh;
- BIGNUM *other_pub;
- char *key;
- size_t key_len;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHSetKey", "calledn"));
- /*
- * XXX: mem leaks on errors abound
- */
- dh = usmDHGetUserDHptr(user, for_auth_key);
- if (!dh)
- return MFD_ERROR;
- other_pub = BN_bin2bn(val + val_len / 2, val_len / 2, NULL);
- if (!other_pub)
- return MFD_ERROR;
- /*
- * Set the new key for a user
- */
- key_len = DH_size(dh);
- key = malloc(DH_size(dh));
- if (!key)
- return MFD_ERROR;
- if (DH_compute_key(key, other_pub, dh)) {
- u_char **replkey;
- size_t replkey_size;
- if (for_auth_key) {
- replkey_size = user->authKeyLen;
- replkey = &user->authKey;
- } else {
- replkey_size = user->privKeyLen;
- replkey = &user->privKey;
- }
- /*
- * is it large enough?
- */
- if (key_len < replkey_size)
- return MFD_ERROR;
- /*
- * copy right most bits, per the object requirements
- */
- SNMP_FREE(*replkey);
- memdup(replkey, key + key_len - replkey_size, replkey_size);
- return MFD_SUCCESS;
- }
- return MFD_ERROR;
- }
- /** @defgroup data_set data_set: Routines to set data
- *
- * These routines are used to set the value for individual objects. The
- * row context is passed, along with the new value.
- *
- * @{
- */
- /**********************************************************************
- **********************************************************************
- ***
- *** Table usmDHUserKeyTable
- ***
- **********************************************************************
- **********************************************************************/
- /*
- * usmDHUserKeyTable is subid 2 of usmDHPublicObjects.
- * Its status is Current.
- * OID: .1.3.6.1.3.101.1.1.2, length: 9
- */
- /*
- * NOTE: if you update this chart, please update the versions in
- * local/mib2c-conf.d/parent-set.m2i
- * agent/mibgroup/helpers/baby_steps.c
- * while you're at it.
- */
- /*
- ***********************************************************************
- * Baby Steps Flow Chart (2004.06.05) *
- * *
- * +--------------+ +================+ U = unconditional path *
- * |optional state| ||required state|| S = path for success *
- * +--------------+ +================+ E = path for error *
- ***********************************************************************
- *
- * +--------------+
- * | pre |
- * | request |
- * +--------------+
- * | U
- * +==============+
- * +----------------|| object ||
- * | E || lookup ||
- * | +==============+
- * | | S
- * | +==============+
- * | E || check ||
- * |<---------------|| values ||
- * | +==============+
- * | | S
- * | +==============+
- * | +<-------|| undo ||
- * | | E || setup ||
- * | | +==============+
- * | | | S
- * | | +==============+
- * | | || set ||-------------------------->+
- * | | || value || E |
- * | | +==============+ |
- * | | | S |
- * | | +--------------+ |
- * | | | check |-------------------------->|
- * | | | consistency | E |
- * | | +--------------+ |
- * | | | S |
- * | | +==============+ +==============+ |
- * | | || commit ||-------->|| undo || |
- * | | || || E || commit || |
- * | | +==============+ +==============+ |
- * | | | S U |<--------+
- * | | +--------------+ +==============+
- * | | | irreversible | || undo ||
- * | | | commit | || set ||
- * | | +--------------+ +==============+
- * | | | U U |
- * | +-------------->|<------------------------+
- * | +==============+
- * | || undo ||
- * | || cleanup ||
- * | +==============+
- * +---------------------->| U
- * +--------------+
- * | post |
- * | request |
- * +--------------+
- *
- */
- /**
- * Setup up context with information needed to undo a set request.
- *
- * This function will be called before the individual node undo setup
- * functions are called. If you need to do any undo setup that is not
- * related to a specific column, you can do it here.
- *
- * Note that an individual node's undo_setup function will only be called
- * if that node is being set to a new value.
- *
- * If there is any setup specific to a particular column (e.g. allocating
- * memory for a string), you should do that setup in the node's undo_setup
- * function, so it won't be done unless it is necessary.
- *
- * @param rowreq_ctx
- * Pointer to the table context (usmDHUserKeyTable_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error. set will fail.
- */
- int
- usmDHUserKeyTable_undo_setup(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_undo_setup",
- "calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:451:M: |-> Setup usmDHUserKeyTable undo.
- * set up usmDHUserKeyTable undo information, in preparation for a set.
- */
- return rc;
- } /* usmDHUserKeyTable_undo_setup */
- /**
- * Cleanup up context undo information.
- *
- * This function will be called after set/commit processing. If you
- * allocated any resources in undo_setup, this is the place to release
- * those resources.
- *
- * This function is called regardless of the success or failure of the set
- * request. If you need to perform different steps for cleanup depending
- * on success or failure, you can add a flag to the rowreq_ctx.
- *
- * @param rowreq_ctx
- * Pointer to the table context (usmDHUserKeyTable_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error
- */
- int
- usmDHUserKeyTable_undo_cleanup(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_undo_cleanup",
- "calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:452:M: |-> Cleanup usmDHUserKeyTable undo.
- */
- return rc;
- } /* usmDHUserKeyTable_undo_cleanup */
- /**
- * commit new values.
- *
- * At this point, you should have done everything you can to ensure that
- * this commit will not fail.
- *
- * Should you need different behavior depending on which columns were
- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
- * set. The definitions for the FLAG_* bits can be found in
- * usmDHUserKeyTable_oids.h.
- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
- *
- * @param usmDHUserKeyTable_rowreq_ctx
- * Pointer to the users context.
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error
- */
- int
- usmDHUserKeyTable_commit(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_commit",
- "calledn"));
- /*
- * nothing to do; we wait for the irreversible commit
- */
- return MFD_SUCCESS;
- } /* usmDHUserKeyTable_commit */
- /**
- * undo commit new values.
- *
- * Should you need different behavior depending on which columns were
- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
- * set. The definitions for the FLAG_* bits can be found in
- * usmDHUserKeyTable_oids.h.
- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
- *
- * @param usmDHUserKeyTable_rowreq_ctx
- * Pointer to the users context.
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error
- */
- int
- usmDHUserKeyTable_undo_commit(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_undo_commit",
- "calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:485:M: |-> Undo usmDHUserKeyTable commit.
- * check the column's flag in rowreq_ctx->column_set_flags to see
- * if it was set during commit, then undo it.
- *
- * eg: if (rowreq_ctx->column_set_flags & FLAG_) {}
- */
- return rc;
- } /* usmDHUserKeyTable_undo_commit */
- /**
- * perform commit actions that are not reversible
- *
- * THERE IS NO ATTEMPT AT RECOVERY FOR ERRORS FROM THIS STATE!
- *
- * @param usmDHUserKeyTable_rowreq_ctx
- * Pointer to the users context.
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : other error
- */
- int
- usmDHUserKeyTable_irreversible_commit(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx)
- {
- struct usmUser *user;
- int flags;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_irreversible_commit", "calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:495:o: Irreversible usmDHUserKeyTable commit.
- */
- user = rowreq_ctx->data;
- flags = rowreq_ctx->column_set_flags;
- if (flags & FLAG_USMDHUSERAUTHKEYCHANGE ||
- flags & FLAG_USMDHUSEROWNAUTHKEYCHANGE) {
- /*
- * free the keychange objects so they reset to new values
- */
- DH_free(user->usmDHUserAuthKeyChange);
- user->usmDHUserAuthKeyChange = NULL;
- }
- if (flags & FLAG_USMDHUSERPRIVKEYCHANGE ||
- flags & FLAG_USMDHUSEROWNPRIVKEYCHANGE) {
- /*
- * free the keychange objects so they reset to new values
- */
- DH_free(user->usmDHUserPrivKeyChange);
- user->usmDHUserPrivKeyChange = NULL;
- }
- return MFD_SUCCESS;
- } /* usmDHUserKeyTable_irreversible_commit */
- /*
- * TODO:420:r: Implement usmDHUserKeyTable index validation.
- */
- /*---------------------------------------------------------------------
- * SNMP-USER-BASED-SM-MIB::usmUserEntry.usmUserEngineID
- * usmUserEngineID is subid 1 of usmUserEntry.
- * Its status is Current, and its access level is NoAccess.
- * OID: .1.3.6.1.6.3.15.1.2.2.1.1
- * 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.
- *
- * Attributes:
- * accessible 0 isscalar 0 enums 0 hasdefval 0
- * readable 0 iscolumn 1 ranges 1 hashint 0
- * settable 0
- *
- * Ranges: 5 - 32;
- *
- * Its syntax is SnmpEngineID (based on perltype OCTETSTR)
- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
- * This data type requires a length. (Max 32)
- *
- *
- *
- * NOTE: NODE usmUserEngineID IS NOT ACCESSIBLE
- *
- *
- */
- /*---------------------------------------------------------------------
- * SNMP-USER-BASED-SM-MIB::usmUserEntry.usmUserName
- * usmUserName is subid 2 of usmUserEntry.
- * Its status is Current, and its access level is NoAccess.
- * OID: .1.3.6.1.6.3.15.1.2.2.1.2
- * Description:
- A human readable string representing the name of
- the user.
- This is the (User-based Security) Model dependent
- security ID.
- *
- * Attributes:
- * accessible 0 isscalar 0 enums 0 hasdefval 0
- * readable 0 iscolumn 1 ranges 1 hashint 1
- * settable 0
- * hint: 255t
- *
- * Ranges: 1 - 32;
- *
- * Its syntax is SnmpAdminString (based on perltype OCTETSTR)
- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
- * This data type requires a length. (Max 32)
- *
- *
- *
- * NOTE: NODE usmUserName IS NOT ACCESSIBLE
- *
- *
- */
- /*
- * TODO:440:M: Implement usmDHUserKeyTable node value checks.
- * TODO:450:M: Implement usmDHUserKeyTable undo functions.
- * TODO:460:M: Implement usmDHUserKeyTable set functions.
- * TODO:480:M: Implement usmDHUserKeyTable commit functions.
- */
- /*---------------------------------------------------------------------
- * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserAuthKeyChange
- * usmDHUserAuthKeyChange is subid 1 of usmDHUserKeyEntry.
- * Its status is Current, and its access level is Create.
- * OID: .1.3.6.1.3.101.1.1.2.1.1
- * Description:
- The object used to change any given user's Authentication Key
- using a Diffie-Hellman key exchange.
- The right-most n bits of the shared secret 'sk', where 'n' is the
- number of bits required for the protocol defined by
- usmUserAuthProtocol, are installed as the operational
- authentication key for this row after a successful SET.
- *
- * Attributes:
- * accessible 1 isscalar 0 enums 0 hasdefval 0
- * readable 1 iscolumn 1 ranges 0 hashint 0
- * settable 1
- *
- *
- * Its syntax is DHKeyChange (based on perltype OCTETSTR)
- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
- * This data type requires a length. (Max 32)
- */
- /**
- * Check that the proposed new value is potentially valid.
- *
- * @param rowreq_ctx
- * Pointer to the row request context.
- * @param usmDHUserAuthKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserAuthKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserAuthKeyChange_val_ptr
- *
- * @retval MFD_SUCCESS : incoming value is legal
- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
- *
- * This is the place to check for requirements that are not
- * expressed in the mib syntax (for example, a requirement that
- * is detailed in the description for an object).
- *
- * You should check that the requested change between the undo value and the
- * new value is legal (ie, the transistion from one value to another
- * is legal).
- *
- *@note
- * This check is only to determine if the new value
- * is b potentially valid. This is the first check of many, and
- * is one of the simplest ones.
- *
- *@note
- * this is not the place to do any checks for values
- * which depend on some other value in the mib. Those
- * types of checks should be done in the
- * usmDHUserKeyTable_check_dependencies() function.
- *
- * The following checks have already been done for you:
- * The syntax is ASN_OCTET_STR
- *
- * If there a no other checks you need to do, simply return MFD_SUCCESS.
- *
- */
- int
- usmDHUserAuthKeyChange_check_value(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx,
- char *usmDHUserAuthKeyChange_val_ptr,
- size_t
- usmDHUserAuthKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserAuthKeyChange_check_value", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserAuthKeyChange_val_ptr);
- /*
- * TODO:441:o: |-> Check for valid usmDHUserAuthKeyChange value.
- */
- return usmDHUserCheckValue(rowreq_ctx->data, 1,
- usmDHUserAuthKeyChange_val_ptr,
- usmDHUserAuthKeyChange_val_ptr_len);
- } /* usmDHUserAuthKeyChange_check_value */
- /**
- * Save old value information
- *
- * @param rowreq_ctx
- * Pointer to the table context (usmDHUserKeyTable_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error. set will fail.
- *
- * This function will be called after the table level undo setup function
- * usmDHUserKeyTable_undo_setup has been called.
- *
- *@note
- * this function will only be called if a new value is set for this column.
- *
- * If there is any setup specific to a particular column (e.g. allocating
- * memory for a string), you should do that setup in this function, so it
- * won't be done unless it is necessary.
- */
- int
- usmDHUserAuthKeyChange_undo_setup(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx)
- {
- struct usmUser *undouser;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserAuthKeyChange_undo_setup", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:455:o: |-> Setup usmDHUserAuthKeyChange undo.
- */
- /*
- * copy usmDHUserAuthKeyChange and usmDHUserAuthKeyChange_len data
- * set rowreq_ctx->undo->usmDHUserAuthKeyChange from rowreq_ctx->data->usmDHUserAuthKeyChange
- */
- undouser = rowreq_ctx->undo;
- undouser->authKeyLen = rowreq_ctx->data->authKeyLen;
- memdup(&undouser->authKey, rowreq_ctx->data->authKey,
- rowreq_ctx->data->authKeyLen);
- return MFD_SUCCESS;
- } /* usmDHUserAuthKeyChange_undo_setup */
- /**
- * Set the new value.
- *
- * @param rowreq_ctx
- * Pointer to the users context. You should know how to
- * manipulate the value from this object.
- * @param usmDHUserAuthKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserAuthKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserAuthKeyChange_val_ptr
- */
- int
- usmDHUserAuthKeyChange_set(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
- char *usmDHUserAuthKeyChange_val_ptr,
- size_t usmDHUserAuthKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserAuthKeyChange_set",
- "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserAuthKeyChange_val_ptr);
- /*
- * TODO:461:M: |-> Set usmDHUserAuthKeyChange value.
- * set usmDHUserAuthKeyChange value in rowreq_ctx->data
- */
- usmDHSetKey(rowreq_ctx->data, 1,
- usmDHUserAuthKeyChange_val_ptr,
- usmDHUserAuthKeyChange_val_ptr_len);
- return MFD_SUCCESS;
- } /* usmDHUserAuthKeyChange_set */
- /**
- * undo the previous set.
- *
- * @param rowreq_ctx
- * Pointer to the users context.
- */
- int
- usmDHUserAuthKeyChange_undo(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- struct usmUser *undouser;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserAuthKeyChange_undo",
- "calledn"));
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:456:o: |-> Clean up usmDHUserAuthKeyChange undo.
- */
- /*
- * copy usmDHUserAuthKeyChange and usmDHUserAuthKeyChange_len data
- * set rowreq_ctx->data->usmDHUserAuthKeyChange from rowreq_ctx->undo->usmDHUserAuthKeyChange
- */
- undouser = rowreq_ctx->undo;
- undouser->authKeyLen = rowreq_ctx->data->authKeyLen;
- SNMP_FREE(rowreq_ctx->data->authKey);
- rowreq_ctx->data->authKey = undouser->authKey;
- undouser->authKey = NULL;
- return MFD_SUCCESS;
- } /* usmDHUserAuthKeyChange_undo */
- /*---------------------------------------------------------------------
- * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserOwnAuthKeyChange
- * usmDHUserOwnAuthKeyChange is subid 2 of usmDHUserKeyEntry.
- * Its status is Current, and its access level is Create.
- * OID: .1.3.6.1.3.101.1.1.2.1.2
- * Description:
- The object used to change the agents own Authentication Key
- using a Diffie-Hellman key exchange.
- The right-most n bits of the shared secret 'sk', where 'n' is the
- number of bits required for the protocol defined by
- usmUserAuthProtocol, are installed as the operational
- authentication key for this row after a successful SET.
- *
- * Attributes:
- * accessible 1 isscalar 0 enums 0 hasdefval 0
- * readable 1 iscolumn 1 ranges 0 hashint 0
- * settable 1
- *
- *
- * Its syntax is DHKeyChange (based on perltype OCTETSTR)
- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
- * This data type requires a length. (Max 32)
- */
- /**
- * Check that the proposed new value is potentially valid.
- *
- * @param rowreq_ctx
- * Pointer to the row request context.
- * @param usmDHUserOwnAuthKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserOwnAuthKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserOwnAuthKeyChange_val_ptr
- *
- * @retval MFD_SUCCESS : incoming value is legal
- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
- *
- * This is the place to check for requirements that are not
- * expressed in the mib syntax (for example, a requirement that
- * is detailed in the description for an object).
- *
- * You should check that the requested change between the undo value and the
- * new value is legal (ie, the transistion from one value to another
- * is legal).
- *
- *@note
- * This check is only to determine if the new value
- * is b potentially valid. This is the first check of many, and
- * is one of the simplest ones.
- *
- *@note
- * this is not the place to do any checks for values
- * which depend on some other value in the mib. Those
- * types of checks should be done in the
- * usmDHUserKeyTable_check_dependencies() function.
- *
- * The following checks have already been done for you:
- * The syntax is ASN_OCTET_STR
- *
- * If there a no other checks you need to do, simply return MFD_SUCCESS.
- *
- */
- int
- usmDHUserOwnAuthKeyChange_check_value(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx, char
- *usmDHUserOwnAuthKeyChange_val_ptr, size_t
- usmDHUserOwnAuthKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnAuthKeyChange_check_value", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserOwnAuthKeyChange_val_ptr);
- /*
- * TODO:441:o: |-> Check for valid usmDHUserOwnAuthKeyChange value.
- */
- return
- usmDHUserAuthKeyChange_check_value(rowreq_ctx,
- usmDHUserOwnAuthKeyChange_val_ptr,
- usmDHUserOwnAuthKeyChange_val_ptr_len);
- } /* usmDHUserOwnAuthKeyChange_check_value */
- /**
- * Save old value information
- *
- * @param rowreq_ctx
- * Pointer to the table context (usmDHUserKeyTable_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error. set will fail.
- *
- * This function will be called after the table level undo setup function
- * usmDHUserKeyTable_undo_setup has been called.
- *
- *@note
- * this function will only be called if a new value is set for this column.
- *
- * If there is any setup specific to a particular column (e.g. allocating
- * memory for a string), you should do that setup in this function, so it
- * won't be done unless it is necessary.
- */
- int
- usmDHUserOwnAuthKeyChange_undo_setup(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnAuthKeyChange_undo_setup", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:455:o: |-> Setup usmDHUserOwnAuthKeyChange undo.
- */
- /*
- * copy usmDHUserOwnAuthKeyChange and usmDHUserOwnAuthKeyChange_len data
- * set rowreq_ctx->undo->usmDHUserOwnAuthKeyChange from rowreq_ctx->data->usmDHUserOwnAuthKeyChange
- */
- return usmDHUserAuthKeyChange_undo_setup(rowreq_ctx);
- } /* usmDHUserOwnAuthKeyChange_undo_setup */
- /**
- * Set the new value.
- *
- * @param rowreq_ctx
- * Pointer to the users context. You should know how to
- * manipulate the value from this object.
- * @param usmDHUserOwnAuthKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserOwnAuthKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserOwnAuthKeyChange_val_ptr
- */
- int
- usmDHUserOwnAuthKeyChange_set(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
- char *usmDHUserOwnAuthKeyChange_val_ptr,
- size_t usmDHUserOwnAuthKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnAuthKeyChange_set",
- "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserOwnAuthKeyChange_val_ptr);
- /*
- * TODO:461:M: |-> Set usmDHUserOwnAuthKeyChange value.
- * set usmDHUserOwnAuthKeyChange value in rowreq_ctx->data
- */
- return usmDHUserAuthKeyChange_set(rowreq_ctx,
- usmDHUserOwnAuthKeyChange_val_ptr,
- usmDHUserOwnAuthKeyChange_val_ptr_len);
- } /* usmDHUserOwnAuthKeyChange_set */
- /**
- * undo the previous set.
- *
- * @param rowreq_ctx
- * Pointer to the users context.
- */
- int
- usmDHUserOwnAuthKeyChange_undo(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnAuthKeyChange_undo",
- "calledn"));
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:456:o: |-> Clean up usmDHUserOwnAuthKeyChange undo.
- */
- /*
- * copy usmDHUserOwnAuthKeyChange and usmDHUserOwnAuthKeyChange_len data
- * set rowreq_ctx->data->usmDHUserOwnAuthKeyChange from rowreq_ctx->undo->usmDHUserOwnAuthKeyChange
- */
- return usmDHUserAuthKeyChange_undo(rowreq_ctx);
- } /* usmDHUserOwnAuthKeyChange_undo */
- /*---------------------------------------------------------------------
- * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserPrivKeyChange
- * usmDHUserPrivKeyChange is subid 3 of usmDHUserKeyEntry.
- * Its status is Current, and its access level is Create.
- * OID: .1.3.6.1.3.101.1.1.2.1.3
- * Description:
- The object used to change any given user's Privacy Key using
- a Diffie-Hellman key exchange.
- The right-most n bits of the shared secret 'sk', where 'n' is the
- number of bits required for the protocol defined by
- usmUserPrivProtocol, are installed as the operational privacy key
- for this row after a successful SET.
- *
- * Attributes:
- * accessible 1 isscalar 0 enums 0 hasdefval 0
- * readable 1 iscolumn 1 ranges 0 hashint 0
- * settable 1
- *
- *
- * Its syntax is DHKeyChange (based on perltype OCTETSTR)
- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
- * This data type requires a length. (Max 32)
- */
- /**
- * Check that the proposed new value is potentially valid.
- *
- * @param rowreq_ctx
- * Pointer to the row request context.
- * @param usmDHUserPrivKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserPrivKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserPrivKeyChange_val_ptr
- *
- * @retval MFD_SUCCESS : incoming value is legal
- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
- *
- * This is the place to check for requirements that are not
- * expressed in the mib syntax (for example, a requirement that
- * is detailed in the description for an object).
- *
- * You should check that the requested change between the undo value and the
- * new value is legal (ie, the transistion from one value to another
- * is legal).
- *
- *@note
- * This check is only to determine if the new value
- * is b potentially valid. This is the first check of many, and
- * is one of the simplest ones.
- *
- *@note
- * this is not the place to do any checks for values
- * which depend on some other value in the mib. Those
- * types of checks should be done in the
- * usmDHUserKeyTable_check_dependencies() function.
- *
- * The following checks have already been done for you:
- * The syntax is ASN_OCTET_STR
- *
- * If there a no other checks you need to do, simply return MFD_SUCCESS.
- *
- */
- int
- usmDHUserPrivKeyChange_check_value(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx,
- char *usmDHUserPrivKeyChange_val_ptr,
- size_t
- usmDHUserPrivKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserPrivKeyChange_check_value", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserPrivKeyChange_val_ptr);
- /*
- * TODO:441:o: |-> Check for valid usmDHUserPrivKeyChange value.
- */
- return usmDHUserCheckValue(rowreq_ctx->data, 0,
- usmDHUserPrivKeyChange_val_ptr,
- usmDHUserPrivKeyChange_val_ptr_len);
- } /* usmDHUserPrivKeyChange_check_value */
- /**
- * Save old value information
- *
- * @param rowreq_ctx
- * Pointer to the table context (usmDHUserKeyTable_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error. set will fail.
- *
- * This function will be called after the table level undo setup function
- * usmDHUserKeyTable_undo_setup has been called.
- *
- *@note
- * this function will only be called if a new value is set for this column.
- *
- * If there is any setup specific to a particular column (e.g. allocating
- * memory for a string), you should do that setup in this function, so it
- * won't be done unless it is necessary.
- */
- int
- usmDHUserPrivKeyChange_undo_setup(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx)
- {
- struct usmUser *undouser;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserPrivKeyChange_undo_setup", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:455:o: |-> Setup usmDHUserPrivKeyChange undo.
- */
- /*
- * copy usmDHUserPrivKeyChange and usmDHUserPrivKeyChange_len data
- * set rowreq_ctx->undo->usmDHUserPrivKeyChange from rowreq_ctx->data->usmDHUserPrivKeyChange
- */
- undouser = rowreq_ctx->undo;
- undouser->privKeyLen = rowreq_ctx->data->privKeyLen;
- memdup(&undouser->privKey, rowreq_ctx->data->privKey,
- rowreq_ctx->data->privKeyLen);
- return MFD_SUCCESS;
- } /* usmDHUserPrivKeyChange_undo_setup */
- /**
- * Set the new value.
- *
- * @param rowreq_ctx
- * Pointer to the users context. You should know how to
- * manipulate the value from this object.
- * @param usmDHUserPrivKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserPrivKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserPrivKeyChange_val_ptr
- */
- int
- usmDHUserPrivKeyChange_set(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
- char *usmDHUserPrivKeyChange_val_ptr,
- size_t usmDHUserPrivKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserPrivKeyChange_set",
- "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserPrivKeyChange_val_ptr);
- /*
- * TODO:461:M: |-> Set usmDHUserPrivKeyChange value.
- * set usmDHUserPrivKeyChange value in rowreq_ctx->data
- */
- usmDHSetKey(rowreq_ctx->data, 0,
- usmDHUserPrivKeyChange_val_ptr,
- usmDHUserPrivKeyChange_val_ptr_len);
- return MFD_SUCCESS;
- } /* usmDHUserPrivKeyChange_set */
- /**
- * undo the previous set.
- *
- * @param rowreq_ctx
- * Pointer to the users context.
- */
- int
- usmDHUserPrivKeyChange_undo(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- struct usmUser *undouser;
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserPrivKeyChange_undo",
- "calledn"));
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:456:o: |-> Clean up usmDHUserPrivKeyChange undo.
- */
- /*
- * copy usmDHUserPrivKeyChange and usmDHUserPrivKeyChange_len data
- * set rowreq_ctx->data->usmDHUserPrivKeyChange from rowreq_ctx->undo->usmDHUserPrivKeyChange
- */
- undouser = rowreq_ctx->undo;
- /** uncopy priv key */
- undouser->privKeyLen = rowreq_ctx->data->privKeyLen;
- SNMP_FREE(rowreq_ctx->data->privKey);
- rowreq_ctx->data->privKey = undouser->privKey;
- undouser->privKey = NULL;
- return MFD_SUCCESS;
- } /* usmDHUserPrivKeyChange_undo */
- /*---------------------------------------------------------------------
- * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserOwnPrivKeyChange
- * usmDHUserOwnPrivKeyChange is subid 4 of usmDHUserKeyEntry.
- * Its status is Current, and its access level is Create.
- * OID: .1.3.6.1.3.101.1.1.2.1.4
- * Description:
- The object used to change the agent's own Privacy Key using a
- Diffie-Hellman key exchange.
- The right-most n bits of the shared secret 'sk', where 'n' is the
- number of bits required for the protocol defined by
- usmUserPrivProtocol, are installed as the operational privacy key
- for this row after a successful SET.
- *
- * Attributes:
- * accessible 1 isscalar 0 enums 0 hasdefval 0
- * readable 1 iscolumn 1 ranges 0 hashint 0
- * settable 1
- *
- *
- * Its syntax is DHKeyChange (based on perltype OCTETSTR)
- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
- * This data type requires a length. (Max 32)
- */
- /**
- * Check that the proposed new value is potentially valid.
- *
- * @param rowreq_ctx
- * Pointer to the row request context.
- * @param usmDHUserOwnPrivKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserOwnPrivKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserOwnPrivKeyChange_val_ptr
- *
- * @retval MFD_SUCCESS : incoming value is legal
- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
- *
- * This is the place to check for requirements that are not
- * expressed in the mib syntax (for example, a requirement that
- * is detailed in the description for an object).
- *
- * You should check that the requested change between the undo value and the
- * new value is legal (ie, the transistion from one value to another
- * is legal).
- *
- *@note
- * This check is only to determine if the new value
- * is b potentially valid. This is the first check of many, and
- * is one of the simplest ones.
- *
- *@note
- * this is not the place to do any checks for values
- * which depend on some other value in the mib. Those
- * types of checks should be done in the
- * usmDHUserKeyTable_check_dependencies() function.
- *
- * The following checks have already been done for you:
- * The syntax is ASN_OCTET_STR
- *
- * If there a no other checks you need to do, simply return MFD_SUCCESS.
- *
- */
- int
- usmDHUserOwnPrivKeyChange_check_value(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx, char
- *usmDHUserOwnPrivKeyChange_val_ptr, size_t
- usmDHUserOwnPrivKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnPrivKeyChange_check_value", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserOwnPrivKeyChange_val_ptr);
- /*
- * TODO:441:o: |-> Check for valid usmDHUserOwnPrivKeyChange value.
- */
- return
- usmDHUserPrivKeyChange_check_value(rowreq_ctx,
- usmDHUserOwnPrivKeyChange_val_ptr,
- usmDHUserOwnPrivKeyChange_val_ptr_len);
- } /* usmDHUserOwnPrivKeyChange_check_value */
- /**
- * Save old value information
- *
- * @param rowreq_ctx
- * Pointer to the table context (usmDHUserKeyTable_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error. set will fail.
- *
- * This function will be called after the table level undo setup function
- * usmDHUserKeyTable_undo_setup has been called.
- *
- *@note
- * this function will only be called if a new value is set for this column.
- *
- * If there is any setup specific to a particular column (e.g. allocating
- * memory for a string), you should do that setup in this function, so it
- * won't be done unless it is necessary.
- */
- int
- usmDHUserOwnPrivKeyChange_undo_setup(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnPrivKeyChange_undo_setup", "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:455:o: |-> Setup usmDHUserOwnPrivKeyChange undo.
- */
- /*
- * copy usmDHUserOwnPrivKeyChange and usmDHUserOwnPrivKeyChange_len data
- * set rowreq_ctx->undo->usmDHUserOwnPrivKeyChange from rowreq_ctx->data->usmDHUserOwnPrivKeyChange
- */
- return usmDHUserPrivKeyChange_undo_setup(rowreq_ctx);
- } /* usmDHUserOwnPrivKeyChange_undo_setup */
- /**
- * Set the new value.
- *
- * @param rowreq_ctx
- * Pointer to the users context. You should know how to
- * manipulate the value from this object.
- * @param usmDHUserOwnPrivKeyChange_val_ptr
- * A char containing the new value.
- * @param usmDHUserOwnPrivKeyChange_val_ptr_len
- * The size (in bytes) of the data pointed to by usmDHUserOwnPrivKeyChange_val_ptr
- */
- int
- usmDHUserOwnPrivKeyChange_set(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
- char *usmDHUserOwnPrivKeyChange_val_ptr,
- size_t usmDHUserOwnPrivKeyChange_val_ptr_len)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnPrivKeyChange_set",
- "calledn"));
- /** should never get a NULL pointer */
- netsnmp_assert(NULL != rowreq_ctx);
- netsnmp_assert(NULL != usmDHUserOwnPrivKeyChange_val_ptr);
- /*
- * TODO:461:M: |-> Set usmDHUserOwnPrivKeyChange value.
- * set usmDHUserOwnPrivKeyChange value in rowreq_ctx->data
- */
- return usmDHUserPrivKeyChange_set(rowreq_ctx,
- usmDHUserOwnPrivKeyChange_val_ptr,
- usmDHUserOwnPrivKeyChange_val_ptr_len);
- } /* usmDHUserOwnPrivKeyChange_set */
- /**
- * undo the previous set.
- *
- * @param rowreq_ctx
- * Pointer to the users context.
- */
- int
- usmDHUserOwnPrivKeyChange_undo(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx)
- {
- DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnPrivKeyChange_undo",
- "calledn"));
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:456:o: |-> Clean up usmDHUserOwnPrivKeyChange undo.
- */
- /*
- * copy usmDHUserOwnPrivKeyChange and usmDHUserOwnPrivKeyChange_len data
- * set rowreq_ctx->data->usmDHUserOwnPrivKeyChange from rowreq_ctx->undo->usmDHUserOwnPrivKeyChange
- */
- return usmDHUserPrivKeyChange_undo(rowreq_ctx);
- } /* usmDHUserOwnPrivKeyChange_undo */
- /**
- * check dependencies
- *
- * This is useful for for tables which have dependencies between columns
- * (or rows, or tables). For example, two columns allocating a percentage
- * of something add up 100%.
- *
- * Should you need different behavior depending on which columns were
- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
- * set. The definitions for the FLAG_* bits can be found in
- * usmDHUserKeyTable_oids.h.
- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
- *
- * @retval MFD_SUCCESS all the changes to the row are legal
- * @retval MFD_ERROR one or more changes are not legal
- *
- * (see README-table-usmDHUserKeyTable if you don't have dependencies)
- */
- int
- usmDHUserKeyTable_check_dependencies(usmDHUserKeyTable_rowreq_ctx *
- rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- int flags;
- DEBUGMSGTL(("internal:usmDHUserKeyTable:usmDHUserKeyTable_check_dependencies", "calledn"));
- netsnmp_assert(NULL != rowreq_ctx);
- /*
- * TODO:470:o: Check usmDHUserKeyTable row dependencies.
- * check that all new value are legal and consistent with each other
- */
- flags = rowreq_ctx->column_set_flags;
- if (flags & FLAG_USMDHUSERAUTHKEYCHANGE &&
- flags & FLAG_USMDHUSEROWNAUTHKEYCHANGE) {
- return MFD_ERROR;
- }
- if (flags & FLAG_USMDHUSERPRIVKEYCHANGE &&
- flags & FLAG_USMDHUSEROWNPRIVKEYCHANGE) {
- return MFD_ERROR;
- }
- return rc;
- } /* usmDHUserKeyTable_check_dependencies */
- /** @} */