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

SNMP编程

开发平台:

Unix_Linux

  1. #include <net-snmp/net-snmp-config.h>
  2. #if HAVE_STRING_H
  3. #include <string.h>
  4. #else
  5. #include <strings.h>
  6. #endif
  7. #include <net-snmp/net-snmp-includes.h>
  8. #include <net-snmp/agent/net-snmp-agent-includes.h>
  9. #include <net-snmp/agent/read_only.h>
  10. #if HAVE_DMALLOC_H
  11. #include <dmalloc.h>
  12. #endif
  13. /** @defgroup read_only read_only: make your handler read_only automatically 
  14.  *  The only purpose of this handler is to return an
  15.  *  appropriate error for any requests passed to it in a SET mode.
  16.  *  Inserting it into your handler chain will ensure you're never
  17.  *  asked to perform a SET request so you can ignore those error
  18.  *  conditions.
  19.  *  @ingroup utilities
  20.  *  @{
  21.  */
  22. /** returns a read_only handler that can be injected into a given
  23.  *  handler chain.
  24.  */
  25. netsnmp_mib_handler *
  26. netsnmp_get_read_only_handler(void)
  27. {
  28.     netsnmp_mib_handler *ret = NULL;
  29.     
  30.     ret = netsnmp_create_handler("read_only",
  31.                                  netsnmp_read_only_helper);
  32.     if (ret) {
  33.         ret->flags |= MIB_HANDLER_AUTO_NEXT;
  34.     }
  35.     return ret;
  36. }
  37. /** @internal Implements the read_only handler */
  38. int
  39. netsnmp_read_only_helper(netsnmp_mib_handler *handler,
  40.                          netsnmp_handler_registration *reginfo,
  41.                          netsnmp_agent_request_info *reqinfo,
  42.                          netsnmp_request_info *requests)
  43. {
  44.     DEBUGMSGTL(("helper:read_only", "Got requestn"));
  45.     switch (reqinfo->mode) {
  46.     case MODE_SET_RESERVE1:
  47.     case MODE_SET_RESERVE2:
  48.     case MODE_SET_ACTION:
  49.     case MODE_SET_COMMIT:
  50.     case MODE_SET_FREE:
  51.     case MODE_SET_UNDO:
  52.         netsnmp_set_all_requests_error(reqinfo, requests,
  53.                                        SNMP_ERR_NOTWRITABLE);
  54.         return SNMP_ERR_NOTWRITABLE;
  55.     case MODE_GET:
  56.     case MODE_GETNEXT:
  57.     case MODE_GETBULK:
  58.         /* next handler called automatically - 'AUTO_NEXT' */
  59.         return SNMP_ERR_NOERROR;
  60.     default:
  61.         netsnmp_set_all_requests_error(reqinfo, requests,
  62.                                        SNMP_ERR_GENERR);
  63.         return SNMP_ERR_GENERR;
  64.     }
  65.     netsnmp_set_all_requests_error(reqinfo, requests, SNMP_ERR_GENERR);
  66.     return SNMP_ERR_GENERR;     /* should never get here */
  67. }
  68. /** initializes the read_only helper which then registers a read_only
  69.  *  handler as a run-time injectable handler for configuration file
  70.  *  use.
  71.  */
  72. void
  73. netsnmp_init_read_only_helper(void)
  74. {
  75.     netsnmp_register_handler_by_name("read_only",
  76.                                      netsnmp_get_read_only_handler());
  77. }