]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/shared/mkdir-label.c
cryptenroll: allow to use a public key on a token
[thirdparty/systemd.git] / src / shared / mkdir-label.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include <sys/stat.h>
4
5 #include "errno-util.h"
6 #include "mkdir-label.h"
7 #include "selinux-util.h"
8 #include "smack-util.h"
9 #include "user-util.h"
10
11 int mkdirat_label(int dirfd, const char *path, mode_t mode) {
12 int r;
13
14 assert(path);
15
16 r = mac_selinux_create_file_prepare_at(dirfd, path, S_IFDIR);
17 if (r < 0)
18 return r;
19
20 r = RET_NERRNO(mkdirat(dirfd, path, mode));
21 mac_selinux_create_file_clear();
22 if (r < 0)
23 return r;
24
25 return mac_smack_fix_full(dirfd, path, NULL, 0);
26 }
27
28 int mkdirat_safe_label(int dir_fd, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
29 return mkdirat_safe_internal(dir_fd, path, mode, uid, gid, flags, mkdirat_label);
30 }
31
32 int mkdirat_parents_label(int dir_fd, const char *path, mode_t mode) {
33 return mkdirat_parents_internal(dir_fd, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_label);
34 }
35
36 int mkdir_parents_safe_label(const char *prefix, const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags) {
37 return mkdir_parents_internal(prefix, path, mode, uid, gid, flags, mkdirat_label);
38 }
39
40 int mkdir_p_label(const char *path, mode_t mode) {
41 return mkdir_p_internal(NULL, path, mode, UID_INVALID, UID_INVALID, 0, mkdirat_label);
42 }