mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge pull request #15872 from grafana/15643_fix2
fix allow anonymous server bind for ldap search
This commit is contained in:
commit
4f48ed3350
@ -219,8 +219,18 @@ func (a *ldapAuther) GetGrafanaUserFor(ctx *m.ReqContext, ldapUser *LdapUserInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *ldapAuther) serverBind() error {
|
func (a *ldapAuther) serverBind() error {
|
||||||
|
bindFn := func() error {
|
||||||
|
return a.conn.Bind(a.server.BindDN, a.server.BindPassword)
|
||||||
|
}
|
||||||
|
|
||||||
|
if a.server.BindPassword == "" {
|
||||||
|
bindFn = func() error {
|
||||||
|
return a.conn.UnauthenticatedBind(a.server.BindDN)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// bind_dn and bind_password to bind
|
// bind_dn and bind_password to bind
|
||||||
if err := a.conn.Bind(a.server.BindDN, a.server.BindPassword); err != nil {
|
if err := bindFn(); err != nil {
|
||||||
a.log.Info("LDAP initial bind failed, %v", err)
|
a.log.Info("LDAP initial bind failed, %v", err)
|
||||||
|
|
||||||
if ldapErr, ok := err.(*ldap.Error); ok {
|
if ldapErr, ok := err.(*ldap.Error); ok {
|
||||||
|
@ -78,6 +78,69 @@ func TestLdapAuther(t *testing.T) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Convey("serverBind", t, func() {
|
||||||
|
Convey("Given bind dn and password configured", func() {
|
||||||
|
conn := &mockLdapConn{}
|
||||||
|
var actualUsername, actualPassword string
|
||||||
|
conn.bindProvider = func(username, password string) error {
|
||||||
|
actualUsername = username
|
||||||
|
actualPassword = password
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
ldapAuther := &ldapAuther{
|
||||||
|
conn: conn,
|
||||||
|
server: &LdapServerConf{
|
||||||
|
BindDN: "o=users,dc=grafana,dc=org",
|
||||||
|
BindPassword: "bindpwd",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err := ldapAuther.serverBind()
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
So(actualUsername, ShouldEqual, "o=users,dc=grafana,dc=org")
|
||||||
|
So(actualPassword, ShouldEqual, "bindpwd")
|
||||||
|
})
|
||||||
|
|
||||||
|
Convey("Given bind dn configured", func() {
|
||||||
|
conn := &mockLdapConn{}
|
||||||
|
unauthenticatedBindWasCalled := false
|
||||||
|
var actualUsername string
|
||||||
|
conn.unauthenticatedBindProvider = func(username string) error {
|
||||||
|
unauthenticatedBindWasCalled = true
|
||||||
|
actualUsername = username
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
ldapAuther := &ldapAuther{
|
||||||
|
conn: conn,
|
||||||
|
server: &LdapServerConf{
|
||||||
|
BindDN: "o=users,dc=grafana,dc=org",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err := ldapAuther.serverBind()
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
So(unauthenticatedBindWasCalled, ShouldBeTrue)
|
||||||
|
So(actualUsername, ShouldEqual, "o=users,dc=grafana,dc=org")
|
||||||
|
})
|
||||||
|
|
||||||
|
Convey("Given empty bind dn and password", func() {
|
||||||
|
conn := &mockLdapConn{}
|
||||||
|
unauthenticatedBindWasCalled := false
|
||||||
|
var actualUsername string
|
||||||
|
conn.unauthenticatedBindProvider = func(username string) error {
|
||||||
|
unauthenticatedBindWasCalled = true
|
||||||
|
actualUsername = username
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
ldapAuther := &ldapAuther{
|
||||||
|
conn: conn,
|
||||||
|
server: &LdapServerConf{},
|
||||||
|
}
|
||||||
|
err := ldapAuther.serverBind()
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
So(unauthenticatedBindWasCalled, ShouldBeTrue)
|
||||||
|
So(actualUsername, ShouldBeEmpty)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
Convey("When translating ldap user to grafana user", t, func() {
|
Convey("When translating ldap user to grafana user", t, func() {
|
||||||
|
|
||||||
var user1 = &m.User{}
|
var user1 = &m.User{}
|
||||||
|
Loading…
Reference in New Issue
Block a user