I don't want to use a closure in the lua funcition, so i did a global var to set the sandbox path. Added build.requirements() and build.compile() to lua

This commit is contained in:
2025-08-20 13:37:24 -03:00
parent 4cd007886c
commit 8f07394cc0
2 changed files with 21 additions and 9 deletions

View File

@@ -1345,6 +1345,7 @@ func Unninstall(realname string) error {
defer L.Close() defer L.Close()
if !Unsafe { if !Unsafe {
internal.SandboxDir = filepath.Join(cfg.Config.DataDir, realname)
osObject := L.GetGlobal("os").(*lua.LTable) osObject := L.GetGlobal("os").(*lua.LTable)
ioObject := L.GetGlobal("io").(*lua.LTable) ioObject := L.GetGlobal("io").(*lua.LTable)
@@ -1358,6 +1359,14 @@ func Unninstall(realname string) error {
L.SetGlobal("path_join", L.NewFunction(internal.Ljoin)) L.SetGlobal("path_join", L.NewFunction(internal.Ljoin))
// Packets build functions
build := L.NewTable()
L.SetField(build, "requirements", L.NewFunction(internal.CompileRequirements))
L.SetField(build, "compile", L.NewFunction(internal.LuaCompile))
L.SetGlobal("build", build)
osObject.RawSetString("execute", lua.LNil) osObject.RawSetString("execute", lua.LNil)
osObject.RawSetString("exit", lua.LNil) osObject.RawSetString("exit", lua.LNil)
osObject.RawSetString("getenv", lua.LNil) osObject.RawSetString("getenv", lua.LNil)
@@ -1377,6 +1386,7 @@ func Unninstall(realname string) error {
ioObject.RawSetString("stdin", lua.LNil) ioObject.RawSetString("stdin", lua.LNil)
ioObject.RawSetString("lines", lua.LNil) ioObject.RawSetString("lines", lua.LNil)
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen)) ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
} }
if err := L.DoFile(filepath.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove)); err != nil { if err := L.DoFile(filepath.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove)); err != nil {

View File

@@ -59,6 +59,8 @@ type Manifest struct {
} `toml:"Hooks"` } `toml:"Hooks"`
} }
var SandboxDir string
func PacketsPackageDir() string { func PacketsPackageDir() string {
out, _ := exec.Command("uname", "-s").Output() out, _ := exec.Command("uname", "-s").Output()
@@ -453,7 +455,7 @@ func LMkdir(L *lua.LState) int {
return 2 return 2
} }
func LuaCompile(L *lua.LState, sandbox string) int { func LuaCompile(L *lua.LState) int {
lang := L.CheckString(1) lang := L.CheckString(1)
args := []string{} args := []string{}
for i := 2; i <= L.GetTop(); i++ { for i := 2; i <= L.GetTop(); i++ {
@@ -466,7 +468,7 @@ func LuaCompile(L *lua.LState, sandbox string) int {
L.Push(lua.LString("[packets] invalid filepath\n" + err.Error())) L.Push(lua.LString("[packets] invalid filepath\n" + err.Error()))
return 2 return 2
} }
if !strings.HasPrefix(tryintoacess, sandbox) { if !strings.HasPrefix(tryintoacess, SandboxDir) {
L.Push(lua.LFalse) L.Push(lua.LFalse)
L.Push(lua.LString("[packets] unsafe filepath")) L.Push(lua.LString("[packets] unsafe filepath"))
return 2 return 2
@@ -484,7 +486,7 @@ func LuaCompile(L *lua.LState, sandbox string) int {
} }
cmd := exec.Command(bin, args...) cmd := exec.Command(bin, args...)
cmd.Dir = sandbox cmd.Dir = SandboxDir
out, err := cmd.CombinedOutput() out, err := cmd.CombinedOutput()
if err != nil { if err != nil {
L.Push(lua.LFalse) L.Push(lua.LFalse)
@@ -502,7 +504,7 @@ func LuaCompile(L *lua.LState, sandbox string) int {
return 2 return 2
} }
func CompileRequirements(L *lua.LState, sandbox string) int { func CompileRequirements(L *lua.LState) int {
cmdLang := L.CheckString(1) cmdLang := L.CheckString(1)
@@ -514,7 +516,7 @@ func CompileRequirements(L *lua.LState, sandbox string) int {
L.Push(lua.LString("[packets] invalid filepath\n" + err.Error())) L.Push(lua.LString("[packets] invalid filepath\n" + err.Error()))
return 2 return 2
} }
if !strings.HasPrefix(tryintoacess, sandbox) { if !strings.HasPrefix(tryintoacess, SandboxDir) {
L.Push(lua.LFalse) L.Push(lua.LFalse)
L.Push(lua.LString("[packets] unsafe filepath")) L.Push(lua.LString("[packets] unsafe filepath"))
return 2 return 2
@@ -525,15 +527,15 @@ func CompileRequirements(L *lua.LState, sandbox string) int {
switch cmdLang { switch cmdLang {
case "python": case "python":
cmd := exec.Command("pip", "install", "--target", filepath.Join(sandbox, "tmp/build"), "-r", L.CheckString(2)) cmd := exec.Command("pip", "install", "--target", filepath.Join(SandboxDir, "tmp/build"), "-r", L.CheckString(2))
cmd.Dir = filepath.Join(sandbox, "data") cmd.Dir = filepath.Join(SandboxDir, "data")
err = cmd.Run() err = cmd.Run()
case "java": case "java":
cmd := exec.Command("mvn", "dependency:copy-dependencies", "-DoutputDirectory="+filepath.Join(sandbox, "tmp/build")) cmd := exec.Command("mvn", "dependency:copy-dependencies", "-DoutputDirectory="+filepath.Join(SandboxDir, "tmp/build"))
cmd.Dir = L.CheckString(2) cmd.Dir = L.CheckString(2)
err = cmd.Run() err = cmd.Run()
case "ruby": case "ruby":
cmd := exec.Command("bundle", "install", "--path", filepath.Join(sandbox, "tmp/build")) cmd := exec.Command("bundle", "install", "--path", filepath.Join(SandboxDir, "tmp/build"))
cmd.Dir = L.CheckString(2) cmd.Dir = L.CheckString(2)
err = cmd.Run() err = cmd.Run()
} }