aboutsummaryrefslogtreecommitdiffhomepage
path: root/acl/export.go
diff options
context:
space:
mode:
authorOphestra Umiker <cat@ophivana.moe>2024-12-16 18:27:19 +0900
committerOphestra Umiker <cat@ophivana.moe>2024-12-16 18:27:19 +0900
commitc8a90666c5a683df2259d15683086a3a8dfdde14 (patch)
tree7c922413dd18baf3230243c8798d342d7e42b930 /acl/export.go
parentee41b37606fbf9085e239922a1362f1c8c13d542 (diff)
acl: refactor and clean up
Move all C code to c.go, switch to pkg-config, set up finalizer for acl. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'acl/export.go')
-rw-r--r--acl/export.go107
1 files changed, 0 insertions, 107 deletions
diff --git a/acl/export.go b/acl/export.go
deleted file mode 100644
index 322ea1d6..00000000
--- a/acl/export.go
+++ /dev/null
@@ -1,107 +0,0 @@
-// Package acl implements simple ACL manipulation via libacl.
-package acl
-
-import "unsafe"
-
-//#include <stdlib.h>
-//#include <sys/acl.h>
-//#include <acl/libacl.h>
-//#cgo linux LDFLAGS: -lacl
-import "C"
-
-const (
- Read = C.ACL_READ
- Write = C.ACL_WRITE
- Execute = C.ACL_EXECUTE
-
- TypeDefault = C.ACL_TYPE_DEFAULT
- TypeAccess = C.ACL_TYPE_ACCESS
-
- UndefinedTag = C.ACL_UNDEFINED_TAG
- UserObj = C.ACL_USER_OBJ
- User = C.ACL_USER
- GroupObj = C.ACL_GROUP_OBJ
- Group = C.ACL_GROUP
- Mask = C.ACL_MASK
- Other = C.ACL_OTHER
-)
-
-type (
- Perm C.acl_perm_t
- Perms []Perm
-)
-
-func (ps Perms) String() string {
- var s = []byte("---")
- for _, p := range ps {
- switch p {
- case Read:
- s[0] = 'r'
- case Write:
- s[1] = 'w'
- case Execute:
- s[2] = 'x'
- }
- }
- return string(s)
-}
-
-func UpdatePerm(path string, uid int, perms ...Perm) error {
- // read acl from file
- a, err := aclGetFile(path, TypeAccess)
- if err != nil {
- return err
- }
- // free acl on return if get is successful
- defer a.free()
-
- // remove existing entry
- if err = a.removeEntry(User, uid); err != nil {
- return err
- }
-
- // create new entry if perms are passed
- if len(perms) > 0 {
- // create new acl entry
- var e C.acl_entry_t
- if _, err = C.acl_create_entry(&a.val, &e); err != nil {
- return err
- }
-
- // get perm set of new entry
- var p C.acl_permset_t
- if _, err = C.acl_get_permset(e, &p); err != nil {
- return err
- }
-
- // add target perms
- for _, perm := range perms {
- if _, err = C.acl_add_perm(p, C.acl_perm_t(perm)); err != nil {
- return err
- }
- }
-
- // set perm set to new entry
- if _, err = C.acl_set_permset(e, p); err != nil {
- return err
- }
-
- // set user tag to new entry
- if _, err = C.acl_set_tag_type(e, User); err != nil {
- return err
- }
-
- // set qualifier (uid) to new entry
- if _, err = C.acl_set_qualifier(e, unsafe.Pointer(&uid)); err != nil {
- return err
- }
- }
-
- // calculate mask after update
- if _, err = C.acl_calc_mask(&a.val); err != nil {
- return err
- }
-
- // write acl to file
- return a.setFile(path, TypeAccess)
-}