Browse Source

fix issue with 'first profile' duplicate handler

Jason Rivard 7 years ago
parent
commit
af589ff76c

+ 6 - 2
server/src/main/java/password/pwm/http/servlet/configmanager/DebugItemGenerator.java

@@ -75,6 +75,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Properties;
 import java.util.Set;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.TreeSet;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 import java.util.zip.ZipOutputStream;
@@ -182,10 +183,13 @@ public class DebugItemGenerator {
                     + PwmConstants.PWM_APP_NAME + " "
                     + PwmConstants.PWM_APP_NAME + " "
                     + PwmConstants.SERVLET_VERSION + "\n");
                     + PwmConstants.SERVLET_VERSION + "\n");
             writer.write("Timestamp: " + JavaHelper.toIsoDate(storedConfiguration.modifyTime()) + "\n");
             writer.write("Timestamp: " + JavaHelper.toIsoDate(storedConfiguration.modifyTime()) + "\n");
-            writer.write("This file is encoded using " + PwmConstants.DEFAULT_CHARSET.displayName() + "\n");
+            writer.write("This file is " + PwmConstants.DEFAULT_CHARSET.displayName() + " encoded\n");
 
 
             writer.write("\n");
             writer.write("\n");
-            final Map<String,String> modifiedSettings = storedConfiguration.getModifiedSettingDebugValues(PwmConstants.DEFAULT_LOCALE, true);
+            final Map<String,String> modifiedSettings = new TreeMap<>(
+                    storedConfiguration.getModifiedSettingDebugValues(PwmConstants.DEFAULT_LOCALE, true)
+            );
+
             for (final String key : modifiedSettings.keySet()) {
             for (final String key : modifiedSettings.keySet()) {
                 final String value = modifiedSettings.get(key);
                 final String value = modifiedSettings.get(key);
                 writer.write(">> Setting > " + key);
                 writer.write(">> Setting > " + key);

+ 8 - 3
server/src/main/java/password/pwm/ldap/search/UserSearchEngine.java

@@ -208,13 +208,18 @@ public class UserSearchEngine implements PwmService {
         if (dupeMode == DuplicateMode.FIRST_PROFILE) {
         if (dupeMode == DuplicateMode.FIRST_PROFILE) {
             final String profile1 = results.get(0).getLdapProfileID();
             final String profile1 = results.get(0).getLdapProfileID();
             final String profile2 = results.get(1).getLdapProfileID();
             final String profile2 = results.get(1).getLdapProfileID();
-            if (profile1 == null && profile2 == null || (profile1 != null && profile1.equals(profile2))) {
-                return results.get(0);
-            } else {
+            final boolean sameProfile = (profile1 == null && profile2 == null)
+                    || (profile1 != null && profile1.equals(profile2));
+
+            if (sameProfile) {
                 final String errorMessage = "multiple user matches in single profile";
                 final String errorMessage = "multiple user matches in single profile";
                 throw new PwmOperationalException(new ErrorInformation(PwmError.ERROR_CANT_MATCH_USER, errorMessage));
                 throw new PwmOperationalException(new ErrorInformation(PwmError.ERROR_CANT_MATCH_USER, errorMessage));
             }
             }
 
 
+            LOGGER.trace(sessionLabel, "found multiple matches, but will use first match since second match" +
+                    " is in a different profile and dupeMode is set to "
+                    + DuplicateMode.FIRST_PROFILE);
+            return results.get(0);
         }
         }
         final String errorMessage = "multiple user matches found";
         final String errorMessage = "multiple user matches found";
         throw new PwmOperationalException(new ErrorInformation(PwmError.ERROR_CANT_MATCH_USER, errorMessage));
         throw new PwmOperationalException(new ErrorInformation(PwmError.ERROR_CANT_MATCH_USER, errorMessage));