2009-06-16 15 views
3

私は範囲属性を使用しようとしています。LDAP AD範囲属性、使用方法

テストでは、範囲を指定しないと3つのエントリが返され、範囲を0-1に設定すると、最初の2つだけが返されます。ただし、3つの結果がすべて得られます。

これは、私はそれを行う方法です。

String rangeStr = attribute + ";range=0-1"; 
String returnedAttrs[] = {rangeStr, attribute}; 
_searchControls.setReturningAttributes(returnedAttrs); 
_searchControls.setSearchScope(scope); 
NamingEnumeration<SearchResult> answer = _context.search(name, filter, _searchControls); 
List<String> result = new LinkedList<String>(); 
while (answer != null && answer.hasMoreElements()) 
{ 
    Attribute currentAttr = answer.next().getAttributes().get(attribute); 
    if (currentAttr == null) 
     continue; 
    for (int i=0; i<currentAttr.size(); i++) 
    { 
     String val = currentAttr.get(i).toString(); 
     result.add(val); 
    } 
} 

私が間違って何をしているのですか?

私は1000のページサイズを使用しますが、正しく理解すれば、ページサイズが要求された範囲を超えているので、遠隔検索には影響しません。あれは正しいですか?

+0

これはまだ問題ですか? – serialhobbyist

+0

あなたは答えがあるなら、私はそれを読むことを非常にうれしく思うでしょう。ありがとう! – Dikla

+0

私はまだしていないが、私はそれに時間を費やしたくなかった。 :-)あなたはADにアクセスするためにどのようなフレームワークを使用していますか? – serialhobbyist

答えて

5
#!/usr/bin/env python 

import ldap 

def msad_flatten_ranges(conn, dn, ldap_dict): 
    for attrname in ldap_dict: 
    if ';range=' in attrname: 
     # 
     # parse range attr 
     # 
     actual_attrname, range_stmt = attrname.split(';') 
     bound_lower, bound_upper = [ 
     int(x) for x in range_stmt.split('=')[1].split('-') 
     ] 

     step = bound_upper - bound_lower + 1 
     while True: 
     attr_next = '%s;range=%d-%d' % (
      actual_attrname, bound_lower, bound_upper 
     ) 

     dn, attrs = conn.search_s(
      dn, ldap.SCOPE_BASE, attrlist = [attr_next])[0] 

     assert len(attrs) == 1 

     ret_attrname = attrs.keys()[0] 

     ldap_dict[actual_attrname].extend(attrs[ret_attrname]) 
     if ret_attrname.endswith('-*'): 
      break 

     bound_lower = bound_upper + 1 
     bound_upper += step 
関連する問題