summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2015-03-12 01:15:01 -0400
committerUnknwon <u@gogs.io>2015-03-12 01:15:01 -0400
commit4aafeace230a35e80fb443739c2642d23fc93e51 (patch)
tree3dc6b008a4469232521ecf834b43acf17ae439dc
parent34102f788945b1c73a845f7916d01d216baa56ad (diff)
downloadgitea-4aafeace230a35e80fb443739c2642d23fc93e51.tar.gz
gitea-4aafeace230a35e80fb443739c2642d23fc93e51.zip
fix HTTP/HTTPS push update func call panic #1037 and `http: multiple response.WriteHeader calls`
-rw-r--r--gogs.go2
-rw-r--r--models/login.go6
-rw-r--r--models/publickey.go7
-rw-r--r--routers/repo/http.go45
-rw-r--r--templates/.VERSION2
5 files changed, 32 insertions, 30 deletions
diff --git a/gogs.go b/gogs.go
index 2d34178d50..fd303fa28f 100644
--- a/gogs.go
+++ b/gogs.go
@@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.5.16.0311 Beta"
+const APP_VER = "0.5.16.0312 Beta"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
diff --git a/models/login.go b/models/login.go
index e00d59b0ed..5e5fbf43fa 100644
--- a/models/login.go
+++ b/models/login.go
@@ -215,11 +215,9 @@ func UserSignIn(uname, passwd string) (*User, error) {
switch u.LoginType {
case LDAP:
- return LoginUserLdapSource(u, u.LoginName, passwd,
- source.Id, source.Cfg.(*LDAPConfig), false)
+ return LoginUserLdapSource(u, u.LoginName, passwd, source.Id, source.Cfg.(*LDAPConfig), false)
case SMTP:
- return LoginUserSMTPSource(u, u.LoginName, passwd,
- source.Id, source.Cfg.(*SMTPConfig), false)
+ return LoginUserSMTPSource(u, u.LoginName, passwd, source.Id, source.Cfg.(*SMTPConfig), false)
}
return nil, ErrUnsupportedLoginType
}
diff --git a/models/publickey.go b/models/publickey.go
index 6bec1139b8..c8098748b2 100644
--- a/models/publickey.go
+++ b/models/publickey.go
@@ -254,15 +254,16 @@ func saveAuthorizedKeyFile(keys ...*PublicKey) error {
}
defer f.Close()
- finfo, err := f.Stat()
+ fi, err := f.Stat()
if err != nil {
return err
}
// FIXME: following command does not support in 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())
+ // .ssh directory should have mode 700, and authorized_keys file should have mode 600.
+ if fi.Mode().Perm() > 0600 {
+ log.Error(4, "authorized_keys file has unusual permission flags: %s - setting to -rw-------", fi.Mode().Perm().String())
if err = f.Chmod(0600); err != nil {
return err
}
diff --git a/routers/repo/http.go b/routers/repo/http.go
index 3cfc065999..f5dc00b8df 100644
--- a/routers/repo/http.go
+++ b/routers/repo/http.go
@@ -105,7 +105,7 @@ func Http(ctx *middleware.Context) {
return
}
- authUser, err := models.UserSignIn(authUsername, authPasswd)
+ authUser, err = models.UserSignIn(authUsername, authPasswd)
if err != nil {
if err != models.ErrUserNotExist {
ctx.Handle(500, "UserSignIn error: %v", err)
@@ -160,7 +160,7 @@ func Http(ctx *middleware.Context) {
}
}
- var f = func(rpc string, input []byte) {
+ callback := func(rpc string, input []byte) {
if rpc == "receive-pack" {
var lastLine int64 = 0
@@ -189,6 +189,7 @@ func Http(ctx *middleware.Context) {
newCommitId := fields[1]
refName := fields[2]
+ // FIXME: handle error.
models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id)
}
lastLine = lastLine + size
@@ -199,25 +200,23 @@ func Http(ctx *middleware.Context) {
}
}
- config := Config{setting.RepoRootPath, "git", true, true, f}
+ HTTPBackend(&Config{
+ RepoRootPath: setting.RepoRootPath,
+ GitBinPath: "git",
+ UploadPack: true,
+ ReceivePack: true,
+ OnSucceed: callback,
+ })(ctx.Resp, ctx.Req.Request)
- handler := HttpBackend(&config)
- handler(ctx.Resp, ctx.Req.Request)
runtime.GC()
}
-type route struct {
- cr *regexp.Regexp
- method string
- handler func(handler)
-}
-
type Config struct {
- ReposRoot string
- GitBinPath string
- UploadPack bool
- ReceivePack bool
- OnSucceed func(rpc string, input []byte)
+ RepoRootPath string
+ GitBinPath string
+ UploadPack bool
+ ReceivePack bool
+ OnSucceed func(rpc string, input []byte)
}
type handler struct {
@@ -228,6 +227,12 @@ type handler struct {
File string
}
+type route struct {
+ cr *regexp.Regexp
+ method string
+ handler func(handler)
+}
+
var routes = []route{
{regexp.MustCompile("(.*?)/git-upload-pack$"), "POST", serviceUploadPack},
{regexp.MustCompile("(.*?)/git-receive-pack$"), "POST", serviceReceivePack},
@@ -243,7 +248,7 @@ var routes = []route{
}
// Request handling function
-func HttpBackend(config *Config) http.HandlerFunc {
+func HTTPBackend(config *Config) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
for _, route := range routes {
r.URL.Path = strings.ToLower(r.URL.Path) // blue: In case some repo name has upper case name
@@ -285,8 +290,7 @@ func serviceReceivePack(hr handler) {
func serviceRpc(rpc string, hr handler) {
w, r, dir := hr.w, hr.r, hr.Dir
- access := hasAccess(r, hr.Config, dir, rpc, true)
- if access == false {
+ if !hasAccess(r, hr.Config, dir, rpc, true) {
renderNoAccess(w)
return
}
@@ -337,7 +341,6 @@ func serviceRpc(rpc string, hr handler) {
if hr.Config.OnSucceed != nil {
hr.Config.OnSucceed(rpc, input)
}
- w.WriteHeader(http.StatusOK)
}
func getInfoRefs(hr handler) {
@@ -408,7 +411,7 @@ func sendFile(contentType string, hr handler) {
}
func getGitDir(config *Config, fPath string) (string, error) {
- root := config.ReposRoot
+ root := config.RepoRootPath
if root == "" {
cwd, err := os.Getwd()
diff --git a/templates/.VERSION b/templates/.VERSION
index cd8bf82a6b..7bc05ce057 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.5.16.0311 Beta \ No newline at end of file
+0.5.16.0312 Beta \ No newline at end of file