summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server_search.go5
-rw-r--r--server_search_test.go52
2 files changed, 55 insertions, 2 deletions
diff --git a/server_search.go b/server_search.go
index 3fc91c5..b4f7a5f 100644
--- a/server_search.go
+++ b/server_search.go
@@ -3,9 +3,10 @@ package ldap
import (
"errors"
"fmt"
- "github.com/nmcclain/asn1-ber"
"net"
"strings"
+
+ ber "github.com/nmcclain/asn1-ber"
)
func HandleSearchRequest(req *ber.Packet, controls *[]Control, messageID uint64, boundDN string, server *Server, conn net.Conn) (resultErr error) {
@@ -161,7 +162,7 @@ func filterAttributes(entry *Entry, attributes []string) (*Entry, error) {
for _, attr := range entry.Attributes {
for _, requested := range attributes {
- if strings.ToLower(attr.Name) == strings.ToLower(requested) {
+ if requested == "*" || strings.ToLower(attr.Name) == strings.ToLower(requested) {
newAttributes = append(newAttributes, attr)
}
}
diff --git a/server_search_test.go b/server_search_test.go
index ed6b6d6..5a083b0 100644
--- a/server_search_test.go
+++ b/server_search_test.go
@@ -339,6 +339,58 @@ func TestSearchAttributes(t *testing.T) {
quit <- true
}
+func TestSearchAllUserAttributes(t *testing.T) {
+ quit := make(chan bool)
+ done := make(chan bool)
+ go func() {
+ s := NewServer()
+ s.EnforceLDAP = true
+ s.QuitChannel(quit)
+ s.SearchFunc("", searchSimple{})
+ s.BindFunc("", bindSimple{})
+ if err := s.ListenAndServe(listenString); err != nil {
+ t.Errorf("s.ListenAndServe failed: %s", err.Error())
+ }
+ }()
+
+ go func() {
+ filterString := ""
+ cmd := exec.Command("ldapsearch", "-H", ldapURL, "-x",
+ "-b", serverBaseDN, "-D", "cn=testy,"+serverBaseDN, "-w", "iLike2test", filterString, "*")
+ out, _ := cmd.CombinedOutput()
+
+ if !strings.Contains(string(out), "dn: cn=ned,o=testers,c=test") {
+ t.Errorf("ldapsearch failed - missing requested DN attribute: %v", string(out))
+ }
+ if !strings.Contains(string(out), "cn: ned") {
+ t.Errorf("ldapsearch failed - missing requested CN attribute: %v", string(out))
+ }
+ if !strings.Contains(string(out), "uidNumber") {
+ t.Errorf("ldapsearch failed - missing requested uidNumber attribute: %v", string(out))
+ }
+ if !strings.Contains(string(out), "accountstatus") {
+ t.Errorf("ldapsearch failed - missing requested accountstatus attribute: %v", string(out))
+ }
+ if !strings.Contains(string(out), "o: ate") {
+ t.Errorf("ldapsearch failed - missing requested o attribute: %v", string(out))
+ }
+ if !strings.Contains(string(out), "description") {
+ t.Errorf("ldapsearch failed - missing requested description attribute: %v", string(out))
+ }
+ if !strings.Contains(string(out), "objectclass") {
+ t.Errorf("ldapsearch failed - missing requested objectclass attribute: %v", string(out))
+ }
+ done <- true
+ }()
+
+ select {
+ case <-done:
+ case <-time.After(timeout):
+ t.Errorf("ldapsearch command timed out")
+ }
+ quit <- true
+}
+
/////////////////////////
func TestSearchScope(t *testing.T) {
quit := make(chan bool)