代码之家  ›  专栏  ›  技术社区  ›  Dikla

LDAP广告范围属性,如何使用?

  •  3
  • Dikla  · 技术社区  · 17 年前

    我试图使用range属性。

    我就是这样做的:

    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);
        }
    }
    

    我做错什么了?

    1 回复  |  直到 17 年前
        1
  •  7
  •   Russell Jackson    16 年前
    #!/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