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

📄 snmptargetaddrentry.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 4 页
字号:
    return (1);}                               /* snmpTargetAddr_addTAddress */intsnmpTargetAddr_addTimeout(struct targetAddrTable_struct *entry, char *cptr){    if (cptr == 0) {        DEBUGMSGTL(("snmpTargetAddrEntry",                    "ERROR snmpTargetParamsEntry: no Timeout in config string\n"));        return (0);    } else if (!(isdigit(*cptr))) {        DEBUGMSGTL(("snmpTargetAddrEntry",                    "ERROR snmpTargeParamsEntry: Timeout is not a digit in config string\n"));        return (0);    }    /*     * check Timeout >= 0      */    else if ((entry->timeout = (int) strtol(cptr, (char **) NULL, 0)) < 0) {        DEBUGMSGTL(("snmpTargetAddrEntry",                    "ERROR snmpTargeParamsEntry: Timeout out of range in config string\n"));        return (0);    }    return (1);}                               /* snmpTargetAddr_addTimeout  */intsnmpTargetAddr_addRetryCount(struct targetAddrTable_struct *entry,                             char *cptr){    if (cptr == 0) {        DEBUGMSGTL(("snmpTargetAddrEntry",                    "ERROR snmpTargetParamsEntry: no Retry Count in config string\n"));        return (0);    } else if (!(isdigit(*cptr))) {        DEBUGMSGTL(("snmpTargetAddrEntry",                    "ERROR snmpTargeParamsEntry: Retry Count is not a digit in config string\n"));        return (0);    }    /*     * spec check 0..255      */    else {        entry->retryCount = (int) strtol(cptr, (char **) NULL, 0);        if ((entry->retryCount < 0) || (entry->retryCount > 255)) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "ERROR snmpTargeParamsEntry: Retry Count is out of range in config string\n"));            return (0);        }    }    return (1);}                               /* snmpTargetAddr_addRetryCount  */intsnmpTargetAddr_addTagList(struct targetAddrTable_struct *entry, char *cptr){    size_t          len;    if (cptr == 0) {        DEBUGMSGTL(("snmpTargetAddrEntry",                    "ERROR snmpTargetAddrEntry: no tag list in config string\n"));        return (0);    } else {        len = strlen(cptr);        /*         * spec check for string 0-255          */        if (len < 0 || len > 255) {            DEBUGMSGTL(("snmpTargetAddrEntry",                        "ERROR snmpTargetAddrEntry: tag list out of range in config string\n"));            return (0);        }        SNMP_FREE(entry->tagList);        entry->tagList = (char *) malloc(len + 1);        strncpy(entry->tagList, cptr, len);        entry->tagList[len] = '\0';    }    return (1);}                               /* snmpTargetAddr_addTagList */intsnmpTargetAddr_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 */intsnmpTargetAddr_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)) {        snprintf(buff, sizeof(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);        buff[ sizeof(buff)-1 ] = 0;        DEBUGMSGTL(("snmpTargetAddrEntry", buff));        return (0);    }    return (1);}                               /* snmpTargetAddr_addStorageType */intsnmpTargetAddr_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)) {        snprintf(buff, sizeof(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);        buff[ sizeof(buff)-1 ] = 0;        DEBUGMSGTL(("snmpTargetAddrEntry", buff));        return (0);    }    return (1);}                               /* snmpTargetAddr_addRowStatus  */voidsnmpd_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_nword(cptr, buff, sizeof(buff));    if (snmpTargetAddr_addName(newEntry, buff) == 0) {        snmpTargetAddrTable_dispose(newEntry);        return;    }    cptr = copy_nword(cptr, buff, sizeof(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_nword(cptr, buff, sizeof(buff));    if (snmpTargetAddr_addTimeout(newEntry, buff) == 0) {        snmpTargetAddrTable_dispose(newEntry);        return;    }    cptr = copy_nword(cptr, buff, sizeof(buff));    if (snmpTargetAddr_addRetryCount(newEntry, buff) == 0) {        snmpTargetAddrTable_dispose(newEntry);        return;    }    cptr = copy_nword(cptr, buff, sizeof(buff));    if (snmpTargetAddr_addTagList(newEntry, buff) == 0) {        snmpTargetAddrTable_dispose(newEntry);        return;    }    cptr = copy_nword(cptr, buff, sizeof(buff));    if (snmpTargetAddr_addParams(newEntry, buff) == 0) {        snmpTargetAddrTable_dispose(newEntry);        return;    }    cptr = copy_nword(cptr, buff, sizeof(buff));    if (snmpTargetAddr_addStorageType(newEntry, buff) == 0) {        snmpTargetAddrTable_dispose(newEntry);        return;    }    cptr = copy_nword(cptr, buff, sizeof(buff));    if (snmpTargetAddr_addRowStatus(newEntry, buff) == 0) {        snmpTargetAddrTable_dispose(newEntry);        return;    }    snprintf(buff, sizeof(buff), "snmp_parse_config_targetAddr, read: %s\n",            newEntry->name);    buff[ sizeof(buff)-1 ] = 0;    for (i = 0; i < newEntry->tDomainLen; i++) {        snprintf(&buff[strlen(buff)], sizeof(buff)-strlen(buff)-1,                 ".%d", (int) newEntry->tDomain[i]);        buff[ sizeof(buff)-1 ] = 0;    }    snprintf(&buff[strlen(buff)], sizeof(buff)-strlen(buff)-1,            " %s %d %d %s %s %d %d\n",            newEntry->tAddress, newEntry->timeout, newEntry->retryCount,            newEntry->tagList, newEntry->params, newEntry->storageType,            newEntry->rowStatus);    buff[ sizeof(buff)-1 ] = 0;    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   */intstore_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)) {                snprintf(line, sizeof(line),                        "targetAddr %s ", curr_struct->name);                line[ sizeof(line)-1 ] = 0;                for (i = 0; i < curr_struct->tDomainLen; i++) {                    snprintf(&line[strlen(line)],                            sizeof(line)-strlen(line)-1, ".%i",                            (int) curr_struct->tDomain[i]);                    line[ sizeof(line)-1 ] = 0;                }                if ( strlen(line)+2 < sizeof(line) ) {                    line[ strlen(line)+1 ] = 0;                    line[ strlen(line)   ] = ' ';                }                read_config_save_octet_string(&line[strlen(line)],                                              curr_struct->tAddress,                                              curr_struct->tAddressLen);                snprintf(&line[strlen(line)], sizeof(line)-strlen(line)-1,                        " %i %i \"%s\" %s %i %i",                        curr_struct->timeout,                        curr_struct->retryCount, curr_struct->tagList,                        curr_struct->params, curr_struct->storageType,                        curr_struct->rowStatus);                line[ sizeof(line)-1 ] = 0;                /*                 * 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;    /*     * Set up write_method first, in case we return NULL before getting to the     * switch (vp->magic) below.  In some of these cases, we still want to call     * the appropriate write_method, if only to have it return the appropriate     * error.       */    switch (vp->magic) {    case SNMPTARGETADDRTDOMAIN:        *write_method = write_snmpTargetAddrTDomain;        break;    case SNMPTARGETADDRTADDRESS:        *write_method = write_snmpTargetAddrTAddress;        break;    case SNMPTARGETADDRRETRYCOUNT:        *write_method = write_snmpTargetAddrRetryCount;        break;    case SNMPTARGETADDRTIMEOUT:        *write_method = write_snmpTargetAddrTimeout;        break;    case SNMPTARGETADDRTAGLIST:        *write_method = write_snmpTargetAddrTagList;        break;    case SNMPTARGETADDRPARAMS:        *write_method = write_snmpTargetAddrParams;        break;    case SNMPTARGETADDRSTORAGETYPE:        *write_method = write_snmpTargetAddrStorageType;        break;    case SNMPTARGETADDRROWSTATUS:        *write_method = write_snmpTargetAddrRowStatus;        break;    default:        *write_method = NULL;    }    *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) {        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:        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:        if (temp_struct->tAddress == 0)            return (0);        *var_len = temp_struct->tAddressLen;        return (unsigned char *) temp_struct->tAddress;    case SNMPTARGETADDRTIMEOUT:        long_ret = temp_struct->timeout;        return (unsigned char *) &long_ret;    case SNMPTARGETADDRRETRYCOUNT:        long_ret = temp_struct->retryCount;

⌨️ 快捷键说明

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