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); }
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; }