func main() { flag.Parse() if h, err := jetpack.NewHost(); err != nil { Die(err) } else { Host = h } if args := flag.Args(); len(args) == 0 { Help() } else if cmd, ok := Commands[args[0]]; ok { Die(cmd.Run(args[1:])) } else { Help() os.Exit(1) } }
func main() { flag.Parse() Info.Pid = os.Getpid() Info.Uid = -1 Info.Gid = -1 Info.Version = jetpack.Version() if host, err := jetpack.NewHost(); err != nil { log.Fatalln("Error initializing host:", err) } else { Host = host } if hostip, _, err := Host.HostIP(); err != nil { panic(err) } else { Info.IP = hostip.String() } Info.Port = jetpack.Config().MustGetInt("mds.port") if s, err := hex.DecodeString(jetpack.Config().MustGet("mds.signing-key")); err != nil { panic(err) } else { SigningKey = s } switch lfPath, _ := jetpack.Config().Get("mds.logfile"); lfPath { case "-", "": log.SetOutput(os.Stderr) case "none", "/dev/null": log.SetOutput(ioutil.Discard) default: if lf, err := os.OpenFile(lfPath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0640); err != nil { log.Fatalf("Cannot open log file %#v: %v", lfPath, err) } else { log.SetOutput(lf) defer lf.Close() } } if pfPath, ok := jetpack.Config().Get("mds.pidfile"); ok { if err := ioutil.WriteFile(pfPath, []byte(fmt.Sprintln(os.Getpid())), 0644); err != nil { log.Fatalf("Cannot write pidfile %#v: %v", pfPath, err) } } addr := fmt.Sprintf("%v:%d", Info.IP, Info.Port) listener, err := net.Listen("tcp", addr) if err != nil { log.Fatalf("Cannot listen on %v: %v", addr, err) } if !jetpack.Config().GetBool("mds.keep-uid", false) { uid, gid := jetpack.MDSUidGid() if err := unix.Setgroups(nil); err != nil { log.Fatal("Cannot clear groups:", err) } if err := unix.Setresgid(gid, gid, gid); err != nil { log.Fatal("Cannot drop gid:", err) } if err := unix.Setresuid(uid, uid, uid); err != nil { log.Fatal("Cannot drop uid:", err) } } Info.Uid = os.Getuid() Info.Gid = os.Getgid() log.Println("Listening on:", addr) log.Fatal(http.Serve(listener, http.HandlerFunc(ServeMetadata))) }