1
0
out-of-tree/main.go

87 lines
2.3 KiB
Go
Raw Normal View History

// Copyright 2018 Mikhail Klementev. All rights reserved.
2018-10-08 20:51:32 +00:00
// Use of this source code is governed by a AGPLv3 license
// (or later) that can be found in the LICENSE file.
package main
import (
"fmt"
"log"
"os"
"os/user"
kingpin "gopkg.in/alecthomas/kingpin.v2"
)
2018-11-17 13:20:29 +00:00
func kernelListHandler(kcfg kernelConfig) (err error) {
for _, kernel := range kcfg.Kernels {
fmt.Println(kernel.DistroType, kernel.DistroRelease,
kernel.KernelRelease)
}
return
}
func main() {
2018-10-27 08:14:10 +00:00
app := kingpin.New(
"out-of-tree",
"kernel {module, exploit} development tool",
)
app.Author("Mikhail Klementev <jollheef@riseup.net>")
app.Version("0.1.0")
pathFlag := app.Flag("path", "Path to work directory")
2018-10-27 07:48:06 +00:00
path := pathFlag.Default(".").ExistingDir()
usr, err := user.Current()
if err != nil {
return
}
defaultKcfgPath := usr.HomeDir + "/.out-of-tree/kernels.toml"
kcfgPathFlag := app.Flag("kernels", "Path to kernels config")
kcfgPathEnv := kcfgPathFlag.Envar("OUT_OF_TREE_KCFG")
kcfgPath := kcfgPathEnv.Default(defaultKcfgPath).ExistingFile()
2018-10-27 07:48:06 +00:00
qemuTimeoutFlag := app.Flag("qemu-timeout", "Timeout for qemu")
qemuTimeout := qemuTimeoutFlag.Default("1m").Duration()
dockerTimeoutFlag := app.Flag("docker-timeout", "Timeout for docker")
dockerTimeout := dockerTimeoutFlag.Default("1m").Duration()
2018-10-27 08:14:10 +00:00
pewCommand := app.Command("pew", "Build, run and test module/exploit")
2018-10-27 15:09:28 +00:00
pewKernelFlag := pewCommand.Flag("kernel", "Override kernel regex")
pewKernel := pewKernelFlag.String()
2018-10-27 15:33:54 +00:00
pewGuessFlag := pewCommand.Flag("guess", "Try all defined kernels")
pewGuess := pewGuessFlag.Bool()
pewBinaryFlag := pewCommand.Flag("binary", "Use binary, do not build")
pewBinary := pewBinaryFlag.String()
pewTestFlag := pewCommand.Flag("test", "Override path test")
pewTest := pewTestFlag.String()
2018-11-17 13:20:29 +00:00
kernelCommand := app.Command("kernel", "Manipulate kernels")
kernelListCommand := kernelCommand.Command("list", "List kernels")
kingpin.MustParse(app.Parse(os.Args[1:]))
kcfg, err := readKernelConfig(*kcfgPath)
if err != nil {
log.Fatalln(err)
}
2018-10-27 08:14:10 +00:00
switch kingpin.MustParse(app.Parse(os.Args[1:])) {
case pewCommand.FullCommand():
err = pewHandler(kcfg, *path, *pewKernel, *pewBinary,
*pewTest, *pewGuess, *qemuTimeout, *dockerTimeout)
2018-11-17 13:20:29 +00:00
case kernelListCommand.FullCommand():
err = kernelListHandler(kcfg)
}
if err != nil {
log.Fatalln(err)
}
}