/** * 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; }
/** * 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; }
@Override public void validate(final Form<?> form) { final LdapGroupValues values = new LdapGroupValues(); values.setGidNumber(gidNumberField.getConvertedInput()); if (StringUtils.isBlank(data.getLdapValues()) == true && values.isPosixValuesEmpty() == true) { // Nothing to validate: all fields are zero and posix account wasn't set for this group before. return; } if (values.getGidNumber() == null) { gidNumberField .error(getLocalizedMessage(WebConstants.I18N_KEY_FIELD_REQUIRED, getString("ldap.gidNumber"))); } else { if (ldapPosixGroupsUtils.isGivenNumberFree(data, values.getGidNumber()) == false) { gidNumberField.error( getLocalizedMessage("ldap.gidNumber.alreadyInUse", ldapPosixGroupsUtils.getNextFreeGidNumber())); } } } });
setLdapValues(ldapGroup, pfGroup.getLdapValues()); return ldapGroup;
ldapGroupValues = groupDOConverter.readLdapGroupValues(data.getLdapValues()); if (ldapGroupValues == null) { ldapGroupValues = new LdapGroupValues();