Server IP : 103.119.228.120 / Your IP : 3.14.250.187 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/custom_backup_destination.pl.sample # Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited use strict; use warnings; use Cwd qw(getcwd abs_path); use File::Spec; use File::Copy; use File::Path qw(make_path remove_tree); use autodie qw(:all copy); # These are the commands that a custom destination script must process my %commands = ( put => \&my_put, get => \&my_get, ls => \&my_ls, mkdir => \&my_mkdir, chdir => \&my_chdir, rmdir => \&my_rmdir, delete => \&my_delete, ); # There must be at least the command and the local directory usage() if ( @ARGV < 2 ); # # The command line arguments passed to the script will be in the following order: # command, local_directory, command arguments, and optionally, host and user # The local directory is passed in so we know from which directory to run the command # we need to pass this in each time since we start the script fresh for each command # my ( $cmd, $local_dir, @args ) = @ARGV; # complain if the command does not exist usage() unless exists $commands{$cmd}; # For this example transport, we are going to simply copy everything under this directory my $dest_root_dir = '/custom_transport_demo'; mkdir $dest_root_dir unless -d $dest_root_dir; # Step into the local directory # This will be under the directory that we have as the file destination $local_dir = File::Spec->catdir( $dest_root_dir, $local_dir ); make_path($local_dir) unless -d $local_dir; chdir $local_dir; # Run our command $commands{$cmd}->(@args); # # This script should only really be executed by the custom backup destination type # If someone executes it directly out of curiosity, give them usage info # sub usage { my @cmds = sort keys %commands; print STDERR "This script is for implementing a custom backup destination\n"; print STDERR "It requires the following arguments: cmd, local_dir, cmd_args\n"; print STDERR "These are the valid commands: @cmds\n"; exit 1; } # # Convert a path to be under our destination directory # Absolute paths will be directly under it, # relative paths will be relative to the local directory # sub convert_path { my ($path) = @_; if ( $path =~ m|^/| ) { $path = File::Spec->catdir( $dest_root_dir, $path ); } else { $path = File::Spec->catdir( $local_dir, $path ); } return $path; } # # Convert a full path to the path under the the directory # where we copy all the files # sub get_sub_directory { my ($path) = @_; # The first part will be the destination root directory, # Remove that part of the path and we will have the subdirectory $path =~ s|^$dest_root_dir||; return $path; } # # This portion contains the implementations for the various commands # that the script needs to support in order to implement a custom destination # # # Copy a local file to a remote destination # sub my_put { my ( $local, $remote ) = @_; $remote = convert_path($remote); # Make sure the full destination directory exists my ( undef, $dir, undef ) = File::Spec->splitpath($remote); make_path($dir) unless ( $dir and -d $dir ); copy( $local, $remote ); return; } # # Copy a remote file to a local destination # sub my_get { my ( $remote, $local ) = @_; $remote = convert_path($remote); copy( $remote, $local ); return; } # # Print out the results of doing an ls operation # The calling program will expect the data to be # in the format supplied by 'ls -l' and have it # printed to STDOUT # sub my_ls { my ($path) = @_; $path = convert_path($path); # Cheesy, but this is a demo my $ls = `ls -al $path`; # Remove the annoying 'total' line $ls =~ s|^total[^\n]*\n||; print $ls; return; } # # Create a directory on the remote destination # sub my_mkdir { my ($path) = @_; $path = convert_path($path); make_path($path); die "Failed to create $path" unless -d $path; return; } # # Change into a directory on the remote destination # This does not have the same meaning as it normally would since the script # is run anew for each command call. # This needs to do the operation to ensure it doesn't fail # then print the new resulting directory that the calling program # will pass in as the local directory for subsequent calls # sub my_chdir { my ($path) = @_; $path = convert_path($path); chdir $path; print get_sub_directory( getcwd() ) . "\n"; return; } # # Recursively delete a directory on the remote destination # sub my_rmdir { my ($path) = @_; $path = convert_path($path); remove_tree($path); die "$path still exists" if -d $path; return; } # # Delete an individual file on the remote destination # sub my_delete { my ($path) = @_; $path = convert_path($path); unlink $path; return; }