diff --git a/connector/ldap/ldap_test.go b/connector/ldap/ldap_test.go
index fa6b706246189c5decfe7c7812aae5051759d95b..1ed2f878718789741f05f9e361eb2f8d534995f5 100644
--- a/connector/ldap/ldap_test.go
+++ b/connector/ldap/ldap_test.go
@@ -1,20 +1,18 @@
 package ldap
 
 import (
-	"bytes"
 	"context"
+	"fmt"
 	"io/ioutil"
-	"net/url"
 	"os"
-	"os/exec"
 	"path/filepath"
-	"sync"
 	"testing"
-	"text/template"
 	"time"
 
 	"github.com/kylelemons/godebug/pretty"
 	"github.com/sirupsen/logrus"
+	"github.com/testcontainers/testcontainers-go"
+	"github.com/testcontainers/testcontainers-go/wait"
 
 	"github.com/dexidp/dex/connector"
 )
@@ -50,12 +48,6 @@ type subtest struct {
 
 func TestQuery(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -125,12 +117,6 @@ userpassword: bar
 
 func TestQueryWithEmailSuffix(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -187,12 +173,6 @@ userpassword: bar
 
 func TestUserFilter(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=Seattle,dc=example,dc=org
 objectClass: organizationalUnit
 ou: Seattle
@@ -283,12 +263,6 @@ userpassword: bar
 
 func TestGroupQuery(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -371,12 +345,6 @@ member: cn=jane,ou=People,dc=example,dc=org
 
 func TestGroupsOnUserEntity(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -468,12 +436,6 @@ gidNumber: 1002
 
 func TestGroupFilter(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -574,12 +536,6 @@ member: cn=jane,ou=People,dc=example,dc=org
 
 func TestStartTLS(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -617,12 +573,6 @@ userpassword: foo
 
 func TestInsecureSkipVerify(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -660,12 +610,6 @@ userpassword: foo
 
 func TestLDAPS(t *testing.T) {
 	schema := `
-dn: dc=example,dc=org
-objectClass: dcObject
-objectClass: organization
-o: Example Company
-dc: example
-
 dn: ou=People,dc=example,dc=org
 objectClass: organizationalUnit
 ou: People
@@ -729,8 +673,7 @@ func TestUsernamePrompt(t *testing.T) {
 // runTests runs a set of tests against an LDAP schema. It does this by
 // setting up an OpenLDAP server and injecting the provided scheme.
 //
-// The tests require the slapd and ldapadd binaries available in the host
-// machine's PATH.
+// The tests require Docker.
 //
 // The DEX_LDAP_TESTS must be set to "1"
 func runTests(t *testing.T, schema string, connMethod connectionMethod, config *Config, tests []subtest) {
@@ -738,12 +681,6 @@ func runTests(t *testing.T, schema string, connMethod connectionMethod, config *
 		t.Skipf("%s not set. Skipping test (run 'export %s=1' to run tests)", envVar, envVar)
 	}
 
-	for _, cmd := range []string{"slapd", "ldapadd"} {
-		if _, err := exec.LookPath(cmd); err != nil {
-			t.Errorf("%s not available", cmd)
-		}
-	}
-
 	wd, err := os.Getwd()
 	if err != nil {
 		t.Fatal(err)
@@ -755,100 +692,65 @@ func runTests(t *testing.T, schema string, connMethod connectionMethod, config *
 	}
 	defer os.RemoveAll(tempDir)
 
-	configBytes := new(bytes.Buffer)
-
-	data := tmplData{
-		TempDir:  tempDir,
-		Includes: includes(t, wd),
-	}
-	data.TLSCertPath, data.TLSKeyPath = tlsAssets(t, wd)
-
-	if err := slapdConfigTmpl.Execute(configBytes, data); err != nil {
+	schemaPath := filepath.Join(tempDir, "schema.ldif")
+	if err := ioutil.WriteFile(schemaPath, []byte(schema), 0777); err != nil {
 		t.Fatal(err)
 	}
 
-	configPath := filepath.Join(tempDir, "ldap.conf")
-	if err := ioutil.WriteFile(configPath, configBytes.Bytes(), 0644); err != nil {
-		t.Fatal(err)
-	}
-	schemaPath := filepath.Join(tempDir, "schema.ldap")
-	if err := ioutil.WriteFile(schemaPath, []byte(schema), 0644); err != nil {
-		t.Fatal(err)
+	req := testcontainers.ContainerRequest{
+		Image:        "osixia/openldap:1.3.0",
+		ExposedPorts: []string{"389/tcp", "636/tcp"},
+		Cmd:          []string{"--copy-service"},
+		Env: map[string]string{
+			"LDAP_BASE_DN":           "dc=example,dc=org",
+			"LDAP_TLS":               "true",
+			"LDAP_TLS_VERIFY_CLIENT": "try",
+		},
+		BindMounts: map[string]string{
+			filepath.Join(wd, "testdata", "certs"): "/container/service/slapd/assets/certs",
+			schemaPath:                             "/container/service/slapd/assets/config/bootstrap/ldif/99-schema.ldif",
+		},
+		WaitingFor: wait.ForAll(
+			wait.ForLog("slapd starting").WithOccurrence(3).WithStartupTimeout(time.Minute),
+			wait.ForListeningPort("389/tcp"),
+			wait.ForListeningPort("636/tcp"),
+		),
 	}
 
-	socketPath := url.QueryEscape(filepath.Join(tempDir, "ldap.unix"))
+	ctx := context.Background()
 
-	slapdOut := new(bytes.Buffer)
+	slapd, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
+		ContainerRequest: req,
+		Started:          true,
+	})
+	if err != nil {
+		if slapd != nil {
+			logs, err := slapd.Logs(ctx)
+			if err == nil {
+				defer logs.Close()
+
+				logLines, err := ioutil.ReadAll(logs)
+				if err != nil {
+					t.Log(string(logLines))
+				}
+			}
+		}
 
-	cmd := exec.Command(
-		"slapd",
-		"-d", "any",
-		"-h", "ldap://localhost:10389/ ldaps://localhost:10636/ ldapi://"+socketPath,
-		"-f", configPath,
-	)
-	cmd.Stdout = slapdOut
-	cmd.Stderr = slapdOut
-	if err := cmd.Start(); err != nil {
 		t.Fatal(err)
 	}
+	defer slapd.Terminate(ctx)
 
-	var (
-		// Wait group finishes once slapd has exited.
-		//
-		// Use a wait group because multiple goroutines can't listen on
-		// cmd.Wait(). It triggers the race detector.
-		wg = new(sync.WaitGroup)
-		// Ensure only one condition can set the slapdFailed boolean.
-		once        = new(sync.Once)
-		slapdFailed bool
-	)
-
-	wg.Add(1)
-	go func() { cmd.Wait(); wg.Done() }()
-
-	defer func() {
-		if slapdFailed {
-			// If slapd exited before it was killed, print its logs.
-			t.Logf("%s\n", slapdOut)
-		}
-	}()
-
-	go func() {
-		wg.Wait()
-		once.Do(func() { slapdFailed = true })
-	}()
-
-	defer func() {
-		once.Do(func() { slapdFailed = false })
-		cmd.Process.Kill()
-		wg.Wait()
-	}()
-
-	// Try a few times to connect to the LDAP server. On slower machines
-	// it can take a while for it to come up.
-	connected := false
-	wait := 100 * time.Millisecond
-	for i := 0; i < 5; i++ {
-		time.Sleep(wait)
-
-		ldapadd := exec.Command(
-			"ldapadd", "-x",
-			"-D", "cn=admin,dc=example,dc=org",
-			"-w", "admin",
-			"-f", schemaPath,
-			"-H", "ldap://localhost:10389/",
-		)
-		if out, err := ldapadd.CombinedOutput(); err != nil {
-			t.Logf("ldapadd: %s", out)
-			wait = wait * 2 // backoff
-			continue
-		}
-		connected = true
-		break
+	ip, err := slapd.Host(ctx)
+	if err != nil {
+		t.Fatal(err)
+	}
+	port, err := slapd.MappedPort(ctx, "389")
+	if err != nil {
+		t.Fatal(err)
 	}
-	if !connected {
-		t.Errorf("ldapadd command failed")
-		return
+	tlsPort, err := slapd.MappedPort(ctx, "636")
+	if err != nil {
+		t.Fatal(err)
 	}
 
 	// Shallow copy.
@@ -858,17 +760,17 @@ func runTests(t *testing.T, schema string, connMethod connectionMethod, config *
 	// group search configuration.
 	switch connMethod {
 	case connectStartTLS:
-		c.Host = "localhost:10389"
-		c.RootCA = "testdata/ca.crt"
+		c.Host = fmt.Sprintf("%s:%s", ip, port.Port())
+		c.RootCA = "testdata/certs/ca.crt"
 		c.StartTLS = true
 	case connectLDAPS:
-		c.Host = "localhost:10636"
-		c.RootCA = "testdata/ca.crt"
+		c.Host = fmt.Sprintf("%s:%s", ip, tlsPort.Port())
+		c.RootCA = "testdata/certs/ca.crt"
 	case connectInsecureSkipVerify:
-		c.Host = "localhost:10636"
+		c.Host = fmt.Sprintf("%s:%s", ip, tlsPort.Port())
 		c.InsecureSkipVerify = true
 	case connectLDAP:
-		c.Host = "localhost:10389"
+		c.Host = fmt.Sprintf("%s:%s", ip, port.Port())
 		c.InsecureNoSSL = true
 	}
 
@@ -934,98 +836,3 @@ func runTests(t *testing.T, schema string, connMethod connectionMethod, config *
 		})
 	}
 }
-
-// Standard OpenLDAP schema files to include.
-//
-// These are copied from the /etc/openldap/schema directory.
-var includeFiles = []string{
-	"core.schema",
-	"cosine.schema",
-	"inetorgperson.schema",
-	"misc.schema",
-	"nis.schema",
-	"openldap.schema",
-}
-
-// tmplData is the struct used to execute the SLAPD config template.
-type tmplData struct {
-	// Directory for database to be writen to.
-	TempDir string
-	// List of schema files to include.
-	Includes []string
-	// TLS assets for LDAPS.
-	TLSKeyPath  string
-	TLSCertPath string
-}
-
-// Config template copied from:
-// http://www.zytrax.com/books/ldap/ch5/index.html#step1-slapd
-//
-// TLS instructions found here:
-// http://www.openldap.org/doc/admin24/tls.html
-var slapdConfigTmpl = template.Must(template.New("").Parse(`
-{{ range $i, $include := .Includes }}
-include {{ $include }}
-{{ end }}
-
-# MODULELOAD definitions
-# not required (comment out) before version 2.3
-moduleload back_bdb.la
-
-database bdb
-suffix "dc=example,dc=org"
-
-# root or superuser
-rootdn "cn=admin,dc=example,dc=org"
-rootpw admin
-# The database directory MUST exist prior to running slapd AND 
-# change path as necessary
-directory	{{ .TempDir }}
-
-TLSCertificateFile {{ .TLSCertPath }}
-TLSCertificateKeyFile {{ .TLSKeyPath }}
-
-# Indices to maintain for this directory
-# unique id so equality match only
-index	uid	eq
-# allows general searching on commonname, givenname and email
-index	cn,gn,mail eq,sub
-# allows multiple variants on surname searching
-index sn eq,sub
-# sub above includes subintial,subany,subfinal
-# optimise department searches
-index ou eq
-# if searches will include objectClass uncomment following
-# index objectClass eq
-# shows use of default index parameter
-index default eq,sub
-# indices missing - uses default eq,sub
-index telephonenumber
-
-# other database parameters
-# read more in slapd.conf reference section
-cachesize 10000
-checkpoint 128 15
-`))
-
-func tlsAssets(t *testing.T, wd string) (certPath, keyPath string) {
-	certPath = filepath.Join(wd, "testdata", "server.crt")
-	keyPath = filepath.Join(wd, "testdata", "server.key")
-	for _, p := range []string{certPath, keyPath} {
-		if _, err := os.Stat(p); err != nil {
-			t.Fatalf("failed to find TLS asset file: %s %v", p, err)
-		}
-	}
-	return
-}
-
-func includes(t *testing.T, wd string) (paths []string) {
-	for _, f := range includeFiles {
-		p := filepath.Join(wd, "testdata", f)
-		if _, err := os.Stat(p); err != nil {
-			t.Fatalf("failed to find schema file: %s %v", p, err)
-		}
-		paths = append(paths, p)
-	}
-	return
-}
diff --git a/connector/ldap/testdata/ca.crt b/connector/ldap/testdata/certs/ca.crt
similarity index 100%
rename from connector/ldap/testdata/ca.crt
rename to connector/ldap/testdata/certs/ca.crt
diff --git a/connector/ldap/testdata/ca.key b/connector/ldap/testdata/certs/ca.key
similarity index 100%
rename from connector/ldap/testdata/ca.key
rename to connector/ldap/testdata/certs/ca.key
diff --git a/connector/ldap/testdata/certs/dhparam.pem b/connector/ldap/testdata/certs/dhparam.pem
new file mode 100644
index 0000000000000000000000000000000000000000..1a69cd70f4ee25f73f4c7bdf6dc76618b8631414
--- /dev/null
+++ b/connector/ldap/testdata/certs/dhparam.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBCAKCAQEAx5y2viJKOAAcDYSj55odZsbA7dkSQ9afEPd9uaCLOvRYKLJY1S1V
+C4m1eVfna8JndSLdsBGDQe4BlBTkEYMYR8CJHtUuBxeAucOH8KlF8rIHXXi71oex
+T7kPtJEDINQKOn06bHqNcn0a7ZMWP8jiQ708OYr5P+1T/N82QTAFpDuqK42ZnBqf
+8qzQkkTN0UCktY2EWnFTbNIXcMKWQnYP8zt/CG3Q31b2bnQt2iLEa/DIF7RLNjfx
+9wPQBBAqgWbLmWfdPpHsAPtQxtItb+GRbPs3aLm06CFKlQuteDoP+suo0EtglHcV
+V9Ynvdz0cdJCJ7EPyET6CtLMzc/Puup/AwIBAg==
+-----END DH PARAMETERS-----
diff --git a/connector/ldap/testdata/server.crt b/connector/ldap/testdata/certs/ldap.crt
similarity index 100%
rename from connector/ldap/testdata/server.crt
rename to connector/ldap/testdata/certs/ldap.crt
diff --git a/connector/ldap/testdata/server.key b/connector/ldap/testdata/certs/ldap.key
similarity index 100%
rename from connector/ldap/testdata/server.key
rename to connector/ldap/testdata/certs/ldap.key
diff --git a/connector/ldap/testdata/core.schema b/connector/ldap/testdata/core.schema
deleted file mode 100644
index 3ae58187ee9a8cd482847c5110304c67b45200fe..0000000000000000000000000000000000000000
--- a/connector/ldap/testdata/core.schema
+++ /dev/null
@@ -1,610 +0,0 @@
-# OpenLDAP Core schema
-# $OpenLDAP$
-## This work is part of OpenLDAP Software <http://www.openldap.org/>.
-##
-## Copyright 1998-2016 The OpenLDAP Foundation.
-## All rights reserved.
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted only as authorized by the OpenLDAP
-## Public License.
-##
-## A copy of this license is available in the file LICENSE in the
-## top-level directory of the distribution or, alternatively, at
-## <http://www.OpenLDAP.org/license.html>.
-#
-## Portions Copyright (C) The Internet Society (1997-2006).
-## All Rights Reserved.
-##
-## This document and translations of it may be copied and furnished to
-## others, and derivative works that comment on or otherwise explain it
-## or assist in its implementation may be prepared, copied, published
-## and distributed, in whole or in part, without restriction of any
-## kind, provided that the above copyright notice and this paragraph are
-## included on all such copies and derivative works.  However, this
-## document itself may not be modified in any way, such as by removing
-## the copyright notice or references to the Internet Society or other
-## Internet organizations, except as needed for the purpose of
-## developing Internet standards in which case the procedures for
-## copyrights defined in the Internet Standards process must be         
-## followed, or as required to translate it into languages other than
-## English.
-##                                                                      
-## The limited permissions granted above are perpetual and will not be  
-## revoked by the Internet Society or its successors or assigns.        
-## 
-## This document and the information contained herein is provided on an 
-## "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
-## TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-## BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
-## HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
-## MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-#
-#
-# Includes LDAPv3 schema items from:
-#	RFC 2252/2256 (LDAPv3)
-#
-# Select standard track schema items:
-#	RFC 1274 (uid/dc)
-#	RFC 2079 (URI)
-#	RFC 2247 (dc/dcObject)
-#	RFC 2587 (PKI)
-#	RFC 2589 (Dynamic Directory Services)
-#	RFC 4524 (associatedDomain)
-#
-# Select informational schema items:
-#	RFC 2377 (uidObject)
-
-#
-# Standard attribute types from RFC 2256
-#
-
-# system schema
-#attributetype ( 2.5.4.0 NAME 'objectClass'
-#	DESC 'RFC2256: object classes of the entity'
-#	EQUALITY objectIdentifierMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )
-
-# system schema
-#attributetype ( 2.5.4.1 NAME ( 'aliasedObjectName' 'aliasedEntryName' )
-#	DESC 'RFC2256: name of aliased object'
-#	EQUALITY distinguishedNameMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE )
-
-attributetype ( 2.5.4.2 NAME 'knowledgeInformation'
-	DESC 'RFC2256: knowledge information'
-	EQUALITY caseIgnoreMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
-
-# system schema
-#attributetype ( 2.5.4.3 NAME ( 'cn' 'commonName' )
-#	DESC 'RFC2256: common name(s) for which the entity is known by'
-#	SUP name )
-
-attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' )
-	DESC 'RFC2256: last (family) name(s) for which the entity is known by'
-	SUP name )
-
-attributetype ( 2.5.4.5 NAME 'serialNumber'
-	DESC 'RFC2256: serial number of the entity'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} )
-
-# RFC 4519 definition ('countryName' in X.500 and RFC2256)
-attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' )
-	DESC 'RFC4519: two-letter ISO-3166 country code'
-	SUP name
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.11
-	SINGLE-VALUE )
-
-#attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' )
-#	DESC 'RFC2256: ISO-3166 country 2-letter code'
-#	SUP name SINGLE-VALUE )
-
-attributetype ( 2.5.4.7 NAME ( 'l' 'localityName' )
-	DESC 'RFC2256: locality which this object resides in'
-	SUP name )
-
-attributetype ( 2.5.4.8 NAME ( 'st' 'stateOrProvinceName' )
-	DESC 'RFC2256: state or province which this object resides in'
-	SUP name )
-
-attributetype ( 2.5.4.9 NAME ( 'street' 'streetAddress' )
-	DESC 'RFC2256: street address of this object'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
-
-attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' )
-	DESC 'RFC2256: organization this object belongs to'
-	SUP name )
-
-attributetype ( 2.5.4.11 NAME ( 'ou' 'organizationalUnitName' )
-	DESC 'RFC2256: organizational unit this object belongs to'
-	SUP name )
-
-attributetype ( 2.5.4.12 NAME 'title'
-	DESC 'RFC2256: title associated with the entity'
-	SUP name )
-
-# system schema
-#attributetype ( 2.5.4.13 NAME 'description'
-#	DESC 'RFC2256: descriptive information'
-#	EQUALITY caseIgnoreMatch
-#	SUBSTR caseIgnoreSubstringsMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
-
-# Deprecated by enhancedSearchGuide
-attributetype ( 2.5.4.14 NAME 'searchGuide'
-	DESC 'RFC2256: search guide, deprecated by enhancedSearchGuide'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.25 )
-
-attributetype ( 2.5.4.15 NAME 'businessCategory'
-	DESC 'RFC2256: business category'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
-
-attributetype ( 2.5.4.16 NAME 'postalAddress'
-	DESC 'RFC2256: postal address'
-	EQUALITY caseIgnoreListMatch
-	SUBSTR caseIgnoreListSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 )
-
-attributetype ( 2.5.4.17 NAME 'postalCode'
-	DESC 'RFC2256: postal code'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} )
-
-attributetype ( 2.5.4.18 NAME 'postOfficeBox'
-	DESC 'RFC2256: Post Office Box'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} )
-
-attributetype ( 2.5.4.19 NAME 'physicalDeliveryOfficeName'
-	DESC 'RFC2256: Physical Delivery Office Name'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
-
-attributetype ( 2.5.4.20 NAME 'telephoneNumber'
-	DESC 'RFC2256: Telephone Number'
-	EQUALITY telephoneNumberMatch
-	SUBSTR telephoneNumberSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.50{32} )
-
-attributetype ( 2.5.4.21 NAME 'telexNumber'
-	DESC 'RFC2256: Telex Number'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.52 )
-
-attributetype ( 2.5.4.22 NAME 'teletexTerminalIdentifier'
-	DESC 'RFC2256: Teletex Terminal Identifier'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.51 )
-
-attributetype ( 2.5.4.23 NAME ( 'facsimileTelephoneNumber' 'fax' )
-	DESC 'RFC2256: Facsimile (Fax) Telephone Number'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.22 )
-
-attributetype ( 2.5.4.24 NAME 'x121Address'
-	DESC 'RFC2256: X.121 Address'
-	EQUALITY numericStringMatch
-	SUBSTR numericStringSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{15} )
-
-attributetype ( 2.5.4.25 NAME 'internationaliSDNNumber'
-	DESC 'RFC2256: international ISDN number'
-	EQUALITY numericStringMatch
-	SUBSTR numericStringSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{16} )
-
-attributetype ( 2.5.4.26 NAME 'registeredAddress'
-	DESC 'RFC2256: registered postal address'
-	SUP postalAddress
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 )
-
-attributetype ( 2.5.4.27 NAME 'destinationIndicator'
-	DESC 'RFC2256: destination indicator'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{128} )
-
-attributetype ( 2.5.4.28 NAME 'preferredDeliveryMethod'
-	DESC 'RFC2256: preferred delivery method'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.14
-	SINGLE-VALUE )
-
-attributetype ( 2.5.4.29 NAME 'presentationAddress'
-	DESC 'RFC2256: presentation address'
-	EQUALITY presentationAddressMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.43
-	SINGLE-VALUE )
-
-attributetype ( 2.5.4.30 NAME 'supportedApplicationContext'
-	DESC 'RFC2256: supported application context'
-	EQUALITY objectIdentifierMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )
-
-attributetype ( 2.5.4.31 NAME 'member'
-	DESC 'RFC2256: member of a group'
-	SUP distinguishedName )
-
-attributetype ( 2.5.4.32 NAME 'owner'
-	DESC 'RFC2256: owner (of the object)'
-	SUP distinguishedName )
-
-attributetype ( 2.5.4.33 NAME 'roleOccupant'
-	DESC 'RFC2256: occupant of role'
-	SUP distinguishedName )
-
-# system schema
-#attributetype ( 2.5.4.34 NAME 'seeAlso'
-#	DESC 'RFC2256: DN of related object'
-#	SUP distinguishedName )
-
-# system schema
-#attributetype ( 2.5.4.35 NAME 'userPassword'
-#	DESC 'RFC2256/2307: password of user'
-#	EQUALITY octetStringMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} )
-
-# Must be transferred using ;binary
-# with certificateExactMatch rule (per X.509)
-attributetype ( 2.5.4.36 NAME 'userCertificate'
-	DESC 'RFC2256: X.509 user certificate, use ;binary'
-	EQUALITY certificateExactMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 )
-
-# Must be transferred using ;binary
-# with certificateExactMatch rule (per X.509)
-attributetype ( 2.5.4.37 NAME 'cACertificate'
-	DESC 'RFC2256: X.509 CA certificate, use ;binary'
-	EQUALITY certificateExactMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 )
-
-# Must be transferred using ;binary
-attributetype ( 2.5.4.38 NAME 'authorityRevocationList'
-	DESC 'RFC2256: X.509 authority revocation list, use ;binary'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 )
-
-# Must be transferred using ;binary
-attributetype ( 2.5.4.39 NAME 'certificateRevocationList'
-	DESC 'RFC2256: X.509 certificate revocation list, use ;binary'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 )
-
-# Must be stored and requested in the binary form
-attributetype ( 2.5.4.40 NAME 'crossCertificatePair'
-	DESC 'RFC2256: X.509 cross certificate pair, use ;binary'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.10 )
-
-# system schema
-#attributetype ( 2.5.4.41 NAME 'name'
-#	EQUALITY caseIgnoreMatch
-#	SUBSTR caseIgnoreSubstringsMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
-
-attributetype ( 2.5.4.42 NAME ( 'givenName' 'gn' )
-	DESC 'RFC2256: first name(s) for which the entity is known by'
-	SUP name )
-
-attributetype ( 2.5.4.43 NAME 'initials'
-	DESC 'RFC2256: initials of some or all of names, but not the surname(s).'
-	SUP name )
-
-attributetype ( 2.5.4.44 NAME 'generationQualifier'
-	DESC 'RFC2256: name qualifier indicating a generation'
-	SUP name )
-
-attributetype ( 2.5.4.45 NAME 'x500UniqueIdentifier'
-	DESC 'RFC2256: X.500 unique identifier'
-	EQUALITY bitStringMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.6 )
-
-attributetype ( 2.5.4.46 NAME 'dnQualifier'
-	DESC 'RFC2256: DN qualifier'
-	EQUALITY caseIgnoreMatch
-	ORDERING caseIgnoreOrderingMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 )
-
-attributetype ( 2.5.4.47 NAME 'enhancedSearchGuide'
-	DESC 'RFC2256: enhanced search guide'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.21 )
-
-attributetype ( 2.5.4.48 NAME 'protocolInformation'
-	DESC 'RFC2256: protocol information'
-	EQUALITY protocolInformationMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.42 )
-
-# system schema
-#attributetype ( 2.5.4.49 NAME 'distinguishedName'
-#	EQUALITY distinguishedNameMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-attributetype ( 2.5.4.50 NAME 'uniqueMember'
-	DESC 'RFC2256: unique member of a group'
-	EQUALITY uniqueMemberMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.34 )
-
-attributetype ( 2.5.4.51 NAME 'houseIdentifier'
-	DESC 'RFC2256: house identifier'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
-
-# Must be transferred using ;binary
-attributetype ( 2.5.4.52 NAME 'supportedAlgorithms'
-	DESC 'RFC2256: supported algorithms'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.49 )
-
-# Must be transferred using ;binary
-attributetype ( 2.5.4.53 NAME 'deltaRevocationList'
-	DESC 'RFC2256: delta revocation list; use ;binary'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 )
-
-attributetype ( 2.5.4.54 NAME 'dmdName'
-	DESC 'RFC2256: name of DMD'
-	SUP name )
-
-attributetype ( 2.5.4.65 NAME 'pseudonym'
-	DESC 'X.520(4th): pseudonym for the object'
-	SUP name )
-
-# Standard object classes from RFC2256
-
-# system schema
-#objectclass ( 2.5.6.0 NAME 'top'
-#	DESC 'RFC2256: top of the superclass chain'
-#	ABSTRACT
-#	MUST objectClass )
-
-# system schema
-#objectclass ( 2.5.6.1 NAME 'alias'
-#	DESC 'RFC2256: an alias'
-#	SUP top STRUCTURAL
-#	MUST aliasedObjectName )
-
-objectclass ( 2.5.6.2 NAME 'country'
-	DESC 'RFC2256: a country'
-	SUP top STRUCTURAL
-	MUST c
-	MAY ( searchGuide $ description ) )
-
-objectclass ( 2.5.6.3 NAME 'locality'
-	DESC 'RFC2256: a locality'
-	SUP top STRUCTURAL
-	MAY ( street $ seeAlso $ searchGuide $ st $ l $ description ) )
-
-objectclass ( 2.5.6.4 NAME 'organization'
-	DESC 'RFC2256: an 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 ) )
-
-objectclass ( 2.5.6.5 NAME 'organizationalUnit'
-	DESC 'RFC2256: an organizational unit'
-	SUP top STRUCTURAL
-	MUST ou
-	MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $
-		x121Address $ registeredAddress $ destinationIndicator $
-		preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
-		telephoneNumber $ internationaliSDNNumber $
-		facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $
-		postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) )
-
-objectclass ( 2.5.6.6 NAME 'person'
-	DESC 'RFC2256: a person'
-	SUP top STRUCTURAL
-	MUST ( sn $ cn )
-	MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
-
-objectclass ( 2.5.6.7 NAME 'organizationalPerson'
-	DESC 'RFC2256: an organizational person'
-	SUP person STRUCTURAL
-	MAY ( title $ x121Address $ registeredAddress $ destinationIndicator $
-		preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
-		telephoneNumber $ internationaliSDNNumber $ 
-		facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $
-		postalAddress $ physicalDeliveryOfficeName $ ou $ st $ l ) )
-
-objectclass ( 2.5.6.8 NAME 'organizationalRole'
-	DESC 'RFC2256: an organizational role'
-	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 ) )
-
-objectclass ( 2.5.6.9 NAME 'groupOfNames'
-	DESC 'RFC2256: a group of names (DNs)'
-	SUP top STRUCTURAL
-	MUST ( member $ cn )
-	MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) )
-
-objectclass ( 2.5.6.10 NAME 'residentialPerson'
-	DESC 'RFC2256: an residential person'
-	SUP person STRUCTURAL
-	MUST l
-	MAY ( businessCategory $ x121Address $ registeredAddress $
-		destinationIndicator $ preferredDeliveryMethod $ telexNumber $
-		teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $
-		facsimileTelephoneNumber $ preferredDeliveryMethod $ street $
-		postOfficeBox $ postalCode $ postalAddress $
-		physicalDeliveryOfficeName $ st $ l ) )
-
-objectclass ( 2.5.6.11 NAME 'applicationProcess'
-	DESC 'RFC2256: an application process'
-	SUP top STRUCTURAL
-	MUST cn
-	MAY ( seeAlso $ ou $ l $ description ) )
-
-objectclass ( 2.5.6.12 NAME 'applicationEntity'
-	DESC 'RFC2256: an application entity'
-	SUP top STRUCTURAL
-	MUST ( presentationAddress $ cn )
-	MAY ( supportedApplicationContext $ seeAlso $ ou $ o $ l $
-	description ) )
-
-objectclass ( 2.5.6.13 NAME 'dSA'
-	DESC 'RFC2256: a directory system agent (a server)'
-	SUP applicationEntity STRUCTURAL
-	MAY knowledgeInformation )
-
-objectclass ( 2.5.6.14 NAME 'device'
-	DESC 'RFC2256: a device'
-	SUP top STRUCTURAL
-	MUST cn
-	MAY ( serialNumber $ seeAlso $ owner $ ou $ o $ l $ description ) )
-
-objectclass ( 2.5.6.15 NAME 'strongAuthenticationUser'
-	DESC 'RFC2256: a strong authentication user'
-	SUP top AUXILIARY
-	MUST userCertificate )
-
-objectclass ( 2.5.6.16 NAME 'certificationAuthority'
-	DESC 'RFC2256: a certificate authority'
-	SUP top AUXILIARY
-	MUST ( authorityRevocationList $ certificateRevocationList $
-		cACertificate ) MAY crossCertificatePair )
-
-objectclass ( 2.5.6.17 NAME 'groupOfUniqueNames'
-	DESC 'RFC2256: a group of unique names (DN and Unique Identifier)'
-	SUP top STRUCTURAL
-	MUST ( uniqueMember $ cn )
-	MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) )
-
-objectclass ( 2.5.6.18 NAME 'userSecurityInformation'
-	DESC 'RFC2256: a user security information'
-	SUP top AUXILIARY
-	MAY ( supportedAlgorithms ) )
-
-objectclass ( 2.5.6.16.2 NAME 'certificationAuthority-V2'
-	SUP certificationAuthority
-	AUXILIARY MAY ( deltaRevocationList ) )
-
-objectclass ( 2.5.6.19 NAME 'cRLDistributionPoint'
-	SUP top STRUCTURAL
-	MUST ( cn )
-	MAY ( certificateRevocationList $ authorityRevocationList $
-		deltaRevocationList ) )
-
-objectclass ( 2.5.6.20 NAME 'dmd'
-	SUP top STRUCTURAL
-	MUST ( dmdName )
-	MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $
-		x121Address $ registeredAddress $ destinationIndicator $
-		preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
-		telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $
-		street $ postOfficeBox $ postalCode $ postalAddress $
-		physicalDeliveryOfficeName $ st $ l $ description ) )
-
-#
-# Object Classes from RFC 2587
-#
-objectclass ( 2.5.6.21 NAME 'pkiUser'
-	DESC 'RFC2587: a PKI user'
-	SUP top AUXILIARY
-	MAY userCertificate )
-
-objectclass ( 2.5.6.22 NAME 'pkiCA'
-	DESC 'RFC2587: PKI certificate authority'
-	SUP top AUXILIARY
-	MAY ( authorityRevocationList $ certificateRevocationList $
-		cACertificate $ crossCertificatePair ) )
-
-objectclass ( 2.5.6.23 NAME 'deltaCRL'
-	DESC 'RFC2587: PKI user'
-	SUP top AUXILIARY
-	MAY deltaRevocationList )
-
-#
-# Standard Track URI label schema from RFC 2079
-# system schema
-#attributetype ( 1.3.6.1.4.1.250.1.57 NAME 'labeledURI'
-#	DESC 'RFC2079: Uniform Resource Identifier with optional label'
-#	EQUALITY caseExactMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-objectclass ( 1.3.6.1.4.1.250.3.15 NAME 'labeledURIObject'
-	DESC 'RFC2079: object that contains the URI attribute type'
-	SUP top AUXILIARY
-	MAY ( labeledURI ) )
-
-#
-# Derived from RFC 1274, but with new "short names"
-#
-#attributetype ( 0.9.2342.19200300.100.1.1
-#	NAME ( 'uid' 'userid' )
-#	DESC 'RFC1274: user identifier'
-#	EQUALITY caseIgnoreMatch
-#	SUBSTR caseIgnoreSubstringsMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-attributetype ( 0.9.2342.19200300.100.1.3
-	NAME ( 'mail' 'rfc822Mailbox' )
-	DESC 'RFC1274: RFC822 Mailbox'
-    EQUALITY caseIgnoreIA5Match
-    SUBSTR caseIgnoreIA5SubstringsMatch
-    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-
-objectclass ( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObject'
-	DESC 'RFC1274: simple security object'
-	SUP top AUXILIARY
-	MUST userPassword )
-
-# RFC 1274 + RFC 2247
-attributetype ( 0.9.2342.19200300.100.1.25
-	NAME ( 'dc' 'domainComponent' )
-	DESC 'RFC1274/2247: domain component'
-	EQUALITY caseIgnoreIA5Match
-	SUBSTR caseIgnoreIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-# RFC 2247
-objectclass ( 1.3.6.1.4.1.1466.344 NAME 'dcObject'
-	DESC 'RFC2247: domain component object'
-	SUP top AUXILIARY MUST dc )
-
-# RFC 2377
-objectclass ( 1.3.6.1.1.3.1 NAME 'uidObject'
-	DESC 'RFC2377: uid object'
-	SUP top AUXILIARY MUST uid )
-
-# RFC 4524
-#   The 'associatedDomain' attribute specifies DNS [RFC1034][RFC2181]
-#   host names [RFC1123] that are associated with an object.   That is,
-#   values of this attribute should conform to the following ABNF:
-#
-#    domain = root / label *( DOT label )
-#    root   = SPACE
-#    label  = LETDIG [ *61( LETDIG / HYPHEN ) LETDIG ]
-#    LETDIG = %x30-39 / %x41-5A / %x61-7A ; "0" - "9" / "A"-"Z" / "a"-"z"
-#    SPACE  = %x20                        ; space (" ")
-#    HYPHEN = %x2D                        ; hyphen ("-")
-#    DOT    = %x2E                        ; period (".")
-attributetype ( 0.9.2342.19200300.100.1.37
-	NAME 'associatedDomain'
-	DESC 'RFC1274: domain associated with object'
-	EQUALITY caseIgnoreIA5Match
-	SUBSTR caseIgnoreIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-# RFC 2459 -- deprecated in favor of 'mail' (in cosine.schema)
-attributetype ( 1.2.840.113549.1.9.1
-	NAME ( 'email' 'emailAddress' 'pkcs9email' )
-	DESC 'RFC3280: legacy attribute for email addresses in DNs'
-	EQUALITY caseIgnoreIA5Match
-	SUBSTR caseIgnoreIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
-
diff --git a/connector/ldap/testdata/cosine.schema b/connector/ldap/testdata/cosine.schema
deleted file mode 100644
index a270e5925ce66829c9d9894e2d9278fa36688bef..0000000000000000000000000000000000000000
--- a/connector/ldap/testdata/cosine.schema
+++ /dev/null
@@ -1,2571 +0,0 @@
-# RFC1274: Cosine and Internet X.500 schema
-# $OpenLDAP$
-## This work is part of OpenLDAP Software <http://www.openldap.org/>.
-##
-## Copyright 1998-2016 The OpenLDAP Foundation.
-## All rights reserved.
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted only as authorized by the OpenLDAP
-## Public License.
-##
-## A copy of this license is available in the file LICENSE in the
-## top-level directory of the distribution or, alternatively, at
-## <http://www.OpenLDAP.org/license.html>.
-#
-# RFC1274: Cosine and Internet X.500 schema
-#
-# This file contains LDAPv3 schema derived from X.500 COSINE "pilot"
-# schema.  As this schema was defined for X.500(89), some
-# oddities were introduced in the mapping to LDAPv3.  The
-# mappings were based upon: draft-ietf-asid-ldapv3-attributes-03.txt
-# (a work in progress)
-#
-# Note: It seems that the pilot schema evolved beyond what was
-# described in RFC1274.  However, this document attempts to describes
-# RFC1274 as published.
-#
-# Depends on core.schema
-
-
-# Network Working Group                                          P. Barker
-# Request for Comments: 1274                                      S. Kille
-#                                              University College London
-#                                                          November 1991
-#
-#                 The COSINE and Internet X.500 Schema
-#
-# [trimmed]
-#
-# Abstract
-#
-#  This document suggests an X.500 Directory Schema, or Naming
-#  Architecture, for use in the COSINE and Internet X.500 pilots.  The
-#  schema is independent of any specific implementation.  As well as
-#  indicating support for the standard object classes and attributes, a
-#  large number of generally useful object classes and attributes are
-#  also defined.  An appendix to this document includes a machine
-#  processable version of the schema.
-#
-# [trimmed]
-
-# 7.  Object Identifiers
-#
-#  Some additional object identifiers are defined for this schema.
-#  These are also reproduced in Appendix C.
-#
-#    data OBJECT IDENTIFIER ::= {ccitt 9}
-#    pss OBJECT IDENTIFIER ::= {data 2342}
-#    ucl OBJECT IDENTIFIER ::= {pss 19200300}
-#    pilot OBJECT IDENTIFIER ::= {ucl 100}
-#
-#    pilotAttributeType OBJECT IDENTIFIER ::= {pilot 1}
-#    pilotAttributeSyntax OBJECT IDENTIFIER ::= {pilot 3}
-#    pilotObjectClass OBJECT IDENTIFIER ::= {pilot 4}
-#    pilotGroups OBJECT IDENTIFIER ::= {pilot 10}
-#
-#    iA5StringSyntax OBJECT IDENTIFIER ::= {pilotAttributeSyntax 4}
-#    caseIgnoreIA5StringSyntax OBJECT IDENTIFIER ::=
-#                                          {pilotAttributeSyntax 5}
-#
-# 8.  Object Classes
-# [relocated after 9]
-
-#
-# 9.  Attribute Types
-#
-# 9.1.  X.500 standard attribute types
-#
-#  A number of generally useful attribute types are defined in X.520,
-#  and these are supported.  Refer to that document for descriptions of
-#  the suggested usage of these attribute types.  The ASN.1 for these
-#  attribute types is reproduced for completeness in Appendix C.
-#
-# 9.2.  X.400 standard attribute types
-#
-#  The standard X.400 attribute types are supported.  See X.402 for full
-#  details.  The ASN.1 for these attribute types is reproduced in
-#  Appendix C.
-#
-# 9.3.  COSINE/Internet attribute types
-#
-#  This section describes all the attribute types defined for use in the
-#  COSINE and Internet pilots.  Descriptions are given as to the
-#  suggested usage of these attribute types.  The ASN.1 for these
-#  attribute types is reproduced in Appendix C.
-#
-# 9.3.1.  Userid
-#
-#  The Userid attribute type specifies a computer system login name.
-#
-#    userid ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-user-identifier))
-#    ::= {pilotAttributeType 1}
-#
-#(in core.schema)
-##attributetype ( 0.9.2342.19200300.100.1.1 NAME ( 'uid' 'userid' )
-##	EQUALITY caseIgnoreMatch
-##	SUBSTR caseIgnoreSubstringsMatch
-##	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.2.  Text Encoded O/R Address
-#
-#  The Text Encoded O/R Address attribute type specifies a text encoding
-#  of an X.400 O/R address, as specified in RFC 987.  The use of this
-#  attribute is deprecated as the attribute is intended for interim use
-#  only.  This attribute will be the first candidate for the attribute
-#  expiry mechanisms!
-#
-#    textEncodedORAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#        (SIZE (1 .. ub-text-encoded-or-address))
-#    ::= {pilotAttributeType 2}
-#
-attributetype ( 0.9.2342.19200300.100.1.2 NAME 'textEncodedORAddress'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.3.  RFC 822 Mailbox
-#
-#  The RFC822 Mailbox attribute type specifies an electronic mailbox
-#  attribute following the syntax specified in RFC 822.  Note that this
-#  attribute should not be used for greybook or other non-Internet order
-#  mailboxes.
-#
-#    rfc822Mailbox ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#            (SIZE (1 .. ub-rfc822-mailbox))
-#    ::= {pilotAttributeType 3}
-#
-#(in core.schema)
-##attributetype ( 0.9.2342.19200300.100.1.3 NAME ( 'mail' 'rfc822Mailbox' )
-##	EQUALITY caseIgnoreIA5Match
-##	SUBSTR caseIgnoreIA5SubstringsMatch
-##	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-
-# 9.3.4.  Information
-#
-#  The Information attribute type specifies any general information
-#  pertinent to an object.  It is recommended that specific usage of
-#  this attribute type is avoided, and that specific requirements are
-#  met by other (possibly additional) attribute types.
-#
-#    info ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-information))
-#    ::= {pilotAttributeType 4}
-#
-attributetype ( 0.9.2342.19200300.100.1.4 NAME 'info'
-	DESC 'RFC1274: general information'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{2048} )
-
-
-# 9.3.5.  Favourite Drink
-#
-#  The Favourite Drink attribute type specifies the favourite drink of
-#  an object (or person).
-#
-#    favouriteDrink ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-favourite-drink))
-#    ::= {pilotAttributeType 5}
-#
-attributetype ( 0.9.2342.19200300.100.1.5
-	NAME ( 'drink' 'favouriteDrink' )
-	DESC 'RFC1274: favorite drink'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.6.  Room Number
-#
-#  The Room Number attribute type specifies the room number of an
-#  object.  Note that the commonName attribute should be used for naming
-#  room objects.
-#
-#    roomNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-room-number))
-#    ::= {pilotAttributeType 6}
-#
-attributetype ( 0.9.2342.19200300.100.1.6 NAME 'roomNumber'
-	DESC 'RFC1274: room number'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.7.  Photo
-#
-#  The Photo attribute type specifies a "photograph" for an object.
-#  This should be encoded in G3 fax as explained in recommendation T.4,
-#  with an ASN.1 wrapper to make it compatible with an X.400 BodyPart as
-#  defined in X.420.
-#
-#    IMPORT  G3FacsimileBodyPart  FROM  {   mhs-motis   ipms   modules
-#    information-objects }
-#
-#    photo ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            CHOICE {
-#                g3-facsimile [3] G3FacsimileBodyPart
-#                }
-#        (SIZE (1 .. ub-photo))
-#    ::= {pilotAttributeType 7}
-#
-attributetype ( 0.9.2342.19200300.100.1.7 NAME 'photo'
-	DESC 'RFC1274: photo (G3 fax)'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.23{25000} )
-
-# 9.3.8.  User Class
-#
-#  The User Class attribute type specifies a category of computer user.
-#  The semantics placed on this attribute are for local interpretation.
-#  Examples of current usage od this attribute in academia are
-#  undergraduate student, researcher, lecturer, etc.  Note that the
-#  organizationalStatus attribute may now often be preferred as it makes
-#  no distinction between computer users and others.
-#
-#    userClass ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-user-class))
-#    ::= {pilotAttributeType 8}
-#
-attributetype ( 0.9.2342.19200300.100.1.8 NAME 'userClass'
-	DESC 'RFC1274: category of user'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.9.  Host
-#
-#  The Host attribute type specifies a host computer.
-#
-#    host ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-host))
-#    ::= {pilotAttributeType 9}
-#
-attributetype ( 0.9.2342.19200300.100.1.9 NAME 'host'
-	DESC 'RFC1274: host computer'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.10.  Manager
-#
-#  The Manager attribute type specifies the manager of an object
-#  represented by an entry.
-#
-#    manager ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 10}
-#
-attributetype ( 0.9.2342.19200300.100.1.10 NAME 'manager'
-	DESC 'RFC1274: DN of manager'
-	EQUALITY distinguishedNameMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-# 9.3.11.  Document Identifier
-#
-#  The Document Identifier attribute type specifies a unique identifier
-#  for a document.
-#
-#    documentIdentifier ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-document-identifier))
-#    ::= {pilotAttributeType 11}
-#
-attributetype ( 0.9.2342.19200300.100.1.11 NAME 'documentIdentifier'
-	DESC 'RFC1274: unique identifier of document'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.12.  Document Title
-#
-#  The Document Title attribute type specifies the title of a document.
-#
-#    documentTitle ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#        (SIZE (1 .. ub-document-title))
-#    ::= {pilotAttributeType 12}
-#
-attributetype ( 0.9.2342.19200300.100.1.12 NAME 'documentTitle'
-	DESC 'RFC1274: title of document'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.13.  Document Version
-#
-#  The Document Version attribute type specifies the version number of a
-#  document.
-#
-#    documentVersion ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-document-version))
-#    ::= {pilotAttributeType 13}
-#
-attributetype ( 0.9.2342.19200300.100.1.13 NAME 'documentVersion'
-	DESC 'RFC1274: version of document'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.14.  Document Author
-#
-#  The Document Author attribute type specifies the distinguished name
-#  of the author of a document.
-#
-#    documentAuthor ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 14}
-#
-attributetype ( 0.9.2342.19200300.100.1.14 NAME 'documentAuthor'
-	DESC 'RFC1274: DN of author of document'
-	EQUALITY distinguishedNameMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-# 9.3.15.  Document Location
-#
-#  The Document Location attribute type specifies the location of the
-#  document original.
-#
-#    documentLocation ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-document-location))
-#    ::= {pilotAttributeType 15}
-#
-attributetype ( 0.9.2342.19200300.100.1.15 NAME 'documentLocation'
-	DESC 'RFC1274: location of document original'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.16.  Home Telephone Number
-#
-#  The Home Telephone Number attribute type specifies a home telephone
-#  number associated with a person.  Attribute values should follow the
-#  agreed format for international telephone numbers: i.e., "+44 71 123
-#  4567".
-#
-#    homeTelephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            telephoneNumberSyntax
-#    ::= {pilotAttributeType 20}
-#
-attributetype ( 0.9.2342.19200300.100.1.20
-	NAME ( 'homePhone' 'homeTelephoneNumber' )
-	DESC 'RFC1274: home telephone number'
-	EQUALITY telephoneNumberMatch
-	SUBSTR telephoneNumberSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
-
-# 9.3.17.  Secretary
-#
-#  The Secretary attribute type specifies the secretary of a person.
-#  The attribute value for Secretary is a distinguished name.
-#
-#    secretary ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 21}
-#
-attributetype ( 0.9.2342.19200300.100.1.21 NAME 'secretary'
-	DESC 'RFC1274: DN of secretary'
-	EQUALITY distinguishedNameMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-# 9.3.18.  Other Mailbox
-#
-#  The Other Mailbox attribute type specifies values for electronic
-#  mailbox types other than X.400 and rfc822.
-#
-#    otherMailbox ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            SEQUENCE {
-#                    mailboxType PrintableString, -- e.g. Telemail
-#                    mailbox IA5String  -- e.g. X378:Joe
-#            }
-#    ::= {pilotAttributeType 22}
-#
-attributetype ( 0.9.2342.19200300.100.1.22 NAME 'otherMailbox'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.39 )
-
-# 9.3.19.  Last Modified Time
-#
-#  The Last Modified Time attribute type specifies the last time, in UTC
-#  time, that an entry was modified.  Ideally, this attribute should be
-#  maintained by the DSA.
-#
-#    lastModifiedTime ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            uTCTimeSyntax
-#    ::= {pilotAttributeType 23}
-#
-## Deprecated in favor of modifyTimeStamp
-#attributetype ( 0.9.2342.19200300.100.1.23 NAME 'lastModifiedTime'
-#	DESC 'RFC1274: time of last modify, replaced by modifyTimestamp'
-#	OBSOLETE
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.53
-#	USAGE directoryOperation )
-
-# 9.3.20.  Last Modified By
-#
-#  The Last Modified By attribute specifies the distinguished name of
-#  the last user to modify the associated entry.  Ideally, this
-#  attribute should be maintained by the DSA.
-#
-#    lastModifiedBy ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 24}
-#
-## Deprecated in favor of modifiersName
-#attributetype ( 0.9.2342.19200300.100.1.24 NAME 'lastModifiedBy'
-#	DESC 'RFC1274: last modifier, replaced by modifiersName'
-#	OBSOLETE
-#	EQUALITY distinguishedNameMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-#	USAGE directoryOperation )
-
-# 9.3.21.  Domain Component
-#
-#  The Domain Component attribute type specifies a DNS/NRS domain.  For
-#  example, "uk" or "ac".
-#
-#    domainComponent ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#            SINGLE VALUE
-#    ::= {pilotAttributeType 25}
-#
-##(in core.schema)
-##attributetype ( 0.9.2342.19200300.100.1.25 NAME ( 'dc' 'domainComponent' )
-##	EQUALITY caseIgnoreIA5Match
-##	SUBSTR caseIgnoreIA5SubstringsMatch
-##	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-# 9.3.22.  DNS ARecord
-#
-#  The A Record attribute type specifies a type A (Address) DNS resource
-#  record [6] [7].
-#
-#    aRecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 26}
-#
-## incorrect syntax?
-attributetype ( 0.9.2342.19200300.100.1.26 NAME 'aRecord'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-## missing from RFC1274
-## incorrect syntax?
-attributetype ( 0.9.2342.19200300.100.1.27 NAME 'mDRecord'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-# 9.3.23.  MX Record
-#
-#  The MX Record attribute type specifies a type MX (Mail Exchange) DNS
-#  resource record [6] [7].
-#
-#    mXRecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 28}
-#
-## incorrect syntax!!
-attributetype ( 0.9.2342.19200300.100.1.28 NAME 'mXRecord'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-# 9.3.24.  NS Record
-#
-#  The NS Record attribute type specifies an NS (Name Server) DNS
-#  resource record [6] [7].
-#
-#    nSRecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 29}
-#
-## incorrect syntax!!
-attributetype ( 0.9.2342.19200300.100.1.29 NAME 'nSRecord'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-# 9.3.25.  SOA Record
-#
-#  The SOA Record attribute type specifies a type SOA (Start of
-#  Authority) DNS resorce record [6] [7].
-#
-#    sOARecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 30}
-#
-## incorrect syntax!!
-attributetype ( 0.9.2342.19200300.100.1.30 NAME 'sOARecord'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-# 9.3.26.  CNAME Record
-#
-#  The CNAME Record attribute type specifies a type CNAME (Canonical
-#  Name) DNS resource record [6] [7].
-#
-#    cNAMERecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            iA5StringSyntax
-#    ::= {pilotAttributeType 31}
-#
-## incorrect syntax!!
-attributetype ( 0.9.2342.19200300.100.1.31 NAME 'cNAMERecord'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-# 9.3.27.  Associated Domain
-#
-#  The Associated Domain attribute type specifies a DNS or NRS domain
-#  which is associated with an object in the DIT. For example, the entry
-#  in the DIT with a distinguished name "C=GB, O=University College
-#  London" would have an associated domain of "UCL.AC.UK.  Note that all
-#  domains should be represented in rfc822 order.  See [3] for more
-#  details of usage of this attribute.
-#
-#    associatedDomain ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#    ::= {pilotAttributeType 37}
-#
-#attributetype ( 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 )
-
-# 9.3.28.  Associated Name
-#
-#  The Associated Name attribute type specifies an entry in the
-#  organisational DIT associated with a DNS/NRS domain.  See [3] for
-#  more details of usage of this attribute.
-#
-#    associatedName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 38}
-#
-attributetype ( 0.9.2342.19200300.100.1.38 NAME 'associatedName'
-	DESC 'RFC1274: DN of entry associated with domain'
-	EQUALITY distinguishedNameMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-# 9.3.29.  Home postal address
-#
-#  The Home postal address attribute type specifies a home postal
-#  address for an object.  This should be limited to up to 6 lines of 30
-#  characters each.
-#
-#    homePostalAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            postalAddress
-#            MATCHES FOR EQUALITY
-#    ::= {pilotAttributeType 39}
-#
-attributetype ( 0.9.2342.19200300.100.1.39 NAME 'homePostalAddress'
-	DESC 'RFC1274: home postal address'
-	EQUALITY caseIgnoreListMatch
-	SUBSTR caseIgnoreListSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 )
-
-# 9.3.30.  Personal Title
-#
-#  The Personal Title attribute type specifies a personal title for a
-#  person. Examples of personal titles are "Ms", "Dr", "Prof" and "Rev".
-#
-#    personalTitle ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-personal-title))
-#    ::= {pilotAttributeType 40}
-#
-attributetype ( 0.9.2342.19200300.100.1.40 NAME 'personalTitle'
-	DESC 'RFC1274: personal title'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.31.  Mobile Telephone Number
-#
-#  The Mobile Telephone Number attribute type specifies a mobile
-#  telephone number associated with a person.  Attribute values should
-#  follow the agreed format for international telephone numbers: i.e.,
-#  "+44 71 123 4567".
-#
-#    mobileTelephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            telephoneNumberSyntax
-#    ::= {pilotAttributeType 41}
-#
-attributetype ( 0.9.2342.19200300.100.1.41
-	NAME ( 'mobile' 'mobileTelephoneNumber' )
-	DESC 'RFC1274: mobile telephone number'
-	EQUALITY telephoneNumberMatch
-	SUBSTR telephoneNumberSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
-
-# 9.3.32.  Pager Telephone Number
-#
-#  The Pager Telephone Number attribute type specifies a pager telephone
-#  number for an object. Attribute values should follow the agreed
-#  format for international telephone numbers: i.e., "+44 71 123 4567".
-#
-#    pagerTelephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            telephoneNumberSyntax
-#    ::= {pilotAttributeType 42}
-#
-attributetype ( 0.9.2342.19200300.100.1.42
-	NAME ( 'pager' 'pagerTelephoneNumber' )
-	DESC 'RFC1274: pager telephone number'
-	EQUALITY telephoneNumberMatch
-	SUBSTR telephoneNumberSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
-
-# 9.3.33.  Friendly Country Name
-#
-#  The Friendly Country Name attribute type specifies names of countries
-#  in human readable format.  The standard attribute country name must
-#  be one of the two-letter codes defined in ISO 3166.
-#
-#    friendlyCountryName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#    ::= {pilotAttributeType 43}
-#
-attributetype ( 0.9.2342.19200300.100.1.43
-	NAME ( 'co' 'friendlyCountryName' )
-	DESC 'RFC1274: friendly country name'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-# 9.3.34.  Unique Identifier
-#
-#  The Unique Identifier attribute type specifies a "unique identifier"
-#  for an object represented in the Directory.  The domain within which
-#  the identifier is unique, and the exact semantics of the identifier,
-#  are for local definition.  For a person, this might be an
-#  institution-wide payroll number.  For an organisational unit, it
-#  might be a department code.
-#
-#    uniqueIdentifier ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-unique-identifier))
-#    ::= {pilotAttributeType 44}
-#
-attributetype ( 0.9.2342.19200300.100.1.44 NAME 'uniqueIdentifier'
-	DESC 'RFC1274: unique identifer'
-	EQUALITY caseIgnoreMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.35.  Organisational Status
-#
-#  The Organisational Status attribute type specifies a category by
-#  which a person is often referred to in an organisation.  Examples of
-#  usage in academia might include undergraduate student, researcher,
-#  lecturer, etc.
-#
-#  A Directory administrator should probably consider carefully the
-#  distinctions between this and the title and userClass attributes.
-#
-#    organizationalStatus ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-organizational-status))
-#    ::= {pilotAttributeType 45}
-#
-attributetype ( 0.9.2342.19200300.100.1.45 NAME 'organizationalStatus'
-	DESC 'RFC1274: organizational status'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.36.  Janet Mailbox
-#
-#  The Janet Mailbox attribute type specifies an electronic mailbox
-#  attribute following the syntax specified in the Grey Book of the
-#  Coloured Book series.  This attribute is intended for the convenience
-#  of U.K users unfamiliar with rfc822 and little-endian mail addresses.
-#  Entries using this attribute MUST also include an rfc822Mailbox
-#  attribute.
-#
-#    janetMailbox ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#            (SIZE (1 .. ub-janet-mailbox))
-#    ::= {pilotAttributeType 46}
-#
-attributetype ( 0.9.2342.19200300.100.1.46 NAME 'janetMailbox'
-	DESC 'RFC1274: Janet mailbox'
-	EQUALITY caseIgnoreIA5Match
-	SUBSTR caseIgnoreIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-
-# 9.3.37.  Mail Preference Option
-#
-#  An attribute to allow users to indicate a preference for inclusion of
-#  their names on mailing lists (electronic or physical).  The absence
-#  of such an attribute should be interpreted as if the attribute was
-#  present with value "no-list-inclusion".  This attribute should be
-#  interpreted by anyone using the directory to derive mailing lists,
-#  and its value respected.
-#
-#    mailPreferenceOption ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX ENUMERATED {
-#                no-list-inclusion(0),
-#                any-list-inclusion(1),  -- may be added to any lists
-#                professional-list-inclusion(2)
-#                                        -- may be added to lists
-#                                        -- which the list provider
-#                                        -- views as related to the
-#                                        -- users professional inter-
-#                                        -- ests, perhaps evaluated
-#                                        -- from the business of the
-#                                        -- organisation or keywords
-#                                        -- in the entry.
-#                }
-#    ::= {pilotAttributeType 47}
-#
-attributetype ( 0.9.2342.19200300.100.1.47
-	NAME 'mailPreferenceOption'
-	DESC 'RFC1274: mail preference option'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
-
-# 9.3.38.  Building Name
-#
-#  The Building Name attribute type specifies the name of the building
-#  where an organisation or organisational unit is based.
-#
-#    buildingName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-building-name))
-#    ::= {pilotAttributeType 48}
-#
-attributetype ( 0.9.2342.19200300.100.1.48 NAME 'buildingName'
-	DESC 'RFC1274: name of building'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-# 9.3.39.  DSA Quality
-#
-#  The DSA Quality attribute type specifies the purported quality of a
-#  DSA.  It allows a DSA manager to indicate the expected level of
-#  availability of the DSA. See [8] for details of the syntax.
-#
-#    dSAQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DSAQualitySyntax
-#            SINGLE VALUE
-#    ::= {pilotAttributeType 49}
-#
-attributetype ( 0.9.2342.19200300.100.1.49 NAME 'dSAQuality'
-	DESC 'RFC1274: DSA Quality'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.19 SINGLE-VALUE )
-
-# 9.3.40.  Single Level Quality
-#
-#  The Single Level Quality attribute type specifies the purported data
-#  quality at the level immediately below in the DIT.  See [8] for
-#  details of the syntax.
-#
-#    singleLevelQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DataQualitySyntax
-#            SINGLE VALUE
-#    ::= {pilotAttributeType 50}
-#
-attributetype ( 0.9.2342.19200300.100.1.50 NAME 'singleLevelQuality'
-	DESC 'RFC1274: Single Level Quality'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 SINGLE-VALUE )
-
-# 9.3.41.  Subtree Minimum Quality
-#
-#  The Subtree Minimum Quality attribute type specifies the purported
-#  minimum data quality for a DIT subtree.  See [8] for more discussion
-#  and details of the syntax.
-#
-#    subtreeMinimumQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DataQualitySyntax
-#            SINGLE VALUE
-#               -- Defaults to singleLevelQuality
-#    ::= {pilotAttributeType 51}
-#
-attributetype ( 0.9.2342.19200300.100.1.51 NAME 'subtreeMinimumQuality'
-	DESC 'RFC1274: Subtree Mininum Quality'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 SINGLE-VALUE )
-
-# 9.3.42.  Subtree Maximum Quality
-#
-#  The Subtree Maximum Quality attribute type specifies the purported
-#  maximum data quality for a DIT subtree.  See [8] for more discussion
-#  and details of the syntax.
-#
-#    subtreeMaximumQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DataQualitySyntax
-#            SINGLE VALUE
-#               -- Defaults to singleLevelQuality
-#    ::= {pilotAttributeType 52}
-#
-attributetype ( 0.9.2342.19200300.100.1.52 NAME 'subtreeMaximumQuality'
-	DESC 'RFC1274: Subtree Maximun Quality'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 SINGLE-VALUE )
-
-# 9.3.43.  Personal Signature
-#
-#  The Personal Signature attribute type allows for a representation of
-#  a person's signature.  This should be encoded in G3 fax as explained
-#  in recommendation T.4, with an ASN.1 wrapper to make it compatible
-#  with an X.400 BodyPart as defined in X.420.
-#
-#    IMPORT  G3FacsimileBodyPart  FROM  {   mhs-motis   ipms   modules
-#    information-objects }
-#
-#    personalSignature ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            CHOICE {
-#                g3-facsimile [3] G3FacsimileBodyPart
-#                }
-#        (SIZE (1 .. ub-personal-signature))
-#    ::= {pilotAttributeType 53}
-#
-attributetype ( 0.9.2342.19200300.100.1.53 NAME 'personalSignature'
-	DESC 'RFC1274: Personal Signature (G3 fax)'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.23 )
-
-# 9.3.44.  DIT Redirect
-#
-#  The DIT Redirect attribute type is used to indicate that the object
-#  described by one entry now has a newer entry in the DIT.  The entry
-#  containing the redirection attribute should be expired after a
-#  suitable grace period.  This attribute may be used when an individual
-#  changes his/her place of work, and thus acquires a new organisational
-#  DN.
-#
-#    dITRedirect ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 54}
-#
-attributetype ( 0.9.2342.19200300.100.1.54 NAME 'dITRedirect'
-	DESC 'RFC1274: DIT Redirect'
-	EQUALITY distinguishedNameMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-# 9.3.45.  Audio
-#
-#  The Audio attribute type allows the storing of sounds in the
-#  Directory.  The attribute uses a u-law encoded sound file as used by
-#  the "play" utility on a Sun 4.  This is an interim format.
-#
-#    audio ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            Audio
-#        (SIZE (1 .. ub-audio))
-#    ::= {pilotAttributeType 55}
-#
-attributetype ( 0.9.2342.19200300.100.1.55 NAME 'audio'
-	DESC 'RFC1274: audio (u-law)'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.4{25000} )
-
-# 9.3.46.  Publisher of Document
-#
-#
-#  The Publisher of Document attribute is the person and/or organization
-#  that published a document.
-#
-#    documentPublisher ATTRIBUTE
-#            WITH ATTRIBUTE SYNTAX caseIgnoreStringSyntax
-#    ::= {pilotAttributeType 56}
-#
-attributetype ( 0.9.2342.19200300.100.1.56 NAME 'documentPublisher'
-	DESC 'RFC1274: publisher of document'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-# 9.4.  Generally useful syntaxes
-#
-#    caseIgnoreIA5StringSyntax ATTRIBUTE-SYNTAX
-#            IA5String
-#            MATCHES FOR EQUALITY SUBSTRINGS
-#
-#    iA5StringSyntax ATTRIBUTE-SYNTAX
-#        IA5String
-#        MATCHES FOR EQUALITY SUBSTRINGS
-#
-#
-#    -- Syntaxes to support the DNS attributes
-#
-#    DNSRecordSyntax ATTRIBUTE-SYNTAX
-#            IA5String
-#            MATCHES FOR EQUALITY
-#
-#
-#    NRSInformationSyntax ATTRIBUTE-SYNTAX
-#            NRSInformation
-#            MATCHES FOR EQUALITY
-#
-#
-#    NRSInformation ::=  SET {
-#                    [0] Context,
-#                    [1] Address-space-id,
-#                    routes [2] SEQUENCE OF SEQUENCE {
-#                    Route-cost,
-#                    Addressing-info }
-#            }
-#
-#
-# 9.5.  Upper bounds on length of attribute values
-#
-#
-#    ub-document-identifier INTEGER ::= 256
-#
-#    ub-document-location INTEGER ::= 256
-#
-#    ub-document-title INTEGER ::= 256
-#
-#    ub-document-version INTEGER ::= 256
-#
-#    ub-favourite-drink INTEGER ::= 256
-#
-#    ub-host INTEGER ::= 256
-#
-#    ub-information INTEGER ::= 2048
-#
-#    ub-unique-identifier INTEGER ::= 256
-#
-#    ub-personal-title INTEGER ::= 256
-#
-#    ub-photo INTEGER ::= 250000
-#
-#    ub-rfc822-mailbox INTEGER ::= 256
-#
-#    ub-room-number INTEGER ::= 256
-#
-#    ub-text-or-address INTEGER ::= 256
-#
-#    ub-user-class INTEGER ::= 256
-#
-#    ub-user-identifier INTEGER ::= 256
-#
-#    ub-organizational-status INTEGER ::= 256
-#
-#    ub-janet-mailbox INTEGER ::= 256
-#
-#    ub-building-name INTEGER ::= 256
-#
-#    ub-personal-signature ::= 50000
-#
-#    ub-audio INTEGER ::= 250000
-#
-
-# [back to 8]
-# 8.  Object Classes
-#
-# 8.1.  X.500 standard object classes
-#
-#  A number of generally useful object classes are defined in X.521, and
-#  these are supported.  Refer to that document for descriptions of the
-#  suggested usage of these object classes.  The ASN.1 for these object
-#  classes is reproduced for completeness in Appendix C.
-#
-# 8.2.  X.400 standard object classes
-#
-#  A number of object classes defined in X.400 are supported.  Refer to
-#  X.402 for descriptions of the usage of these object classes.  The
-#  ASN.1 for these object classes is reproduced for completeness in
-#  Appendix C.
-#
-# 8.3.  COSINE/Internet object classes
-#
-#  This section attempts to fuse together the object classes designed
-#  for use in the COSINE and Internet pilot activities.  Descriptions
-#  are given of the suggested usage of these object classes.  The ASN.1
-#  for these object classes is also reproduced in Appendix C.
-#
-# 8.3.1.  Pilot Object
-#
-#  The PilotObject object class is used as a sub-class to allow some
-#  common, useful attributes to be assigned to entries of all other
-#  object classes.
-#
-#    pilotObject OBJECT-CLASS
-#        SUBCLASS OF top
-#        MAY CONTAIN {
-#            info,
-#            photo,
-#            manager,
-#            uniqueIdentifier,
-#            lastModifiedTime,
-#            lastModifiedBy,
-#            dITRedirect,
-#            audio}
-#    ::= {pilotObjectClass 3}
-#
-#objectclass ( 0.9.2342.19200300.100.4.3 NAME 'pilotObject'
-#	DESC 'RFC1274: pilot object'
-#	SUP top AUXILIARY
-#	MAY ( info $ photo $ manager $ uniqueIdentifier $
-#		lastModifiedTime $ lastModifiedBy $ dITRedirect $ audio )
-#	)
-
-# 8.3.2.  Pilot Person
-#
-#  The PilotPerson object class is used as a sub-class of person, to
-#  allow the use of a number of additional attributes to be assigned to
-#  entries of object class person.
-#
-#    pilotPerson OBJECT-CLASS
-#        SUBCLASS OF person
-#        MAY CONTAIN {
-#                    userid,
-#                    textEncodedORAddress,
-#                    rfc822Mailbox,
-#                    favouriteDrink,
-#                    roomNumber,
-#                    userClass,
-#                    homeTelephoneNumber,
-#                    homePostalAddress,
-#                    secretary,
-#                    personalTitle,
-#                    preferredDeliveryMethod,
-#                    businessCategory,
-#                    janetMailbox,
-#                    otherMailbox,
-#                    mobileTelephoneNumber,
-#                    pagerTelephoneNumber,
-#                    organizationalStatus,
-#                    mailPreferenceOption,
-#                    personalSignature}
-#    ::= {pilotObjectClass 4}
-#
-objectclass ( 0.9.2342.19200300.100.4.4
-	NAME ( 'pilotPerson' 'newPilotPerson' )
-	SUP person STRUCTURAL
-	MAY ( userid $ textEncodedORAddress $ rfc822Mailbox $
-		favouriteDrink $ roomNumber $ userClass $
-		homeTelephoneNumber $ homePostalAddress $ secretary $
-		personalTitle $ preferredDeliveryMethod $ businessCategory $
-		janetMailbox $ otherMailbox $ mobileTelephoneNumber $
-		pagerTelephoneNumber $ organizationalStatus $
-		mailPreferenceOption $ personalSignature )
-	)
-
-# 8.3.3.  Account
-#
-#  The Account object class is used to define entries representing
-#  computer accounts.  The userid attribute should be used for naming
-#  entries of this object class.
-#
-#    account OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            userid}
-#        MAY CONTAIN {
-#            description,
-#            seeAlso,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName,
-#            host}
-#    ::= {pilotObjectClass 5}
-#
-objectclass ( 0.9.2342.19200300.100.4.5 NAME 'account'
-	SUP top STRUCTURAL
-	MUST userid
-	MAY ( description $ seeAlso $ localityName $
-		organizationName $ organizationalUnitName $ host )
-	)
-
-# 8.3.4.  Document
-#
-#  The Document object class is used to define entries which represent
-#  documents.
-#
-#    document OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            documentIdentifier}
-#        MAY CONTAIN {
-#            commonName,
-#            description,
-#            seeAlso,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName,
-#            documentTitle,
-#            documentVersion,
-#            documentAuthor,
-#            documentLocation,
-#            documentPublisher}
-#    ::= {pilotObjectClass 6}
-#
-objectclass ( 0.9.2342.19200300.100.4.6 NAME 'document'
-	SUP top STRUCTURAL
-	MUST documentIdentifier
-	MAY ( commonName $ description $ seeAlso $ localityName $
-		organizationName $ organizationalUnitName $
-		documentTitle $ documentVersion $ documentAuthor $
-		documentLocation $ documentPublisher )
-	)
-
-# 8.3.5.  Room
-#
-#  The Room object class is used to define entries representing rooms.
-#  The commonName attribute should be used for naming pentries of this
-#  object class.
-#
-#    room OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName}
-#        MAY CONTAIN {
-#            roomNumber,
-#            description,
-#            seeAlso,
-#            telephoneNumber}
-#    ::= {pilotObjectClass 7}
-#
-objectclass ( 0.9.2342.19200300.100.4.7 NAME 'room'
-	SUP top STRUCTURAL
-	MUST commonName
-	MAY ( roomNumber $ description $ seeAlso $ telephoneNumber )
-	)
-
-# 8.3.6.  Document Series
-#
-#  The Document Series object class is used to define an entry which
-#  represents a series of documents (e.g., The Request For Comments
-#  papers).
-#
-#    documentSeries OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName}
-#        MAY CONTAIN {
-#            description,
-#            seeAlso,
-#            telephoneNumber,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName}
-#    ::= {pilotObjectClass 9}
-#
-objectclass ( 0.9.2342.19200300.100.4.9 NAME 'documentSeries'
-	SUP top STRUCTURAL
-	MUST commonName
-	MAY ( description $ seeAlso $ telephonenumber $
-		localityName $ organizationName $ organizationalUnitName )
-	)
-
-# 8.3.7.  Domain
-#
-#  The Domain object class is used to define entries which represent DNS
-#  or NRS domains.  The domainComponent attribute should be used for
-#  naming entries of this object class.  The usage of this object class
-#  is described in more detail in [3].
-#
-#    domain OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            domainComponent}
-#        MAY CONTAIN {
-#            associatedName,
-#            organizationName,
-#            organizationalAttributeSet}
-#    ::= {pilotObjectClass 13}
-#
-objectclass ( 0.9.2342.19200300.100.4.13 NAME 'domain'
-	SUP top STRUCTURAL
-	MUST domainComponent
-	MAY ( associatedName $ organizationName $ description $
-		businessCategory $ seeAlso $ searchGuide $ userPassword $
-		localityName $ stateOrProvinceName $ streetAddress $
-		physicalDeliveryOfficeName $ postalAddress $ postalCode $
-		postOfficeBox $ streetAddress $
-		facsimileTelephoneNumber $ internationalISDNNumber $
-		telephoneNumber $ teletexTerminalIdentifier $ telexNumber $
-		preferredDeliveryMethod $ destinationIndicator $
-		registeredAddress $ x121Address )
-	)
-
-# 8.3.8.  RFC822 Local Part
-#
-#  The RFC822 Local Part object class is used to define entries which
-#  represent the local part of RFC822 mail addresses.  This treats this
-#  part of an RFC822 address as a domain.  The usage of this object
-#  class is described in more detail in [3].
-#
-#    rFC822localPart OBJECT-CLASS
-#        SUBCLASS OF domain
-#        MAY CONTAIN {
-#            commonName,
-#            surname,
-#            description,
-#            seeAlso,
-#            telephoneNumber,
-#            postalAttributeSet,
-#            telecommunicationAttributeSet}
-#    ::= {pilotObjectClass 14}
-#
-objectclass ( 0.9.2342.19200300.100.4.14 NAME 'RFC822localPart'
-	SUP domain STRUCTURAL
-	MAY ( commonName $ surname $ description $ seeAlso $ telephoneNumber $
-		physicalDeliveryOfficeName $ postalAddress $ postalCode $
-		postOfficeBox $ streetAddress $
-		facsimileTelephoneNumber $ internationalISDNNumber $
-		telephoneNumber $ teletexTerminalIdentifier $
-		telexNumber $ preferredDeliveryMethod $ destinationIndicator $
-		registeredAddress $ x121Address )
-	)
-
-# 8.3.9.  DNS Domain
-#
-#  The DNS Domain (Domain NameServer) object class is used to define
-#  entries for DNS domains.  The usage of this object class is described
-#  in more detail in [3].
-#
-#    dNSDomain OBJECT-CLASS
-#        SUBCLASS OF domain
-#        MAY CONTAIN {
-#            ARecord,
-#            MDRecord,
-#            MXRecord,
-#            NSRecord,
-#            SOARecord,
-#            CNAMERecord}
-#    ::= {pilotObjectClass 15}
-#
-objectclass ( 0.9.2342.19200300.100.4.15 NAME 'dNSDomain'
-	SUP domain STRUCTURAL
-	MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $
-		SOARecord $ CNAMERecord )
-	)
-
-# 8.3.10.  Domain Related Object
-#
-#  The Domain Related Object object class is used to define entries
-#  which represent DNS/NRS domains which are "equivalent" to an X.500
-#  domain: e.g., an organisation or organisational unit.  The usage of
-#  this object class is described in more detail in [3].
-#
-#    domainRelatedObject OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            associatedDomain}
-#    ::= {pilotObjectClass 17}
-#
-objectclass ( 0.9.2342.19200300.100.4.17 NAME 'domainRelatedObject'
-	DESC 'RFC1274: an object related to an domain'
-	SUP top AUXILIARY
-	MUST associatedDomain )
-
-# 8.3.11.  Friendly Country
-#
-#  The Friendly Country object class is used to define country entries
-#  in the DIT.  The object class is used to allow friendlier naming of
-#  countries than that allowed by the object class country.  The naming
-#  attribute of object class country, countryName, has to be a 2 letter
-#  string defined in ISO 3166.
-#
-#    friendlyCountry OBJECT-CLASS
-#        SUBCLASS OF country
-#        MUST CONTAIN {
-#            friendlyCountryName}
-#    ::= {pilotObjectClass 18}
-#
-objectclass ( 0.9.2342.19200300.100.4.18 NAME 'friendlyCountry'
-	SUP country STRUCTURAL
-	MUST friendlyCountryName )
-
-# 8.3.12.  Simple Security Object
-#
-#  The Simple Security Object object class is used to allow an entry to
-#  have a userPassword attribute when an entry's principal object
-#  classes do not allow userPassword as an attribute type.
-#
-#    simpleSecurityObject OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            userPassword }
-#    ::= {pilotObjectClass 19}
-#
-## (in core.schema)
-## objectclass ( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObject'
-##	SUP top AUXILIARY
-##	MUST userPassword )
-
-# 8.3.13.  Pilot Organization
-#
-#  The PilotOrganization object class is used as a sub-class of
-#  organization and organizationalUnit to allow a number of additional
-#  attributes to be assigned to entries of object classes organization
-#  and organizationalUnit.
-#
-#    pilotOrganization OBJECT-CLASS
-#        SUBCLASS OF organization, organizationalUnit
-#        MAY CONTAIN {
-#                    buildingName}
-#    ::= {pilotObjectClass 20}
-#
-objectclass ( 0.9.2342.19200300.100.4.20 NAME 'pilotOrganization'
-	SUP ( organization $ organizationalUnit ) STRUCTURAL
-	MAY buildingName )
-
-# 8.3.14.  Pilot DSA
-#
-#  The PilotDSA object class is used as a sub-class of the dsa object
-#  class to allow additional attributes to be assigned to entries for
-#  DSAs.
-#
-#    pilotDSA OBJECT-CLASS
-#        SUBCLASS OF dsa
-#        MUST CONTAIN {
-#            dSAQuality}
-#    ::= {pilotObjectClass 21}
-#
-objectclass ( 0.9.2342.19200300.100.4.21 NAME 'pilotDSA'
-	SUP dsa STRUCTURAL
-	MAY dSAQuality )
-
-# 8.3.15.  Quality Labelled Data
-#
-#  The Quality Labelled Data object class is used to allow the
-#  assignment of the data quality attributes to subtrees in the DIT.
-#
-#  See [8] for more details.
-#
-#    qualityLabelledData OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            dSAQuality}
-#        MAY CONTAIN {
-#            subtreeMinimumQuality,
-#            subtreeMaximumQuality}
-#    ::= {pilotObjectClass 22}
-objectclass ( 0.9.2342.19200300.100.4.22 NAME 'qualityLabelledData'
-	SUP top AUXILIARY
-	MUST dsaQuality
-	MAY ( subtreeMinimumQuality $ subtreeMaximumQuality )
-	)
-
-
-# References
-#
-#    [1]  CCITT/ISO, "X.500, The Directory - overview of concepts,
-#         models and services, CCITT /ISO IS 9594.
-#
-#    [2]  Kille, S., "The THORN and RARE X.500 Naming Architecture, in
-#         University College London, Department of Computer Science
-#         Research Note 89/48, May 1989.
-#
-#    [3]  Kille, S., "X.500 and Domains", RFC 1279, University College
-#         London, November 1991.
-#
-#    [4]  Rose, M., "PSI/NYSERNet White Pages Pilot Project: Status
-#         Report", Technical Report 90-09-10-1, published by NYSERNet
-#         Inc, 1990.
-#
-#    [5]  Craigie, J., "UK Academic Community Directory Service Pilot
-#         Project, pp. 305-310 in Computer Networks and ISDN Systems
-#         17 (1989), published by North Holland.
-#
-#    [6]  Mockapetris, P., "Domain Names - Concepts and Facilities",
-#         RFC 1034, USC/Information Sciences Institute, November 1987.
-#
-#    [7]  Mockapetris, P., "Domain Names - Implementation and
-#         Specification, RFC 1035, USC/Information Sciences Institute,
-#         November 1987.
-#
-#    [8]  Kille, S., "Handling QOS (Quality of service) in the
-#         Directory," publication in process, March 1991.
-#
-#
-# APPENDIX C - Summary of all Object Classes and Attribute Types
-#
-#    -- Some Important Object Identifiers
-#
-#    data OBJECT IDENTIFIER ::= {ccitt 9}
-#    pss OBJECT IDENTIFIER ::= {data 2342}
-#    ucl OBJECT IDENTIFIER ::= {pss 19200300}
-#    pilot OBJECT IDENTIFIER ::= {ucl 100}
-#
-#    pilotAttributeType OBJECT IDENTIFIER ::= {pilot 1}
-#    pilotAttributeSyntax OBJECT IDENTIFIER ::= {pilot 3}
-#    pilotObjectClass OBJECT IDENTIFIER ::= {pilot 4}
-#    pilotGroups OBJECT IDENTIFIER ::= {pilot 10}
-#
-#    iA5StringSyntax OBJECT IDENTIFIER ::= {pilotAttributeSyntax 4}
-#    caseIgnoreIA5StringSyntax OBJECT IDENTIFIER ::=
-#                                          {pilotAttributeSyntax 5}
-#
-#    -- Standard Object Classes
-#
-#    top OBJECT-CLASS
-#        MUST CONTAIN {
-#            objectClass}
-#    ::= {objectClass 0}
-#
-#
-#    alias OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            aliasedObjectName}
-#    ::= {objectClass 1}
-#
-#
-#    country OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            countryName}
-#        MAY CONTAIN {
-#            description,
-#            searchGuide}
-#    ::= {objectClass 2}
-#
-#
-#    locality OBJECT-CLASS
-#        SUBCLASS OF top
-#        MAY CONTAIN {
-#            description,
-#            localityName,
-#            stateOrProvinceName,
-#            searchGuide,
-#            seeAlso,
-#            streetAddress}
-#    ::= {objectClass 3}
-#
-#
-#    organization OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            organizationName}
-#        MAY CONTAIN {
-#            organizationalAttributeSet}
-#    ::= {objectClass 4}
-#
-#
-#    organizationalUnit OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            organizationalUnitName}
-#        MAY CONTAIN {
-#            organizationalAttributeSet}
-#    ::= {objectClass 5}
-#
-#
-#    person OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName,
-#            surname}
-#        MAY CONTAIN {
-#            description,
-#            seeAlso,
-#            telephoneNumber,
-#            userPassword}
-#    ::= {objectClass 6}
-#
-#
-#    organizationalPerson OBJECT-CLASS
-#        SUBCLASS OF person
-#        MAY CONTAIN {
-#            localeAttributeSet,
-#            organizationalUnitName,
-#            postalAttributeSet,
-#            telecommunicationAttributeSet,
-#            title}
-#    ::= {objectClass 7}
-#
-#
-#    organizationalRole OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName}
-#        MAY CONTAIN {
-#            description,
-#            localeAttributeSet,
-#            organizationalUnitName,
-#            postalAttributeSet,
-#            preferredDeliveryMethod,
-#            roleOccupant,
-#            seeAlso,
-#            telecommunicationAttributeSet}
-#    ::= {objectClass 8}
-#
-#
-#    groupOfNames OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName,
-#            member}
-#        MAY CONTAIN {
-#            description,
-#            organizationName,
-#            organizationalUnitName,
-#            owner,
-#            seeAlso,
-#            businessCategory}
-#    ::= {objectClass 9}
-#
-#
-#    residentialPerson OBJECT-CLASS
-#        SUBCLASS OF person
-#        MUST CONTAIN {
-#            localityName}
-#        MAY CONTAIN {
-#            localeAttributeSet,
-#            postalAttributeSet,
-#            preferredDeliveryMethod,
-#            telecommunicationAttributeSet,
-#            businessCategory}
-#    ::= {objectClass 10}
-#
-#
-#    applicationProcess OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName}
-#        MAY CONTAIN {
-#            description,
-#            localityName,
-#            organizationalUnitName,
-#            seeAlso}
-#    ::= {objectClass 11}
-#
-#
-#    applicationEntity OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName,
-#            presentationAddress}
-#        MAY CONTAIN {
-#            description,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName,
-#            seeAlso,
-#            supportedApplicationContext}
-#    ::= {objectClass 12}
-#
-#
-#    dSA OBJECT-CLASS
-#        SUBCLASS OF applicationEntity
-#        MAY CONTAIN {
-#            knowledgeInformation}
-#    ::= {objectClass 13}
-#
-#
-#    device OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName}
-#        MAY CONTAIN {
-#            description,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName,
-#            owner,
-#            seeAlso,
-#            serialNumber}
-#    ::= {objectClass 14}
-#
-#
-#    strongAuthenticationUser OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            userCertificate}
-#    ::= {objectClass 15}
-#
-#
-#    certificationAuthority OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            cACertificate,
-#            certificateRevocationList,
-#            authorityRevocationList}
-#        MAY CONTAIN {
-#            crossCertificatePair}
-#    ::= {objectClass 16}
-#
-#    -- Standard MHS Object Classes
-#
-#    mhsDistributionList OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName,
-#            mhsDLSubmitPermissions,
-#            mhsORAddresses}
-#        MAY CONTAIN {
-#            description,
-#            organizationName,
-#            organizationalUnitName,
-#            owner,
-#            seeAlso,
-#            mhsDeliverableContentTypes,
-#            mhsdeliverableEits,
-#            mhsDLMembers,
-#            mhsPreferredDeliveryMethods}
-#    ::= {mhsObjectClass 0}
-#
-#
-#    mhsMessageStore OBJECT-CLASS
-#        SUBCLASS OF applicationEntity
-#        MAY CONTAIN {
-#            description,
-#            owner,
-#            mhsSupportedOptionalAttributes,
-#            mhsSupportedAutomaticActions,
-#            mhsSupportedContentTypes}
-#    ::= {mhsObjectClass 1}
-#
-#
-#    mhsMessageTransferAgent OBJECT-CLASS
-#        SUBCLASS OF applicationEntity
-#        MAY CONTAIN {
-#            description,
-#            owner,
-#            mhsDeliverableContentLength}
-#    ::= {mhsObjectClass 2}
-#
-#
-#    mhsOrganizationalUser OBJECT-CLASS
-#        SUBCLASS OF organizationalPerson
-#        MUST CONTAIN {
-#            mhsORAddresses}
-#        MAY CONTAIN {
-#            mhsDeliverableContentLength,
-#            mhsDeliverableContentTypes,
-#            mhsDeliverableEits,
-#            mhsMessageStoreName,
-#            mhsPreferredDeliveryMethods }
-#    ::= {mhsObjectClass 3}
-#
-#
-#    mhsResidentialUser OBJECT-CLASS
-#        SUBCLASS OF residentialPerson
-#        MUST CONTAIN {
-#            mhsORAddresses}
-#        MAY CONTAIN {
-#            mhsDeliverableContentLength,
-#            mhsDeliverableContentTypes,
-#            mhsDeliverableEits,
-#            mhsMessageStoreName,
-#            mhsPreferredDeliveryMethods }
-#    ::= {mhsObjectClass 4}
-#
-#
-#    mhsUserAgent OBJECT-CLASS
-#        SUBCLASS OF applicationEntity
-#        MAY CONTAIN {
-#            mhsDeliverableContentLength,
-#            mhsDeliverableContentTypes,
-#            mhsDeliverableEits,
-#            mhsORAddresses,
-#            owner}
-#    ::= {mhsObjectClass 5}
-#
-#
-#
-#
-#    -- Pilot Object Classes
-#
-#    pilotObject OBJECT-CLASS
-#        SUBCLASS OF top
-#        MAY CONTAIN {
-#            info,
-#            photo,
-#            manager,
-#            uniqueIdentifier,
-#            lastModifiedTime,
-#            lastModifiedBy,
-#            dITRedirect,
-#            audio}
-#    ::= {pilotObjectClass 3}
-#    pilotPerson OBJECT-CLASS
-#        SUBCLASS OF person
-#        MAY CONTAIN {
-#                    userid,
-#                    textEncodedORAddress,
-#                    rfc822Mailbox,
-#                    favouriteDrink,
-#                    roomNumber,
-#                    userClass,
-#                    homeTelephoneNumber,
-#                    homePostalAddress,
-#                    secretary,
-#                    personalTitle,
-#                    preferredDeliveryMethod,
-#                    businessCategory,
-#                    janetMailbox,
-#                    otherMailbox,
-#                    mobileTelephoneNumber,
-#                    pagerTelephoneNumber,
-#                    organizationalStatus,
-#                    mailPreferenceOption,
-#                    personalSignature}
-#    ::= {pilotObjectClass 4}
-#
-#
-#    account OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            userid}
-#        MAY CONTAIN {
-#            description,
-#            seeAlso,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName,
-#            host}
-#    ::= {pilotObjectClass 5}
-#
-#
-#    document OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            documentIdentifier}
-#        MAY CONTAIN {
-#            commonName,
-#            description,
-#            seeAlso,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName,
-#            documentTitle,
-#            documentVersion,
-#            documentAuthor,
-#            documentLocation,
-#            documentPublisher}
-#    ::= {pilotObjectClass 6}
-#
-#
-#    room OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName}
-#        MAY CONTAIN {
-#            roomNumber,
-#            description,
-#            seeAlso,
-#            telephoneNumber}
-#    ::= {pilotObjectClass 7}
-#
-#
-#    documentSeries OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            commonName}
-#        MAY CONTAIN {
-#            description,
-#            seeAlso,
-#            telephoneNumber,
-#            localityName,
-#            organizationName,
-#            organizationalUnitName}
-#    ::= {pilotObjectClass 9}
-#
-#
-#    domain OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            domainComponent}
-#        MAY CONTAIN {
-#            associatedName,
-#            organizationName,
-#            organizationalAttributeSet}
-#    ::= {pilotObjectClass 13}
-#
-#
-#    rFC822localPart OBJECT-CLASS
-#        SUBCLASS OF domain
-#        MAY CONTAIN {
-#            commonName,
-#            surname,
-#            description,
-#            seeAlso,
-#            telephoneNumber,
-#            postalAttributeSet,
-#            telecommunicationAttributeSet}
-#    ::= {pilotObjectClass 14}
-#
-#
-#    dNSDomain OBJECT-CLASS
-#        SUBCLASS OF domain
-#        MAY CONTAIN {
-#            ARecord,
-#            MDRecord,
-#            MXRecord,
-#            NSRecord,
-#            SOARecord,
-#            CNAMERecord}
-#    ::= {pilotObjectClass 15}
-#
-#
-#    domainRelatedObject OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            associatedDomain}
-#    ::= {pilotObjectClass 17}
-#
-#
-#    friendlyCountry OBJECT-CLASS
-#        SUBCLASS OF country
-#        MUST CONTAIN {
-#            friendlyCountryName}
-#    ::= {pilotObjectClass 18}
-#
-#
-#    simpleSecurityObject OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            userPassword }
-#    ::= {pilotObjectClass 19}
-#
-#
-#    pilotOrganization OBJECT-CLASS
-#        SUBCLASS OF organization, organizationalUnit
-#        MAY CONTAIN {
-#                    buildingName}
-#    ::= {pilotObjectClass 20}
-#
-#
-#    pilotDSA OBJECT-CLASS
-#        SUBCLASS OF dsa
-#        MUST CONTAIN {
-#            dSAQuality}
-#    ::= {pilotObjectClass 21}
-#
-#
-#    qualityLabelledData OBJECT-CLASS
-#        SUBCLASS OF top
-#        MUST CONTAIN {
-#            dSAQuality}
-#        MAY CONTAIN {
-#            subtreeMinimumQuality,
-#            subtreeMaximumQuality}
-#    ::= {pilotObjectClass 22}
-#
-#
-#
-#
-#    -- Standard Attribute Types
-#
-#    objectClass ObjectClass
-#        ::= {attributeType 0}
-#
-#
-#    aliasedObjectName AliasedObjectName
-#        ::= {attributeType 1}
-#
-#
-#    knowledgeInformation ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreString
-#        ::= {attributeType 2}
-#
-#
-#    commonName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-common-name))
-#        ::= {attributeType 3}
-#
-#
-#    surname ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-surname))
-#        ::= {attributeType 4}
-#
-#
-#    serialNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX printableStringSyntax
-#        (SIZE (1..ub-serial-number))
-#        ::= {attributeType 5}
-#
-#
-#    countryName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX PrintableString
-#        (SIZE (1..ub-country-code))
-#        SINGLE VALUE
-#        ::= {attributeType 6}
-#
-#
-#    localityName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-locality-name))
-#        ::= {attributeType 7}
-#
-#
-#    stateOrProvinceName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-state-name))
-#        ::= {attributeType 8}
-#
-#
-#    streetAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-street-address))
-#        ::= {attributeType 9}
-#
-#
-#    organizationName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-organization-name))
-#        ::= {attributeType 10}
-#
-#
-#    organizationalUnitName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-organizational-unit-name))
-#        ::= {attributeType 11}
-#
-#
-#    title ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-title))
-#        ::= {attributeType 12}
-#
-#
-#    description ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-description))
-#        ::= {attributeType 13}
-#
-#
-#    searchGuide ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX Guide
-#        ::= {attributeType 14}
-#
-#
-#    businessCategory ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-business-category))
-#        ::= {attributeType 15}
-#
-#
-#    postalAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX PostalAddress
-#        MATCHES FOR EQUALITY
-#        ::= {attributeType 16}
-#
-#
-#    postalCode ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-postal-code))
-#        ::= {attributeType 17}
-#
-#
-#    postOfficeBox ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-post-office-box))
-#        ::= {attributeType 18}
-#
-#
-#    physicalDeliveryOfficeName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax
-#        (SIZE (1..ub-physical-office-name))
-#        ::= {attributeType 19}
-#
-#
-#    telephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX telephoneNumberSyntax
-#        (SIZE (1..ub-telephone-number))
-#        ::= {attributeType 20}
-#
-#
-#    telexNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX TelexNumber
-#        (SIZE (1..ub-telex))
-#        ::= {attributeType 21}
-#
-#
-#    teletexTerminalIdentifier ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX TeletexTerminalIdentifier
-#        (SIZE (1..ub-teletex-terminal-id))
-#        ::= {attributeType 22}
-#
-#
-#    facsimileTelephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX FacsimileTelephoneNumber
-#        ::= {attributeType 23}
-#
-#
-#    x121Address ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX NumericString
-#        (SIZE (1..ub-x121-address))
-#        ::= {attributeType 24}
-#
-#
-#    internationaliSDNNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX NumericString
-#        (SIZE (1..ub-isdn-address))
-#        ::= {attributeType 25}
-#
-#
-#    registeredAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX PostalAddress
-#        ::= {attributeType 26}
-#
-#
-#    destinationIndicator ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX PrintableString
-#        (SIZE (1..ub-destination-indicator))
-#        MATCHES FOR EQUALITY SUBSTRINGS
-#        ::= {attributeType 27}
-#
-#
-#    preferredDeliveryMethod ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX deliveryMethod
-#        ::= {attributeType 28}
-#
-#
-#    presentationAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX PresentationAddress
-#        MATCHES FOR EQUALITY
-#        ::= {attributeType 29}
-#
-#
-#    supportedApplicationContext ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX objectIdentifierSyntax
-#        ::= {attributeType 30}
-#
-#
-#    member ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX distinguishedNameSyntax
-#        ::= {attributeType 31}
-#
-#
-#    owner ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX distinguishedNameSyntax
-#        ::= {attributeType 32}
-#
-#
-#    roleOccupant ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX distinguishedNameSyntax
-#        ::= {attributeType 33}
-#
-#
-#    seeAlso ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX distinguishedNameSyntax
-#        ::= {attributeType 34}
-#
-#
-#    userPassword ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX Userpassword
-#        ::= {attributeType 35}
-#
-#
-#    userCertificate ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX UserCertificate
-#        ::= {attributeType 36}
-#
-#
-#    cACertificate ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX cACertificate
-#        ::= {attributeType 37}
-#
-#
-#    authorityRevocationList ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX AuthorityRevocationList
-#        ::= {attributeType 38}
-#
-#
-#    certificateRevocationList ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX CertificateRevocationList
-#        ::= {attributeType 39}
-#
-#
-#    crossCertificatePair ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX CrossCertificatePair
-#        ::= {attributeType 40}
-#
-#
-#
-#
-#    -- Standard MHS Attribute Types
-#
-#    mhsDeliverableContentLength ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX integer
-#        ::= {mhsAttributeType 0}
-#
-#
-#    mhsDeliverableContentTypes ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX oID
-#        ::= {mhsAttributeType 1}
-#
-#
-#    mhsDeliverableEits ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX oID
-#        ::= {mhsAttributeType 2}
-#
-#
-#    mhsDLMembers ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX oRName
-#        ::= {mhsAttributeType 3}
-#
-#
-#    mhsDLSubmitPermissions ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX dLSubmitPermission
-#        ::= {mhsAttributeType 4}
-#
-#
-#    mhsMessageStoreName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX dN
-#        ::= {mhsAttributeType 5}
-#
-#
-#    mhsORAddresses ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX oRAddress
-#        ::= {mhsAttributeType 6}
-#
-#
-#    mhsPreferredDeliveryMethods ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX deliveryMethod
-#        ::= {mhsAttributeType 7}
-#
-#
-#    mhsSupportedAutomaticActions ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX oID
-#        ::= {mhsAttributeType 8}
-#
-#
-#    mhsSupportedContentTypes ATTRIBUTE
-#
-#        WITH ATTRIBUTE-SYNTAX oID
-#        ::= {mhsAttributeType 9}
-#
-#
-#    mhsSupportedOptionalAttributes ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX oID
-#        ::= {mhsAttributeType 10}
-#
-#
-#
-#
-#    -- Pilot Attribute Types
-#
-#    userid ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-user-identifier))
-#    ::= {pilotAttributeType 1}
-#
-#
-#    textEncodedORAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#        (SIZE (1 .. ub-text-encoded-or-address))
-#    ::= {pilotAttributeType 2}
-#
-#
-#    rfc822Mailbox ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#            (SIZE (1 .. ub-rfc822-mailbox))
-#    ::= {pilotAttributeType 3}
-#
-#
-#    info ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-information))
-#    ::= {pilotAttributeType 4}
-#
-#
-#    favouriteDrink ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-favourite-drink))
-#    ::= {pilotAttributeType 5}
-#
-#
-#    roomNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-room-number))
-#    ::= {pilotAttributeType 6}
-#
-#
-#    photo ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            CHOICE {
-#                g3-facsimile [3] G3FacsimileBodyPart
-#                }
-#        (SIZE (1 .. ub-photo))
-#    ::= {pilotAttributeType 7}
-#
-#
-#    userClass ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-user-class))
-#    ::= {pilotAttributeType 8}
-#
-#
-#    host ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-host))
-#    ::= {pilotAttributeType 9}
-#
-#
-#    manager ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 10}
-#
-#
-#    documentIdentifier ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-document-identifier))
-#    ::= {pilotAttributeType 11}
-#
-#
-#    documentTitle ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#        (SIZE (1 .. ub-document-title))
-#    ::= {pilotAttributeType 12}
-#
-#
-#    documentVersion ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-document-version))
-#    ::= {pilotAttributeType 13}
-#
-#
-#    documentAuthor ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 14}
-#
-#
-#    documentLocation ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-document-location))
-#    ::= {pilotAttributeType 15}
-#
-#
-#    homeTelephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            telephoneNumberSyntax
-#    ::= {pilotAttributeType 20}
-#
-#
-#    secretary ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 21}
-#
-#
-#    otherMailbox ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            SEQUENCE {
-#                    mailboxType PrintableString, -- e.g. Telemail
-#                    mailbox IA5String  -- e.g. X378:Joe
-#            }
-#    ::= {pilotAttributeType 22}
-#
-#
-#    lastModifiedTime ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            uTCTimeSyntax
-#    ::= {pilotAttributeType 23}
-#
-#
-#    lastModifiedBy ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 24}
-#
-#
-#    domainComponent ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#            SINGLE VALUE
-#    ::= {pilotAttributeType 25}
-#
-#
-#    aRecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 26}
-#
-#
-#    mXRecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 28}
-#
-#
-#    nSRecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 29}
-#
-#    sOARecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            DNSRecordSyntax
-#    ::= {pilotAttributeType 30}
-#
-#
-#    cNAMERecord ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            iA5StringSyntax
-#    ::= {pilotAttributeType 31}
-#
-#
-#    associatedDomain ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#    ::= {pilotAttributeType 37}
-#
-#
-#    associatedName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 38}
-#
-#
-#    homePostalAddress ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            postalAddress
-#            MATCHES FOR EQUALITY
-#    ::= {pilotAttributeType 39}
-#
-#
-#    personalTitle ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-personal-title))
-#    ::= {pilotAttributeType 40}
-#
-#
-#    mobileTelephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            telephoneNumberSyntax
-#    ::= {pilotAttributeType 41}
-#
-#
-#    pagerTelephoneNumber ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            telephoneNumberSyntax
-#    ::= {pilotAttributeType 42}
-#
-#
-#    friendlyCountryName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#    ::= {pilotAttributeType 43}
-#
-#
-#    uniqueIdentifier ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-unique-identifier))
-#    ::= {pilotAttributeType 44}
-#
-#
-#    organizationalStatus ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-organizational-status))
-#    ::= {pilotAttributeType 45}
-#
-#
-#    janetMailbox ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreIA5StringSyntax
-#            (SIZE (1 .. ub-janet-mailbox))
-#    ::= {pilotAttributeType 46}
-#
-#
-#    mailPreferenceOption ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX ENUMERATED {
-#                no-list-inclusion(0),
-#                any-list-inclusion(1),  -- may be added to any lists
-#                professional-list-inclusion(2)
-#                                        -- may be added to lists
-#                                        -- which the list provider
-#                                        -- views as related to the
-#                                        -- users professional inter-
-#                                        -- ests, perhaps evaluated
-#                                        -- from the business of the
-#                                        -- organisation or keywords
-#                                        -- in the entry.
-#                }
-#    ::= {pilotAttributeType 47}
-#
-#
-#    buildingName ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            caseIgnoreStringSyntax
-#            (SIZE (1 .. ub-building-name))
-#    ::= {pilotAttributeType 48}
-#
-#
-#    dSAQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DSAQualitySyntax
-#            SINGLE VALUE
-#    ::= {pilotAttributeType 49}
-#
-#
-#    singleLevelQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DataQualitySyntax
-#            SINGLE VALUE
-#
-#
-#    subtreeMinimumQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DataQualitySyntax
-#            SINGLE VALUE
-#               -- Defaults to singleLevelQuality
-#    ::= {pilotAttributeType 51}
-#
-#
-#    subtreeMaximumQuality ATTRIBUTE
-#            WITH ATTRIBUTE-SYNTAX DataQualitySyntax
-#            SINGLE VALUE
-#               -- Defaults to singleLevelQuality
-#    ::= {pilotAttributeType 52}
-#
-#
-#    personalSignature ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            CHOICE {
-#                g3-facsimile [3] G3FacsimileBodyPart
-#                }
-#        (SIZE (1 .. ub-personal-signature))
-#    ::= {pilotAttributeType 53}
-#
-#
-#    dITRedirect ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            distinguishedNameSyntax
-#    ::= {pilotAttributeType 54}
-#
-#
-#    audio ATTRIBUTE
-#        WITH ATTRIBUTE-SYNTAX
-#            Audio
-#        (SIZE (1 .. ub-audio))
-#    ::= {pilotAttributeType 55}
-#
-#    documentPublisher ATTRIBUTE
-#            WITH ATTRIBUTE SYNTAX caseIgnoreStringSyntax
-#    ::= {pilotAttributeType 56}
-#
-#
-#
-#    -- Generally useful syntaxes
-#
-#
-#    caseIgnoreIA5StringSyntax ATTRIBUTE-SYNTAX
-#            IA5String
-#            MATCHES FOR EQUALITY SUBSTRINGS
-#
-#
-#    iA5StringSyntax ATTRIBUTE-SYNTAX
-#        IA5String
-#        MATCHES FOR EQUALITY SUBSTRINGS
-#
-#
-#    -- Syntaxes to support the DNS attributes
-#
-#    DNSRecordSyntax ATTRIBUTE-SYNTAX
-#            IA5String
-#            MATCHES FOR EQUALITY
-#
-#
-#    NRSInformationSyntax ATTRIBUTE-SYNTAX
-#            NRSInformation
-#            MATCHES FOR EQUALITY
-#
-#
-#    NRSInformation ::=  SET {
-#                    [0] Context,
-#                    [1] Address-space-id,
-#                    routes [2] SEQUENCE OF SEQUENCE {
-#                    Route-cost,
-#                    Addressing-info }
-#            }
-#
-#
-#    -- Upper bounds on length of attribute values
-#
-#
-#    ub-document-identifier INTEGER ::= 256
-#
-#    ub-document-location INTEGER ::= 256
-#
-#    ub-document-title INTEGER ::= 256
-#
-#    ub-document-version INTEGER ::= 256
-#
-#    ub-favourite-drink INTEGER ::= 256
-#
-#    ub-host INTEGER ::= 256
-#
-#    ub-information INTEGER ::= 2048
-#
-#    ub-unique-identifier INTEGER ::= 256
-#
-#    ub-personal-title INTEGER ::= 256
-#
-#    ub-photo INTEGER ::= 250000
-#
-#    ub-rfc822-mailbox INTEGER ::= 256
-#
-#    ub-room-number INTEGER ::= 256
-#
-#    ub-text-or-address INTEGER ::= 256
-#
-#    ub-user-class INTEGER ::= 256
-#
-#    ub-user-identifier INTEGER ::= 256
-#
-#    ub-organizational-status INTEGER ::= 256
-#
-#    ub-janet-mailbox INTEGER ::= 256
-#
-#    ub-building-name INTEGER ::= 256
-#
-#    ub-personal-signature ::= 50000
-#
-#    ub-audio INTEGER ::= 250000
-#
-# [remainder of memo trimmed]
-
diff --git a/connector/ldap/testdata/inetorgperson.schema b/connector/ldap/testdata/inetorgperson.schema
deleted file mode 100644
index 4a7077e6f2c7ca5b87ed3091dd88d7930d898120..0000000000000000000000000000000000000000
--- a/connector/ldap/testdata/inetorgperson.schema
+++ /dev/null
@@ -1,155 +0,0 @@
-# inetorgperson.schema -- InetOrgPerson (RFC2798)
-# $OpenLDAP$
-## This work is part of OpenLDAP Software <http://www.openldap.org/>.
-##
-## Copyright 1998-2016 The OpenLDAP Foundation.
-## All rights reserved.
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted only as authorized by the OpenLDAP
-## Public License.
-##
-## A copy of this license is available in the file LICENSE in the
-## top-level directory of the distribution or, alternatively, at
-## <http://www.OpenLDAP.org/license.html>.
-#
-# InetOrgPerson (RFC2798)
-#
-# Depends upon
-#   Definition of an X.500 Attribute Type and an Object Class to Hold
-#   Uniform Resource Identifiers (URIs) [RFC2079]
-#	(core.schema)
-#
-#   A Summary of the X.500(96) User Schema for use with LDAPv3 [RFC2256]
-#	(core.schema)
-#
-#   The COSINE and Internet X.500 Schema [RFC1274] (cosine.schema)
-
-# carLicense
-# This multivalued field is used to record the values of the license or
-# registration plate associated with an individual.
-attributetype ( 2.16.840.1.113730.3.1.1
-	NAME 'carLicense'
-	DESC 'RFC2798: vehicle license or registration plate'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-# departmentNumber
-# Code for department to which a person belongs.  This can also be
-# strictly numeric (e.g., 1234) or alphanumeric (e.g., ABC/123).
-attributetype ( 2.16.840.1.113730.3.1.2
-	NAME 'departmentNumber'
-	DESC 'RFC2798: identifies a department within an organization'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-# displayName
-# When displaying an entry, especially within a one-line summary list, it
-# is useful to be able to identify a name to be used.  Since other attri-
-# bute types such as 'cn' are multivalued, an additional attribute type is
-# needed.  Display name is defined for this purpose.
-attributetype ( 2.16.840.1.113730.3.1.241
-	NAME 'displayName'
-	DESC 'RFC2798: preferred name to be used when displaying entries'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-	SINGLE-VALUE )
-
-# employeeNumber
-# Numeric or alphanumeric identifier assigned to a person, typically based
-# on order of hire or association with an organization.  Single valued.
-attributetype ( 2.16.840.1.113730.3.1.3
-	NAME 'employeeNumber'
-	DESC 'RFC2798: 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 )
-
-# employeeType
-# Used to identify the employer to employee relationship.  Typical values
-# used will be "Contractor", "Employee", "Intern", "Temp", "External", and
-# "Unknown" but any value may be used.
-attributetype ( 2.16.840.1.113730.3.1.4
-	NAME 'employeeType'
-	DESC 'RFC2798: type of employment for a person'
-	EQUALITY caseIgnoreMatch
-	SUBSTR caseIgnoreSubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-# jpegPhoto
-# Used to store one or more images of a person using the JPEG File
-# Interchange Format [JFIF].
-# Note that the jpegPhoto attribute type was defined for use in the
-# Internet X.500 pilots but no referencable definition for it could be
-# located.
-attributetype ( 0.9.2342.19200300.100.1.60
-	NAME 'jpegPhoto'
-	DESC 'RFC2798: a JPEG image'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 )
-
-# preferredLanguage
-# Used to indicate an individual's preferred written or spoken
-# language.  This is useful for international correspondence or human-
-# computer interaction.  Values for this attribute type MUST conform to
-# the definition of the Accept-Language header field defined in
-# [RFC2068] with one exception:  the sequence "Accept-Language" ":"
-# should be omitted.  This is a single valued attribute type.
-attributetype ( 2.16.840.1.113730.3.1.39
-	NAME 'preferredLanguage'
-	DESC 'RFC2798: 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 )
-
-# userSMIMECertificate
-# A PKCS#7 [RFC2315] SignedData, where the content that is signed is
-# ignored by consumers of userSMIMECertificate values.  It is
-# recommended that values have a `contentType' of data with an absent
-# `content' field.  Values of this attribute contain a person's entire
-# certificate chain and an smimeCapabilities field [RFC2633] that at a
-# minimum describes their SMIME algorithm capabilities.  Values for
-# this attribute are to be stored and requested in binary form, as
-# 'userSMIMECertificate;binary'.  If available, this attribute is
-# preferred over the userCertificate attribute for S/MIME applications.
-## OpenLDAP note: ";binary" transfer should NOT be used as syntax is binary
-attributetype ( 2.16.840.1.113730.3.1.40
-	NAME 'userSMIMECertificate'
-	DESC 'RFC2798: PKCS#7 SignedData used to support S/MIME'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 )
-
-# userPKCS12
-# PKCS #12 [PKCS12] provides a format for exchange of personal identity
-# information.  When such information is stored in a directory service,
-# the userPKCS12 attribute should be used. This attribute is to be stored
-# and requested in binary form, as 'userPKCS12;binary'.  The attribute
-# values are PFX PDUs stored as binary data.
-## OpenLDAP note: ";binary" transfer should NOT be used as syntax is binary
-attributetype ( 2.16.840.1.113730.3.1.216
-	NAME 'userPKCS12'
-	DESC 'RFC2798: personal identity information, a PKCS #12 PFX'
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 )
-
-
-# inetOrgPerson
-# The inetOrgPerson represents people who are associated with an
-# organization in some way.  It is a structural class and is derived
-# from the organizationalPerson which is defined in X.521 [X521].
-objectclass	( 2.16.840.1.113730.3.2.2
-    NAME 'inetOrgPerson'
-	DESC 'RFC2798: Internet Organizational Person'
-    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 )
-	)
diff --git a/connector/ldap/testdata/misc.schema b/connector/ldap/testdata/misc.schema
deleted file mode 100644
index f01118f1fbea783b673bfbcc127b11cc6f9deb35..0000000000000000000000000000000000000000
--- a/connector/ldap/testdata/misc.schema
+++ /dev/null
@@ -1,75 +0,0 @@
-# misc.schema -- assorted schema definitions
-# $OpenLDAP$
-## This work is part of OpenLDAP Software <http://www.openldap.org/>.
-##
-## Copyright 1998-2016 The OpenLDAP Foundation.
-## All rights reserved.
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted only as authorized by the OpenLDAP
-## Public License.
-##
-## A copy of this license is available in the file LICENSE in the
-## top-level directory of the distribution or, alternatively, at
-## <http://www.OpenLDAP.org/license.html>.
-#
-# Assorted definitions from several sources, including
-# ''works in progress''.  Contents of this file are
-# subject to change (including deletion) without notice.
-#
-# Not recommended for production use!
-# Use with extreme caution!
-
-#-----------------------------------------------------------
-# draft-lachman-laser-ldap-mail-routing-02.txt !!!EXPIRED!!!
-#	(a work in progress)
-#
-attributetype ( 2.16.840.1.113730.3.1.13
-	NAME 'mailLocalAddress'
-	DESC 'RFC822 email address of this recipient'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-
-attributetype ( 2.16.840.1.113730.3.1.18
-	NAME 'mailHost'
-	DESC 'FQDN of the SMTP/MTA of this recipient'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}
-	SINGLE-VALUE )
-
-attributetype ( 2.16.840.1.113730.3.1.47
-	NAME 'mailRoutingAddress'
-	DESC 'RFC822 routing address of this recipient'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}
-	SINGLE-VALUE )
-
-# I-D leaves this OID TBD.
-# iPlanet uses 2.16.840.1.113.730.3.2.147 but that is an
-# improperly delegated OID.  A typo is likely.
-objectclass ( 2.16.840.1.113730.3.2.147
-	NAME 'inetLocalMailRecipient'
-	DESC 'Internet local mail recipient'
-	SUP top AUXILIARY
-	MAY	( mailLocalAddress $ mailHost $ mailRoutingAddress ) )
-
-#-----------------------------------------------------------
-# draft-srivastava-ldap-mail-00.txt !!!EXPIRED!!!
-#	(a work in progress)
-#
-attributetype ( 1.3.6.1.4.1.42.2.27.2.1.15
-	NAME 'rfc822MailMember'
-	DESC 'rfc822 mail address of group member(s)'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-#-----------------------------------------------------------
-# !!!no I-D!!!
-#	(a work in progress)
-#
-objectclass ( 1.3.6.1.4.1.42.2.27.1.2.5
-	NAME 'nisMailAlias'
-	DESC 'NIS mail alias'
-	SUP top STRUCTURAL
-	MUST cn
-	MAY rfc822MailMember )
diff --git a/connector/ldap/testdata/nis.schema b/connector/ldap/testdata/nis.schema
deleted file mode 100644
index 7d8e1c3d838134ae87094be8715b9eb479b2c43e..0000000000000000000000000000000000000000
--- a/connector/ldap/testdata/nis.schema
+++ /dev/null
@@ -1,237 +0,0 @@
-# $OpenLDAP$
-## This work is part of OpenLDAP Software <http://www.openldap.org/>.
-##
-## Copyright 1998-2016 The OpenLDAP Foundation.
-## All rights reserved.
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted only as authorized by the OpenLDAP
-## Public License.
-##
-## A copy of this license is available in the file LICENSE in the
-## top-level directory of the distribution or, alternatively, at
-## <http://www.OpenLDAP.org/license.html>.
-
-# Definitions from RFC2307 (Experimental)
-#	An Approach for Using LDAP as a Network Information Service
-
-# Depends upon core.schema and cosine.schema
-
-# Note: The definitions in RFC2307 are given in syntaxes closely related
-# to those in RFC2252, however, some liberties are taken that are not
-# supported by RFC2252.  This file has been written following RFC2252
-# strictly.
-
-# OID Base is iso(1) org(3) dod(6) internet(1) directory(1) nisSchema(1).
-# i.e. nisSchema in RFC2307 is 1.3.6.1.1.1
-#
-# Syntaxes are under 1.3.6.1.1.1.0 (two new syntaxes are defined)
-#	validaters for these syntaxes are incomplete, they only
-#	implement printable string validation (which is good as the
-#	common use of these syntaxes violates the specification).
-# Attribute types are under 1.3.6.1.1.1.1
-# Object classes are under 1.3.6.1.1.1.2
-
-# Attribute Type Definitions
-
-# builtin
-#attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber'
-#	DESC 'An integer uniquely identifying a user in an administrative domain'
-#	EQUALITY integerMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-# builtin
-#attributetype ( 1.3.6.1.1.1.1.1 NAME 'gidNumber'
-#	DESC 'An integer uniquely identifying a group in an administrative domain'
-#	EQUALITY integerMatch
-#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.2 NAME 'gecos'
-	DESC 'The GECOS field; the common name'
-	EQUALITY caseIgnoreIA5Match
-	SUBSTR caseIgnoreIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.3 NAME 'homeDirectory'
-	DESC 'The absolute path to the home directory'
-	EQUALITY caseExactIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.4 NAME 'loginShell'
-	DESC 'The path to the login shell'
-	EQUALITY caseExactIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.5 NAME 'shadowLastChange'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.6 NAME 'shadowMin'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.7 NAME 'shadowMax'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.8 NAME 'shadowWarning'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.9 NAME 'shadowInactive'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.10 NAME 'shadowExpire'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.11 NAME 'shadowFlag'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.12 NAME 'memberUid'
-	EQUALITY caseExactIA5Match
-	SUBSTR caseExactIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-attributetype ( 1.3.6.1.1.1.1.13 NAME 'memberNisNetgroup'
-	EQUALITY caseExactIA5Match
-	SUBSTR caseExactIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple'
-	DESC 'Netgroup triple'
-	SYNTAX 1.3.6.1.1.1.0.0 )
-
-attributetype ( 1.3.6.1.1.1.1.15 NAME 'ipServicePort'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.16 NAME 'ipServiceProtocol'
-	SUP name )
-
-attributetype ( 1.3.6.1.1.1.1.17 NAME 'ipProtocolNumber'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.18 NAME 'oncRpcNumber'
-	EQUALITY integerMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.19 NAME 'ipHostNumber'
-	DESC 'IP address'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
-
-attributetype ( 1.3.6.1.1.1.1.20 NAME 'ipNetworkNumber'
-	DESC 'IP network'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.21 NAME 'ipNetmaskNumber'
-	DESC 'IP netmask'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.1.1.1.22 NAME 'macAddress'
-	DESC 'MAC address'
-	EQUALITY caseIgnoreIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
-
-attributetype ( 1.3.6.1.1.1.1.23 NAME 'bootParameter'
-	DESC 'rpc.bootparamd parameter'
-	SYNTAX 1.3.6.1.1.1.0.1 )
-
-attributetype ( 1.3.6.1.1.1.1.24 NAME 'bootFile'
-	DESC 'Boot image name'
-	EQUALITY caseExactIA5Match
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
-attributetype ( 1.3.6.1.1.1.1.26 NAME 'nisMapName'
-	SUP name )
-
-attributetype ( 1.3.6.1.1.1.1.27 NAME 'nisMapEntry'
-	EQUALITY caseExactIA5Match
-	SUBSTR caseExactIA5SubstringsMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} SINGLE-VALUE )
-
-# Object Class Definitions
-
-objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'
-	DESC 'Abstraction of an account with POSIX attributes'
-	SUP top AUXILIARY
-	MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
-	MAY ( userPassword $ loginShell $ gecos $ description ) )
-
-objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount'
-	DESC 'Additional attributes for shadow passwords'
-	SUP top AUXILIARY
-	MUST uid
-	MAY ( userPassword $ shadowLastChange $ shadowMin $
-	      shadowMax $ shadowWarning $ shadowInactive $
-	      shadowExpire $ shadowFlag $ description ) )
-
-objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup'
-	DESC 'Abstraction of a group of accounts'
-	SUP top STRUCTURAL
-	MUST ( cn $ gidNumber )
-	MAY ( userPassword $ memberUid $ description ) )
-
-objectclass ( 1.3.6.1.1.1.2.3 NAME 'ipService'
-	DESC 'Abstraction an Internet Protocol service'
-	SUP top STRUCTURAL
-	MUST ( cn $ ipServicePort $ ipServiceProtocol )
-	MAY ( description ) )
-
-objectclass ( 1.3.6.1.1.1.2.4 NAME 'ipProtocol'
-	DESC 'Abstraction of an IP protocol'
-	SUP top STRUCTURAL
-	MUST ( cn $ ipProtocolNumber $ description )
-	MAY description )
-
-objectclass ( 1.3.6.1.1.1.2.5 NAME 'oncRpc'
-	DESC 'Abstraction of an ONC/RPC binding'
-	SUP top STRUCTURAL
-	MUST ( cn $ oncRpcNumber $ description )
-	MAY description )
-
-objectclass ( 1.3.6.1.1.1.2.6 NAME 'ipHost'
-	DESC 'Abstraction of a host, an IP device'
-	SUP top AUXILIARY
-	MUST ( cn $ ipHostNumber )
-	MAY ( l $ description $ manager ) )
-
-objectclass ( 1.3.6.1.1.1.2.7 NAME 'ipNetwork'
-	DESC 'Abstraction of an IP network'
-	SUP top STRUCTURAL
-	MUST ( cn $ ipNetworkNumber )
-	MAY ( ipNetmaskNumber $ l $ description $ manager ) )
-
-objectclass ( 1.3.6.1.1.1.2.8 NAME 'nisNetgroup'
-	DESC 'Abstraction of a netgroup'
-	SUP top STRUCTURAL
-	MUST cn
-	MAY ( nisNetgroupTriple $ memberNisNetgroup $ description ) )
-
-objectclass ( 1.3.6.1.1.1.2.9 NAME 'nisMap'
-	DESC 'A generic abstraction of a NIS map'
-	SUP top STRUCTURAL
-	MUST nisMapName
-	MAY description )
-
-objectclass ( 1.3.6.1.1.1.2.10 NAME 'nisObject'
-	DESC 'An entry in a NIS map'
-	SUP top STRUCTURAL
-	MUST ( cn $ nisMapEntry $ nisMapName )
-	MAY description )
-
-objectclass ( 1.3.6.1.1.1.2.11 NAME 'ieee802Device'
-	DESC 'A device with a MAC address'
-	SUP top AUXILIARY
-	MAY macAddress )
-
-objectclass ( 1.3.6.1.1.1.2.12 NAME 'bootableDevice'
-	DESC 'A device with boot parameters'
-	SUP top AUXILIARY
-	MAY ( bootFile $ bootParameter ) )
diff --git a/connector/ldap/testdata/openldap.schema b/connector/ldap/testdata/openldap.schema
deleted file mode 100644
index 594fc8aa90caec6c1b5fb7419a1a48fb7a6628a9..0000000000000000000000000000000000000000
--- a/connector/ldap/testdata/openldap.schema
+++ /dev/null
@@ -1,54 +0,0 @@
-# $OpenLDAP$
-## This work is part of OpenLDAP Software <http://www.openldap.org/>.
-##
-## Copyright 1998-2016 The OpenLDAP Foundation.
-## All rights reserved.
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted only as authorized by the OpenLDAP
-## Public License.
-##
-## A copy of this license is available in the file LICENSE in the
-## top-level directory of the distribution or, alternatively, at
-## <http://www.OpenLDAP.org/license.html>.
-
-#
-# OpenLDAP Project's directory schema items
-#
-# depends upon:
-#	core.schema
-#	cosine.schema
-#	inetorgperson.schema
-#
-# These are provided for informational purposes only.
-
-objectIdentifier OpenLDAProot 1.3.6.1.4.1.4203
-
-objectIdentifier OpenLDAP OpenLDAProot:1
-objectIdentifier OpenLDAPattributeType OpenLDAP:3
-objectIdentifier OpenLDAPobjectClass OpenLDAP:4
-
-objectClass ( OpenLDAPobjectClass:3
-	NAME 'OpenLDAPorg'
-	DESC 'OpenLDAP Organizational Object'
-	SUP organization
-	MAY ( buildingName $ displayName $ labeledURI ) )
-
-objectClass ( OpenLDAPobjectClass:4
-	NAME 'OpenLDAPou'
-	DESC 'OpenLDAP Organizational Unit Object'
-	SUP organizationalUnit
-	MAY ( buildingName $ displayName $ labeledURI $ o ) )
-
-objectClass ( OpenLDAPobjectClass:5
-	NAME 'OpenLDAPperson'
-	DESC 'OpenLDAP Person'
-	SUP ( pilotPerson $ inetOrgPerson )
-	MUST ( uid $ cn )
-	MAY ( givenName $ labeledURI $ o ) )
-
-objectClass ( OpenLDAPobjectClass:6
-	NAME 'OpenLDAPdisplayableObject'
-	DESC 'OpenLDAP Displayable Object'
-	AUXILIARY
-	MAY displayName )
diff --git a/go.mod b/go.mod
index 739a38efb55f10cccb6c0f75a02edc710c77fc0a..99a51004930e0e1291fa005900c654b1aa027d40 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,7 @@
 module github.com/dexidp/dex
 
 require (
+	github.com/Microsoft/hcsshim v0.8.7 // indirect
 	github.com/beevik/etree v1.1.0
 	github.com/coreos/bbolt v1.3.3 // indirect
 	github.com/coreos/etcd v3.3.13+incompatible
@@ -12,7 +13,6 @@ require (
 	github.com/felixge/httpsnoop v1.0.0
 	github.com/ghodss/yaml v1.0.0
 	github.com/go-sql-driver/mysql v1.4.1
-	github.com/gogo/protobuf v1.2.1 // indirect
 	github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect
 	github.com/golang/protobuf v1.3.2
 	github.com/google/btree v1.0.0 // indirect
@@ -29,16 +29,15 @@ require (
 	github.com/kylelemons/godebug v1.1.0
 	github.com/lib/pq v1.2.0
 	github.com/mattn/go-sqlite3 v1.11.0
-	github.com/pkg/errors v0.8.1 // indirect
 	github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
 	github.com/prometheus/client_golang v1.0.0
 	github.com/prometheus/common v0.6.0 // indirect
-	github.com/prometheus/procfs v0.0.3 // indirect
 	github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7
 	github.com/sirupsen/logrus v1.4.2
 	github.com/soheilhy/cmux v0.1.4 // indirect
 	github.com/spf13/cobra v0.0.5
 	github.com/stretchr/testify v1.3.0
+	github.com/testcontainers/testcontainers-go v0.0.9
 	github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect
 	github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
 	go.etcd.io/bbolt v1.3.3 // indirect
@@ -49,7 +48,6 @@ require (
 	golang.org/x/lint v0.0.0-20190409202823-959b441ac422
 	golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7
 	golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
-	golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // indirect
 	golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
 	golang.org/x/tools v0.0.0-20190813214729-9dba7caff850 // indirect
 	google.golang.org/api v0.10.0
diff --git a/go.sum b/go.sum
index 9cf627f7c51dbb4ba010af18825d4ccd71fce733..73f3b2e1709b5f5855221b6f161efcf58ce02aca 100644
--- a/go.sum
+++ b/go.sum
@@ -3,7 +3,15 @@ cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Microsoft/go-winio v0.4.11 h1:zoIOcVf0xPN1tnMVbTtEdI+P8OofVk3NObnwOQ6nK2Q=
+github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 h1:ygIc8M6trr62pF5DucadTWGdEB4mEyvzi0e2nbcmcyA=
+github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
+github.com/Microsoft/hcsshim v0.8.7 h1:ptnOoufxGSzauVTsdE+wMYnCWA301PdoN4xg5oRdZpg=
+github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
@@ -12,7 +20,19 @@ github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
+github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
+github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc h1:TP+534wVlf61smEIq1nwLLAjQVEK2EADoW3CX9AuT+8=
+github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
 github.com/coreos/bbolt v1.3.3 h1:n6AiVyVRKQFNb6mJlwESEvvLoDyiTzXX7ORAUlkeBdY=
 github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -25,6 +45,7 @@ github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazu
 github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c=
 github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=
@@ -35,19 +56,34 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible h1:dvc1KSkIYTVjZgHf/CTC2diTYC8PzhaA5sFISRfNVrE=
+github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v0.7.3-0.20190506211059-b20a14b54661 h1:ZuxGvIvF01nfc/G9RJ5Q7Va1zQE2WJyG18Zv3DqCEf4=
+github.com/docker/docker v0.7.3-0.20190506211059-b20a14b54661/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
+github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk=
+github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
+github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/felixge/httpsnoop v1.0.0 h1:gh8fMGz0rlOv/1WmRZm7OgncIOTsAj21iNJot48omJQ=
 github.com/felixge/httpsnoop v1.0.0/go.mod h1:3+D9sFq0ahK/JeJPhCBUV1xlf4/eIYrUQaxulT0VzX8=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-redis/redis v6.15.6+incompatible h1:H9evprGPLI8+ci7fxQx6WNZHJSb7be8FqJQRhdQZ5Sg=
+github.com/go-redis/redis v6.15.6+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
 github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
 github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
 github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
@@ -72,13 +108,15 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
 github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
+github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
 github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
 github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:BWIsLfhgKhV5g/oF34aRjniBHLTZe5DNekSjbAjIS6c=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
@@ -86,10 +124,14 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1
 github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69 h1:7xsUJsB2NrdcttQPa7JLEaGzvdbk7KvfrjgHZXOQRo0=
 github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69/go.mod h1:YLEMZOtU+AZ7dhN9T/IpGhXVGly2bvkJQ+zxj3WeVQo=
+github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
@@ -127,7 +169,24 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE=
+github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
+github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
+github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
+github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
+github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y=
+github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
@@ -147,13 +206,16 @@ github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkp
 github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=
-github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
+github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7 h1:J4AOUcOh/t1XbQcJfkEqhzgvMJ2tDxdCVvmHxW5QXao=
 github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7/go.mod h1:Oz4y6ImuOQZxynhbSXk7btjEfNBtGlj2dcaOvXl2FSM=
 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=
@@ -172,9 +234,16 @@ github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/testcontainers/testcontainers-go v0.0.9 h1:mwvFz+FkuQMqQ9oLkG4cVzPsZTRmrCo2NcaerJNaptA=
+github.com/testcontainers/testcontainers-go v0.0.9/go.mod h1:0Qe9qqjNZgxHzzdHPWwmQ2D49FFO7920hLdJ4yUJXJI=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
+github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
@@ -182,6 +251,8 @@ go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
@@ -204,12 +275,14 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422 h1:QzoH/1pFpZguR8NrRHLcO6jK
 golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -225,19 +298,24 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTm
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3 h1:7TYNF4UdlohbFwpNH04CoPMp1cHUZgO1Ebq5r2hIjfo=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
@@ -246,6 +324,8 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180810170437-e96c4e24768d/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -268,9 +348,11 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A=
 google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A=
@@ -281,16 +363,25 @@ gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUy
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/ldap.v2 v2.5.1 h1:wiu0okdNfjlBzg6UWvd1Hn8Y+Ux17/u/4nlk4CQr6tU=
 gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4=
 gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gotest.tools v0.0.0-20181223230014-1083505acf35/go.mod h1:R//lfYlUuTOTfblYI3lGoAAAebUdzjvbmQsuB7Ykd90=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=