📄 snmpnotifyfiltertable_data_access.c
字号:
/* * TODO:390:o: Prepare row for request. * If populating row data was delayed, this is the place to * fill in the row for this request. */ return MFD_SUCCESS;} /* snmpNotifyFilterTable_row_prep *//* * TODO:420:r: Implement snmpNotifyFilterTable index validation. *//*--------------------------------------------------------------------- * SNMP-NOTIFICATION-MIB::snmpNotifyFilterProfileEntry.snmpNotifyFilterProfileName * snmpNotifyFilterProfileName is subid 1 of snmpNotifyFilterProfileEntry. * Its status is Current, and its access level is Create. * OID: .1.3.6.1.6.3.13.1.2.1.1 * Description:The name of the filter profile to be used when generating notifications using the corresponding entry in the snmpTargetAddrTable. * * Attributes: * accessible 1 isscalar 0 enums 0 hasdefval 0 * readable 1 iscolumn 1 ranges 1 hashint 1 * settable 1 * hint: 255t * * Ranges: 1 - 32; * * Its syntax is SnmpAdminString (based on perltype OCTETSTR) * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char) * This data type requires a length. (Max 32) *//** * check validity of snmpNotifyFilterProfileName external index portion * * NOTE: this is not the place to do any checks for the sanity * of multiple indexes. Those types of checks should be done in the * snmpNotifyFilterTable_validate_index() function. * * @retval MFD_SUCCESS : the incoming value is legal * @retval MFD_ERROR : the incoming value is NOT legal */int snmpNotifyFilterTable_snmpNotifyFilterProfileName_check_index (snmpNotifyFilterTable_rowreq_ctx * rowreq_ctx) { DEBUGMSGTL(("verbose:snmpNotifyFilterTable:snmpNotifyFilterTable_snmpNotifyFilterProfileName_check_index", "called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * TODO:424:M: |-> Check snmpNotifyFilterTable external index snmpNotifyFilterProfileName. * check that index value in the table context (rowreq_ctx) * for the external index snmpNotifyFilterProfileName is legal. */ return MFD_SUCCESS; /* external index snmpNotifyFilterProfileName ok */} /* snmpNotifyFilterTable_snmpNotifyFilterProfileName_check_index *//*--------------------------------------------------------------------- * SNMP-NOTIFICATION-MIB::snmpNotifyFilterEntry.snmpNotifyFilterSubtree * snmpNotifyFilterSubtree is subid 1 of snmpNotifyFilterEntry. * Its status is Current, and its access level is NoAccess. * OID: .1.3.6.1.6.3.13.1.3.1.1 * Description:The MIB subtree which, when combined with the corresponding instance of snmpNotifyFilterMask, defines a family of subtrees which are included in or excluded from the filter profile. * * Attributes: * accessible 0 isscalar 0 enums 0 hasdefval 0 * readable 0 iscolumn 1 ranges 0 hashint 0 * settable 0 * * * Its syntax is OBJECTID (based on perltype OBJECTID) * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid) * This data type requires a length. * * * * NOTE: NODE snmpNotifyFilterSubtree IS NOT ACCESSIBLE * * *//** * check validity of snmpNotifyFilterSubtree index portion * * @retval MFD_SUCCESS : the incoming value is legal * @retval MFD_ERROR : the incoming value is NOT legal * * @note this is not the place to do any checks for the sanity * of multiple indexes. Those types of checks should be done in the * snmpNotifyFilterTable_validate_index() function. * * @note Also keep in mind that if the index refers to a row in this or * some other table, you can't check for that row here to make * decisions, since that row might not be created yet, but may * be created during the processing this request. If you have * such checks, they should be done in the check_dependencies * function, because any new/deleted/changed rows should be * available then. * * The following checks have already been done for you: * * If there a no other checks you need to do, simply return MFD_SUCCESS. */intsnmpNotifyFilterSubtree_check_index(snmpNotifyFilterTable_rowreq_ctx * rowreq_ctx){ DEBUGMSGTL(("verbose:snmpNotifyFilterTable:snmpNotifyFilterSubtree_check_index", "called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * TODO:426:M: |-> Check snmpNotifyFilterTable index snmpNotifyFilterSubtree. * check that index value in the table context is legal. * (rowreq_ctx->tbl_index.snmpNotifyFilterSubtree) */ return MFD_SUCCESS; /* snmpNotifyFilterSubtree index ok */} /* snmpNotifyFilterSubtree_check_index *//** * verify specified index is valid. * * This check is independent of whether or not the values specified for * the columns of the new row are valid. Column values and row consistency * will be checked later. At this point, only the index values should be * checked. * * All of the individual index validation functions have been called, so this * is the place to make sure they are valid as a whole when combined. If * you only have one index, then you probably don't need to do anything else * here. * * @note Keep in mind that if the indexes refer to a row in this or * some other table, you can't check for that row here to make * decisions, since that row might not be created yet, but may * be created during the processing this request. If you have * such checks, they should be done in the check_dependencies * function, because any new/deleted/changed rows should be * available then. * * * @param snmpNotifyFilterTable_reg * Pointer to the user registration data * @param rowreq_ctx * Pointer to the users context. * @retval MFD_SUCCESS : success * @retval MFD_CANNOT_CREATE_NOW : index not valid right now * @retval MFD_CANNOT_CREATE_EVER : index never valid */intsnmpNotifyFilterTable_validate_index(snmpNotifyFilterTable_registration * snmpNotifyFilterTable_reg, snmpNotifyFilterTable_rowreq_ctx * rowreq_ctx){ int rc = MFD_SUCCESS; DEBUGMSGTL(("verbose:snmpNotifyFilterTable:snmpNotifyFilterTable_validate_index", "called\n")); /** we should have a non-NULL pointer */ netsnmp_assert(NULL != rowreq_ctx); /* * TODO:430:M: |-> Validate potential snmpNotifyFilterTable index. */ return rc;} /* snmpNotifyFilterTable_validate_index *//** @} *//* * ugly, inefficient hack: create a dummy viewEntry list from the filter table * entries matching a profile name. This lets us use the existing vacm * routines for matching oids to views. */struct vacm_viewEntry *snmpNotifyFilterTable_vacm_view_subtree(const char *profile){ oid tmp_oid[MAX_OID_LEN]; netsnmp_index tmp_idx; int i, j; netsnmp_void_array *s; struct vacm_viewEntry *tmp; snmpNotifyFilterTable_rowreq_ctx *rowreq; netsnmp_container *c; tmp_idx.len = 0; tmp_idx.oids = tmp_oid; /* * get the container */ c = snmpNotifyFilterTable_container_get(); if ((NULL == profile) || (NULL == c)) return NULL; /* * get the profile subset */ tmp_idx.oids[0] = strlen(profile); tmp_idx.len = tmp_idx.oids[0] + 1; for (i = 0; i < tmp_idx.len; ++i) tmp_idx.oids[i + 1] = profile[i]; s = c->get_subset(c, &tmp_idx); if (NULL == s) return NULL; /* * allocate temporary storage */ tmp = calloc(sizeof(struct vacm_viewEntry), s->size + 1); if (NULL == tmp) { free(s->array); free(s); return NULL; } /* * copy data */ for (i = 0, j = 0; i < s->size; ++i) { rowreq = (snmpNotifyFilterTable_rowreq_ctx *) s->array[i]; /* * must match profile name exactly, and subset will return * longer matches, if they exist. */ if (tmp_idx.oids[0] != rowreq->tbl_idx.snmpNotifyFilterProfileName_len) continue; /* * exact match, copy data * vacm_viewEntry viewName and viewSubtree are prefixed with length */ tmp[j].viewName[0] = rowreq->tbl_idx.snmpNotifyFilterProfileName_len; memcpy(&tmp[j].viewName[1], rowreq->tbl_idx.snmpNotifyFilterProfileName, tmp[j].viewName[0]); tmp[j].viewSubtree[0] = rowreq->tbl_idx.snmpNotifyFilterSubtree_len; memcpy(&tmp[j].viewSubtree[1], rowreq->tbl_idx.snmpNotifyFilterSubtree, tmp[j].viewSubtree[0] * sizeof(oid)); tmp[j].viewSubtreeLen = tmp[j].viewSubtree[0] + 1; tmp[j].viewMaskLen = rowreq->data.snmpNotifyFilterMask_len; memcpy(tmp[j].viewMask, rowreq->data.snmpNotifyFilterMask, tmp[j].viewMaskLen * sizeof(oid)); tmp[j].viewType = rowreq->data.snmpNotifyFilterType; tmp[j].next = &tmp[j + 1]; ++j; } if (j) tmp[j - 1].next = NULL; else { SNMP_FREE(tmp); } free(s->array); free(s); return tmp;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -