#2709 validate username attribute fetched from LDAP
This commit is contained in:
		
							parent
							
								
									846bf2ca9f
								
							
						
					
					
						commit
						a752f09055
					
				|  | @ -79,7 +79,7 @@ func checkVersion() { | |||
| 	// Check dependency version.
 | ||||
| 	checkers := []VerChecker{ | ||||
| 		{"github.com/go-xorm/xorm", func() string { return xorm.Version }, "0.5.5.0711"}, | ||||
| 		{"github.com/go-macaron/binding", binding.Version, "0.2.1"}, | ||||
| 		{"github.com/go-macaron/binding", binding.Version, "0.3.2"}, | ||||
| 		{"github.com/go-macaron/cache", cache.Version, "0.1.2"}, | ||||
| 		{"github.com/go-macaron/csrf", csrf.Version, "0.1.0"}, | ||||
| 		{"github.com/go-macaron/i18n", i18n.Version, "0.3.0"}, | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ imports: | |||
| - name: github.com/codegangsta/cli | ||||
|   version: 1efa31f08b9333f1bd4882d61f9d668a70cd902e | ||||
| - name: github.com/go-macaron/binding | ||||
|   version: bd00823a7e9aa00cb3b1738fde244573ba7cce2c | ||||
|   version: 9440f336b443056c90d7d448a0a55ad8c7599880 | ||||
| - name: github.com/go-macaron/cache | ||||
|   version: 56173531277692bc2925924d51fda1cd0a6b8178 | ||||
|   subpackages: | ||||
|  | @ -43,7 +43,7 @@ imports: | |||
| - name: github.com/gogits/git-module | ||||
|   version: db93fa550116997bbe0b62baa653b8e6f4135258 | ||||
| - name: github.com/gogits/go-gogs-client | ||||
|   version: 872cf281aac97429da02b6cdea942c9388eb65fb | ||||
|   version: ee68cd9eefff11615f336e9965762f6736eeecc8 | ||||
| - name: github.com/issue9/identicon | ||||
|   version: d36b54562f4cf70c83653e13dc95c220c79ef521 | ||||
| - name: github.com/jaytaylor/html2text | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ import ( | |||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/Unknwon/com" | ||||
| 	"github.com/go-macaron/binding" | ||||
| 	"github.com/go-xorm/core" | ||||
| 	"github.com/go-xorm/xorm" | ||||
| 
 | ||||
|  | @ -280,7 +281,7 @@ func DeleteSource(source *LoginSource) error { | |||
| func LoginUserLDAPSource(u *User, loginName, passwd string, source *LoginSource, autoRegister bool) (*User, error) { | ||||
| 	cfg := source.Cfg.(*LDAPConfig) | ||||
| 	directBind := (source.Type == LOGIN_DLDAP) | ||||
| 	name, fn, sn, mail, admin, logged := cfg.SearchEntry(loginName, passwd, directBind) | ||||
| 	username, fn, sn, mail, isAdmin, logged := cfg.SearchEntry(loginName, passwd, directBind) | ||||
| 	if !logged { | ||||
| 		// User not in LDAP, do nothing
 | ||||
| 		return nil, ErrUserNotExist{0, loginName} | ||||
|  | @ -291,37 +292,42 @@ func LoginUserLDAPSource(u *User, loginName, passwd string, source *LoginSource, | |||
| 	} | ||||
| 
 | ||||
| 	// Fallback.
 | ||||
| 	if len(name) == 0 { | ||||
| 		name = loginName | ||||
| 	if len(username) == 0 { | ||||
| 		username = loginName | ||||
| 	} | ||||
| 	// Validate username make sure it satisfies requirement.
 | ||||
| 	if !binding.AlphaDashDotPattern.MatchString(username) { | ||||
| 		return nil, fmt.Errorf("Invalid pattern for attribute 'username' [%s]: must be valid alpha or numeric or dash(-_) or dot characters", username) | ||||
| 	} | ||||
| 
 | ||||
| 	if len(mail) == 0 { | ||||
| 		mail = fmt.Sprintf("%s@localhost", name) | ||||
| 		mail = fmt.Sprintf("%s@localhost", username) | ||||
| 	} | ||||
| 
 | ||||
| 	u = &User{ | ||||
| 		LowerName:   strings.ToLower(name), | ||||
| 		Name:        name, | ||||
| 		FullName:    composeFullName(fn, sn, name), | ||||
| 		LowerName:   strings.ToLower(username), | ||||
| 		Name:        username, | ||||
| 		FullName:    composeFullName(fn, sn, username), | ||||
| 		LoginType:   source.Type, | ||||
| 		LoginSource: source.ID, | ||||
| 		LoginName:   loginName, | ||||
| 		Email:       mail, | ||||
| 		IsAdmin:     admin, | ||||
| 		IsAdmin:     isAdmin, | ||||
| 		IsActive:    true, | ||||
| 	} | ||||
| 	return u, CreateUser(u) | ||||
| } | ||||
| 
 | ||||
| func composeFullName(firstName, surename, userName string) string { | ||||
| func composeFullName(firstname, surname, username string) string { | ||||
| 	switch { | ||||
| 	case len(firstName) == 0 && len(surename) == 0: | ||||
| 		return userName | ||||
| 	case len(firstName) == 0: | ||||
| 		return surename | ||||
| 	case len(surename) == 0: | ||||
| 		return firstName | ||||
| 	case len(firstname) == 0 && len(surname) == 0: | ||||
| 		return username | ||||
| 	case len(firstname) == 0: | ||||
| 		return surname | ||||
| 	case len(surname) == 0: | ||||
| 		return firstname | ||||
| 	default: | ||||
| 		return firstName + " " + surename | ||||
| 		return firstname + " " + surname | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -210,12 +210,12 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str | |||
| 		return "", "", "", "", false, false | ||||
| 	} | ||||
| 
 | ||||
| 	username_attr := sr.Entries[0].GetAttributeValue(ls.AttributeUsername) | ||||
| 	name_attr := sr.Entries[0].GetAttributeValue(ls.AttributeName) | ||||
| 	sn_attr := sr.Entries[0].GetAttributeValue(ls.AttributeSurname) | ||||
| 	mail_attr := sr.Entries[0].GetAttributeValue(ls.AttributeMail) | ||||
| 	username := sr.Entries[0].GetAttributeValue(ls.AttributeUsername) | ||||
| 	firstname := sr.Entries[0].GetAttributeValue(ls.AttributeName) | ||||
| 	surname := sr.Entries[0].GetAttributeValue(ls.AttributeSurname) | ||||
| 	mail := sr.Entries[0].GetAttributeValue(ls.AttributeMail) | ||||
| 
 | ||||
| 	admin_attr := false | ||||
| 	isAdmin := false | ||||
| 	if len(ls.AdminFilter) > 0 { | ||||
| 		log.Trace("Checking admin with filter %s and base %s", ls.AdminFilter, userDN) | ||||
| 		search = ldap.NewSearchRequest( | ||||
|  | @ -229,7 +229,7 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str | |||
| 		} else if len(sr.Entries) < 1 { | ||||
| 			log.Error(4, "LDAP Admin Search failed") | ||||
| 		} else { | ||||
| 			admin_attr = true | ||||
| 			isAdmin = true | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | @ -241,5 +241,5 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return username_attr, name_attr, sn_attr, mail_attr, admin_attr, true | ||||
| 	return username, firstname, surname, mail, isAdmin, true | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue