2023-02-23 18:49:15 +01:00
|
|
|
// +build aix darwin dragonfly freebsd illumos linux netbsd openbsd solaris
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"syscall"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
var conf_file string
|
|
|
|
var chroot string
|
|
|
|
var user string
|
|
|
|
var version bool
|
|
|
|
|
|
|
|
// Parse args
|
|
|
|
flag.StringVar(&conf_file, "c", "/etc/molly.conf", "Path to config file")
|
|
|
|
flag.StringVar(&chroot, "C", "", "Path to chroot into")
|
|
|
|
flag.StringVar(&user, "u", "nobody", "Unprivileged user")
|
|
|
|
flag.BoolVar(&version, "v", false, "Print version and exit")
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
// If requested, print version and exit
|
|
|
|
if version {
|
|
|
|
fmt.Println("Molly Brown version", VERSION)
|
|
|
|
os.Exit(0)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read config
|
2023-02-25 11:29:13 +01:00
|
|
|
sysConfig, userConfig, err := getConfig(conf_file)
|
2023-02-23 18:49:15 +01:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read user info
|
|
|
|
privInfo, err := getUserInfo(user)
|
|
|
|
|
|
|
|
// Chroot, if asked
|
|
|
|
if chroot != "" {
|
|
|
|
err := syscall.Chroot(chroot)
|
|
|
|
if err == nil {
|
|
|
|
err = os.Chdir("/")
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
log.Println("Could not chroot to " + chroot + ": " + err.Error())
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Run server and exit
|
2023-02-25 11:29:13 +01:00
|
|
|
os.Exit(launch(sysConfig, userConfig, privInfo))
|
2023-02-23 18:49:15 +01:00
|
|
|
}
|