commit 13f386e125c8acc6b8751ff0dd33903e3b7a2b49
parent d90eb452034a44596173aec28deca11a49199ebb
Author: Matsuda Kenji <info@mtkn.jp>
Date: Tue, 12 Sep 2023 07:26:57 +0900
implement chgrp
Diffstat:
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