|
From: Joerg D. <jd...@us...> - 2009-07-25 19:33:17
|
Update of /cvsroot/ispman/ispman/lib In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv1987 Modified Files: database.MySQL.lib Log Message: fixed bug with "-" in DB name modified tmp file handling Index: database.MySQL.lib =================================================================== RCS file: /cvsroot/ispman/ispman/lib/database.MySQL.lib,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- database.MySQL.lib 6 Feb 2009 10:13:17 -0000 1.5 +++ database.MySQL.lib 25 Jul 2009 19:33:07 -0000 1.6 @@ -1,15 +1,21 @@ +use File::Temp; + +# get MySQL Admin credentials $dbadmin = $ispman->getConf("dbAdminName"); $dbpass = $ispman->getConf("dbAdminPass"); -$defaultsfile = "/tmp/ispman.mysql.cnf"; +# create tmp dir +my $tmpdir = File::Temp::tempdir(CLEANUP => 1); -%cmnds = ( +my $mysql_defaults = "$tmpdir/ispman.mysql.cnf"; + +my %cmnds = ( mysql => "mysql", mysqladmin => "mysqladmin", mysqldump => "mysqldump" ); -sysopen( DEF, $defaultsfile, O_WRONLY | O_TRUNC | O_CREAT, 0600 ) - || die("unable to create $defaultsfile"); +sysopen( DEF, $mysql_defaults, O_WRONLY | O_TRUNC | O_CREAT, 0600 ) + || die("unable to create $mysql_defaults"); print DEF qq| [client] host = localhost @@ -19,6 +25,17 @@ |; close DEF; +sub build_exec { + my $sql = shift; + + my ($fh, $filename) = File::Temp::tempfile(DIR => $tmpdir); + + print $fh $sql; + close $fh; + + return "$cmnds{'mysql'} --defaults-file=$mysql_defaults < $filename"; +} + # prepare MySQL user notation sub sql_user { my ( $user, $host ) = @_; @@ -48,7 +65,7 @@ . " AND Host=\'" . $params->{'ispmanDBAccessFilter'} . "\';"; $sql .= "GRANT " . join( ",", @privs ) - . " ON " . $params->{'ispmanDBName'} . ".*" + . " ON `" . $params->{'ispmanDBName'} . "`.*" . " TO " . sql_user( $params->{'ispmanDBUser'}, $params->{'ispmanDBAccessFilter'} ) . " IDENTIFIED BY PASSWORD \'" . $params->{'ispmanDBPass'} . "\'" . (( scalar(@priv_opts) > 0 ) ? " WITH " . join( ",", @priv_opts ) : "") . ";"; @@ -59,13 +76,12 @@ sub add_database { my $params = shift; - my $sql = "CREATE DATABASE " . $params->{'ispmanDBName'} . " IF NOT EXISTS;"; + my $sql = "CREATE DATABASE `" . $params->{'ispmanDBName'} . "`;"; $sql .= sql_grant($params); $sql .= "use " . $params->{'ispmanDBName'} . ";"; - $sql .= join ";", map { "\\. " . ((/^\//)?$_:($ispman->getConf{'installDir'}."/tasks/$_")) } + $sql .= join ";", map { "\\. " . (($_ =~ /^\//)?$_:($ispman->getConf('installDir')."/tasks/$_")) } split('\|',$params->{'actions'}); - - return "echo \"$sql\" | $cmnds{'mysql'} --defaults-file=$defaultsfile"; + return build_exec($sql); } @@ -113,7 +129,7 @@ $sql .= "FLUSH PRIVILEGES;"; } - return "echo \"$sql\" | $cmnds{mysql} --defaults-file=$defaultsfile" if $sql; + return build_exec($sql); } @@ -122,12 +138,12 @@ my $params = shift; my $sql = - "DELETE FROM mysql.user " - . "WHERE User=\'" . $params->{'ispmanDBUser'} . "\' " - . "AND Host=\'" . $params->{'ispmanDBAccessFilter'} . "\';"; - $sql .= "DROP DATABASE " . $params->{'ispmanDBName'} . ";"; + "DROP USER " + . sql_user( $params->{'ispmanDBUser'}, $params->{'ispmanDBAccessFilter'} ) + . ";"; + $sql .= "DROP DATABASE `" . $params->{'ispmanDBName'} . "`;"; - return "echo \"$sql\" | $cmnds{mysql} --defaults-file=$defaultsfile"; + return build_exec($sql); } @@ -135,29 +151,24 @@ my $params = shift; my @cmd; - my $bakfile = tmpnam(); + my $bakfile = mktemp("$tmpdir/sqlbakXXXXXX"); my $olddb = $params->{'old_ispmanDBName'}; my $newdb = $params->{'new_ispmanDBName'}; - push @cmd, "$cmnds{mysqldump} --defaults-file=$defaultsfile -r $bakfile $olddb"; - push @cmd, "$cmnds{mysqladmin} --defaults-file=$defaultsfile create $newdb"; - push @cmd, "$cmnds{mysql} --defaults-file=$defaultsfile $newdb < $bakfile"; + push @cmd, "$cmnds{mysqldump} --defaults-file=$mysql_defaults -r $bakfile $olddb"; + push @cmd, "$cmnds{mysqladmin} --defaults-file=$mysql_defaults create $newdb"; + push @cmd, "$cmnds{mysql} --defaults-file=$mysql_defaults $newdb < $bakfile"; # to be uncommented by the brave... - #push @cmd, "$cmnds{mysqladmin} --defaults-file=$defaultsfile -f drop $olddb"; - unlink($bakfile); + push @cmd, "$cmnds{mysqladmin} --defaults-file=$mysql_defaults -f drop $olddb"; # migrate privilege - push @cmd, "echo \"update mysql.db set Db=\'$newdb\' where Db=\'$olddb\' \" | " - . "$cmnds{mysql} --defaults-file=$defaultsfile"; + my $sql = "update mysql.db set Db=\'$newdb\' where Db=\'$olddb\';"; + push @cmd, build_exec($sql); return @cmd; } -END { - unlink($defaultsfile); -} - 1; |