ispman/lib database.MySQL.lib,1.5,1.6

Joerg Delker <[email protected]> Sat, 25 Jul 2009 19:33:09 +0000
Newsgroups gmane.comp.isp.ispman.cvs
Message-ID <[email protected]>
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;
 


------------------------------------------------------------------------------