📄 snmptargetparamsentry.c
字号:
/* Finally, we're golden, check if we should save value */ if (action == COMMIT) { temp_struct->secModel = long_ret; /* If row is new, check if its status can be updated */ if ( (temp_struct->rowStatus == SNMP_ROW_NOTREADY) && (snmpTargetParams_rowStatusCheck(temp_struct) != 0) ) temp_struct->rowStatus = SNMP_ROW_NOTINSERVICE; update_timestamp(temp_struct); } return SNMP_ERR_NOERROR;} /* write_snmpTargetParamsSecurityModel *//* Assign a value to the Security Name variable */intwrite_snmpTargetParamsSecurityName( 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 targetParamTable_struct *temp_struct; /* check incoming variable */ if (var_val_type != ASN_OCTET_STR) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityName : not ASN_OCTET_STR\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(string))) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityName : bad length\n")); return SNMP_ERR_WRONGLENGTH; } /* spec check, 0-255, this means EMPTY STRINGS ALLOWED! */ size = var_val_len; memcpy(string, var_val, var_val_len); if (size > 255 || size < 0) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityName : bad length\n")); return SNMP_ERR_WRONGLENGTH; } /* Find the struct in the linked list and check row status */ snmpTargetParamsOID[snmpTargetParamsOIDLen-1] = SNMPTARGETPARAMSSECURITYNAMECOLUMN; if ((temp_struct = search_snmpTargetParamsTable(snmpTargetParamsOID, snmpTargetParamsOIDLen, name, &name_len, 1)) == 0 ) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityName : BAD OID!\n")); return SNMP_ERR_NOSUCHNAME; } /* row exists, check if it is changeable */ if (temp_struct->storageType == SNMP_STORAGE_READONLY) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityName : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* check if row active */ if (temp_struct->rowStatus == SNMP_ROW_ACTIVE) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityName : 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) { free(temp_struct->secName); temp_struct->secName = (char *)malloc(size + 1); memcpy(temp_struct->secName, string, size); temp_struct->secName[size] = '\0'; /* If row is new, check if its status can be updated */ if ( (temp_struct->rowStatus == SNMP_ROW_NOTREADY) && (snmpTargetParams_rowStatusCheck(temp_struct) != 0) ) temp_struct->rowStatus = SNMP_ROW_NOTINSERVICE; update_timestamp(temp_struct); } return SNMP_ERR_NOERROR;} /* write_snmpTargetParamsSecurityName */intwrite_snmpTargetParamsSecurityLevel( 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 targetParamTable_struct *temp_struct; /* check incoming variable */ if (var_val_type != ASN_INTEGER) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityLevel : not ASN_INTEGER\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(long_ret))) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityLevel : bad length\n")); return SNMP_ERR_WRONGLENGTH; } long_ret = *((long *) var_val); /* spec check, no spec check, but noAuthNoPriv is 1 so... */ if (long_ret <= 0 ) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargeParamsSecurityLevel: security level is not noAuthNoPriv(1) or higher\n")); return SNMP_ERR_INCONSISTENTVALUE; } /* Find the struct in linked list and check its status */ snmpTargetParamsOID[snmpTargetParamsOIDLen-1] = SNMPTARGETPARAMSSECURITYLEVELCOLUMN; if ((temp_struct = search_snmpTargetParamsTable(snmpTargetParamsOID, snmpTargetParamsOIDLen, name, &name_len, 1)) == 0 ) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityLevel : BAD OID!\n")); return SNMP_ERR_NOSUCHNAME; } /* row exists, check if it is changeable */ if (temp_struct->storageType == SNMP_STORAGE_READONLY) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityLevel : row is read only\n")); return SNMP_ERR_NOTWRITABLE; } /* check if row active */ if (temp_struct->rowStatus == SNMP_ROW_ACTIVE) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsSecurityLevel : 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) { temp_struct->secLevel = long_ret; /* If row is new, check if its status can be updated */ if ( (temp_struct->rowStatus == SNMP_ROW_NOTREADY) && (snmpTargetParams_rowStatusCheck(temp_struct) != 0) ) temp_struct->rowStatus = SNMP_ROW_NOTINSERVICE; update_timestamp(temp_struct); } return SNMP_ERR_NOERROR;} /* write_snmpTargetParamsSecurityLevel *//* Assign a value to the Storage Type variable */intwrite_snmpTargetParamsStorageType( 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 targetParamTable_struct *temp_struct; if (var_val_type != ASN_INTEGER) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsStorageType not ASN_INTEGER\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(long_ret))) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsStorageType: 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(("snmpTargetParamsEntry", "write to snmpTargetParamsStorageType : attempted storage type not a valid")); DEBUGMSG(("snmpTargetParamsEntry", " 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 */ snmpTargetParamsOID[snmpTargetParamsOIDLen-1] = SNMPTARGETPARAMSSTORAGETYPECOLUMN; if ((temp_struct = search_snmpTargetParamsTable(snmpTargetParamsOID, snmpTargetParamsOIDLen, name, &name_len, 1)) == 0 ) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamStorageType : BAD OID\n")); return SNMP_ERR_NOSUCHNAME; } if ( (temp_struct->storageType == SNMP_STORAGE_PERMANENT) || (temp_struct->storageType == SNMP_STORAGE_READONLY) ) { DEBUGMSGTL(("snmpTargetParamsEntry", "write to snmpTargetParamsStorageType : 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_snmpTargetParamsStorageType *//* snmpTargeParams_createNewRow is called from write_snmpTargetParamsRowStatus 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 snmpTargetParams_createNewRow( oid *name, size_t name_len){ int pNameLen, i; struct targetParamTable_struct *temp_struct; /* setup a new snmpTargetParamTable structure and add it to the list */ pNameLen = name_len - snmpTargetParamsOIDLen; if (pNameLen > 0) { temp_struct = snmpTargetParamTable_create(); temp_struct->paramName = (char *)malloc(pNameLen + 1); for (i = 0; i < pNameLen; i++) { temp_struct->paramName[i] = (char)name[i+snmpTargetParamsOIDLen]; } temp_struct->paramName[pNameLen] = '\0'; temp_struct->rowStatus = SNMP_ROW_NOTREADY; update_timestamp(temp_struct); snmpTargetParamTable_addToList(temp_struct, &aPTable); return 1; } return 0;} /* snmpTargetParams_createNewRow */ /* Assign a value to the Row Status variable */intwrite_snmpTargetParamsRowStatus( 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 targetParamTable_struct *temp_struct; /*also treated as boolean for row lookup*/ if (var_val_type != ASN_INTEGER) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsRowStatus not ASN_INTEGER\n")); return SNMP_ERR_WRONGTYPE; } if (var_val_len > (size = sizeof(long_ret))) { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamsRowStatus: bad length\n")); return SNMP_ERR_WRONGLENGTH; } long_ret = *((long *) var_val); /* search for struct in linked list */ snmpTargetParamsOID[snmpTargetParamsOIDLen-1] = SNMPTARGETPARAMSROWSTATUSCOLUMN; if ((temp_struct = search_snmpTargetParamsTable(snmpTargetParamsOID, snmpTargetParamsOIDLen, 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(("snmpTargetParamsEntry","write to snmpTargetParamRowStatus : 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(("snmpTargetParamsEntry","write to snmpTargetParamRowStatus : 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(("snmpTargetParamsEntry","write to snmpTargeParamRowStatus : unable to change from NOTREADY\n")); return SNMP_ERR_INCONSISTENTVALUE; } /* we now know the row status can be set, check for two valid settings left*/ else if ( (long_ret == SNMP_ROW_ACTIVE) || (long_ret == SNMP_ROW_NOTINSERVICE) ) { onCommitDo = CHANGE; } /* not a valid setting */ else { DEBUGMSGTL(("snmpTargetParamsEntry","write to snmpTargetParamRowStatus : 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 (snmpTargetParams_createNewRow(name, name_len) == 0) { DEBUGMSGTL(("snmpTargetParamsEntry", "write to snmpTargetParamsRowStatus : ")); DEBUGMSG(("snmpTargetParamsEntry","failed new row creation, bad OID/index value \n")); return SNMP_ERR_GENERR; } break; case DESTROY: snmpTargetParamTable_remFromList(temp_struct, &aPTable); break; case CHANGE: temp_struct->rowStatus = long_ret; update_timestamp(temp_struct); break; case NOTHING: break; } } return SNMP_ERR_NOERROR;} /* write_snmpTargetParamsRowStatus */struct targetParamTable_struct *get_paramEntry(char *name) { static struct targetParamTable_struct *ptr; for(ptr = aPTable; ptr; ptr = ptr->next) { if (strcmp(ptr->paramName, name) == 0) { return ptr; } } return NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -