# Generated by Apache Directory Studio on October 5, 2007 2:13:05 PM

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#   http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.  


# SCHEMA 'ACTIVE-DIRECTORY'
dn: cn=active-directory, ou=schema
objectclass: metaSchema
objectclass: top
cn: active-directory
m-dependencies: core

dn: ou=attributeTypes, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: attributeTypes

dn: m-oid=1.1, ou=attributeTypes, cn=active-directory, ou=schema
objectclass: metaAttributeType
objectclass: metaTop
objectclass: top
m-oid: 1.1
m-name: sAMAccountName
m-syntax: 1.3.6.1.4.1.1466.115.121.1.15

dn: m-oid=1.2, ou=attributeTypes, cn=active-directory, ou=schema
objectclass: metaAttributeType
objectclass: metaTop
objectclass: top
m-oid: 1.2
m-name: pwdLastSet
m-equality: integerMatch
m-ordering: integerMatch
m-syntax: 1.3.6.1.4.1.1466.115.121.1.27

dn: m-oid=1.4, ou=attributeTypes, cn=active-directory, ou=schema
objectclass: metaAttributeType
objectclass: metaTop
objectclass: top
m-oid: 1.4
m-name: useraccountcontrol
m-syntax: 1.3.6.1.4.1.1466.115.121.1.27

dn: m-oid=1.5, ou=attributeTypes, cn=active-directory, ou=schema
objectclass: metaAttributeType
objectclass: metaTop
objectclass: top
m-oid: 1.5
m-name: SourceAD
m-syntax: 1.3.6.1.4.1.1466.115.121.1.15
m-length: 0

dn: ou=comparators, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: comparators

dn: ou=ditContentRules, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: ditContentRules

dn: ou=ditStructureRules, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: ditStructureRules

dn: ou=matchingRules, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: matchingRules

dn: ou=matchingRuleUse, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: matchingRuleUse

dn: ou=nameForms, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: nameForms

dn: ou=normalizers, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: normalizers

dn: ou=objectClasses, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: objectClasses

dn: m-oid=1.3, ou=objectClasses, cn=active-directory, ou=schema
objectclass: metaObjectClass
objectclass: metaTop
objectclass: top
m-oid: 1.3
m-name: personActiveDirectory
m-supObjectClass: person
m-must: pwdLastSet
m-must: sAMAccountName
m-must: useraccountcontrol
m-must: SourceAD

dn: ou=syntaxCheckers, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: syntaxCheckers

dn: ou=syntaxes, cn=active-directory, ou=schema
objectclass: organizationalUnit
objectclass: top
ou: syntaxes

