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
netsnmp_variable_list *
nsVacmAccessTable_get_next_data_point(void **my_loop_context,
                                      void **my_data_context,
                                      netsnmp_variable_list *put_index_data,
                                      netsnmp_iterator_info *mydata)
{
    struct vacm_accessEntry *entry =
        (struct vacm_accessEntry *) *my_loop_context;
    netsnmp_variable_list *idx;
    int len;
    char *cp;

newView:
    idx = put_index_data;
    if ( nsViewIdx == VACM_MAX_VIEWS ) {
        entry = vacm_scanAccessNext();
        nsViewIdx = 0;
    }
    if (entry) {
        len = entry->groupName[0];
        snmp_set_var_value(idx, (u_char *)entry->groupName+1, len);
        idx = idx->next_variable;
        len = entry->contextPrefix[0];
        snmp_set_var_value(idx, (u_char *)entry->contextPrefix+1, len);
        idx = idx->next_variable;
        snmp_set_var_value(idx, (u_char *)&entry->securityModel,
                           sizeof(entry->securityModel));
        idx = idx->next_variable;
        snmp_set_var_value(idx, (u_char *)&entry->securityLevel,
                           sizeof(entry->securityLevel));
        /*
         * Find the next valid authType view - skipping unused entries
         */
        idx = idx->next_variable;
        for (; nsViewIdx < VACM_MAX_VIEWS; nsViewIdx++) {
            if ( entry->views[ nsViewIdx ][0] )
                break;
        }
        if ( nsViewIdx == VACM_MAX_VIEWS )
            goto newView;
        cp = se_find_label_in_slist(VACM_VIEW_ENUM_NAME, nsViewIdx++);
        DEBUGMSGTL(("nsVacm", "nextDP %s:%s (%d)\n", entry->groupName+1, cp, nsViewIdx-1));
        snmp_set_var_value(idx, (u_char *)cp, strlen(cp));
        idx = idx->next_variable;
        *my_data_context = (void *) entry;
        *my_loop_context = (void *) entry;
        return put_index_data;
    } else {
        return NULL;
    }
}
Exemplo n.º 3
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;
}