Source code for ldaptor.protocols.ldap.fetchschema

from ldaptor.protocols.ldap import ldaperrors, ldapsyntax
from ldaptor.protocols import pureldap
from ldaptor import schema

def _fetchCb(subschemaSubentry, client):
    o=ldapsyntax.LDAPEntry(client=client,
                           dn=subschemaSubentry)
    d=o.search(scope=pureldap.LDAP_SCOPE_baseObject,
               sizeLimit=1,
               attributes=["attributeTypes", "objectClasses"])
    def handleSearchResults(l):
        if len(l)==0:
            raise ldaperrors.LDAPOther, "No such DN"
        elif len(l)==1:
            o=l[0]

            attributeTypes = []
            objectClasses = []
            for text in o.get("attributeTypes", []):
                attributeTypes.append(schema.AttributeTypeDescription(str(text)))
            for text in o.get("objectClasses", []):
                objectClasses.append(schema.ObjectClassDescription(str(text)))
            assert attributeTypes, "LDAP server doesn't give attributeTypes for subschemaSubentry dn=%s"%o.dn
            return (attributeTypes, objectClasses)
        else:
            raise ldaperrors.LDAPOther, "DN matched multiple entries"
    d.addCallback(handleSearchResults)
    return d

[docs]def fetch(client, baseObject): o=ldapsyntax.LDAPEntry(client=client, dn=baseObject) d=o.search(scope=pureldap.LDAP_SCOPE_baseObject, sizeLimit=1, attributes=["subschemaSubentry"]) def handleSearchResults(l): if len(l)==0: raise ldaperrors.LDAPOther, "No such DN" elif len(l)==1: o=l[0] assert "subschemaSubentry" in o, "No subschemaSubentry. TODO" subSchemas = o["subschemaSubentry"] assert len(subSchemas)==1, "More than one subschemaSubentry is not support yet. TODO" for s in subSchemas: return s else: raise ldaperrors.LDAPOther, "DN matched multiple entries" d.addCallback(handleSearchResults) d.addCallback(_fetchCb, client) return d