diff options
Diffstat (limited to 'src/udev/udev-builtin-uaccess.c')
-rw-r--r-- | src/udev/udev-builtin-uaccess.c | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/src/udev/udev-builtin-uaccess.c b/src/udev/udev-builtin-uaccess.c index b1191ae7ff..10a143ac7f 100644 --- a/src/udev/udev-builtin-uaccess.c +++ b/src/udev/udev-builtin-uaccess.c @@ -1,26 +1,26 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /* * manage device node user ACL - * - * */ #include <errno.h> #include <stdio.h> #include <stdlib.h> +#include <sys/stat.h> #include "sd-login.h" +#include "device-util.h" #include "login-util.h" #include "logind-acl.h" -#include "udev.h" -#include "util.h" +#include "log.h" +#include "udev-builtin.h" -static int builtin_uaccess(struct udev_device *dev, int argc, char *argv[], bool test) { - int r; +static int builtin_uaccess(sd_device *dev, int argc, char *argv[], bool test) { const char *path = NULL, *seat; bool changed_acl = false; uid_t uid; + int r; umask(0022); @@ -28,24 +28,29 @@ static int builtin_uaccess(struct udev_device *dev, int argc, char *argv[], bool if (!logind_running()) return 0; - path = udev_device_get_devnode(dev); - seat = udev_device_get_property_value(dev, "ID_SEAT"); - if (!seat) + r = sd_device_get_devname(dev, &path); + if (r < 0) { + log_device_error_errno(dev, r, "Failed to get device name: %m"); + goto finish; + } + + if (sd_device_get_property_value(dev, "ID_SEAT", &seat) < 0) seat = "seat0"; r = sd_seat_get_active(seat, NULL, &uid); - if (IN_SET(r, -ENXIO, -ENODATA)) { - /* No active session on this seat */ - r = 0; - goto finish; - } else if (r < 0) { - log_error("Failed to determine active user on seat %s.", seat); + if (r < 0) { + if (IN_SET(r, -ENXIO, -ENODATA)) + /* No active session on this seat */ + r = 0; + else + log_device_error_errno(dev, r, "Failed to determine active user on seat %s: %m", seat); + goto finish; } r = devnode_acl(path, true, false, 0, true, uid); if (r < 0) { - log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_ERR, r, "Failed to apply ACL on %s: %m", path); + log_device_full(dev, r == -ENOENT ? LOG_DEBUG : LOG_ERR, r, "Failed to apply ACL: %m"); goto finish; } @@ -59,13 +64,13 @@ finish: /* Better be safe than sorry and reset ACL */ k = devnode_acl(path, true, false, 0, false, 0); if (k < 0) { - log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, k, "Failed to apply ACL on %s: %m", path); + log_device_full(dev, k == -ENOENT ? LOG_DEBUG : LOG_ERR, k, "Failed to apply ACL: %m"); if (r >= 0) r = k; } } - return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + return r; } const struct udev_builtin udev_builtin_uaccess = { |