]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/mkdir-label.c
license: LGPL-2.1+ -> LGPL-2.1-or-later
[thirdparty/systemd.git] / src / basic / mkdir-label.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include <stdio.h>
4 #include <sys/stat.h>
5 #include <sys/types.h>
6 #include <unistd.h>
7
8 #include "label.h"
9 #include "macro.h"
10 #include "mkdir.h"
11 #include "selinux-util.h"
12 #include "smack-util.h"
13 #include "user-util.h"
14
15 int mkdir_label(const char *path, mode_t mode) {
16 int r;
17
18 assert(path);
19
20 r = mac_selinux_create_file_prepare(path, S_IFDIR);
21 if (r < 0)
22 return r;
23
24 r = mkdir_errno_wrapper(path, mode);
25 mac_selinux_create_file_clear();
26 if (r < 0)
27 return r;
28
29 return mac_smack_fix(path, 0);
30 }
31
32 int mkdirat_label(int dirfd, const char *path, mode_t mode) {
33 int r;
34
35 assert(path);
36
37 r = mac_selinux_create_file_prepare_at(dirfd, path, S_IFDIR);
38 if (r < 0)
39 return r;
40
41 r = mkdirat_errno_wrapper(dirfd, path, mode);
42 mac_selinux_create_file_clear();
43 if (r < 0)
44 return r;
45
46 return mac_smack_fix_at(dirfd, path, 0);
47 }
48
49 int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
50 return mkdir_safe_internal(path, mode, uid, gid, flags, mkdir_label);
51 }
52
53 int mkdir_parents_label(const char *path, mode_t mode) {
54 return mkdir_parents_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdir_label);
55 }
56
57 int mkdir_p_label(const char *path, mode_t mode) {
58 return mkdir_p_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdir_label);
59 }