📄 mtetriggertable.c
字号:
* this one is not *all* that useful, because the error is * only kept for 30 seconds at most. Maybe scan it every 30 * seconds, but I'm not doing so without seeking other peoples * opinions first. */ MTE_PROCESS_LINE ("-o snmperrErrMessage \"snmperrs\" snmperrErrorFlag != 0"); }}static int monitor_call_count = 0;voidparse_simple_monitor(const char *token, char *line){ char buf[SPRINT_MAX_LEN], *cp, ebuf[SPRINT_MAX_LEN], eventname[64]; oid obuf[MAX_OID_LEN]; size_t obufLen; struct mteTriggerTable_data *StorageNew; monitor_call_count++; eventname[0] = '\0'; StorageNew = create_mteTriggerTable_data(); StorageNew->storageType = ST_READONLY; StorageNew->mteTriggerEnabled = MTETRIGGERENABLED_TRUE; StorageNew->mteTriggerEntryStatus = RS_ACTIVE; StorageNew->mteTriggerValueIDWildcard = MTETRIGGERVALUEIDWILDCARD_TRUE; StorageNew->mteTriggerBooleanStartup = MTETRIGGERBOOLEANSTARTUP_TRUE; StorageNew->mteTriggerThresholdStartup = MTETRIGGERTHRESHOLDSTARTUP_RISINGORFALLING; StorageNew->mteTriggerExistenceTest[0] = 0; /* * owner = snmpd.conf, why not? */ StorageNew->mteOwner = strdup("snmpd.conf"); StorageNew->mteOwnerLen = strlen(StorageNew->mteOwner); StorageNew->pdu_version = SNMP_VERSION_3; StorageNew->pdu_securityModel = SNMP_SEC_MODEL_USM; StorageNew->pdu_securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV; cp = line; while (cp && *cp == '-') { cp = copy_nword(cp, buf, sizeof(buf)); switch (buf[1]) { case 't': /* * Threshold toggle */ StorageNew->mteTriggerTest[0] = MTETRIGGERTEST_THRESHOLD; break; case 'i': /* * Single instance */ StorageNew->mteTriggerValueIDWildcard = MTETRIGGERVALUEIDWILDCARD_FALSE; break; case 'r': if (cp) { cp = copy_nword(cp, buf, sizeof(buf)); StorageNew->mteTriggerFrequency = strtoul(buf, NULL, 0); } else { config_perror("No parameter after -r given\n"); /* * XXX: free StorageNew */ return; } break; case 'u': if (cp) { cp = copy_nword(cp, buf, sizeof(buf)); StorageNew->pdu_securityName = strdup(buf); StorageNew->pdu_securityNameLen = strlen(buf); } else { config_perror("No parameter after -u given\n"); /* * XXX: free StorageNew */ return; } break; case 'e': if (cp) { cp = copy_nword(cp, eventname, sizeof(eventname)); } else { config_perror("No parameter after -e given\n"); /* * XXX: free StorageNew */ return; } break; case 'o': /* * oid */ cp = copy_nword(cp, buf, sizeof(buf)); obufLen = MAX_OID_LEN; if (!snmp_parse_oid(buf, obuf, &obufLen)) { sprintf(ebuf, "unable to parse oid: %s", buf); config_perror(ebuf); /* * XXX: free StorageNew */ return; } sprintf(buf, "snmpd.conf%d", monitor_call_count); mte_add_object_to_table("snmpd.conf", buf, obuf, obufLen, 1); if (StorageNew->mteTriggerObjectsOwnerLen == 0) { SNMP_FREE(StorageNew->mteTriggerObjectsOwner); StorageNew->mteTriggerObjectsOwner = strdup("snmpd.conf"); StorageNew->mteTriggerObjectsOwnerLen = strlen("snmpd.conf"); } if (StorageNew->mteTriggerObjectsLen == 0) { SNMP_FREE(StorageNew->mteTriggerObjects); StorageNew->mteTriggerObjects = strdup(buf); StorageNew->mteTriggerObjectsLen = strlen(buf); } break; } } if (StorageNew->pdu_securityNameLen == 0) { char *mte_default_user = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_INTERNAL_SECNAME); if (mte_default_user) { StorageNew->pdu_securityName = strdup(mte_default_user); StorageNew->pdu_securityNameLen = strlen(mte_default_user); } else { config_perror("-u USER parameter required\n"); /* * XXX: free StorageNew */ return; } } /* * name */ cp = copy_nword(cp, buf, sizeof(buf)); if (!cp) { config_perror("illegal monitor: no name specified"); /* * XXX: free StorageNew */ return; } StorageNew->mteTriggerName = strdup(buf); StorageNew->mteTriggerNameLen = strlen(StorageNew->mteTriggerName); /* * oid */ cp = copy_nword(cp, buf, sizeof(buf)); obufLen = MAX_OID_LEN; if (!snmp_parse_oid(buf, obuf, &obufLen)) { sprintf(ebuf, "unable to parse oid: %s", buf); config_perror(ebuf); /* * XXX: free StorageNew */ return; } if (StorageNew->mteTriggerValueID) free(StorageNew->mteTriggerValueID); StorageNew->mteTriggerValueID = snmp_duplicate_objid(obuf, obufLen); StorageNew->mteTriggerValueIDLen = obufLen; if (StorageNew->mteTriggerTest[0] == MTETRIGGERTEST_THRESHOLD) { /* * it's a threshold * grab 'low' and 'high' params */ if (!cp) { config_perror("no lower threshold value specified"); } cp = copy_nword(cp, buf, sizeof(buf)); StorageNew->mteTriggerThresholdFalling = strtol(buf, NULL, 0); if (!cp) { config_perror("no upper threshold value specified"); } cp = copy_nword(cp, buf, sizeof(buf)); StorageNew->mteTriggerThresholdRising = strtol(buf, NULL, 0); } else { /* * if nothing beyond here, it's an existence test */ if (!cp) { StorageNew->mteTriggerTest[0] = (u_char)MTETRIGGERTEST_EXISTENCE; if (eventname[0] != '\0') { StorageNew->mteTriggerExistenceEventOwner = strdup("snmpd.conf"); StorageNew->mteTriggerExistenceEventOwnerLen = strlen(StorageNew->mteTriggerExistenceEventOwner); StorageNew->mteTriggerExistenceEvent = strdup(eventname); StorageNew->mteTriggerExistenceEventLen = strlen(eventname); } mteTriggerTable_add(StorageNew); return; } /* * assume boolean (need to deal with threshold statements) */ cp = copy_nword(cp, buf, sizeof(buf)); if ((StorageNew->mteTriggerBooleanComparison = se_find_value_in_slist("mteBooleanOperators", buf)) == -1) { config_perror("illegal boolean operator"); return; } /* * XXX: add threshold */ StorageNew->mteTriggerTest[0] = MTETRIGGERTEST_BOOLEAN; if (!cp) { config_perror("no comparison value specified"); /* * XXX: free StorageNew */ return; } cp = copy_nword(cp, buf, sizeof(buf)); StorageNew->mteTriggerBooleanValue = strtol(buf, NULL, 0); if (eventname[0] != '\0') { StorageNew->mteTriggerBooleanEventOwner = strdup("snmpd.conf"); StorageNew->mteTriggerBooleanEventOwnerLen = strlen(StorageNew->mteTriggerBooleanEventOwner); StorageNew->mteTriggerBooleanEvent = strdup(eventname); StorageNew->mteTriggerBooleanEventLen = strlen(eventname); } } mteTriggerTable_add(StorageNew); mte_enable_trigger(StorageNew); DEBUGMSGTL(("mteTriggerTable", "added simple monitor: %s\n", StorageNew->mteTriggerName));}/* * parse_mteTriggerTable(): * parses .conf file entries needed to configure the mib. */voidparse_mteTriggerTable(const char *token, char *line){ size_t tmpint; oid *tmpoid = NULL; struct mteTriggerTable_data *StorageTmp = SNMP_MALLOC_STRUCT(mteTriggerTable_data); DEBUGMSGTL(("mteTriggerTable", "parsing config... ")); if (StorageTmp == NULL) { config_perror("malloc failure"); return; } line = read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteOwner, &StorageTmp->mteOwnerLen); if (StorageTmp->mteOwner == NULL) { config_perror("invalid specification for mteOwner"); return; } line = read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteTriggerName, &StorageTmp->mteTriggerNameLen); if (StorageTmp->mteTriggerName == NULL) { config_perror("invalid specification for mteTriggerName"); return; } line = read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteTriggerComment, &StorageTmp->mteTriggerCommentLen); if (StorageTmp->mteTriggerComment == NULL) { config_perror("invalid specification for mteTriggerComment"); return; } line = read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteTriggerTest, &StorageTmp->mteTriggerTestLen); if (StorageTmp->mteTriggerTest == NULL) { config_perror("invalid specification for mteTriggerTest"); return; } line = read_config_read_data(ASN_INTEGER, line, &StorageTmp->mteTriggerSampleType, &tmpint); line = read_config_read_data(ASN_OBJECT_ID, line, &StorageTmp->mteTriggerValueID, &StorageTmp->mteTriggerValueIDLen); if (StorageTmp->mteTriggerValueID == NULL) { config_perror("invalid specification for mteTriggerValueID"); return; } line = read_config_read_data(ASN_INTEGER, line, &StorageTmp->mteTriggerValueIDWildcard, &tmpint); line = read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteTriggerTargetTag, &StorageTmp->mteTriggerTargetTagLen); if (StorageTmp->mteTriggerTargetTag == NULL) { config_perror("invalid specification for mteTriggerTargetTag"); return; } line = read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteTriggerContextName, &StorageTmp->mteTriggerContextNameLen); if (StorageTmp->mteTriggerContextName == NULL) { config_perror("invalid specification for mteTriggerContextName"); return; } line = read_config_read_data(ASN_INTEGER, line, &StorageTmp->mteTriggerContextNameWildcard, &tmpint); line = read_config_read_data(ASN_UNSIGNED, line, &StorageTmp->mteTriggerFrequency, &tmpint); line =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -