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(${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
|
||||||
|
@ -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 )
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user