sd-login: fix sd_seat_get_active() to return ENODATA v226
authorDavid Herrmann <dh.herrmann@gmail.com>
Tue, 8 Sep 2015 12:03:22 +0000 (14:03 +0200)
committerDavid Herrmann <dh.herrmann@gmail.com>
Tue, 8 Sep 2015 12:03:22 +0000 (14:03 +0200)
This seems to be an oversight from:
    707b66c66381c899d7ef640e158ffdd5bcff4deb

We have to return ENODATA instead of ENOENT if a requested entry is
non-present. Also fix the call-site in udev to check for these errors.

src/libsystemd/sd-login/sd-login.c
src/udev/udev-builtin-uaccess.c

index 55da26e..265c7c7 100644 (file)
@@ -645,10 +645,10 @@ _public_ int sd_seat_get_active(const char *seat, char **session, uid_t *uid) {
                 return r;
 
         if (session && !s)
-                return -ENOENT;
+                return -ENODATA;
 
         if (uid && !t)
-                return -ENOENT;
+                return -ENODATA;
 
         if (uid && t) {
                 r = parse_uid(t, uid);
index 43bab8a..7bf4e7f 100644 (file)
@@ -45,7 +45,7 @@ static int builtin_uaccess(struct udev_device *dev, int argc, char *argv[], bool
                 seat = "seat0";
 
         r = sd_seat_get_active(seat, NULL, &uid);
-        if (r == -ENOENT) {
+        if (r == -ENXIO || r == -ENODATA) {
                 /* No active session on this seat */
                 r = 0;
                 goto finish;