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 __hasRole(self, objectDn, serverDto):
     attr = self.FSMO_ROLE_OWNER_ATTR
     resultSet = self._client.executeQuery(Query.valueOf(objectDn, [attr]))
     if resultSet.next():
         distinguishednames = resultSet.getStringList(attr)
         serverDn = serverDto.id.value
         for dn in distinguishednames:
             if dn.endswith(serverDn):
                 return 1
     return 0
 def obtainSelfFullVersion(self):
     prop = 'configurationNamingContext'
     configurationNamingContext = self._rootDse.getString(prop)
     base = 'CN=Schema,%s' % configurationNamingContext
     version = None
     rs = self._client.executeQuery(Query.valueOf(base, ["objectVersion"]))
     if rs.next():
         version = rs.getString("objectVersion")
         version = self.VERSION_ID_TO_FULL_NAME_MAP.get(version)
     return version
 def __hasRole(self, objectDn, serverDto):
     attr = self.FSMO_ROLE_OWNER_ATTR
     resultSet = self._client.executeQuery(Query.valueOf(objectDn, [attr]))
     if resultSet.next():
         distinguishednames = resultSet.getStringList(attr)
         serverDn = serverDto.id.value
         for dn in distinguishednames:
             if dn.endswith(serverDn):
                 return 1
     return 0
 def obtainSelfFullVersion(self):
     prop = 'configurationNamingContext'
     configurationNamingContext = self._rootDse.getString(prop)
     base = 'CN=Schema,%s' % configurationNamingContext
     version = None
     rs = self._client.executeQuery(Query.valueOf(base, ["objectVersion"]))
     if rs.next():
         version = rs.getString("objectVersion")
         version = self.VERSION_ID_TO_FULL_NAME_MAP.get(version)
     return version
 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()