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 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()