From ebb4f1b78cdf7ce877eafc346be94b8e8ac3217b Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 16 Sep 2014 13:34:09 -0400 Subject: [PATCH] Work #475 and #458 --- models/publickey.go | 15 +++++++++++---- modules/setting/setting.go | 3 +++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/models/publickey.go b/models/publickey.go index dccb89362b..1824e88701 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -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 { diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 199b4f2c27..d2c4d49cb0 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -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}`) }