]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic: add helper function mknod_label()
authorChristian Göttsche <cgzones@googlemail.com>
Fri, 10 Jul 2020 19:37:44 +0000 (21:37 +0200)
committerChristian Göttsche <cgzones@googlemail.com>
Fri, 10 Jul 2020 19:55:13 +0000 (21:55 +0200)
src/basic/label.c
src/basic/label.h

index 1fce7718d4bad9d39b7f3323762a48395b7ad299..741c43c2b9af1f4f37a06cbe21e9ab18b4574970 100644 (file)
@@ -45,6 +45,26 @@ int symlink_label(const char *old_path, const char *new_path) {
         return mac_smack_fix(new_path, 0);
 }
 
+int mknod_label(const char *pathname, mode_t mode, dev_t dev) {
+        int r;
+
+        assert(pathname);
+
+        r = mac_selinux_create_file_prepare(pathname, mode);
+        if (r < 0)
+                return r;
+
+        if (mknod(pathname, mode, dev) < 0)
+                r = -errno;
+
+        mac_selinux_create_file_clear();
+
+        if (r < 0)
+                return r;
+
+        return mac_smack_fix(pathname, 0);
+}
+
 int btrfs_subvol_make_label(const char *path) {
         int r;
 
index a6f9074b2814f52d8d194e8eda637f6b96d906e1..6dc0f710efcb5e904f5a29d64fff694571d40e02 100644 (file)
@@ -17,5 +17,6 @@ static inline int label_fix(const char *path, LabelFixFlags flags) {
 int mkdir_label(const char *path, mode_t mode);
 int mkdirat_label(int dirfd, const char *path, mode_t mode);
 int symlink_label(const char *old_path, const char *new_path);
+int mknod_label(const char *pathname, mode_t mode, dev_t dev);
 
 int btrfs_subvol_make_label(const char *path);