Skip to content

Commit cd352f6

Browse files
author
Rob Winch
committed
SEC-1915: Polish
* Restore default search filter to remain passive * Check the search filter in setSearchFilter * Add additional tests
1 parent c54346b commit cd352f6

File tree

2 files changed

+40
-7
lines changed

2 files changed

+40
-7
lines changed

ldap/src/main/java/org/springframework/security/ldap/authentication/ad/ActiveDirectoryLdapAuthenticationProvider.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public final class ActiveDirectoryLdapAuthenticationProvider extends AbstractLda
9797
private final String rootDn;
9898
private final String url;
9999
private boolean convertSubErrorCodesToExceptions;
100-
private String searchFilter = "(&(objectClass=user)(|(sAMAccountName={0})(userPrincipalName={0})))";
100+
private String searchFilter = "(&(objectClass=user)(userPrincipalName={0}))";
101101

102102
// Only used to allow tests to substitute a mock LdapContext
103103
ContextFactory contextFactory = new ContextFactory();
@@ -337,14 +337,15 @@ public void setConvertSubErrorCodesToExceptions(boolean convertSubErrorCodesToEx
337337
* The LDAP filter string to search for the user being authenticated.
338338
* Occurrences of {0} are replaced with the {@code username@domain}.
339339
* <p>
340-
* Defaults to: {@code (&(objectClass=user)(|(sAMAccountName={0})(userPrincipalName={0})))}
340+
* Defaults to: {@code (&(objectClass=user)(userPrincipalName={0}))}
341341
* </p>
342342
*
343343
* @param searchFilter the filter string
344344
*
345-
* @since 3.2
345+
* @since 3.2.6
346346
*/
347347
public void setSearchFilter(String searchFilter) {
348+
Assert.hasText(searchFilter,"searchFilter must have text");
348349
this.searchFilter = searchFilter;
349350
}
350351

ldap/src/test/java/org/springframework/security/ldap/authentication/ad/ActiveDirectoryLdapAuthenticationProviderTests.java

+36-4
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@
4646
import static org.junit.Assert.assertEquals;
4747
import static org.junit.Assert.assertTrue;
4848
import static org.junit.Assert.fail;
49-
import static org.mockito.Mockito.any;
50-
import static org.mockito.Mockito.eq;
51-
import static org.mockito.Mockito.mock;
52-
import static org.mockito.Mockito.when;
49+
import static org.mockito.Mockito.*;
5350
import static org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider.ContextFactory;
5451

5552
/**
@@ -124,6 +121,41 @@ public void customSearchFilterIsUsedForSuccessfulAuthentication() throws Excepti
124121
assertTrue(result.isAuthenticated());
125122
}
126123

124+
@Test
125+
public void defaultSearchFilter() throws Exception {
126+
//given
127+
final String defaultSearchFilter = "(&(objectClass=user)(userPrincipalName={0}))";
128+
129+
DirContext ctx = mock(DirContext.class);
130+
when(ctx.getNameInNamespace()).thenReturn("");
131+
132+
DirContextAdapter dca = new DirContextAdapter();
133+
SearchResult sr = new SearchResult("CN=Joe Jannsen,CN=Users", dca, dca.getAttributes());
134+
when(ctx.search(any(Name.class), eq(defaultSearchFilter), any(Object[].class), any(SearchControls.class)))
135+
.thenReturn(new MockNamingEnumeration(sr));
136+
137+
ActiveDirectoryLdapAuthenticationProvider customProvider
138+
= new ActiveDirectoryLdapAuthenticationProvider("mydomain.eu", "ldap://192.168.1.200/");
139+
customProvider.contextFactory = createContextFactoryReturning(ctx);
140+
141+
//when
142+
Authentication result = customProvider.authenticate(joe);
143+
144+
//then
145+
assertTrue(result.isAuthenticated());
146+
verify(ctx).search(any(DistinguishedName.class), eq(defaultSearchFilter), any(Object[].class), any(SearchControls.class));
147+
}
148+
149+
@Test(expected = IllegalArgumentException.class)
150+
public void setSearchFilterNull() {
151+
provider.setSearchFilter(null);
152+
}
153+
154+
@Test(expected = IllegalArgumentException.class)
155+
public void setSearchFilterEmpty() {
156+
provider.setSearchFilter(" ");
157+
}
158+
127159
@Test
128160
public void nullDomainIsSupportedIfAuthenticatingWithFullUserPrincipal() throws Exception {
129161
provider = new ActiveDirectoryLdapAuthenticationProvider(null, "ldap://192.168.1.200/");

0 commit comments

Comments
 (0)