Smail/backend/hooks/bundle_file_linux.go
smail f732a255ce
Some checks are pending
Security Checks / security (push) Waiting to run
拆分内置插件文件的跨平台安全创建
2026-09-22 02:38:11 +08:00

48 lines
862 B
Go

//go:build linux
package hooks
import (
"bytes"
"errors"
"io"
"os"
"golang.org/x/sys/unix"
)
func writeBundledPlugin(path string, data []byte) error {
fd, err := unix.Open(path, unix.O_WRONLY|unix.O_CREAT|unix.O_EXCL|unix.O_CLOEXEC|unix.O_NOFOLLOW, 0600)
if err != nil {
return err
}
file := os.NewFile(uintptr(fd), path)
if file == nil {
_ = unix.Close(fd)
return errors.New("create bundled plugin returned an invalid file")
}
remove := true
defer func() {
if remove {
_ = unix.Unlink(path)
}
}()
if _, err := io.Copy(file, bytes.NewReader(data)); err != nil {
_ = file.Close()
return err
}
if err := file.Sync(); err != nil {
_ = file.Close()
return err
}
if err := file.Chmod(0700); err != nil {
_ = file.Close()
return err
}
if err := file.Close(); err != nil {
return err
}
remove = false
return nil
}