diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-11-17 23:31:06 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-11-17 23:31:06 +0900 |
| commit | 2e23cef7bb952e4964cd4994867e2d51e978e95c (patch) | |
| tree | 9f33539929e6feacac1b1e3c1643bccd623c5aca /cmd/fuserdb/payload.go | |
| parent | 6a6d30af1f15b0aa1b79174ecb08b59bd77dabb0 (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.go | 64 |
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) + } +} |
