📄 snmptargetaddrentry.c
字号:
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; *write_method = 0; /* assume it isnt writable for the time being */ *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 ) { /* for creation of new rows */ if (vp->magic == SNMPTARGETADDRROWSTATUS) { *write_method = write_snmpTargetAddrRowStatus; } 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: *write_method = write_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: *write_method = write_snmpTargetAddrTAddress; if (temp_struct->tAddress == 0) return(0); *var_len = temp_struct->tAddressLen; return (unsigned char *) temp_struct->tAddress; case SNMPTARGETADDRTIMEOUT: *write_method = write_snmpTargetAddrTimeout; long_ret = temp_struct->timeout; return (unsigned char *) &long_ret; case SNMPTARGETADDRRETRYCOUNT: *write_method = write_snmpTargetAddrRetryCount; long_ret = temp_struct->retryCount; return (unsigned char *) &long_ret; case SNMPTARGETADDRTAGLIST: *write_method = write_snmpTargetAddrTagList; strcpy(string, temp_struct->tagList); *var_len = strlen(string); return (unsigned char *) string; case SNMPTARGETADDRPARAMS: *write_method = write_snmpTargetAddrParams; if (temp_struct->params == 0) return(0); strcpy(string, temp_struct->params); *var_len = strlen(string); return (unsigned char *) string; case SNMPTARGETADDRSTORAGETYPE: *write_method = write_snmpTargetAddrStorageType; long_ret = temp_struct->storageType; return (unsigned char *) &long_ret; case SNMPTARGETADDRROWSTATUS: *write_method = write_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 */intwrite_snmpTargetAddrTDomain( int action, u_char *var_val, u_char var_val_type, size_t var_val_len, u_char *statP, oid *name, size_t name_len){ size_t objSize=128; int i; struct targetAddrTable_struct *temp_struct; static oid objid[MAX_OID_LEN]; if (var_val_type != ASN_OBJECT_ID) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain not ASN_OBJECT_ID\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > 128) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain: bad length\n")); return SNMP_ERR_WRONGLENGTH; } /* spec check, ??? */ objSize = var_val_len/sizeof(oid); memcpy(objid, var_val, var_val_len); snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRTDOMAINCOLUMN; if ( (temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain : BAD OID!\n")); return SNMP_ERR_NOSUCHNAME; } /* row exists, check if it is changeable */ if (temp_struct->storageType == SNMP_STORAGE_READONLY) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomain : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* check if row active */ if (temp_struct->rowStatus == SNMP_ROW_ACTIVE) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTDomains : This change not allowed in active row.\n")); return SNMP_ERR_INCONSISTENTVALUE; } /* Finally, we're golden, check if we should save value */ if (action == COMMIT) { for (i=0;i < (int)objSize; i++) temp_struct->tDomain[i] = objid[i]; temp_struct->tDomainLen = objSize; /* If row is new, check if its status can be updated */ if ( (temp_struct->rowStatus == SNMP_ROW_NOTREADY) && (snmpTargetAddr_rowStatusCheck(temp_struct) != 0) ) temp_struct->rowStatus = SNMP_ROW_NOTINSERVICE; } return SNMP_ERR_NOERROR;} /* write_snmpTargetAddrTDomain */intwrite_snmpTargetAddrTAddress( int action, u_char *var_val, u_char var_val_type, size_t var_val_len, u_char *statP, oid *name, size_t name_len){ struct targetAddrTable_struct *temp_struct; if (var_val_type != ASN_OCTET_STR) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress not ASN_OCTET_STR\n")); return SNMP_ERR_WRONGTYPE; } snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRTADDRESSCOLUMN; if ( (temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress : BAD OID!\n")); return SNMP_ERR_NOSUCHNAME; } /* row exists, check if it is changeable */ if (temp_struct->storageType == SNMP_STORAGE_READONLY) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* check if row active */ if (temp_struct->rowStatus == SNMP_ROW_ACTIVE) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTAddress : This change not allowed in active row.\n")); return SNMP_ERR_INCONSISTENTVALUE; } /* Finally, we're golden, check if we should save value */ if (action == COMMIT) { SNMP_FREE(temp_struct->tAddress); temp_struct->tAddress = (u_char *)malloc(var_val_len); temp_struct->tAddressLen = var_val_len; memcpy(temp_struct->tAddress, var_val, var_val_len); /* If row is new, check if its status can be updated */ if ( (temp_struct->rowStatus == SNMP_ROW_NOTREADY) && (snmpTargetAddr_rowStatusCheck(temp_struct) != 0) ) temp_struct->rowStatus = SNMP_ROW_NOTINSERVICE; } return SNMP_ERR_NOERROR;} /* write_snmpTargetAddrTAddress */intwrite_snmpTargetAddrTimeout(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -