session: deny access if password login is disabled
authorFabian Bläse <fabian@blaese.de>
Tue, 17 Mar 2020 15:55:57 +0000 (16:55 +0100)
committerJo-Philipp Wich <jo@mein.io>
Tue, 26 May 2020 14:17:12 +0000 (16:17 +0200)
The special characters '!' and '*' in /etc/shadow are
used to disable password login for a specific account.

The character 'x' has no special meaning, but should not
be interpreted as an empty password.

However, rpcd did treat these special characters like no
password was set, which allows access even though the account
is disabled.

By removing the additional checks for these characters, the
encrypted password string is passed to crypt, which returns NULL
if the salt has an invalid format and therefore access is denied.

Fixes: FS#2634

Signed-off-by: Fabian Bläse <fabian@blaese.de>
(cherry picked from commit 3df62bcebd2caff47506ccffb42df8d2d2123c06)

session.c

index 3ed45197ab9d039e89a189f6bb5c152fa60c61a8..b4c7be4fe1802296d670b137c66cdcd7f44021f4 100644 (file)
--- a/session.c
+++ b/session.c
@@ -795,7 +795,7 @@ rpc_login_test_password(const char *hash, const char *password)
        char *crypt_hash;
 
        /* password is not set */
-       if (!hash || !*hash || !strcmp(hash, "!") || !strcmp(hash, "x"))
+       if (!hash || !*hash)
        {
                return true;
        }