PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/mysqlpasswd Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package scripts::mysqlpasswd; use strict; use warnings; use Cpanel::MariaDB (); use Cpanel::MysqlUtils::Connect (); use Cpanel::MysqlUtils::Quote (); use Cpanel::MysqlUtils::MyCnf::Basic (); use Cpanel::MysqlUtils::Compat::Password (); use Cpanel::ServerTasks (); if ( $> != 0 ) { die "Setting MySQL passwords is only possible using the root account\n"; } if ( !caller() ) { alarm(15); my ( $_user, $_pass, $_userhost ); if ( grep( /--multistdin/, @ARGV ) ) { $_user = ; chomp($_user); $_pass = ; chomp($_pass); $_userhost = ; chomp($_userhost); } elsif ( !@ARGV ) { chomp( my $up = ); my @UP = split( / /, $up ); $_user = $UP[0]; $_pass = $UP[1]; $_userhost = $UP[2]; } else { $_user = $ARGV[0]; $_pass = $ARGV[1]; $_userhost = $ARGV[2]; } alarm(0); if ( !$_user ) { print STDERR "$0: user is blank\n"; exit 1; } if ( !$_pass ) { print STDERR "$0: pass is blank\n"; exit 1; } exit __PACKAGE__->script( $_user, $_pass, $_userhost ); } sub script { my ( $class, $user, $pass, $userhost ) = @_; die "Need user!\n" if !length $user; die "Need pass!\n" if !length $pass; my $quoted_user; if ( $user eq 'root' ) { my $dbuser = Cpanel::MysqlUtils::MyCnf::Basic::getmydbuser('root') || 'root'; $quoted_user = Cpanel::MysqlUtils::Quote::quote($dbuser); } else { $quoted_user = Cpanel::MysqlUtils::Quote::quote($user); } my $quoted_pass = Cpanel::MysqlUtils::Quote::quote($pass); my $quoted_userhost = Cpanel::MysqlUtils::Quote::quote($userhost); my $cpuser = $user; if ( $user ne 'root' ) { require Cpanel::DB::Map::Utils; $cpuser = Cpanel::DB::Map::Utils::get_cpuser_for_engine_dbuser( 'MYSQL', $user ); } if ( !set_mysql_password_via_dbi( $quoted_user, $quoted_pass, ( length $userhost ? $quoted_userhost : () ) ) ) { return 1; } if ( $user eq 'root' ) { require Cpanel::MysqlUtils::RootPassword; Cpanel::MysqlUtils::RootPassword::update_mysql_root_password_in_configuration($pass); } elsif ($cpuser) { # We do not store grants for root, and this will # throw in queueprocd if we try. queue_dbstoregrants($cpuser); } return 0; } sub set_mysql_password_via_dbi { my ( $quoted_user, $quoted_pass, $quoted_userhost ) = @_; my $dbi = Cpanel::MysqlUtils::Connect::get_dbi_handle(); my $reset_password_sql = Cpanel::MysqlUtils::Compat::Password::get_set_user_password_sql( dbh => $dbi, quoted_user => $quoted_user, quoted_password => $quoted_pass, ( length $quoted_userhost ? ( quoted_host => $quoted_userhost ) : () ) ); return _do_client( $reset_password_sql, $dbi ); } # For tests sub _do_client { my ( $reset_password_sql, $dbi ) = @_; # We used to do this via the “mysql” binary, but now that # we can use DBI directly we should do that. Moreover, it’s # necessary insofar as @$reset_password_sql might have stuff # like procedure definitions, which break if given directly to # the “mysql” binary. (See Cpanel::MysqlUtils::Compat::Password # and COBRA-7290.) my $ok = eval { foreach my $query (@$reset_password_sql) { $dbi->do($query) if ( length $query ); } $dbi->do('FLUSH PRIVILEGES'); 1; }; if ( !$ok ) { warn "Failed to set password via client: $@"; return 0; } return 1; } sub queue_dbstoregrants { my $cpuser = shift; return Cpanel::ServerTasks::queue_task( ['MysqlTasks'], "dbstoregrants $cpuser" ); } 1;