diff options
| -rw-r--r-- | server.go | 12 | ||||
| -rw-r--r-- | server_search.go | 7 | ||||
| -rw-r--r-- | server_search_test.go | 14 | ||||
| -rw-r--r-- | server_test.go | 45 |
4 files changed, 16 insertions, 62 deletions
@@ -12,10 +12,8 @@ import ( ) type BindFunc func(bindDN, bindSimplePw string, conn net.Conn) (LDAPResultCode, error) +type SearchFunc func(boundDN string, req SearchRequest, conn net.Conn) (ServerSearchResult, error) -type Searcher interface { - Search(boundDN string, req SearchRequest, conn net.Conn) (ServerSearchResult, error) -} type Adder interface { Add(boundDN string, req AddRequest, conn net.Conn) (LDAPResultCode, error) } @@ -47,8 +45,8 @@ type Closer interface { // type Server struct { Bind BindFunc + Search SearchFunc - SearchFns map[string]Searcher AddFns map[string]Adder ModifyFns map[string]Modifier DeleteFns map[string]Deleter @@ -84,7 +82,6 @@ func NewServer() *Server { s := new(Server) d := defaultHandler{} - s.SearchFns = make(map[string]Searcher) s.AddFns = make(map[string]Adder) s.ModifyFns = make(map[string]Modifier) s.DeleteFns = make(map[string]Deleter) @@ -96,8 +93,8 @@ func NewServer() *Server { s.CloseFns = make(map[string]Closer) s.Bind = d.Bind + s.Search = d.Search - s.SearchFunc("", d) s.AddFunc("", d) s.ModifyFunc("", d) s.DeleteFunc("", d) @@ -112,9 +109,6 @@ func NewServer() *Server { s.closing = make(chan struct{}) return s } -func (server *Server) SearchFunc(baseDN string, f Searcher) { - server.SearchFns[baseDN] = f -} func (server *Server) AddFunc(baseDN string, f Adder) { server.AddFns[baseDN] = f } diff --git a/server_search.go b/server_search.go index 2e21e12..aa290a3 100644 --- a/server_search.go +++ b/server_search.go @@ -26,12 +26,7 @@ func HandleSearchRequest(req *ber.Packet, controls *[]Control, messageID uint64, return NewError(LDAPResultOperationsError, err) } - fnNames := []string{} - for k := range server.SearchFns { - fnNames = append(fnNames, k) - } - fn := routeFunc(searchReq.BaseDN, fnNames) - searchResp, err := server.SearchFns[fn].Search(boundDN, searchReq, conn) + searchResp, err := server.Search(boundDN, searchReq, conn) if err != nil { return NewError(searchResp.ResultCode, err) } diff --git a/server_search_test.go b/server_search_test.go index 1a59940..63d465d 100644 --- a/server_search_test.go +++ b/server_search_test.go @@ -14,7 +14,7 @@ func TestSearchSimpleOK(t *testing.T) { defer s.Close() ln, addr := mustListen() go func() { - s.SearchFunc("", searchSimple{}) + s.Search = SearchSimple s.Bind = BindSimple if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) @@ -56,7 +56,7 @@ func TestSearchSizelimit(t *testing.T) { ln, addr := mustListen() go func() { s.EnforceLDAP = true - s.SearchFunc("", searchSimple{}) + s.Search = SearchSimple s.Bind = BindSimple if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) @@ -150,7 +150,7 @@ func TestSearchPanic(t *testing.T) { defer s.Close() ln, addr := mustListen() go func() { - s.SearchFunc("", searchPanic{}) + s.Search = SearchPanic s.Bind = BindAnonOK if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) @@ -216,7 +216,7 @@ func TestSearchFiltering(t *testing.T) { ln, addr := mustListen() go func() { s.EnforceLDAP = true - s.SearchFunc("", searchSimple{}) + s.Search = SearchSimple s.Bind = BindSimple if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) @@ -252,7 +252,7 @@ func TestSearchAttributes(t *testing.T) { ln, addr := mustListen() go func() { s.EnforceLDAP = true - s.SearchFunc("", searchSimple{}) + s.Search = SearchSimple s.Bind = BindSimple if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) @@ -295,7 +295,7 @@ func TestSearchScope(t *testing.T) { ln, addr := mustListen() go func() { s.EnforceLDAP = true - s.SearchFunc("", searchSimple{}) + s.Search = SearchSimple s.Bind = BindSimple if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) @@ -352,7 +352,7 @@ func TestSearchControls(t *testing.T) { defer s.Close() ln, addr := mustListen() go func() { - s.SearchFunc("", searchControls{}) + s.Search = SearchControls s.Bind = BindSimple if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) diff --git a/server_test.go b/server_test.go index 79a1c07..29df06b 100644 --- a/server_test.go +++ b/server_test.go @@ -79,7 +79,7 @@ func TestBindSimpleOK(t *testing.T) { defer s.Close() ln, addr := mustListen() go func() { - s.SearchFunc("", searchSimple{}) + s.Search = SearchSimple s.Bind = BindSimple if err := s.Serve(ln); err != nil { t.Errorf("s.Serve failed: %s", err.Error()) @@ -267,7 +267,7 @@ func TestSearchStats(t *testing.T) { ln, addr := mustListen() go func() { - s.SearchFunc("", searchSimple{}) + s.Search = SearchSimple s.Bind = BindAnonOK s.SetStats(true) if err := s.Serve(ln); err != nil { @@ -311,21 +311,11 @@ func BindSimple(bindDN, bindSimplePw string, conn net.Conn) (LDAPResultCode, err return LDAPResultInvalidCredentials, nil } -func BindSimple2(bindDN, bindSimplePw string, conn net.Conn) (LDAPResultCode, error) { - if bindDN == "cn=testy,o=testers,c=testz" && bindSimplePw == "ZLike2test" { - return LDAPResultSuccess, nil - } - return LDAPResultInvalidCredentials, nil -} - func BindPanic(bindDN, bindSimplePw string, conn net.Conn) (LDAPResultCode, error) { panic("test panic at the disco") } -type searchSimple struct { -} - -func (s searchSimple) Search(boundDN string, searchReq SearchRequest, conn net.Conn) (ServerSearchResult, error) { +func SearchSimple(boundDN string, searchReq SearchRequest, conn net.Conn) (ServerSearchResult, error) { entries := []*Entry{ &Entry{"cn=ned,o=testers,c=test", []*EntryAttribute{ &EntryAttribute{"cn", []string{"ned"}}, @@ -357,36 +347,11 @@ func (s searchSimple) Search(boundDN string, searchReq SearchRequest, conn net.C return ServerSearchResult{entries, []string{}, []Control{}, LDAPResultSuccess}, nil } -type searchSimple2 struct { -} - -func (s searchSimple2) Search(boundDN string, searchReq SearchRequest, conn net.Conn) (ServerSearchResult, error) { - entries := []*Entry{ - &Entry{"cn=hamburger,o=testers,c=testz", []*EntryAttribute{ - &EntryAttribute{"cn", []string{"hamburger"}}, - &EntryAttribute{"o", []string{"testers"}}, - &EntryAttribute{"uidNumber", []string{"5000"}}, - &EntryAttribute{"accountstatus", []string{"active"}}, - &EntryAttribute{"uid", []string{"hamburger"}}, - &EntryAttribute{"objectclass", []string{"posixaccount"}}, - }}, - } - return ServerSearchResult{entries, []string{}, []Control{}, LDAPResultSuccess}, nil -} - -type searchPanic struct { -} - -func (s searchPanic) Search(boundDN string, searchReq SearchRequest, conn net.Conn) (ServerSearchResult, error) { - entries := []*Entry{} +func SearchPanic(boundDN string, searchReq SearchRequest, conn net.Conn) (ServerSearchResult, error) { panic("this is a test panic") - return ServerSearchResult{entries, []string{}, []Control{}, LDAPResultSuccess}, nil -} - -type searchControls struct { } -func (s searchControls) Search(boundDN string, searchReq SearchRequest, conn net.Conn) (ServerSearchResult, error) { +func SearchControls(boundDN string, searchReq SearchRequest, conn net.Conn) (ServerSearchResult, error) { entries := []*Entry{} if len(searchReq.Controls) == 1 && searchReq.Controls[0].GetControlType() == "1.2.3.4.5" { newEntry := &Entry{"cn=hamburger,o=testers,c=testz", []*EntryAttribute{ |
