public boolean isPosixValuesEmpty() { return getGidNumber() == null; }
/** * 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; }
/** * 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); } }
/** * 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())); } } } });