1
0

Refactor command line interface

This commit is contained in:
2023-01-31 07:13:33 +00:00
parent 935266c850
commit 2f52f6db6d
8 changed files with 406 additions and 523 deletions

52
pack.go
View File

@@ -5,7 +5,6 @@
package main
import (
"database/sql"
"fmt"
"io/ioutil"
"log"
@@ -15,33 +14,57 @@ import (
"code.dumpstack.io/tools/out-of-tree/config"
)
func packHandler(db *sql.DB, path, registry string, stop time.Time,
commands []config.DockerCommand, kcfg config.KernelConfig,
autogen, download bool, exploitRuns, kernelRuns int64) (err error) {
type PackCmd struct {
Autogen bool `help:"kernel autogeneration"`
NoDownload bool `help:"do not download qemu image while kernel generation"`
ExploitRuns int64 `default:"4" help:"amount of runs of each exploit"`
KernelRuns int64 `default:"1" help:"amount of runs of each kernel"`
Tag string `help:"filter tag"`
Timeout time.Duration `help:"timeout after tool will not spawn new tests"`
}
func (cmd *PackCmd) Run(g *Globals) (err error) {
kcfg, err := config.ReadKernelConfig(g.Config.Kernels)
if err != nil {
log.Println(err)
}
db, err := openDatabase(g.Config.Database)
if err != nil {
log.Fatalln(err)
}
defer db.Close()
stop := time.Time{} // never stop
if cmd.Timeout != 0 {
stop = time.Now().Add(cmd.Timeout)
}
dockerTimeout := time.Minute
qemuTimeout := time.Minute
threads := runtime.NumCPU()
tag := fmt.Sprintf("pack_run_%d", time.Now().Unix())
log.Println("Tag:", tag)
files, err := ioutil.ReadDir(path)
files, err := ioutil.ReadDir(g.WorkDir)
if err != nil {
return
}
for _, f := range files {
workPath := path + "/" + f.Name()
workPath := g.WorkDir + "/" + f.Name()
if !exists(workPath + "/.out-of-tree.toml") {
continue
}
if autogen {
if cmd.Autogen {
var perRegex int64 = 1
err = kernelAutogenHandler(workPath, registry,
commands, perRegex, false, download)
err = kernelAutogenHandler(workPath,
g.Config.Docker.Registry,
g.Config.Docker.Commands,
perRegex, false, !cmd.NoDownload)
if err != nil {
return
}
@@ -49,9 +72,10 @@ func packHandler(db *sql.DB, path, registry string, stop time.Time,
log.Println(f.Name())
pewHandler(kcfg, workPath, "", "", "", false,
stop, dockerTimeout, qemuTimeout,
kernelRuns, exploitRuns, pathDevNull,
pewHandler(kcfg, workPath, "", "", "", false, stop,
g.Config.Docker.Timeout.Duration,
g.Config.Qemu.Timeout.Duration,
cmd.KernelRuns, cmd.ExploitRuns, pathDevNull,
tag, threads, db, false)
}