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