diff options
Diffstat (limited to 'read.go')
-rw-r--r-- | read.go | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -97,6 +97,8 @@ func (server *Server) handleSearchInternal(state *State, w ldap.ResponseWriter, return ldap.LDAPResultInsufficientAccessRights, fmt.Errorf("Please specify a base object on which you have read rights") } + baseObjectLevel := len(strings.Split(baseObject, ",")) + basePath, err := dnToConsul(baseObject) if err != nil { return ldap.LDAPResultInvalidDNSyntax, err @@ -116,6 +118,16 @@ func (server *Server) handleSearchInternal(state *State, w ldap.ResponseWriter, server.logger.Tracef("%#v", entries) for dn, entry := range entries { + if r.Scope() == message.SearchRequestScopeBaseObject { + if dn != baseObject { + continue + } + } else if r.Scope() == message.SearchRequestSingleLevel { + objectLevel := len(strings.Split(dn, ",")) + if objectLevel != baseObjectLevel + 1 { + continue + } + } // Filter out if we don't match requested filter matched, err := applyFilter(entry, r.Filter()) if err != nil { |