From 40e4c9031652731622315e778a9bcace6cea6cb3 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 13 Oct 2026 21:11:23 +0900 Subject: internal/acl: use O_PATH descriptor This avoids TOCTOU during hakurei_update_acl. Signed-off-by: Ophestra --- internal/acl/acl.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'internal/acl/acl.go') diff --git a/internal/acl/acl.go b/internal/acl/acl.go index 7718ba3c..8b862ba2 100644 --- a/internal/acl/acl.go +++ b/internal/acl/acl.go @@ -7,7 +7,12 @@ package acl #include "libacl-helper.h" */ import "C" -import "os" + +import ( + "os" + + "hakurei.app/container" +) // Perm represents acl_perm_t. type Perm C.acl_perm_t @@ -83,11 +88,21 @@ func (e Error) Error() string { // Update replaces ACL_USER entry with qualifier uid. func Update(name string, uid int, perms Perm) error { + f, _err := os.OpenFile(name, container.O_PATH, 0) + if _err != nil { + return _err + } + r, err := C.hakurei_update_acl( - C.CString(name), + C.int(f.Fd()), C.uid_t(uid), C.acl_perm_t(perms), ) + + if _err = f.Close(); _err != nil { + return _err + } + if r == C.HAKUREI_ACL_OK { return nil } -- cgit v1.3.1