Merge pull request #2248 from EbonJaeger/add-crypt-gensalt-support

users: Add support for crypt_gensalt for user passwords
This commit is contained in:
Adriaan de Groot 2023-12-09 00:25:43 +01:00 committed by GitHub
commit b2d9b20edc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 3 deletions

View File

@ -6,6 +6,18 @@
find_package(${qtname} ${QT_VERSION} CONFIG REQUIRED Core DBus Network) find_package(${qtname} ${QT_VERSION} CONFIG REQUIRED Core DBus Network)
find_package(Crypt REQUIRED) find_package(Crypt REQUIRED)
# Check for crypt_gensalt
if(Crypt_FOUND)
set(_old_CRL "${CMAKE_REQUIRED_LIBRARIES}")
list(APPEND CMAKE_REQUIRED_LIBRARIES crypt)
include(CheckSymbolExists)
check_symbol_exists(crypt_gensalt crypt.h HAS_CRYPT_GENSALT)
set(CMAKE_REQUIRED_LIBRARIES "${_old_CRL}")
if(HAS_CRYPT_GENSALT)
add_definitions(-DHAVE_CRYPT_GENSALT)
endif()
endif()
# Add optional libraries here # Add optional libraries here
set(USER_EXTRA_LIB set(USER_EXTRA_LIB
${kfname}::CoreAddons ${kfname}::CoreAddons
@ -78,7 +90,9 @@ calamares_add_plugin(users
SHARED_LIB SHARED_LIB
) )
if(NOT HAS_CRYPT_GENSALT)
calamares_add_test(userspasswordtest SOURCES TestPasswordJob.cpp SetPasswordJob.cpp LIBRARIES ${CRYPT_LIBRARIES}) calamares_add_test(userspasswordtest SOURCES TestPasswordJob.cpp SetPasswordJob.cpp LIBRARIES ${CRYPT_LIBRARIES})
endif()
calamares_add_test( calamares_add_test(
usersgroupstest usersgroupstest

View File

@ -44,6 +44,7 @@ SetPasswordJob::prettyStatusMessage() const
return tr( "Setting password for user %1." ).arg( m_userName ); return tr( "Setting password for user %1." ).arg( m_userName );
} }
#ifndef HAVE_CRYPT_GENSALT
/// Returns a modular hashing salt for method 6 (SHA512) with a 16 character random salt. /// Returns a modular hashing salt for method 6 (SHA512) with a 16 character random salt.
QString QString
SetPasswordJob::make_salt( int length ) SetPasswordJob::make_salt( int length )
@ -67,6 +68,7 @@ SetPasswordJob::make_salt( int length )
salt_string.append( '$' ); salt_string.append( '$' );
return salt_string; return salt_string;
} }
#endif
Calamares::JobResult Calamares::JobResult
SetPasswordJob::exec() SetPasswordJob::exec()
@ -90,7 +92,14 @@ SetPasswordJob::exec()
return Calamares::JobResult::ok(); return Calamares::JobResult::ok();
} }
QString encrypted = QString::fromLatin1( crypt( m_newPassword.toUtf8(), make_salt( 16 ).toUtf8() ) ); QString salt;
#ifdef HAVE_CRYPT_GENSALT
salt = crypt_gensalt( NULL, 0, NULL, 0 );
#else
salt = make_salt( 16 );
#endif
QString encrypted = QString::fromLatin1( crypt( m_newPassword.toUtf8(), salt.toUtf8() ) );
int ec = Calamares::System::instance()->targetEnvCall( { "usermod", "-p", encrypted, m_userName } ); int ec = Calamares::System::instance()->targetEnvCall( { "usermod", "-p", encrypted, m_userName } );
if ( ec ) if ( ec )

View File

@ -22,8 +22,9 @@ public:
QString prettyName() const override; QString prettyName() const override;
QString prettyStatusMessage() const override; QString prettyStatusMessage() const override;
Calamares::JobResult exec() override; Calamares::JobResult exec() override;
#ifndef HAVE_CRYPT_GENSALT
static QString make_salt( int length ); static QString make_salt( int length );
#endif /* HAVE_CRYPT_GENSALT */
private: private:
QString m_userName; QString m_userName;