aboutsummaryrefslogtreecommitdiffhomepage
path: root/acl/acl.go
blob: 30abc160f386c9b1a44f383e271ee9970fd4ef36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Package acl implements simple ACL manipulation via libacl.
package acl

/*
#cgo linux pkg-config: --static libacl

#include "acl-update.h"
*/
import "C"

type Perm C.acl_perm_t

const (
	Read    Perm = C.ACL_READ
	Write   Perm = C.ACL_WRITE
	Execute Perm = C.ACL_EXECUTE
)

// Update replaces ACL_USER entry with qualifier uid.
func Update(name string, uid int, perms ...Perm) error {
	var p *Perm
	if len(perms) > 0 {
		p = &perms[0]
	}

	r, err := C.hakurei_acl_update_file_by_uid(
		C.CString(name),
		C.uid_t(uid),
		(*C.acl_perm_t)(p),
		C.size_t(len(perms)),
	)
	if r == 0 {
		return nil
	}
	return err
}