diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2026-03-14 11:23:50 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2026-03-14 11:23:50 -0400 |
| commit | 700096b078f6e16f2c5c967ea140f0b93e799986 (patch) | |
| tree | e1d9965e9bf09ebe01a96d8faa6d2bc027e6984c /back/cmd/authfs/main.go | |
| parent | 7d622695ae19e518fded6aa5fbf001dae4652211 (diff) | |
| download | buth-harveyos.zip | |
authfs: rewrite with Harvey-OS/ninep, implement Rattachharveyos
Diffstat (limited to 'back/cmd/authfs/main.go')
| -rw-r--r-- | back/cmd/authfs/main.go | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/back/cmd/authfs/main.go b/back/cmd/authfs/main.go index f8618df..b705858 100644 --- a/back/cmd/authfs/main.go +++ b/back/cmd/authfs/main.go @@ -1,6 +1,6 @@ /* This is the authfs daemon. It stores the user database and client -sessions, and it serves a 9P filesystem for managing them. +sessions, and serves a 9P filesystem for managing them. User data (usernames and password hashes) are stored on disk. Sessions are stored in memory. @@ -8,59 +8,64 @@ are stored in memory. package main import ( - "context" "flag" + "io" "log" "net" "os" - "github.com/docker-archive/go-p9p" -) - -const ( - defaultNetwork = "unix" - defaultAddress = "authfs.sock" + "github.com/Harvey-OS/ninep/pkg/debugfs" + p9 "github.com/Harvey-OS/ninep/protocol" ) var ( - network, address string + root = flag.String("root", ".", "root directory") + ntype = flag.String("net", "unix", "network type: {tcp, unix}") + naddr = flag.String("addr", "authfs.sock", "network address") + debug = flag.Bool("debug", false, "print debug messages") outlog = log.New(os.Stdout, "authfs [info]: ", log.LstdFlags) - errlog = log.New(os.Stderr, "authfs [error]: ", log.LstdFlags|log.Llongfile) + errlog = log.New(os.Stderr, "authfs [error]: ", log.LstdFlags|log.Lshortfile) ) func main() { - flag.StringVar(&network, "net", defaultNetwork, "network transport protocol: {tcp, unix}") - flag.StringVar(&address, "addr", defaultAddress, "IP address or Unix socket path to listen on") flag.Parse() - ln, err := net.Listen(network, address) + sock, err := net.Listen(*ntype, *naddr) if err != nil { errlog.Fatal(err) } - defer logErr(ln.Close()) + defer logClose(sock, errlog) - for { - if conn, err := ln.Accept(); err == nil { - outlog.Println("connected", conn.RemoteAddr()) - go handle(conn) + fs, err := NewAuthfs(*root) + if err != nil { + errlog.Fatal(err) + } + defer fs.Close() + + nsCreator := func() p9.NineServer { + if *debug { + return &debugfs.DebugFileServer{fs} } else { - errlog.Println(err) + return fs } } -} - -func handle(conn net.Conn) { - defer logErr(conn.Close()) - ctx := context.Background() - handler := p9p.Dispatch(NewSession()) - if err := p9p.ServeConn(ctx, conn, handler); err != nil { - errlog.Printf("%v: %v\n", conn.RemoteAddr(), err) + ln, err := p9.NewListener(nsCreator, func(l *p9.Listener) error { + l.Trace = func(format string, a ...any) { + outlog.Printf(format, a...) + } + return nil + }) + if err != nil { + errlog.Fatal(err) + } + if err := ln.Serve(sock); err != nil { + errlog.Fatal(err) } } -func logErr(err error) { - if err != nil { - errlog.Println(err) +func logClose(c io.Closer, l *log.Logger) { + if err := c.Close(); err != nil { + l.Println(err) } } |