chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
acl: libudev currently doesn't handle properly enumerator matches with multiple tags...
[elogind.git]
/
src
/
logind-acl.c
diff --git
a/src/logind-acl.c
b/src/logind-acl.c
index 3df104ff2cc5a58e8c82b9550a080a54e009490f..59af981a5ecb5d33c56830e4a877af4dab288f4d 100644
(file)
--- a/
src/logind-acl.c
+++ b/
src/logind-acl.c
@@
-54,7
+54,7
@@
static int find_acl(acl_t acl, uid_t uid, acl_entry_t *entry) {
return -errno;
b = *u == uid;
return -errno;
b = *u == uid;
- free(u);
+
acl_
free(u);
if (b) {
*entry = i;
if (b) {
*entry = i;
@@
-222,7
+222,7
@@
int devnode_acl_all(struct udev *udev,
assert(udev);
assert(udev);
- if (
!seat
)
+ if (
isempty(seat)
)
seat = "seat0";
e = udev_enumerate_new(udev);
seat = "seat0";
e = udev_enumerate_new(udev);
@@
-233,9
+233,13
@@
int devnode_acl_all(struct udev *udev,
if (r < 0)
goto finish;
if (r < 0)
goto finish;
- 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)
r = udev_enumerate_scan_devices(e);
if (r < 0)
@@
-252,8
+256,8
@@
int devnode_acl_all(struct udev *udev,
goto finish;
}
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)) {
sn = "seat0";
if (!streq(seat, sn)) {
@@
-262,14
+266,17
@@
int devnode_acl_all(struct udev *udev,
}
node = udev_device_get_devnode(d);
}
node = udev_device_get_devnode(d);
- udev_device_unref(d);
-
if (!node) {
if (!node) {
+ udev_device_unref(d);
r = -ENOMEM;
goto finish;
}
r = -ENOMEM;
goto finish;
}
+ log_debug("Fixing up %s for seat %s...", node, sn);
+
r = devnode_acl(node, flush, del, old_uid, add, new_uid);
r = devnode_acl(node, flush, del, old_uid, add, new_uid);
+ udev_device_unref(d);
+
if (r < 0)
goto finish;
}
if (r < 0)
goto finish;
}