68
68
static struct vacm_accessEntry *accessList = NULL, *accessScanPtr = NULL;
69
69
static struct vacm_groupEntry *groupList = NULL, *groupScanPtr = NULL;
72
* Initilizes the VACM code.
74
* - adds a set of enums mapping view numbers to human readable names
79
/* views for access via get/set/send-notifications */
80
se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("read"),
82
se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("write"),
84
se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("notify"),
87
/* views for permissions when receiving notifications */
88
se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("log"),
90
se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("execute"),
92
se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("net"),
72
97
vacm_save(const char *token, const char *type)
189
214
access_entry->contextPrefix[0] + 1);
192
cptr = read_config_save_octet_string(cptr, (u_char *) access_entry->readView,
193
strlen(access_entry->readView) + 1);
196
read_config_save_octet_string(cptr, (u_char *) access_entry->writeView,
197
strlen(access_entry->writeView) + 1);
200
read_config_save_octet_string(cptr, (u_char *) access_entry->notifyView,
201
strlen(access_entry->notifyView) + 1);
217
cptr = read_config_save_octet_string(cptr, (u_char *) access_entry->views[VACM_VIEW_READ],
218
strlen(access_entry->views[VACM_VIEW_READ]) + 1);
221
read_config_save_octet_string(cptr, (u_char *) access_entry->views[VACM_VIEW_WRITE],
222
strlen(access_entry->views[VACM_VIEW_WRITE]) + 1);
225
read_config_save_octet_string(cptr, (u_char *) access_entry->views[VACM_VIEW_NOTIFY],
226
strlen(access_entry->views[VACM_VIEW_NOTIFY]) + 1);
203
228
read_config_store(type, line);
242
267
aptr->securityModel = access.securityModel;
243
268
aptr->securityLevel = access.securityLevel;
244
269
aptr->contextMatch = access.contextMatch;
245
readView = (char *) aptr->readView;
246
len = sizeof(aptr->readView);
270
readView = (char *) aptr->views[VACM_VIEW_READ];
271
len = sizeof(aptr->views[VACM_VIEW_READ]);
248
273
read_config_read_octet_string(line, (u_char **) & readView, &len);
249
writeView = (char *) aptr->writeView;
250
len = sizeof(aptr->writeView);
274
writeView = (char *) aptr->views[VACM_VIEW_WRITE];
275
len = sizeof(aptr->views[VACM_VIEW_WRITE]);
252
277
read_config_read_octet_string(line, (u_char **) & writeView, &len);
253
notifyView = (char *) aptr->notifyView;
254
len = sizeof(aptr->notifyView);
278
notifyView = (char *) aptr->views[VACM_VIEW_NOTIFY];
279
len = sizeof(aptr->views[VACM_VIEW_NOTIFY]);
256
281
read_config_read_octet_string(line, (u_char **) & notifyView,
320
345
struct vacm_viewEntry *
321
vacm_getViewEntry(const char *viewName,
346
netsnmp_view_get(struct vacm_viewEntry *head, const char *viewName,
322
347
oid * viewSubtree, size_t viewSubtreeLen, int mode)
324
349
struct vacm_viewEntry *vp, *vpret = NULL;
333
358
strcpy(view + 1, viewName);
334
for (vp = viewList; vp; vp = vp->next) {
359
for (vp = head; vp; vp = vp->next) {
335
360
if (!memcmp(view, vp->viewName, glen + 1)
336
361
&& viewSubtreeLen >= (vp->viewSubtreeLen - 1)) {
337
362
int mask = 0x80, maskpos = 0;
406
vacm_checkSubtree(const char *viewName,
407
oid * viewSubtree, size_t viewSubtreeLen)
431
netsnmp_view_subtree_check(struct vacm_viewEntry *head, const char *viewName,
432
oid * viewSubtree, size_t viewSubtreeLen)
409
434
struct vacm_viewEntry *vp, *vpShorter = NULL, *vpLonger = NULL;
410
435
char view[VACMSTRINGLEN];
415
440
return VACM_NOTINVIEW;
417
442
strcpy(view + 1, viewName);
418
for (vp = viewList; vp; vp = vp->next) {
443
for (vp = head; vp; vp = vp->next) {
419
444
if (!memcmp(view, vp->viewName, glen + 1)) {
421
446
* If the subtree defined in the view is shorter than or equal
558
583
struct vacm_viewEntry *
559
vacm_createViewEntry(const char *viewName,
584
netsnmp_view_create(struct vacm_viewEntry **head, const char *viewName,
560
585
oid * viewSubtree, size_t viewSubtreeLen)
562
587
struct vacm_viewEntry *vp, *lp, *op = NULL;
582
607
memcpy(vp->viewSubtree + 1, viewSubtree, viewSubtreeLen * sizeof(oid));
583
608
vp->viewSubtreeLen = viewSubtreeLen + 1;
587
612
cmp = memcmp(lp->viewName, vp->viewName, glen + 1);
588
613
cmp2 = snmp_oid_compare(lp->viewSubtree, lp->viewSubtreeLen,
606
vacm_destroyViewEntry(const char *viewName,
631
netsnmp_view_destroy(struct vacm_viewEntry **head, const char *viewName,
607
632
oid * viewSubtree, size_t viewSubtreeLen)
609
634
struct vacm_viewEntry *vp, *lastvp = NULL;
611
if (viewList && !strcmp(viewList->viewName + 1, viewName)
612
&& viewList->viewSubtreeLen == viewSubtreeLen
613
&& !memcmp((char *) viewList->viewSubtree, (char *) viewSubtree,
636
if ((*head) && !strcmp((*head)->viewName + 1, viewName)
637
&& (*head)->viewSubtreeLen == viewSubtreeLen
638
&& !memcmp((char *) (*head)->viewSubtree, (char *) viewSubtree,
614
639
viewSubtreeLen * sizeof(oid))) {
616
viewList = viewList->next;
641
(*head) = (*head)->next;
618
for (vp = viewList; vp; vp = vp->next) {
643
for (vp = (*head); vp; vp = vp->next) {
619
644
if (!strcmp(vp->viewName + 1, viewName)
620
645
&& vp->viewSubtreeLen == viewSubtreeLen
621
646
&& !memcmp((char *) vp->viewSubtree, (char *) viewSubtree,
954
* returns 1 if vacm has *any* configuration entries in it (regardless
955
* of weather or not there is enough to make a decision based on it),
979
* returns 1 if vacm has *any* (non-built-in) configuration entries,
980
* regardless of whether or not there is enough to make a decision,
959
984
vacm_is_configured(void)
961
if (viewList == NULL && accessList == NULL && groupList == NULL) {
986
if (accessList == NULL && groupList == NULL) {
993
* backwards compatability
995
struct vacm_viewEntry *
996
vacm_getViewEntry(const char *viewName,
997
oid * viewSubtree, size_t viewSubtreeLen, int mode)
999
return netsnmp_view_get( viewList, viewName, viewSubtree, viewSubtreeLen,
1004
vacm_checkSubtree(const char *viewName,
1005
oid * viewSubtree, size_t viewSubtreeLen)
1007
return netsnmp_view_subtree_check( viewList, viewName, viewSubtree,
1011
struct vacm_viewEntry *
1012
vacm_createViewEntry(const char *viewName,
1013
oid * viewSubtree, size_t viewSubtreeLen)
1015
return netsnmp_view_create( &viewList, viewName, viewSubtree,
1020
vacm_destroyViewEntry(const char *viewName,
1021
oid * viewSubtree, size_t viewSubtreeLen)
1023
netsnmp_view_destroy( &viewList, viewName, viewSubtree, viewSubtreeLen);
1027
vacm_destroyAllViewEntries(void)
1029
netsnmp_view_clear( &viewList );