Skip to content

Commit

Permalink
Use shellquote to unpack arguments to gitea serv (#12624)
Browse files Browse the repository at this point in the history
Fix #12471

Signed-off-by: Andrew Thornton <art27@cantab.net>
  • Loading branch information
zeripath authored Aug 28, 2020
1 parent 274f923 commit 7ba6fea
Showing 1 changed file with 18 additions and 15 deletions.
33 changes: 18 additions & 15 deletions cmd/serv.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"code.gitea.io/gitea/modules/setting"

"github.com/dgrijalva/jwt-go"
"github.com/kballard/go-shellquote"
"github.com/unknwon/com"
"github.com/urfave/cli"
)
Expand Down Expand Up @@ -59,14 +60,6 @@ func setup(logPath string, debug bool) {
}
}

func parseCmd(cmd string) (string, string) {
ss := strings.SplitN(cmd, " ", 2)
if len(ss) != 2 {
return "", ""
}
return ss[0], strings.Replace(ss[1], "'/", "'", 1)
}

var (
allowedCommands = map[string]models.AccessMode{
"git-upload-pack": models.AccessModeRead,
Expand Down Expand Up @@ -126,25 +119,35 @@ func runServ(c *cli.Context) error {
return nil
}

verb, args := parseCmd(cmd)
words, err := shellquote.Split(cmd)
if err != nil {
fail("Error parsing arguments", "Failed to parse arguments: %v", err)
}

if len(words) < 2 {
fail("Too few arguments", "Too few arguments in cmd: %s", cmd)
}

verb := words[0]
repoPath := words[1]
if repoPath[0] == '/' {
repoPath = repoPath[1:]
}

var lfsVerb string
if verb == lfsAuthenticateVerb {
if !setting.LFS.StartServer {
fail("Unknown git command", "LFS authentication request over SSH denied, LFS support is disabled")
}

argsSplit := strings.Split(args, " ")
if len(argsSplit) >= 2 {
args = strings.TrimSpace(argsSplit[0])
lfsVerb = strings.TrimSpace(argsSplit[1])
if len(words) > 2 {
lfsVerb = words[2]
}
}

repoPath := strings.ToLower(strings.Trim(args, "'"))
rr := strings.SplitN(repoPath, "/", 2)
if len(rr) != 2 {
fail("Invalid repository path", "Invalid repository path: %v", args)
fail("Invalid repository path", "Invalid repository path: %v", repoPath)
}

username := strings.ToLower(rr[0])
Expand Down

0 comments on commit 7ba6fea

Please sign in to comment.