--- scripts/zmupdate.pl.in.orig 2025-06-13 23:01:03 UTC +++ scripts/zmupdate.pl.in @@ -52,8 +52,6 @@ use version; use strict; use bytes; use version; -use Crypt::Eksblowfish::Bcrypt; -use Data::Entropy::Algorithms qw(rand_bits); # ========================================================================== # @@ -1035,6 +1033,18 @@ sub migratePasswords { } # end sub patchDB sub migratePasswords { + use Crypt::Eksblowfish::Bcrypt; + my $random; + eval { + require Bytes::Random::Secure; + $random = Bytes::Random::Secure->new( Bits => 16*8); + }; + if ($@ or !$random) { + eval { + require Data::Entropy::Algorithms; + $random = Data::Entropy::Algorithms::rand_bits(16*8); + }; + } print ("Migratings passwords, if any...\n"); my $sql = 'SELECT * FROM `Users`'; my $sth = $dbh->prepare_cached($sql) or die( "Can't prepare '$sql': ".$dbh->errstr() ); @@ -1043,7 +1053,7 @@ sub migratePasswords { my $scheme = substr($user->{Password}, 0, 1); if ($scheme eq '*') { print ('-->'.$user->{Username}." password will be migrated\n"); - my $salt = Crypt::Eksblowfish::Bcrypt::en_base64(rand_bits(16*8)); + my $salt = Crypt::Eksblowfish::Bcrypt::en_base64($random); my $settings = '$2a$10$'.$salt; my $pass_hash = Crypt::Eksblowfish::Bcrypt::bcrypt($user->{Password},$settings); my $new_pass_hash = '-ZM-'.$pass_hash;