📄 netsnmphoststable.c
字号:
break; case COLUMN_NETSNMPHOSTADDRESS: { char *retval; size_t retval_len = 0; struct undoInfo *ui = NULL; int ret; /** first, get the old value */ retval = get_netSnmpHostAddress(ci->data_context, &retval_len); if (retval) { ui = SNMP_MALLOC_STRUCT(undoInfo); ui->len = retval_len; memdup((u_char **) & ui->ptr, (u_char *) retval, ui->len); } /** check the new value, possibly against the older value for a valid state transition */ ret = check_netSnmpHostAddress(request->requestvb->type, (char *) request-> requestvb->val.string, request->requestvb-> val_len, retval, retval_len); if (ret != 0) { netsnmp_set_request_error(reqinfo, request, ret); netSnmpHostsTable_free_undoInfo(ui); } else if (ui) { /** remember information for undo purposes later */ netsnmp_oid_stash_add_data(&undoStorage, suffix, suffix_len, ui); } } break; case COLUMN_NETSNMPHOSTSTORAGE: { long *retval; size_t retval_len = 0; struct undoInfo *ui = NULL; int ret; /** first, get the old value */ retval = get_netSnmpHostStorage(ci->data_context, &retval_len); if (retval) { ui = SNMP_MALLOC_STRUCT(undoInfo); ui->len = retval_len; memdup((u_char **) & ui->ptr, (u_char *) retval, ui->len); } /** check the new value, possibly against the older value for a valid state transition */ ret = check_netSnmpHostStorage(request->requestvb->type, (long *) request-> requestvb->val.string, request->requestvb-> val_len, retval, retval_len); if (ret != 0) { netsnmp_set_request_error(reqinfo, request, ret); netSnmpHostsTable_free_undoInfo(ui); } else if (ui) { /** remember information for undo purposes later */ netsnmp_oid_stash_add_data(&undoStorage, suffix, suffix_len, ui); } } break; case COLUMN_NETSNMPHOSTROWSTATUS: { long *retval; size_t retval_len = 0; struct undoInfo *ui = NULL; int ret; /** first, get the old value */ retval = get_netSnmpHostRowStatus(ci->data_context, &retval_len); if (retval) { ui = SNMP_MALLOC_STRUCT(undoInfo); ui->len = retval_len; memdup((u_char **) & ui->ptr, (u_char *) retval, ui->len); } /** check the new value, possibly against the older value for a valid state transition */ ret = check_netSnmpHostRowStatus(request->requestvb-> type, (long *) request-> requestvb->val.string, request->requestvb-> val_len, retval, retval_len); if (ret != 0) { netsnmp_set_request_error(reqinfo, request, ret); netSnmpHostsTable_free_undoInfo(ui); } else if (ui) { /** remember information for undo purposes later */ netsnmp_oid_stash_add_data(&undoStorage, suffix, suffix_len, ui); } } break; default: netsnmp_set_request_error(reqinfo, request, SNMP_ERR_NOTWRITABLE); break; } break; case MODE_SET_ACTION: /** save a variable copy */ switch (table_info->colnum) { case COLUMN_NETSNMPHOSTADDRESSTYPE: { int ret; ret = set_netSnmpHostAddressType(ci->data_context, (long *) request-> requestvb->val.string, request->requestvb-> val_len); if (ret) { netsnmp_set_request_error(reqinfo, request, ret); } } break; case COLUMN_NETSNMPHOSTADDRESS: { int ret; ret = set_netSnmpHostAddress(ci->data_context, (char *) request-> requestvb->val.string, request->requestvb-> val_len); if (ret) { netsnmp_set_request_error(reqinfo, request, ret); } } break; case COLUMN_NETSNMPHOSTSTORAGE: { int ret; ret = set_netSnmpHostStorage(ci->data_context, (long *) request-> requestvb->val.string, request->requestvb-> val_len); if (ret) { netsnmp_set_request_error(reqinfo, request, ret); } } break; case COLUMN_NETSNMPHOSTROWSTATUS: { int ret; ret = set_netSnmpHostRowStatus(ci->data_context, (long *) request-> requestvb->val.string, request->requestvb-> val_len); if (ret) { netsnmp_set_request_error(reqinfo, request, ret); } if (*request->requestvb->val.integer == RS_DESTROY) { ci->new_row = -1; } } break; } break; case MODE_SET_COMMIT: if (!ci->have_committed) { /** do this once per row only */ netSnmpHostsTable_commit_row(&ci->data_context, ci->new_row); ci->have_committed = 1; } break; case MODE_SET_UNDO: /** save a variable copy */ switch (table_info->colnum) { case COLUMN_NETSNMPHOSTADDRESSTYPE: { int retval; struct undoInfo *ui; ui = netsnmp_oid_stash_get_data(undoStorage, suffix, suffix_len); retval = set_netSnmpHostAddressType(ci->data_context, ui->ptr, ui->len); if (retval) { netsnmp_set_request_error(reqinfo, request, SNMP_ERR_UNDOFAILED); } } break; case COLUMN_NETSNMPHOSTADDRESS: { int retval; struct undoInfo *ui; ui = netsnmp_oid_stash_get_data(undoStorage, suffix, suffix_len); retval = set_netSnmpHostAddress(ci->data_context, ui->ptr, ui->len); if (retval) { netsnmp_set_request_error(reqinfo, request, SNMP_ERR_UNDOFAILED); } } break; case COLUMN_NETSNMPHOSTSTORAGE: { int retval; struct undoInfo *ui; ui = netsnmp_oid_stash_get_data(undoStorage, suffix, suffix_len); retval = set_netSnmpHostStorage(ci->data_context, ui->ptr, ui->len); if (retval) { netsnmp_set_request_error(reqinfo, request, SNMP_ERR_UNDOFAILED); } } break; case COLUMN_NETSNMPHOSTROWSTATUS: { int retval; struct undoInfo *ui; ui = netsnmp_oid_stash_get_data(undoStorage, suffix, suffix_len); retval = set_netSnmpHostRowStatus(ci->data_context, ui->ptr, ui->len); if (retval) { netsnmp_set_request_error(reqinfo, request, SNMP_ERR_UNDOFAILED); } } break; } break; case MODE_SET_FREE: break; default: snmp_log(LOG_ERR, "problem encountered in netSnmpHostsTable_handler: unsupported mode\n"); } } /** clean up after all requset processing has ended */ switch (reqinfo->mode) { case MODE_SET_UNDO: case MODE_SET_FREE: case MODE_SET_COMMIT: /** clear out the undo cache */ netsnmp_oid_stash_free(&undoStorage, netSnmpHostsTable_free_undoInfo); netsnmp_oid_stash_free(&commitStorage, netsnmp_oid_stash_no_free); } return SNMP_ERR_NOERROR;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -