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

SNMP编程

开发平台:

Unix_Linux

  1. /*
  2.  * Note: this file originally auto-generated by mib2c using
  3.  *        : mib2c.scalar.conf,v 1.7 2003/04/08 14:57:04 dts12 Exp $
  4.  */
  5. #include <net-snmp/net-snmp-config.h>
  6. #include <net-snmp/net-snmp-includes.h>
  7. #include <net-snmp/agent/net-snmp-agent-includes.h>
  8. #include "usmDHParameters.h"
  9. #include <openssl/dh.h>
  10. static DH *dh_params = NULL;
  11. DH *
  12. get_dh_params(void)
  13. {
  14.     return dh_params;
  15. }
  16. /** Initializes the usmDHParameters module */
  17. void
  18. init_usmDHParameters(void)
  19. {
  20.     static oid      usmDHParameters_oid[] =
  21.         { 1, 3, 6, 1, 3, 101, 1, 1, 1 };
  22.     DEBUGMSGTL(("usmDHParameters", "Initializingn"));
  23.     netsnmp_register_scalar(netsnmp_create_handler_registration
  24.                             ("usmDHParameters", handle_usmDHParameters,
  25.                              usmDHParameters_oid,
  26.                              OID_LENGTH(usmDHParameters_oid),
  27.                              HANDLER_CAN_RWRITE));
  28.     /* currently hard coded to the oakly group 2 set. */
  29.     /* these values are modifiable via SNMP SETs if needed by
  30.        management apps though */
  31.     if (!dh_params) {
  32.         dh_params = DH_new();
  33.         dh_params->g = BN_new();
  34.         BN_hex2bn(&dh_params->g, "02");
  35.         BN_hex2bn(&dh_params->p, "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff");
  36.     }
  37. }
  38. int
  39. handle_usmDHParameters(netsnmp_mib_handler *handler,
  40.                        netsnmp_handler_registration *reginfo,
  41.                        netsnmp_agent_request_info *reqinfo,
  42.                        netsnmp_request_info *requests)
  43. {
  44.     /*
  45.      * We are never called for a GETNEXT if it's registered as a
  46.      * "instance", as it's "magically" handled for us.  
  47.      */
  48.     static unsigned char *cp = NULL;
  49.     static DH *dh_tmpp = NULL;
  50.     int cp_len;
  51.     /*
  52.      * a instance handler also only hands us one request at a time, so
  53.      * we don't need to loop over a list of requests; we'll only get one. 
  54.      */
  55.     switch (reqinfo->mode) {
  56.     case MODE_GET:
  57.         if(cp) {
  58.             free(cp);
  59.             cp = NULL;
  60.         }
  61.         cp_len = i2d_DHparams(dh_params, &cp);
  62.         if (cp_len > 0)
  63.             snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
  64.                                      (u_char *) cp, cp_len);
  65.         break;
  66.         /*
  67.          * SET REQUEST
  68.          *
  69.          * multiple states in the transaction.  See:
  70.          * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
  71.          */
  72.     case MODE_SET_RESERVE1:
  73.         break;
  74.     case MODE_SET_RESERVE2:
  75.         cp = requests->requestvb->val.string;
  76.         dh_tmpp = d2i_DHparams(NULL, (const unsigned char **) &cp,
  77.                                requests->requestvb->val_len);
  78.         if ( !dh_tmpp) {
  79.             netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE);
  80.         }
  81.         if (cp - requests->requestvb->val.string !=
  82.             requests->requestvb->val_len) {
  83.             /* value too long; we didn't parse the whole thing */
  84.             netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE);
  85.             DH_free(dh_tmpp);
  86.             dh_tmpp = NULL;
  87.         }
  88.         break;
  89.     case MODE_SET_FREE:
  90.     case MODE_SET_COMMIT:
  91.         DH_free(dh_tmpp);
  92.         dh_tmpp = NULL;
  93.         break;
  94.     case MODE_SET_ACTION:
  95.     {
  96.         DH *tmpp;
  97.         tmpp = dh_params;
  98.         dh_params = dh_tmpp;
  99.         dh_tmpp = tmpp;
  100.         break;
  101.     }
  102.     case MODE_SET_UNDO:
  103.     {
  104.         DH_free(dh_params);  /* free new value */
  105.         dh_params = dh_tmpp; /* restore old value */
  106.         dh_tmpp = NULL;
  107.         break;
  108.     }
  109.     default:
  110.         /*
  111.          * we should never get here, so this is a really bad error 
  112.          */
  113.         return SNMP_ERR_GENERR;
  114.     }
  115.     return SNMP_ERR_NOERROR;
  116. }