def _buildQuery(self, baseDn, ldapFilter, attr, includeSubTree=False):
        """
            Build query for LDAP client

            @type: str, str, list(str), bool

            @param: baseDn - root under which will perform query
            @param: ldapFilter - filter(query) which will be perform
            @param: attr - list of attributes which will be get for each find object
        """
        query = Query(baseDn, ldapFilter)
        if includeSubTree:
            query = query.scope(Query.Scope.SUBTREE)
        query.attributes(attr)
        return query
    def _buildQuery(self, baseDn, ldapFilter, attr, includeSubTree=False):
        """
            Build query for LDAP client

            @type: str, str, list(str), bool

            @param: baseDn - root under which will perform query
            @param: ldapFilter - filter(query) which will be perform
            @param: attr - list of attributes which will be get for each find object
        """
        query = Query(baseDn, ldapFilter)
        if includeSubTree:
            query = query.scope(Query.Scope.SUBTREE)
        query.attributes(attr)
        return query
 def obtainDomains(self, superDomainDto=None):
     superEntryDn = None
     if superDomainDto:
         superEntryDn = superDomainDto.id.value
     else:
         #get forest DN as sub-entry
         superEntryDn = self._rootDse.getString('rootDomainNamingContext')
         superDomainDto = self.createDto(DtoId(superEntryDn))
     idToDtoMap = {}
     try:
         filter_ = "(objectClass=domain)"
         attrIds = [self.DN, 'name', 'description']
         query = Query(superEntryDn, filter_)
         query = query.scope(Query.Scope.SUBTREE)
         query.attributes(attrIds)
         domainRs = self._client.executeQuery(query)
         while domainRs.next():
             dn = domainRs.getString(self.DN)
             description = domainRs.getString('description')
             dto = self.createDto(DtoId(dn), description)
             idToDtoMap[dto.id] = dto
     except JException:
         #swallow intentionally and return controller's domain
         logger.warnException("Failed to find other domains.",
                              "Controller domain will be used")
     else:
         #determine parent domain
         for id_, dto in idToDtoMap.items():
             parentDto = idToDtoMap.get(self.__superDomainId(id_))
             if parentDto:
                 dto.parentDomainDto = parentDto
     # if none of domains found in root domain - add server's domain
     # with root domain as parent
     if not idToDtoMap.values():
         logger.debug("Cannot list other domains in root domain. "
                      "Add server's domain")
         idToDtoMap[0] = self.createDto(self.obtainSelfDomainId())
         idToDtoMap[0].parentDomainDto = superDomainDto
     #append root domain in any case
     idToDtoMap[superDomainDto.id] = superDomainDto
     return idToDtoMap.values()
 def obtainDomains(self, superDomainDto=None):
     superEntryDn = None
     if superDomainDto:
         superEntryDn = superDomainDto.id.value
     else:
         #get forest DN as sub-entry
         superEntryDn = self._rootDse.getString('rootDomainNamingContext')
         superDomainDto = self.createDto(DtoId(superEntryDn))
     idToDtoMap = {}
     try:
         filter_ = "(objectClass=domain)"
         attrIds = [self.DN, 'name', 'description']
         query = Query(superEntryDn, filter_)
         query = query.scope(Query.Scope.SUBTREE)
         query.attributes(attrIds)
         domainRs = self._client.executeQuery(query)
         while domainRs.next():
             dn = domainRs.getString(self.DN)
             description = domainRs.getString('description')
             dto = self.createDto(DtoId(dn), description)
             idToDtoMap[dto.id] = dto
     except JException:
         #swallow intentionally and return controller's domain
         logger.warnException("Failed to find other domains.",
                              "Controller domain will be used")
     else:
         #determine parent domain
         for id_, dto in idToDtoMap.items():
             parentDto = idToDtoMap.get(self.__superDomainId(id_))
             if parentDto:
                 dto.parentDomainDto = parentDto
     # if none of domains found in root domain - add server's domain
     # with root domain as parent
     if not idToDtoMap.values():
         logger.debug("Cannot list other domains in root domain. "
                      "Add server's domain")
         idToDtoMap[0] = self.createDto(self.obtainSelfDomainId())
         idToDtoMap[0].parentDomainDto = superDomainDto
     #append root domain in any case
     idToDtoMap[superDomainDto.id] = superDomainDto
     return idToDtoMap.values()
    def __obtainServersByBaseDn(self, baseDn):
        filter_ = "(|(objectClass=server)(objectClass=applicationSettings))"
        attrIds = [self.DN, 'objectClass', 'name', 'dNSHostName', 'options']
        query = Query(baseDn, filter_)
        query.attributes(attrIds)
        rs = self._client.executeQuery(query.scope(Query.Scope.SUBTREE))
        dnToDtoMap = {}
        while rs.next():
            dto = None
            dnsName = None
            name = None
            options = None
            classNames = rs.getStringList('objectClass')
            dn = rs.getString(self.DN)

            if 'server' not in classNames:
                #slice server DN from settings DN
                dn = dn[dn.index(',') + 1:]

            if dn in dnToDtoMap:
                dto = dnToDtoMap[dn]
            else:
                dto = AdServerDto(DtoId(dn))
                dto.siteName = dn.replace(",", "").split("CN=")[3]
                dnToDtoMap[dn] = dto

            dnsName = rs.getString('dNSHostName')
            if dnsName:
                dto.dnsName = dnsName
            name = rs.getString("name")
            if name:
                dto.name = name
            options = rs.getString("options")
            if options:
                dto.options = options
        return dnToDtoMap.values()
    def __obtainServersByBaseDn(self, baseDn):
        filter_ = "(|(objectClass=server)(objectClass=applicationSettings))"
        attrIds = [self.DN, 'objectClass', 'name', 'dNSHostName', 'options']
        query = Query(baseDn, filter_)
        query.attributes(attrIds)
        rs = self._client.executeQuery(query.scope(Query.Scope.SUBTREE))
        dnToDtoMap = {}
        while rs.next():
            dto = None
            dnsName = None
            name = None
            options = None
            classNames = rs.getStringList('objectClass')
            dn = rs.getString(self.DN)

            if 'server' not in classNames:
                #slice server DN from settings DN
                dn = dn[dn.index(',') + 1:]

            if dn in dnToDtoMap:
                dto = dnToDtoMap[dn]
            else:
                dto = AdServerDto(DtoId(dn))
                dto.siteName = dn.replace(",", "").split("CN=")[3]
                dnToDtoMap[dn] = dto

            dnsName = rs.getString('dNSHostName')
            if dnsName:
                dto.dnsName = dnsName
            name = rs.getString("name")
            if name:
                dto.name = name
            options = rs.getString("options")
            if options:
                dto.options = options
        return dnToDtoMap.values()