]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/smack-util.h
label: Introduce LabelOps to do pre/post labelling operations
[thirdparty/systemd.git] / src / shared / smack-util.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
8552b176
AK
2#pragma once
3
4/***
96b2fb93 5 Copyright © 2013 Intel Corporation
8552b176
AK
6
7 Author: Auke Kok <auke-jan.h.kok@intel.com>
8552b176
AK
8***/
9
10#include <stdbool.h>
11c3a366 11#include <sys/types.h>
8552b176 12
0690160e 13#include "label-util.h"
5ab58c20
WC
14#include "macro.h"
15
c02e7b1e
SW
16#define SMACK_FLOOR_LABEL "_"
17#define SMACK_STAR_LABEL "*"
18
5ab58c20 19typedef enum SmackAttr {
08c84981
LP
20 SMACK_ATTR_ACCESS,
21 SMACK_ATTR_EXEC,
22 SMACK_ATTR_MMAP,
23 SMACK_ATTR_TRANSMUTE,
24 SMACK_ATTR_IPIN,
25 SMACK_ATTR_IPOUT,
5ab58c20 26 _SMACK_ATTR_MAX,
2d93c20e 27 _SMACK_ATTR_INVALID = -EINVAL,
5ab58c20
WC
28} SmackAttr;
29
6baa7db0 30bool mac_smack_use(void);
a452c807 31int mac_smack_init(void);
b9c1bc28 32
03bc11d1 33int mac_smack_fix_full(int atfd, const char *inode_path, const char *label_path, LabelFixFlags flags);
c3151977 34static inline int mac_smack_fix(const char *path, LabelFixFlags flags) {
03bc11d1 35 return mac_smack_fix_full(AT_FDCWD, path, path, flags);
c3151977
TM
36}
37
5ab58c20
WC
38const char* smack_attr_to_string(SmackAttr i) _const_;
39SmackAttr smack_attr_from_string(const char *s) _pure_;
40int mac_smack_read(const char *path, SmackAttr attr, char **label);
41int mac_smack_read_fd(int fd, SmackAttr attr, char **label);
9dcb8923
DDM
42int mac_smack_apply_at(int dir_fd, const char *path, SmackAttr attr, const char *label);
43static inline int mac_smack_apply(const char *path, SmackAttr attr, const char *label) {
44 return mac_smack_apply_at(AT_FDCWD, path, attr, label);
45}
5ab58c20 46int mac_smack_apply_fd(int fd, SmackAttr attr, const char *label);
2ca620c4 47int mac_smack_apply_pid(pid_t pid, const char *label);
ba056b73 48int mac_smack_copy(const char *dest, const char *src);
ce0458be 49
9dcb8923
DDM
50int renameat_and_apply_smack_floor_label(int fdf, const char *from, int fdt, const char *to);
51static inline int rename_and_apply_smack_floor_label(const char *from, const char *to) {
52 return renameat_and_apply_smack_floor_label(AT_FDCWD, from, AT_FDCWD, to);
53}