X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fudevd.c;h=162551098ba67f4a26501a2d39fd627506c0cba4;hb=9e45e7d8f0d8d3f31d790f85694585d0d4b368b8;hp=d6de2aa2224425bb94a1529ecf597d6d66a7f66a;hpb=6ada823a9a0979ea145fd70add1007c21caa45c0;p=elogind.git diff --git a/src/udev/udevd.c b/src/udev/udevd.c index d6de2aa22..162551098 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -47,6 +47,7 @@ #include "udev.h" #include "sd-daemon.h" #include "cgroup-util.h" +#include "dev-setup.h" static bool debug; @@ -857,52 +858,17 @@ static void static_dev_create_from_modules(struct udev *udev) continue; util_strscpyl(filename, sizeof(filename), "/dev/", devname, NULL); - util_create_path_selinux(udev, filename); - udev_selinux_setfscreatecon(udev, filename, mode); + mkdir_parents(filename, 0755); + label_context_set(filename, mode); log_debug("mknod '%s' %c%u:%u\n", filename, type, maj, min); if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST) utimensat(AT_FDCWD, filename, NULL, 0); - udev_selinux_resetfscreatecon(udev); + label_context_clear(); } fclose(f); } -/* needed for standalone udev operations */ -static void static_dev_create_links(struct udev *udev) -{ - DIR *dir; - struct stdlinks { - const char *link; - const char *target; - }; - static const struct stdlinks stdlinks[] = { - { "core", "/proc/kcore" }, - { "fd", "/proc/self/fd" }, - { "stdin", "/proc/self/fd/0" }, - { "stdout", "/proc/self/fd/1" }, - { "stderr", "/proc/self/fd/2" }, - }; - unsigned int i; - - dir = opendir("/dev"); - if (dir == NULL) - return; - - for (i = 0; i < ELEMENTSOF(stdlinks); i++) { - struct stat sb; - - if (stat(stdlinks[i].target, &sb) == 0) { - udev_selinux_setfscreateconat(udev, dirfd(dir), stdlinks[i].link, S_IFLNK); - if (symlinkat(stdlinks[i].target, dirfd(dir), stdlinks[i].link) < 0 && errno == EEXIST) - utimensat(dirfd(dir), stdlinks[i].link, NULL, AT_SYMLINK_NOFOLLOW); - udev_selinux_resetfscreatecon(udev); - } - } - - closedir(dir); -} - static int mem_size_mb(void) { FILE *f; @@ -938,7 +904,7 @@ static int convert_db(struct udev *udev) return 0; /* make sure we do not get here again */ - util_create_path(udev, "/run/udev/data"); + mkdir_parents("/run/udev/data", 0755); mkdir(filename, 0755); /* old database */ @@ -1084,7 +1050,7 @@ int main(int argc, char *argv[]) log_parse_environment(); udev_set_log_fn(udev, udev_main_log); log_debug("version %s\n", VERSION); - udev_selinux_init(udev); + label_init("/dev"); for (;;) { int option; @@ -1186,8 +1152,7 @@ int main(int argc, char *argv[]) mkdir("/run/udev", 0755); - /* create standard links, copy static nodes, create nodes from modules */ - static_dev_create_links(udev); + dev_setup(); static_dev_create_from_modules(udev); /* before opening new files, make sure std{in,out,err} fds are in a sane state */ @@ -1614,7 +1579,7 @@ exit_daemonize: udev_queue_export_unref(udev_queue_export); udev_ctrl_connection_unref(ctrl_conn); udev_ctrl_unref(udev_ctrl); - udev_selinux_exit(udev); + label_finish(); udev_unref(udev); log_close(); return rc;