int netsnmp_null_handler(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { DEBUGMSGTL(("helper:null", "Got request\n")); DEBUGMSGTL(("helper:null", " oid:")); DEBUGMSGOID(("helper:null", requests->requestvb->name, requests->requestvb->name_length)); DEBUGMSG(("helper:null", "\n")); switch (reqinfo->mode) { case MODE_GETNEXT: case MODE_GETBULK: return SNMP_ERR_NOERROR; case MODE_GET: netsnmp_request_set_error_all(requests, SNMP_NOSUCHOBJECT); return SNMP_ERR_NOERROR; default: netsnmp_request_set_error_all(requests, SNMP_ERR_NOSUCHNAME); return SNMP_ERR_NOERROR; } }
/** @internal Implements the read_only handler */ int netsnmp_read_only_helper(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { DEBUGMSGTL(("helper:read_only", "Got request\n")); switch (reqinfo->mode) { #ifndef NETSNMP_NO_WRITE_SUPPORT case MODE_SET_RESERVE1: case MODE_SET_RESERVE2: case MODE_SET_ACTION: case MODE_SET_COMMIT: case MODE_SET_FREE: case MODE_SET_UNDO: netsnmp_request_set_error_all(requests, SNMP_ERR_NOTWRITABLE); return SNMP_ERR_NOTWRITABLE; #endif /* NETSNMP_NO_WRITE_SUPPORT */ case MODE_GET: case MODE_GETNEXT: case MODE_GETBULK: /* next handler called automatically - 'AUTO_NEXT' */ return SNMP_ERR_NOERROR; } netsnmp_request_set_error_all(requests, SNMP_ERR_GENERR); return SNMP_ERR_GENERR; }
/** * @internal * undo setup */ int _mfd_mibtestTable_undo_setup(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc; mibtestTable_rowreq_ctx *rowreq_ctx = netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:mibtestTable:_mfd_mibtestTable_undo_setup", "called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * allocate undo context */ rowreq_ctx->undo = mibtestTable_allocate_data(); if (NULL == rowreq_ctx->undo) { /** msg already logged */ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE); return SNMP_ERR_NOERROR; } /* * row undo setup */ rowreq_ctx->column_set_flags = 0; rc = mibtestTable_undo_setup(rowreq_ctx); if (MFD_SUCCESS != rc) { DEBUGMSGTL(("mibtestTable:mfd", "error %d from " "mibtestTable_undo_setup\n", rc)); netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc)); } else { /* * column undo setup */ netsnmp_table_request_info *tri; for (; requests; requests = requests->next) { /* * set column data */ tri = netsnmp_extract_table_info(requests); if (NULL == tri) continue; rc = _mibtestTable_undo_setup_column(rowreq_ctx, tri->colnum); if (MFD_SUCCESS != rc) { DEBUGMSGTL(("mibtestTable:mfd", "error %d from " "mibtestTable_undo_setup_column\n", rc)); netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc)); } } /* for results */ } return SNMP_ERR_NOERROR; } /* _mfd_mibtestTable_undo_setup */
/** * @internal * undo setup */ int _mfd_ipv4InterfaceTable_undo_setup(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc; ipv4InterfaceTable_rowreq_ctx *rowreq_ctx = netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_undo_setup", "called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * allocate undo context */ rc = _mfd_ifTable_undo_setup_allocate(rowreq_ctx); if (MFD_SUCCESS != rc) { netsnmp_request_set_error_all(requests, rc); return SNMP_ERR_NOERROR; } /* * row undo setup */ rc = ipv4InterfaceTable_undo_setup(rowreq_ctx); if (MFD_SUCCESS != rc) { DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from " "ipv4InterfaceTable_undo_setup\n", rc)); netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc)); } else { /* * column undo setup */ netsnmp_table_request_info *tri; for (; requests; requests = requests->next) { /* * set column data */ tri = netsnmp_extract_table_info(requests); if (NULL == tri) continue; rc = _ipv4InterfaceTable_undo_setup_column(rowreq_ctx, tri->colnum); if (MFD_SUCCESS != rc) { DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from " "ipv4InterfaceTable_undo_setup_column\n", rc)); netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc)); } } /* for results */ } return SNMP_ERR_NOERROR; } /* _mfd_ipv4InterfaceTable_undo_setup */
/** * @internal * wrapper */ static int _mfd_ipv4InterfaceTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc = SNMP_ERR_NOERROR; ipv4InterfaceTable_rowreq_ctx *rowreq_ctx = netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_object_lookup", "called\n")); /* * get our context from mfd * ipv4InterfaceTable_interface_ctx *if_ctx = * (ipv4InterfaceTable_interface_ctx *)reginfo->my_reg_void; */ if (NULL == rowreq_ctx) { rc = SNMP_ERR_NOCREATION; } if (MFD_SUCCESS != rc) netsnmp_request_set_error_all(requests, rc); else ipv4InterfaceTable_row_prep(rowreq_ctx); return SNMP_VALIDATE_ERR(rc); } /* _mfd_ipv4InterfaceTable_object_lookup */
/** * @internal * wrapper */ static int _mfd_ipv4InterfaceTable_pre_request(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc; DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_pre_request", "called\n")); if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) { DEBUGMSGTL(("internal:ipv4InterfaceTable", "skipping additional pre_request\n")); return SNMP_ERR_NOERROR; } rc = ipv4InterfaceTable_pre_request(ipv4InterfaceTable_if_ctx. user_ctx); if (MFD_SUCCESS != rc) { /* * nothing we can do about it but log it */ DEBUGMSGTL(("ipv4InterfaceTable", "error %d from " "ipv4InterfaceTable_pre_request\n", rc)); netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc)); } return SNMP_ERR_NOERROR; } /* _mfd_ipv4InterfaceTable_pre_request */
/** * @internal * commit the values */ int _mfd_ipv4InterfaceTable_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc; ipv4InterfaceTable_rowreq_ctx *rowreq_ctx = netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_commit", "called\n")); netsnmp_assert(NULL != rowreq_ctx); rc = ipv4InterfaceTable_commit(rowreq_ctx); if (MFD_SUCCESS != rc) { DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from " "ipv4InterfaceTable_commit\n", rc)); netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc)); } if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) { /* * if we successfully commited this row, set the dirty flag. Use the * current value + 1 (i.e. dirty = # rows changed). * this is checked in post_request... */ ipv4InterfaceTable_dirty_set(ipv4InterfaceTable_dirty_get() + 1); /* set table dirty flag */ } return SNMP_ERR_NOERROR; }
/** * @internal * wrapper */ static int _mfd_dot11ConfTotalTrapGroupTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { dot11ConfTotalTrapGroupTable_rowreq_ctx *rowreq_ctx = netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:dot11ConfTotalTrapGroupTable:_mfd_dot11ConfTotalTrapGroupTable_object_lookup","called\n")); /* * get our context from mfd * dot11ConfTotalTrapGroupTable_interface_ctx *if_ctx = * (dot11ConfTotalTrapGroupTable_interface_ctx *)reginfo->my_reg_void; */ if(NULL == rowreq_ctx) { netsnmp_request_set_error_all(requests, SNMP_ERR_NOCREATION); } else { dot11ConfTotalTrapGroupTable_row_prep(rowreq_ctx); } return SNMP_ERR_NOERROR; } /* _mfd_dot11ConfTotalTrapGroupTable_object_lookup */
/** * @internal * wrapper */ static int _mfd_ipv6ScopeZoneIndexTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc = SNMP_ERR_NOERROR; ipv6ScopeZoneIndexTable_rowreq_ctx *rowreq_ctx = (ipv6ScopeZoneIndexTable_rowreq_ctx*) netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:ipv6ScopeZoneIndexTable:_mfd_ipv6ScopeZoneIndexTable_object_lookup", "called\n")); /* * get our context from mfd * ipv6ScopeZoneIndexTable_interface_ctx *if_ctx = * (ipv6ScopeZoneIndexTable_interface_ctx *)reginfo->my_reg_void; */ if (NULL == rowreq_ctx) { netsnmp_table_request_info *tblreq_info; netsnmp_index oid_idx; tblreq_info = netsnmp_extract_table_info(requests); if (NULL == tblreq_info) { snmp_log(LOG_ERR, "request had no table info\n"); return MFD_ERROR; } /* * try create rowreq */ oid_idx.oids = tblreq_info->index_oid; oid_idx.len = tblreq_info->index_oid_len; rowreq_ctx = _mfd_ipv6ScopeZoneIndexTable_rowreq_from_index(&oid_idx, &rc); if (MFD_SUCCESS == rc) { netsnmp_assert(NULL != rowreq_ctx); rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED; /* * add rowreq_ctx to request data lists */ netsnmp_container_table_row_insert(requests, (netsnmp_index *) rowreq_ctx); } } if (MFD_SUCCESS != rc) netsnmp_request_set_error_all(requests, rc); else ipv6ScopeZoneIndexTable_row_prep(rowreq_ctx); return SNMP_VALIDATE_ERR(rc); } /* _mfd_ipv6ScopeZoneIndexTable_object_lookup */
/** * @internal * wrapper */ static int _mfd_dot11ConfTotalTrapGroupTable_pre_request(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc = dot11ConfTotalTrapGroupTable_pre_request(dot11ConfTotalTrapGroupTable_if_ctx.user_ctx); if (MFD_SUCCESS != rc) { /* * nothing we can do about it but log it */ DEBUGMSGTL(("internal:dot11ConfTotalTrapGroupTable","error %d from " "dot11ConfTotalTrapGroupTable_pre_request\n", rc)); netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc)); } return SNMP_ERR_NOERROR; } /* _mfd_dot11ConfTotalTrapGroupTable_pre_request */
/* * @internal * Check dependencies wrapper */ static int _mfd_dot11ConfTotalTrapGroupTable_check_dependencies(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc; dot11ConfTotalTrapGroupTable_rowreq_ctx *rowreq_ctx = netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:dot11ConfTotalTrapGroupTable:_mfd_dot11ConfTotalTrapGroupTable_check_dependencies","called\n")); netsnmp_assert(NULL != rowreq_ctx); rc = dot11ConfTotalTrapGroupTable_check_dependencies(rowreq_ctx); if(rc){ DEBUGMSGTL(("verbose:dot11ConfTotalTrapGroupTable:mfd","error %d from " "dot11ConfTotalTrapGroupTable_check_dependencies\n", rc)); netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc)); } return SNMP_ERR_NOERROR; } /* _mfd_dot11ConfTotalTrapGroupTable_check_dependencies */
/** * @internal * commit the values */ int _mfd_dot11WtpIfTable_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *agtreq_info, netsnmp_request_info *requests) { int rc; dot11WtpIfTable_rowreq_ctx *rowreq_ctx = netsnmp_container_table_row_extract(requests); DEBUGMSGTL(("internal:dot11WtpIfTable:_mfd_dot11WtpIfTable_commit","called\n")); netsnmp_assert(NULL != rowreq_ctx); rc = dot11WtpIfTable_commit(rowreq_ctx); if (MFD_SUCCESS != rc) { DEBUGMSGTL(("verbose:dot11WtpIfTable:mfd","error %d from " "dot11WtpIfTable_commit\n", rc)); netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc)); } return SNMP_ERR_NOERROR; }
/** Implements the cache handler */ int netsnmp_cache_helper_handler(netsnmp_mib_handler * handler, netsnmp_handler_registration * reginfo, netsnmp_agent_request_info * reqinfo, netsnmp_request_info * requests) { char addrstr[32]; netsnmp_cache *cache = NULL; netsnmp_handler_args cache_hint; DEBUGMSGTL(("helper:cache_handler", "Got request (%d) for %s: ", reqinfo->mode, reginfo->handlerName)); DEBUGMSGOID(("helper:cache_handler", reginfo->rootoid, reginfo->rootoid_len)); DEBUGMSG(("helper:cache_handler", "\n")); netsnmp_assert(handler->flags & MIB_HANDLER_AUTO_NEXT); cache = (netsnmp_cache *) handler->myvoid; if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_NO_CACHING) || !cache || !cache->enabled || !cache->load_cache) { DEBUGMSGT(("helper:cache_handler", " caching disabled or " "cache not found, disabled or had no load method\n")); return SNMP_ERR_NOERROR; } snprintf(addrstr,sizeof(addrstr), "%ld", (long int)cache); DEBUGMSGTL(("helper:cache_handler", "using cache %s: ", addrstr)); DEBUGMSGOID(("helper:cache_handler", cache->rootoid, cache->rootoid_len)); DEBUGMSG(("helper:cache_handler", "\n")); /* * Make the handler-chain parameters available to * the cache_load hook routine. */ cache_hint.handler = handler; cache_hint.reginfo = reginfo; cache_hint.reqinfo = reqinfo; cache_hint.requests = requests; cache->cache_hint = &cache_hint; switch (reqinfo->mode) { case MODE_GET: case MODE_GETNEXT: case MODE_GETBULK: #ifndef NETSNMP_NO_WRITE_SUPPORT case MODE_SET_RESERVE1: #endif /* !NETSNMP_NO_WRITE_SUPPORT */ /* * only touch cache once per pdu request, to prevent a cache * reload while a module is using cached data. * * XXX: this won't catch a request reloading the cache while * a previous (delegated) request is still using the cache. * maybe use a reference counter? */ if (netsnmp_cache_is_valid(reqinfo, addrstr)) break; /* * call the load hook, and update the cache timestamp. * If it's not already there, add to reqinfo */ netsnmp_cache_check_and_reload(cache); netsnmp_cache_reqinfo_insert(cache, reqinfo, addrstr); /** next handler called automatically - 'AUTO_NEXT' */ break; #ifndef NETSNMP_NO_WRITE_SUPPORT case MODE_SET_RESERVE2: case MODE_SET_FREE: case MODE_SET_ACTION: case MODE_SET_UNDO: netsnmp_assert(netsnmp_cache_is_valid(reqinfo, addrstr)); /** next handler called automatically - 'AUTO_NEXT' */ break; /* * A (successful) SET request wouldn't typically trigger a reload of * the cache, but might well invalidate the current contents. * Only do this on the last pass through. */ case MODE_SET_COMMIT: if (cache->valid && ! (cache->flags & NETSNMP_CACHE_DONT_INVALIDATE_ON_SET) ) { cache->free_cache(cache, cache->magic); cache->valid = 0; } /** next handler called automatically - 'AUTO_NEXT' */ break; #endif /* NETSNMP_NO_WRITE_SUPPORT */ default: snmp_log(LOG_WARNING, "cache_handler: Unrecognised mode (%d)\n", reqinfo->mode); netsnmp_request_set_error_all(requests, SNMP_ERR_GENERR); return SNMP_ERR_GENERR; } if (cache->flags & NETSNMP_CACHE_RESET_TIMER_ON_USE) netsnmp_set_monotonic_marker(&cache->timestampM); return SNMP_ERR_NOERROR; }