mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	@@ -24,6 +24,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/pprof"
 | 
			
		||||
	"code.gitea.io/gitea/modules/private"
 | 
			
		||||
	"code.gitea.io/gitea/modules/process"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/services/lfs"
 | 
			
		||||
 | 
			
		||||
@@ -247,7 +248,7 @@ func runServ(c *cli.Context) error {
 | 
			
		||||
	os.Setenv(models.EnvKeyID, fmt.Sprintf("%d", results.KeyID))
 | 
			
		||||
	os.Setenv(models.EnvAppURL, setting.AppURL)
 | 
			
		||||
 | 
			
		||||
	//LFS token authentication
 | 
			
		||||
	// LFS token authentication
 | 
			
		||||
	if verb == lfsAuthenticateVerb {
 | 
			
		||||
		url := fmt.Sprintf("%s%s/%s.git/info/lfs", setting.AppURL, url.PathEscape(results.OwnerName), url.PathEscape(results.RepoName))
 | 
			
		||||
 | 
			
		||||
@@ -306,6 +307,7 @@ func runServ(c *cli.Context) error {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	process.SetSysProcAttribute(gitcmd)
 | 
			
		||||
	gitcmd.Dir = setting.RepoRootPath
 | 
			
		||||
	gitcmd.Stdout = os.Stdout
 | 
			
		||||
	gitcmd.Stdin = os.Stdin
 | 
			
		||||
 
 | 
			
		||||
@@ -130,6 +130,7 @@ func createBlameReader(ctx context.Context, dir string, command ...string) (*Bla
 | 
			
		||||
	cmd := exec.CommandContext(ctx, command[0], command[1:]...)
 | 
			
		||||
	cmd.Dir = dir
 | 
			
		||||
	cmd.Stderr = os.Stderr
 | 
			
		||||
	process.SetSysProcAttribute(cmd)
 | 
			
		||||
 | 
			
		||||
	stdout, err := cmd.StdoutPipe()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -188,6 +188,7 @@ func (c *Command) RunWithContext(rc *RunContext) error {
 | 
			
		||||
	if goVersionLessThan115 {
 | 
			
		||||
		cmd.Env = append(cmd.Env, "GODEBUG=asyncpreemptoff=1")
 | 
			
		||||
	}
 | 
			
		||||
	process.SetSysProcAttribute(cmd)
 | 
			
		||||
	cmd.Dir = rc.Dir
 | 
			
		||||
	cmd.Stdout = rc.Stdout
 | 
			
		||||
	cmd.Stderr = rc.Stderr
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								modules/markup/external/external.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								modules/markup/external/external.go
									
									
									
									
										vendored
									
									
								
							@@ -119,6 +119,8 @@ func (p *Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.
 | 
			
		||||
		cmd.Stdin = input
 | 
			
		||||
	}
 | 
			
		||||
	cmd.Stdout = output
 | 
			
		||||
	process.SetSysProcAttribute(cmd)
 | 
			
		||||
 | 
			
		||||
	if err := cmd.Run(); err != nil {
 | 
			
		||||
		return fmt.Errorf("%s render run command %s %v failed: %v", p.Name(), commands[0], args, err)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -254,13 +254,13 @@ func (pm *Manager) ExecDirEnvStdIn(timeout time.Duration, dir, desc string, env
 | 
			
		||||
	if stdIn != nil {
 | 
			
		||||
		cmd.Stdin = stdIn
 | 
			
		||||
	}
 | 
			
		||||
	SetSysProcAttribute(cmd)
 | 
			
		||||
 | 
			
		||||
	if err := cmd.Start(); err != nil {
 | 
			
		||||
		return "", "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := cmd.Wait()
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		err = &Error{
 | 
			
		||||
			PID:         GetPID(ctx),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								modules/process/manager_unix.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								modules/process/manager_unix.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a MIT-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build !windows
 | 
			
		||||
// +build !windows
 | 
			
		||||
 | 
			
		||||
package process
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"syscall"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// SetSysProcAttribute sets the common SysProcAttrs for commands
 | 
			
		||||
func SetSysProcAttribute(cmd *exec.Cmd) {
 | 
			
		||||
	// When Gitea runs SubProcessA -> SubProcessB and SubProcessA gets killed by context timeout, use setpgid to make sure the sub processes can be reaped instead of leaving defunct(zombie) processes.
 | 
			
		||||
	cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								modules/process/manager_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								modules/process/manager_windows.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a MIT-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build windows
 | 
			
		||||
// +build windows
 | 
			
		||||
 | 
			
		||||
package process
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// SetSysProcAttribute sets the common SysProcAttrs for commands
 | 
			
		||||
func SetSysProcAttribute(cmd *exec.Cmd) {
 | 
			
		||||
	// Do nothing
 | 
			
		||||
}
 | 
			
		||||
@@ -24,6 +24,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	asymkey_model "code.gitea.io/gitea/models/asymkey"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/process"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
 | 
			
		||||
@@ -100,6 +101,8 @@ func sessionHandler(session ssh.Session) {
 | 
			
		||||
	}
 | 
			
		||||
	defer stdin.Close()
 | 
			
		||||
 | 
			
		||||
	process.SetSysProcAttribute(cmd)
 | 
			
		||||
 | 
			
		||||
	wg := &sync.WaitGroup{}
 | 
			
		||||
	wg.Add(2)
 | 
			
		||||
 | 
			
		||||
@@ -330,7 +333,7 @@ func GenKeyPair(keyPath string) error {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	privateKeyPEM := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)}
 | 
			
		||||
	f, err := os.OpenFile(keyPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
 | 
			
		||||
	f, err := os.OpenFile(keyPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
@@ -351,7 +354,7 @@ func GenKeyPair(keyPath string) error {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public := gossh.MarshalAuthorizedKey(pub)
 | 
			
		||||
	p, err := os.OpenFile(keyPath+".pub", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
 | 
			
		||||
	p, err := os.OpenFile(keyPath+".pub", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -284,6 +284,7 @@ func (s *sendmailSender) Send(from string, to []string, msg io.WriterTo) error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	process.SetSysProcAttribute(cmd)
 | 
			
		||||
 | 
			
		||||
	if err = cmd.Start(); err != nil {
 | 
			
		||||
		_ = pipe.Close()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user