Exemplo n.º 1
0
netsnmp_variable_list *
nsVacmAccessTable_get_first_data_point(void **my_loop_context,
                                       void **my_data_context,
                                       netsnmp_variable_list *put_index_data,
                                       netsnmp_iterator_info *mydata)
{
    vacm_scanAccessInit();
    *my_loop_context = vacm_scanAccessNext();
    nsViewIdx = 0;
    return nsVacmAccessTable_get_next_data_point(my_loop_context,
                                                 my_data_context,
                                                 put_index_data, mydata);
}
Exemplo n.º 2
0
u_char *var_vacm_access(struct variable *vp,
                        oid *name,
                        int *length,
                        int exact,
                        int *var_len,
                        WriteMethod **write_method)
{
    struct vacm_accessEntry *gp;
    int secmodel;
    int seclevel;
    char groupName[32];
    char contextPrefix[32];
    oid *op;
    int len;
    char *cp;
    int cmp;

    write_method = NULL;
    if (memcmp(name, vp->name, sizeof(oid)*vp->namelen) != 0) {
        memcpy(name, vp->name, sizeof(oid)*vp->namelen);
        *length = vp->namelen;
    }
    if (exact) {
        if (*length < 15) return NULL;

        op = name+11;
        len = *op++;
        cp = groupName;
        while (len-- > 0) {
            *cp++ = *op++;
        }
        *cp = 0;
        len = *op++;
        cp = contextPrefix;
        while (len-- > 0) {
            *cp++ = *op++;
        }
        *cp = 0;
        secmodel = *op++;
        seclevel = *op++;
        if (op != name + *length) {
            return NULL;
        }

        gp = vacm_getAccessEntry(groupName, contextPrefix, secmodel, seclevel);
    }
    else {
        secmodel = seclevel = 0;
        groupName[0] = 0;
        contextPrefix[0] = 0;
        op = name+11;
        if (op >= name + *length) {
        }
        else {
            len = *op;
            cp = groupName;
            while (len-- >= 0) {
                *cp++ = *op++;
            }
            *cp = 0;
        }
        if (op >= name + *length) {
        }
        else {
            len = *op;
            cp = contextPrefix;
            while (len-- >= 0) {
                *cp++ = *op++;
            }
            *cp = 0;
        }
        if (op >= name + *length) {
        }
        else {
            secmodel = *op++;
        }
        if (op >= name + *length) {
        }
        else {
            seclevel = *op++;
        }
        vacm_scanAccessInit();
        while ((gp = vacm_scanAccessNext()) != NULL) {
            cmp = strcmp(gp->groupName, groupName);
            if (cmp > 0) break;
            if (cmp < 0) continue;
            cmp = strcmp(gp->contextPrefix, contextPrefix);
            if (cmp > 0) break;
            if (cmp < 0) continue;
            if (gp->securityModel > secmodel) break;
            if (gp->securityModel < secmodel) continue;
            if (gp->securityLevel > seclevel) break;
        }
        if (gp) {
            *length = 11;
            cp = gp->groupName;
            do {
                name[(*length)++] = *cp++;
            } while (*cp);
            cp = gp->contextPrefix;
            do {
                name[(*length)++] = *cp++;
            } while (*cp);
            name[(*length)++] = gp->securityModel;
            name[(*length)++] = gp->securityLevel;
        }
    }

    if (!gp) return NULL;

    *var_len =sizeof(long_return);
    switch (vp->magic) {
    case ACCESSMATCH:
        long_return = gp->contextMatch;
        return (u_char *)&long_return;
    case ACCESSLEVEL:
        long_return = gp->securityLevel;
        return (u_char *)&long_return;
    case ACCESSMODEL:
        long_return = gp->securityModel;
        return (u_char *)&long_return;
    case ACCESSPREFIX:
        *var_len = *gp->contextPrefix;
        return (u_char *)&gp->contextPrefix[1];
    case ACCESSREAD:
        *var_len = strlen(gp->readView);
        return (u_char *)gp->readView;
    case ACCESSWRITE:
        *var_len = strlen(gp->writeView);
        return (u_char *)gp->writeView;
    case ACCESSNOTIFY:
        *var_len = strlen(gp->notifyView);
        return (u_char *)gp->notifyView;
    case ACCESSSTORAGE:
        long_return = gp->storageType;
        return (u_char *)&long_return;
    case ACCESSSTATUS:
        long_return = gp->status;
        return (u_char *)&long_return;
    }
    return NULL;
}