----- 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