• File: cpaneldownload-20260424021112.cgi
  • Full Path: /home/romi/public_html/cgi-bin-20260422142752/cpdownload/cpaneldownload-20260424021112.cgi
  • Date Modified: 12/11/2008 6:23 AM
  • File size: 2.08 KB
  • MIME-type: text/x-perl
  • Charset: utf-8
#!/usr/bin/perl
# cpanel12 - cpaneldownload.cgi              Copyright(c) 1997-2006 cPanel, Inc.
#                                                           All Rights Reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

eval "use Digest::MD5::File;";
my $has_md5_file = $@ ? 0 : 1;

$| = 1;

print "Content-type: text/html\r\n\r\n";
exit if $> == 0;

$SIG{'ALRM'} = sub {
    print "Backup timeout!\n";
    exit 1;
};

my $homedir = ( getpwuid($>) )[7];
my $user    = ( getpwuid($>) )[0];

if ( !$homedir || !-d $homedir ) {
    print "Unable to gather account information for user's home directory\n";
    exit 1;
}

alarm 5400;

system '/usr/local/cpanel/bin/backupwrap', 'BACKUP', 'homedir';    # Command creates archive in background

sleep 1;

my @archives = glob $homedir . '/backup-*_' . $user . '.tar.gz';
if ( !@archives ) {
    print "Unable to generate transfer archive!\n";
    exit 1;
}

my $archive = pop @archives;

while ( (stat($archive))[7] < 2000 ) {
    print ".\n";
    sleep 1;
}

print "DOWNLOAD READY in $archive\n";
my $md5 = get_file_md5($archive);
if ( $md5 ) {
    print "md5sum is: $md5\n";
}
print "\n";
exit;

sub get_file_md5 {
    my $file = shift;
    return if !$file || !-e $file;
    if ( $has_md5_file ) {
        return Digest::MD5::File::file_md5_hex($file);
    }
    else {
        # Linux
        foreach my $md5sum ( qw( /bin/md5sum /usr/bin/md5sum /usr/local/bin/md5sum /usr/sbin/md5sum /usr/local/sbin/md5sum ) ) {
            if ( -x $md5sum ) {
                my $md5_hex = `$md5sum $file`;
                chomp $md5_hex;
                $md5_hex =~ m/^\s*(\S+)\s+/;
                return $1;
            }
        }
        # BSD
        foreach my $md5sum ( qw( /bin/md5 /usr/bin/md5 /usr/local/bin/md5 /usr/sbin/md5 /usr/local/sbin/md5 ) ) {
            if ( -x $md5sum ) {
                my $md5_hex = `$md5sum $file`;
                chomp $md5_hex;
                $md5_hex =~ m/[=]\s+(\S+)\s*$/;
                return $1;
            }
        }
    }
}