|  | @@ -18,6 +18,7 @@ import (
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	"github.com/gogits/gogs/modules/auth/ldap"
 | 
	
		
			
				|  |  |  	"github.com/gogits/gogs/modules/log"
 | 
	
		
			
				|  |  | +	"github.com/gogits/gogs/modules/uuid"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type LoginType int
 | 
	
	
		
			
				|  | @@ -228,30 +229,32 @@ func UserSignIn(uname, passwd string) (*User, error) {
 | 
	
		
			
				|  |  |  // Query if name/passwd can login against the LDAP direcotry pool
 | 
	
		
			
				|  |  |  // Create a local user if success
 | 
	
		
			
				|  |  |  // Return the same LoginUserPlain semantic
 | 
	
		
			
				|  |  | +// FIXME: https://github.com/gogits/gogs/issues/672
 | 
	
		
			
				|  |  |  func LoginUserLdapSource(u *User, name, passwd string, sourceId int64, cfg *LDAPConfig, autoRegister bool) (*User, error) {
 | 
	
		
			
				|  |  |  	mail, logged := cfg.Ldapsource.SearchEntry(name, passwd)
 | 
	
		
			
				|  |  |  	if !logged {
 | 
	
		
			
				|  |  | -		// user not in LDAP, do nothing
 | 
	
		
			
				|  |  | +		// User not in LDAP, do nothing
 | 
	
		
			
				|  |  |  		return nil, ErrUserNotExist
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	if !autoRegister {
 | 
	
		
			
				|  |  |  		return u, nil
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	// fake a local user creation
 | 
	
		
			
				|  |  | +	// Fallback.
 | 
	
		
			
				|  |  | +	if len(mail) == 0 {
 | 
	
		
			
				|  |  | +		mail = uuid.NewV4().String() + "@localhost"
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	u = &User{
 | 
	
		
			
				|  |  | -		LowerName:   strings.ToLower(name),
 | 
	
		
			
				|  |  | -		Name:        strings.ToLower(name),
 | 
	
		
			
				|  |  | +		Name:        name,
 | 
	
		
			
				|  |  |  		LoginType:   LDAP,
 | 
	
		
			
				|  |  |  		LoginSource: sourceId,
 | 
	
		
			
				|  |  |  		LoginName:   name,
 | 
	
		
			
				|  |  | -		IsActive:    true,
 | 
	
		
			
				|  |  |  		Passwd:      passwd,
 | 
	
		
			
				|  |  |  		Email:       mail,
 | 
	
		
			
				|  |  | +		IsActive:    true,
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	err := CreateUser(u)
 | 
	
		
			
				|  |  | -	return u, err
 | 
	
		
			
				|  |  | +	return u, CreateUser(u)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type loginAuth struct {
 |