lib9p

Go 9P library.
Log | Files | Refs

commit 13f386e125c8acc6b8751ff0dd33903e3b7a2b49
parent d90eb452034a44596173aec28deca11a49199ebb
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Tue, 12 Sep 2023 07:26:57 +0900

implement chgrp

Diffstat:
Mdiskfs/stat.go | 22++++++++++++++++++++++
Mtestdir/a | 2--
Mtestdir/c | 1-
3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/diskfs/stat.go b/diskfs/stat.go @@ -47,6 +47,7 @@ func fiStat(pool *QidPool, id fileID, info fs.FileInfo) *lib9p.Stat { } } +// TODO: when error occur, file stat should be restored. func (f *File) WStat(s *lib9p.Stat) error { fi, err := f.Stat() if err != nil { @@ -76,7 +77,28 @@ func (f *File) WStat(s *lib9p.Stat) error { return fmt.Errorf("chtimes: %v", err) } } + if s.Gid != oldStat.Gid { + group, err := user.LookupGroup(s.Gid) + if err != nil { + return fmt.Errorf("lookupgroup: %v", err) + } + usr, err := user.Lookup(oldStat.Uid) + if err != nil { + return fmt.Errorf("lookup user: %v", err) + } + u, err := strconv.Atoi(usr.Uid) + if err != nil { + return fmt.Errorf("convert uid: %v", err) + } + g, err := strconv.Atoi(group.Gid) + if err != nil { + return fmt.Errorf("convert gid: %v", err) + } + + if err := f.file.Chown(u, g); err != nil { + return fmt.Errorf("chown: %v", err) + } return fmt.Errorf("chgroup unimplemented") } diff --git a/testdir/a b/testdir/a @@ -1,2 +0,0 @@ -a -unko diff --git a/testdir/c b/testdir/c @@ -1 +0,0 @@ -c