📄 snmptargetaddrentry.c
字号:
} /* 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 */ int snmpTargetAddr_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 */ int snmpTargetAddr_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 */ int snmpTargetAddr_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 */ int snmpTargetAddr_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) ) { sprintf(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); DEBUGMSGTL(("snmpTargetAddrEntry", buff)); return(0); } return(1);} /* snmpTargetAddr_addStorageType */ int snmpTargetAddr_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) ) { sprintf(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); DEBUGMSGTL(("snmpTargetAddrEntry", buff)); return(0); } return(1);} /* snmpTargetAddr_addRowStatus */void snmpd_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_word(cptr, buff); if (snmpTargetAddr_addName(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_word(cptr, 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_word(cptr, buff); if (snmpTargetAddr_addTimeout(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_word(cptr, buff); if (snmpTargetAddr_addRetryCount(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_word(cptr, buff); if (snmpTargetAddr_addTagList(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_word(cptr, buff); if (snmpTargetAddr_addParams(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_word(cptr, buff); if (snmpTargetAddr_addStorageType(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } cptr = copy_word(cptr, buff); if (snmpTargetAddr_addRowStatus(newEntry, buff) == 0) { snmpTargetAddrTable_dispose(newEntry); return; } sprintf(buff, "snmp_parse_config_targetAddr, read: %s\n", newEntry->name); for(i=0;i<newEntry->tDomainLen;i++) { sprintf(&buff[strlen(buff)], ".%d", (int)newEntry->tDomain[i]); } sprintf(&buff[strlen(buff)], " %s %d %d %s %s %d %d\n", newEntry->tAddress, newEntry->timeout, newEntry->retryCount, newEntry->tagList, newEntry->params, newEntry->storageType, newEntry->rowStatus); 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 */int store_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) ) { sprintf(line, "targetAddr %s ", curr_struct->name); for(i=0; i < curr_struct->tDomainLen; i++) { sprintf(&line[strlen(line)], ".%i", (int)curr_struct->tDomain[i]); } sprintf(&line[strlen(line)], " "); read_config_save_octet_string(&line[strlen(line)], curr_struct->tAddress, curr_struct->tAddressLen); sprintf(&line[strlen(line)], " %i %i \"%s\" %s %i %i", curr_struct->timeout, curr_struct->retryCount, curr_struct->tagList, curr_struct->params, curr_struct->storageType, curr_struct->rowStatus); /* 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 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; return (unsigned char *) &long_ret; case SNMPTARGETADDRTAGLIST: if (temp_struct->tagList != NULL) { strcpy(string, temp_struct->tagList); *var_len = strlen(string); return (unsigned char *) string; } else { return NULL; } case SNMPTARGETADDRPARAMS: if (temp_struct->params == 0) return(0); strcpy(string, temp_struct->params); *var_len = strlen(string); return (unsigned char *) string; case SNMPTARGETADDRSTORAGETYPE: long_ret = temp_struct->storageType; return (unsigned char *) &long_ret; case SNMPTARGETADDRROWSTATUS: long_ret = temp_struct->rowStatus; return (unsigned char *) &long_ret; default: DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_snmpTargetAddrEntry\n", vp->magic)); } return 0;} /* var_snmpTargetAddrEntry */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -