mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	(General code cleanup, use the GRANT statement instead of updating the privilege tables directly, added option to revoke privileges)
		
			
				
	
	
		
			661 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			661 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!@PERL@
 | |
| ## Emacs, this is -*- perl -*- mode? :-)
 | |
| ##
 | |
| ##        Permission setter for MySQL
 | |
| ##
 | |
| ##        mady by Luuk de Boer (luuk@wxs.nl) 1998.
 | |
| ##        it's made under GPL ...:-))
 | |
| ##
 | |
| ##
 | |
| ############################################################################
 | |
| ## History
 | |
| ##
 | |
| ## 1.0 first start of the program
 | |
| ## 1.1 some changes from monty and after that
 | |
| ##     initial release in mysql 3.22.10 (nov 1998)
 | |
| ## 1.2 begin screen now in a loop + quit is using 0 instead of 9
 | |
| ##     after ideas of Paul DuBois.
 | |
| ## 1.2a Add Grant, References, Index and Alter privilege handling (Monty)
 | |
| ## 1.3 Applied patch provided by Martin Mokrejs <mmokrejs@natur.cuni.cz>
 | |
| ##     (General code cleanup, use the GRANT statement instead of updating
 | |
| ##     the privilege tables directly, added option to revoke privileges)
 | |
| 
 | |
| #### TODO
 | |
| #
 | |
| # empty ... suggestions ... mail them to me ...
 | |
| 
 | |
| 
 | |
| $version="1.3";
 | |
| 
 | |
| use DBI;
 | |
| use Getopt::Long;
 | |
| use strict;
 | |
| use vars qw($dbh $sth $hostname $opt_user $opt_password $opt_help $opt_host
 | |
| 	    $opt_socket $opt_port $host $version);
 | |
| 
 | |
| my $sqlhost = "";
 | |
| my $user = "";
 | |
| 
 | |
| $dbh=$host=$opt_user= $opt_password= $opt_help= $opt_host= $opt_socket= "";
 | |
| $opt_port=0;
 | |
| 
 | |
| read_my_cnf();		# Read options from ~/.my.cnf
 | |
| 
 | |
| GetOptions("user=s","password=s","help","host=s","socket=s","port=i");
 | |
| 
 | |
| usage() if ($opt_help); # the help function
 | |
| 
 | |
| if ($opt_host eq '')
 | |
| {
 | |
|   $sqlhost = "localhost";
 | |
| }
 | |
| else
 | |
| {
 | |
|   $sqlhost = $opt_host;
 | |
| }
 | |
| 
 | |
| # ask for a password if no password is set already
 | |
| if ($opt_password eq '')
 | |
| {
 | |
|   system "stty -echo";
 | |
|   print "Password for user $opt_user to connect to MySQL: ";
 | |
|   $opt_password = <STDIN>;
 | |
|   chomp($opt_password);
 | |
|   system "stty echo";
 | |
|   print "\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| # make the connection to MySQL
 | |
| $dbh= DBI->connect("DBI:mysql:mysql:host=$sqlhost:port=$opt_port:mysql_socket=$opt_socket",$opt_user,$opt_password, {PrintError => 0}) ||
 | |
|   die("Can't make a connection to the mysql server.\n The error: $DBI::errstr");
 | |
| 
 | |
| # the start of the program
 | |
| &q1();
 | |
| exit(0); # the end...
 | |
| 
 | |
| #####
 | |
| # below all subroutines of the program
 | |
| #####
 | |
| 
 | |
| ###
 | |
| # the beginning of the program
 | |
| ###
 | |
| sub q1 { # first question ...
 | |
|   my ($answer,$end);
 | |
|   while (! $end) {
 | |
|     print "#"x70;
 | |
|     print "\n";
 | |
|     print "## Welcome to the permission setter $version for MySQL.\n";
 | |
|     print "## made by Luuk de Boer\n";
 | |
|     print "#"x70;
 | |
|     print "\n";
 | |
|     print "What would you like to do:\n";
 | |
|     print "  1. Set password for an existing user.\n";
 | |
|     print "  2. Create a database + user privilege for that database\n";
 | |
| 		print "     and host combination (user can only do SELECT)\n";
 | |
|     print "  3. Create/append user privilege for an existing database\n";
 | |
| 		print "     and host combination (user can only do SELECT)\n";
 | |
|     print "  4. Create/append broader user privileges for an existing\n";
 | |
| 		print "     database and host combination\n";
 | |
| 		print "     (user can do SELECT,INSERT,UPDATE,DELETE)\n";
 | |
|     print "  5. Create/append quite extended user privileges for an\n";
 | |
| 		print "     existing database and host combination (user can do\n";
 | |
| 		print "     SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,\n";
 | |
| 		print "     LOCK TABLES,CREATE TEMPORARY TABLES)\n";
 | |
|     print "  6. Create/append database administrative privileges for an\n";
 | |
| 		print "     existing database and host combination (user can do\n";
 | |
| 		print "     SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,\n";
 | |
| 		print "     CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS)\n";
 | |
|     print "  7. Create/append full privileges for an existing database\n";
 | |
| 		print "     and host combination (user has FULL privilege)\n";
 | |
|     print "  8. Remove all privileges for for an existing database and\n";
 | |
| 		print "     host combination.\n";
 | |
|     print "     (user will have all permission fields set to N)\n";
 | |
|     print "  0. exit this program\n";
 | |
|     print "\nMake your choice [1,2,3,4,5,6,7,0]: ";
 | |
|     while (<STDIN>) {
 | |
|       $answer = $_;
 | |
|       chomp($answer);
 | |
|       if ($answer =~ /^[12345678]$/) {
 | |
|         if ($answer == 1) {
 | |
| 	   setpwd();
 | |
|         } elsif ($answer =~ /^[2345678]$/) {
 | |
| 	   addall($answer);
 | |
| 	} else {
 | |
|           print "Sorry, something went wrong. With such option number you should not get here.\n\n";
 | |
|           $end = 1;
 | |
|         }
 | |
|       } elsif ($answer == 0) {
 | |
|         print "We hope we can help you next time \n\n";
 | |
| 	$end = 1;
 | |
|       } else {
 | |
|         print "Your answer was $answer\n";
 | |
|         print "and that's wrong .... Try again\n";
 | |
|       }
 | |
|       last;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| ###
 | |
| # set a password for a user
 | |
| ###
 | |
| sub setpwd
 | |
| {
 | |
|   my ($user,$pass,$host) = "";
 | |
|   print "\n\nSetting a (new) password for a user.\n";
 | |
| 
 | |
|   $user = user();
 | |
|   $pass = newpass($user);
 | |
|   $host = hosts($user);
 | |
| 
 | |
|   print "#"x70;
 | |
|   print "\n\n";
 | |
|   print "That was it ... here is an overview of what you gave to me:\n";
 | |
|   print "The username 		: $user\n";
 | |
| #  print "The password		: $pass\n";
 | |
|   print "The host		: $host\n";
 | |
|   print "#"x70;
 | |
|   print "\n\n";
 | |
|   print "Are you pretty sure you would like to implement this [yes/no]: ";
 | |
|   my $no = <STDIN>;
 | |
|   chomp($no);
 | |
|   if ($no =~ /n/i)
 | |
|   {
 | |
|     print "Okay .. that was it then ... See ya\n\n";
 | |
|     return(0);
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     print "Okay ... let's go then ...\n\n";
 | |
|   }
 | |
|   $user = $dbh->quote($user);
 | |
|   $host = $dbh->quote($host);
 | |
|   if ($pass eq '')
 | |
|   {
 | |
|     $pass = "''";
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     $pass = "PASSWORD(". $dbh->quote($pass) . ")";
 | |
|   }
 | |
|   my $sth = $dbh->prepare("update user set Password=$pass where User = $user and Host = $host") || die $dbh->errstr;
 | |
|   $sth->execute || die $dbh->errstr;
 | |
|   $sth->finish;
 | |
|   print "The password is set for user $user.\n\n";
 | |
| 
 | |
| }
 | |
| 
 | |
| ###
 | |
| # all things which will be added are done here
 | |
| ###
 | |
| sub addall {
 | |
|   my ($todo) = @_;
 | |
|   my ($answer,$good,$db,$user,$pass,$host,$priv);
 | |
| 
 | |
|   if ($todo == 2) {
 | |
|     $db = newdatabase();
 | |
|   } else {
 | |
|     $db = database();
 | |
|   }
 | |
| 
 | |
|   $user = newuser();
 | |
|   $pass = newpass("$user");
 | |
|   $host = newhosts();
 | |
| 
 | |
|   print "#"x70;
 | |
|   print "\n\n";
 | |
|   print "That was it ... here is an overview of what you gave to me:\n";
 | |
|   print "The database name	: $db\n";
 | |
|   print "The username 		: $user\n";
 | |
| #  print "The password		: $pass\n";
 | |
|   print "The host(s)		: $host\n";
 | |
|   print "#"x70;
 | |
|   print "\n\n";
 | |
|   print "Are you pretty sure you would like to implement this [yes/no]: ";
 | |
|   my $no = <STDIN>;
 | |
|   chomp($no);
 | |
|   if ($no =~ /n/i) {
 | |
|     print "Okay .. that was it then ... See ya\n\n";
 | |
|     return(0);
 | |
|   } else {
 | |
|     print "Okay ... let's go then ...\n\n";
 | |
|   }
 | |
| 
 | |
|   if ($todo == 2) {
 | |
|     # create the database
 | |
|     if ($db) {
 | |
|     my $sth = $dbh->do("CREATE DATABASE $db") || $dbh->errstr;
 | |
|     } else {
 | |
|       print STDERR "What do you want? You wanted to create new database and add new user, right?\n";
 | |
|       die "But then specify databasename, please\n";
 | |
|   }
 | |
|   }
 | |
| 
 | |
|   if ( ( !$todo ) or not ( $todo =~ m/^[2-8]$/ ) ) {
 | |
|     print STDERR "Sorry, select option $todo isn't known inside the program .. See ya\n";
 | |
|     quit();
 | |
|   }
 | |
| 
 | |
|   my @hosts = split(/,/,$host);
 | |
|   if (!$user) {
 | |
|      die "username not specified: $user\n";
 | |
|   }
 | |
|   if (!$db) {
 | |
|      die "databasename is not specified nor *\n";
 | |
|   }
 | |
|   foreach $host (@hosts) {
 | |
|     # user privileges: SELECT
 | |
|     if (($todo == 2) || ($todo == 3)) {
 | |
|       $sth = $dbh->do("GRANT SELECT ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
 | |
|     } elsif ($todo == 4) {
 | |
|       # user privileges: SELECT,INSERT,UPDATE,DELETE
 | |
|       $sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
 | |
|     } elsif ($todo == 5) {
 | |
|       # user privileges: SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES
 | |
|       $sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
 | |
|     } elsif ($todo == 6) {
 | |
|        # admin privileges: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS
 | |
|        $sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
 | |
|     } elsif ($todo == 7) {
 | |
|        # all privileges
 | |
|        $sth = $dbh->do("GRANT ALL ON $db.* TO \'$user\'\@\'$host\' IDENTIFIED BY \'$pass\'") || die $dbh->errstr;
 | |
|     } elsif ($todo == 8) {
 | |
|        # all privileges set to N
 | |
|        $sth = $dbh->do("REVOKE ALL ON *.* FROM \'$user\'\@\'$host\'") || die $dbh->errstr;
 | |
|     }
 | |
|     }
 | |
|   $dbh->do("FLUSH PRIVILEGES") || print STDERR "Can't flush privileges\n";
 | |
|   print "Everything is inserted and mysql privileges have been reloaded.\n\n";
 | |
| }
 | |
| 
 | |
| ###
 | |
| # ask for a new database name
 | |
| ###
 | |
| sub newdatabase {
 | |
|   my ($answer,$good,$db);
 | |
|   print "\n\nWhich database would you like to add: ";
 | |
|   while (<STDIN>) {
 | |
|     $answer = $_;
 | |
|     $good = 0;
 | |
|     chomp($answer);
 | |
|     if ($answer) {
 | |
|       my $sth = $dbh->prepare("SHOW DATABASES") || die $dbh->errstr;
 | |
|       $sth->execute || die $dbh->errstr;
 | |
|       while (my @r = $sth->fetchrow_array) {
 | |
|         if ($r[0] eq $answer) {
 | |
|           print "\n\nSorry, this database name is already in use; try something else: ";
 | |
|           $good = 1;
 | |
|         }
 | |
|       }
 | |
|     } else {
 | |
|       print "You must type something ...\nTry again: ";
 | |
|       next;
 | |
|     }
 | |
|     last if ($good == 0);
 | |
|   }
 | |
|   $db = $answer;
 | |
|   print "The new database $db will be created\n";
 | |
|   return($db);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # select a database
 | |
| ###
 | |
| sub database {
 | |
|   my ($answer,$good,$db);
 | |
|   print "\n\nWhich database from existing databases would you like to select: \n";
 | |
|   print "You can choose from: \n";
 | |
|   my $sth = $dbh->prepare("show databases") || die $dbh->errstr;
 | |
|   $sth->execute || die $dbh->errstr;
 | |
|   while (my @r = $sth->fetchrow_array) {
 | |
|     print "  - $r[0] \n";
 | |
|   }
 | |
|   print "Which database will it be (case sensitive). Type * for any: \n";
 | |
|   while (<STDIN>) {
 | |
|     $answer = $_;
 | |
|     $good = 0;
 | |
|     chomp($answer);
 | |
|     if ($answer) {
 | |
|       if ($answer eq "*") {
 | |
|         print "OK, the user entry will NOT be limited to any database";
 | |
|         return("*");
 | |
|       }
 | |
|       my $sth = $dbh->prepare("show databases") || die $dbh->errstr;
 | |
|       $sth->execute || die $dbh->errstr;
 | |
|       while (my @r = $sth->fetchrow_array) {
 | |
|         if ($r[0] eq $answer) {
 | |
|           $good = 1;
 | |
|           $db = $r[0];
 | |
|           last;
 | |
|         }
 | |
|       }
 | |
|     } else {
 | |
|         print "Type either database name or * meaning any databasename. That means";
 | |
|         print " any of those above but also any which will be created in future!";
 | |
|         print " This option gives a user chance to operate on databse mysql, which";
 | |
|         print " contains privilege settings. That is really risky!\n";
 | |
|       next;
 | |
|     }
 | |
|     if ($good == 1) {
 | |
|       last;
 | |
|     } else {
 | |
|       print "You must select one from the list.\nTry again: ";
 | |
|       next;
 | |
|     }
 | |
|   }
 | |
|   print "The database $db will be used.\n";
 | |
|   return($db);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # ask for a new username
 | |
| ###
 | |
| sub newuser
 | |
| {
 | |
|   my $user = "";
 | |
|   my $answer = "";
 | |
| 
 | |
|   print "\nWhat username is to be created: ";
 | |
|   while(<STDIN>)
 | |
|   {
 | |
|     $answer = $_;
 | |
|     chomp($answer);
 | |
|     if ($answer)
 | |
|     {
 | |
|       $user = $answer;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       print "You must type something ...\nTry again: ";
 | |
|       next;
 | |
|     }
 | |
|     last;
 | |
|   }
 | |
|   print "Username = $user\n";
 | |
|   return($user);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # ask for a user which is already in the user table
 | |
| ###
 | |
| sub user
 | |
| {
 | |
|   my ($answer,$user);
 | |
| 
 | |
|   print "\nFor which user do you want to specify a password: ";
 | |
|   while(<STDIN>)
 | |
|   {
 | |
|     $answer = $_;
 | |
|     chomp($answer);
 | |
|     if ($answer)
 | |
|     {
 | |
|       my $sth = $dbh->prepare("select User from user where User = '$answer'") || die $dbh->errstr;
 | |
|       $sth->execute || die $dbh->errstr;
 | |
|       my @r = $sth->fetchrow_array;
 | |
|       if ($r[0])
 | |
|       {
 | |
|         $user = $r[0];
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|        print "Sorry, user $answer isn't known in the user table.\nTry again: ";
 | |
|        next;
 | |
|      }
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       print "You must type something ...\nTry again: ";
 | |
|       next;
 | |
|     }
 | |
|     last;
 | |
|   }
 | |
|   print "Username = $user\n";
 | |
|   return($user);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # ask for a new password
 | |
| ###
 | |
| sub newpass
 | |
| {
 | |
|   my ($user) = @_;
 | |
|   my ($pass,$answer,$good,$yes);
 | |
| 
 | |
|   print "Would you like to set a password for $user [y/n]: ";
 | |
|   $yes = <STDIN>;
 | |
|   chomp($yes);
 | |
|   if ($yes =~ /y/)
 | |
|   {
 | |
|     system "stty -echo";
 | |
|     print "What password do you want to specify for $user: ";
 | |
|     while(<STDIN>)
 | |
|     {
 | |
|       $answer = $_;
 | |
|       chomp($answer);
 | |
|       system "stty echo";
 | |
|       print "\n";
 | |
|       if ($answer)
 | |
|       {
 | |
|         system "stty -echo";
 | |
|         print "Type the password again: ";
 | |
|         my $second = <STDIN>;
 | |
|         chomp($second);
 | |
|         system "stty echo";
 | |
|         print "\n";
 | |
|         if ($answer ne $second)
 | |
|         {
 | |
|           print "Passwords aren't the same; we begin from scratch again.\n";
 | |
|           system "stty -echo";
 | |
|           print "Password please: ";
 | |
|           next;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|           $pass = $answer;
 | |
|         }
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|         print "You must type something ...\nTry again: ";
 | |
|         next;
 | |
|       }
 | |
|       last;
 | |
|     }
 | |
| #    print "The password for $user is $pass.\n";
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     print "We won't set a password so the user doesn't have to use it\n";
 | |
|     $pass = "";
 | |
|   }
 | |
|   return($pass);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # ask for new hosts
 | |
| ###
 | |
| sub newhosts
 | |
| {
 | |
|   my ($host,$answer,$good);
 | |
| 
 | |
|   print "We now need to know from what host(s) the user will connect.\n";
 | |
|   print "Keep in mind that % means 'from any host' ...\n";
 | |
|   print "The host please: ";
 | |
|   while(<STDIN>)
 | |
|   {
 | |
|     $answer = $_;
 | |
|     chomp($answer);
 | |
|     if ($answer)
 | |
|     {
 | |
|       $host .= ",$answer";
 | |
|       print "Would you like to add another host [yes/no]: ";
 | |
|       my $yes = <STDIN>;
 | |
|       chomp($yes);
 | |
|       if ($yes =~ /y/i)
 | |
|       {
 | |
|         print "Okay, give us the host please: ";
 | |
|         next;
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|         print "Okay we keep it with this ...\n";
 | |
|       }
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       print "You must type something ...\nTry again: ";
 | |
|       next;
 | |
|     }
 | |
|     last;
 | |
|   }
 | |
|   $host =~ s/^,//;
 | |
|   print "The following host(s) will be used: $host.\n";
 | |
|   return($host);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # ask for a host which is already in the user table
 | |
| ###
 | |
| sub hosts
 | |
| {
 | |
|   my ($user) = @_;
 | |
|   my ($answer,$good,$host);
 | |
| 
 | |
|   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;
 | |
|   $sth->execute || die $dbh->errstr;
 | |
|   while (my @r = $sth->fetchrow_array)
 | |
|   {
 | |
|     print "  - $r[0] \n";
 | |
|   }
 | |
|   print "The host please (case sensitive): ";
 | |
|   while(<STDIN>)
 | |
|   {
 | |
|     $answer = $_;
 | |
|     chomp($answer);
 | |
|     if ($answer)
 | |
|     {
 | |
|       $sth = $dbh->prepare("select Host,User from user where Host = '$answer' and User = $user") || die $dbh->errstr;
 | |
|       $sth->execute || die $dbh->errstr;
 | |
|       my @r = $sth->fetchrow_array;
 | |
|       if ($r[0])
 | |
|       {
 | |
|         $host = $answer;
 | |
|         last;
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|         print "You have to select a host from the list ...\nTry again: ";
 | |
|         next;
 | |
|       }
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       print "You have to type something ...\nTry again: ";
 | |
|       next;
 | |
|     }
 | |
|     last;
 | |
|   }
 | |
|   print "The following host will be used: $host.\n";
 | |
|   return($host);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # a nice quit (first disconnect and then exit
 | |
| ###
 | |
| sub quit
 | |
| {
 | |
|   $dbh->disconnect;
 | |
|   exit(0);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # Read variables password, port and socket from .my.cnf under the client
 | |
| # or perl groups
 | |
| ###
 | |
| 
 | |
| sub read_my_cnf
 | |
| {
 | |
|   open(TMP,$ENV{'HOME'} . "/.my.cnf") || return 1;
 | |
|   while (<TMP>)
 | |
|   {
 | |
|     if (/^\[(client|perl)\]/i)
 | |
|     {
 | |
|       while ((defined($_=<TMP>)) && !/^\[\w+\]/)
 | |
|       {
 | |
| 	print $_;
 | |
| 	if (/^host\s*=\s*(\S+)/i)
 | |
| 	{
 | |
| 	  $opt_host = $1;
 | |
| 	}
 | |
| 	elsif (/^user\s*=\s*(\S+)/i)
 | |
| 	{
 | |
| 	  $opt_user = $1;
 | |
| 	}
 | |
| 	elsif (/^password\s*=\s*(\S+)/i)
 | |
| 	{
 | |
| 	  $opt_password = $1;
 | |
| 	}
 | |
| 	elsif (/^port\s*=\s*(\S+)/i)
 | |
| 	{
 | |
| 	  $opt_port = $1;
 | |
| 	}
 | |
| 	elsif (/^socket\s*=\s*(\S+)/i)
 | |
| 	{
 | |
| 	  $opt_socket = $1;
 | |
| 	}
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   close(TMP);
 | |
| }
 | |
| 
 | |
| ###
 | |
| # the help text
 | |
| ###
 | |
| sub usage
 | |
| {
 | |
|   print <<EOL;
 | |
| ----------------------------------------------------------------------
 | |
|                  The permission setter for MySQL.
 | |
|                       version: $version
 | |
| 
 | |
|                  made by: Luuk de Boer <luuk\@wxs.nl>
 | |
| ----------------------------------------------------------------------
 | |
| 
 | |
| The permission setter is a little program which can help you add users
 | |
| or databases or change passwords in MySQL. Keep in mind that we don't
 | |
| check permissions which already been set in MySQL. So if you can't
 | |
| connect to MySQL using the permission you just added, take a look at
 | |
| the permissions which have already been set in MySQL.
 | |
| 
 | |
| The permission setter first reads your .my.cnf file in your Home
 | |
| directory if it exists.
 | |
| 
 | |
| Options for the permission setter:
 | |
| 
 | |
| --help		: print this help message and exit.
 | |
| 
 | |
| The options shown below are used for making the connection to the MySQL
 | |
| server. Keep in mind that the permissions for the user specified via
 | |
| these options must be sufficient to add users / create databases / set
 | |
| passwords.
 | |
| 
 | |
| --user		: is the username to connect with.
 | |
| --password	: the password of the username.
 | |
| --host		: the host to connect to.
 | |
| --socket	: the socket to connect to.
 | |
| --port		: the port number of the host to connect to.
 | |
| 
 | |
| If you don't give a password and no password is set in your .my.cnf
 | |
| file, then the permission setter will ask for a password.
 | |
| 
 | |
| 
 | |
| EOL
 | |
| exit(0);
 | |
| }
 |