/* Return all groups for principal == null or all groups for which principal * is a member * */ private Collection<BwGroup> getGroups( final DirConfigProperties dirProps, final BwPrincipal principal) throws CalFacadeException { LdapConfigProperties props = (LdapConfigProperties) dirProps; InitialLdapContext ctx = null; String member = null; if (principal != null) { if (principal.getKind() == WhoDefs.whoTypeUser) { member = getUserEntryValue(props, principal); } else if (principal.getKind() == WhoDefs.whoTypeGroup) { member = getGroupEntryValue(props, principal); } } try { ctx = createLdapInitContext(props); BasicAttributes matchAttrs = new BasicAttributes(true); if (member != null) { matchAttrs.put(props.getGroupMemberAttr(), member); } String[] idAttr = {props.getGroupIdAttr()}; ArrayList<BwGroup> groups = new ArrayList<BwGroup>(); NamingEnumeration response = ctx.search(props.getGroupContextDn(), matchAttrs, idAttr); while (response.hasMore()) { SearchResult sr = (SearchResult) response.next(); Attributes attrs = sr.getAttributes(); Attribute nmAttr = attrs.get(props.getGroupIdAttr()); if (nmAttr.size() != 1) { throw new CalFacadeException("org.bedework.ldap.groups.multiple.result"); } BwGroup group = new BwGroup(); group.setAccount(nmAttr.get(0).toString()); group.setPrincipalRef(makePrincipalUri(group.getAccount(), WhoDefs.whoTypeGroup)); groups.add(group); } return groups; } catch (Throwable t) { if (debug) { error(t); } throw new CalFacadeException(t); } finally { // Close the context to release the connection if (ctx != null) { closeContext(ctx); } } }
/* Search for a group to ensure it exists * */ private BwGroup findGroup(final DirConfigProperties dirProps, final String groupName) throws CalFacadeException { LdapConfigProperties props = (LdapConfigProperties) dirProps; InitialLdapContext ctx = null; try { ctx = createLdapInitContext(props); BasicAttributes matchAttrs = new BasicAttributes(true); matchAttrs.put(props.getGroupIdAttr(), groupName); String[] idAttr = {props.getGroupIdAttr()}; BwGroup group = null; NamingEnumeration response = ctx.search(props.getGroupContextDn(), matchAttrs, idAttr); while (response.hasMore()) { // SearchResult sr = (SearchResult)response.next(); // Attributes attrs = sr.getAttributes(); if (group != null) { throw new CalFacadeException("org.bedework.ldap.groups.multiple.result"); } group = new BwGroup(); group.setAccount(groupName); group.setPrincipalRef(makePrincipalUri(groupName, WhoDefs.whoTypeGroup)); } return group; } catch (Throwable t) { if (debug) { error(t); } throw new CalFacadeException(t); } finally { // Close the context to release the connection if (ctx != null) { closeContext(ctx); } } }