Browse Source

case-insensitive LDAP group comparison (#9926)

* ldap: case-insensitive LDAP group comparison

According to RFC2251 4.1.5, LDAP strings are case-insensitive. Disregard case when comparing group mappings.

* ldap: add test for case-insensitive group mapping
Tomasz Torcz 7 years ago
parent
commit
e1b9d361ed
2 changed files with 19 additions and 1 deletions
  1. 14 0
      pkg/login/ldap_test.go
  2. 5 1
      pkg/login/ldap_user.go

+ 14 - 0
pkg/login/ldap_test.go

@@ -53,6 +53,20 @@ func TestLdapAuther(t *testing.T) {
 			So(result, ShouldEqual, user1)
 			So(result, ShouldEqual, user1)
 		})
 		})
 
 
+		ldapAutherScenario("Given group match with different case", func(sc *scenarioContext) {
+			ldapAuther := NewLdapAuthenticator(&LdapServerConf{
+				LdapGroups: []*LdapGroupToOrgRole{
+					{GroupDN: "cn=users", OrgRole: "Admin"},
+				},
+			})
+
+			sc.userQueryReturns(user1)
+
+			result, err := ldapAuther.GetGrafanaUserFor(&LdapUserInfo{MemberOf: []string{"CN=users"}})
+			So(err, ShouldBeNil)
+			So(result, ShouldEqual, user1)
+		})
+
 		ldapAutherScenario("Given no existing grafana user", func(sc *scenarioContext) {
 		ldapAutherScenario("Given no existing grafana user", func(sc *scenarioContext) {
 			ldapAuther := NewLdapAuthenticator(&LdapServerConf{
 			ldapAuther := NewLdapAuthenticator(&LdapServerConf{
 				LdapGroups: []*LdapGroupToOrgRole{
 				LdapGroups: []*LdapGroupToOrgRole{

+ 5 - 1
pkg/login/ldap_user.go

@@ -1,5 +1,9 @@
 package login
 package login
 
 
+import (
+	"strings"
+)
+
 type LdapUserInfo struct {
 type LdapUserInfo struct {
 	DN        string
 	DN        string
 	FirstName string
 	FirstName string
@@ -15,7 +19,7 @@ func (u *LdapUserInfo) isMemberOf(group string) bool {
 	}
 	}
 
 
 	for _, member := range u.MemberOf {
 	for _, member := range u.MemberOf {
-		if member == group {
+		if strings.EqualFold(member, group) {
 			return true
 			return true
 		}
 		}
 	}
 	}