diff --git a/build b/build index 7bdb1af..069aeae 100755 --- a/build +++ b/build @@ -3,7 +3,7 @@ set -e base='docker.io/tpimenta/nginx-ldap-auth' -version='v1.0.4' +version='v1.0.5' image="$base:$version" atexit() { diff --git a/k8s-rbac.yaml b/k8s-rbac.yaml index 3298148..40249ae 100644 --- a/k8s-rbac.yaml +++ b/k8s-rbac.yaml @@ -66,7 +66,7 @@ spec: spec: serviceAccountName: nginx-ldap-auth containers: - - image: docker.io/tpimenta/nginx-ldap-auth:v1.0.4 + - image: docker.io/tpimenta/nginx-ldap-auth:v1.0.5 name: nginx-ldap-auth command: - "/usr/local/bin/nginx-ldap-auth" diff --git a/k8s.yaml b/k8s.yaml index 91a8bfb..45c5019 100644 --- a/k8s.yaml +++ b/k8s.yaml @@ -26,7 +26,7 @@ spec: app: nginx-ldap-auth spec: containers: - - image: docker.io/tpimenta/nginx-ldap-auth:v1.0.4 + - image: docker.io/tpimenta/nginx-ldap-auth:v1.0.5 name: nginx-ldap-auth command: - "/usr/local/bin/nginx-ldap-auth" diff --git a/ldap/jail.go b/ldap/jail.go index e18d2d9..be80991 100644 --- a/ldap/jail.go +++ b/ldap/jail.go @@ -6,15 +6,18 @@ import ( ldap "gopkg.in/ldap.v2" ) -func (p *Pool) networkJail(f func() error) error { +func (p *Pool) networkJail(f func() error) (bool, error) { err := f() if err != nil && ldap.IsErrorWithCode(err, ldap.ErrorNetwork) { log.Printf("Network problem, trying to reconnect once: %v.\n", err) err = p.Connect() if err != nil { - return err + return false, err } err = f() + if err != nil && ldap.IsErrorWithCode(err, ldap.ErrorNetwork) { + return false, err + } } - return err + return true, err } diff --git a/ldap/login.go b/ldap/login.go index f89e2cc..742babf 100644 --- a/ldap/login.go +++ b/ldap/login.go @@ -10,9 +10,13 @@ func (p *Pool) Validate(username, password string) (bool, error) { } p.admin = false - err = p.networkJail(func() error { + var ok bool + ok, err = p.networkJail(func() error { return p.conn.Bind(username, password) }) + if !ok { + return false, err + } if err != nil { return true, err } @@ -30,7 +34,7 @@ func (p *Pool) auth() error { return nil } - err := p.networkJail(func() error { + _, err := p.networkJail(func() error { return p.conn.Bind(p.username, p.password) }) if err == nil { diff --git a/ldap/search.go b/ldap/search.go index d468923..4e0e6da 100644 --- a/ldap/search.go +++ b/ldap/search.go @@ -22,7 +22,7 @@ func (p *Pool) Search(base, filter string, attr string) (bool, string, []string, } var res *ldap.SearchResult - err = p.networkJail(func() error { + _, err = p.networkJail(func() error { res, err = p.conn.Search(ldap.NewSearchRequest( base, ldap.ScopeWholeSubtree, diff --git a/rule/service.go b/rule/service.go index 6b887e5..d7b2974 100644 --- a/rule/service.go +++ b/rule/service.go @@ -54,7 +54,7 @@ func (p *Service) validate(username, password string) (bool, error) { return false, err } - if !ok || p.required == nil || len(p.required) == 0 { + if !ok || err != nil || p.required == nil || len(p.required) == 0 { return err == nil, nil }