]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/shared/acl-util.h
cryptenroll: allow to use a public key on a token
[thirdparty/systemd.git] / src / shared / acl-util.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include <errno.h>
5 #include <unistd.h>
6
7 int fd_acl_make_read_only_fallback(int fd);
8 int fd_acl_make_writable_fallback(int fd);
9
10 #if HAVE_ACL
11 #include <acl/libacl.h>
12 #include <stdbool.h>
13 #include <sys/acl.h>
14
15 #include "macro.h"
16
17 int acl_find_uid(acl_t acl, uid_t uid, acl_entry_t *entry);
18 int calc_acl_mask_if_needed(acl_t *acl_p);
19 int add_base_acls_if_needed(acl_t *acl_p, const char *path);
20 int acl_search_groups(const char* path, char ***ret_groups);
21 int parse_acl(
22 const char *text,
23 acl_t *ret_acl_access,
24 acl_t *ret_acl_access_exec,
25 acl_t *ret_acl_default,
26 bool want_mask);
27 int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *ret);
28 int fd_add_uid_acl_permission(int fd, uid_t uid, unsigned mask);
29
30 int fd_acl_make_read_only(int fd);
31 int fd_acl_make_writable(int fd);
32
33 /* acl_free takes multiple argument types.
34 * Multiple cleanup functions are necessary. */
35 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(acl_t, acl_free, NULL);
36 #define acl_free_charp acl_free
37 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(char*, acl_free_charp, NULL);
38 #define acl_free_uid_tp acl_free
39 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(uid_t*, acl_free_uid_tp, NULL);
40 #define acl_free_gid_tp acl_free
41 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(gid_t*, acl_free_gid_tp, NULL);
42
43 #else
44 #define ACL_READ 0x04
45 #define ACL_WRITE 0x02
46 #define ACL_EXECUTE 0x01
47
48 static inline int fd_add_uid_acl_permission(int fd, uid_t uid, unsigned mask) {
49 return -EOPNOTSUPP;
50 }
51
52 static inline int fd_acl_make_read_only(int fd) {
53 return fd_acl_make_read_only_fallback(fd);
54 }
55
56 static inline int fd_acl_make_writable(int fd) {
57 return fd_acl_make_writable_fallback(fd);
58 }
59
60 #endif