chiark / gitweb /
label: rearrange mandatory access control(MAC) apis
[elogind.git] / src / shared / mkdir-label.c
index 4ee6251bcdf055cf4ab73802ca3447456d5364b4..c41045e5b54da96058936b3a75fb6418bba38513 100644 (file)
 #include "path-util.h"
 #include "mkdir.h"
 
+static int label_mkdir(const char *path, mode_t mode) {
+        int r;
+
+        if (use_selinux()) {
+                r = label_mkdir_selinux(path, mode);
+                if (r < 0)
+                        return r;
+        }
+
+        if (use_smack()) {
+                r = mkdir(path, mode);
+                if (r < 0 && errno != EEXIST)
+                        return -errno;
+
+                r = smack_relabel_in_dev(path);
+                if (r < 0)
+                        return r;
+        }
+
+        r = mkdir(path, mode);
+        if (r < 0 && errno != EEXIST)
+                return -errno;
+
+        return 0;
+}
+
 int mkdir_label(const char *path, mode_t mode) {
         return label_mkdir(path, mode);
 }
@@ -44,10 +70,6 @@ int mkdir_parents_label(const char *path, mode_t mode) {
         return mkdir_parents_internal(NULL, path, mode, label_mkdir);
 }
 
-int mkdir_parents_prefix_label(const char *prefix, const char *path, mode_t mode) {
-        return mkdir_parents_internal(prefix, path, mode, label_mkdir);
-}
-
 int mkdir_p_label(const char *path, mode_t mode) {
         return mkdir_p_internal(NULL, path, mode, label_mkdir);
 }