⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usmdhuserkeytable_data_set.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * Note: this file originally auto-generated by mib2c using *       version : 1.19 $ of : mfd-data-set.m2c,v $ * * $Id: usmDHUserKeyTable_data_set.c 14169 2006-01-25 16:28:12Z dts12 $ * *//* * 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"intusmDHUserCheckValue(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",                "called\n"));    usmDHGetUserKeyChange(user, for_auth_key,                          &current_value, &current_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;}intusmDHSetKey(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", "called\n"));    /*     * 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;}/** @ingroup data_access  * @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 *** ********************************************************************** **********************************************************************//* * SNMP-USM-DH-OBJECTS-MIB::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 the undo context has been allocated with * usmDHUserKeyTable_allocate_data(), but may need extra * initialization similar to what you may have done in * usmDHUserKeyTable_rowreq_ctx_init(). * 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. */intusmDHUserKeyTable_undo_setup(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx){    int             rc = MFD_SUCCESS;    DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_undo_setup",                "called\n"));    /** 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.     * Undo storage is in (* usmDHUserOwnPrivKeyChange_val_ptr_ptr )*     */    return rc;}                               /* usmDHUserKeyTable_undo_setup *//** * Undo a set request. * * This function will be called before the individual node undo * functions are called. If you need to do any undo that is not * related to a specific column, you can do it here. * * Note that an individual node's undo function will only be called * if that node is being set to a new value. * * If there is anything  specific to a particular column (e.g. releasing * memory for a string), you should do that setup in the node's undo * 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. */intusmDHUserKeyTable_undo(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx){    int             rc = MFD_SUCCESS;    DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_undo",                "called\n"));    /** we should have a non-NULL pointer */    netsnmp_assert(NULL != rowreq_ctx);    /*     * TODO:451:M: |-> usmDHUserKeyTable undo.     * usmDHUserKeyTable undo information, in response to a failed set.     * Undo storage is in (* usmDHUserOwnPrivKeyChange_val_ptr_ptr )*     */    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 */intusmDHUserKeyTable_undo_cleanup(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx){    int             rc = MFD_SUCCESS;    DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_undo_cleanup",                "called\n"));    /** we should have a non-NULL pointer */    netsnmp_assert(NULL != rowreq_ctx);    /*     * TODO:452:M: |-> Cleanup usmDHUserKeyTable undo.     * Undo storage is in (* usmDHUserOwnPrivKeyChange_val_ptr_ptr )*     */    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 COLUMN_*_FLAG bits can be found in * usmDHUserKeyTable_oids.h. * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags. * * @param rowreq_ctx *        Pointer to the users context. * * @retval MFD_SUCCESS : success * @retval MFD_ERROR   : error */intusmDHUserKeyTable_commit(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx){    int             rc = MFD_SUCCESS;    int             save_flags;    DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_commit",                "called\n"));    /** we should have a non-NULL pointer */    netsnmp_assert(NULL != rowreq_ctx);    /*     * nothing to do; we wait for the irreversible commit     */    /*     * if we successfully commited this row, set the dirty flag.     */    if (MFD_SUCCESS == rc) {        rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;    }    return rc;}                               /* 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 COLUMN_*_FLAG bits can be found in * usmDHUserKeyTable_oids.h. * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags. * * @param rowreq_ctx *        Pointer to the users context. * * @retval MFD_SUCCESS : success * @retval MFD_ERROR   : error */intusmDHUserKeyTable_undo_commit(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx){    int             rc = MFD_SUCCESS;    DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_undo_commit",                "called\n"));    /** 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 & COLUMN__FLAG) {}     */    /*     * if we successfully un-commited this row, clear the dirty flag.     */    if (MFD_SUCCESS == rc) {        rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;    }    return rc;}                               /* usmDHUserKeyTable_undo_commit *//** * perform commit actions that are not reversible * * THERE IS NO ATTEMPT AT RECOVERY FOR ERRORS FROM THIS STATE! * * @param rowreq_ctx *        Pointer to the users context. * * @retval MFD_SUCCESS : success * @retval MFD_ERROR   : other error */intusmDHUserKeyTable_irreversible_commit(usmDHUserKeyTable_rowreq_ctx *                                      rowreq_ctx){    struct usmUser *user;    int             flags;    DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_irreversible_commit", "called\n"));    /** we should have a non-NULL pointer */    netsnmp_assert(NULL != rowreq_ctx);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -