ACL_CHECK(3)
π ACL_CHECK(3) β the check-your-ACL-for-validity girlie π
okay so bestie, we're in the Library Functions Manual section, and today's main character is acl_check β she checks an ACL for validity. yes she's that girl. π
β¨ NAME β¨
acl_check β check an ACL for validity. literally her whole job. she ate. π
π LIBRARY π
Linux Access Control Lists library (libacl, -lacl). that's the one, bestie, don't link the wrong one or it's giving undefined reference energy π
πΈ SYNOPSIS πΈ
#include <sys/types.h>
#include <acl/libacl.h>
int
acl_check(acl_t acl, int *last);
π DESCRIPTION π
The acl_check() function checks the ACL referred to by the argument acl for validity. vibe check time, no cap. π₯
So here's the tea, and it's a strict tea:
The three required entries ACL_USER_OBJ, ACL_GROUP_OBJ, and ACL_OTHER must exist exactly once in the ACL. exactly. once. not zero, not two. periodt.
If the ACL contains any ACL_USER or ACL_GROUP entries, then an ACL_MASK entry is also required. like, you brought friends so now you need a chaperone. π«Ά
The ACL may contain at most one ACL_MASK entry. one. that's the limit. don't push it.
The user identifiers must be unique among all entries of type ACL_USER. The group identifiers must be unique among all entries of type ACL_GROUP. no duplicates allowed, bestie, we don't do clones here π¦
If the ACL referred to by acl is invalid, acl_check() returns a positive error code that indicates which type of error was detected. so she's not just saying "no" β she's saying why, and that's growth. The following symbolic error codes are defined:
ACL_MULTI_ERRORβ The ACL contains multiple entries that have a tag type that may occur at most once. like girl, we said once. πACL_DUPLICATE_ERRORβ The ACL contains multipleACL_USERentries with the same user ID, or multipleACL_GROUPentries with the same group ID. twin behavior, but make it illegal πACL_MISS_ERRORβ A required entry is missing. she's not here and we're all pretending it's fine πACL_ENTRY_ERRORβ The ACL contains an invalid entry tag type. that tag is not on the guest list, babe.
The acl_error() function can be used to translate error codes to text messages. so if you want the error to actually talk to you, that's your girl. π§
In addition, if the pointer last is not NULL, acl_check() assigns the number of the ACL entry at which the error was detected to the value pointed to by last. so she'll literally point at the culprit. icon behavior. π
Entries are numbered starting with zero, in the order in which they would be returned by the acl_get_entry() function. zero-indexed, as all correct things are β¨
β RETURN VALUE β
If successful, the acl_check() function returns 0 if the ACL referred to by acl is valid, and a positive error code if the ACL is invalid. yes bestie, "successful" here still includes "the ACL was bad and I'm telling you about it" β that's a return value, not a failure. π
Otherwise, a value of -1 is returned and the global variable errno is set to indicate the error. that's the real bad path. π
π¨ ERRORS π¨
If any of the following conditions occur, the acl_check() function returns -1 and sets errno to the corresponding value:
[EINVAL]β The argumentaclis not a valid pointer to an ACL. you handed her garbage, she's not gonna pretend it's a salad. π₯π
fr fr: this one is the "you passed me a nonsense pointer" error. no ACL, no service.
π STANDARDS π
This is a non-portable, Linux specific extension to the ACL manipulation functions defined in IEEE Std 1003.1e draft 17 (βPOSIX.1eβ, abandoned). so like... it's Linux-exclusive and the ancestor spec got abandoned. iconic of the 90s honestly π«
π SEE ALSO π
go read those too, bestie, knowledge is free and she's giving it away π
βοΈ AUTHOR βοΈ
Written by Andreas Gruenbacher <andreas.gruenbacher@gmail.com>. thank you king, we appreciate you π«Ά
and that's the whole page, babes β this was Linux ACL, March 23, 2002, so yes she's a vintage queen and she's still valid (unlike some ACLs π). stay valid, stay unique, stay exactly-once. mwah πβ¨πΈ
π¦ where this page comes from
- alpine 3.22: acl-doc 2.3.2-r1 Β· LGPL-2.1-or-later AND GPL-2.0-or-later
- alpine 3.23: acl-doc 2.3.2-r1 Β· LGPL-2.1-or-later AND GPL-2.0-or-later
- alpine 3.24: acl-doc 2.3.2-r1 Β· LGPL-2.1-or-later AND GPL-2.0-or-later
- arch rolling: acl 2.4.0-1 Β· LGPL-2.1-or-later AND GPL-2.0-or-later
- centos-stream 10: libacl-devel 2.4.0-2.el10 Β· LGPL-2.1-or-later
- centos-stream 9: libacl-devel 2.4.0-2.el9 Β· LGPLv2+
- centos-stream 9: libacl-devel 2.4.0-2.el9 Β· LGPLv2+
- debian bookworm: libacl1-dev 2.3.1-3
- debian trixie: libacl1-dev 2.3.2-2+b1
- fedora 43: libacl-devel 2.3.2-4.fc43 Β· LGPL-2.1-or-later
- fedora 43: libacl-devel 2.3.2-4.fc43 Β· LGPL-2.1-or-later
- fedora 43: libacl-devel 2.4.0-1.fc43 Β· LGPL-2.1-or-later
- fedora 43: libacl-devel 2.4.0-1.fc43 Β· LGPL-2.1-or-later
- fedora 44: libacl-devel 2.3.2-6.fc44 Β· LGPL-2.1-or-later
- fedora 44: libacl-devel 2.3.2-6.fc44 Β· LGPL-2.1-or-later
- fedora 44: libacl-devel 2.4.0-1.fc44 Β· LGPL-2.1-or-later
- fedora 44: libacl-devel 2.4.0-1.fc44 Β· LGPL-2.1-or-later
- nixpkgs unstable: acl 2.4.0
- opensuse-leap 16.0: libacl-devel 2.4.0-160000.1.1 Β· GPL-2.0-or-later AND LGPL-2.1-or-later
- opensuse-leap 16.0: libacl-devel 2.4.0-160000.1.1 Β· GPL-2.0-or-later AND LGPL-2.1-or-later
- opensuse-leap 16.0: libacl-devel 2.4.0-160000.1.1 Β· GPL-2.0-or-later AND LGPL-2.1-or-later
- opensuse-leap 16.0: libacl-devel 2.4.0-160000.1.1 Β· GPL-2.0-or-later AND LGPL-2.1-or-later
- ubuntu jammy: libacl1-dev 2.3.1-1
- ubuntu noble: libacl1-dev 2.3.2-1build1
- ubuntu noble: libacl1-dev 2.3.2-1build1.1
- ubuntu resolute: libacl1-dev 2.3.2-2
- ubuntu stonking: libacl1-dev 2.4.0-1
- (C) 2002 Andreas Gruenbacher, <andreas.gruenbacher@gmail.com>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms