|
|
1.1 ! root 1: /* acl_info.c - ? */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/quipu/RCS/acl_info.c,v 7.0 89/11/23 22:16:37 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/quipu/RCS/acl_info.c,v 7.0 89/11/23 22:16:37 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: acl_info.c,v $ ! 12: * Revision 7.0 89/11/23 22:16:37 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: #include "quipu/util.h" ! 29: #include "quipu/entry.h" ! 30: ! 31: extern AV_Sequence super_user; ! 32: extern LLog * log_dsap; ! 33: extern int dn_print (); ! 34: ! 35: check_acl (who,mode,acl,node) ! 36: register DN who; ! 37: register int mode; ! 38: struct acl_info *acl; ! 39: DN node; ! 40: { ! 41: register struct acl_info *ptr; ! 42: ! 43: for (ptr=acl; ptr!= NULLACL_INFO; ptr=ptr->acl_next) { ! 44: switch (ptr->acl_selector_type) { ! 45: case ACL_ENTRY: ! 46: if ( mode <= ptr->acl_categories ) { ! 47: if (who == NULLDN) { ! 48: break; ! 49: } if (dn_cmp (who,node) == OK) ! 50: return (OK); ! 51: } ! 52: break; ! 53: case ACL_OTHER: ! 54: if ( mode <= ptr->acl_categories ) ! 55: return (OK); ! 56: break; ! 57: case ACL_PREFIX: ! 58: if ( mode <= ptr->acl_categories ) { ! 59: if ( who == NULLDN) ! 60: break; ! 61: if (check_dnseq_prefix (ptr->acl_name,who) == OK) ! 62: return (OK); ! 63: } ! 64: break; ! 65: case ACL_GROUP: ! 66: if ( mode <= ptr->acl_categories ) { ! 67: if ( who == NULLDN) { ! 68: break; ! 69: } ! 70: if (check_dnseq (ptr->acl_name,who) == OK) ! 71: return (OK); ! 72: } ! 73: break; ! 74: } ! 75: } ! 76: ! 77: /* one last try for access */ ! 78: if (manager(who)) ! 79: return (OK); ! 80: ! 81: pslog (log_dsap,LLOG_TRACE,"access denied for user ", ! 82: dn_print,(caddr_t)who); ! 83: LLOG (log_dsap,LLOG_TRACE,(" attempting mode=%d", mode)); ! 84: pslog (log_dsap,LLOG_TRACE," on entry ",dn_print,(caddr_t)node); ! 85: ! 86: return (NOTOK); ! 87: } ! 88: ! 89: ! 90: manager (dn) ! 91: DN dn; ! 92: { ! 93: AV_Sequence avs; ! 94: ! 95: for (avs=super_user; avs != NULLAV; avs=avs->avseq_next) ! 96: if ( dn_cmp (dn,(DN) avs->avseq_av.av_struct) == OK) ! 97: return (TRUE); ! 98: ! 99: return (FALSE); ! 100: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.