Skip to content

Commit a40cae3

Browse files
committed
ldap: Reuse BindService() for initial bind attempt
1 parent 7ac0ec3 commit a40cae3

2 files changed

Lines changed: 24 additions & 34 deletions

File tree

internal/service/auth_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func (auth *AuthService) VerifyUser(search config.UserSearch, password string) b
101101
return false
102102
}
103103

104-
err = auth.ldap.BindService()
104+
err = auth.ldap.BindService(true)
105105
if err != nil {
106106
log.Error().Err(err).Msg("Failed to rebind with service account after user authentication")
107107
return false

internal/service/ldap_service.go

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

112102
func (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

154144
func (ldap *LdapService) Bind(userDN string, password string) error {

0 commit comments

Comments
 (0)