|
|
1.1 ! root 1: /* eis_select.c - */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/quipu/RCS/eis_select.c,v 7.1 90/07/09 14:46:08 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/quipu/RCS/eis_select.c,v 7.1 90/07/09 14:46:08 mrose Exp $ ! 9: * ! 10: * ! 11: * $Log: eis_select.c,v $ ! 12: * Revision 7.1 90/07/09 14:46:08 mrose ! 13: * sync ! 14: * ! 15: * Revision 7.0 89/11/23 22:17:29 mrose ! 16: * Release 6.0 ! 17: * ! 18: */ ! 19: ! 20: /* ! 21: * NOTICE ! 22: * ! 23: * Acquisition, use, and distribution of this module and related ! 24: * materials are subject to the restrictions of a license agreement. ! 25: * Consult the Preface in the User's Manual for the full terms of ! 26: * this agreement. ! 27: * ! 28: */ ! 29: ! 30: ! 31: #include "quipu/util.h" ! 32: #include "quipu/commonarg.h" ! 33: #include "quipu/entry.h" ! 34: ! 35: extern LLog * log_dsap; ! 36: ! 37: #define EIS_SELECT eis.eis_select ! 38: ! 39: static Attr_Sequence cpy_as_comp_type (); ! 40: static Attr_Sequence cpy_as_comp (); ! 41: ! 42: Attr_Sequence eis_select (eis,entryptr,dn, qctx) ! 43: EntryInfoSelection eis; ! 44: Entry entryptr; ! 45: DN dn; ! 46: char qctx; /* If TRUE - it is a Quipu context association */ ! 47: /* So treat as if "-allattributes -typesandvalves" */ ! 48: /* Plus - make sure the ACL is sent */ ! 49: { ! 50: Attr_Sequence result = NULLATTR; ! 51: register Attr_Sequence trail; ! 52: register Attr_Sequence temp; ! 53: Attr_Sequence temp2; ! 54: register Attr_Sequence eptr; ! 55: DN node; ! 56: extern AttributeType at_acl; ! 57: ! 58: DLOG (log_dsap,LLOG_TRACE,("eis_select")); ! 59: ! 60: node = get_copy_dn (entryptr); ! 61: ! 62: if (eis.eis_allattributes || qctx) { ! 63: for(temp=entryptr->e_attributes; temp != NULLATTR; temp=temp->attr_link) { ! 64: ! 65: if ( ! (qctx && (AttrT_cmp (at_acl,temp->attr_type) == 0))) ! 66: if ( (temp->attr_acl != NULLACL_INFO) && ! 67: (check_acl(dn,ACL_READ,temp->attr_acl,node ) != OK )) ! 68: continue; ! 69: ! 70: if ((eis.eis_infotypes == EIS_ATTRIBUTETYPESONLY) && !qctx) ! 71: temp2 = cpy_as_comp_type (temp); ! 72: else ! 73: temp2 = cpy_as_comp (temp); ! 74: ! 75: if (result == NULLATTR) { ! 76: result = temp2; ! 77: trail = result; ! 78: } else { ! 79: trail->attr_link = temp2; ! 80: trail = temp2; ! 81: } ! 82: } ! 83: } else { ! 84: for(eptr=EIS_SELECT; eptr != NULLATTR; eptr=eptr->attr_link) { ! 85: ! 86: if ((temp = as_find_type (entryptr->e_attributes,eptr->attr_type)) == NULLATTR) ! 87: continue; ! 88: ! 89: if ( (temp->attr_acl != NULLACL_INFO)&& (check_acl(dn,ACL_READ,temp->attr_acl,node ) != OK )) ! 90: continue; ! 91: ! 92: if (eis.eis_infotypes == EIS_ATTRIBUTETYPESONLY) ! 93: temp2 = cpy_as_comp_type (temp); ! 94: else ! 95: temp2 = cpy_as_comp (temp); ! 96: ! 97: if (result == NULLATTR) { ! 98: result = temp2; ! 99: trail = result; ! 100: } else { ! 101: trail->attr_link = temp2; ! 102: trail = temp2; ! 103: } ! 104: } ! 105: } ! 106: dn_free (node); ! 107: ! 108: return (result); ! 109: } ! 110: ! 111: static Attr_Sequence cpy_as_comp (as) ! 112: Attr_Sequence as; ! 113: { ! 114: Attr_Sequence ptr; ! 115: ! 116: if (as==NULLATTR) { ! 117: LLOG (log_dsap,LLOG_EXCEPTIONS,("copy of null as")); ! 118: return (NULLATTR); ! 119: } ! 120: ptr = as_comp_alloc(); ! 121: ptr->attr_type = AttrT_cpy (as->attr_type); ! 122: ptr->attr_value = avs_cpy (as->attr_value); ! 123: ptr->attr_link = NULLATTR; ! 124: ptr->attr_acl = NULLACL_INFO; ! 125: ! 126: return (ptr); ! 127: } ! 128: ! 129: ! 130: static Attr_Sequence cpy_as_comp_type (as) ! 131: Attr_Sequence as; ! 132: { ! 133: Attr_Sequence ptr; ! 134: ! 135: if (as==NULLATTR) { ! 136: LLOG (log_dsap,LLOG_EXCEPTIONS,("copy of null as")); ! 137: return (NULLATTR); ! 138: } ! 139: ptr = as_comp_alloc(); ! 140: ptr->attr_type = AttrT_cpy (as->attr_type); ! 141: ptr->attr_value = NULLAV; ! 142: ptr->attr_link = NULLATTR; ! 143: ptr->attr_acl = NULLACL_INFO; ! 144: return (ptr); ! 145: } ! 146: ! 147: ! 148: ! 149: eis_check (eis,entryptr,dn) ! 150: EntryInfoSelection eis; ! 151: Entry entryptr; ! 152: DN dn; ! 153: { ! 154: register Attr_Sequence temp; ! 155: register Attr_Sequence as; ! 156: DN node; ! 157: ! 158: DLOG (log_dsap,LLOG_TRACE,("eis_check")); ! 159: ! 160: node = get_copy_dn (entryptr); ! 161: ! 162: if (eis.eis_allattributes) { ! 163: for(temp=entryptr->e_attributes; temp != NULLATTR; temp=temp->attr_link) ! 164: if (temp->attr_acl != NULLACL_INFO) ! 165: if (check_acl(NULLDN,ACL_READ,temp->attr_acl,node ) != OK ) ! 166: if (check_acl(dn,ACL_READ,temp->attr_acl,node ) == OK ) { ! 167: dn_free (node); ! 168: return NOTOK; ! 169: } ! 170: } else { ! 171: for(temp=EIS_SELECT; temp != NULLATTR; temp=temp->attr_link) { ! 172: if ((as = as_find_type (entryptr->e_attributes,temp->attr_type)) == NULLATTR) ! 173: continue; ! 174: if (as->attr_acl != NULLACL_INFO) ! 175: if (check_acl(NULLDN,ACL_READ,as->attr_acl,node ) != OK ) ! 176: if (check_acl(dn,ACL_READ,as->attr_acl,node ) == OK ) { ! 177: dn_free (node); ! 178: return NOTOK; ! 179: } ! 180: } ! 181: } ! 182: dn_free (node); ! 183: return OK; ! 184: } ! 185:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.