@@ -72,41 +72,31 @@ func (ldap *LdapService) connect() (*ldapgo.Conn, error) {
7272 ldap .mutex .Lock ()
7373 defer ldap .mutex .Unlock ()
7474
75+ var conn * ldapgo.Conn
76+ var err error
77+
7578 if ldap .cert != nil {
76- conn , err : = ldapgo .DialURL (ldap .Config .Address , ldapgo .DialWithTLSConfig (& tls.Config {
79+ conn , err = ldapgo .DialURL (ldap .Config .Address , ldapgo .DialWithTLSConfig (& tls.Config {
7780 MinVersion : tls .VersionTLS12 ,
7881 Certificates : []tls.Certificate {* ldap .cert },
7982 }))
80- if err != nil {
81- return nil , err
82- }
83-
84- err = conn .ExternalBind ()
85- if err != nil {
86- log .Error ().Err (err ).Msg ("LDAP mTLS bind failed?" )
87- return nil , err
88- }
89- // Set and return the connection
90- ldap .conn = conn
91- return conn , nil
9283 } else {
93- conn , err : = ldapgo .DialURL (ldap .Config .Address , ldapgo .DialWithTLSConfig (& tls.Config {
84+ conn , err = ldapgo .DialURL (ldap .Config .Address , ldapgo .DialWithTLSConfig (& tls.Config {
9485 InsecureSkipVerify : ldap .Config .Insecure ,
9586 MinVersion : tls .VersionTLS12 ,
9687 }))
97- if err != nil {
98- return nil , err
99- }
100-
101- err = conn .Bind (ldap .Config .BindDN , ldap .Config .BindPassword )
102- if err != nil {
103- return nil , err
104- }
105- // Set and return the connection
106- ldap .conn = conn
107- return conn , nil
10888 }
89+ if err != nil {
90+ return nil , err
91+ }
92+
93+ ldap .conn = conn
10994
95+ err = ldap .BindService (false )
96+ if err != nil {
97+ return nil , err
98+ }
99+ return ldap .conn , nil
110100}
111101
112102func (ldap * LdapService ) Search (username string ) (string , error ) {
@@ -138,17 +128,17 @@ func (ldap *LdapService) Search(username string) (string, error) {
138128 return userDN , nil
139129}
140130
141- func (ldap * LdapService ) BindService () error {
142- ldap .mutex .Lock ()
143- defer ldap .mutex .Unlock ()
131+ func (ldap * LdapService ) BindService (rebind bool ) error {
132+ // Locks must not be used for initial binding attempt
133+ if rebind {
134+ ldap .mutex .Lock ()
135+ defer ldap .mutex .Unlock ()
136+ }
144137
145- var err error
146138 if ldap .cert != nil {
147- err = ldap .conn .ExternalBind ()
148- } else {
149- err = ldap .conn .Bind (ldap .Config .BindDN , ldap .Config .BindPassword )
139+ return ldap .conn .ExternalBind ()
150140 }
151- return err
141+ return ldap . conn . Bind ( ldap . Config . BindDN , ldap . Config . BindPassword )
152142}
153143
154144func (ldap * LdapService ) Bind (userDN string , password string ) error {
0 commit comments