env.put( "java.naming.ldap.version", "3" );
env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.SECURITY_AUTHENTICATION, "simple" );
env.put( Context.SECURITY_CREDENTIALS, "secret" );
env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
InitialLdapContext ctx = new InitialLdapContext( env, null );
Attributes user = new BasicAttributes( "cn", "Kate Bush", true );
Attribute oc = new BasicAttribute( "objectClass" );
oc.add( "top" );
oc.add( "person" );
oc.add( "organizationalPerson" );
oc.add( "inetOrgPerson" );
user.put( oc );
user.put( "sn", "Bush" );
user.put( "userPassword", "Aerial" );
ctx.setRequestControls( JndiUtils.toJndiControls( getLdapServer().getDirectoryService().getLdapCodecService(),
new Control[]
{ unsupported } ) );
try
{
ctx.createSubcontext( "cn=Kate Bush", user );
fail();
}
catch ( OperationNotSupportedException e )
{
}
unsupported.setCritical( false );
ctx.setRequestControls( JndiUtils.toJndiControls( getLdapServer().getDirectoryService().getLdapCodecService(),
new Control[]
{ unsupported } ) );
DirContext kate = ctx.createSubcontext( "cn=Kate Bush", user );
assertNotNull( kate );
assertTrue( ArrayUtils.isEquals( Asn1StringUtils.getBytesUtf8( "Aerial" ), kate.getAttributes( "" ).get(
"userPassword" ).get() ) );
ctx.destroySubcontext( "cn=Kate Bush" );
}