|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T e
Length: 4265 (0x10a9) Types: TextFile Names: »eis_select.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/quipu/eis_select.c«
/* eis_select.c - */ #ifndef lint static char *rcsid = "$Header: /f/osi/quipu/RCS/eis_select.c,v 7.0 89/11/23 22:17:29 mrose Rel $"; #endif /* * $Header: /f/osi/quipu/RCS/eis_select.c,v 7.0 89/11/23 22:17:29 mrose Rel $ * * * $Log: eis_select.c,v $ * Revision 7.0 89/11/23 22:17:29 mrose * Release 6.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ #include "quipu/util.h" #include "quipu/commonarg.h" #include "quipu/entry.h" extern LLog * log_dsap; #define EIS_SELECT eis.eis_select static Attr_Sequence cpy_as_comp_type (); static Attr_Sequence cpy_as_comp (); Attr_Sequence eis_select (eis,entryptr,dn, qctx) EntryInfoSelection eis; Entry entryptr; DN dn; char qctx; /* If TRUE - it is a Quipu context association */ /* So treat as if "-allattributes -typesandvalves" */ /* Plus - make sure the ACL is sent */ { Attr_Sequence result = NULLATTR; register Attr_Sequence trail; register Attr_Sequence temp; Attr_Sequence temp2; register Attr_Sequence eptr; DN node; extern AttributeType at_acl; DLOG (log_dsap,LLOG_TRACE,("eis_select")); node = get_copy_dn (entryptr); if (eis.eis_allattributes || qctx) { for(temp=entryptr->e_attributes; temp != NULLATTR; temp=temp->attr_link) { if ( ! (qctx && (AttrT_cmp (at_acl,&temp->attr_type) == 0))) if ( (temp->attr_acl != NULLACL_INFO) && (check_acl(dn,ACL_READ,temp->attr_acl,node ) != OK )) continue; if ((eis.eis_infotypes == EIS_ATTRIBUTETYPESONLY) && !qctx) temp2 = cpy_as_comp_type (temp); else temp2 = cpy_as_comp (temp); if (result == NULLATTR) { result = temp2; trail = result; } else { trail->attr_link = temp2; trail = temp2; } } } else { (void) as_decode (EIS_SELECT); for(eptr=EIS_SELECT; eptr != NULLATTR; eptr=eptr->attr_link) { if ((temp = as_find_type (entryptr->e_attributes,&eptr->attr_type)) == NULLATTR) continue; if ( (temp->attr_acl != NULLACL_INFO)&& (check_acl(dn,ACL_READ,temp->attr_acl,node ) != OK )) continue; if (eis.eis_infotypes == EIS_ATTRIBUTETYPESONLY) temp2 = cpy_as_comp_type (temp); else temp2 = cpy_as_comp (temp); if (result == NULLATTR) { result = temp2; trail = result; } else { trail->attr_link = temp2; trail = temp2; } } } dn_free (node); return (result); } static Attr_Sequence cpy_as_comp (as) Attr_Sequence as; { Attr_Sequence ptr; if (as==NULLATTR) { LLOG (log_dsap,LLOG_EXCEPTIONS,("copy of null as")); return (NULLATTR); } ptr = as_comp_alloc(); AttrT_cpy_aux(&as->attr_type,&ptr->attr_type); ptr->attr_value = as->attr_value; ptr->attr_link = NULLATTR; ptr->attr_acl = NULLACL_INFO; return (ptr); } static Attr_Sequence cpy_as_comp_type (as) Attr_Sequence as; { Attr_Sequence ptr; if (as==NULLATTR) { LLOG (log_dsap,LLOG_EXCEPTIONS,("copy of null as")); return (NULLATTR); } ptr = as_comp_alloc(); AttrT_cpy_aux(&as->attr_type,&ptr->attr_type); ptr->attr_value = NULLAV; ptr->attr_link = NULLATTR; ptr->attr_acl = NULLACL_INFO; return (ptr); } eis_check (eis,entryptr,dn) EntryInfoSelection eis; Entry entryptr; DN dn; { register Attr_Sequence temp; register Attr_Sequence as; DN node; DLOG (log_dsap,LLOG_TRACE,("eis_check")); node = get_copy_dn (entryptr); if (eis.eis_allattributes) { for(temp=entryptr->e_attributes; temp != NULLATTR; temp=temp->attr_link) if (temp->attr_acl != NULLACL_INFO) if (check_acl(NULLDN,ACL_READ,temp->attr_acl,node ) != OK ) if (check_acl(dn,ACL_READ,temp->attr_acl,node ) == OK ) { dn_free (node); return NOTOK; } } else { (void) as_decode (EIS_SELECT); for(temp=EIS_SELECT; temp != NULLATTR; temp=temp->attr_link) { if ((as = as_find_type (entryptr->e_attributes,&temp->attr_type)) == NULLATTR) continue; if (as->attr_acl != NULLACL_INFO) if (check_acl(NULLDN,ACL_READ,as->attr_acl,node ) != OK ) if (check_acl(dn,ACL_READ,as->attr_acl,node ) == OK ) { dn_free (node); return NOTOK; } } } dn_free (node); return OK; }