]> code.citadel.org Git - citadel.git/commitdiff
*** empty log message ***
authorArt Cancro <ajc@citadel.org>
Sat, 31 Jan 2004 05:44:29 +0000 (05:44 +0000)
committerArt Cancro <ajc@citadel.org>
Sat, 31 Jan 2004 05:44:29 +0000 (05:44 +0000)
citadel/ChangeLog
citadel/citadel-openldap.schema [new file with mode: 0644]
citadel/serv_ldap.c

index 8fff6d76b01375e72b2d5163353479bb95363bca..51c00237120a05ccdc4574af12db4a5fa438d090 100644 (file)
@@ -1,4 +1,7 @@
  $Log$
+ Revision 614.11  2004/01/31 05:44:29  ajc
+ *** empty log message ***
+
  Revision 614.10  2004/01/27 19:56:29  ajc
  * serv_smtp.c: HELO and EHLO responses now reply with the detected
    IP address and reverse DNS lookup of the connecting host
@@ -5248,4 +5251,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import
-
diff --git a/citadel/citadel-openldap.schema b/citadel/citadel-openldap.schema
new file mode 100644 (file)
index 0000000..d441ce7
--- /dev/null
@@ -0,0 +1,1020 @@
+#
+# $Id$
+# 
+
+# This is the OpenLDAP schema for Citadel.
+
+# It begins with the OpenLDAP core schema.
+#
+# The rest is lifted directly from the Kolab source code <http://www.kroupware.org>
+# because it is intended to be compatible with that product.
+
+# (c) 2004 Art Cancro <ajc@uncensored.citadel.org>
+# (c) 2003 Tassilo Erlewein <tassilo.erlewein@erfrakon.de>
+# (c) 2003 Martin Konold <martin.konold@erfrakon.de>
+# (c) 2003 Achim Frank <achim.frank@erfrakon.de>
+
+# This program is Free Software under the GNU General Public License (>=v2).
+# Read the file COPYING that comes with this packages for details.
+
+
+##############
+# attributes #
+##############
+
+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} )
+
+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} )
+
+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 )
+
+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} )
+
+attributetype ( 2.5.4.14 NAME 'searchGuide'
+       DESC 'RFC2256: search guide, obsoleted 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'
+       EQUALITY distinguishedNameMatch
+       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 )
+
+attributetype ( 2.5.4.34 NAME 'seeAlso'
+       DESC 'RFC2256: DN of related object'
+       SUP distinguishedName )
+
+attributetype ( 2.5.4.36 NAME 'userCertificate'
+       DESC 'RFC2256: X.509 user certificate, use ;binary'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 )
+
+attributetype ( 2.5.4.37 NAME 'cACertificate'
+       DESC 'RFC2256: X.509 CA certificate, use ;binary'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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} )
+
+attributetype ( 2.5.4.52 NAME 'supportedAlgorithms'
+       DESC 'RFC2256: supported algorithms'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.49 )
+
+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 ( 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 )
+
+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} )
+
+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 )
+
+attributetype ( 1.2.840.113549.1.9.1
+       NAME ( 'email' 'emailAddress' 'pkcs9email' )
+       DESC 'RFC2459: legacy attribute for email addresses in DNs'
+       EQUALITY caseIgnoreIA5Match
+       SUBSTR caseIgnoreIA5SubstringsMatch
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
+
+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} )
+
+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} )
+
+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} )
+
+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} )
+
+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} )
+
+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} )
+
+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} )
+
+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 )
+
+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} )
+
+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} )
+
+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} )
+
+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 )
+
+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} )
+
+attributetype ( 0.9.2342.19200300.100.1.20
+       DESC 'RFC1274: home telephone number'
+       NAME ( 'homePhone' 'homeTelephoneNumber' )
+       EQUALITY telephoneNumberMatch
+       SUBSTR telephoneNumberSubstringsMatch
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
+
+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 )
+
+attributetype ( 0.9.2342.19200300.100.1.22 NAME 'otherMailbox'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.39 )
+
+attributetype ( 0.9.2342.19200300.100.1.26 NAME 'aRecord'
+       EQUALITY caseIgnoreIA5Match
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+attributetype ( 0.9.2342.19200300.100.1.27 NAME 'mDRecord'
+       EQUALITY caseIgnoreIA5Match
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+attributetype ( 0.9.2342.19200300.100.1.28 NAME 'mXRecord'
+       EQUALITY caseIgnoreIA5Match
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+attributetype ( 0.9.2342.19200300.100.1.29 NAME 'nSRecord'
+       EQUALITY caseIgnoreIA5Match
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+attributetype ( 0.9.2342.19200300.100.1.30 NAME 'sOARecord'
+       EQUALITY caseIgnoreIA5Match
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+attributetype ( 0.9.2342.19200300.100.1.31 NAME 'cNAMERecord'
+       EQUALITY caseIgnoreIA5Match
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+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 )
+
+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 )
+
+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} )
+
+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 )
+
+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 )
+
+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 )
+
+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} )
+
+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} )
+
+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} )
+
+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 )
+
+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} )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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} )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+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 )
+
+####################
+# kolab attributes #
+####################
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.1
+        NAME ( 'k' 'kolab' )
+        SUP name )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.2
+       NAME 'deleteflag'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 
+       EQUALITY booleanMatch )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.3
+        NAME 'alias' 
+        DESC 'RFC1274: RFC822 Mailbox'
+       EQUALITY caseIgnoreIA5Match
+       SUBSTR caseIgnoreIA5SubstringsMatch
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+# global attributes
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.5
+       NAME 'fqhostname'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+# postfix specific attributes
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.501
+       NAME 'postfix-mydomain'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.502
+       NAME 'postfix-relaydomains'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.503
+       NAME 'postfix-mydestination'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.504
+       NAME 'postfix-mynetworks'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.505
+        NAME 'postfix-relayhost'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.506
+        NAME 'postfix-transport'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+
+# imapd specific attributes
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.601
+       NAME 'cyrus-autocreatequota'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.602
+       NAME 'cyrus-admins'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.603
+       NAME 'cyrus-imap'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+       EQUALITY booleanMatch )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.604
+       NAME 'cyrus-pop3'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 
+       EQUALITY booleanMatch )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.605
+        NAME 'userquota'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.651
+       NAME 'acl'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.606
+        NAME 'cyrus-imaps'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+       EQUALITY booleanMatch )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.607
+        NAME 'cyrus-pop3s'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 
+       EQUALITY booleanMatch )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.608
+        NAME 'cyrus-sieve'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 
+       EQUALITY booleanMatch )
+
+# apache2 and php specific attributes
+attributetype ( 1.3.6.1.4.1.60000.2.1.701
+       NAME 'apache-http'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 
+       EQUALITY booleanMatch )
+
+# proftpd specific attributes
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.901
+       NAME 'proftpd-defaultquota'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.902
+       NAME 'proftpd-ftp'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 
+       EQUALITY booleanMatch )
+
+attributetype ( 1.3.6.1.4.1.60000.2.1.903
+       NAME 'proftpd-userPassword'
+       SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) 
+
+########################
+# kolab object classes #
+########################
+
+objectclass ( 1.3.6.1.4.1.60000.2.2.1 NAME 'kolab'
+       DESC 'Kolab server config'
+       MUST k
+       SUP top STRUCTURAL
+       MAY (   fqhostname $
+               postfix-mydomain $ 
+               postfix-relaydomains $ 
+               postfix-mydestination $ 
+               postfix-mynetworks $ 
+               postfix-relayhost $ 
+               postfix-transport $
+               cyrus-autocreatequota $ 
+               cyrus-admins $ 
+               cyrus-imap $ 
+               cyrus-pop3 $ 
+               cyrus-imaps $ 
+               cyrus-pop3s $ 
+               cyrus-sieve $
+               apache-http $
+               proftpd-ftp $ 
+               proftpd-defaultquota $ 
+               uid $
+               userPassword ) )
+
+objectclass ( 1.3.6.1.4.1.60000.2.2.9 NAME 'sharedfolder'
+       DESC 'IMAP shared folder'
+       SUP top STRUCTURAL
+       MUST cn
+       MAY ( acl $ userquota $ deleteflag ) ) 
+
+objectclass ( 1.3.6.1.4.1.5322.13.1.1 NAME 'namedObject' 
+       SUP top STRUCTURAL 
+       MAY cn )
+
+##################
+# object classes #
+##################
+
+objectclass ( 2.5.6.2 NAME 'country'
+       DESC 'RFC2256: a country'
+       SUP top STRUCTURAL
+       MUST c
+       MAY ( searchGuide $ description $ deleteflag ) )
+
+objectclass ( 2.5.6.3 NAME 'locality'
+       DESC 'RFC2256: a locality'
+       SUP top STRUCTURAL
+       MAY ( street $ seeAlso $ searchGuide $ st $ l $ description $ deleteflag ) )
+
+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 $ 
+                c $ mail $ deleteflag $ alias ) )
+
+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 $ 
+                c $ mail $ deleteflag $ alias ) )
+
+objectclass ( 2.5.6.6 NAME 'person'
+       DESC 'RFC2256: a person'
+       SUP top STRUCTURAL
+       MUST ( sn $ cn )
+       MAY ( userPassword $ telephoneNumber $ seeAlso $ description $ deleteflag ) )
+
+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 $ 
+                c $ userquota $ deleteflag ) )
+
+#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 ( cn )
+       MAY ( member $ businessCategory $ seeAlso $ owner $ ou $ o $ description $ deleteflag ) )
+
+#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 $ c $ deleteflag ) )
+
+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 ) )
+
+#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 )
+
+#objectclass ( 1.3.6.1.4.1.250.3.15 NAME 'labeledURIObject'
+#      DESC 'RFC2079: object that contains the URI attribute type'
+#      MAY ( labeledURI )
+#      SUP top AUXILIARY )
+
+objectclass ( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObject'
+       DESC 'RFC1274: simple security object'
+       SUP top AUXILIARY
+       MUST userPassword )
+
+objectclass ( 1.3.6.1.4.1.1466.344 NAME 'dcObject'
+       DESC 'RFC2247: domain component object'
+       SUP top AUXILIARY MUST dc )
+
+objectclass ( 1.3.6.1.1.3.1 NAME 'uidObject'
+       DESC 'RFC2377: uid object'
+       SUP top AUXILIARY MUST uid )
+
+#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 )
+#      )
+
+#objectclass ( 0.9.2342.19200300.100.4.5 NAME 'account'
+#      SUP top STRUCTURAL
+#      MUST userid
+#      MAY ( description $ seeAlso $ localityName $
+#              organizationName $ organizationalUnitName $ host )
+#      )
+
+#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 )
+#      )
+
+objectclass ( 0.9.2342.19200300.100.4.7 NAME 'room'
+       SUP top STRUCTURAL
+       MUST commonName
+       MAY ( roomNumber $ description $ seeAlso $ telephoneNumber )
+       )
+
+#objectclass ( 0.9.2342.19200300.100.4.9 NAME 'documentSeries'
+#      SUP top STRUCTURAL
+#      MUST commonName
+#      MAY ( description $ seeAlso $ telephonenumber $
+#              localityName $ organizationName $ organizationalUnitName )
+#      )
+
+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 )
+       )
+
+#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 )
+#      )
+
+#objectclass ( 0.9.2342.19200300.100.4.15 NAME 'dNSDomain'
+#      SUP 'domain' STRUCTURAL
+#      MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $
+#              SOARecord $ CNAMERecord )
+#      )
+
+#objectclass ( 0.9.2342.19200300.100.4.17 NAME 'domainRelatedObject'
+#      DESC 'RFC1274: an object related to an domain'
+#      SUP top AUXILIARY
+#      MUST associatedDomain )
+
+#objectclass ( 0.9.2342.19200300.100.4.18 NAME 'friendlyCountry'
+#      SUP country STRUCTURAL
+#      MUST friendlyCountryName )
+
+#objectclass ( 0.9.2342.19200300.100.4.20 NAME 'pilotOrganization'
+#      SUP ( organization $ organizationalUnit ) STRUCTURAL
+#      MAY buildingName )
+
+#objectclass ( 0.9.2342.19200300.100.4.21 NAME 'pilotDSA'
+#      SUP dsa STRUCTURAL
+#      MAY dSAQuality )
+
+#objectclass ( 0.9.2342.19200300.100.4.22 NAME 'qualityLabelledData'
+#      SUP top AUXILIARY
+#      MUST dsaQuality
+#      MAY ( subtreeMinimumQuality $ subtreeMaximumQuality )
+#      )
+
+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 $ deleteflag $ alias )
+       )
index 17adac87b878149e5cda0ee393dcb29406faa59b..b581cef889c314e1b77297fc57ef38a46b82283b 100644 (file)
@@ -62,7 +62,106 @@ void serv_ldap_cleanup(void)
        dirserver = NULL;
 }
 
-#endif                         /* HAVE_LDAP */
+
+
+/*
+ * Create the root node.  If it's already there, so what?
+ */
+void CtdlCreateLdapRoot(void) {
+       char *dc_values[2];
+       char *objectClass_values[3];
+       LDAPMod dc, objectClass;
+       LDAPMod *mods[3];
+       char topdc[SIZ];
+       int i;
+
+       /* We just want the top-level dc, not the whole hierarchy */
+       strcpy(topdc, config.c_ldap_base_dn);
+       for (i=0; i<strlen(topdc); ++i) {
+               if (topdc[i] == ',') topdc[i] = 0;
+       }
+       for (i=0; i<strlen(topdc); ++i) {
+               if (topdc[i] == '=') strcpy(topdc, &topdc[i+1]);
+       }
+
+       /* Set up the transaction */
+       dc.mod_op               = LDAP_MOD_ADD;
+       dc.mod_type             = "dc";
+       dc_values[0]            = topdc;
+       dc_values[1]            = NULL;
+       dc.mod_values           = dc_values;
+       objectClass.mod_op      = LDAP_MOD_ADD;
+       objectClass.mod_type    = "objectClass";
+       objectClass_values[0]   = "top";
+       objectClass_values[1]   = "domain";
+       objectClass_values[2]   = NULL;
+       objectClass.mod_values  = objectClass_values;
+       mods[0] = &dc;
+       mods[1] = &objectClass;
+       mods[2] = NULL;
+
+       /* Perform the transaction */
+       lprintf(9, "Setting up Base DN node...\n");
+       begin_critical_section(S_LDAP);
+       i = ldap_add_s(dirserver, config.c_ldap_base_dn, mods);
+       end_critical_section(S_LDAP);
+
+       if (i != LDAP_SUCCESS) {
+               lprintf(3, "ldap_add_s() failed: %s (%d)\n",
+                       ldap_err2string(i), i);
+       }
+}
+
+
+/*
+ * Create an OU node representing a Citadel host.
+ */
+void CtdlCreateHostOU(char *host) {
+       char *dc_values[2];
+       char *objectClass_values[3];
+       LDAPMod dc, objectClass;
+       LDAPMod *mods[3];
+       int i;
+       char dn[SIZ];
+
+       /* The DN is this OU plus the base. */
+       snprintf(dn, sizeof dn, "ou=%s,%s", host, config.c_ldap_base_dn);
+
+       /* Set up the transaction */
+       dc.mod_op               = LDAP_MOD_ADD;
+       dc.mod_type             = "ou";
+       dc_values[0]            = host;
+       dc_values[1]            = NULL;
+       dc.mod_values           = dc_values;
+       objectClass.mod_op      = LDAP_MOD_ADD;
+       objectClass.mod_type    = "objectClass";
+       objectClass_values[0]   = "top";
+       objectClass_values[1]   = "organizationalUnit";
+       objectClass_values[2]   = NULL;
+       objectClass.mod_values  = objectClass_values;
+       mods[0] = &dc;
+       mods[1] = &objectClass;
+       mods[2] = NULL;
+
+       /* Perform the transaction */
+       lprintf(9, "Setting up Host OU node...\n");
+       begin_critical_section(S_LDAP);
+       i = ldap_add_s(dirserver, dn, mods);
+       end_critical_section(S_LDAP);
+
+       /* ignore the error -- it's ok if it already exists
+       if (i != LDAP_SUCCESS) {
+               lprintf(3, "ldap_add_s() failed: %s (%d)\n",
+                       ldap_err2string(i), i);
+       }
+       */
+}
+
+
+
+
+
+
 
 
 void CtdlConnectToLdap(void) {
@@ -92,7 +191,10 @@ void CtdlConnectToLdap(void) {
        if (i != LDAP_SUCCESS) {
                lprintf(3, "Cannot bind: %s (%d)\n", ldap_err2string(i), i);
                dirserver = NULL;       /* FIXME disconnect from ldap */
+               return;
        }
+
+       CtdlCreateLdapRoot();
 }
 
 
@@ -117,6 +219,9 @@ void ctdl_vcard_to_ldap(struct CtdlMessage *msg) {
        if (msg->cm_fields['A'] == NULL) return;
        if (msg->cm_fields['N'] == NULL) return;
 
+       /* First make sure the OU for the user's home Citadel host is created */
+       CtdlCreateHostOU(msg->cm_fields['N']);
+
        /* Initialize variables */
        strcpy(givenname, "_");
        strcpy(sn, "_");
@@ -239,6 +344,7 @@ void ctdl_vcard_to_ldap(struct CtdlMessage *msg) {
 }
 
 
+#endif                         /* HAVE_LDAP */
 
 
 /*