4a5d4889a081abcda1cef6bea8a5d67ebddf0b3e

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

feat: use flag and add comment

Diff

 1diff --git a/examples/non-root/main.go b/examples/setuid/main.go
 2rename from examples/non-root/main.go
 3rename to examples/setuid/main.go
 4index 352212734962d1fcd0b2fdeba3fcd87d25c6ca2d..4c05e5fb2e84d37eef637fd03625a78fb4c0ae50 100644
 5--- a/examples/non-root/main.go
 6+++ b/examples/setuid/main.go
 7@@ -1,10 +1,15 @@
 8 //go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
 9 // +build darwin dragonfly freebsd linux netbsd openbsd solaris
10 
11+// This is an example of binding soft-serve ssh port to a restricted port (<1024) and
12+// then droping root privileges to a different user to run the server.
13+// Make sure you run this as root.
14+
15 package main
16 
17 import (
18 	"context"
19+	"flag"
20 	"fmt"
21 	"log"
22 	"net"
23@@ -17,31 +22,29 @@ import (
24 	"github.com/charmbracelet/soft-serve/server"
25 )
26 
27-const (
28-	port = 22
29-	gid  = 1000
30-	uid  = 1000
31-)
32-
33 var (
34-	addr = fmt.Sprintf(":%d", port)
35+	port = flag.Int("port", 22, "port to listen on")
36+	gid  = flag.Int("gid", 1000, "group id to run as")
37+	uid  = flag.Int("uid", 1000, "user id to run as")
38 )
39 
40 func main() {
41+	flag.Parse()
42+	addr := fmt.Sprintf(":%d", *port)
43 	// To listen on port 22 we need root privileges
44 	ls, err := net.Listen("tcp", addr)
45 	if err != nil {
46 		log.Fatalf("Can't listen: %s", err)
47 	}
48 	// We don't need root privileges any more
49-	if err := syscall.Setgid(gid); err != nil {
50+	if err := syscall.Setgid(*gid); err != nil {
51 		log.Fatalf("Setgid error: %s", err)
52 	}
53-	if err := syscall.Setuid(uid); err != nil {
54+	if err := syscall.Setuid(*uid); err != nil {
55 		log.Fatalf("Setuid error: %s", err)
56 	}
57 	cfg := config.DefaultConfig()
58-	cfg.Port = port
59+	cfg.Port = *port
60 	s := server.NewServer(cfg)
61 
62 	done := make(chan os.Signal, 1)