📄 snmptargetaddrentry.c
字号:
return (1);} /* snmpTargetAddr_addTAddress */intsnmpTargetAddr_addTimeout(struct targetAddrTable_struct *entry, char *cptr){ if (cptr == 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetParamsEntry: no Timeout in config string\n")); return (0); } else if (!(isdigit(*cptr))) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargeParamsEntry: Timeout is not a digit in config string\n")); return (0); } /* * check Timeout >= 0 */ else if ((entry->timeout = (int) strtol(cptr, (char **) NULL, 0)) < 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargeParamsEntry: Timeout out of range in config string\n")); return (0); } return (1);} /* snmpTargetAddr_addTimeout */intsnmpTargetAddr_addRetryCount(struct targetAddrTable_struct *entry, char *cptr){ if (cptr == 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetParamsEntry: no Retry Count in config string\n")); return (0); } else if (!(isdigit(*cptr))) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargeParamsEntry: Retry Count is not a digit in config string\n")); return (0); } /* * spec check 0..255 */ else { entry->retryCount = (int) strtol(cptr, (char **) NULL, 0); if ((entry->retryCount < 0) || (entry->retryCount > 255)) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargeParamsEntry: Retry Count is out of range in config string\n")); return (0); } } return (1);} /* snmpTargetAddr_addRetryCount */intsnmpTargetAddr_addTagList(struct targetAddrTable_struct *entry, char *cptr){ size_t len; if (cptr == 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: no tag list in config string\n")); return (0); } else { len = strlen(cptr); /* * spec check for string 0-255 */ if (len < 0 || len > 255) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: tag list out of range in config string\n")); return (0); } SNMP_FREE(entry->tagList); entry->tagList = (char *) malloc(len + 1); strncpy(entry->tagList, cptr, len); entry->tagList[len] = '\0'; } return (1);} /* snmpTargetAddr_addTagList */intsnmpTargetAddr_addParams(struct targetAddrTable_struct *entry, char *cptr){ size_t len; if (cptr == 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: no params in config string\n")); return (0); } else { len = strlen(cptr); /* * spec check for string 1-32 */ if (len < 1 || len > 32) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: params out of range in config string\n")); return (0); } entry->params = (char *) malloc(len + 1); strncpy(entry->params, cptr, len); entry->params[len] = '\0'; } return (1);} /* snmpTargetAddr_addParams */intsnmpTargetAddr_addStorageType(struct targetAddrTable_struct *entry, char *cptr){ char buff[1024]; if (cptr == 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: no storage type in config string\n")); return (0); } else if (!(isdigit(*cptr))) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: storage type is not a digit in config string\n")); return (0); } /* * check that storage type is a possible value */ else if (((entry->storageType = (int) strtol(cptr, (char **) NULL, 0)) != SNMP_STORAGE_OTHER) && (entry->storageType != SNMP_STORAGE_VOLATILE) && (entry->storageType != SNMP_STORAGE_NONVOLATILE) && (entry->storageType != SNMP_STORAGE_PERMANENT) && (entry->storageType != SNMP_STORAGE_READONLY)) { snprintf(buff, sizeof(buff), "ERROR snmpTargetAddrEntry: storage type not a valid value of other(%d), volatile(%d), nonvolatile(%d), permanent(%d), or readonly(%d) in config string.\n", SNMP_STORAGE_OTHER, SNMP_STORAGE_VOLATILE, SNMP_STORAGE_NONVOLATILE, SNMP_STORAGE_PERMANENT, SNMP_STORAGE_READONLY); buff[ sizeof(buff)-1 ] = 0; DEBUGMSGTL(("snmpTargetAddrEntry", buff)); return (0); } return (1);} /* snmpTargetAddr_addStorageType */intsnmpTargetAddr_addRowStatus(struct targetAddrTable_struct *entry, char *cptr){ char buff[1024]; if (cptr == 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: no Row Status in config string\n")); return (0); } else if (!(isdigit(*cptr))) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: Row Status is not a digit in config string\n")); return (0); } /* * check that row status is a valid value */ else if (((entry->rowStatus = (int) strtol(cptr, (char **) NULL, 0)) != SNMP_ROW_ACTIVE) && (entry->rowStatus != SNMP_ROW_NOTINSERVICE) && (entry->rowStatus != SNMP_ROW_NOTREADY)) { snprintf(buff, sizeof(buff), "ERROR snmpTargetAddrEntry: Row Status is not a valid value of active(%d), notinservice(%d), or notready(%d) in config string.\n", SNMP_ROW_ACTIVE, SNMP_ROW_NOTINSERVICE, SNMP_ROW_NOTREADY); buff[ sizeof(buff)-1 ] = 0; DEBUGMSGTL(("snmpTargetAddrEntry", buff)); return (0); } return (1);} /* snmpTargetAddr_addRowStatus */voidsnmpd_parse_config_targetAddr(const char *token, char *char_ptr){ char *cptr = char_ptr, buff[1024]; struct targetAddrTable_struct *newEntry; int i; newEntry = snmpTargetAddrTable_create(); cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addName(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addTDomain(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = read_config_read_octet_string(cptr, (u_char **) & newEntry->tAddress, &newEntry->tAddressLen); if (!cptr || !(newEntry->tAddress)) { DEBUGMSGTL(("snmpTargetAddrEntry", "ERROR snmpTargetAddrEntry: no TAddress in config string\n")); snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addTimeout(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addRetryCount(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addTagList(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addParams(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addStorageType(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_nword(cptr, buff, sizeof(buff)); if (snmpTargetAddr_addRowStatus(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } snprintf(buff, sizeof(buff), "snmp_parse_config_targetAddr, read: %s\n", newEntry->name); buff[ sizeof(buff)-1 ] = 0; for (i = 0; i < newEntry->tDomainLen; i++) { snprintf(&buff[strlen(buff)], sizeof(buff)-strlen(buff)-1, ".%d", (int) newEntry->tDomain[i]); buff[ sizeof(buff)-1 ] = 0; } snprintf(&buff[strlen(buff)], sizeof(buff)-strlen(buff)-1, " %s %d %d %s %s %d %d\n", newEntry->tAddress, newEntry->timeout, newEntry->retryCount, newEntry->tagList, newEntry->params, newEntry->storageType, newEntry->rowStatus); buff[ sizeof(buff)-1 ] = 0; DEBUGMSGTL(("snmpTargetAddrEntry", buff)); snmpTargetAddrTable_addToList(newEntry, &aAddrTable);} /* snmpd_parse_config_target *//* * Shutdown routines *//* * store_snmpTargetAddrEntry handles the persistent storage proccess * for this MIB table. It writes out all the non-volatile rows * to permanent storage on a shutdown */intstore_snmpTargetAddrEntry(int majorID, int minorID, void *serverarg, void *clientarg){ struct targetAddrTable_struct *curr_struct; char line[1024]; int i; if ((curr_struct = aAddrTable) != 0) { while (curr_struct != 0) { if ((curr_struct->storageType == SNMP_STORAGE_NONVOLATILE || curr_struct->storageType == SNMP_STORAGE_PERMANENT) && (curr_struct->rowStatus == SNMP_ROW_ACTIVE || curr_struct->rowStatus == SNMP_ROW_NOTINSERVICE)) { snprintf(line, sizeof(line), "targetAddr %s ", curr_struct->name); line[ sizeof(line)-1 ] = 0; for (i = 0; i < curr_struct->tDomainLen; i++) { snprintf(&line[strlen(line)], sizeof(line)-strlen(line)-1, ".%i", (int) curr_struct->tDomain[i]); line[ sizeof(line)-1 ] = 0; } if ( strlen(line)+2 < sizeof(line) ) { line[ strlen(line)+1 ] = 0; line[ strlen(line) ] = ' '; } read_config_save_octet_string(&line[strlen(line)], curr_struct->tAddress, curr_struct->tAddressLen); snprintf(&line[strlen(line)], sizeof(line)-strlen(line)-1, " %i %i \"%s\" %s %i %i", curr_struct->timeout, curr_struct->retryCount, curr_struct->tagList, curr_struct->params, curr_struct->storageType, curr_struct->rowStatus); line[ sizeof(line)-1 ] = 0; /* * store to file */ snmpd_store_config(line); } curr_struct = curr_struct->next; } } return SNMPERR_SUCCESS;} /* store_snmpTargetAddrEntry *//* * MIB table access routines */u_char *var_snmpTargetAddrEntry(struct variable * vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method){ /* * variables we may use later */ static long long_ret; static char string[1500]; static oid objid[128]; struct targetAddrTable_struct *temp_struct; int i = 0; /* * Set up write_method first, in case we return NULL before getting to the * switch (vp->magic) below. In some of these cases, we still want to call * the appropriate write_method, if only to have it return the appropriate * error. */ switch (vp->magic) { case SNMPTARGETADDRTDOMAIN: *write_method = write_snmpTargetAddrTDomain; break; case SNMPTARGETADDRTADDRESS: *write_method = write_snmpTargetAddrTAddress; break; case SNMPTARGETADDRRETRYCOUNT: *write_method = write_snmpTargetAddrRetryCount; break; case SNMPTARGETADDRTIMEOUT: *write_method = write_snmpTargetAddrTimeout; break; case SNMPTARGETADDRTAGLIST: *write_method = write_snmpTargetAddrTagList; break; case SNMPTARGETADDRPARAMS: *write_method = write_snmpTargetAddrParams; break; case SNMPTARGETADDRSTORAGETYPE: *write_method = write_snmpTargetAddrStorageType; break; case SNMPTARGETADDRROWSTATUS: *write_method = write_snmpTargetAddrRowStatus; break; default: *write_method = NULL; } *var_len = sizeof(long_ret); /* assume an integer and change later if not */ /* * look for OID in current table */ if ((temp_struct = search_snmpTargetAddrTable(vp->name, vp->namelen, name, length, exact)) == 0) { return (0); } /* * We found what we were looking for, either the next OID or the exact OID */ /* * this is where we do the value assignments for the mib results. */ switch (vp->magic) { case SNMPTARGETADDRTDOMAIN: if (temp_struct->tDomainLen <= 0) { return (0); } else { for (i = 0; i < temp_struct->tDomainLen; i++) { objid[i] = temp_struct->tDomain[i]; } *var_len = temp_struct->tDomainLen * sizeof(oid); } return (unsigned char *) objid; case SNMPTARGETADDRTADDRESS: if (temp_struct->tAddress == 0) return (0); *var_len = temp_struct->tAddressLen; return (unsigned char *) temp_struct->tAddress; case SNMPTARGETADDRTIMEOUT: long_ret = temp_struct->timeout; return (unsigned char *) &long_ret; case SNMPTARGETADDRRETRYCOUNT: long_ret = temp_struct->retryCount;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -