ispman/lib database.MySQL.lib,NONE,1.1
Joerg Delker <[email protected]> Mon, 29 Dec 2008 16:21:48 +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-serv30876/lib
Added Files:
database.MySQL.lib
Log Message:
added database MySQL library
--- NEW FILE: database.MySQL.lib ---
$dbadmin = $ispman->getConf("dbAdminName");
$dbpass = $ispman->getConf("dbAdminPass");
$defaultsfile = "/tmp/ispman.mysql.cnf";
%cmnds = (
mysql => "mysql",
mysqladmin => "mysqladmin",
mysqldump => "mysqldump" );
sysopen( DEF, $defaultsfile, O_WRONLY | O_TRUNC | O_CREAT, 0600 )
|| die("unable to create $defaultsfile");
print DEF qq|
[client]
host = localhost
user = $dbadmin
password = $dbpass
socket = /var/run/mysqld/mysqld.sock
|;
close DEF;
# prepare MySQL user notation
sub sql_user {
my ( $user, $host ) = @_;
return "\'" . $user . "\'\@\'" . $host . "\'";
}
# prepare GRANT SQL statement
sub sql_grant {
my $params = shift;
# evaluate privileges
my @privs;
my @priv_opts;
foreach ( split ",", $params->{'ispmanDBPrivilege'} ) {
if ( $_ eq "GRANT" ) { push @priv_opts, "GRANT OPTION" }
else { push @privs, $_; }
}
# skip if no privileges given
return if scalar(@privs) == 0;
# we need to go the dirty way of revoking the table grants,
# because REVOKE fails if no privileges exist yet
my $sql = "DELETE FROM mysql.db"
. " WHERE Db=\'" . $params->{'ispmanDBName'} . "\'"
. " AND User=\'" . $params->{'ispmanDBUser'} . "\'"
. " AND Host=\'" . $params->{'ispmanDBAccessFilter'} . "\';";
$sql .=
"GRANT " . join( ",", @privs )
. " ON " . $params->{'ispmanDBName'} . ".*"
. " TO " . sql_user( $params->{'ispmanDBUser'}, $params->{'ispmanDBAccessFilter'} )
. " IDENTIFIED BY PASSWORD \'" . $params->{'ispmanDBPass'} . "\'"
. (( scalar(@priv_opts) > 0 ) ? " WITH " . join( ",", @priv_opts ) : "") . ";";
return $sql;
}
# generate CMD for add database
sub add_database {
my $params = shift;
my $sql = "CREATE DATABASE " . $params->{'ispmanDBName'} . ";";
$sql .= sql_grant($params);
return "echo \"$sql\" | $cmnds{'mysql'} --defaults-file=$defaultsfile";
}
# generate CMD for update database
sub update_database {
my $params = shift;
my $sql="";
# DBHost change
if ($params->{'old_ispmanDBHost'} ne $params->{'new_ispmanDBHost'}) {
print STDERR "Error: Function not implemented!\n";
return;
}
# DBUser or DBAccessFilter change
if ($params->{'old_ispmanDBUser'} ne $params->{'new_ispmanDBUser'} ||
$params->{'old_ispmanDBAccessFilter'} ne $params->{'new_ispmanDBAccessFilter'}) {
$sql .= sql_grant(
{ ispmanDBName => $params->{'new_ispmanDBName'},
ispmanDBPrivilege => $params->{'new_ispmanDBPrivilege'},
ispmanDBUser => $params->{'new_ispmanDBUser'},
ispmanDBAccessFilter => $params->{'new_ispmanDBAccessFilter'},
ispmanDBPass => $params->{'new_ispmanDBPass'},
} );
$sql .= "DROP USER ".sql_user($params->{'old_ispmanDBUser'},$params->{'old_ispmanDBAccessFilter'}).";";
$sql .= "FLUSH PRIVILEGES;";
}
# DBPass change
if ($params->{'old_ispmanDBPass'} ne $params->{'new_ispmanDBPass'}) {
$sql .= "SET PASSWORD FOR ".sql_user( $params->{'new_ispmanDBUser'}, $params->{'new_ispmanDBAccessFilter'})
. " = \'". $params->{'new_ispmanDBPass'} ."\';";
}
# DBPrivilege change
if ($params->{'old_ispmanDBPrivilege'} ne $params->{'new_ispmanDBPrivilege'}) {
$sql .= sql_grant(
{ ispmanDBName => $params->{'new_ispmanDBName'},
ispmanDBPrivilege => $params->{'new_ispmanDBPrivilege'},
ispmanDBUser => $params->{'new_ispmanDBUser'},
ispmanDBAccessFilter => $params->{'new_ispmanDBAccessFilter'},
ispmanDBPass => $params->{'new_ispmanDBPass'},
} );
$sql .= "FLUSH PRIVILEGES;";
}
return "echo \"$sql\" | $cmnds{mysql} --defaults-file=$defaultsfile" if $sql;
}
# generate CMD for delete database
sub delete_database {
my $params = shift;
my $sql =
"DROP USER "
. sql_user( $params->{'ispmanDBUser'}, $params->{'ispmanDBAccessFilter'} )
. ";";
$sql .= "DROP DATABASE " . $params->{'ispmanDBName'} . ";";
return "echo \"$sql\" | $cmnds{mysql} --defaults-file=$defaultsfile";
}
sub rename_database {
my $params = shift;
my @cmd;
my $bakfile = tmpnam();
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";
# to be uncommented by the brave...
#push @cmd, "$cmnds{mysqladmin} --defaults-file=$defaultsfile -f drop $olddb";
unlink($bakfile);
# migrate privilege
push @cmd, "echo \"update mysql.db set Db=\'$newdb\' where Db=\'$olddb\' \" | "
. "$cmnds{mysql} --defaults-file=$defaultsfile";
return @cmd;
}
END {
unlink($defaultsfile);
}
1;
------------------------------------------------------------------------------