~ubuntu-branches/ubuntu/trusty/net-snmp/trusty

« back to all changes in this revision

Viewing changes to snmplib/vacm.c

  • Committer: Bazaar Package Importer
  • Author(s): Steve Kowalik
  • Date: 2007-05-10 22:20:23 UTC
  • mto: (1.4.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 11.
  • Revision ID: james.westby@ubuntu.com-20070510222023-3fr07xb9i17xvq32
Tags: upstream-5.3.1
ImportĀ upstreamĀ versionĀ 5.3.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
68
68
static struct vacm_accessEntry *accessList = NULL, *accessScanPtr = NULL;
69
69
static struct vacm_groupEntry *groupList = NULL, *groupScanPtr = NULL;
70
70
 
 
71
/**
 
72
 * Initilizes the VACM code.
 
73
 * Specifically:
 
74
 *  - adds a set of enums mapping view numbers to human readable names
 
75
 */
 
76
void
 
77
init_vacm(void)
 
78
{
 
79
    /* views for access via get/set/send-notifications */
 
80
    se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("read"),
 
81
                         VACM_VIEW_READ);
 
82
    se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("write"),
 
83
                         VACM_VIEW_WRITE);
 
84
    se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("notify"),
 
85
                         VACM_VIEW_NOTIFY);
 
86
 
 
87
    /* views for permissions when receiving notifications */
 
88
    se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("log"),
 
89
                         VACM_VIEW_LOG);
 
90
    se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("execute"),
 
91
                         VACM_VIEW_EXECUTE);
 
92
    se_add_pair_to_slist(VACM_VIEW_ENUM_NAME, strdup("net"),
 
93
                         VACM_VIEW_NET);
 
94
}
 
95
 
71
96
void
72
97
vacm_save(const char *token, const char *type)
73
98
{
189
214
                                      access_entry->contextPrefix[0] + 1);
190
215
 
191
216
    *cptr++ = ' ';
192
 
    cptr = read_config_save_octet_string(cptr, (u_char *) access_entry->readView,
193
 
                                         strlen(access_entry->readView) + 1);
194
 
    *cptr++ = ' ';
195
 
    cptr =
196
 
        read_config_save_octet_string(cptr, (u_char *) access_entry->writeView,
197
 
                                      strlen(access_entry->writeView) + 1);
198
 
    *cptr++ = ' ';
199
 
    cptr =
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);
 
219
    *cptr++ = ' ';
 
220
    cptr =
 
221
        read_config_save_octet_string(cptr, (u_char *) access_entry->views[VACM_VIEW_WRITE],
 
222
                                      strlen(access_entry->views[VACM_VIEW_WRITE]) + 1);
 
223
    *cptr++ = ' ';
 
224
    cptr =
 
225
        read_config_save_octet_string(cptr, (u_char *) access_entry->views[VACM_VIEW_NOTIFY],
 
226
                                      strlen(access_entry->views[VACM_VIEW_NOTIFY]) + 1);
202
227
 
203
228
    read_config_store(type, line);
204
229
}
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]);
247
272
    line =
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]);
251
276
    line =
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]);
255
280
    line =
256
281
        read_config_read_octet_string(line, (u_char **) & notifyView,
257
282
                                      &len);
318
343
}
319
344
 
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)
323
348
{
324
349
    struct vacm_viewEntry *vp, *vpret = NULL;
331
356
        return NULL;
332
357
    view[0] = glen;
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;
403
428
 *                         portions.
404
429
 */
405
430
int
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)
408
433
{
409
434
    struct vacm_viewEntry *vp, *vpShorter = NULL, *vpLonger = NULL;
410
435
    char            view[VACMSTRINGLEN];
415
440
        return VACM_NOTINVIEW;
416
441
    view[0] = glen;
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)) {
420
445
            /*
421
446
             * If the subtree defined in the view is shorter than or equal
556
581
}
557
582
 
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)
561
586
{
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;
584
609
 
585
 
    lp = viewList;
 
610
    lp = *head;
586
611
    while (lp) {
587
612
        cmp = memcmp(lp->viewName, vp->viewName, glen + 1);
588
613
        cmp2 = snmp_oid_compare(lp->viewSubtree, lp->viewSubtreeLen,
598
623
    if (op)
599
624
        op->next = vp;
600
625
    else
601
 
        viewList = vp;
 
626
        *head = vp;
602
627
    return vp;
603
628
}
604
629
 
605
630
void
606
 
vacm_destroyViewEntry(const char *viewName,
 
631
netsnmp_view_destroy(struct vacm_viewEntry **head, const char *viewName,
607
632
                      oid * viewSubtree, size_t viewSubtreeLen)
608
633
{
609
634
    struct vacm_viewEntry *vp, *lastvp = NULL;
610
635
 
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))) {
615
 
        vp = viewList;
616
 
        viewList = viewList->next;
 
640
        vp = (*head);
 
641
        (*head) = (*head)->next;
617
642
    } else {
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,
634
659
}
635
660
 
636
661
void
637
 
vacm_destroyAllViewEntries(void)
 
662
netsnmp_view_clear(struct vacm_viewEntry **head)
638
663
{
639
664
    struct vacm_viewEntry *vp;
640
 
    while ((vp = viewList)) {
641
 
        viewList = vp->next;
 
665
    while ((vp = (*head))) {
 
666
        (*head) = vp->next;
642
667
        if (vp->reserved)
643
668
            free(vp->reserved);
644
669
        free(vp);
951
976
}
952
977
 
953
978
/*
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,
956
981
 * else return 0 
957
982
 */
958
983
int
959
984
vacm_is_configured(void)
960
985
{
961
 
    if (viewList == NULL && accessList == NULL && groupList == NULL) {
 
986
    if (accessList == NULL && groupList == NULL) {
962
987
        return 0;
963
988
    }
964
989
    return 1;
965
990
}
 
991
 
 
992
/*
 
993
 * backwards compatability
 
994
 */
 
995
struct vacm_viewEntry *
 
996
vacm_getViewEntry(const char *viewName,
 
997
                  oid * viewSubtree, size_t viewSubtreeLen, int mode)
 
998
{
 
999
    return netsnmp_view_get( viewList, viewName, viewSubtree, viewSubtreeLen,
 
1000
                             mode);
 
1001
}
 
1002
 
 
1003
int
 
1004
vacm_checkSubtree(const char *viewName,
 
1005
                  oid * viewSubtree, size_t viewSubtreeLen)
 
1006
{
 
1007
    return netsnmp_view_subtree_check( viewList, viewName, viewSubtree,
 
1008
                                       viewSubtreeLen);
 
1009
}
 
1010
 
 
1011
struct vacm_viewEntry *
 
1012
vacm_createViewEntry(const char *viewName,
 
1013
                     oid * viewSubtree, size_t viewSubtreeLen)
 
1014
{
 
1015
    return netsnmp_view_create( &viewList, viewName, viewSubtree,
 
1016
                                viewSubtreeLen);
 
1017
}
 
1018
 
 
1019
void
 
1020
vacm_destroyViewEntry(const char *viewName,
 
1021
                      oid * viewSubtree, size_t viewSubtreeLen)
 
1022
{
 
1023
    netsnmp_view_destroy( &viewList, viewName, viewSubtree, viewSubtreeLen);
 
1024
}
 
1025
 
 
1026
void
 
1027
vacm_destroyAllViewEntries(void)
 
1028
{
 
1029
    netsnmp_view_clear( &viewList );
 
1030
}
 
1031