summaryrefslogtreecommitdiffstats
path: root/back/cmd/authfs/session.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2026-03-14 11:23:50 -0400
committerSam Anthony <sam@samanthony.xyz>2026-03-14 11:23:50 -0400
commit700096b078f6e16f2c5c967ea140f0b93e799986 (patch)
treee1d9965e9bf09ebe01a96d8faa6d2bc027e6984c /back/cmd/authfs/session.go
parent7d622695ae19e518fded6aa5fbf001dae4652211 (diff)
downloadbuth-harveyos.zip
authfs: rewrite with Harvey-OS/ninep, implement Rattachharveyos
Diffstat (limited to 'back/cmd/authfs/session.go')
-rw-r--r--back/cmd/authfs/session.go187
1 files changed, 0 insertions, 187 deletions
diff --git a/back/cmd/authfs/session.go b/back/cmd/authfs/session.go
deleted file mode 100644
index 2d4eb98..0000000
--- a/back/cmd/authfs/session.go
+++ /dev/null
@@ -1,187 +0,0 @@
-package main
-
-import (
- "context"
- "sync"
-
- "github.com/docker-archive/go-p9p"
-)
-
-// Session implements the p9p.Session interface.
-type Session struct {
- mu sync.Mutex
- fids map[p9p.Fid]Fid
- *Root
-}
-
-type Fid struct {
- File
- uname string
-}
-
-type File interface {
- Qid() p9p.Qid
- Stat() (p9p.Dir, error)
- Open(mode p9p.Flag) error
- Remove() error
- Read(ctx context.Context, p []byte, offset int64) (n int, err error)
- Write(ctx context.Context, p []byte, offset int64) (n int, err error)
-}
-
-type Dir interface {
- File
- Create(ctx context.Context, name string, perm uint32, mode p9p.Flag) (File, error)
- Walk(ctx context.Context, name string) (File, error)
-}
-
-func NewSession(root *Root) p9p.Session {
- return &Session{
- fids: make(map[p9p.Fid]Fid),
- Root: root,
- }
-}
-
-func (s *Session) Auth(ctx context.Context, afid p9p.Fid, uname, aname string) (p9p.Qid, error) {
- return p9p.Qid{}, p9p.MessageRerror{"authfs: no authentication required"}
-}
-
-func (s *Session) Attach(ctx context.Context, fid, afid p9p.Fid, uname, aname string) (p9p.Qid, error) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- if _, exists := s.fids[fid]; exists {
- return p9p.Qid{}, p9p.ErrDupfid
- }
- f := Fid{s.root, uname}
- s.fids[fid] = f
- return f.Qid(), nil
-}
-
-func (s *Session) Clunk(ctx context.Context, fid p9p.Fid) error {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- if _, ok := s.fids[fid]; ok {
- delete(s.fids, fid)
- return nil
- } else {
- return p9p.ErrUnknownfid
- }
-}
-
-func (s *Session) Remove(ctx context.Context, fid p9p.Fid) error {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- f, ok := s.fids[fid]
- if !ok {
- return p9p.ErrUnknownfid
- }
- delete(s.fids, fid) // clunk
- return f.Remove()
-}
-
-func (s *Session) Walk(ctx context.Context, fid, newfid p9p.Fid, names ...string) ([]p9p.Qid, error) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- f, ok := s.fids[fid]
- if !ok {
- return nil, p9p.ErrUnknownfid
- }
-
- if _, exists := s.fids[newfid]; exists {
- return nil, p9p.ErrDupfid
- }
-
- var (
- qids []p9p.Qid
- err error
- dot = f
- )
- defer func() { s.fids[newfid] = dot }()
- for _, name := range names {
- dir, ok := dot.File.(Dir)
- if !ok {
- return qids, p9p.ErrWalknodir
- }
- dot.File, err = dir.Walk(ctx, name)
- if err != nil {
- return qids, err
- }
- qids = append(qids, dot.File.Qid())
- }
- return qids, nil
-}
-
-func (s *Session) Read(ctx context.Context, fid p9p.Fid, p []byte, offset int64) (n int, err error) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- if f, ok := s.fids[fid]; ok {
- return f.File.Read(ctx, p, offset)
- } else {
- return 0, p9p.ErrUnknownfid
- }
-}
-
-func (s *Session) Write(ctx context.Context, fid p9p.Fid, p []byte, offset int64) (n int, err error) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- if f, ok := s.fids[fid]; ok {
- return f.File.Write(ctx, p, offset)
- } else {
- return 0, p9p.ErrUnknownfid
- }
-}
-
-func (s *Session) Open(ctx context.Context, fid p9p.Fid, mode p9p.Flag) (p9p.Qid, uint32, error) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- f, ok := s.fids[fid]
- if !ok {
- return p9p.Qid{}, 0, p9p.ErrUnknownfid
- }
- if err := f.Open(mode); err != nil {
- return p9p.Qid{}, 0, err
- }
- return f.File.Qid(), 0, nil
-}
-
-func (s *Session) Create(ctx context.Context, parent p9p.Fid, name string, perm uint32, mode p9p.Flag) (p9p.Qid, uint32, error) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- f, ok := s.fids[parent]
- if !ok {
- return p9p.Qid{}, 0, p9p.ErrUnknownfid
- }
- dir, ok := f.File.(Dir)
- if !ok {
- return p9p.Qid{}, 0, p9p.ErrCreatenondir
- }
-
- child, err := dir.Create(ctx, name, perm, mode)
- return child.Qid(), 0, err
-}
-
-func (s *Session) Stat(ctx context.Context, fid p9p.Fid) (p9p.Dir, error) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- if f, ok := s.fids[fid]; ok {
- return f.File.Stat()
- } else {
- return p9p.Dir{}, p9p.ErrUnknownfid
- }
-}
-
-func (s *Session) WStat(ctx context.Context, fid p9p.Fid, dir p9p.Dir) error {
- return p9p.ErrPerm
-}
-
-func (s *Session) Version() (msize int, version string) {
- return p9p.DefaultMSize, p9p.DefaultVersion
-}