chiark / gitweb /
install: make InstallContext::{will_install,have_installed} OrderedHashmaps
[elogind.git] / src / shared / mkdir-label.c
index 4ee6251bcdf055cf4ab73802ca3447456d5364b4..2b9cb161cb2829cca6095290c0165aae8abd4a01 100644 (file)
 #include "path-util.h"
 #include "mkdir.h"
 
+static int label_mkdir(const char *path, mode_t mode) {
+        int r;
+
+        if (mac_selinux_use()) {
+                r = mac_selinux_mkdir(path, mode);
+                if (r < 0)
+                        return r;
+        }
+
+        if (mac_smack_use()) {
+                r = mkdir(path, mode);
+                if (r < 0 && errno != EEXIST)
+                        return -errno;
+
+                r = mac_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);
 }