diff options
Diffstat (limited to 'scripts/mysql_setpermission.sh')
-rw-r--r-- | scripts/mysql_setpermission.sh | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/scripts/mysql_setpermission.sh b/scripts/mysql_setpermission.sh index 66decbd69af..29311b9c101 100644 --- a/scripts/mysql_setpermission.sh +++ b/scripts/mysql_setpermission.sh @@ -56,7 +56,7 @@ my $sqlhost = ""; my $user = ""; $dbh=$host=$opt_user= $opt_password= $opt_help= $opt_host= $opt_socket= ""; -$opt_port=0; +$opt_port=3306; read_my_cnf(); # Read options from ~/.my.cnf @@ -64,6 +64,13 @@ GetOptions("user=s","password=s","help","host=s","socket=s","port=i"); usage() if ($opt_help); # the help function +## User may have put the port with the host. + +if ($opt_host =~ s/:(\d+)$//) +{ + $opt_port = $1; +} + if ($opt_host eq '') { $sqlhost = "localhost"; @@ -84,10 +91,30 @@ if ($opt_password eq '') print "\n"; } +## Socket takes precedence. +my $dsn; +my $prefix= 'mysql'; + +if (eval {DBI->install_driver("MariaDB")}) { + $dsn ="DBI:MariaDB:;"; + $prefix= 'mariadb'; +} +else { + $dsn = "DBI:mysql:;"; +} + +if ($opt_socket and -S $opt_socket) +{ + $dsn .= "${prefix}_socket=$opt_socket"; +} +else +{ + $dsn .= "host=$sqlhost;port=$opt_port"; +} # make the connection to MariaDB -$dbh= DBI->connect("DBI:MariaDB:mysql:host=$sqlhost:port=$opt_port:mariadb_socket=$opt_socket",$opt_user,$opt_password, {PrintError => 0}) || - die("Can't make a connection to the mysql server.\n The error: $DBI::errstr"); +$dbh= DBI->connect($dsn,$opt_user,$opt_password, { RaiseError => 1, PrintError => 0}) || + die("Can't make a connection to the MariaDB server.\n The error: $DBI::errstr"); # the start of the program &q1(); @@ -195,7 +222,8 @@ sub setpwd { $pass = "PASSWORD(". $dbh->quote($pass) . ")"; } - my $sth = $dbh->prepare("update user set Password=$pass where User = $user and Host = $host") || die $dbh->errstr; + my $uh= "$user@$host"; + my $sth = $dbh->prepare("set password for $uh =$pass") || die $dbh->errstr; $sth->execute || die $dbh->errstr; $sth->finish; print "The password is set for user $user.\n\n"; @@ -403,7 +431,7 @@ sub user chomp($answer); if ($answer) { - my $sth = $dbh->prepare("select User from user where User = '$answer'") || die $dbh->errstr; + my $sth = $dbh->prepare("select User from mysql.user where User = '$answer'") || die $dbh->errstr; $sth->execute || die $dbh->errstr; my @r = $sth->fetchrow_array; if ($r[0]) @@ -538,7 +566,7 @@ sub hosts print "We now need to know which host for $user we have to change.\n"; print "Choose from the following hosts: \n"; $user = $dbh->quote($user); - my $sth = $dbh->prepare("select Host,User from user where User = $user") || die $dbh->errstr; + my $sth = $dbh->prepare("select Host,User from mysql.user where User = $user") || die $dbh->errstr; $sth->execute || die $dbh->errstr; while (my @r = $sth->fetchrow_array) { @@ -551,7 +579,7 @@ sub hosts chomp($answer); if ($answer) { - $sth = $dbh->prepare("select Host,User from user where Host = '$answer' and User = $user") || die $dbh->errstr; + $sth = $dbh->prepare("select Host,User from mysql.user where Host = '$answer' and User = $user") || die $dbh->errstr; $sth->execute || die $dbh->errstr; my @r = $sth->fetchrow_array; if ($r[0]) @@ -597,8 +625,10 @@ sub read_my_cnf { if (/^\[(client|perl)\]/i) { + print "Options read from mycnf:\n"; while ((defined($_=<TMP>)) && !/^\[\w+\]/) { + next if /^\s*($|#)/; ## skip blanks and comments print $_; if (/^host\s*=\s*(\S+)/i) { @@ -621,6 +651,7 @@ sub read_my_cnf $opt_socket = $1; } } + print "------------------------\n"; } } close(TMP); |