diff --git a/embedded-ldap-core/pom.xml b/embedded-ldap-core/pom.xml
index 60a0918..dde3d64 100644
--- a/embedded-ldap-core/pom.xml
+++ b/embedded-ldap-core/pom.xml
@@ -33,5 +33,25 @@
slf4j-api
${slf4j.version}
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+ ${bouncycastle.version}
+ test
+
+
+ org.bouncycastle
+ bcpkix-jdk15on
+ ${bouncycastle.version}
+ test
+
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/AbstractEmbeddedLdapBuilderTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/AbstractEmbeddedLdapBuilderTest.java
new file mode 100644
index 0000000..9754cb4
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/AbstractEmbeddedLdapBuilderTest.java
@@ -0,0 +1,88 @@
+package org.zapodot.junit.ldap.internal;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotNull;
+
+public class AbstractEmbeddedLdapBuilderTest {
+
+ @Test
+ public void bindingToLegalPort() {
+ assertNotNull(FakeEmbeddedLdapBuilder.newInstance().bindingToPort(9999));
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testPrematureLdapConnection() throws Exception {
+ FakeEmbeddedLdapBuilder.newInstance().build().ldapConnection();
+
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testPrematureContext() throws Exception {
+ FakeEmbeddedLdapBuilder.newInstance().build().context();
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testUnknownLDIF() {
+ FakeEmbeddedLdapBuilder.newInstance().importingLdifs("nonExisting.ldif").build();
+
+ }
+
+ @Test
+ public void testNullLDIF() {
+ assertNotNull(FakeEmbeddedLdapBuilder.newInstance().importingLdifs(null).build());
+
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testIllegalDSN() {
+ FakeEmbeddedLdapBuilder.newInstance().usingBindDSN("bindDsn").build();
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testIllegalPort() {
+ FakeEmbeddedLdapBuilder.newInstance().bindingToPort(Integer.MIN_VALUE).build();
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSchemaNotFound() {
+ FakeEmbeddedLdapBuilder.newInstance().withSchema("non-existing-schema.ldif").build();
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSchemaIsNotAFile() {
+ FakeEmbeddedLdapBuilder.newInstance().withSchema("folder").build();
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSchemaIsInvalid() {
+ FakeEmbeddedLdapBuilder.newInstance().withSchema("invalid.ldif").build();
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSchemaFileUnsupportedIsInvalid() {
+ FakeEmbeddedLdapBuilder.newInstance().withSchema("\"#%¤&&%/¤##¤¤").build();
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testInvalidPort() {
+ FakeEmbeddedLdapBuilder.newInstance().bindingToPort(Integer.MAX_VALUE);
+
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testInvalidBindAddress() {
+ FakeEmbeddedLdapBuilder.newInstance().bindingToAddress("åpsldfåpl");
+
+ }
+
+
+}
+
diff --git a/embedded-ldap-junit/src/test/java/org/zapodot/junit/ldap/internal/AuthenticationConfigurationTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/AuthenticationConfigurationTest.java
similarity index 100%
rename from embedded-ldap-junit/src/test/java/org/zapodot/junit/ldap/internal/AuthenticationConfigurationTest.java
rename to embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/AuthenticationConfigurationTest.java
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomSchemaDuplicatedTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomSchemaDuplicatedTest.java
new file mode 100644
index 0000000..2afa57d
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomSchemaDuplicatedTest.java
@@ -0,0 +1,35 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import com.unboundid.ldap.sdk.schema.AttributeTypeDefinition;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertNotNull;
+
+public class EmbeddedLdapServerCustomSchemaDuplicatedTest {
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder.newInstance()
+ .withSchema("standard-schema.ldif")
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testFindCustomAttribute() throws Exception {
+ final AttributeTypeDefinition changelogAttribute =
+ embeddedLdapRule.ldapConnection().getSchema().getAttributeType("changelog");
+ assertNotNull(changelogAttribute);
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomStandardAndCustomSchemaTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomStandardAndCustomSchemaTest.java
new file mode 100644
index 0000000..eba39eb
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomStandardAndCustomSchemaTest.java
@@ -0,0 +1,37 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import com.unboundid.ldap.sdk.schema.AttributeTypeDefinition;
+import com.unboundid.ldap.sdk.schema.Schema;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertNotNull;
+
+public class EmbeddedLdapServerCustomStandardAndCustomSchemaTest {
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder.newInstance()
+ .withSchema("custom-schema.ldif")
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testFindCustomAttribute() throws Exception {
+ final Schema currentSchema = embeddedLdapRule.ldapConnection().getSchema();
+ final AttributeTypeDefinition changelogAttribute =
+ currentSchema.getAttributeType("attribute");
+ assertNotNull(changelogAttribute);
+ assertNotNull(currentSchema.getObjectClass("type"));
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomWithoutSchemaTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomWithoutSchemaTest.java
new file mode 100644
index 0000000..3daaceb
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomWithoutSchemaTest.java
@@ -0,0 +1,35 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import com.unboundid.ldap.sdk.schema.Schema;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertTrue;
+
+public class EmbeddedLdapServerCustomWithoutSchemaTest {
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder.newInstance()
+ .withoutDefaultSchema()
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testEmptySchema() throws Exception {
+ final Schema schema =
+ embeddedLdapRule.ldapConnection().getSchema();
+ assertTrue(schema.getAttributeTypes().isEmpty());
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomWithoutStandardSchemaTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomWithoutStandardSchemaTest.java
new file mode 100644
index 0000000..84e8639
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerCustomWithoutStandardSchemaTest.java
@@ -0,0 +1,36 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import com.unboundid.ldap.sdk.schema.AttributeTypeDefinition;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertNotNull;
+
+public class EmbeddedLdapServerCustomWithoutStandardSchemaTest {
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder.newInstance()
+ .withoutDefaultSchema()
+ .withSchema("standard-schema.ldif")
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testFindCustomAttribute() throws Exception {
+ final AttributeTypeDefinition changelogAttribute =
+ embeddedLdapRule.ldapConnection().getSchema().getAttributeType("changelog");
+ assertNotNull(changelogAttribute);
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerMultipleDSNs.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerMultipleDSNs.java
new file mode 100644
index 0000000..7ec4dab
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerMultipleDSNs.java
@@ -0,0 +1,40 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import com.unboundid.ldap.sdk.LDAPInterface;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertArrayEquals;
+
+public class EmbeddedLdapServerMultipleDSNs {
+
+ public static final String DSN_ROOT_ONE = "dc=zapodot,dc=com";
+ public static final String DSN_ROOT_TWO = "dc=zapodot,dc=org";
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder.newInstance()
+ .usingDomainDsn(DSN_ROOT_ONE)
+ .usingDomainDsn(DSN_ROOT_TWO)
+ .importingLdifs("example.ldif")
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testCheckNamingContexts() throws Exception {
+ final LDAPInterface ldapConnection = embeddedLdapRule.ldapConnection();
+ final String[] namingContextDNs = ldapConnection.getRootDSE().getNamingContextDNs();
+ assertArrayEquals(new String[]{DSN_ROOT_ONE, DSN_ROOT_TWO}, namingContextDNs);
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerNoAuthTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerNoAuthTest.java
new file mode 100644
index 0000000..39e5fe3
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerNoAuthTest.java
@@ -0,0 +1,35 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertNotNull;
+
+public class EmbeddedLdapServerNoAuthTest {
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder
+ .newInstance()
+ .usingBindCredentials(null)
+ .usingDomainDsn("dc=zapodot,dc=org")
+ .importingLdifs("example.ldif")
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testConnect() throws Exception {
+ assertNotNull(embeddedLdapRule.dirContext().search("cn=Sondre Eikanger Kvalo,ou=people,dc=zapodot,dc=org", null));
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerStandardContext.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerStandardContext.java
new file mode 100644
index 0000000..1848975
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerStandardContext.java
@@ -0,0 +1,33 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertArrayEquals;
+
+public class EmbeddedLdapServerStandardContext {
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder.newInstance()
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testUsingDefaultDomain() throws Exception {
+ assertArrayEquals(new String[]{FakeEmbeddedLdapBuilder.DEFAULT_DOMAIN},
+ embeddedLdapRule.ldapConnection().getRootDSE().getNamingContextDNs());
+
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerStarttlsTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerStarttlsTest.java
new file mode 100644
index 0000000..a19a991
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerStarttlsTest.java
@@ -0,0 +1,151 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.listener.InMemoryListenerConfig;
+import com.unboundid.ldap.sdk.*;
+import com.unboundid.ldap.sdk.extensions.StartTLSExtendedRequest;
+import org.bouncycastle.asn1.ASN1ObjectIdentifier;
+import org.bouncycastle.asn1.x509.BasicConstraints;
+import org.bouncycastle.cert.X509CertificateHolder;
+import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
+import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.operator.ContentSigner;
+import org.bouncycastle.operator.OperatorCreationException;
+import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import javax.net.ssl.*;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.security.*;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+
+import static org.junit.Assert.assertNotNull;
+
+public class EmbeddedLdapServerStarttlsTest {
+
+ public static final String DOMAIN_DSN = "dc=zapodot,dc=org";
+
+ final SSLContext sslContext;
+ {
+ try {
+ sslContext = buildSslContext();
+ } catch (Exception e) {
+ throw new IllegalStateException("Failed to create LDAPS config", e);
+ }
+ }
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder
+ .newInstance()
+ .usingDomainDsn(DOMAIN_DSN)
+ .importingLdifs("example.ldif")
+ .withListener(getListenerConfig())
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ private InMemoryListenerConfig getListenerConfig() {
+ try {
+ return InMemoryListenerConfig.createLDAPConfig(
+ "tls", InetAddress.getLoopbackAddress(), 0, sslContext.getSocketFactory()
+ );
+ } catch (Exception e) {
+ throw new IllegalStateException("Failed to create LDAPS config", e);
+ }
+ }
+
+ @Test
+ public void testRawLdapConnection() throws Exception {
+ final String commonName = "Test person";
+ final String dn = String.format(
+ "cn=%s,ou=people,dc=zapodot,dc=org",
+ commonName);
+ LDAPConnection ldapConnection = embeddedLdapRule.unsharedLdapConnection();
+ ldapConnection.processExtendedOperation(new StartTLSExtendedRequest(sslContext));
+ try {
+ ldapConnection.add(new AddRequest(dn, Arrays.asList(
+ new Attribute("objectclass", "top", "person", "organizationalPerson", "inetOrgPerson"),
+ new Attribute("cn", commonName), new Attribute("sn", "Person"), new Attribute("uid", "test"))));
+ } finally {
+ // Forces the LDAP connection to be closed. This is not necessary as the rule will usually close it for you.
+ ldapConnection.close();
+ }
+ ldapConnection = embeddedLdapRule.unsharedLdapConnection();
+ final SearchResultEntry entry = ldapConnection.searchForEntry(new SearchRequest(dn,
+ SearchScope.BASE,
+ "(objectClass=person)"));
+ assertNotNull(entry);
+ }
+
+ public static SSLContext buildSslContext()
+ throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException,
+ UnrecoverableKeyException, KeyManagementException, OperatorCreationException {
+ KeyStore keystore = KeyStore.getInstance("jks");
+ keystore.load(null, new char[] {});
+ KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
+ gen.initialize(2014);
+ final KeyPair keyPair = gen.generateKeyPair();
+
+ Provider bcProvider = new BouncyCastleProvider();
+ Security.addProvider(bcProvider);
+
+ long now = System.currentTimeMillis();
+ Date startDate = new Date(now);
+
+ org.bouncycastle.asn1.x500.X500Name dn = new org.bouncycastle.asn1.x500.X500Name("cn=localhost");
+ BigInteger sn = new BigInteger(Long.toString(now));
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(startDate);
+ calendar.add(Calendar.HOUR, 1);
+ Date endDate = calendar.getTime();
+
+ String signatureAlgorithm = "SHA256WithRSA";
+
+ final ContentSigner contentSigner = new JcaContentSignerBuilder(signatureAlgorithm).build(keyPair.getPrivate());
+
+ final X509CertificateHolder holder =
+ new JcaX509v3CertificateBuilder(dn, sn, startDate, endDate, dn, keyPair.getPublic())
+ .addExtension(new ASN1ObjectIdentifier("2.5.29.19"), true, new BasicConstraints(true))
+ .build(contentSigner);
+ final X509Certificate cert = new JcaX509CertificateConverter()
+ .setProvider(bcProvider)
+ .getCertificate(holder);
+ keystore.setCertificateEntry("test", cert);
+ keystore.setKeyEntry("key", keyPair.getPrivate(), new char[] {}, new Certificate[] { cert });
+
+ final KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+ kmfactory.init(keystore, new char[] {});
+ final KeyManager[] kms = kmfactory.getKeyManagers();
+
+ KeyStore truststore = KeyStore.getInstance("jks");
+ truststore.load(null, new char[] {});
+ truststore.setCertificateEntry("test", cert);
+
+ final TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(
+ TrustManagerFactory.getDefaultAlgorithm()
+ );
+ tmfactory.init(truststore);
+ final TrustManager[] tms = tmfactory.getTrustManagers();
+ final SSLContext sslcontext = SSLContext.getInstance("TLS");
+ sslcontext.init(kms, tms, null);
+ return sslcontext;
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerTest.java
new file mode 100644
index 0000000..7267fcf
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerTest.java
@@ -0,0 +1,104 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.google.common.collect.Iterators;
+import com.unboundid.ldap.sdk.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchControls;
+import java.util.Arrays;
+
+import static org.junit.Assert.*;
+
+public class EmbeddedLdapServerTest {
+
+ public static final String DOMAIN_DSN = "dc=zapodot,dc=org";
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder
+ .newInstance()
+ .usingDomainDsn(DOMAIN_DSN)
+ .importingLdifs("example.ldif")
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testLdapConnection() throws Exception {
+ final LDAPInterface ldapConnection = embeddedLdapRule.ldapConnection();
+ final SearchResult searchResult = ldapConnection.search(DOMAIN_DSN, SearchScope.SUB, "(objectClass=person)");
+ assertEquals(1, searchResult.getEntryCount());
+ }
+
+ @Test
+ public void testRawLdapConnection() throws Exception {
+ final String commonName = "Test person";
+ final String dn = String.format(
+ "cn=%s,ou=people,dc=zapodot,dc=org",
+ commonName);
+ LDAPConnection ldapConnection = embeddedLdapRule.unsharedLdapConnection();
+ try {
+ ldapConnection.add(new AddRequest(dn, Arrays.asList(
+ new Attribute("objectclass", "top", "person", "organizationalPerson", "inetOrgPerson"),
+ new Attribute("cn", commonName), new Attribute("sn", "Person"), new Attribute("uid", "test"))));
+ } finally {
+ // Forces the LDAP connection to be closed. This is not necessary as the rule will usually close it for you.
+ ldapConnection.close();
+ }
+ ldapConnection = embeddedLdapRule.unsharedLdapConnection();
+ final SearchResultEntry entry = ldapConnection.searchForEntry(new SearchRequest(dn,
+ SearchScope.BASE,
+ "(objectClass=person)"));
+ assertNotNull(entry);
+ }
+
+ @Test
+ public void testDirContext() throws Exception {
+ final DirContext dirContext = embeddedLdapRule.dirContext();
+ final SearchControls searchControls = new SearchControls();
+ searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+ final NamingEnumeration resultNamingEnumeration =
+ dirContext.search(DOMAIN_DSN, "(objectClass=person)", searchControls);
+ assertEquals(1, Iterators.size(Iterators.forEnumeration(resultNamingEnumeration)));
+ }
+
+ @Test
+ public void testContext() throws Exception {
+ final Context context = embeddedLdapRule.context();
+ final Object user = context.lookup("cn=Sondre Eikanger Kvalo,ou=people,dc=zapodot,dc=org");
+ assertNotNull(user);
+ }
+
+ @Test
+ public void testContextClose() throws Exception {
+ final Context context = embeddedLdapRule.context();
+ context.close();
+ assertNotNull(context.getNameInNamespace());
+
+ }
+
+ @Test
+ public void testEmbeddedServerPort() throws Exception {
+ assertTrue(embeddedLdapRule.embeddedServerPort() > 0);
+
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testNoPortAssignedYet() throws Exception {
+ final EmbeddedLdapServer embeddedLdapRule = new FakeEmbeddedLdapBuilder().build();
+ embeddedLdapRule.embeddedServerPort();
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerWithListeningAddressProvidedTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerWithListeningAddressProvidedTest.java
new file mode 100644
index 0000000..f653ca5
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerWithListeningAddressProvidedTest.java
@@ -0,0 +1,46 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import java.net.InetAddress;
+
+import static org.junit.Assert.assertEquals;
+
+public class EmbeddedLdapServerWithListeningAddressProvidedTest {
+
+ public static InetAddress inetAddress;
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder
+ .newInstance()
+ .usingDomainDsn("dc=zapodot,dc=org")
+ .importingLdifs("example.ldif")
+ .bindingToAddress(inetAddress.getHostAddress())
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @BeforeClass
+ public static void setupAddress() throws Exception {
+ inetAddress = InetAddress.getLocalHost();
+ }
+
+ @Test
+ public void testLookupAddress() throws Exception {
+ assertEquals(inetAddress.getHostAddress(),
+ embeddedLdapRule.unsharedLdapConnection().getConnectedAddress());
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerWithSpacesTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerWithSpacesTest.java
new file mode 100644
index 0000000..7b5ec78
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/EmbeddedLdapServerWithSpacesTest.java
@@ -0,0 +1,34 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.sdk.LDAPException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.junit.Assert.assertNotNull;
+
+public class EmbeddedLdapServerWithSpacesTest {
+
+ private final EmbeddedLdapServer embeddedLdapRule = FakeEmbeddedLdapBuilder
+ .newInstance()
+ .usingDomainDsn("dc=zapodot,dc=org")
+ .importingLdifs("folder with space/example.ldif")
+ .build();
+
+ @Before
+ public void setup() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).startEmbeddedLdapServer();
+ }
+
+ @After
+ public void teardown() throws LDAPException {
+ ((EmbeddedLdapServerImpl) embeddedLdapRule).takeDownEmbeddedLdapServer();
+ }
+
+ @Test
+ public void testIsUp() throws Exception {
+ assertNotNull(embeddedLdapRule.ldapConnection().getRootDSE());
+
+ }
+}
diff --git a/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/FakeEmbeddedLdapBuilder.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/FakeEmbeddedLdapBuilder.java
new file mode 100644
index 0000000..04ceae4
--- /dev/null
+++ b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/FakeEmbeddedLdapBuilder.java
@@ -0,0 +1,32 @@
+package org.zapodot.junit.ldap.internal;
+
+import com.unboundid.ldap.listener.InMemoryDirectoryServer;
+import com.unboundid.ldap.sdk.LDAPException;
+import org.zapodot.junit.ldap.EmbeddedLdapServer;
+
+import static org.zapodot.junit.ldap.internal.EmbeddedLdapServerImpl.createServer;
+
+class FakeEmbeddedLdapBuilder extends AbstractEmbeddedLdapBuilder {
+
+ static FakeEmbeddedLdapBuilder newInstance() {
+ return new FakeEmbeddedLdapBuilder();
+ }
+
+ @Override
+ protected FakeEmbeddedLdapBuilder getThis() {
+ return this;
+ }
+
+ EmbeddedLdapServer build() {
+ try {
+ InMemoryDirectoryServer server = createServer(createInMemoryServerConfiguration(), ldifsToImport);
+ return new EmbeddedLdapServerImpl(
+ server,
+ authenticationConfiguration) {
+
+ };
+ } catch (LDAPException e) {
+ throw new IllegalStateException("Can not initiate in-memory LDAP server due to an exception", e);
+ }
+ }
+}
diff --git a/embedded-ldap-junit/src/test/java/org/zapodot/junit/ldap/internal/jndi/ContextProxyFactoryTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/jndi/ContextProxyFactoryTest.java
similarity index 100%
rename from embedded-ldap-junit/src/test/java/org/zapodot/junit/ldap/internal/jndi/ContextProxyFactoryTest.java
rename to embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/jndi/ContextProxyFactoryTest.java
diff --git a/embedded-ldap-junit/src/test/java/org/zapodot/junit/ldap/internal/unboundid/LDAPInterfaceProxyFactoryTest.java b/embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/unboundid/LDAPInterfaceProxyFactoryTest.java
similarity index 100%
rename from embedded-ldap-junit/src/test/java/org/zapodot/junit/ldap/internal/unboundid/LDAPInterfaceProxyFactoryTest.java
rename to embedded-ldap-core/src/test/java/org/zapodot/junit/ldap/internal/unboundid/LDAPInterfaceProxyFactoryTest.java
diff --git a/embedded-ldap-core/src/test/resources/custom-schema.ldif b/embedded-ldap-core/src/test/resources/custom-schema.ldif
new file mode 100644
index 0000000..552eeca
--- /dev/null
+++ b/embedded-ldap-core/src/test/resources/custom-schema.ldif
@@ -0,0 +1,7 @@
+dn: cn=custom-schema
+objectClass: top
+objectClass: ldapSubEntry
+objectClass: subschema
+cn: custom-schema
+attributeTypes: ( 1.3.6.1.4.1.41609.1.75 NAME 'attribute' DESC 'A simple attribute' SUP name SINGLE-VALUE )
+objectClasses: ( 1.3.6.1.4.1.41609.2.13 NAME 'type' DESC 'A simple objectClass' SUP top STRUCTURAL MUST ( cn $ attribute ) MAY ( description ) )
diff --git a/embedded-ldap-core/src/test/resources/example.ldif b/embedded-ldap-core/src/test/resources/example.ldif
new file mode 100644
index 0000000..5eb286a
--- /dev/null
+++ b/embedded-ldap-core/src/test/resources/example.ldif
@@ -0,0 +1,28 @@
+version: 1
+
+dn: dc=zapodot,dc=org
+objectClass: domain
+objectClass: top
+dc: zapodot
+
+dn: ou=groups,dc=zapodot,dc=org
+objectclass: top
+objectclass: organizationalUnit
+ou: groups
+
+dn: ou=people,dc=zapodot,dc=org
+objectclass: top
+objectclass: organizationalUnit
+ou: people
+
+dn: cn=Sondre Eikanger Kvalo,ou=people,dc=zapodot,dc=org
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+uid: zapodot
+userPassword: password
+cn: Sondre Eikanger Kvalo
+cn:: U29uZHJlIEVpa2FuZ2VyIEt2YWzDuA==
+sn: Person
+description: Developer
\ No newline at end of file
diff --git a/embedded-ldap-core/src/test/resources/folder with space/example.ldif b/embedded-ldap-core/src/test/resources/folder with space/example.ldif
new file mode 100644
index 0000000..5eb286a
--- /dev/null
+++ b/embedded-ldap-core/src/test/resources/folder with space/example.ldif
@@ -0,0 +1,28 @@
+version: 1
+
+dn: dc=zapodot,dc=org
+objectClass: domain
+objectClass: top
+dc: zapodot
+
+dn: ou=groups,dc=zapodot,dc=org
+objectclass: top
+objectclass: organizationalUnit
+ou: groups
+
+dn: ou=people,dc=zapodot,dc=org
+objectclass: top
+objectclass: organizationalUnit
+ou: people
+
+dn: cn=Sondre Eikanger Kvalo,ou=people,dc=zapodot,dc=org
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+uid: zapodot
+userPassword: password
+cn: Sondre Eikanger Kvalo
+cn:: U29uZHJlIEVpa2FuZ2VyIEt2YWzDuA==
+sn: Person
+description: Developer
\ No newline at end of file
diff --git a/embedded-ldap-core/src/test/resources/folder/.placeholder b/embedded-ldap-core/src/test/resources/folder/.placeholder
new file mode 100644
index 0000000..e69de29
diff --git a/embedded-ldap-core/src/test/resources/invalid.ldif b/embedded-ldap-core/src/test/resources/invalid.ldif
new file mode 100644
index 0000000..bbd8c77
--- /dev/null
+++ b/embedded-ldap-core/src/test/resources/invalid.ldif
@@ -0,0 +1,2 @@
+zndskjnckjdsn
+daf
diff --git a/embedded-ldap-core/src/test/resources/standard-schema.ldif b/embedded-ldap-core/src/test/resources/standard-schema.ldif
new file mode 100644
index 0000000..063a7d8
--- /dev/null
+++ b/embedded-ldap-core/src/test/resources/standard-schema.ldif
@@ -0,0 +1,1546 @@
+# Retrieved from the UnboundID LDAP SDK repository http://sourceforge.net/p/ldap-sdk/code/HEAD/tree/trunk/resource/standard-schema.ldif
+# This file contains a set of standard schema definitions from various RFCs and
+# Internet Drafts. It is not intended to be a complete comprehensive schema
+# for all purposes, but it may be used by the LDAP SDK for cases in which
+# schema information may be required and no other definitions are available.
+#
+# Definitions in this class come from the following sources:
+# * RFC 2798:
+# Definition of the inetOrgPerson LDAP Object Class
+# * RFC 3045:
+# Storing Vendor Information in the LDAP Root DSE
+# * RFC 3112:
+# LDAP Authentication Password Schema
+# * RFC 3296:
+# Named Subordinate References in LDAP Directories
+# * RFC 4512:
+# LDAP Directory Information Models
+# * RFC 4519:
+# LDAP Schema for User Applications
+# * RFC 4523:
+# LDAP Schema Definitions for X.509 Certificates
+# * RFC 4524:
+# COSINE LDAP/X.500 Schema
+# * RFC 4530:
+# LDAP entryUUID Operational Attribute
+# * RFC 5020:
+# The LDAP entryDN Operational Attribute
+# * draft-good-ldap-changelog:
+# Definition of an Object Class to Hold LDAP Change Records
+# * draft-howard-namedobject:
+# A Structural Object Class for Arbitrary Auxiliary Object Classes
+# * draft-ietf-boreham-numsubordinates:
+# numSubordinates LDAP Operational Attribute
+# * draft-ietf-ldup-subentry:
+# LDAP Subentry Schema
+dn: cn=schema
+objectClass: top
+objectClass: ldapSubEntry
+objectClass: subschema
+cn: schema
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.3
+ DESC 'Attribute Type Description'
+ X-ORIGIN 'RFC 4517' )
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.6
+ DESC 'Bit String'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.7
+ DESC 'Boolean'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.11
+ DESC 'Country String'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.14
+ DESC 'Delivery Method'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.15
+ DESC 'Directory String'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.16
+ DESC 'DIT Content Rule Description'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.17
+ DESC 'DIT Structure Rule Description'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.12
+ DESC 'DN'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.21
+ DESC 'Enhanced Guide'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.22
+ DESC 'Facsimile Telephone Number'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.23
+ DESC 'Fax'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.24
+ DESC 'Generalized Time'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.25
+ DESC 'Guide'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.26
+ DESC 'IA5 String'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.27
+ DESC 'INTEGER'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.28
+ DESC 'JPEG'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.54
+ DESC 'LDAP Syntax Description'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.30
+ DESC 'Matching Rule Description'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.31
+ DESC 'Matching Rule Use Description'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.34
+ DESC 'Name And Optional UID'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.35
+ DESC 'Name Form Description'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.36
+ DESC 'Numeric String'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.37
+ DESC 'Object Class Description'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.40
+ DESC 'Octet String'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.38
+ DESC 'OID'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.39
+ DESC 'Other Mailbox'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.41
+ DESC 'Postal Address'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.44
+ DESC 'Printable String'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.58
+ DESC 'Substring Assertion'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.50
+ DESC 'Telephone Number'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.51
+ DESC 'Teletex Terminal Identifier'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.52
+ DESC 'Telex Number'
+ X-ORIGIN 'RFC 4517')
+ldapSyntaxes: ( 1.3.6.1.4.1.1466.115.121.1.53
+ DESC 'UTC Time'
+ X-ORIGIN 'RFC 4517')
+matchingRules: ( 2.5.13.16
+ NAME 'bitStringMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.6
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.13
+ NAME 'booleanMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 1.3.6.1.4.1.1466.109.114.1
+ NAME 'caseExactIA5Match'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.5
+ NAME 'caseExactMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.6
+ NAME 'caseExactOrderingMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.7
+ NAME 'caseExactSubstringsMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.58
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 1.3.6.1.4.1.1466.109.114.2
+ NAME 'caseIgnoreIA5Match'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 1.3.6.1.4.1.1466.109.114.3
+ NAME 'caseIgnoreIA5SubstringsMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.58
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.11
+ NAME 'caseIgnoreListMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.41
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.12
+ NAME 'caseIgnoreListSubstringsMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.58
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.2
+ NAME 'caseIgnoreMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.3
+ NAME 'caseIgnoreOrderingMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.4
+ NAME 'caseIgnoreSubstringsMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.58
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.31
+ NAME 'directoryStringFirstComponentMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.1
+ NAME 'distinguishedNameMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.27
+ NAME 'generalizedTimeMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.28
+ NAME 'generalizedTimeOrderingMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.29
+ NAME 'integerFirstComponentMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.14
+ NAME 'integerMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.15
+ NAME 'integerOrderingMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.33
+ NAME 'keywordMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.8
+ NAME 'numericStringMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.36
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.9
+ NAME 'numericStringOrderingMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.36
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.10
+ NAME 'numericStringSubstringsMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.58
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.30
+ NAME 'objectIdentifierFirstComponentMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.0
+ NAME 'objectIdentifierMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.17
+ NAME 'octetStringMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.18
+ NAME 'octetStringOrderingMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.20
+ NAME 'telephoneNumberMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.50
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.21
+ NAME 'telephoneNumberSubstringsMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.58
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.23
+ NAME 'uniqueMemberMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.34
+ X-ORIGIN 'RFC 4517' )
+matchingRules: ( 2.5.13.32
+ NAME 'wordMatch'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4517' )
+attributeTypes: ( 2.5.4.0
+ NAME 'objectClass'
+ EQUALITY objectIdentifierMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.4.1
+ NAME 'aliasedObjectName'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.18.3
+ NAME 'creatorsName'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.18.1
+ NAME 'createTimestamp'
+ EQUALITY generalizedTimeMatch
+ ORDERING generalizedTimeOrderingMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.18.4
+ NAME 'modifiersName'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.18.2
+ NAME 'modifyTimestamp'
+ EQUALITY generalizedTimeMatch
+ ORDERING generalizedTimeOrderingMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.9
+ NAME 'structuralObjectClass'
+ EQUALITY objectIdentifierMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.10
+ NAME 'governingStructureRule'
+ EQUALITY integerMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.18.10
+ NAME 'subschemaSubentry'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.6
+ NAME 'objectClasses'
+ EQUALITY objectIdentifierFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.37
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.5
+ NAME 'attributeTypes'
+ EQUALITY objectIdentifierFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.3
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.4
+ NAME 'matchingRules'
+ EQUALITY objectIdentifierFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.30
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.8
+ NAME 'matchingRuleUse'
+ EQUALITY objectIdentifierFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.31
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.1466.101.120.16
+ NAME 'ldapSyntaxes'
+ EQUALITY objectIdentifierFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.54
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.2
+ NAME 'dITContentRules'
+ EQUALITY objectIdentifierFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.16
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.1
+ NAME 'dITStructureRules'
+ EQUALITY integerFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.17
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.21.7
+ NAME 'nameForms'
+ EQUALITY objectIdentifierFirstComponentMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.35
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.1466.101.120.6
+ NAME 'altServer'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.1466.101.120.5
+ NAME 'namingContexts'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.1466.101.120.13
+ NAME 'supportedControl'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.1466.101.120.7
+ NAME 'supportedExtension'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.4203.1.3.5
+ NAME 'supportedFeatures'
+ EQUALITY objectIdentifierMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.1466.101.120.15
+ NAME 'supportedLDAPVersion'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 1.3.6.1.4.1.1466.101.120.14
+ NAME 'supportedSASLMechanisms'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 4512' )
+attributeTypes: ( 2.5.4.41
+ NAME 'name'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.15
+ NAME 'businessCategory'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.6
+ NAME 'c'
+ SUP name
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.11
+ SINGLE-VALUE
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.3
+ NAME 'cn'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 0.9.2342.19200300.100.1.25
+ NAME 'dc'
+ EQUALITY caseIgnoreIA5Match
+ SUBSTR caseIgnoreIA5SubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ SINGLE-VALUE
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.13
+ NAME 'description'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.27
+ NAME 'destinationIndicator'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.49
+ NAME 'distinguishedName'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.46
+ NAME 'dnQualifier'
+ EQUALITY caseIgnoreMatch
+ ORDERING caseIgnoreOrderingMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.47
+ NAME 'enhancedSearchGuide'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.21
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.23
+ NAME 'facsimileTelephoneNumber'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.22
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.44
+ NAME 'generationQualifier'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.42
+ NAME 'givenName'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.51
+ NAME 'houseIdentifier'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.43
+ NAME 'initials'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.25
+ NAME 'internationalISDNNumber'
+ EQUALITY numericStringMatch
+ SUBSTR numericStringSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.36
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.7
+ NAME 'l'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.31
+ NAME 'member'
+ SUP distinguishedName
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.10
+ NAME 'o'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.11
+ NAME 'ou'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.32
+ NAME 'owner'
+ SUP distinguishedName
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.19
+ NAME 'physicalDeliveryOfficeName'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.16
+ NAME 'postalAddress'
+ EQUALITY caseIgnoreListMatch
+ SUBSTR caseIgnoreListSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.41
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.17
+ NAME 'postalCode'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.18
+ NAME 'postOfficeBox'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.28
+ NAME 'preferredDeliveryMethod'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.14
+ SINGLE-VALUE
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.26
+ NAME 'registeredAddress'
+ SUP postalAddress
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.41
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.33
+ NAME 'roleOccupant'
+ SUP distinguishedName
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.14
+ NAME 'searchGuide'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.25
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.34
+ NAME 'seeAlso'
+ SUP distinguishedName
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.5
+ NAME 'serialNumber'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.4
+ NAME 'sn'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.8
+ NAME 'st'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.9
+ NAME 'street'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.20
+ NAME 'telephoneNumber'
+ EQUALITY telephoneNumberMatch
+ SUBSTR telephoneNumberSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.50
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.22
+ NAME 'teletexTerminalIdentifier'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.51
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.21
+ NAME 'telexNumber'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.52
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.12
+ NAME 'title'
+ SUP name
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 0.9.2342.19200300.100.1.1
+ NAME 'uid'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.50
+ NAME 'uniqueMember'
+ EQUALITY uniqueMemberMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.34
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.35
+ NAME 'userPassword'
+ EQUALITY octetStringMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.24
+ NAME 'x121Address'
+ EQUALITY numericStringMatch
+ SUBSTR numericStringSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.36
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.5.4.45
+ NAME 'x500UniqueIdentifier'
+ EQUALITY bitStringMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.6
+ X-ORIGIN 'RFC 4519' )
+attributeTypes: ( 2.16.840.1.113730.3.1.1
+ NAME 'carLicense'
+ DESC 'vehicle license or registration plate'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.16.840.1.113730.3.1.2
+ NAME 'departmentNumber'
+ DESC 'identifies a department within an organization'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.16.840.1.113730.3.1.241
+ NAME 'displayName'
+ DESC 'preferred name of a person to be used when displaying entries'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.16.840.1.113730.3.1.3
+ NAME 'employeeNumber'
+ DESC 'numerically identifies an employee within an organization'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.16.840.1.113730.3.1.4
+ NAME 'employeeType'
+ DESC 'type of employment for a person'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 0.9.2342.19200300.100.1.60
+ NAME 'jpegPhoto'
+ DESC 'a JPEG image'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.28
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.16.840.1.113730.3.1.39
+ NAME 'preferredLanguage'
+ DESC 'preferred written or spoken language for a person'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.16.840.1.113730.3.1.40
+ NAME 'userSMIMECertificate'
+ DESC 'PKCS#7 SignedData used to support S/MIME'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.5
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.16.840.1.113730.3.1.216
+ NAME 'userPKCS12'
+ DESC 'PKCS #12 PFX PDU for exchange of personal identity information'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.5
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 2.5.4.36
+ NAME 'userCertificate'
+ DESC 'X.509 user certificate'
+ EQUALITY certificateExactMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.8
+ X-ORIGIN 'RFC 4523' )
+attributeTypes: ( 2.5.4.37
+ NAME 'cACertificate'
+ DESC 'X.509 CA certificate'
+ EQUALITY certificateExactMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.8
+ X-ORIGIN 'RFC 4523' )
+attributeTypes: ( 2.5.4.40
+ NAME 'crossCertificatePair'
+ DESC 'X.509 cross certificate pair'
+ EQUALITY certificatePairExactMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.10
+ X-ORIGIN 'RFC 4523' )
+attributeTypes: ( 2.5.4.39
+ NAME 'certificateRevocationList'
+ DESC 'X.509 certificate revocation list'
+ EQUALITY certificateListExactMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.9
+ X-ORIGIN 'RFC 4523' )
+attributeTypes: ( 2.5.4.38
+ NAME 'authorityRevocationList'
+ DESC 'X.509 authority revocation list'
+ EQUALITY certificateListExactMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.9
+ X-ORIGIN 'RFC 4523' )
+attributeTypes: ( 2.5.4.53
+ NAME 'deltaRevocationList'
+ DESC 'X.509 delta revocation list'
+ EQUALITY certificateListExactMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.9
+ X-ORIGIN 'RFC 4523' )
+attributeTypes: ( 2.5.4.52
+ NAME 'supportedAlgorithms'
+ DESC 'X.509 supported algorithms'
+ EQUALITY algorithmIdentifierMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.49
+ X-ORIGIN 'RFC 4523' )
+attributeTypes: ( 0.9.2342.19200300.100.1.37
+ NAME 'associatedDomain'
+ EQUALITY caseIgnoreIA5Match
+ SUBSTR caseIgnoreIA5SubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.38
+ NAME 'associatedName'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.48
+ NAME 'buildingName'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.43
+ NAME 'co'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.14
+ NAME 'documentAuthor'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.11
+ NAME 'documentIdentifier'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.15
+ NAME 'documentLocation'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.56
+ NAME 'documentPublisher'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.12
+ NAME 'documentTitle'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.13
+ NAME 'documentVersion'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.5
+ NAME 'drink'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.20
+ NAME 'homePhone'
+ EQUALITY telephoneNumberMatch
+ SUBSTR telephoneNumberSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.50
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.39
+ NAME 'homePostalAddress'
+ EQUALITY caseIgnoreListMatch
+ SUBSTR caseIgnoreListSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.41
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.9
+ NAME 'host'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.4
+ NAME 'info'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{2048}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.3
+ NAME 'mail'
+ EQUALITY caseIgnoreIA5Match
+ SUBSTR caseIgnoreIA5SubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.10
+ NAME 'manager'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.41
+ NAME 'mobile'
+ EQUALITY telephoneNumberMatch
+ SUBSTR telephoneNumberSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.50
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.45
+ NAME 'organizationalStatus'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.42
+ NAME 'pager'
+ EQUALITY telephoneNumberMatch
+ SUBSTR telephoneNumberSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.50
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.40
+ NAME 'personalTitle'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.6
+ NAME 'roomNumber'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.21
+ NAME 'secretary'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.44
+ NAME 'uniqueIdentifier'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.8
+ NAME 'userClass'
+ EQUALITY caseIgnoreMatch
+ SUBSTR caseIgnoreSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+ X-ORIGIN 'RFC 4524' )
+attributeTypes: ( 0.9.2342.19200300.100.1.55
+ NAME 'audio'
+ EQUALITY octetStringMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{250000}
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 0.9.2342.19200300.100.1.7
+ NAME 'photo'
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 1.3.6.1.4.1.250.1.57
+ NAME 'labeledURI'
+ EQUALITY caseExactMatch
+ SUBSTR caseExactSubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ X-ORIGIN 'RFC 2798' )
+attributeTypes: ( 1.3.6.1.1.20
+ NAME 'entryDN'
+ DESC 'DN of the entry'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 5020' )
+attributeTypes: ( 2.16.840.1.113730.3.1.34
+ NAME 'ref'
+ DESC 'named reference - a labeledURI'
+ EQUALITY caseExactMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ USAGE distributedOperation
+ X-ORIGIN 'RFC 3296' )
+attributeTypes: ( 1.3.6.1.1.4
+ NAME 'vendorName'
+ EQUALITY 1.3.6.1.4.1.1466.109.114.1
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 3045' )
+attributeTypes: ( 1.3.6.1.1.5
+ NAME 'vendorVersion'
+ EQUALITY 1.3.6.1.4.1.1466.109.114.1
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 3045' )
+attributeTypes: ( 1.3.6.1.1.16.4
+ NAME 'entryUUID'
+ DESC 'UUID of the entry'
+ EQUALITY uuidMatch
+ ORDERING uuidOrderingMatch
+ SYNTAX 1.3.6.1.1.16.1
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'RFC 4530' )
+attributeTypes: ( 1.3.6.1.4.1.453.16.2.103
+ NAME 'numSubordinates'
+ DESC 'count of immediate subordinates'
+ EQUALITY integerMatch
+ ORDERING integerOrderingMatch
+ SYNTAX 1.3.6.1.4.1.453.16.2.103
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE directoryOperation
+ X-ORIGIN 'draft-ietf-boreham-numsubordinates' )
+attributeTypes: ( 1.3.6.1.4.1.7628.5.4.1
+ NAME 'inheritable'
+ SYNTAX BOOLEAN
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE dSAOperation
+ X-ORIGIN 'draft-ietf-ldup-subentry' )
+attributeTypes: ( 1.3.6.1.4.1.7628.5.4.2
+ NAME 'blockInheritance'
+ SYNTAX BOOLEAN
+ SINGLE-VALUE
+ NO-USER-MODIFICATION
+ USAGE dSAOperation
+ X-ORIGIN 'draft-ietf-ldup-subentry' )
+attributeTypes: ( 2.16.840.1.113730.3.1.5
+ NAME 'changeNumber'
+ DESC 'a number which uniquely identifies a change made to a directory entry'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ EQUALITY integerMatch
+ ORDERING integerOrderingMatch
+ SINGLE-VALUE
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 2.16.840.1.113730.3.1.6
+ NAME 'targetDN'
+ DESC 'the DN of the entry which was modified'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 2.16.840.1.113730.3.1.7
+ NAME 'changeType'
+ DESC 'the type of change made to an entry'
+ EQUALITY caseIgnoreMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ SINGLE-VALUE
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 2.16.840.1.113730.3.1.8
+ NAME 'changes'
+ DESC 'a set of changes to apply to an entry'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 2.16.840.1.113730.3.1.9
+ NAME 'newRDN'
+ DESC 'the new RDN of an entry which is the target of a modrdn operation'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 2.16.840.1.113730.3.1.10
+ NAME 'deleteOldRDN'
+ DESC 'a flag which indicates if the old RDN should be retained as an
+ attribute of the entry'
+ EQUALITY booleanMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+ SINGLE-VALUE
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 2.16.840.1.113730.3.1.11
+ NAME 'newSuperior'
+ DESC 'the new parent of an entry which is the target of a moddn operation'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ SINGLE-VALUE
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 2.16.840.1.113730.3.1.35
+ NAME 'changelog'
+ DESC 'the distinguished name of the entry which contains the set of entries
+ comprising the server changelog'
+ EQUALITY distinguishedNameMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+ X-ORIGIN 'draft-good-ldap-changelog' )
+attributeTypes: ( 1.3.6.1.4.1.4203.1.3.3
+ NAME 'supportedAuthPasswordSchemes'
+ DESC 'supported password storage schemes'
+ EQUALITY caseExactIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32}
+ USAGE dSAOperation
+ X-ORIGIN 'RFC 3112' )
+attributeTypes: ( 1.3.6.1.4.1.4203.1.3.4
+ NAME 'authPassword'
+ DESC 'password authentication information'
+ EQUALITY 1.3.6.1.4.1.4203.1.2.2
+ SYNTAX 1.3.6.1.4.1.4203.1.1.2
+ X-ORIGIN 'RFC 3112' )
+attributeTypes: ( 2.16.840.1.113730.3.1.55
+ NAME 'aci'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+ USAGE directoryOperation
+ X-ORIGIN 'De facto standard' )
+objectClasses: ( 2.5.6.0
+ NAME 'top'
+ ABSTRACT
+ MUST objectClass
+ X-ORIGIN 'RFC 4512' )
+objectClasses: ( 2.5.6.1
+ NAME 'alias'
+ SUP top
+ STRUCTURAL
+ MUST aliasedObjectName
+ X-ORIGIN 'RFC 4512' )
+objectClasses: ( 1.3.6.1.4.1.1466.101.120.111
+ NAME 'extensibleObject'
+ SUP top
+ AUXILIARY
+ X-ORIGIN 'RFC 4512' )
+objectClasses: ( 2.5.20.1
+ NAME 'subschema'
+ AUXILIARY
+ MAY ( dITStructureRules $
+ nameForms $
+ ditContentRules $
+ objectClasses $
+ attributeTypes $
+ matchingRules $
+ matchingRuleUse )
+ X-ORIGIN 'RFC 4512' )
+objectClasses: ( 2.5.6.11
+ NAME 'applicationProcess'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( seeAlso $
+ ou $
+ l $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.2
+ NAME 'country'
+ SUP top
+ STRUCTURAL
+ MUST c
+ MAY ( searchGuide $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 1.3.6.1.4.1.1466.344
+ NAME 'dcObject'
+ SUP top
+ AUXILIARY
+ MUST dc
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.14
+ NAME 'device'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( serialNumber $
+ seeAlso $
+ owner $
+ ou $
+ o $
+ l $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.9
+ NAME 'groupOfNames'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( member $
+ businessCategory $
+ seeAlso $
+ owner $
+ ou $
+ o $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.17
+ NAME 'groupOfUniqueNames'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( uniqueMember $
+ businessCategory $
+ seeAlso $
+ owner $
+ ou $
+ o $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.3
+ NAME 'locality'
+ SUP top
+ STRUCTURAL
+ MAY ( street $
+ seeAlso $
+ searchGuide $
+ st $
+ l $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.4
+ NAME 'organization'
+ SUP top
+ STRUCTURAL
+ MUST o
+ MAY ( userPassword $
+ searchGuide $
+ seeAlso $
+ businessCategory $
+ x121Address $
+ registeredAddress $
+ destinationIndicator $
+ preferredDeliveryMethod $
+ telexNumber $
+ teletexTerminalIdentifier $
+ telephoneNumber $
+ internationalISDNNumber $
+ facsimileTelephoneNumber $
+ street $
+ postOfficeBox $
+ postalCode $
+ postalAddress $
+ physicalDeliveryOfficeName $
+ st $
+ l $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.6
+ NAME 'person'
+ SUP top
+ STRUCTURAL
+ MUST ( sn $
+ cn )
+ MAY ( userPassword $
+ telephoneNumber $
+ seeAlso $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.7
+ NAME 'organizationalPerson'
+ SUP person
+ STRUCTURAL
+ MAY ( title $
+ x121Address $
+ registeredAddress $
+ destinationIndicator $
+ preferredDeliveryMethod $
+ telexNumber $
+ teletexTerminalIdentifier $
+ telephoneNumber $
+ internationalISDNNumber $
+ facsimileTelephoneNumber $
+ street $
+ postOfficeBox $
+ postalCode $
+ postalAddress $
+ physicalDeliveryOfficeName $
+ ou $
+ st $
+ l )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.8
+ NAME 'organizationalRole'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( x121Address $
+ registeredAddress $
+ destinationIndicator $
+ preferredDeliveryMethod $
+ telexNumber $
+ teletexTerminalIdentifier $
+ telephoneNumber $
+ internationalISDNNumber $
+ facsimileTelephoneNumber $
+ seeAlso $
+ roleOccupant $
+ preferredDeliveryMethod $
+ street $
+ postOfficeBox $
+ postalCode $
+ postalAddress $
+ physicalDeliveryOfficeName $
+ ou $
+ st $
+ l $
+ description )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.5
+ NAME 'organizationalUnit'
+ SUP top
+ STRUCTURAL
+ MUST ou
+ MAY ( businessCategory $
+ description $
+ destinationIndicator $
+ facsimileTelephoneNumber $
+ internationalISDNNumber $
+ l $
+ physicalDeliveryOfficeName $
+ postalAddress $
+ postalCode $
+ postOfficeBox $
+ preferredDeliveryMethod $
+ registeredAddress $
+ searchGuide $
+ seeAlso $
+ st $
+ street $
+ telephoneNumber $
+ teletexTerminalIdentifier $
+ telexNumber $
+ userPassword $
+ x121Address )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.5.6.10
+ NAME 'residentialPerson'
+ SUP person
+ STRUCTURAL
+ MUST l
+ MAY ( businessCategory $
+ x121Address $
+ registeredAddress $
+ destinationIndicator $
+ preferredDeliveryMethod $
+ telexNumber $
+ teletexTerminalIdentifier $
+ telephoneNumber $
+ internationalISDNNumber $
+ facsimileTelephoneNumber $
+ preferredDeliveryMethod $
+ street $
+ postOfficeBox $
+ postalCode $
+ postalAddress $
+ physicalDeliveryOfficeName $
+ st $
+ l )
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 1.3.6.1.1.3.1
+ NAME 'uidObject'
+ SUP top
+ AUXILIARY
+ MUST uid
+ X-ORIGIN 'RFC 4519' )
+objectClasses: ( 2.16.840.1.113730.3.2.2
+ NAME 'inetOrgPerson'
+ SUP organizationalPerson
+ STRUCTURAL
+ MAY ( audio $
+ businessCategory $
+ carLicense $
+ departmentNumber $
+ displayName $
+ employeeNumber $
+ employeeType $
+ givenName $
+ homePhone $
+ homePostalAddress $
+ initials $
+ jpegPhoto $
+ labeledURI $
+ mail $
+ manager $
+ mobile $
+ o $
+ pager $
+ photo $
+ roomNumber $
+ secretary $
+ uid $
+ userCertificate $
+ x500uniqueIdentifier $
+ preferredLanguage $
+ userSMIMECertificate $
+ userPKCS12 )
+ X-ORIGIN 'RFC 2798' )
+objectClasses: ( 2.5.6.21
+ NAME 'pkiUser'
+ DESC 'X.509 PKI User'
+ SUP top AUXILIARY
+ MAY userCertificate
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 2.5.6.22
+ NAME 'pkiCA'
+ DESC 'X.509 PKI Certificate Authority'
+ SUP top
+ AUXILIARY
+ MAY ( cACertificate $
+ certificateRevocationList $
+ authorityRevocationList $
+ crossCertificatePair )
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 2.5.6.19
+ NAME 'cRLDistributionPoint'
+ DESC 'X.509 CRL distribution point'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( certificateRevocationList $
+ authorityRevocationList $
+ deltaRevocationList )
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 2.5.6.23
+ NAME 'deltaCRL'
+ DESC 'X.509 delta CRL'
+ SUP top
+ AUXILIARY
+ MAY deltaRevocationList
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 2.5.6.15
+ NAME 'strongAuthenticationUser'
+ DESC 'X.521 strong authentication user'
+ SUP top
+ AUXILIARY
+ MUST userCertificate
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 2.5.6.18
+ NAME 'userSecurityInformation'
+ DESC 'X.521 user security information'
+ SUP top
+ AUXILIARY
+ MAY ( supportedAlgorithms )
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 2.5.6.16
+ NAME 'certificationAuthority'
+ DESC 'X.509 certificate authority'
+ SUP top
+ AUXILIARY
+ MUST ( authorityRevocationList $
+ certificateRevocationList $
+ cACertificate )
+ MAY crossCertificatePair
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 2.5.6.16.2
+ NAME 'certificationAuthority-V2'
+ DESC 'X.509 certificate authority, version 2'
+ SUP certificationAuthority
+ AUXILIARY
+ MAY deltaRevocationList
+ X-ORIGIN 'RFC 4523' )
+objectClasses: ( 0.9.2342.19200300.100.4.5
+ NAME 'account'
+ SUP top STRUCTURAL
+ MUST uid
+ MAY ( description $
+ seeAlso $
+ l $
+ o $
+ ou $
+ host )
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.6
+ NAME 'document'
+ SUP top STRUCTURAL
+ MUST documentIdentifier
+ MAY ( cn $
+ description $
+ seeAlso $
+ l $
+ o $
+ ou $
+ documentTitle $
+ documentVersion $
+ documentAuthor $
+ documentLocation $
+ documentPublisher )
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.9
+ NAME 'documentSeries'
+ SUP top STRUCTURAL
+ MUST cn
+ MAY ( description $
+ l $
+ o $
+ ou $
+ seeAlso $
+ telephonenumber )
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.13
+ NAME 'domain'
+ SUP top
+ STRUCTURAL
+ MUST dc
+ MAY ( userPassword $
+ searchGuide $
+ seeAlso $
+ businessCategory $
+ x121Address $
+ registeredAddress $
+ destinationIndicator $
+ preferredDeliveryMethod $
+ telexNumber $
+ teletexTerminalIdentifier $
+ telephoneNumber $
+ internationaliSDNNumber $
+ facsimileTelephoneNumber $
+ street $
+ postOfficeBox $
+ postalCode $
+ postalAddress $
+ physicalDeliveryOfficeName $
+ st $
+ l $
+ description $
+ o $
+ associatedName )
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.17
+ NAME 'domainRelatedObject'
+ SUP top
+ AUXILIARY
+ MUST associatedDomain
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.18
+ NAME 'friendlyCountry'
+ SUP country
+ STRUCTURAL
+ MUST co
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.14
+ NAME 'rFC822localPart'
+ SUP domain
+ STRUCTURAL
+ MAY ( cn $
+ description $
+ destinationIndicator $
+ facsimileTelephoneNumber $
+ internationaliSDNNumber $
+ physicalDeliveryOfficeName $
+ postalAddress $
+ postalCode $
+ postOfficeBox $
+ preferredDeliveryMethod $
+ registeredAddress $
+ seeAlso $
+ sn $
+ street $
+ telephoneNumber $
+ teletexTerminalIdentifier $
+ telexNumber $
+ x121Address )
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.7
+ NAME 'room'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( roomNumber $
+ description $
+ seeAlso $
+ telephoneNumber )
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 0.9.2342.19200300.100.4.19
+ NAME 'simpleSecurityObject'
+ SUP top
+ AUXILIARY
+ MUST userPassword
+ X-ORIGIN 'RFC 4524' )
+objectClasses: ( 2.16.840.1.113730.3.2.6
+ NAME 'referral'
+ DESC 'named subordinate reference object'
+ STRUCTURAL
+ MUST ref
+ X-ORIGIN 'RFC 3296' )
+objectClasses: ( 1.3.6.1.4.1.5322.13.1.1
+ NAME 'namedObject'
+ SUP top
+ STRUCTURAL MAY cn
+ X-ORIGIN 'draft-howard-namedobject' )
+objectClasses: ( 2.16.840.1.113719.2.142.6.1.1
+ NAME 'ldapSubEntry'
+ DESC 'LDAP Subentry class, version 1'
+ SUP top
+ STRUCTURAL
+ MAY ( cn )
+ X-ORIGIN 'draft-ietf-ldup-subentry' )
+objectClasses: ( 1.3.6.1.4.1.7628.5.6.1.1
+ NAME 'inheritableLDAPSubEntry'
+ DESC 'Inheritable LDAP Subentry class, version 1'
+ SUP ldapSubEntry
+ STRUCTURAL
+ MUST ( inheritable )
+ MAY ( blockInheritance )
+ X-ORIGIN 'draft-ietf-ldup-subentry' )
+objectClasses: ( 2.16.840.1.113730.3.2.1
+ NAME 'changeLogEntry'
+ SUP top
+ STRUCTURAL
+ MUST ( changeNumber $
+ targetDN $
+ changeType )
+ MAY ( changes $
+ newRDN $
+ deleteOldRDN $
+ newSuperior )
+ X-ORIGIN 'draft-good-ldap-changelog' )
+objectClasses: ( 1.3.6.1.4.1.4203.1.4.7
+ NAME 'authPasswordObject'
+ DESC 'authentication password mix in class'
+ AUXILIARY
+ MAY authPassword
+ X-ORIGIN 'RFC 3112' )
+
diff --git a/pom.xml b/pom.xml
index e659959..725fa13 100644
--- a/pom.xml
+++ b/pom.xml
@@ -131,8 +131,9 @@
cobertura-maven-plugin
${maven-cobertura-plugin.version}
- xml
+ html
256m
+ true