forked from gitea/gitea
		
	
							parent
							
								
									62f21ff3ed
								
							
						
					
					
						commit
						ebb4f1b78c
					
				| @ -14,7 +14,6 @@ import ( | ||||
| 	"os/exec" | ||||
| 	"path" | ||||
| 	"path/filepath" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| @ -23,6 +22,7 @@ import ( | ||||
| 
 | ||||
| 	"github.com/gogits/gogs/modules/log" | ||||
| 	"github.com/gogits/gogs/modules/process" | ||||
| 	"github.com/gogits/gogs/modules/setting" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| @ -120,23 +120,30 @@ func CheckPublicKeyString(content string) (bool, error) { | ||||
| 	tmpFile.WriteString(content) | ||||
| 	tmpFile.Close() | ||||
| 
 | ||||
| 	// … see if ssh-keygen recognizes its contents | ||||
| 	// Check if ssh-keygen recognizes its contents. | ||||
| 	stdout, stderr, err := process.Exec("CheckPublicKeyString", "ssh-keygen", "-l", "-f", tmpPath) | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("ssh-keygen -l -f: " + stderr) | ||||
| 	} else if len(stdout) < 2 { | ||||
| 		return false, errors.New("ssh-keygen returned not enough output to evaluate the key") | ||||
| 	} | ||||
| 
 | ||||
| 	// The ssh-keygen in Windows does not print key type, so no need go further. | ||||
| 	if setting.IsWindows { | ||||
| 		return true, nil | ||||
| 	} | ||||
| 
 | ||||
| 	sshKeygenOutput := strings.Split(stdout, " ") | ||||
| 	if len(sshKeygenOutput) < 4 { | ||||
| 		return false, errors.New("Not enough fields returned by ssh-keygen -l -f") | ||||
| 	} | ||||
| 
 | ||||
| 	// Check if key type and key size match. | ||||
| 	keySize, err := com.StrTo(sshKeygenOutput[0]).Int() | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("Cannot get key size of the given key") | ||||
| 	} | ||||
| 	keyType := strings.TrimSpace(sshKeygenOutput[len(sshKeygenOutput)-1]) | ||||
| 
 | ||||
| 	if minimumKeySize := MinimumKeySize[keyType]; minimumKeySize == 0 { | ||||
| 		return false, errors.New("Sorry, unrecognized public key type") | ||||
| 	} else if keySize < minimumKeySize { | ||||
| @ -163,7 +170,7 @@ func saveAuthorizedKeyFile(key *PublicKey) error { | ||||
| 	} | ||||
| 
 | ||||
| 	// FIXME: following command does not support in Windows. | ||||
| 	if runtime.GOOS != "windows" { | ||||
| 	if !setting.IsWindows { | ||||
| 		if finfo.Mode().Perm() > 0600 { | ||||
| 			log.Error(4, "authorized_keys file has unusual permission flags: %s - setting to -rw-------", finfo.Mode().Perm().String()) | ||||
| 			if err = f.Chmod(0600); err != nil { | ||||
|  | ||||
| @ -10,6 +10,7 @@ import ( | ||||
| 	"os/exec" | ||||
| 	"path" | ||||
| 	"path/filepath" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
| @ -98,12 +99,14 @@ var ( | ||||
| 	CustomPath   string // Custom directory path. | ||||
| 	ProdMode     bool | ||||
| 	RunUser      string | ||||
| 	IsWindows    bool | ||||
| 
 | ||||
| 	// I18n settings. | ||||
| 	Langs, Names []string | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	IsWindows = runtime.GOOS == "windows" | ||||
| 	log.NewLogger(0, "console", `{"level": 0}`) | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Unknown
						Unknown