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

📄 vacm.c

📁 snmp up 2
💻 C
📖 第 1 页 / 共 2 页
字号:
        (struct vacm_viewEntry *) calloc(1, sizeof(struct vacm_viewEntry));    if (vp->reserved == NULL) {        free(vp);        return NULL;    }    vp->viewName[0] = glen;    strcpy(vp->viewName + 1, viewName);    vp->viewSubtree[0] = viewSubtreeLen;    memcpy(vp->viewSubtree + 1, viewSubtree, viewSubtreeLen * sizeof(oid));    vp->viewSubtreeLen = viewSubtreeLen + 1;    lp = viewList;    while (lp) {        cmp = memcmp(lp->viewName, vp->viewName, glen + 1);        cmp2 = snmp_oid_compare(lp->viewSubtree, lp->viewSubtreeLen,                                vp->viewSubtree, vp->viewSubtreeLen);        if (cmp == 0 && cmp2 > 0)            break;        if (cmp > 0)            break;        op = lp;        lp = lp->next;    }    vp->next = lp;    if (op)        op->next = vp;    else        viewList = vp;    return vp;}voidvacm_destroyViewEntry(const char *viewName,                      oid * viewSubtree, size_t viewSubtreeLen){    struct vacm_viewEntry *vp, *lastvp = NULL;    if (viewList && !strcmp(viewList->viewName + 1, viewName)        && viewList->viewSubtreeLen == viewSubtreeLen        && !memcmp((char *) viewList->viewSubtree, (char *) viewSubtree,                   viewSubtreeLen * sizeof(oid))) {        vp = viewList;        viewList = viewList->next;    } else {        for (vp = viewList; vp; vp = vp->next) {            if (!strcmp(vp->viewName + 1, viewName)                && vp->viewSubtreeLen == viewSubtreeLen                && !memcmp((char *) vp->viewSubtree, (char *) viewSubtree,                           viewSubtreeLen * sizeof(oid)))                break;            lastvp = vp;        }        if (!vp)            return;        lastvp->next = vp->next;    }    if (vp->reserved)        free(vp->reserved);    free(vp);    return;}voidvacm_destroyAllViewEntries(void){    struct vacm_viewEntry *vp;    while ((vp = viewList)) {        viewList = vp->next;        if (vp->reserved)            free(vp->reserved);        free(vp);    }}struct vacm_groupEntry *vacm_getGroupEntry(int securityModel, const char *securityName){    struct vacm_groupEntry *vp;    char            secname[VACMSTRINGLEN];    int             glen;    glen = (int) strlen(securityName);    if (glen < 0 || glen >= VACM_MAX_STRING)        return NULL;    secname[0] = glen;    strcpy(secname + 1, securityName);    for (vp = groupList; vp; vp = vp->next) {        if ((securityModel == vp->securityModel             || vp->securityModel == SNMP_SEC_MODEL_ANY)            && !memcmp(vp->securityName, secname, glen + 1))            return vp;    }    return NULL;}voidvacm_scanGroupInit(void){    groupScanPtr = groupList;}struct vacm_groupEntry *vacm_scanGroupNext(void){    struct vacm_groupEntry *returnval = groupScanPtr;    if (groupScanPtr)        groupScanPtr = groupScanPtr->next;    return returnval;}struct vacm_groupEntry *vacm_createGroupEntry(int securityModel, const char *securityName){    struct vacm_groupEntry *gp, *lg, *og;    int             cmp, glen;    glen = (int) strlen(securityName);    if (glen < 0 || glen >= VACM_MAX_STRING)        return NULL;    gp = (struct vacm_groupEntry *) calloc(1,                                           sizeof(struct vacm_groupEntry));    if (gp == NULL)        return NULL;    gp->reserved =        (struct vacm_groupEntry *) calloc(1,                                          sizeof(struct vacm_groupEntry));    if (gp->reserved == NULL) {        free(gp);        return NULL;    }    gp->securityModel = securityModel;    gp->securityName[0] = glen;    strcpy(gp->securityName + 1, securityName);    lg = groupList;    og = NULL;    while (lg) {        if (lg->securityModel > securityModel)            break;        if (lg->securityModel == securityModel &&            (cmp =             memcmp(lg->securityName, gp->securityName, glen + 1)) > 0)            break;        /*         * if (lg->securityModel == securityModel && cmp == 0) abort();          */        og = lg;        lg = lg->next;    }    gp->next = lg;    if (og == NULL)        groupList = gp;    else        og->next = gp;    return gp;}voidvacm_destroyGroupEntry(int securityModel, const char *securityName){    struct vacm_groupEntry *vp, *lastvp = NULL;    if (groupList && groupList->securityModel == securityModel        && !strcmp(groupList->securityName + 1, securityName)) {        vp = groupList;        groupList = groupList->next;    } else {        for (vp = groupList; vp; vp = vp->next) {            if (vp->securityModel == securityModel                && !strcmp(vp->securityName + 1, securityName))                break;            lastvp = vp;        }        if (!vp)            return;        lastvp->next = vp->next;    }    if (vp->reserved)        free(vp->reserved);    free(vp);    return;}voidvacm_destroyAllGroupEntries(void){    struct vacm_groupEntry *gp;    while ((gp = groupList)) {        groupList = gp->next;        if (gp->reserved)            free(gp->reserved);        free(gp);    }}struct vacm_accessEntry *vacm_getAccessEntry(const char *groupName,                    const char *contextPrefix,                    int securityModel, int securityLevel){    struct vacm_accessEntry *vp;    char            group[VACMSTRINGLEN];    char            context[VACMSTRINGLEN];    int             glen, clen;    glen = (int) strlen(groupName);    if (glen < 0 || glen >= VACM_MAX_STRING)        return NULL;    clen = (int) strlen(contextPrefix);    if (clen < 0 || clen >= VACM_MAX_STRING)        return NULL;    group[0] = glen;    strcpy(group + 1, groupName);    context[0] = clen;    strcpy(context + 1, contextPrefix);    for (vp = accessList; vp; vp = vp->next) {        if ((securityModel == vp->securityModel             || vp->securityModel == SNMP_SEC_MODEL_ANY)            && securityLevel >= vp->securityLevel            && !memcmp(vp->groupName, group, glen + 1)            &&            ((vp->contextMatch == CONTEXT_MATCH_EXACT              && clen == vp->contextPrefix[0]              && (memcmp(vp->contextPrefix, context, clen + 1) == 0))             || (vp->contextMatch == CONTEXT_MATCH_PREFIX                 && clen >= vp->contextPrefix[0]                 && (memcmp(vp->contextPrefix + 1, context + 1,                            vp->contextPrefix[0]) == 0))))            return vp;    }    return NULL;}voidvacm_scanAccessInit(void){    accessScanPtr = accessList;}struct vacm_accessEntry *vacm_scanAccessNext(void){    struct vacm_accessEntry *returnval = accessScanPtr;    if (accessScanPtr)        accessScanPtr = accessScanPtr->next;    return returnval;}struct vacm_accessEntry *vacm_createAccessEntry(const char *groupName,                       const char *contextPrefix,                       int securityModel, int securityLevel){    struct vacm_accessEntry *vp, *lp, *op = NULL;    int             cmp, glen, clen;    glen = (int) strlen(groupName);    if (glen < 0 || glen >= VACM_MAX_STRING)        return NULL;    clen = (int) strlen(contextPrefix);    if (clen < 0 || clen >= VACM_MAX_STRING)        return NULL;    vp = (struct vacm_accessEntry *) calloc(1,                                            sizeof(struct                                                   vacm_accessEntry));    if (vp == NULL)        return NULL;    vp->reserved =        (struct vacm_accessEntry *) calloc(1,                                           sizeof(struct                                                  vacm_accessEntry));    if (vp->reserved == NULL) {        free(vp);        return NULL;    }    vp->securityModel = securityModel;    vp->securityLevel = securityLevel;    vp->groupName[0] = glen;    strcpy(vp->groupName + 1, groupName);    vp->contextPrefix[0] = clen;    strcpy(vp->contextPrefix + 1, contextPrefix);    lp = accessList;    while (lp) {        cmp = memcmp(lp->groupName, vp->groupName, glen + 1);        if (cmp > 0)            break;        if (cmp < 0)            goto next;        cmp = memcmp(lp->contextPrefix, vp->contextPrefix, clen + 1);        if (cmp > 0)            break;        if (cmp < 0)            goto next;        if (lp->securityModel > securityModel)            break;        if (lp->securityModel < securityModel)            goto next;        if (lp->securityLevel > securityLevel)            break;      next:        op = lp;        lp = lp->next;    }    vp->next = lp;    if (op == NULL)        accessList = vp;    else        op->next = vp;    return vp;}voidvacm_destroyAccessEntry(const char *groupName,                        const char *contextPrefix,                        int securityModel, int securityLevel){    struct vacm_accessEntry *vp, *lastvp = NULL;    if (accessList && accessList->securityModel == securityModel        && accessList->securityModel == securityModel        && !strcmp(accessList->groupName + 1, groupName)        && !strcmp(accessList->contextPrefix + 1, contextPrefix)) {        vp = accessList;        accessList = accessList->next;    } else {        for (vp = accessList; vp; vp = vp->next) {            if (vp->securityModel == securityModel                && vp->securityLevel == securityLevel                && !strcmp(vp->groupName + 1, groupName)                && !strcmp(vp->contextPrefix + 1, contextPrefix))                break;            lastvp = vp;        }        if (!vp)            return;        lastvp->next = vp->next;    }    if (vp->reserved)        free(vp->reserved);    free(vp);    return;}voidvacm_destroyAllAccessEntries(void){    struct vacm_accessEntry *ap;    while ((ap = accessList)) {        accessList = ap->next;        if (ap->reserved)            free(ap->reserved);        free(ap);    }}intstore_vacm(int majorID, int minorID, void *serverarg, void *clientarg){    /*     * figure out our application name      */    char           *appname = (char *) clientarg;    if (appname == NULL) {        appname = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID, 					NETSNMP_DS_LIB_APPTYPE);    }    /*     * save the VACM MIB      */    vacm_save("vacm", appname);    return SNMPERR_SUCCESS;}/* * returns 1 if vacm has *any* configuration entries in it (regardless * of weather or not there is enough to make a decision based on it), * else return 0  */intvacm_is_configured(void){    if (viewList == NULL && accessList == NULL && groupList == NULL) {        return 0;    }    return 1;}

⌨️ 快捷键说明

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