chiark / gitweb /
udev: do not selinux label files in /run/udev
[elogind.git] / src / udev / udev-node.c
index 26a43e9623c5bd77af7e7ee444505821509271a6..2ef6341a2f4266beff64b6f6f5ff77809529cfa5 100644 (file)
@@ -91,7 +91,7 @@ static int node_symlink(struct udev *udev, const char *node, const char *slink)
                                 buf[len] = '\0';
                                 if (strcmp(target, buf) == 0) {
                                         log_debug("preserve already existing symlink '%s' to '%s'\n", slink, target);
-                                        udev_selinux_lsetfilecon(udev, slink, S_IFLNK);
+                                        label_fix(slink, true);
                                         utimensat(AT_FDCWD, slink, NULL, AT_SYMLINK_NOFOLLOW);
                                         goto exit;
                                 }
@@ -100,14 +100,14 @@ static int node_symlink(struct udev *udev, const char *node, const char *slink)
         } else {
                 log_debug("creating symlink '%s' to '%s'\n", slink, target);
                 do {
-                        err = util_create_path_selinux(udev, slink);
+                        err = mkdir_parents_label(slink, 0755);
                         if (err != 0 && err != -ENOENT)
                                 break;
-                        udev_selinux_setfscreatecon(udev, slink, S_IFLNK);
+                        label_context_set(slink, S_IFLNK);
                         err = symlink(target, slink);
                         if (err != 0)
                                 err = -errno;
-                        udev_selinux_resetfscreatecon(udev);
+                        label_context_clear();
                 } while (err == -ENOENT);
                 if (err == 0)
                         goto exit;
@@ -117,14 +117,14 @@ static int node_symlink(struct udev *udev, const char *node, const char *slink)
         util_strscpyl(slink_tmp, sizeof(slink_tmp), slink, TMP_FILE_EXT, NULL);
         unlink(slink_tmp);
         do {
-                err = util_create_path_selinux(udev, slink_tmp);
+                err = mkdir_parents_label(slink_tmp, 0755);
                 if (err != 0 && err != -ENOENT)
                         break;
-                udev_selinux_setfscreatecon(udev, slink_tmp, S_IFLNK);
+                label_context_set(slink_tmp, S_IFLNK);
                 err = symlink(target, slink_tmp);
                 if (err != 0)
                         err = -errno;
-                udev_selinux_resetfscreatecon(udev);
+                label_context_clear();
         } while (err == -ENOENT);
         if (err != 0) {
                 log_error("symlink '%s' '%s' failed: %m\n", target, slink_tmp);
@@ -226,7 +226,7 @@ static void link_update(struct udev_device *dev, const char *slink, bool add)
                 do {
                         int fd;
 
-                        err = util_create_path(udev, filename);
+                        err = mkdir_parents_label(filename, 0755);
                         if (err != 0 && err != -ENOENT)
                                 break;
                         fd = open(filename, O_WRONLY|O_CREAT|O_CLOEXEC|O_TRUNC|O_NOFOLLOW, 0444);
@@ -269,7 +269,6 @@ void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev
 
 static int node_fixup(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid)
 {
-        struct udev *udev = udev_device_get_udev(dev);
         const char *devnode = udev_device_get_devnode(dev);
         dev_t devnum = udev_device_get_devnum(dev);
         struct stat stats;
@@ -308,7 +307,7 @@ static int node_fixup(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid
          * something else has set a custom context in the meantime.
          */
         if (strcmp(udev_device_get_action(dev), "add") == 0)
-                udev_selinux_lsetfilecon(udev, devnode, mode);
+                label_fix(devnode, true);
 
         /* always update timestamp when we re-use the node, like on media change events */
         utimensat(AT_FDCWD, devnode, NULL, 0);