From 539072153c0db3d91c1c59ad447d96b0e1f3cf77 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 29 Jun 2011 19:41:07 +0200 Subject: [PATCH] acl: libudev currently doesn't handle properly enumerator matches with multiple tags, so avoid using them for now --- TODO | 3 +++ src/logind-acl.c | 20 ++++++++++++-------- src/logind.c | 2 +- src/logind.h | 1 + src/uaccess.c | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/TODO b/TODO index 86f2d72e..155f09fc 100644 --- a/TODO +++ b/TODO @@ -22,6 +22,9 @@ F15 External: * fix broken Sockets=syslog-ng.socket packaging Features: + +* understand https://bugzilla.redhat.com/show_bug.cgi?id=672194 + * possibly set timezone offset from systemd at init instead of calling hwclock diff --git a/src/logind-acl.c b/src/logind-acl.c index 7571093d..59af981a 100644 --- a/src/logind-acl.c +++ b/src/logind-acl.c @@ -222,7 +222,7 @@ int devnode_acl_all(struct udev *udev, assert(udev); - if (!seat) + if (isempty(seat)) seat = "seat0"; e = udev_enumerate_new(udev); @@ -233,11 +233,13 @@ int devnode_acl_all(struct udev *udev, if (r < 0) goto finish; - if (!streq(seat, "seat0")) { - r = udev_enumerate_add_match_tag(e, seat); - if (r < 0) - goto finish; - } + /* FIXME: when libudev is able to handle multiple match tags + * properly, optimize the search here a bit */ + /* if (!streq(seat, "seat0")) { */ + /* r = udev_enumerate_add_match_tag(e, seat); */ + /* if (r < 0) */ + /* goto finish; */ + /* } */ r = udev_enumerate_scan_devices(e); if (r < 0) @@ -254,8 +256,8 @@ int devnode_acl_all(struct udev *udev, goto finish; } - sn = udev_device_get_property_value(d, "SEAT"); - if (!sn) + sn = udev_device_get_property_value(d, "ID_SEAT"); + if (isempty(sn)) sn = "seat0"; if (!streq(seat, sn)) { @@ -270,6 +272,8 @@ int devnode_acl_all(struct udev *udev, goto finish; } + log_debug("Fixing up %s for seat %s...", node, sn); + r = devnode_acl(node, flush, del, old_uid, add, new_uid); udev_device_unref(d); diff --git a/src/logind.c b/src/logind.c index 9bab8751..cbc878e6 100644 --- a/src/logind.c +++ b/src/logind.c @@ -286,7 +286,7 @@ int manager_process_seat_device(Manager *m, struct udev_device *d) { Seat *seat; sn = udev_device_get_property_value(d, "ID_SEAT"); - if (!sn) + if (isempty(sn)) sn = "seat0"; if (!seat_name_is_valid(sn)) { diff --git a/src/logind.h b/src/logind.h index aaa21cdd..7e47bc34 100644 --- a/src/logind.h +++ b/src/logind.h @@ -45,6 +45,7 @@ * trigger based on libudev if available * enumerate recursively with libudev when triggering * use sysfs in device hash table, not sysname, when fb driver is fixed + * fix ACL enumeration as soon as libudev can properly handle two match tags when enumerating * * non-local X11 server * reboot/shutdown halt management diff --git a/src/uaccess.c b/src/uaccess.c index 2f6ac437..16837079 100644 --- a/src/uaccess.c +++ b/src/uaccess.c @@ -44,7 +44,7 @@ int main(int argc, char *argv[]) { } path = argv[1]; - seat = argc >= 3 ? argv[2] : "seat0"; + seat = argc < 3 || isempty(argv[2]) ? "seat0" : argv[2]; p = strappend("/run/systemd/seats/", seat); if (!p) { -- 2.39.5