X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev%2Fudevd.c;h=99647c683cf90c933052e546cc34217093cce929;hb=b73bf332c2da4f539d029d5e9a09af76df12181f;hp=dfdbb4c245b37b41f6115d7845f53f97dd6044bd;hpb=19711e1933003a46456f477cb8f1cac77c54bcb0;p=elogind.git diff --git a/udev/udevd.c b/udev/udevd.c index dfdbb4c24..99647c683 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -223,7 +223,6 @@ static void worker_new(struct event *event) /* allow the main daemon netlink address to send devices to the worker */ udev_monitor_allow_unicast_sender(worker_monitor, monitor); udev_monitor_enable_receiving(worker_monitor); - util_set_fd_cloexec(udev_monitor_get_fd(worker_monitor)); worker = calloc(1, sizeof(struct worker)); if (worker == NULL) @@ -294,7 +293,7 @@ static void worker_new(struct event *event) alarm(udev_device_get_event_timeout(dev)); /* execute RUN= */ - if (err == 0 && !udev_event->ignore_device && udev_get_run(udev_event->udev)) + if (err == 0 && udev_get_run(udev_event->udev)) failed = udev_event_execute_run(udev_event, &orig_sigmask); @@ -765,37 +764,11 @@ static void handle_signal(struct udev *udev, int signo) } } -static void startup_log(struct udev *udev) -{ - FILE *f; - char path[UTIL_PATH_SIZE]; - struct stat statbuf; - - f = fopen("/dev/kmsg", "w"); - if (f != NULL) - fprintf(f, "<6>udev: starting version " VERSION "\n"); - - util_strscpyl(path, sizeof(path), udev_get_sys_path(udev), "/class/mem/null", NULL); - if (lstat(path, &statbuf) == 0 && S_ISDIR(statbuf.st_mode)) { - const char *depr_str = - "udev: missing sysfs features; please update the kernel " - "or disable the kernel's CONFIG_SYSFS_DEPRECATED option; " - "udev may fail to work correctly"; - - if (f != NULL) - fprintf(f, "<3>%s\n", depr_str); - err(udev, "%s\n", depr_str); - sleep(15); - } - - if (f != NULL) - fclose(f); -} - int main(int argc, char *argv[]) { struct udev *udev; int fd; + FILE *f; sigset_t mask; const char *value; int daemonize = false; @@ -920,6 +893,7 @@ int main(int argc, char *argv[]) IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE); } else { char filename[UTIL_PATH_SIZE]; + struct stat statbuf; inotify_add_watch(pfd[FD_INOTIFY].fd, LIBEXECDIR "/rules.d", IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE); @@ -928,6 +902,12 @@ int main(int argc, char *argv[]) /* watch dynamic rules directory */ util_strscpyl(filename, sizeof(filename), udev_get_dev_path(udev), "/.udev/rules.d", NULL); + if (stat(filename, &statbuf) != 0) { + util_create_path(udev, filename); + udev_selinux_setfscreatecon(udev, filename, S_IFDIR|0755); + mkdir(filename, 0755); + udev_selinux_resetfscreatecon(udev); + } inotify_add_watch(pfd[FD_INOTIFY].fd, filename, IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE); } @@ -945,14 +925,13 @@ int main(int argc, char *argv[]) } /* unnamed socket from workers to the main daemon */ - if (socketpair(AF_LOCAL, SOCK_DGRAM, 0, worker_watch) < 0) { + if (socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, worker_watch) < 0) { fprintf(stderr, "error getting socketpair\n"); err(udev, "error getting socketpair\n"); rc = 6; goto exit; } pfd[FD_WORKER].fd = worker_watch[READ_END]; - util_set_fd_cloexec(worker_watch[WRITE_END]); rules = udev_rules_new(udev, resolve_names); if (rules == NULL) { @@ -983,7 +962,11 @@ int main(int argc, char *argv[]) } } - startup_log(udev); + f = fopen("/dev/kmsg", "w"); + if (f != NULL) { + fprintf(f, "<6>udev: starting version " VERSION "\n"); + fclose(f); + } /* redirect std{out,err} */ if (!debug && !debug_trace) {