File: //proc/self/root/scripts.20110531.215904.25158/suspendmysqlusers
#!/usr/bin/perl
# cpanel - suspendmysqlusers Copyright(c) 2010 cPanel, Inc.
# All rights Reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
BEGIN { unshift @INC, '/usr/local/cpanel'; }
use strict;
use Cpanel::DB::Map ();
use Cpanel::MysqlUtils ();
use Cpanel::Logger ();
my $user = shift @ARGV;
if ( !$user ) {
print "USAGE: $0 <user>\n";
exit 1;
}
my $logger = Cpanel::Logger->new();
my $map = Cpanel::DB::Map->new({ 'cpuser' => $user, 'db' => 'MYSQL' });
my $owner = $map->get_owner();
my @user_list = map { "'$_'" } map { $_->name() } $owner->dbusers();
if (!scalar @user_list) {
$logger->warn("$user has no databases.");
exit;
}
my $user_list = join ',', @user_list;
my $result = Cpanel::MysqlUtils::sqlcmd("SELECT User, Host, Password from mysql.user WHERE user IN ($user_list)");
my @lines = split /\n/, $result;
my %result;
foreach my $line (@lines) {
my ( $user, $host, $pass ) = split /\s+/, $line, 3;
if ( !$pass ) {
$logger->info("MySQL user $user\@$host has a blank password!");
$result{$user}{$host} = '*' x 41;
}
else {
$result{$user}{$host} = $pass;
}
}
foreach my $user ( keys %result ) {
foreach my $host ( keys %{ $result{$user} } ) {
if ( $result{$user}{$host} =~ m/^\*/ ) {
$result{$user}{$host} =~ s/^\*//;
$result{$user}{$host} = reverse $result{$user}{$host};
$result{$user}{$host} = '-' . $result{$user}{$host};
}
}
}
foreach my $user ( keys %result ) {
foreach my $host ( keys %{ $result{$user} } ) {
my $pass = $result{$user}{$host};
my $dbuser = Cpanel::MysqlUtils::safesqlstring($user);
my $dbhost = Cpanel::MysqlUtils::safesqlstring($host);
$pass = Cpanel::MysqlUtils::safesqlstring($pass);
Cpanel::MysqlUtils::sqlcmd("UPDATE mysql.user SET Password='$pass' WHERE user='$dbuser' AND host='$dbhost'");
}
}
Cpanel::MysqlUtils::sqlcmd('FLUSH PRIVILEGES');