# 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. 

# $OpenLDAP: pkg/ldap/servers/slapd/schema/cosine.schema,v 1.15 2002/01/11 19:28:06 kurt Exp $
#
# 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: categorory 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}
#

# This was malformed NAME was after DESC
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}
#
## OBSOLETE
#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}
#
## OBSOLETE
#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}
#

# malformed: had quotes around superior domain
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]

