summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO3
-rw-r--r--src/logind-acl.c20
-rw-r--r--src/logind.c2
-rw-r--r--src/logind.h1
-rw-r--r--src/uaccess.c2
5 files changed, 18 insertions, 10 deletions
diff --git a/TODO b/TODO
index 86f2d72e71..155f09fc83 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 7571093d0e..59af981a5e 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 9bab875131..cbc878e682 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 aaa21cddda..7e47bc3489 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 2f6ac43754..1683707977 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) {