D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
blackhat.pw
:
/
kunden
/
kunden
/
proc
/
self
/
root
/
lib
/
susshi
/
exec
/
Filename :
stage-create
back
Copy
#!/usr/bin/perl use warnings; use strict; use lib '/usr/lib/susshi/exec'; use Susshi; use IPC::Run qw( run timeout harness ); my ($dump, $filter, $import, $db_src, $db_dst); my $susshi = Susshi->new ( -read_input => 1 ); if ($db_src = $susshi->get_database('sourcedatabase')) { $db_dst = $susshi->get_database('targetdatabase', -mandatory => 1); } if ($db_src && $db_dst) { my $tables; eval { (undef, $tables) = $db_dst->get_tables(); # Delete tables in target DB (see SHAHOLIN-5440) $db_dst->drop_tables( $tables ); (undef, $tables) = $db_src->get_tables(); }; if ($@) { my $status = ($@ =~ /^Access denied/) ? 25 : 255; error_die "Cannot get tables: $@", $status; } $dump = [ 'mysqldump', '--skip-add-drop-table' ]; push @$dump, $db_src->get_mysql_args; push @$dump, @$tables; # Sanitize DEFINER to make unprivileged import work (ITOSHL-26999) my $definer_re = sprintf('DEFINER\s*=\s*`%s`@\S+', $db_src->{username}); # include source username $filter = [ 'sed', '-E', 's%^(/\*\![0-9]+\s+)' . $definer_re . '(\s+.*\*/)$%\1DEFINER=CURRENT_USER\2%' ]; $import = [ 'mysql' ]; push @$import, $db_dst->get_mysql_args; } my $dir_src = $susshi->get_directory('sourcedirectory', -mandatory => 1, -must_exist => 1); my $dir_dst = $susshi->get_directory('targetdirectory', -mandatory => 1); # Remove target in file system (SHAHOLIN-5440) if (-e $dir_dst) { info "Removing content of $dir_dst"; run ['rm', '-rf', $dir_dst] or error_die "Could not remove $dir_dst"; } my $rsync = ['rsync', '-rt', "$dir_src/", "$dir_dst/"]; eval { my $err; if (defined $dump) { $err=''; my $h=harness $dump, '|', $filter, '|', $import, '2>', \$err, timeout (3600); $h->run or die $err; } $err=''; run $rsync, '2>', \$err, timeout (3600) or die $err; }; error_die "Could not copy data: $@" if $@; info "Created stage"; exit 0;