X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fudev%2Fudev-event.c;h=c4603a0c0ec3dc353668073c839854ecb6203b5f;hp=efd9b6d71d84fdaff64887f5d8f975bd71ef5008;hb=c26547d612733371494330e26c7d3604a5dba3d9;hpb=090be8653471e1abe3f1cdd32eaad0fbd65f85cd diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index efd9b6d71..c4603a0c0 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -47,6 +47,7 @@ struct udev_event *udev_event_new(struct udev_device *dev) event->dev = dev; event->udev = udev; udev_list_init(udev, &event->run_list, false); + udev_list_init(udev, &event->seclabel_list, false); event->fd_signal = -1; event->birth_usec = now(CLOCK_MONOTONIC); event->timeout_usec = 30 * 1000 * 1000; @@ -58,6 +59,7 @@ void udev_event_unref(struct udev_event *event) if (event == NULL) return; udev_list_cleanup(&event->run_list); + udev_list_cleanup(&event->seclabel_list); free(event->program_result); free(event->name); free(event); @@ -838,6 +840,8 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, } if (major(udev_device_get_devnum(dev)) > 0) { + bool apply; + /* remove/update possible left-over symlinks from old database entry */ if (event->dev_db != NULL) udev_node_update_old_links(dev, event->dev_db); @@ -861,8 +865,8 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, } } - udev_node_add(dev, event->owner_set || event->group_set || event->mode_set, - event->mode, event->uid, event->gid); + apply = streq(udev_device_get_action(dev), "add") || event->owner_set || event->group_set || event->mode_set; + udev_node_add(dev, apply, event->mode, event->uid, event->gid, &event->seclabel_list); } /* preserve old, or get new initialization timestamp */