]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
homed: return a better error when a home has no authentication information defined
authorLennart Poettering <lennart@poettering.net>
Wed, 20 May 2020 15:02:12 +0000 (17:02 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 21 May 2020 21:28:48 +0000 (23:28 +0200)
We can't log into home entries that have no password or PKCS#11 token.
Return a proper, useful error in that case.

See: #15178

src/home/homed-home.c
src/home/homework.c
src/libsystemd/sd-bus/bus-common-errors.c
src/libsystemd/sd-bus/bus-common-errors.h

index be1a710ccc13f113acc2417e27392dcd0ddc61ac..cf11c05d6025c4bce7b32f0bff34b3d3a0ddcc38 100644 (file)
@@ -471,6 +471,8 @@ static int convert_worker_errno(Home *h, int e, sd_bus_error *error) {
                 return sd_bus_error_setf(error, BUS_ERROR_HOME_NOT_ACTIVE, "Home %s is currently not active", h->user_name);
         case -ENOSPC:
                 return sd_bus_error_setf(error, BUS_ERROR_NO_DISK_SPACE, "Not enough disk space for home %s", h->user_name);
+        case -EKEYREVOKED:
+                return sd_bus_error_setf(error, BUS_ERROR_HOME_CANT_AUTHENTICATE, "Home %s has no password or other authentication mechanism defined.", h->user_name);
         }
 
         return 0;
index 76fd79fc2a02ded993f478f6ef863da59bbf2e9d..2c10997b6b8949bd5d94c7f14b0bc6887ba98250 100644 (file)
@@ -1489,6 +1489,7 @@ static int run(int argc, char *argv[]) {
          * EBUSY           → file system is currently active
          * ENOEXEC         → file system is currently not active
          * ENOSPC          → not enough disk space for operation
+         * EKEYREVOKED     → user record has not suitable hashed password or pkcs#11 entry, we cannot authenticate
          */
 
         if (streq(argv[1], "activate"))
index 174f1228af29fdc35cdbd2c14322de7543fb105f..28f98cebce97472e9455d1844a317414a68bdfb8 100644 (file)
@@ -134,6 +134,7 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_common_errors[] = {
         SD_BUS_ERROR_MAP(BUS_ERROR_HOME_NOT_LOCKED,              ENOEXEC),
         SD_BUS_ERROR_MAP(BUS_ERROR_TOO_MANY_OPERATIONS,          ENOBUFS),
         SD_BUS_ERROR_MAP(BUS_ERROR_AUTHENTICATION_LIMIT_HIT,     ETOOMANYREFS),
+        SD_BUS_ERROR_MAP(BUS_ERROR_HOME_CANT_AUTHENTICATE,       EKEYREVOKED),
 
         SD_BUS_ERROR_MAP_END
 };
index dc58f88bbd5cc667712e295dea9d2bf170e4f87c..68ecbd65ddddb5425a1e05b7ccda27d741ac6363 100644 (file)
 #define BUS_ERROR_NO_DISK_SPACE "org.freedesktop.home1.NoDiskSpace"
 #define BUS_ERROR_TOO_MANY_OPERATIONS "org.freedesktop.home1.TooManyOperations"
 #define BUS_ERROR_AUTHENTICATION_LIMIT_HIT "org.freedesktop.home1.AuthenticationLimitHit"
+#define BUS_ERROR_HOME_CANT_AUTHENTICATE "org.freedesktop.home1.HomeCantAuthenticate"
 
 BUS_ERROR_MAP_ELF_USE(bus_common_errors);