aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd/fuserdb/payload.go
diff options
context:
space:
mode:
authorOphestra Umiker <cat@ophivana.moe>2024-11-17 23:31:06 +0900
committerOphestra Umiker <cat@ophivana.moe>2024-11-17 23:31:06 +0900
commit2e23cef7bb952e4964cd4994867e2d51e978e95c (patch)
tree9f33539929e6feacac1b1e3c1643bccd623c5aca /cmd/fuserdb/payload.go
parent6a6d30af1f15b0aa1b79174ecb08b59bd77dabb0 (diff)
cmd/fuserdb: generate group entries
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'cmd/fuserdb/payload.go')
-rw-r--r--cmd/fuserdb/payload.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/cmd/fuserdb/payload.go b/cmd/fuserdb/payload.go
new file mode 100644
index 00000000..fb241219
--- /dev/null
+++ b/cmd/fuserdb/payload.go
@@ -0,0 +1,64 @@
+package main
+
+import (
+ "encoding/json"
+ "os"
+ "path"
+
+ "git.ophivana.moe/security/fortify/internal/fmsg"
+)
+
+type payloadU struct {
+ UserName string `json:"userName"`
+ Uid int `json:"uid"`
+ Gid int `json:"gid"`
+ MemberOf []string `json:"memberOf,omitempty"`
+ RealName string `json:"realName"`
+ HomeDirectory string `json:"homeDirectory"`
+ Shell string `json:"shell"`
+}
+
+func writeUser(userName string, uid int, us string, realName, homeDirectory, shell string, out string) {
+ userFileName := userName + ".user"
+ if f, err := os.OpenFile(path.Join(out, userFileName), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil {
+ fmsg.Fatalf("cannot create %s: %v", userName, err)
+ } else if err = json.NewEncoder(f).Encode(&payloadU{
+ UserName: userName,
+ Uid: uid,
+ Gid: uid,
+ RealName: realName,
+ HomeDirectory: homeDirectory,
+ Shell: shell,
+ }); err != nil {
+ fmsg.Fatalf("cannot serialise %s: %v", userName, err)
+ } else if err = f.Close(); err != nil {
+ fmsg.Printf("cannot close %s: %v", userName, err)
+ }
+ if err := os.Symlink(userFileName, path.Join(out, us+".user")); err != nil {
+ fmsg.Fatalf("cannot link %s: %v", userName, err)
+ }
+}
+
+type payloadG struct {
+ GroupName string `json:"groupName"`
+ Gid int `json:"gid"`
+ Members []string `json:"members,omitempty"`
+}
+
+func writeGroup(groupName string, gid int, gs string, members []string, out string) {
+ groupFileName := groupName + ".group"
+ if f, err := os.OpenFile(path.Join(out, groupFileName), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil {
+ fmsg.Fatalf("cannot create %s: %v", groupName, err)
+ } else if err = json.NewEncoder(f).Encode(&payloadG{
+ GroupName: groupName,
+ Gid: gid,
+ Members: members,
+ }); err != nil {
+ fmsg.Fatalf("cannot serialise %s: %v", groupName, err)
+ } else if err = f.Close(); err != nil {
+ fmsg.Printf("cannot close %s: %v", groupName, err)
+ }
+ if err := os.Symlink(groupFileName, path.Join(out, gs+".group")); err != nil {
+ fmsg.Fatalf("cannot link %s: %v", groupName, err)
+ }
+}