1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-19 05:09:42 +02:00

Use paging for LDAP queries

This commit is contained in:
sauls8t 2018-09-07 15:09:54 +01:00
parent ae084ae0bb
commit e03497032b
3 changed files with 674 additions and 666 deletions

View file

@ -14,6 +14,7 @@ package ldap
import ( import (
"crypto/tls" "crypto/tls"
"fmt" "fmt"
"math"
"strings" "strings"
"github.com/documize/community/core/stringutil" "github.com/documize/community/core/stringutil"
@ -116,13 +117,13 @@ func executeUserFilter(c lm.LDAPConfig) (u []lm.LDAPUser, err error) {
searchRequest := ld.NewSearchRequest( searchRequest := ld.NewSearchRequest(
c.BaseDN, c.BaseDN,
ld.ScopeWholeSubtree, ld.NeverDerefAliases, 0, 0, false, ld.ScopeWholeSubtree, ld.NeverDerefAliases, math.MaxInt32, 0, false,
c.UserFilter, c.UserFilter,
c.GetUserFilterAttributes(), c.GetUserFilterAttributes(),
nil, nil,
) )
sr, err := l.Search(searchRequest) sr, err := l.SearchWithPaging(searchRequest, lm.MaxPageSize)
if err != nil { if err != nil {
errors.Wrap(err, "unable to execute directory search for user filter "+c.UserFilter) errors.Wrap(err, "unable to execute directory search for user filter "+c.UserFilter)
return return
@ -153,13 +154,13 @@ func executeGroupFilter(c lm.LDAPConfig) (u []lm.LDAPUser, err error) {
searchRequest := ld.NewSearchRequest( searchRequest := ld.NewSearchRequest(
c.BaseDN, c.BaseDN,
ld.ScopeWholeSubtree, ld.NeverDerefAliases, 0, 0, false, ld.ScopeWholeSubtree, ld.NeverDerefAliases, math.MaxInt32, 0, false,
c.GroupFilter, c.GroupFilter,
c.GetGroupFilterAttributes(), c.GetGroupFilterAttributes(),
nil, nil,
) )
sr, err := l.Search(searchRequest) sr, err := l.SearchWithPaging(searchRequest, lm.MaxPageSize)
if err != nil { if err != nil {
errors.Wrap(err, "unable to execute directory search for user filter "+c.GroupFilter) errors.Wrap(err, "unable to execute directory search for user filter "+c.GroupFilter)
return return

File diff suppressed because one or more lines are too long

View file

@ -74,6 +74,13 @@ const (
EncryptionTypeStartTLS = "starttls" EncryptionTypeStartTLS = "starttls"
) )
const (
// MaxPageSize controls how many query results are
// fetched at once from the LDAP server.
// See https://answers.splunk.com/answers/1538/what-is-ldap-error-size-limit-exceeded.html
MaxPageSize = 250
)
// Clean ensures configuration data is formatted correctly. // Clean ensures configuration data is formatted correctly.
func (c *LDAPConfig) Clean() { func (c *LDAPConfig) Clean() {
c.BaseDN = strings.TrimSpace(c.BaseDN) c.BaseDN = strings.TrimSpace(c.BaseDN)