|
18 | 18 |
|
19 | 19 | import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
|
20 | 20 | import org.apache.directory.server.core.integ.FrameworkRunner;
|
21 |
| -import org.apache.directory.server.integ.ServerIntegrationUtils; |
22 | 21 | import org.apache.directory.server.ldap.LdapServer;
|
23 | 22 | import org.apache.directory.server.annotations.CreateLdapServer;
|
24 | 23 | import org.apache.directory.server.annotations.CreateTransport;
|
|
34 | 33 | import javax.naming.directory.DirContext;
|
35 | 34 | import javax.naming.directory.InitialDirContext;
|
36 | 35 | import javax.security.auth.callback.*;
|
| 36 | +import javax.security.auth.login.FailedLoginException; |
37 | 37 | import javax.security.auth.login.LoginContext;
|
38 | 38 | import javax.security.auth.login.LoginException;
|
39 | 39 |
|
40 | 40 | import java.io.IOException;
|
41 |
| -import java.net.URL; |
42 | 41 | import java.util.HashSet;
|
43 | 42 | import java.util.Hashtable;
|
44 | 43 |
|
|
47 | 46 | import static org.junit.Assert.fail;
|
48 | 47 |
|
49 | 48 | @RunWith ( FrameworkRunner.class )
|
50 |
| -@CreateLdapServer(transports = {@CreateTransport(protocol = "LDAP", port=1024)}) |
| 49 | +@CreateLdapServer(transports = {@CreateTransport(protocol = "LDAP", port=1024)}, allowAnonymousAccess = true) |
51 | 50 | @ApplyLdifFiles(
|
52 | 51 | "test.ldif"
|
53 | 52 | )
|
@@ -172,4 +171,47 @@ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallback
|
172 | 171 | }
|
173 | 172 |
|
174 | 173 |
|
| 174 | + @Test |
| 175 | + public void testAuthenticatedViaBindOnAnonConnection() throws Exception { |
| 176 | + LoginContext context = new LoginContext("AnonBindCheckUserLDAPLogin", new CallbackHandler() { |
| 177 | + @Override |
| 178 | + public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { |
| 179 | + for (int i = 0; i < callbacks.length; i++) { |
| 180 | + if (callbacks[i] instanceof NameCallback) { |
| 181 | + ((NameCallback) callbacks[i]).setName("first"); |
| 182 | + } else if (callbacks[i] instanceof PasswordCallback) { |
| 183 | + ((PasswordCallback) callbacks[i]).setPassword("wrongSecret".toCharArray()); |
| 184 | + } else { |
| 185 | + throw new UnsupportedCallbackException(callbacks[i]); |
| 186 | + } |
| 187 | + } |
| 188 | + } |
| 189 | + }); |
| 190 | + try { |
| 191 | + context.login(); |
| 192 | + fail("Should have failed authenticating"); |
| 193 | + } catch (FailedLoginException expected) { |
| 194 | + } |
| 195 | + } |
| 196 | + |
| 197 | + @Test |
| 198 | + public void testAuthenticatedOkViaBindOnAnonConnection() throws Exception { |
| 199 | + LoginContext context = new LoginContext("AnonBindCheckUserLDAPLogin", new CallbackHandler() { |
| 200 | + @Override |
| 201 | + public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { |
| 202 | + for (int i = 0; i < callbacks.length; i++) { |
| 203 | + if (callbacks[i] instanceof NameCallback) { |
| 204 | + ((NameCallback) callbacks[i]).setName("first"); |
| 205 | + } else if (callbacks[i] instanceof PasswordCallback) { |
| 206 | + ((PasswordCallback) callbacks[i]).setPassword("secret".toCharArray()); |
| 207 | + } else { |
| 208 | + throw new UnsupportedCallbackException(callbacks[i]); |
| 209 | + } |
| 210 | + } |
| 211 | + } |
| 212 | + }); |
| 213 | + context.login(); |
| 214 | + context.logout(); |
| 215 | + } |
| 216 | + |
175 | 217 | }
|
0 commit comments