----- Original Message -----
From: "Harry Rorarius" <[EMAIL PROTECTED]>
To: "Mysql list" <[EMAIL PROTECTED]>
Sent: Thursday, March 28, 2002 9:18 AM
Subject: Fw: sql


>
> ----- Original Message -----
> From: "Harry Rorarius" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Thursday, March 28, 2002 7:46 AM
> Subject: sql
>
>
> > I am a new comer to the sql world.  I have some but brief knowledge of
> perl.
> > here goes!
> >
> > I am using mysql on a Winnt platform and I have perl 5 installed on it.
I
> > did setup dbi in perl and I know that mod is working.  I have been
trying
> to
> > get one of the scripts that came with the copy of mysql
> > (mysql_setpermissions.pl) to work.  I have it in my cgi-bin (the only
> place
> > I execute perl scripts.  When I run this script it does nothing it just
> > hangs until the cgi times out.
> >
> > Most of the things I have read about in all the documentation and even
> this
> > mail help is reared for the Unix/Linux users.  I have tried to get a
linux
> > server to work but that is a different issue.
> >
> > anyways I must be missing some clues to get mysql to talk to my scripts
> and
> > to my web browser. Is there anyone out there with Winnt to mysql
> experience
> >
> > HELP!!!!
> >
> I have been working with this script (mysql_setpermissions.pl) for a while
> and I chanded the path for my.cnf because in Winnt Mysql uses my.ini and
> that is used for the admin program.  Mysql does not automaticly use
my.cnf,
> so I set the path.  The error I get know is:
> The specified CGI application misbehaved by not returning a complete set
of
> HTTP headers. The headers it did return are:
>
>
> syntax error at F:\web\cgi-bin\mysql_setpermission.pl line 71, near
> "exit(0); # the end."
>   (Might be a runaway multi-line .. string starting on line 67)
> Can't use global $_ in "my" at F:\web\cgi-bin\mysql_setpermission.pl line
> 102, near "= $_"
> syntax error at F:\web\cgi-bin\mysql_setpermission.pl line 118, near "}"
> Execution of F:\web\cgi-bin\mysql_setpermission.pl aborted due to
> compilation errors.
>
> This is the script:
>
> #!/perl/bin
> ## Emacs, this is -*- perl -*- mode? :-)
> ##
> ##        Permission setter for MySQL
> ##
> ##        mady by Luuk de Boer ([EMAIL PROTECTED]) 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)
>
> #### TODO
> #
> # empty ... suggestions ... mail them to me ...
>
>
> $version="1.2";
>
> use DBI;
> use Getopt::Long;
> use strict;
> use vars qw($dbh $hostname $opt_user $opt_password $opt_help $opt_host
>      $opt_socket $opt_port $host $version);
>
>
> $dbh=$host=$opt_user= $opt_password= $opt_help= $opt_host= $opt_socket=
"";
> $opt_port=0;
>
> #read_my_cnf();  # Read options from ~/.my.cnf
> read_c:/mysql/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 '')
> {
>   $hostname = "localhost";
> }
> else
> {
>   $hostname = $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=$hostname:port=$opt_port:mysql_socket=$op
> t_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 a user.\n";
>     print "  2. Add a database + user privilege for that database.\n";
>     print "     - user can do all except all admin functions\n";
>     print "  3. Add user privilege for an existing database.\n";
>     print "     - user can do all except all admin functions\n";
>     print "  4. Add user privilege for an existing database.\n";
>     print "     - user can do all except all admin functions + no
> create/drop\n";
>     print "  5. Add user privilege for an existing database.\n";
>     print "     - user can do only selects (no update/delete/insert
> etc.)\n";
>     print "  0. exit this program\n";
>     print "\nMake your choice [1,2,3,4,5,0]: ";
>     while (<STDIN>) {
>       $answer = $_;
>       chomp($answer);
>       if ($answer =~ /1|2|3|4|5|0/) {
>         &setpwd if ($answer == 1);
>         &addall($answer) if ($answer =~ /^[2345]$/);
>         if ($answer == 0) {
>           print "Sorry, 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();
>   $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
>     my $sth = $dbh->do("create database $db") || $dbh->errstr;
>   }
>
>   # select the privilege ....
>   if (($todo == 2) || ($todo == 3))
>   {
>     $priv = "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'";
>   }
>   elsif ($todo == 4)
>   {
>     $priv = "'Y','Y','Y','Y','N','N','N','Y','Y','Y'";
>   }
>   elsif ($todo == 5)
>   {
>     $priv = "'Y','N','N','N','N','N','N','N','N','N'";
>   }
>   else
>   {
>     print "Sorry, choice  number $todo isn't known inside the program ..
See
> ya\n";
>     quit();
>   }
>
>   my @hosts = split(/,/,$host);
>   $user = $dbh->quote($user);
>   $db = $dbh->quote($db);
>   if ($pass eq '')
>   {
>     $pass = "''";
>   }
>   else
>   {
>     $pass = "PASSWORD(". $dbh->quote($pass) . ")";
>   }
>   foreach my $key (@hosts)
>   {
>     my $key1 = $dbh->quote($key);
>     my $sth = $dbh->prepare("select Host,User from user where Host = $key1
> and User = $user") || die $dbh->errstr;
>     $sth->execute || die $dbh->errstr;
>     my @r = $sth->fetchrow_array;
>     if ($r[0])
>     {
>       print "WARNING WARNING SKIPPING CREATE FOR USER $user AND HOST
> $key\n";
>       print "Reason: entry already exists in the user table.\n";
>     }
>     else
>     {
>       $sth = $dbh->prepare("insert into user (Host,User,Password)
> values($key1,$user,$pass)") || die $dbh->errstr;
>       $sth->execute || die $dbh->errstr;
>       $sth->finish;
>     }
>     $sth = $dbh->prepare("INSERT INTO db
>
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Dr
> op_priv,Grant_priv,References_priv,Index_priv,Alter_priv) VALUES
> ($key1,$db,$user,$priv)") || die $dbh->errstr;
>     $sth->execute || die $dbh->errstr;
>     $sth->finish;
>   }
>   $dbh->do("flush privileges") || print "Can't load 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 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): ";
>   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)
>  {
>           $good = 1;
>           $db = $r[0];
>           last;
>         }
>       }
>     }
>     else
>     {
>       print "You must type something ...\nTry again: ";
>       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 ($answer,$user);
>
>   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 ($answer,$good,$pass,$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 ($answer,$good,$host);
>
>   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'} . "f:/web/sql/.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);
> }
>
>
OK I went through the entire script and I got the errors to stop.  now when
I execute the script it hangs and hangs until the cgi times out.  Is this
due to improper setup of the my.cnf file??
this is my.cnf:

# Example mysql config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# a important part and systems up to 128M very MySQL is used together with
# other programs (like a web server)
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /usr/local/mysql/var) or
# ~/.my.cnf to set user-specific options.
#
# One can in this file use all long options that the program supports.
# If you want to know which options a program support, run the program
# with --help option.

# The following options will be passed to all MySQL clients
[client]
#password = your_password
port  = 3306
socket  = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port  = 3306
socket  = /tmp/mysql.sock
skip-locking
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = table_cache=64
set-variable = sort_buffer=512K
set-variable = net_buffer_length=8K
set-variable = myisam_sort_buffer_size=8M
log-bin
server-id = 1

# Point the following paths to different dedicated disks
#tmpdir  = /tmp/
#log-update  = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables
#set-variable = bdb_cache_size=4M
#set-variable = bdb_max_lock=10000

# Uncomment the following if you are using Innobase tables
#innodb_data_file_path = ibdata1:400M
#innodb_data_home_dir = /usr/local/mysql/var/
#innodb_log_group_home_dir = /usr/local/mysql/var/
#innodb_log_arch_dir = /usr/local/mysql/var/
#set-variable = innodb_mirrored_log_groups=1
#set-variable = innodb_log_files_in_group=3
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#innodb_log_archive=0
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_file_io_threads=4
#set-variable = innodb_lock_wait_timeout=50

[mysqldump]
quick
set-variable = max_allowed_packet=16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
set-variable = key_buffer=20M
set-variable = sort_buffer=20M
set-variable = read_buffer=2M
set-variable = write_buffer=2M

[myisamchk]
set-variable = key_buffer=20M
set-variable = sort_buffer=20M
set-variable = read_buffer=2M
set-variable = write_buffer=2M

[mysqlhotcopy]
interactive-timeout

[WinMySQLadmin]
Server=C:/mysql/bin/mysqld-nt.exe
host=localhost
user=root
password=
user=harryr
password=


> >
> > ---------------------------------------------------------------------
> > Before posting, please check:
> >    http://www.mysql.com/manual.php   (the manual)
> >    http://lists.mysql.com/           (the list archive)
> >
> > To request this thread, e-mail <[EMAIL PROTECTED]>
> > To unsubscribe, e-mail
> <[EMAIL PROTECTED]>
> > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> >
> >
>
>
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail <mysql-unsubscribe-##L=##[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>
>


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <mysql-unsubscribe-##L=##[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to