summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server_search.go14
-rw-r--r--server_search_test.go20
2 files changed, 28 insertions, 6 deletions
diff --git a/server_search.go b/server_search.go
index 74d06b9..3fc91c5 100644
--- a/server_search.go
+++ b/server_search.go
@@ -44,7 +44,8 @@ func HandleSearchRequest(req *ber.Packet, controls *[]Control, messageID uint64,
}
}
- for i, entry := range searchResp.Entries {
+ i := 0
+ for _, entry := range searchResp.Entries {
if server.EnforceLDAP {
// filter
keep, resultCode := ServerApplyFilter(filterPacket, entry)
@@ -72,11 +73,6 @@ func HandleSearchRequest(req *ber.Packet, controls *[]Control, messageID uint64,
}
}
- // size limit
- if searchReq.SizeLimit > 0 && i >= searchReq.SizeLimit {
- break
- }
-
// attributes
if len(searchReq.Attributes) > 1 || (len(searchReq.Attributes) == 1 && len(searchReq.Attributes[0]) > 0) {
entry, err = filterAttributes(entry, searchReq.Attributes)
@@ -84,6 +80,12 @@ func HandleSearchRequest(req *ber.Packet, controls *[]Control, messageID uint64,
return NewError(LDAPResultOperationsError, err)
}
}
+
+ // size limit
+ if searchReq.SizeLimit > 0 && i >= searchReq.SizeLimit {
+ break
+ }
+ i++
}
// respond
diff --git a/server_search_test.go b/server_search_test.go
index ed05f68..8b8fa65 100644
--- a/server_search_test.go
+++ b/server_search_test.go
@@ -114,6 +114,26 @@ func TestSearchSizelimit(t *testing.T) {
if !strings.Contains(string(out), "numEntries: 3") {
t.Errorf("ldapsearch sizelimit 0 failed - wrong number of entries: %v", string(out))
}
+
+ cmd = exec.Command("ldapsearch", "-H", ldapURL, "-x",
+ "-b", serverBaseDN, "-D", "cn=testy,"+serverBaseDN, "-w", "iLike2test", "-z", "1", "(uid=trent)")
+ out, _ = cmd.CombinedOutput()
+ if !strings.Contains(string(out), "result: 0 Success") {
+ t.Errorf("ldapsearch failed: %v", string(out))
+ }
+ if !strings.Contains(string(out), "numEntries: 1") {
+ t.Errorf("ldapsearch sizelimit 1 with filter failed - wrong number of entries: %v", string(out))
+ }
+
+ cmd = exec.Command("ldapsearch", "-H", ldapURL, "-x",
+ "-b", serverBaseDN, "-D", "cn=testy,"+serverBaseDN, "-w", "iLike2test", "-z", "0", "(uid=trent)")
+ out, _ = cmd.CombinedOutput()
+ if !strings.Contains(string(out), "result: 0 Success") {
+ t.Errorf("ldapsearch failed: %v", string(out))
+ }
+ if !strings.Contains(string(out), "numEntries: 1") {
+ t.Errorf("ldapsearch sizelimit 0 with filter failed - wrong number of entries: %v", string(out))
+ }
done <- true
}()