usmDHUserKeyTable_data_get.c0000644
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:22k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. /*
  2.  * Note: this file originally auto-generated by mib2c using
  3.  *       version : 1.18 $ of : mfd-data-get.m2c,v $ 
  4.  *
  5.  * $Id: usmDHUserKeyTable_data_get.c,v 1.7 2004/10/16 00:35:35 rstory Exp $
  6.  */
  7. /*
  8.  * standard Net-SNMP includes 
  9.  */
  10. #include <net-snmp/net-snmp-config.h>
  11. #include <net-snmp/net-snmp-includes.h>
  12. #include <net-snmp/agent/net-snmp-agent-includes.h>
  13. #include <openssl/dh.h>
  14. /*
  15.  * include our parent header 
  16.  */
  17. #define NEED_USMDH_FUNCTIONS
  18. #include "usmDHUserKeyTable.h"
  19. DH             *
  20. usmDHGetUserDHptr(struct usmUser *user, int for_auth_key)
  21. {
  22.     DH             *dh, *dh_params;
  23.     void          **theptr;
  24.     if (user == NULL)
  25.         return NULL;
  26.     if (for_auth_key == 1)
  27.         theptr = &user->usmDHUserAuthKeyChange;
  28.     else
  29.         theptr = &user->usmDHUserPrivKeyChange;
  30.     if (!*theptr) {
  31.         /*
  32.          * copy the system parameters to the local ones 
  33.          */
  34.         dh = DH_new();
  35.         if (!dh)
  36.             return NULL;
  37.         dh_params = get_dh_params();
  38.         if (!dh_params)
  39.             return NULL;
  40.         dh->g = BN_dup(dh_params->g);
  41.         dh->p = BN_dup(dh_params->p);
  42.         if (!dh->g || !dh->p)
  43.             return NULL;
  44.         DH_generate_key(dh);
  45.         *theptr = dh;
  46.     } else {
  47.         dh = (DH *) * theptr;
  48.     }
  49.     return dh;
  50. }
  51. int
  52. usmDHGetUserKeyChange(struct usmUser *user, int for_auth_key,
  53.                       char **keyobj, size_t *keyobj_len)
  54. {
  55.     DH             *dh;
  56.     dh = usmDHGetUserDHptr(user, for_auth_key);
  57.     if (!dh) {
  58.         snmp_log(LOG_ERR, "ack...  shouldn't get here: %x %dn",
  59.                  user, for_auth_key);
  60.         return MFD_ERROR;
  61.     }
  62.     *keyobj_len = BN_num_bytes(dh->pub_key);
  63.     *keyobj = malloc(*keyobj_len);
  64.     BN_bn2bin(dh->pub_key, *keyobj);
  65.     return MFD_SUCCESS;
  66. }
  67. /** @defgroup data_get data_get: Routines to get data
  68.  *
  69.  * TODO:230:M: Implement usmDHUserKeyTable get routines.
  70.  * TODO:240:M: Implement usmDHUserKeyTable mapping routines (if any).
  71.  *
  72.  * These routine are used to get the value for individual objects. The
  73.  * row context is passed, along with a pointer to the memory where the
  74.  * value should be copied.
  75.  *
  76.  * @{
  77.  */
  78. /**********************************************************************
  79.  **********************************************************************
  80.  ***
  81.  *** Table usmDHUserKeyTable
  82.  ***
  83.  **********************************************************************
  84.  **********************************************************************/
  85. /*
  86.  * usmDHUserKeyTable is subid 2 of usmDHPublicObjects.
  87.  * Its status is Current.
  88.  * OID: .1.3.6.1.3.101.1.1.2, length: 9
  89.  */
  90. /*
  91.  * ---------------------------------------------------------------------
  92.  * * TODO:200:r: Implement usmDHUserKeyTable data context functions.
  93.  */
  94. /*
  95.  * usmDHUserKeyTable_allocate_data
  96.  *
  97.  * Purpose: create new usmDHUserKeyTable_data.
  98.  */
  99. usmDHUserKeyTable_data *
  100. usmDHUserKeyTable_allocate_data(void)
  101. {
  102.     /*
  103.      * TODO:201:r: |-> allocate memory for the usmDHUserKeyTable data context.
  104.      */
  105.     usmDHUserKeyTable_data *rtn =
  106.         SNMP_MALLOC_TYPEDEF(usmDHUserKeyTable_data);
  107.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_allocate_data", "calledn"));
  108.     if (NULL == rtn) {
  109.         snmp_log(LOG_ERR, "unable to malloc memory for new "
  110.                  "usmDHUserKeyTable_data.n");
  111.     }
  112.     /*
  113.      * not real user, not in a list. mark for testing
  114.      */
  115.     rtn->next = (struct usmUser *) -1;
  116.     rtn->prev = (struct usmUser *) -1;
  117.     return rtn;
  118. }                               /* usmDHUserKeyTable_allocate_data */
  119. /*
  120.  * usmDHUserKeyTable_release_data
  121.  *
  122.  * Purpose: release usmDHUserKeyTable data.
  123.  */
  124. void
  125. usmDHUserKeyTable_release_data(usmDHUserKeyTable_data * data)
  126. {
  127.     struct usmUser *user = data;
  128.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_release_data",
  129.                 "calledn"));
  130.     netsnmp_assert(user->next == (struct usmUser *) -1);
  131.     netsnmp_assert(user->prev == (struct usmUser *) -1);
  132.     /*
  133.      * TODO:202:r: |-> release memory for the usmDHUserKeyTable data context.
  134.      */
  135.     if (user) {
  136.         SNMP_FREE(user->authKey);
  137.         SNMP_FREE(user->privKey);
  138.     }
  139.     free(data);
  140. }                               /* usmDHUserKeyTable_release_data */
  141. /**
  142.  * set mib index(es)
  143.  *
  144.  * @param tbl_idx mib index structure
  145.  *
  146.  * @retval MFD_SUCCESS     : success.
  147.  * @retval MFD_ERROR       : other error.
  148.  *
  149.  * @remark
  150.  *  This convenience function is useful for setting all the MIB index
  151.  *  components with a single function call. It is assume that the C values
  152.  *  have already been mapped from their native/rawformat to the MIB format.
  153.  */
  154. int
  155. usmDHUserKeyTable_indexes_set_tbl_idx(usmDHUserKeyTable_mib_index *
  156.                                       tbl_idx,
  157.                                       char *usmUserEngineID_val_ptr,
  158.                                       size_t usmUserEngineID_val_ptr_len,
  159.                                       char *usmUserName_val_ptr,
  160.                                       size_t usmUserName_val_ptr_len)
  161. {
  162.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_indexes_set_tbl_idx", "calledn"));
  163.     /*
  164.      * usmUserEngineID(1)/SnmpEngineID/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h 
  165.      */
  166.     tbl_idx->usmUserEngineID_len = sizeof(tbl_idx->usmUserEngineID);
  167.     /** WARNING: this code might not work for struct usmUser */
  168.     /*
  169.      * make sure there is enough space for usmUserEngineID data
  170.      */
  171.     if ((NULL == tbl_idx->usmUserEngineID)
  172.         || (tbl_idx->usmUserEngineID_len < usmUserEngineID_val_ptr_len)) {
  173.         snmp_log(LOG_ERR, "not enough space for valuen");
  174.         return MFD_ERROR;
  175.     }
  176.     tbl_idx->usmUserEngineID_len = usmUserEngineID_val_ptr_len;
  177.     memcpy(tbl_idx->usmUserEngineID, usmUserEngineID_val_ptr,
  178.            tbl_idx->usmUserEngineID_len *
  179.            sizeof(tbl_idx->usmUserEngineID[0]));
  180.     /*
  181.      * usmUserName(2)/SnmpAdminString/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/H 
  182.      */
  183.     tbl_idx->usmUserName_len = sizeof(tbl_idx->usmUserName);
  184.     /** WARNING: this code might not work for struct usmUser */
  185.     /*
  186.      * make sure there is enough space for usmUserName data
  187.      */
  188.     if ((NULL == tbl_idx->usmUserName)
  189.         || (tbl_idx->usmUserName_len < usmUserName_val_ptr_len)) {
  190.         snmp_log(LOG_ERR, "not enough space for valuen");
  191.         return MFD_ERROR;
  192.     }
  193.     tbl_idx->usmUserName_len = usmUserName_val_ptr_len;
  194.     memcpy(tbl_idx->usmUserName, usmUserName_val_ptr,
  195.            tbl_idx->usmUserName_len * sizeof(tbl_idx->usmUserName[0]));
  196.     return MFD_SUCCESS;
  197. }                               /* usmDHUserKeyTable_indexes_set_tbl_idx */
  198. /**
  199.  * @internal
  200.  * set row context indexes
  201.  *
  202.  * @param reqreq_ctx the row context that needs updated indexes
  203.  *
  204.  * @retval MFD_SUCCESS     : success.
  205.  * @retval MFD_ERROR       : other error.
  206.  *
  207.  * @remark
  208.  *  This function sets the mib indexs, then updates the oid indexs
  209.  *  from the mib index.
  210.  */
  211. int
  212. usmDHUserKeyTable_indexes_set(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
  213.                               char *usmUserEngineID_val_ptr,
  214.                               size_t usmUserEngineID_val_ptr_len,
  215.                               char *usmUserName_val_ptr,
  216.                               size_t usmUserName_val_ptr_len)
  217. {
  218.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserKeyTable_indexes_set",
  219.                 "calledn"));
  220.     if (MFD_SUCCESS !=
  221.         usmDHUserKeyTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
  222.                                               usmUserEngineID_val_ptr,
  223.                                               usmUserEngineID_val_ptr_len,
  224.                                               usmUserName_val_ptr,
  225.                                               usmUserName_val_ptr_len))
  226.         return MFD_ERROR;
  227.     /*
  228.      * convert mib index to oid index
  229.      */
  230.     rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
  231.     if (0 != usmDHUserKeyTable_index_to_oid(&rowreq_ctx->oid_idx,
  232.                                             &rowreq_ctx->tbl_idx)) {
  233.         return MFD_ERROR;
  234.     }
  235.     return MFD_SUCCESS;
  236. }                               /* usmDHUserKeyTable_indexes_set */
  237. /*---------------------------------------------------------------------
  238.  * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserAuthKeyChange
  239.  * usmDHUserAuthKeyChange is subid 1 of usmDHUserKeyEntry.
  240.  * Its status is Current, and its access level is Create.
  241.  * OID: .1.3.6.1.3.101.1.1.2.1.1
  242.  * Description:
  243. The object used to change any given user's Authentication Key
  244.     using a Diffie-Hellman key exchange.
  245.     The right-most n bits of the shared secret 'sk', where 'n' is the
  246.     number of bits required for the protocol defined by
  247.     usmUserAuthProtocol, are installed as the operational
  248.     authentication key for this row after a successful SET.
  249.  *
  250.  * Attributes:
  251.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  252.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  253.  *   settable   1
  254.  *
  255.  *
  256.  * Its syntax is DHKeyChange (based on perltype OCTETSTR)
  257.  * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
  258.  * This data type requires a length.  (Max )
  259.  */
  260. /**
  261.  * Extract the current value of the usmDHUserAuthKeyChange data.
  262.  *
  263.  * Set a value using the data context for the row.
  264.  *
  265.  * @param rowreq_ctx
  266.  *        Pointer to the row request context.
  267.  * @param usmDHUserAuthKeyChange_val_ptr_ptr
  268.  *        Pointer to storage for a char variable
  269.  * @param usmDHUserAuthKeyChange_val_ptr_len_ptr
  270.  *        Pointer to a size_t. On entry, it will contain the size (in bytes)
  271.  *        pointed to by usmDHUserAuthKeyChange.
  272.  *        On exit, this value should contain the data size (in bytes).
  273.  *
  274.  * @retval MFD_SUCCESS         : success
  275.  * @retval MFD_SKIP            : skip this node (no value for now)
  276.  * @retval MFD_ERROR           : Any other error
  277. *
  278.  * @note If you need more than (*usmDHUserAuthKeyChange_val_ptr_len_ptr) bytes of memory,
  279.  *       allocate it using malloc() and update usmDHUserAuthKeyChange_val_ptr_ptr.
  280.  *       <b>DO NOT</b> free the previous pointer.
  281.  *       The MFD helper will release the memory you allocate.
  282.  *
  283.  * @remark If you call this function yourself, you are responsible
  284.  *         for checking if the pointer changed, and freeing any
  285.  *         previously allocated memory. (Not necessary if you pass
  286.  *         in a pointer to static memory, obviously.)
  287.  */
  288. int
  289. usmDHUserAuthKeyChange_get(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
  290.                            char **usmDHUserAuthKeyChange_val_ptr_ptr,
  291.                            size_t *usmDHUserAuthKeyChange_val_ptr_len_ptr)
  292. {
  293.    /** we should have a non-NULL pointer and enough storage */
  294.     netsnmp_assert((NULL != usmDHUserAuthKeyChange_val_ptr_ptr)
  295.                    && (NULL != *usmDHUserAuthKeyChange_val_ptr_ptr));
  296.     netsnmp_assert(NULL != usmDHUserAuthKeyChange_val_ptr_len_ptr);
  297.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserAuthKeyChange_get",
  298.                 "calledn"));
  299.     netsnmp_assert(NULL != rowreq_ctx);
  300.     /*
  301.      * TODO:231:o: |-> Extract the current value of the usmDHUserAuthKeyChange data.
  302.      * set (* usmDHUserAuthKeyChange_val_ptr_ptr ) and (* usmDHUserAuthKeyChange_val_ptr_len_ptr ) from rowreq_ctx->data
  303.      */
  304.     if (!rowreq_ctx || !usmDHUserAuthKeyChange_val_ptr_len_ptr ||
  305.         !usmDHUserAuthKeyChange_val_ptr_ptr ||
  306.         !*usmDHUserAuthKeyChange_val_ptr_ptr) {
  307.         return MFD_ERROR;
  308.     }
  309.     return usmDHGetUserKeyChange(rowreq_ctx->data, 1,
  310.                                  usmDHUserAuthKeyChange_val_ptr_ptr,
  311.                                  usmDHUserAuthKeyChange_val_ptr_len_ptr);
  312.     return MFD_SUCCESS;
  313. }                               /* usmDHUserAuthKeyChange_get */
  314. /*---------------------------------------------------------------------
  315.  * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserOwnAuthKeyChange
  316.  * usmDHUserOwnAuthKeyChange is subid 2 of usmDHUserKeyEntry.
  317.  * Its status is Current, and its access level is Create.
  318.  * OID: .1.3.6.1.3.101.1.1.2.1.2
  319.  * Description:
  320. The object used to change the agents own Authentication Key
  321.     using a Diffie-Hellman key exchange.
  322.     The right-most n bits of the shared secret 'sk', where 'n' is the
  323.     number of bits required for the protocol defined by
  324.     usmUserAuthProtocol, are installed as the operational
  325.     authentication key for this row after a successful SET.
  326.  *
  327.  * Attributes:
  328.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  329.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  330.  *   settable   1
  331.  *
  332.  *
  333.  * Its syntax is DHKeyChange (based on perltype OCTETSTR)
  334.  * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
  335.  * This data type requires a length.  (Max )
  336.  */
  337. /**
  338.  * Extract the current value of the usmDHUserOwnAuthKeyChange data.
  339.  *
  340.  * Set a value using the data context for the row.
  341.  *
  342.  * @param rowreq_ctx
  343.  *        Pointer to the row request context.
  344.  * @param usmDHUserOwnAuthKeyChange_val_ptr_ptr
  345.  *        Pointer to storage for a char variable
  346.  * @param usmDHUserOwnAuthKeyChange_val_ptr_len_ptr
  347.  *        Pointer to a size_t. On entry, it will contain the size (in bytes)
  348.  *        pointed to by usmDHUserOwnAuthKeyChange.
  349.  *        On exit, this value should contain the data size (in bytes).
  350.  *
  351.  * @retval MFD_SUCCESS         : success
  352.  * @retval MFD_SKIP            : skip this node (no value for now)
  353.  * @retval MFD_ERROR           : Any other error
  354. *
  355.  * @note If you need more than (*usmDHUserOwnAuthKeyChange_val_ptr_len_ptr) bytes of memory,
  356.  *       allocate it using malloc() and update usmDHUserOwnAuthKeyChange_val_ptr_ptr.
  357.  *       <b>DO NOT</b> free the previous pointer.
  358.  *       The MFD helper will release the memory you allocate.
  359.  *
  360.  * @remark If you call this function yourself, you are responsible
  361.  *         for checking if the pointer changed, and freeing any
  362.  *         previously allocated memory. (Not necessary if you pass
  363.  *         in a pointer to static memory, obviously.)
  364.  */
  365. int
  366. usmDHUserOwnAuthKeyChange_get(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
  367.                               char **usmDHUserOwnAuthKeyChange_val_ptr_ptr,
  368.                               size_t
  369.                               *usmDHUserOwnAuthKeyChange_val_ptr_len_ptr)
  370. {
  371.    /** we should have a non-NULL pointer and enough storage */
  372.     netsnmp_assert((NULL != usmDHUserOwnAuthKeyChange_val_ptr_ptr)
  373.                    && (NULL != *usmDHUserOwnAuthKeyChange_val_ptr_ptr));
  374.     netsnmp_assert(NULL != usmDHUserOwnAuthKeyChange_val_ptr_len_ptr);
  375.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnAuthKeyChange_get",
  376.                 "calledn"));
  377.     netsnmp_assert(NULL != rowreq_ctx);
  378.     /*
  379.      * TODO:231:o: |-> Extract the current value of the usmDHUserOwnAuthKeyChange data.
  380.      * set (* usmDHUserOwnAuthKeyChange_val_ptr_ptr ) and (* usmDHUserOwnAuthKeyChange_val_ptr_len_ptr ) from rowreq_ctx->data
  381.      */
  382.     if (!rowreq_ctx || !usmDHUserOwnAuthKeyChange_val_ptr_len_ptr ||
  383.         !usmDHUserOwnAuthKeyChange_val_ptr_ptr ||
  384.         !*usmDHUserOwnAuthKeyChange_val_ptr_ptr) {
  385.         return MFD_ERROR;
  386.     }
  387.     return usmDHGetUserKeyChange(rowreq_ctx->data, 1,
  388.                                  usmDHUserOwnAuthKeyChange_val_ptr_ptr,
  389.                                  usmDHUserOwnAuthKeyChange_val_ptr_len_ptr);
  390.     return MFD_SUCCESS;
  391. }                               /* usmDHUserOwnAuthKeyChange_get */
  392. /*---------------------------------------------------------------------
  393.  * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserPrivKeyChange
  394.  * usmDHUserPrivKeyChange is subid 3 of usmDHUserKeyEntry.
  395.  * Its status is Current, and its access level is Create.
  396.  * OID: .1.3.6.1.3.101.1.1.2.1.3
  397.  * Description:
  398. The object used to change any given user's Privacy Key using
  399.     a Diffie-Hellman key exchange.
  400.     The right-most n bits of the shared secret 'sk', where 'n' is the
  401.     number of bits required for the protocol defined by
  402.     usmUserPrivProtocol, are installed as the operational privacy key
  403.     for this row after a successful SET.
  404.  *
  405.  * Attributes:
  406.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  407.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  408.  *   settable   1
  409.  *
  410.  *
  411.  * Its syntax is DHKeyChange (based on perltype OCTETSTR)
  412.  * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
  413.  * This data type requires a length.  (Max )
  414.  */
  415. /**
  416.  * Extract the current value of the usmDHUserPrivKeyChange data.
  417.  *
  418.  * Set a value using the data context for the row.
  419.  *
  420.  * @param rowreq_ctx
  421.  *        Pointer to the row request context.
  422.  * @param usmDHUserPrivKeyChange_val_ptr_ptr
  423.  *        Pointer to storage for a char variable
  424.  * @param usmDHUserPrivKeyChange_val_ptr_len_ptr
  425.  *        Pointer to a size_t. On entry, it will contain the size (in bytes)
  426.  *        pointed to by usmDHUserPrivKeyChange.
  427.  *        On exit, this value should contain the data size (in bytes).
  428.  *
  429.  * @retval MFD_SUCCESS         : success
  430.  * @retval MFD_SKIP            : skip this node (no value for now)
  431.  * @retval MFD_ERROR           : Any other error
  432. *
  433.  * @note If you need more than (*usmDHUserPrivKeyChange_val_ptr_len_ptr) bytes of memory,
  434.  *       allocate it using malloc() and update usmDHUserPrivKeyChange_val_ptr_ptr.
  435.  *       <b>DO NOT</b> free the previous pointer.
  436.  *       The MFD helper will release the memory you allocate.
  437.  *
  438.  * @remark If you call this function yourself, you are responsible
  439.  *         for checking if the pointer changed, and freeing any
  440.  *         previously allocated memory. (Not necessary if you pass
  441.  *         in a pointer to static memory, obviously.)
  442.  */
  443. int
  444. usmDHUserPrivKeyChange_get(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
  445.                            char **usmDHUserPrivKeyChange_val_ptr_ptr,
  446.                            size_t *usmDHUserPrivKeyChange_val_ptr_len_ptr)
  447. {
  448.    /** we should have a non-NULL pointer and enough storage */
  449.     netsnmp_assert((NULL != usmDHUserPrivKeyChange_val_ptr_ptr)
  450.                    && (NULL != *usmDHUserPrivKeyChange_val_ptr_ptr));
  451.     netsnmp_assert(NULL != usmDHUserPrivKeyChange_val_ptr_len_ptr);
  452.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserPrivKeyChange_get",
  453.                 "calledn"));
  454.     netsnmp_assert(NULL != rowreq_ctx);
  455.     /*
  456.      * TODO:231:o: |-> Extract the current value of the usmDHUserPrivKeyChange data.
  457.      * set (* usmDHUserPrivKeyChange_val_ptr_ptr ) and (* usmDHUserPrivKeyChange_val_ptr_len_ptr ) from rowreq_ctx->data
  458.      */
  459.     if (!rowreq_ctx || !usmDHUserPrivKeyChange_val_ptr_len_ptr ||
  460.         !usmDHUserPrivKeyChange_val_ptr_ptr ||
  461.         !*usmDHUserPrivKeyChange_val_ptr_ptr) {
  462.         return MFD_ERROR;
  463.     }
  464.     return usmDHGetUserKeyChange(rowreq_ctx->data, 0,
  465.                                  usmDHUserPrivKeyChange_val_ptr_ptr,
  466.                                  usmDHUserPrivKeyChange_val_ptr_len_ptr);
  467.     return MFD_SUCCESS;
  468. }                               /* usmDHUserPrivKeyChange_get */
  469. /*---------------------------------------------------------------------
  470.  * SNMP-USM-DH-OBJECTS-MIB::usmDHUserKeyEntry.usmDHUserOwnPrivKeyChange
  471.  * usmDHUserOwnPrivKeyChange is subid 4 of usmDHUserKeyEntry.
  472.  * Its status is Current, and its access level is Create.
  473.  * OID: .1.3.6.1.3.101.1.1.2.1.4
  474.  * Description:
  475. The object used to change the agent's own Privacy Key using a
  476.     Diffie-Hellman key exchange.
  477.     The right-most n bits of the shared secret 'sk', where 'n' is the
  478.     number of bits required for the protocol defined by
  479.     usmUserPrivProtocol, are installed as the operational privacy key
  480.     for this row after a successful SET.
  481.  *
  482.  * Attributes:
  483.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  484.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  485.  *   settable   1
  486.  *
  487.  *
  488.  * Its syntax is DHKeyChange (based on perltype OCTETSTR)
  489.  * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
  490.  * This data type requires a length.  (Max )
  491.  */
  492. /**
  493.  * Extract the current value of the usmDHUserOwnPrivKeyChange data.
  494.  *
  495.  * Set a value using the data context for the row.
  496.  *
  497.  * @param rowreq_ctx
  498.  *        Pointer to the row request context.
  499.  * @param usmDHUserOwnPrivKeyChange_val_ptr_ptr
  500.  *        Pointer to storage for a char variable
  501.  * @param usmDHUserOwnPrivKeyChange_val_ptr_len_ptr
  502.  *        Pointer to a size_t. On entry, it will contain the size (in bytes)
  503.  *        pointed to by usmDHUserOwnPrivKeyChange.
  504.  *        On exit, this value should contain the data size (in bytes).
  505.  *
  506.  * @retval MFD_SUCCESS         : success
  507.  * @retval MFD_SKIP            : skip this node (no value for now)
  508.  * @retval MFD_ERROR           : Any other error
  509. *
  510.  * @note If you need more than (*usmDHUserOwnPrivKeyChange_val_ptr_len_ptr) bytes of memory,
  511.  *       allocate it using malloc() and update usmDHUserOwnPrivKeyChange_val_ptr_ptr.
  512.  *       <b>DO NOT</b> free the previous pointer.
  513.  *       The MFD helper will release the memory you allocate.
  514.  *
  515.  * @remark If you call this function yourself, you are responsible
  516.  *         for checking if the pointer changed, and freeing any
  517.  *         previously allocated memory. (Not necessary if you pass
  518.  *         in a pointer to static memory, obviously.)
  519.  */
  520. int
  521. usmDHUserOwnPrivKeyChange_get(usmDHUserKeyTable_rowreq_ctx * rowreq_ctx,
  522.                               char **usmDHUserOwnPrivKeyChange_val_ptr_ptr,
  523.                               size_t
  524.                               *usmDHUserOwnPrivKeyChange_val_ptr_len_ptr)
  525. {
  526.    /** we should have a non-NULL pointer and enough storage */
  527.     netsnmp_assert((NULL != usmDHUserOwnPrivKeyChange_val_ptr_ptr)
  528.                    && (NULL != *usmDHUserOwnPrivKeyChange_val_ptr_ptr));
  529.     netsnmp_assert(NULL != usmDHUserOwnPrivKeyChange_val_ptr_len_ptr);
  530.     DEBUGMSGTL(("verbose:usmDHUserKeyTable:usmDHUserOwnPrivKeyChange_get",
  531.                 "calledn"));
  532.     netsnmp_assert(NULL != rowreq_ctx);
  533.     /*
  534.      * TODO:231:o: |-> Extract the current value of the usmDHUserOwnPrivKeyChange data.
  535.      * set (* usmDHUserOwnPrivKeyChange_val_ptr_ptr ) and (* usmDHUserOwnPrivKeyChange_val_ptr_len_ptr ) from rowreq_ctx->data
  536.      */
  537.     if (!rowreq_ctx || !usmDHUserOwnPrivKeyChange_val_ptr_len_ptr ||
  538.         !usmDHUserOwnPrivKeyChange_val_ptr_ptr ||
  539.         !*usmDHUserOwnPrivKeyChange_val_ptr_ptr) {
  540.         return MFD_ERROR;
  541.     }
  542.     return usmDHGetUserKeyChange(rowreq_ctx->data, 0,
  543.                                  usmDHUserOwnPrivKeyChange_val_ptr_ptr,
  544.                                  usmDHUserOwnPrivKeyChange_val_ptr_len_ptr);
  545. }                               /* usmDHUserOwnPrivKeyChange_get */
  546. /** @} */