From 1c964cb732a72465cca6739d5635373ad8d8dc69 Mon Sep 17 00:00:00 2001 From: Michael Aldridge Date: Sat, 27 Aug 2022 15:51:03 -0500 Subject: [PATCH] internal/ldap: Improve support for attribute-present filters --- go.mod | 7 ++++--- go.sum | 14 ++++++++++++++ internal/ldap/bleve_mapper.go | 7 ++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 2463f43..92a993a 100644 --- a/go.mod +++ b/go.mod @@ -12,15 +12,16 @@ require ( github.com/netauth/netauth v0.4.1 github.com/netauth/protocol v0.0.0-20210308093302-0e6e0dd6dfb2 github.com/pelletier/go-toml v1.8.1 // indirect - github.com/ps78674/goldap v0.0.0-20200721080011-cd2e7ee23841 - github.com/ps78674/ldapserver v0.0.0-20200521101606-2395f680392c + github.com/ps78674/goldap v0.0.0-20210727122805-99df957a6c80 + github.com/ps78674/ldapserver v0.0.0-20220708160806-8f8d875bf8db + github.com/sirupsen/logrus v1.9.0 // indirect github.com/spf13/afero v1.5.1 // indirect github.com/spf13/cast v1.3.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.7.1 golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 // indirect - golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e // indirect + golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 // indirect google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9 // indirect gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 648b7d4..489e545 100644 --- a/go.sum +++ b/go.sum @@ -239,8 +239,13 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/ps78674/goldap v0.0.0-20200721080011-cd2e7ee23841 h1:K8RUAFsylWykxjpgTU/oW4I7h7+W/zAcN16ZogFaOds= github.com/ps78674/goldap v0.0.0-20200721080011-cd2e7ee23841/go.mod h1:1I9otN1F15q9oNDy1XDfWWCMl5qD2bUHG8OC+IwyDa0= +github.com/ps78674/goldap v0.0.0-20210209183235-23e5df50a4b5/go.mod h1:1I9otN1F15q9oNDy1XDfWWCMl5qD2bUHG8OC+IwyDa0= +github.com/ps78674/goldap v0.0.0-20210727122805-99df957a6c80 h1:T1l1uRhOspRA182xxnORen6BSDtfpWF/jxP234eyzQI= +github.com/ps78674/goldap v0.0.0-20210727122805-99df957a6c80/go.mod h1:1I9otN1F15q9oNDy1XDfWWCMl5qD2bUHG8OC+IwyDa0= github.com/ps78674/ldapserver v0.0.0-20200521101606-2395f680392c h1:/zfKmv5fhYt0LzAQx04RVJ8p+v7ejfup1+Jt6S9ijYo= github.com/ps78674/ldapserver v0.0.0-20200521101606-2395f680392c/go.mod h1:l2UBdoHdF4GrVGhunn7fxIdpTl7sTtvR67thWxhq+/k= +github.com/ps78674/ldapserver v0.0.0-20220708160806-8f8d875bf8db h1:ZO9rjQdQEEJR/bErecGwypOBgsc23aS+4qpO4oq9pHs= +github.com/ps78674/ldapserver v0.0.0-20220708160806-8f8d875bf8db/go.mod h1:EllvASg8pIZWhkYUDopfh9aq2XG+McxtGkv5lQDf81w= github.com/remyoudompheng/bigfft v0.0.0-20190321074620-2f0d2b0e0001/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -248,6 +253,9 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs= @@ -285,6 +293,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= @@ -375,6 +384,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -382,6 +392,9 @@ golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e h1:XNp2Flc/1eWQGk5BLzqTAN7fQIwIbfyVTuVxXxZh73M= golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 h1:UiNENfZ8gDvpiWw7IpOMQ27spWmThO1RwwdQVbJahJM= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -479,6 +492,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/ldap/bleve_mapper.go b/internal/ldap/bleve_mapper.go index c0c9e70..6e4d680 100644 --- a/internal/ldap/bleve_mapper.go +++ b/internal/ldap/bleve_mapper.go @@ -3,14 +3,13 @@ package ldap import ( "errors" "fmt" - "strconv" "strings" "github.com/ps78674/goldap/message" ) func (s *server) buildBleveQuery(f message.Filter) (string, error) { - s.l.Trace("Building search expression", "filter", fmt.Sprintf("%#v", f)) + s.l.Trace("Building search expression", "type", fmt.Sprintf("%T", f), "filter", fmt.Sprintf("%#v", f)) var err error var etmp string var expr []string @@ -26,6 +25,9 @@ func (s *server) buildBleveQuery(f message.Filter) (string, error) { } expr = append(expr, s) } + case message.FilterPresent: + etmp, err = mapToBleveStringQuery(string(f), "=", "*") + expr = append(expr, etmp) default: s.l.Warn("Unsupported search filter", "filter", fmt.Sprintf("%#v", f)) err = errors.New("unsupported search filter") @@ -48,7 +50,6 @@ func mapToBleveStringQuery(attr, op, val string) (string, error) { switch op { case "=": operator = ":" - val = strconv.Quote(val) default: return "", errors.New("search comparison is unsupported") }