/** * Since member of groups can't be null, "cn=none" if the group has no real members. * * @param group * @return */ public static boolean hasMembers(final LdapGroup group) { if (group.getMembers() == null || group.getMembers().size() == 0) { return false; } if (group.getMembers().size() > 1) { return true; } return group.getMembers().iterator().next().startsWith(NONE_UNIQUE_MEMBER_ID) == false; }
public LdapGroup addMember(final LdapObject< ? > member, final String baseDN) { return addMember(member.getDn(), baseDN); }
/** * @see org.projectforge.business.ldap.LdapDao#getId(org.projectforge.business.ldap.LdapObject) */ @Override public String getId(final LdapGroup obj) { return obj.getBusinessCategory(); }
protected List<ModificationItem> getModificationItems(final List<ModificationItem> list, final LdapGroup group) createAndAddModificationItems(list, "businessCategory", group.getBusinessCategory()); createAndAddModificationItems(list, "o", group.getOrganization()); createAndAddModificationItems(list, "description", group.getDescription()); if (CollectionUtils.isNotEmpty(group.getMembers()) == true) { createAndAddModificationItems(list, "uniqueMember", group.getMembers()); } else { createAndAddModificationItems(list, "uniqueMember", NONE_UNIQUE_MEMBER_ID); && groupDOConverter.isPosixAccountValuesEmpty(group) == false; if (modifyPosixAccount == true) { if (group.getObjectClasses() != null) { final List<String> missedObjectClasses = LdapUtils.getMissedObjectClasses(getAdditionalObjectClasses(group), getObjectClass(), group.getObjectClasses()); if (CollectionUtils.isNotEmpty(missedObjectClasses) == true) { for (final String missedObjectClass : missedObjectClasses) { createAndAddModificationItems(list, "gidNumber", String.valueOf(group.getGidNumber()));
/** * @see org.projectforge.business.ldap.LdapDao#mapToObject(java.lang.String, javax.naming.directory.Attributes) */ @Override protected LdapGroup mapToObject(final String dn, final Attributes attributes) throws NamingException { final LdapGroup group = new LdapGroup(); group.setBusinessCategory(LdapUtils.getAttributeStringValue(attributes, "businessCategory")); group.setDescription(LdapUtils.getAttributeStringValue(attributes, "description")); group.setOrganization(LdapUtils.getAttributeStringValue(attributes, "o")); final String[] members = LdapUtils.getAttributeStringValues(attributes, "uniqueMember"); if (members != null) { for (final String member : members) { group.addMember(member, ldapConfig.getBaseDN()); } } final boolean posixAccountsConfigured = ldapUserDao.isPosixAccountsConfigured(); if (posixAccountsConfigured == true) { final String no = LdapUtils.getAttributeStringValue(attributes, "gidNumber"); group.setGidNumber(NumberHelper.parseInteger(no)); } return group; }
public LdapGroup convert(final GroupDO pfGroup, final String baseDN, final Map<Integer, LdapUser> ldapUserMap) final LdapGroup ldapGroup = new LdapGroup(); if (pfGroup.getId() != null) { ldapGroup.setBusinessCategory(buildBusinessCategory(pfGroup)); ldapGroup.setCommonName(pfGroup.getName()); ldapGroup.setOrganization(pfGroup.getOrganization()); ldapGroup.setDescription(pfGroup.getDescription()); if (pfGroup.getAssignedUsers() != null) { for (final PFUserDO user : pfGroup.getAssignedUsers()) { ldapGroup.addMember(ldapUser, baseDN); } else { final PFUserDO cacheUser = TenantRegistryMap.getInstance().getTenantRegistry().getUserGroupCache()
final LdapGroup ldapGroup = getLdapGroup(ldapGroups, group); if (ldapGroup == null) { updatedLdapGroup.setOrganizationalUnit(groupBase); if (group.isDeleted() == false && group.isLocalGroup() == false) { updatedLdapGroup.setOrganizationalUnit(ldapGroup.getOrganizationalUnit()); if (group.isDeleted() == true || group.isLocalGroup() == true) { final boolean modified = groupDOConverter.copyGroupFields(updatedLdapGroup, ldapGroup); if (modified == true) { updatedLdapGroup.setObjectClasses(ldapGroup.getObjectClasses()); setMembers(updatedLdapGroup, group.getAssignedUsers(), ldapUserMap); ldapGroupDao.update(ctx, groupBase, updatedLdapGroup); unmodified++; if (StringUtils.equals(updatedLdapGroup.getCommonName(), ldapGroup.getCommonName()) == false) {
/** * Copies the fields. * * @param src * @param dest * @return true if any modification is detected, otherwise false. */ public boolean copyGroupFields(final LdapGroup src, final LdapGroup dest) { boolean modified; final List<String> properties = new LinkedList<String>(); ListHelper.addAll(properties, "description", "organization"); if (ldapUserDao.isPosixAccountsConfigured() == true && isPosixAccountValuesEmpty(src) == false) { ListHelper.addAll(properties, "gidNumber"); } modified = BeanHelper.copyProperties(src, dest, true, properties.toArray(new String[0])); // Checks if the sets aren't equal: if (SetUtils.isEqualSet(src.getMembers(), dest.getMembers()) == false) { if (LdapGroupDao.hasMembers(src) == true || LdapGroupDao.hasMembers(dest) == true) { // If both, src and dest have no members, then do nothing, otherwise: modified = true; dest.clearMembers(); dest.addAllMembers(src.getMembers()); } } return modified; } }
public GroupDO convert(final LdapGroup ldapGroup) { final GroupDO group = new GroupDO(); group.setId(getId(ldapGroup)); group.setName(ldapGroup.getCommonName()); group.setOrganization(ldapGroup.getOrganization()); group.setDescription(ldapGroup.getDescription()); if (isPosixAccountValuesEmpty(ldapGroup) == false) { group.setLdapValues(getLdapValuesAsXml(ldapGroup)); } return group; }
final Map<Integer, LdapUser> ldapUserMap) updatedLdapGroup.clearMembers(); if (assignedUsers == null) { if (cachedUser == null || cachedUser.isDeleted() == false) { log.warn("Can't assign ldap user to group: " + updatedLdapGroup.getCommonName() + "! Ldap user with id '" + assignedUser.getId() if (assignedUser.hasSystemAccess() == true) { updatedLdapGroup.addMember(ldapUser, baseDN);
public boolean isPosixAccountValuesEmpty(final LdapGroup ldapGroup) { return ldapGroup.getGidNumber() == null; }
/** * @see org.projectforge.business.ldap.LdapObject#getId() */ @Override public String getId() { return getCommonName(); }
/** * Exports the LDAP values such as posix account properties of the given ldapGroup as xml string. * * @param ldapGroup */ public String getLdapValuesAsXml(final LdapGroup ldapGroup) { final LdapConfig ldapConfig = ldapService.getLdapConfig(); final LdapPosixAccountsConfig posixAccountsConfig = ldapConfig != null ? ldapConfig.getPosixAccountsConfig() : null; LdapGroupValues values = null; if (posixAccountsConfig != null) { values = new LdapGroupValues(); if (ldapGroup.getGidNumber() != null) { values.setGidNumber(ldapGroup.getGidNumber()); } } return getLdapValuesAsXml(values); }
private boolean isMembersEmpty(final LdapGroup ldapGroup) { final Set<String> members = ldapGroup.getMembers(); if (CollectionUtils.isEmpty(members) == true) { return true; } if (members.size() > 1) { return false; } final String member = members.iterator().next(); return member == null || member.startsWith("cn=none") == true; }
public Integer getId(final LdapGroup group) { final String businessCategory = group.getBusinessCategory(); if (businessCategory != null && businessCategory.startsWith(ID_PREFIX) == true && businessCategory.length() > ID_PREFIX.length()) { final String id = businessCategory.substring(ID_PREFIX.length()); return NumberHelper.parseInteger(id); } return null; }
private void assertMembers(final LdapGroup ldapGroup, final String... usernames) { final Set<String> members = ldapGroup.getMembers(); Assert.assertFalse(CollectionUtils.isEmpty(members)); Assert.assertEquals(usernames.length, members.size()); final LdapConfig ldapConfig = ldapRealTestHelper.ldapConfig; for (final String username : usernames) { final String user = "uid=" + username + "," + ldapConfig.getUserBase() + "," + ldapConfig.getBaseDN(); assertTrue(members.contains(user)); } }
private LdapGroup getLdapGroup(final List<LdapGroup> ldapGroups, final GroupDO group) { for (final LdapGroup ldapGroup : ldapGroups) { if (StringUtils.equals(ldapGroup.getBusinessCategory(), groupDOConverter.buildBusinessCategory(group)) == true) { return ldapGroup; } } return null; } }