📄 snmptargetaddrentry.c
字号:
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){ /* variables we may use later */ static long long_ret; size_t size; struct targetAddrTable_struct *temp_struct; if (var_val_type != ASN_INTEGER) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTimeout not ASN_INTEGER\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(long_ret))) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTimeout: bad length\n")); return SNMP_ERR_WRONGLENGTH; } long_ret = *((long *) var_val); /* spec check range, no spec check */ /* Find row in linked list and check pertinent status... */ snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRTIMEOUTCOLUMN; if ((temp_struct = search_snmpTargetAddrTable (snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0 ) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTimeout : 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 snmpTargetAddrTimeout : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* Finally, we're golden, should we save value? */ if (action == COMMIT) { temp_struct->timeout = long_ret; } return SNMP_ERR_NOERROR;} /* write_snmpTargetAddrTimeout */intwrite_snmpTargetAddrRetryCount( 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){ /* variables we may use later */ static long long_ret; size_t size; struct targetAddrTable_struct *temp_struct; if (var_val_type != ASN_INTEGER) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRetryCount not ASN_INTEGER\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(long_ret))) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRetryCount: bad length\n")); return SNMP_ERR_WRONGLENGTH; } long_ret = *((long *) var_val); /* spec check range, no spec check */ /* Find row in linked list and check pertinent status... */ snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRRETRYCOUNTCOLUMN; if ((temp_struct = search_snmpTargetAddrTable (snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0 ) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTimeout : BAD OID\n")); return SNMP_ERR_NOSUCHNAME; } if (temp_struct->storageType == SNMP_STORAGE_READONLY) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRetryCount : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* Finally, we're golden, should we save value? */ if (action == COMMIT) { temp_struct->retryCount = long_ret; } return SNMP_ERR_NOERROR;} /* write_snmpTargetAddrRetryCount */intwrite_snmpTargetAddrTagList( 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){ /* variables we may use later */ static unsigned char string[1500]; size_t size=1500; struct targetAddrTable_struct *temp_struct; if (var_val_type != ASN_OCTET_STR) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTagList not ASN_OCTET_STR\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(string))) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTagList: bad length\n")); return SNMP_ERR_WRONGLENGTH; } /* spec check, ??? */ size = var_val_len; memcpy(string, var_val, var_val_len); snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRTAGLISTCOLUMN; if ( (temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrTagList : 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 snmpTargetAddrTagList : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* Finally, we're golden, check if we should save value */ if (action == COMMIT) { SNMP_FREE(temp_struct->tagList); temp_struct->tagList = (char *)malloc(size + 1); memcpy(temp_struct->tagList, string, size); temp_struct->tagList[size] = '\0'; } return SNMP_ERR_NOERROR;} /* write_snmpTargetAddrTagList */intwrite_snmpTargetAddrParams( 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){ static unsigned char string[1500]; size_t size=1500; struct targetAddrTable_struct *temp_struct; if (var_val_type != ASN_OCTET_STR) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrParams not ASN_OCTET_STR\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(string))) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrParams: bad length\n")); return SNMP_ERR_WRONGLENGTH; } /* spec check, ??? */ size = var_val_len; memcpy(string, var_val, var_val_len); snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRPARAMSCOLUMN; if ( (temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrParams : 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 snmpTargetAddrParams : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* Finally, we're golden, check if we should save value */ if (action == COMMIT) { SNMP_FREE(temp_struct->params); temp_struct->params = (char *)malloc(size + 1); memcpy(temp_struct->params, string, size); temp_struct->params[size] = '\0'; /* 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_snmpTargetAddrParams */intwrite_snmpTargetAddrStorageType( 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){ static long long_ret; size_t size; struct targetAddrTable_struct *temp_struct; if (var_val_type != ASN_INTEGER) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrStorageType not ASN_INTEGER\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(long_ret))) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrStorageType: bad length\n")); return SNMP_ERR_WRONGLENGTH; } long_ret = *((long *) var_val); if ( (long_ret != SNMP_STORAGE_OTHER) && (long_ret != SNMP_STORAGE_VOLATILE) && (long_ret != SNMP_STORAGE_NONVOLATILE) ) { DEBUGMSGTL(("snmpTargetAddrEntry", "write to snmpTargetAddrStorageType : attempted storage type not a valid")); DEBUGMSG(("snmpTargetAddrEntry", " value of other(%d), volatile(%d), or nonvolatile(%d)\n", SNMP_STORAGE_OTHER, SNMP_STORAGE_VOLATILE, SNMP_STORAGE_NONVOLATILE)); return SNMP_ERR_INCONSISTENTVALUE; } /* Find the struct in the linked list and check status */ snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRSTORAGETYPECOLUMN; if ((temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0 ) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrStorageType : BAD OID\n")); return SNMP_ERR_NOSUCHNAME; } if ( (temp_struct->storageType == SNMP_STORAGE_PERMANENT) || (temp_struct->storageType == SNMP_STORAGE_READONLY) ) { DEBUGMSGTL(("snmpTargetAddrEntry", "write to snmpTargetAddrStorageType : row has unchangeable storage status: %d\n", temp_struct->storageType)); return SNMP_ERR_INCONSISTENTVALUE; } /* Finally, we're golden, check if we should save new value */ if (action == COMMIT) { temp_struct->storageType = long_ret; } return SNMP_ERR_NOERROR;} /* write_snmpTargetAddrStorageType *//* snmpTargeAddr_createNewRow is called from write_snmpTargetAddrRowStatus when a new row is required. It creates a new row with the index of the passed in 'name' (i.e. full index OID) and adds it to the linked list. 'name' should be the full OID of the new index. It passes back 0 if unsuccessfull.*/int snmpTargetAddr_createNewRow( oid *name, size_t name_len){ size_t newNameLen; int i; struct targetAddrTable_struct *temp_struct; /* setup a new snmpTargetAddrTable structure and add it to the list */ newNameLen = name_len - snmpTargetAddrOIDLen; if (newNameLen > 0) { temp_struct = snmpTargetAddrTable_create(); temp_struct->name = (char *)malloc(newNameLen + 1); if (temp_struct->name == NULL) { return 0; } for (i = 0; i < (int)newNameLen; i++) { temp_struct->name[i] = (char)name[i+snmpTargetAddrOIDLen]; } temp_struct->name[newNameLen] = '\0'; temp_struct->rowStatus = SNMP_ROW_NOTREADY; snmpTargetAddrTable_addToList(temp_struct, &aAddrTable); return 1; } return 0;} /* snmpTargetAddr_createNewRow */ /* Assign a value to the Row Status variable */intwrite_snmpTargetAddrRowStatus( 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){ enum commit_action_enum {NOTHING, DESTROY, CREATE, CHANGE}; enum commit_action_enum onCommitDo = NOTHING; static long long_ret; size_t size; struct targetAddrTable_struct *temp_struct; if (var_val_type != ASN_INTEGER) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRowStatus not ASN_INTEGER\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(long_ret))) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRowStatus: bad length\n")); return SNMP_ERR_WRONGLENGTH; } long_ret = *((long *) var_val); /* search for struct in linked list */ snmpTargetAddrOID[snmpTargetAddrOIDLen-1] = SNMPTARGETADDRROWSTATUSCOLUMN; if ((temp_struct = search_snmpTargetAddrTable(snmpTargetAddrOID, snmpTargetAddrOIDLen, name, &name_len, 1)) == 0) { /* row doesn't exist, check valid possibilities */ if (long_ret == SNMP_ROW_DESTROY) /* re: RFC 1903, destroying a non-existent row is noError, whatever */ onCommitDo = NOTHING; /* check if this is for a new row creation */ else if (long_ret == SNMP_ROW_CREATEANDGO || long_ret == SNMP_ROW_CREATEANDWAIT) onCommitDo = CREATE; else /* no valid sets for no row being found so... */ return SNMP_ERR_NOSUCHNAME; } else { /* row exists */ /* check if it is changeable */ if (temp_struct->storageType == SNMP_STORAGE_READONLY) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRowStatus : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* check if row is to be destroyed (note: it is ok to destroy notReady row!) */ else if (long_ret == SNMP_ROW_DESTROY) { if (temp_struct->storageType == SNMP_STORAGE_PERMANENT) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRowStatus : unable to destroy permanent row\n")); return SNMP_ERR_INCONSISTENTVALUE; } else { onCommitDo = DESTROY; } } /* check if row is new and can be changed from notready yet */ else if (temp_struct->rowStatus == SNMP_ROW_NOTREADY) { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargeAddrRowStatus : unable to change from NOTREADY\n")); return SNMP_ERR_INCONSISTENTVALUE; } /* we now know the row status can be set, check for the two valid settings left*/ else if ( (long_ret == SNMP_ROW_ACTIVE) || (long_ret == SNMP_ROW_NOTINSERVICE) ) { onCommitDo = CHANGE; } /* not a valid setting */ else { DEBUGMSGTL(("snmpTargetAddrEntry","write to snmpTargetAddrRowStatus : Bad value for set\n")); return SNMP_ERR_INCONSISTENTVALUE; } } /* if row exist */ /* if this is a commit, do expected action */ if (action == COMMIT) { switch(onCommitDo) { case CREATE : if (snmpTargetAddr_createNewRow(name, name_len) == 0) { DEBUGMSGTL(("snmpTargetAddrEntry", "write to snmpTargetAddrRowStatus : ")); DEBUGMSG(("snmpTargetAddrEntry","failed new row creation, bad OID/index value \n")); return SNMP_ERR_GENERR; } break; case DESTROY: snmpTargetAddrTable_remFromList(temp_struct, &aAddrTable); break; case CHANGE: if (long_ret != SNMP_ROW_ACTIVE && temp_struct->sess) { /* must close our session */ snmp_close(temp_struct->sess); temp_struct->sess = NULL; } temp_struct->rowStatus = long_ret; break; case NOTHING: break; } } return SNMP_ERR_NOERROR;} /* write_snmpTargetAddrRowStatus */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -