X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogind-acl.c;h=59af981a5ecb5d33c56830e4a877af4dab288f4d;hb=539072153c0db3d91c1c59ad447d96b0e1f3cf77;hp=3df104ff2cc5a58e8c82b9550a080a54e009490f;hpb=5eda94dda25bccda928c4b33c790dbe748573a22;p=elogind.git diff --git a/src/logind-acl.c b/src/logind-acl.c index 3df104ff2..59af981a5 100644 --- 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; - free(u); + acl_free(u); if (b) { *entry = i; @@ -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,9 +233,13 @@ int devnode_acl_all(struct udev *udev, 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) @@ -252,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)) { @@ -262,14 +266,17 @@ int devnode_acl_all(struct udev *udev, } node = udev_device_get_devnode(d); - udev_device_unref(d); - if (!node) { + udev_device_unref(d); 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); + udev_device_unref(d); + if (r < 0) goto finish; }