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; }
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; } }
/** * Sets the LDAP values such as posix account properties of the given ldapGroup configured in the given xml string. * * @param ldapGroup * @param ldapValuesAsXml Posix account values as xml. */ public void setLdapValues(final LdapGroup ldapGroup, final String ldapValuesAsXml) { if (StringUtils.isBlank(ldapValuesAsXml) == true) { return; } final LdapConfig ldapConfig = ldapService.getLdapConfig(); final LdapPosixAccountsConfig posixAccountsConfig = ldapConfig != null ? ldapConfig.getPosixAccountsConfig() : null; if (posixAccountsConfig == null) { // No posix account default values configured return; } final LdapGroupValues values = readLdapGroupValues(ldapValuesAsXml); if (values == null) { return; } if (values.getGidNumber() != null) { ldapGroup.setGidNumber(values.getGidNumber()); } else { ldapGroup.setGidNumber(-1); } }
@Override public AbstractSecuredBasePage onSaveOrUpdate() { groupDao.setAssignedUsers(getData(), form.assignUsersListHelper.getAssignedItems()); //groupDao.setNestedGroups(getData(), form.nestedGroupsListHelper.getAssignedItems()); if (form.ldapGroupValues != null && form.ldapGroupValues.isValuesEmpty() == false) { final String xml = groupDOConverter.getLdapValuesAsXml(form.ldapGroupValues); getData().setLdapValues(xml); } return super.onSaveOrUpdate(); }
ldapGroup.setBusinessCategory(buildBusinessCategory(pfGroup)); setLdapValues(ldapGroup, pfGroup.getLdapValues()); return ldapGroup;
for (final GroupDO group : groups) { try { final LdapGroup updatedLdapGroup = groupDOConverter.convert(group, baseDN, ldapUserMap); final LdapGroup ldapGroup = getLdapGroup(ldapGroups, group); if (ldapGroup == null) { deleted++; } else { final boolean modified = groupDOConverter.copyGroupFields(updatedLdapGroup, ldapGroup); if (modified == true) { updatedLdapGroup.setObjectClasses(ldapGroup.getObjectClasses());
/** * @see org.projectforge.business.ldap.LdapDao#getAdditionalObjectClasses(org.projectforge.business.ldap.LdapObject) */ @Override protected String[] getAdditionalObjectClasses(final LdapGroup obj) { final boolean posixAccount = ldapUserDao.isPosixAccountsConfigured() == true && groupDOConverter.isPosixAccountValuesEmpty(obj) == false; if (posixAccount == true) { return ADDITIONAL_OBJECT_CLASSES_WITH_POSIX_SUPPORT; } return ADDITIONAL_OBJECT_CLASSES; }
/** * Get all given gid numbers of all ProjectForge groups including any deleted group and get the next highest and free * number. The number is 1000 if no gid number (with a value greater than 999) is found. */ public int getNextFreeGidNumber() { final UserGroupCache userGroupCache = TenantRegistryMap.getInstance().getTenantRegistry().getUserGroupCache(); final Collection<GroupDO> allGroups = userGroupCache.getAllGroups(); int currentMaxNumber = 999; for (final GroupDO group : allGroups) { final LdapGroupValues ldapGroupValues = groupDOConverter.readLdapGroupValues(group.getLdapValues()); if (ldapGroupValues == null) { continue; } if (ldapGroupValues.getGidNumber() != null && ldapGroupValues.getGidNumber().intValue() > currentMaxNumber) { currentMaxNumber = ldapGroupValues.getGidNumber(); } } return currentMaxNumber + 1; }
/** * 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); }
/** * 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; } }
/** * For preventing double gidNumbers. * * @param currentGroup * @param gidNumber * @return Returns true if any group (also deleted group) other than the given group has the given gidNumber, * otherwise false. */ public boolean isGivenNumberFree(final GroupDO currentGroup, final int gidNumber) { final UserGroupCache userGroupCache = TenantRegistryMap.getInstance().getTenantRegistry().getUserGroupCache(); final Collection<GroupDO> allGroups = userGroupCache.getAllGroups(); for (final GroupDO group : allGroups) { final LdapGroupValues ldapGroupValues = groupDOConverter.readLdapGroupValues(group.getLdapValues()); if (ObjectUtils.equals(group.getId(), currentGroup.getId()) == true) { // The current group may have the given gidNumber already, so ignore this entry. continue; } if (ldapGroupValues != null && ldapGroupValues.getGidNumber() != null && ldapGroupValues.getGidNumber().intValue() == gidNumber) { // Number isn't free. log.info("The gidNumber (posix account) '" + gidNumber + "' is already occupied by group: " + group); return false; } } return true; }
&& groupDOConverter.isPosixAccountValuesEmpty(group) == false; if (modifyPosixAccount == true) { if (group.getObjectClasses() != null) {
ldapGroupValues = groupDOConverter.readLdapGroupValues(data.getLdapValues()); if (ldapGroupValues == null) { ldapGroupValues = new LdapGroupValues();