X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev%2Fudev-event.c;h=7591d5e314b3693fa55d903dbbf6582aef843147;hp=ad6db83aea728b67e8b9e51a5f3fe81cf911d820;hb=52934a60c447ae78873b07a01b7fa25e60c86fe4;hpb=c1332ae89866f243f4817dc4d3bdd7f11d3f9a9a diff --git a/udev/udev-event.c b/udev/udev-event.c index ad6db83ae..7591d5e31 100644 --- a/udev/udev-event.c +++ b/udev/udev-event.c @@ -38,6 +38,7 @@ struct udev_event *udev_event_new(struct udev_device *dev) event = calloc(1, sizeof(struct udev_event)); if (event == NULL) return NULL; + event->mode = 0600; event->dev = dev; event->udev = udev_device_get_udev(dev); udev_list_init(&event->run_list); @@ -110,7 +111,7 @@ size_t udev_event_apply_format(struct udev_event *event, const char *src, char * s = dest; l = size; - while (1) { + for (;;) { enum subst_type type = SUBST_UNKNOWN; char attrbuf[UTIL_PATH_SIZE]; char *attr = NULL; @@ -643,12 +644,10 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules) if (event->dev_db != NULL) udev_node_update_old_links(dev, event->dev_db); - if (event->mode == 0) { - if (event->gid > 0) - event->mode = 0660; - else - event->mode = 0600; - } + /* change default 0600 to 0660 if a group is assigned */ + if (event->mode == 0600 && event->gid > 0) + event->mode = 0660; + err = udev_node_add(dev, event->mode, event->uid, event->gid); } @@ -682,6 +681,10 @@ int udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask) udev_event_apply_format(event, cmd, program, sizeof(program)); envp = udev_device_get_properties_envp(event->dev); + if (event->exec_delay > 0) { + info(event->udev, "delay execution of '%s'\n", program); + sleep(event->exec_delay); + } if (util_run_program(event->udev, program, envp, NULL, 0, NULL, sigmask, true) != 0) { if (udev_list_entry_get_flags(list_entry)) err = -1;