#
# Copyright (c) 2007-2008 Suretec Systems Ltd. - <http://www.suretecsystems.com/>
#
# Version: 3.1.5
#
# Changes:
# - Fixed wrong DESC - 07/05/2008
#
# Author: Gavin Henry - <ghenry@suretecsystems.com>
#
# Asterisk LDAP Schema
#
# Digium root OID (http://www.iana.org/assignments/enterprise-numbers)
#
#  1.3.6.1.4.1.22736
#  1.3.6.1.4.1.22736.5      LDAP elements
#  1.3.6.1.4.1.22736.5.4    Attribute Types
#  1.3.6.1.4.1.22736.5.5    Object Classes
#
objectIdentifier AsteriskRoot 1.3.6.1.4.1.22736
objectIdentifier AsteriskLDAP AsteriskRoot:5

#############################################################################
# Attribute group OIDs.  e.g.: objectIdentifier AstAttrType AsteriskLDAP:4
#############################################################################
objectIdentifier AstAttrType AsteriskLDAP:4


#############################################################################
# Attribute OIDs e.g.: objectIdentifier AstContext AstAttrType:1
#############################################################################
objectIdentifier AstContext AstAttrType:1
objectIdentifier AstExtension AstAttrType:2
objectIdentifier AstPriority AstAttrType:3
objectIdentifier AstApplication AstAttrType:4
objectIdentifier AstApplicationData AstAttrType:5
objectIdentifier AstAccountAMAFlags AstAttrType:6
objectIdentifier AstAccountCallerID AstAttrType:7
objectIdentifier AstAccountContext AstAttrType:8
objectIdentifier AstAccountMailbox AstAttrType:9
objectIdentifier AstMD5secret AstAttrType:10
objectIdentifier AstAccountDeny AstAttrType:11
objectIdentifier AstAccountPermit AstAttrType:12
objectIdentifier AstAccountQualify AstAttrType:13
objectIdentifier AstAccountType AstAttrType:14
objectIdentifier AstAccountDisallowedCodec AstAttrType:15
objectIdentifier AstAccountExpirationTimestamp AstAttrType:16
objectIdentifier AstAccountRegistrationContext AstAttrType:17
objectIdentifier AstAccountRegistrationExten AstAttrType:18
objectIdentifier AstAccountNoTransfer AstAttrType:19
objectIdentifier AstAccountCallGroup AstAttrType:20
objectIdentifier AstAccountCanReinvite AstAttrType:21
objectIdentifier AstAccountDTMFMode AstAttrType:22
objectIdentifier AstAccountFromUser AstAttrType:23
objectIdentifier AstAccountFromDomain AstAttrType:24
objectIdentifier AstAccountFullContact AstAttrType:25
objectIdentifier AstAccountHost AstAttrType:26
objectIdentifier AstAccountInsecure AstAttrType:27
objectIdentifier AstAccountNAT AstAttrType:28
objectIdentifier AstAccountPickupGroup AstAttrType:29
objectIdentifier AstAccountPort AstAttrType:30
objectIdentifier AstAccountRestrictCID AstAttrType:31
objectIdentifier AstAccountRTPTimeout AstAttrType:32
objectIdentifier AstAccountRTPHoldTimeout AstAttrType:33
objectIdentifier AstAccountRealmedPassword AstAttrType:34
objectIdentifier AstAccountAllowedCodec AstAttrType:35
objectIdentifier AstAccountMusicOnHold AstAttrType:36
objectIdentifier AstAccountCanCallForward AstAttrType:37
objectIdentifier AstAccountSecret AstAttrType:38
objectIdentifier AstAccountName AstAttrType:39
objectIdentifier AstConfigFilename AstAttrType:40
objectIdentifier AstConfigCategory AstAttrType:41
objectIdentifier AstConfigCategoryMetric AstAttrType:42
objectIdentifier AstConfigVariableName AstAttrType:43
objectIdentifier AstConfigVariableValue AstAttrType:44
objectIdentifier AstConfigCommented AstAttrType:45


#############################################################################
# Object Class OIDs
#############################################################################
objectIdentifier AstObjectClass AsteriskLDAP:2
objectIdentifier AsteriskExtension AstObjectClass:1
objectIdentifier AsteriskIAXUser AstObjectClass:2
objectIdentifier AsteriskSIPUser AstObjectClass:3
objectIdentifier AsteriskConfig AstObjectClass:4


#############################################################################
# attribute definitions
#
# OID (the first arg) comes from the objectIdentifier defined above
#
# NAME should be the same as objectIdentifier
#
# DESC should be the description of the attribute
#
# EQUALITY is the rule to use when doing a search/compare for an
# attribute value.
#
# SUBSTR is the rule to use when doing a substring search (*foo*)
#
# SYNTAX is the syntax (i.e., type) of the attribute. We should
# probably stick to syntaxes:
#
#       1.3.6.1.4.1.1466.115.121.1.15   -> directoryString (UTF-8 string)
#       1.3.6.1.4.1.1466.115.121.1.26   -> IA5String (ASCII String)
#       1.3.6.1.4.1.1466.115.121.1.27   -> integer (Integer value)
#
# SINGLE-VALUE should be present if only one instance of this
# attribute is allowed within an entry.
#
# {32} is the allowed length
#
# e.g.:
# 
# attributetype ( AstExample
#    NAME ( 'AstExample' )
#    DESC 'Asterisk Example Attribute'
#    EQUALITY caseIgnoreMatch
#    SUBSTR caseIgnoreSubstringsMatch
#    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32} 
#    SINGLE-VALUE )
#
#############################################################################

attributetype ( AstContext
        NAME 'AstContext'
        DESC 'Asterisk Context'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstExtension
        NAME 'AstExtension'
        DESC 'Asterisk Extension'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
        
attributetype ( AstPriority
        NAME 'AstPriority'
        DESC 'Asterisk Priority'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstApplication 
        NAME 'AstApplication'
        DESC 'Asterisk Application'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstApplicationData 
        NAME 'AstApplicationData'
        DESC 'Asterisk Application Data'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
        
attributetype ( AstAccountAMAFlags 
        NAME 'AstAccountAMAFlags'
        DESC 'Asterisk Account AMA Flags'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountCallerID 
        NAME 'AstAccountCallerID'
        DESC 'Asterisk Account CallerID'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountContext 
        NAME 'AstAccountContext'
        DESC 'Asterisk Account Context'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
        
attributetype ( AstAccountMailbox 
        NAME 'AstAccountMailbox'
        DESC 'Asterisk Account Mailbox'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstMD5secret
        NAME 'AstMD5secret'
        DESC 'Asterisk Account MD5 Secret'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountDeny 
        NAME 'AstAccountDeny'
        DESC 'Asterisk Account Deny'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountPermit 
        NAME 'AstAccountPermit'
        DESC 'Asterisk Account Permit'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
        
attributetype ( AstAccountQualify 
        NAME 'AstAccountQualify'
        DESC 'Asterisk Account Qualify'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountType 
        NAME 'AstAccountType'
        DESC 'Asterisk Account Type'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountDisallowedCodec 
        NAME 'AstAccountDisallowedCodec'
        DESC 'Asterisk Account Disallowed Codec'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountExpirationTimestamp 
        NAME 'AstAccountExpirationTimestamp'
        DESC 'Asterisk Account Expiration Timestamp'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountRegistrationContext 
        NAME 'AstAccountRegistrationContext'
        DESC 'Asterisk Account Registration Context'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountRegistrationExten 
        NAME 'AstAccountRegistrationExten'
        DESC 'Asterisk Account Registration Extension'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountNoTransfer 
        NAME 'AstAccountNoTransfer'
        DESC 'Asterisk Account No Transfer'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
        
attributetype ( AstAccountCallGroup 
        NAME 'AstAccountCallGroup'
        DESC 'Asterisk Account Call Group'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountCanReinvite 
        NAME 'AstAccountCanReinvite'
        DESC 'Asterisk Account Can Reinvite'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
     
attributetype ( AstAccountDTMFMode 
        NAME 'AstAccountDTMFMode'
        DESC 'Asterisk Account DTMF Flags'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
            
attributetype ( AstAccountFromUser 
        NAME 'AstAccountFromUser'
        DESC 'Asterisk Account From User'
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
        
attributetype ( AstAccountFromDomain
        NAME 'AstAccountFromDomain'
        DESC 'Asterisk Account From Domain'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
        
attributetype ( AstAccountFullContact 
        NAME 'AstAccountFullContact'
        DESC 'Asterisk Account Full Contact'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountHost 
        NAME 'AstAccountHost'
        DESC 'Asterisk Account Host'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountInsecure
        NAME 'AstAccountInsecure'
        DESC 'Asterisk Account Insecure'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountNAT 
        NAME 'AstAccountNAT'
        DESC 'Asterisk Account NAT'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
      
attributetype ( AstAccountPickupGroup 
        NAME 'AstAccountPickupGroup'
        DESC 'Asterisk Account PickupGroup'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
      
attributetype ( AstAccountPort 
        NAME 'AstAccountPort'
        DESC 'Asterisk Account Port'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
      
attributetype ( AstAccountRestrictCID 
        NAME 'AstAccountRestrictCID'
        DESC 'Asterisk Account Restrict CallerID'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
            
attributetype ( AstAccountRTPTimeout 
        NAME 'AstAccountRTPTimeout'
        DESC 'Asterisk Account RTP Timeout'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
      
attributetype ( AstAccountRTPHoldTimeout 
        NAME 'AstAccountRTPHoldTimeout'
        DESC 'Asterisk Account RTP Hold Timeout'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
      
attributetype ( AstAccountRealmedPassword 
        NAME 'AstAccountRealmedPassword'
        DESC 'Asterisk Account Realmed Password'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountAllowedCodec 
        NAME 'AstAccountAllowedCodec' 
        DESC 'Asterisk Account Allowed Codec'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountMusicOnHold 
        NAME 'AstAccountMusicOnHold'
        DESC 'Asterisk Account Music On Hold'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountCanCallForward 
        NAME 'AstAccountCanCallForward'
        DESC 'Asterisk Account Can Call Forward' 
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstAccountSecret 
        NAME 'AstAccountSecret'
        DESC 'Asterisk Account Secret' 
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
          
attributetype ( AstAccountName 
        NAME 'AstAccountName'
        DESC 'Asterisk Account Username'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstConfigFilename 
        NAME 'AstConfigFilename'
        DESC 'Asterisk LDAP Configuration Filename'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstConfigCategory
        NAME 'AstConfigCategory'
        DESC 'Asterisk LDAP Configuration Category'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstConfigCategoryMetric
        NAME 'AstConfigCategoryMetric'
        DESC 'Asterisk LDAP Configuration Category Metric'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstConfigVariableName
        NAME 'AstConfigVariableName'
        DESC 'Asterisk LDAP Configuration Variable Name'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstConfigVariableValue
        NAME 'AstConfigVariableValue'
        DESC 'Asterisk LDAP Configuration Variable Value'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

attributetype ( AstConfigCommented
        NAME 'AstConfigCommented'
        DESC 'Asterisk LDAP Configuration Commented'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)

#############################################################################
# Object Class definitions
#
# This is where to define the object classes. Object classes are used
# to define which attribute MAY (optional) or MUST (required) belong
# to an entry.
#
# Classes can be AUXILIARY or STRUCTURAL. An entry in the directory
# must have one and only one structural class, but can have many
# AUXILIARY classes.
#
#############################################################################

objectclass ( AsteriskExtension 
    NAME 'AsteriskExtension'
    DESC 'PBX Extension Information for Asterisk'
    SUP top AUXILIARY
    MUST cn
    MAY ( 
        AstContext $ 
        AstExtension $ 
        AstPriority $
        AstApplication $ 
        AstApplicationData
    ) 
    )

#############################################################################
#
# AsteriskIAXUser and AsteriskSIPUser extend AsteriskExtension. These
# represent real accounts in Asterisk.
#
# NOTE: They are defined as AUXILIARY in case they need to be mixed with an
# existing directory deployment.
#
#############################################################################
        
objectclass ( AsteriskIAXUser 
    NAME 'AsteriskIAXUser'
    DESC 'IAX2 User information for Asterisk'
    SUP AsteriskExtension AUXILIARY
    MUST cn
    MAY ( 
        AstAccountAMAFlags $ 
        AstAccountCallerID $ 
        AstAccountContext $ 
        AstAccountFullContact $ 
        AstAccountHost $ 
        AstAccountMailbox $ 
        AstMD5secret $ 
        AstAccountDeny $
        AstAccountPermit $ 
        AstAccountPort $ 
        AstAccountQualify $ 
        AstAccountType $
        AstAccountDisallowedCodec $ 
        AstAccountExpirationTimestamp $ 
        AstAccountRegistrationContext$
        AstAccountRegistrationExten $ 
        AstAccountNoTransfer $ 
        AstAccountName 
    )
    )
       
objectclass ( AsteriskSIPUser 
    NAME 'AsteriskSIPUser'
    DESC 'SIP User information for Asterisk'
    SUP AsteriskExtension AUXILIARY
    MUST cn
    MAY (
        AstAccountAMAFlags $ 
        AstAccountCallGroup $ 
        AstAccountCallerID $ 
        AstAccountCanReinvite $
        AstAccountContext $
        AstAccountDTMFMode $ 
        AstAccountFromUser $ 
        AstAccountFromDomain $     
        AstAccountFullContact $ 
        AstAccountHost $ 
        AstAccountInsecure $  
        AstAccountMailbox $    
        AstAccountRealmedPassword $ 
        AstAccountNAT $
        AstAccountDeny $ 
        AstAccountPermit $ 
        AstAccountPickupGroup $ 
        AstAccountPort $
        AstAccountQualify $ 
        AstAccountRestrictCID $ 
        AstAccountRTPTimeout $ 
        AstAccountRTPHoldTimeout $
        AstAccountType $ 
        AstAccountDisallowedCodec $ 
        AstAccountAllowedCodec $ 
        AstAccountMusicOnHold $
        AstAccountExpirationTimestamp $ 
        AstAccountRegistrationContext $ 
        AstAccountRegistrationExten $
        AstAccountCanCallForward $ 
        AstAccountSecret $ 
        AstAccountName 
    )
    )

#############################################################################
#
# AsteriskIAXUser and AsteriskSIPUser extend AsteriskExtension. These
# represent real accounts in Asterisk.
#
# NOTE: They are defined as AUXILIARY in case they need to be mixed with an
# existing directory deployment.
#
#############################################################################
        
objectclass ( AsteriskConfig 
    NAME 'AsteriskConfig'
    DESC 'Asterisk configuration Information'
    SUP top AUXILIARY
    MUST cn
    MAY ( 
        AstConfigFilename $ 
        AstConfigCategory $ 
        AstConfigCategoryMetric $
        AstConfigVariableName $ 
        AstConfigVariableValue $ 
        AstConfigCommented
    ) 
    )
