Merge pull request #2248 from EbonJaeger/add-crypt-gensalt-support
users: Add support for crypt_gensalt for user passwords
This commit is contained in:
commit
b2d9b20edc
@ -6,6 +6,18 @@
|
||||
find_package(${qtname} ${QT_VERSION} CONFIG REQUIRED Core DBus Network)
|
||||
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
|
||||
set(USER_EXTRA_LIB
|
||||
${kfname}::CoreAddons
|
||||
@ -78,7 +90,9 @@ calamares_add_plugin(users
|
||||
SHARED_LIB
|
||||
)
|
||||
|
||||
calamares_add_test(userspasswordtest SOURCES TestPasswordJob.cpp SetPasswordJob.cpp LIBRARIES ${CRYPT_LIBRARIES})
|
||||
if(NOT HAS_CRYPT_GENSALT)
|
||||
calamares_add_test(userspasswordtest SOURCES TestPasswordJob.cpp SetPasswordJob.cpp LIBRARIES ${CRYPT_LIBRARIES})
|
||||
endif()
|
||||
|
||||
calamares_add_test(
|
||||
usersgroupstest
|
||||
|
@ -44,6 +44,7 @@ SetPasswordJob::prettyStatusMessage() const
|
||||
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.
|
||||
QString
|
||||
SetPasswordJob::make_salt( int length )
|
||||
@ -67,6 +68,7 @@ SetPasswordJob::make_salt( int length )
|
||||
salt_string.append( '$' );
|
||||
return salt_string;
|
||||
}
|
||||
#endif
|
||||
|
||||
Calamares::JobResult
|
||||
SetPasswordJob::exec()
|
||||
@ -90,7 +92,14 @@ SetPasswordJob::exec()
|
||||
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 } );
|
||||
if ( ec )
|
||||
|
@ -22,8 +22,9 @@ public:
|
||||
QString prettyName() const override;
|
||||
QString prettyStatusMessage() const override;
|
||||
Calamares::JobResult exec() override;
|
||||
|
||||
#ifndef HAVE_CRYPT_GENSALT
|
||||
static QString make_salt( int length );
|
||||
#endif /* HAVE_CRYPT_GENSALT */
|
||||
|
||||
private:
|
||||
QString m_userName;
|
||||
|
Loading…
Reference in New Issue
Block a user