⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmptargetaddrentry.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 4 页
字号:
        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 */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){    struct targetAddrTable_struct *target = NULL;    static oid      old_oid[MAX_OID_LEN];    static size_t   old_oid_len;    if (action == RESERVE1) {        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 > (MAX_OID_LEN * sizeof(oid))) ||            (var_val_len % sizeof(oid) != 0)) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrTDomain: bad length\n"));            return SNMP_ERR_WRONGLENGTH;        }    } else if (action == RESERVE2) {        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRTDOMAINCOLUMN;        if ((target =             search_snmpTargetAddrTable(snmpTargetAddrOID,                                        snmpTargetAddrOIDLen, name,                                        &name_len, 1)) == 0) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrTDomain: BAD OID!\n"));            return SNMP_ERR_INCONSISTENTNAME;        } else {            if (target->storageType == SNMP_STORAGE_READONLY) {                DEBUGMSGTL(("snmpTargetAddrEntry",                            "write to snmpTargetAddrTDomain: row is read only\n"));                return SNMP_ERR_NOTWRITABLE;            }            if (target->rowStatus == SNMP_ROW_ACTIVE) {                DEBUGMSGTL(("snmpTargetAddrEntry",                            "write to snmpTargetAddrTDomain: not allowed in active row.\n"));                return SNMP_ERR_INCONSISTENTVALUE;            }            /*             * Finally, we're golden, save current value.               */            memcpy(old_oid, target->tDomain,                   target->tDomainLen * sizeof(oid));            old_oid_len = target->tDomainLen;            memcpy((u_char *) target->tDomain, var_val, var_val_len);            target->tDomainLen = var_val_len / sizeof(oid);            /*             * If row is new, check if its status can be updated.               */            if ((target->rowStatus == SNMP_ROW_NOTREADY) &&                (snmpTargetAddr_rowStatusCheck(target) != 0)) {                target->rowStatus = SNMP_ROW_NOTINSERVICE;            }        }    } else if (action == FREE || action == UNDO) {        /*         * Try to undo the SET here (abnormal usage of FREE clause)           */        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRTDOMAINCOLUMN;        if ((target =             search_snmpTargetAddrTable(snmpTargetAddrOID,                                        snmpTargetAddrOIDLen, name,                                        &name_len, 1)) != NULL) {            if (target->storageType != SNMP_STORAGE_READONLY                && target->rowStatus != SNMP_ROW_ACTIVE) {                memcpy((u_char *) target->tDomain, (u_char *) old_oid,                       (old_oid_len * sizeof(oid)));                target->tDomainLen = old_oid_len;                if (target->rowStatus == SNMP_ROW_NOTINSERVICE &&                    snmpTargetAddr_rowStatusCheck(target) == 0) {                    target->rowStatus = SNMP_ROW_NOTREADY;                }            }        }    }    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 *target = NULL;    static char    *old_addr = NULL;    static size_t   old_len = 0;    if (action == RESERVE1) {        if (var_val_type != ASN_OCTET_STR) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrTAddress not ASN_OCTET_STR\n"));            return SNMP_ERR_WRONGTYPE;        } else if (var_val_len < 1 || var_val_len > 255) {            return SNMP_ERR_WRONGLENGTH;        }    } else if (action == RESERVE2) {        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRTADDRESSCOLUMN;        if ((target =             search_snmpTargetAddrTable(snmpTargetAddrOID,                                        snmpTargetAddrOIDLen, name,                                        &name_len, 1)) == 0) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrTAddress: BAD OID!\n"));            return SNMP_ERR_INCONSISTENTNAME;        } else {            if (target->storageType == SNMP_STORAGE_READONLY) {                DEBUGMSGTL(("snmpTargetAddrEntry",                            "write to snmpTargetAddrTAddress: row is read only\n"));                return SNMP_ERR_NOTWRITABLE;            }            if (target->rowStatus == SNMP_ROW_ACTIVE) {                DEBUGMSGTL(("snmpTargetAddrEntry",                            "write to snmpTargetAddrTAddress: not allowed in active row.\n"));                return SNMP_ERR_INCONSISTENTVALUE;            }            old_addr = target->tAddress;            old_len = target->tAddressLen;            target->tAddress = (u_char *) malloc(var_val_len);            if (target->tAddress == NULL) {                return SNMP_ERR_RESOURCEUNAVAILABLE;            }            memcpy(target->tAddress, var_val, var_val_len);            target->tAddressLen = var_val_len;            /*             * If row is new, check if its status can be updated.               */            if ((target->rowStatus == SNMP_ROW_NOTREADY) &&                (snmpTargetAddr_rowStatusCheck(target) != 0)) {                target->rowStatus = SNMP_ROW_NOTINSERVICE;            }        }    } else if (action == COMMIT) {        SNMP_FREE(old_addr);        old_addr = NULL;    } else if (action == FREE || action == UNDO) {        /*         * Try to undo the SET here (abnormal usage of FREE clause)           */        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRTADDRESSCOLUMN;        if ((target =             search_snmpTargetAddrTable(snmpTargetAddrOID,                                        snmpTargetAddrOIDLen, name,                                        &name_len, 1)) != NULL) {            if (target->storageType != SNMP_STORAGE_READONLY                && target->rowStatus != SNMP_ROW_ACTIVE) {                SNMP_FREE(target->tAddress);                target->tAddress = old_addr;                target->tAddressLen = old_len;                if (target->rowStatus == SNMP_ROW_NOTINSERVICE &&                    snmpTargetAddr_rowStatusCheck(target) == 0) {                    target->rowStatus = SNMP_ROW_NOTREADY;                }            }        }    }    return SNMP_ERR_NOERROR;}                               /* write_snmpTargetAddrTAddress */intwrite_snmpTargetAddrTimeout(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 (action == RESERVE1) {        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);    } else if (action == RESERVE2) {        /*         * 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;        }    } else if  (action == COMMIT) {        /*         * Finally, we're golden, should we save value?          */        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRTIMEOUTCOLUMN;        if ((temp_struct =             search_snmpTargetAddrTable(snmpTargetAddrOID,                                        snmpTargetAddrOIDLen, name, &name_len,                                        1)) != 0) {            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){    static long     long_ret;    struct targetAddrTable_struct *target;    if (action == RESERVE1) {        if (var_val_type != ASN_INTEGER) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrRetryCount not ASN_INTEGER\n"));            return SNMP_ERR_WRONGTYPE;        }        if (var_val_len != sizeof(long)) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrRetryCount: bad length\n"));            return SNMP_ERR_WRONGLENGTH;        }        long_ret = *((long *) var_val);        if (long_ret < 0 || long_ret > 255) {            return SNMP_ERR_WRONGVALUE;        }    } else if (action == RESERVE2) {        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRRETRYCOUNTCOLUMN;        if ((target = search_snmpTargetAddrTable(snmpTargetAddrOID,                                                 snmpTargetAddrOIDLen,                                                 name, &name_len,                                                 1)) == NULL) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrTimeout: BAD OID\n"));            return SNMP_ERR_INCONSISTENTNAME;        } else {            if (target->storageType == SNMP_STORAGE_READONLY) {                DEBUGMSGTL(("snmpTargetAddrEntry",                            "write to snmpTargetAddrRetryCount: row is read only\n"));                return SNMP_ERR_NOTWRITABLE;            }        }    } else if (action == COMMIT) {        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRRETRYCOUNTCOLUMN;        if ((target = search_snmpTargetAddrTable(snmpTargetAddrOID,                                                 snmpTargetAddrOIDLen,                                                 name, &name_len,                                                 1)) != NULL) {            target->retryCount = long_ret;        }    }    return SNMP_ERR_NOERROR;}                               /* write_snmpTargetAddrRetryCount */static intis_delim(const char c){    return (c == 0x020 || c == 0x09 || c == 0x0d || c == 0x0b);}intsnmpTagListValid(const char *tagList, const size_t tagListLen){    size_t          i = 0;    int             inTag = 0;    for (i = 0; i < tagListLen; i++) {        if (is_delim(tagList[i]) && !inTag) {            /*             * Either a leading delimiter or two consecutive delimiters.               */            return 0;        } else if (is_delim(tagList[i]) && inTag) {            inTag = 0;        } else if (!is_delim(tagList[i]) && !inTag) {            inTag = 1;        }    }    if (!inTag) {        /*         * Trailing delimiter.           */        return 0;    }    return 1;}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){    struct targetAddrTable_struct *target = NULL;    static char    *old_tlist;    if (action == RESERVE1) {        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 > 255) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrTagList: bad length\n"));            return SNMP_ERR_WRONGLENGTH;        }        if (!snmpTagListValid(var_val, var_val_len)) {            return SNMP_ERR_WRONGVALUE;        }    } else if (action == RESERVE2) {        snmpTargetAddrOID[snmpTargetAddrOIDLen - 1] =            SNMPTARGETADDRTAGLISTCOLUMN;        if ((target =             search_snmpTargetAddrTable(snmpTargetAddrOID,                                        snmpTargetAddrOIDLen, name,                                        &name_len, 1)) == NULL) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "write to snmpTargetAddrTagList: BAD OID!\n"));            return SNMP_ERR_INCONSISTENTNAME;        } else {            if (target->storageType == SNMP_STORAGE_READONLY) {                DEBUGMSGTL(("snmpTargetAddrEntry",                            "write to snmpTargetAddrTagList: row is read only\n"));                return SNMP_ERR_NOTWRITABLE;            }            old_tlist = target->tagList;            target->tagList = (char *) malloc(var_val_len + 1);            if (target->tagList == NULL) {                return SNMP_ERR_RESOURCEUNAVAILABLE;            }            memcpy(target->tagList, var_val, var_val_len);            target->tagList[var_val_len] = '\0';        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -