✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ server.blackpussy.asia ​🇻​♯➤ 5.14.0-611.20.1.el9_7.x86_64 #1 SMP 🇾​♯➤ 2026

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 163.245.207.76 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.243
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗞 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ mail,mb_send_mail
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /usr/local/cpanel/scripts//convert_roundcube_mysql2sqlite
#!/usr/local/cpanel/3rdparty/bin/perl

# cpanel - scripts/convert_roundcube_mysql2sqlite  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 Script::RCube::Mysql2Sqlite;

use strict;
## no critic (RequireUseWarnings)
use Try::Tiny;

use Cpanel::AccessIds::ReducedPrivileges ();
use Cpanel::Config::LoadCpConf           ();
use Cpanel::MysqlUtils                   ();
use Cpanel::DbUtils                      ();
use Cpanel::MysqlUtils::Connect          ();
use Cpanel::MysqlUtils::Command          ();
use Cpanel::MysqlRun                     ();
use Cpanel::Config::LoadUserDomains      ();
use Cpanel::Email::RoundCube             ();
use Cpanel::Email::RoundCube::DBI        ();
use Cpanel::Quota::Temp                  ();

use Cpanel::PwCache       ();
use Cpanel::Logger        ();
use Cpanel::Filesys::Home ();

use File::Basename ();
use File::Copy     ();
use File::Path     ();
use File::Slurper  ();
use DBI;
use XML::Simple ();
use IPC::Open3  ();

$XML::Simple::PREFERRED_PARSER = "XML::SAX::PurePerl";

my $sqlite_table_file = '/usr/local/cpanel/base/3rdparty/roundcube/SQL/sqlite.initial.sql';

my $log_file = '/usr/local/cpanel/logs/roundcube_sqlite_convert_log';
my %opts     = ( 'alternate_logfile' => $log_file );
my $logger   = Cpanel::Logger->new( \%opts );

my $mysql_dbname = 'roundcube';
my $dbh;

# If this updates, then do_all_rcube_xml_to_db() needs to be updated to match
my @dumptables = qw(users identities contacts contactgroups contactgroupmembers calendars caldav_calendars events caldav_events attachments caldav_attachments itipinvitations responses);

my $time = time();

## if invoked as a script, there is nothing in the call stack
my $invoked_as_script = !caller();
__PACKAGE__->script(@ARGV) if ($invoked_as_script);

my $mysql_plus_sqlite;

sub script {
    my ( $package, $opt_user, $opt_dbname ) = @_;
    my $cpconf = Cpanel::Config::LoadCpConf::loadcpconf();

    my $db_type = 'mysql';
    if ( exists $cpconf->{'roundcube_db'} ) {
        $db_type           = 'sqlite' if $cpconf->{'roundcube_db'} eq 'sqlite';
        $mysql_plus_sqlite = $cpconf->{'roundcube_db'} eq 'mysql_plus_sqlite';
    }

    if ( defined $opt_user ) {
        ## the optional user arg feature is currently *only* called as a script;
        ##   otherwise, all these exits would check $invoked_as_script

        ## Transfers.pm is the only user of $opt_user, which it uses in conjunction with $opt_user;
        ##   this changes the global variable $opt_dbname just in time to be used in &init_check
        if ( defined $opt_dbname ) {
            $mysql_dbname = $opt_dbname;
        }

        if ( $db_type eq 'sqlite' && init_check($cpconf) ) {
            my $wasSuccess = convert_mysql_roundcube_to_sqlite($opt_user);
            if ($wasSuccess) {

                ## Transfers.pm operates over a different dbname, and is responsible for the
                ##   removal of the temporary database
                unless ( defined $opt_dbname ) {
                    Cpanel::Email::RoundCube::archive_and_drop_mysql_roundcube($logger);
                }
                return 1;
            }
            die "Conversion for user '$opt_user' was not successful.\n";
        }

        ## SOMEDAY @GOLIVE: update-roundcube-sqlite-db gets moved to update-roundcube-db. Update this message and the conditional @GOIVE.
        die "The optional user argument is to be used only when Roundcube has been converted to sqlite. Use bin/update-roundcube-sqlite-db Exiting.\n";
    }

    ## Has the roundcube conversion already happened?
    ## note: this check is here, and not in init_check, because Transfers.pm calls into this
    ##   from a different context. The src server uses MySQL but the dest machine has done
    ##   the sqlite conversion.
    if ( $db_type eq 'sqlite' ) {
        $logger->info("Roundcube conversion already occurred, bailing out.");
        if ($invoked_as_script) {
            exit(0);
        }
        return 1;
    }

    unless ( init_check($cpconf) ) {
        if ($invoked_as_script) {
            exit(0);
        }
        return 1;
    }

    my %TRUEDOMAINS;
    Cpanel::Config::LoadUserDomains::loadtrueuserdomains( \%TRUEDOMAINS );
    my @users          = sort values %TRUEDOMAINS;
    my $success_cnt    = 0;
    my $success_verify = scalar @users;

    for my $user (@users) {
        $success_cnt += convert_mysql_roundcube_to_sqlite($user);
    }

    unless ( $success_cnt == $success_verify ) {
        $logger->warn("Roundcube Mysql to sqlite conversion was not completely successful. Please check $log_file for details.");

        if ($invoked_as_script) {
            exit(1);
        }
        return;
    }

    ## Conversion is a success, so switch Roundcube configuration to use SQLite before dropping the database.
    my $DIR = '/usr/local/cpanel/base/3rdparty';
    Cpanel::Email::RoundCube::generate_roundcube_config_sqlite( $DIR, $logger );

    ## if the conversion was a complete success (as checked above), we can safely archive and
    ##   delete the MySQL roundcube database. This will prevent future problems with transfers,
    ##   and in fact is the final solution for the original Roundcube case 12162!
    ## already asserted via &init_check
    my $archive_success = Cpanel::Email::RoundCube::archive_and_drop_mysql_roundcube($logger);

    require Cpanel::Config::CpConfGuard;
    my $cpconf_guard = Cpanel::Config::CpConfGuard->new();
    $cpconf->{'roundcube_db'} = $cpconf_guard->{'data'}->{'roundcube_db'} = 'sqlite';
    $cpconf_guard->save();

    if ($invoked_as_script) {
        Cpanel::Email::RoundCube::restart_cpsrvd();
        exit(0);
    }

    return 1;
}

sub convert_mysql_roundcube_to_sqlite {
    my ($user) = @_;
    my @domains = Cpanel::Email::RoundCube::collect_domains($user);

    my @uid_name_pairs = collect_roundcube_user_info( \@domains, $user );

    ## returning 1: no conversion necessary
    return 1 unless ( scalar @uid_name_pairs );

    ## e.g. '/home'
    my $best_mnt_point   = Cpanel::Filesys::Home::get_homematch_with_most_free_space();
    my $tmpdir_root_base = "$best_mnt_point/roundcube_convert";

    if ( -d $tmpdir_root_base ) {
        rename( $tmpdir_root_base, "$tmpdir_root_base.$time" );
    }
    mkdir($tmpdir_root_base);

    my $tmpdir_root_sys = "$tmpdir_root_base/$user";
    mkdir($tmpdir_root_sys);

    my @pwinfo = Cpanel::PwCache::getpwnam($user);
    my ( $mmuid, $mmgid, $homedir ) = @pwinfo[ 2, 3, 7 ];
    my $tmpdir_emailuser_base = "$homedir/tmp/roundcube_convert";

    my $success_cnt = 0;
    my %has_sqlite_trapper_keeper;

    for my $email_user_info (@uid_name_pairs) {
        my ( $uid, $email_user ) = @$email_user_info;

        if ($mysql_plus_sqlite) {
            my $db_path = _roundcube_db_path( $user, $homedir, $email_user );
            $has_sqlite_trapper_keeper{$db_path} = -f $db_path;
            next if $has_sqlite_trapper_keeper{$db_path};
        }

        my $tmpdir_root_sys_emailuser = "$tmpdir_root_sys/$email_user";
        mkdir($tmpdir_root_sys_emailuser);

        do_mysqldumps_for_user( $uid, $tmpdir_root_sys_emailuser );
    }

    ## ensures that $best/rcube/$sysuser/$emailuser is readable by $sysuser,
    ##   so that $sysuser can move it to their $homedir after the setuid
    my $tempquota = Cpanel::Quota::Temp->new( user => $user, log => 1 );
    $tempquota->disable();

    my $rv_chmod = system("chmod -R 700 $tmpdir_root_sys");
    my $rv_chown = system("chown -Rf $mmuid:$mmgid $tmpdir_root_sys");

    for my $email_user_info (@uid_name_pairs) {
        my ( $uid, $email_user ) = @$email_user_info;

        if ($mysql_plus_sqlite) {
            my $db_path = _roundcube_db_path( $user, $homedir, $email_user );
            if ( $has_sqlite_trapper_keeper{$db_path} ) {
                $logger->info("$email_user already has an SQLite DB, skipping...");
                $success_cnt++;
                next;
            }
        }

        chdir($tmpdir_root_base);

        my $tmpdir_root_sys_emailuser = "$tmpdir_root_sys/$email_user";
        my $rv_convert                = xml_to_sqlite( $user, $tmpdir_root_sys_emailuser, $tmpdir_emailuser_base, $email_user, $homedir );

        unless ($rv_convert) {
            $logger->warn("Conversion was not successful for user '$user'.");
        }
        $success_cnt += $rv_convert;

        ## note: no need to "rmdir($tmpdir_root_sys_emailuser)", as this dir was moved
        ##   to $homedir/tmp/rcube/$emailuser (during the setuid)

        ## SOMEDAY @GOLIVE: remove the mysql roundcube database (steal mysql/roundcube backup/archive
        ##   clauses from update-roundcube-db, the mysql version)
    }

    $tempquota->restore();

    rmdir($tmpdir_root_sys);
    rmdir($tmpdir_root_base);

    return $success_cnt == scalar(@uid_name_pairs);
}

sub collect_roundcube_user_info {
    my ( $ar_domains, $user ) = @_;
    my $regexp = '@(' . join( '|', map { s/\./\\./gr } @$ar_domains ) . ')$';
    my @ids;

    try {
        @ids = $dbh->selectall_array( "SELECT user_id, username FROM users WHERE username REGEXP ? or username = ?", {}, $regexp, $user );
    };

    return @ids;
}

## Stolen from pkgacct; needs to be modularized!
## SOMEDAY: this version has converged; move pkgacct version to module, and get rid of below
sub mysqldumpdb {
    my ($args) = @_;

    my @options   = @{ $args->{'options'} };
    my $db        = $args->{'db'};
    my $table     = $args->{'table'};
    my $file      = $args->{'file'};
    my $file_mode = $args->{'append'} ? '>>' : '>';

    # for testing
    my @extra_options = _get_extra_options();

    my $mysqldump = Cpanel::DbUtils::find_mysqldump();
    my @db        = ($db);
    if ($table) {
        push @db, $table;
    }

    my $pid = IPC::Open3::open3( my $w, my $r, '', $mysqldump, @extra_options, @options, @db );

    my $first_line = 1;
    if ( open( my $fh, $file_mode, $file ) ) {
        while (<$r>) {
            if ( $first_line && ( !$_ || m/^mysqldump:/ ) ) {
                warn join( '.', @db ) . ': ' . $_;
                close $w;
                close $r;
                waitpid( $pid, 0 );
                $first_line = 0;
                my $mysqlcheck = Cpanel::DbUtils::find_mysqlcheck();
                system( $mysqlcheck, '--repair', @extra_options, @db );
                $pid = IPC::Open3::open3( $w, $r, '', $mysqldump, @extra_options, @options, @db );
            }
            else {
                print {$fh} $_;
            }
        }
    }
    close $w;
    close $r;
    waitpid( $pid, 0 );
    return;
}

sub do_mysqldumps_for_user {
    my ( $uid, $tmp_convertdir ) = @_;

    for my $tbl (@dumptables) {
        ## these two tables do not key off user_id
        next if grep { $tbl eq $_ } qw{contactgroupmembers events ical_events caldav_events attachments ical_attachments caldav_attachments caldav_calendars};

        ## XML output, not suppressing table structure, with a where clause on user_id list
        my @opts = ( '--xml', '-w', qq{user_id = $uid} );
        mysqldumpdb(
            {
                'options' => [@opts],
                'db'      => $mysql_dbname,
                'file'    => "$tmp_convertdir/rcube.$tbl.xml",
                'table'   => $tbl
            }
        );
    }

    ## contactgroupmembers is gathered in two steps, otherwise would be a LEFT JOIN that
    ##   &mysqldumpdb can not currently support

    my $contacts = _get_ids_from_col( 'contactgroups', 'contactgroup_id', $uid, 'user_id' );
    _dump_stuff_in( 'contactgroupmembers', 'contactgroup_id', $contacts, $tmp_convertdir ) if scalar(@$contacts);

    # Handle events & attachments for calendaring, as those are identified by
    # calendar & event respectively.
    my $cals = _get_ids_from_col( "calendars", 'calendar_id', $uid, 'user_id' );
    next if !scalar(@$cals);
    my @events2export;
    my @attachments2export;
    foreach my $cal (@$cals) {
        my $events = _get_ids_from_col( "events", 'event_id', $cal, 'calendar_id' );

        # Can't have attachments if no events exist to attach em to, so
        # next here is appropriate.
        next if !scalar(@$events);
        push @events2export, @$events;

        my $attachments = _get_ids_from_col( "attachments", 'attachment_id', $events, 'event_id' );
        next if !scalar(@$attachments);
        push @attachments2export, @$attachments;
    }
    _dump_stuff_in( "events",      'event_id',      \@events2export,      $tmp_convertdir ) if @events2export;
    _dump_stuff_in( "attachments", 'attachment_id', \@attachments2export, $tmp_convertdir ) if @attachments2export;

    return undef;
}

# Only here so that I don't "repeat myself".
sub _get_ids_from_col {
    my ( $tbl, $col, $search_term, $filter_on, $filter_mode ) = @_;
    my @ids;
    try {

        # Quoting anything other than values here is actually harmful.
        # Don't do it as such. Same for IN statement here.
        my $where_clause = "WHERE $filter_on = ?";
        if ( ref $search_term eq 'ARRAY' ) {
            my $count = scalar(@$search_term);
            die "Bad call to _get_ids_from_col: no search term specified!" if !$count;
            my $qs = ( '?,' x ( $count - 1 ) ) . '?';
            $where_clause = "WHERE $filter_on IN ($qs)";
            @ids          = map { $_->[0] } $dbh->selectall_array( "SELECT $col FROM $tbl $where_clause", {}, @$search_term );
        }
        else {
            @ids = map { $_->[0] } $dbh->selectall_array( "SELECT $col FROM $tbl $where_clause", {}, $search_term );
        }
    }
    catch {
        $logger->warn( "Attempt to find necessary data from $col in $tbl failed: " . $dbh->errstr() );
    };
    return \@ids;

}

# Only here so that I don't "repeat myself".
sub _dump_stuff_in {
    my ( $tbl, $col, $in, $tmp_convertdir ) = @_;

    # It is possible that we have a very large number of ID's.
    # If so, we need to do this in chunks.
    my $chunk_size = 1000;
    my @chunks;

    while ( $in->@* ) {
        push @chunks, [ splice( $in->@*, 0, $chunk_size ) ];
    }

    my $file_num = 0;
    foreach my $chunk (@chunks) {

        my $f_name = $file_num ? "$tmp_convertdir/rcube.$tbl.$file_num.xml" : "$tmp_convertdir/rcube.$tbl.xml";
        my $csv    = join( ',', $chunk->@* );
        mysqldumpdb(
            {
                'options' => [ '--xml', '-w', qq{$col IN ($csv)} ],
                'db'      => $mysql_dbname,
                'file'    => $f_name,
                'table'   => $tbl,
            }
        );
        $file_num++;
    }

    return;
}

sub create_rcube_sqlite_tables {
    my ($dbh) = @_;
    Cpanel::Email::RoundCube::DBI::ensure_schema_update( $dbh, 'sqlite' );
    return undef;
}

# This used to do all sorts of things like telling rcube_xml_to_db what needed
# quoting, what needed to be set to NULL, etc. -- thankfully all that is
# absolutely unnecessary with sqlite3.
sub do_all_rcube_xml_to_db {
    my ( $dbh, $xmldir ) = @_;

    my $success_cnt = 0;
    ## verify the number of XML docs to convert to SQL
    my $success_verify = scalar(@dumptables);
    {
        ## note: there is a disparity in the sqlite.initial.sql, and the "table_structure" for "users";
        ##   preferences is not NULLABLE.
        my @_cols = qw(user_id username mail_host created last_login language preferences);
        $success_cnt += rcube_xml_to_db( $xmldir, 'users', $dbh, \@_cols );
    }

    {
        my @_cols = qw( identity_id user_id changed del standard name organization email
          reply-to bcc signature html_signature);
        $success_cnt += rcube_xml_to_db( $xmldir, 'identities', $dbh, \@_cols );
    }

    {
        my @_cols = qw(contact_id user_id changed del name email firstname surname vcard);
        $success_cnt += rcube_xml_to_db( $xmldir, 'contacts', $dbh, \@_cols );
    }

    ## new contactgroups table
    {
        my @_cols = qw( contactgroup_id user_id changed del name );
        $success_cnt += rcube_xml_to_db( $xmldir, 'contactgroups', $dbh, \@_cols );
    }

    ## new contactgroupmembers table
    ## guard clause: contactgroupmembers is gathered conditionally, so it is the only file which
    ##   may not exist
    if ( -e _xml_file( $xmldir, 'contactgroupmembers' ) ) {
        my @_cols = qw( contactgroup_id contact_id created );
        $success_cnt += rcube_xml_to_db( $xmldir, 'contactgroupmembers', $dbh, \@_cols );
    }
    else {
        $success_cnt++;
    }

    # Restore calendar data
    foreach my $cal_tbl (qw{calendars caldav_calendars}) {
        unless ( -e _xml_file( $xmldir, $cal_tbl ) ) {
            $success_cnt++;
            next;
        }
        my @_cols = qw( calendar_id user_id name color showalarms );
        push( @_cols, qw{ical_url ical_user ical_pass ical_last_change} )                                                   if $cal_tbl eq 'ical_calendars';
        push( @_cols, qw{readonly caldav_url caldav_tag caldav_user caldav_pass caldav_oauth_provider caldav_last_change} ) if $cal_tbl eq 'caldav_calendars';
        $success_cnt += rcube_xml_to_db( $xmldir, $cal_tbl, $dbh, \@_cols );
    }
    foreach my $evt_tbl (qw{events caldav_events}) {
        unless ( -e _xml_file( $xmldir, $evt_tbl ) ) {
            $success_cnt++;
            next;
        }
        my @_cols = qw( event_id calendar_id recurrence_id uid instance isexception created changed sequence start end recurrence title description location categories url all_day free_busy priority sensitivity status alarms attendees notifyat );
        push( @_cols, qw{ical_url ical_last_change} )                if $evt_tbl eq 'ical_events';
        push( @_cols, qw{caldav_url caldav_tag caldav_last_change} ) if $evt_tbl eq 'caldav_events';

        $success_cnt += rcube_xml_to_db( $xmldir, $evt_tbl, $dbh, \@_cols );
    }
    foreach my $atc_tbl (qw{attachments caldav_attachments}) {
        unless ( -e _xml_file( $xmldir, $atc_tbl ) ) {
            $success_cnt++;
            next;
        }
        my @_cols = qw( attachment_id event_id filename mimetype size data );
        $success_cnt += rcube_xml_to_db( $xmldir, $atc_tbl, $dbh, \@_cols );
    }
    if ( -e _xml_file( $xmldir, 'itipinvitations' ) ) {
        my @_cols = qw(token event_uid user_id event expires cancelled);
        $success_cnt += rcube_xml_to_db( $xmldir, 'itipinvitations', $dbh, \@_cols );
    }
    else {
        $success_cnt++;
    }

    ## Restore responses table, if available
    if ( -e _xml_file( $xmldir, 'responses' ) ) {
        my @_cols = qw( response_id user_id name data is_html changed del );
        $success_cnt += rcube_xml_to_db( $xmldir, 'responses', $dbh, \@_cols );
    }
    else {
        $success_cnt++;
    }

    return $success_cnt == $success_verify;
}

sub _xml_file {
    my ( $xmldir, $tbl ) = @_;
    return "$xmldir/rcube.$tbl.xml";
}

sub _get_all_xml_files {
    my ( $xmldir, $tbl ) = @_;

    opendir( my $dh, $xmldir ) or die "Cannot open directory $xmldir: $!";
    my @files = map { "$xmldir/$_" } grep { /^rcube\.$tbl\.(?:[0-9]+\.)?xml$/ } readdir($dh);
    return @files;
}

sub rcube_xml_to_db {
    my ( $xmldir, $tbl, $dbh, $ar_cols ) = @_;

    my @xml_fnames  = _get_all_xml_files( $xmldir, $tbl );
    my %common_opts = ( ForceArray => 1, KeyAttr => [], ContentKey => '__content' );

    foreach my $xml_fname (@xml_fnames) {
        ## $ref->{database}->[0]->{table_data}->[0]->{row}->[$x]->{field}->[$x]->{__content}
        my $ref;
        my $err;
        try {
            $ref = XML::Simple::XMLin( $xml_fname, %common_opts );
        }
        catch {
            $err = $_;
        };

        if ($err) {
            $logger->warn("Failed to load xml for $tbl: $err");
            return;
        }

        my $rows = $ref->{'database'}->[0]->{'table_data'}->[0]->{'row'};

        ## FWIW, Perl does not complain if $rows is undef, when called in a for loop context.
        for my $row (@$rows) {

            # XXX Placeholders don't work on columns, but stuff with dashes
            # still needs quoting. As such, quote all col names.
            # Sorry, couldn't find a way around it.
            my $update_hr = { map { $dbh->quote_identifier( $_->{'name'} ) => $_->{'__content'} || '' } @{ $row->{'field'} } };
            my $rv        = $dbh->do( rcube_make_sql( $tbl, $update_hr ) );
            unless ($rv) {
                $logger->warn( "Conversion was not successful: " . $dbh->errstr() );
                return;
            }
        }
    }
    return 1;
}

sub rcube_make_sql {
    my ( $table, $update_hr ) = @_;

    # Lets hope these actually are nonzero
    my @values = values(%$update_hr);
    my $qs     = ( '?,' x ( scalar(@values) - 1 ) ) . '?';
    return (
        "INSERT OR REPLACE INTO $table (" . join( ",", keys(%$update_hr) ) . ") VALUES ($qs)",
        undef,
        @values,
    );
}

sub check_mysqlup {
    ## note: this call is cached with a ttl of 600
    my $isrunning = Cpanel::MysqlRun::running();
    if ($isrunning) {
        return 1;
    }

    return undef;
}

sub ensure_roundcube_tables {
    my ($dbh) = @_;

    my %tables = map { $_ => undef } $dbh->tables();

    # system table is created during a migration
    my @expected = qw(session cache system);
    push( @expected, @dumptables );

    for my $exp (@expected) {
        next if $exp =~ /^caldav_|^ical_/;    ## ignoring as of 120
        if ( !exists $tables{$exp} && !exists $tables{qq{"main"."$exp"}} ) {
            $logger->warn("ERROR: missing $exp table");
            return;
        }
    }

    return 1;
}

sub init_check {
    my ($cpconf) = @_;
    ## Ensure root
    return unless ( 0 == $> );

    unless ( -e $sqlite_table_file ) {
        $logger->info("Roundcube is not installed; conversion is irrelevant.");
        return;
    }

    if ( exists $cpconf->{'skiproundcube'} and $cpconf->{'skiproundcube'} ) {
        $logger->info("Roundcube should be skipped, bailing out.");
        return;
    }

    my $mysqlup = check_mysqlup();
    unless ($mysqlup) {
        $logger->warn("Mysql not currently running, bailing out.");
        return;
    }

    ## Does this installation use Roundcube/MySQL?
    unless ( Cpanel::MysqlUtils::Command::db_exists($mysql_dbname) ) {
        $logger->warn("mysql database $mysql_dbname is missing");
        return;
    }

    my $error;

    try {
        my $dbc = Cpanel::MysqlUtils::Connect->new( database => $mysql_dbname );
        $dbh = $dbc->db_handle();
    }
    catch {
        $error = $_;
    };

    if ($error) {
        $logger->warn("Failed to connect to MySQL database '$mysql_dbname'.");
        return;
    }

    return 1;
}

##############################################################
# These functions allow tests to use a temporary MySQL server

sub _get_extra_options_string {

    if ( scalar _get_extra_options() ) {
        return join( ' ', _get_extra_options() );
    }

    return;
}

sub _get_extra_options {
    return @Cpanel::MysqlUtils::_EXTRA_MYSQL_ARGS;
}

#
##############################################################

sub xml_to_sqlite {
    my ( $user, $tmpdir_root, $tmpdir_convert_base, $email_user, $homedir ) = @_;
    my $code_ref = _closure_maker( $user, $tmpdir_root, $tmpdir_convert_base, $email_user, $homedir );

    #fixup a user who's purposefully deleted their "etc" dir
    Cpanel::AccessIds::ReducedPrivileges::call_as_user( sub { File::Path::make_path( File::Basename::dirname( _roundcube_db_path( $user, $homedir, $email_user ) ), { chmod => 0750 } ); }, $user, 'mail' );
    my $rv = Cpanel::AccessIds::ReducedPrivileges::call_as_user( $code_ref, $user );
    return $rv;
}

sub _roundcube_db_path {
    my ( $system_user, $homedir, $mail_account ) = @_;
    my ( $mail_user, $mail_domain ) = split( '@', $mail_account );
    my $db_path = ( defined $mail_domain ) ? "$homedir/etc/$mail_domain/$mail_user.rcube.db" : "$homedir/etc/$mail_user.rcube.db";
    return $db_path;
}

## defining as a closure, as ::run_as_user does not currently handle sub args
sub _closure_maker {
    my ( $system_user, $tmpdir_root, $tmpdir_convert_base, $email_user, $homedir ) = @_;

    my $code_ref = sub {
        my $tmp_convertdir = "$tmpdir_convert_base/$email_user";

        if ( -d $tmp_convertdir ) {
            rename( $tmp_convertdir, "$tmp_convertdir.$time" );
        }

        # Copy the XML files over to the user's tempdir.
        # Hopefully these are simple renames. But directories may be on different
        # mount points requiring a copy.

        File::Path::make_path($tmp_convertdir);

        for my $table (@dumptables) {
            my @all_src = _get_all_xml_files( $tmpdir_root, $table );
            foreach my $src (@all_src) {
                if ( -e $src ) {
                    my $filename = File::Basename::basename($src);
                    my $dest     = "$tmp_convertdir/$filename";
                    File::Copy::move( $src, $dest );
                }
            }
        }

        # Clean up empty source directory.
        # This will fail if the above moves failed.

        rmdir($tmpdir_root);

        ## note: similar clause in cpsrvd to set up $ENV{'_RCUBE'}
        my ( $mail_user, $mail_domain ) = split( '@', $email_user );

        my $rcube_sqlite_loc8 = _roundcube_db_path( $system_user, $homedir, $email_user );

        if ( -e $rcube_sqlite_loc8 ) {
            rename( $rcube_sqlite_loc8, "$rcube_sqlite_loc8.$time" );
        }

        my $dbh = DBI->connect( "dbi:SQLite:dbname=$rcube_sqlite_loc8", "", "" ) or do {
            $logger->info("Connection error to $rcube_sqlite_loc8: $!");
            return;
        };
        ## note: $dbh->{sqlite_version} is confirmed 2.8.15
        create_rcube_sqlite_tables($dbh);
        return unless ensure_roundcube_tables($dbh);

        unless ( do_all_rcube_xml_to_db( $dbh, $tmp_convertdir ) ) {
            $logger->info("Conversion of roundcube XML dump to sqlite database failed");
            return;
        }

        $dbh->disconnect();

        chmod( 0600, $rcube_sqlite_loc8 );

        ## the return values on these rm calls are not critical
        ## only remove the /tmp directory if the XML converion has been successful thus far

        try {
            File::Path::remove_tree($tmp_convertdir);
        };

        ## attempt to rmdir, which will intentionally fail if any of the converts did not succeed
        rmdir($tmpdir_convert_base);

        return 1;
    };
    return $code_ref;
}

1;

Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]

Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
12 Sep 2026 4.57 AM
root / wheel
0711
cpan_sandbox
--
16 Jan 2026 9.28 PM
root / root
0755
php_sandbox
--
16 Jan 2026 9.28 PM
root / root
0755
MirrorSearch_pingtest
2.38 KB
9 Feb 2022 6.45 PM
root / root
0755
activesync-invite-reply
1.693 KB
9 Feb 2022 6.45 PM
root / root
0755
add_dns
2.361 KB
9 Feb 2022 6.45 PM
root / root
0755
adddns
2.361 KB
9 Feb 2022 6.45 PM
root / root
0755
addpop
6.082 KB
9 Feb 2022 6.45 PM
root / root
0755
addsystemuser
3.267 KB
9 Feb 2022 6.45 PM
root / root
0755
adduser
0.09 KB
11 Feb 2015 5.35 PM
root / root
0755
agent360.sh
16.029 KB
13 Apr 2026 8.58 PM
root / root
0700
apachelimits
4.307 KB
9 Feb 2022 6.45 PM
root / root
0755
archive_sync_zones
3.049 KB
11 Feb 2025 5.08 AM
root / root
0755
auto-adjust-mysql-limits
1.811 KB
9 Feb 2022 6.45 PM
root / root
0755
autorepair
1.244 KB
9 Feb 2022 6.45 PM
root / root
0755
backup_jobs_helper
10.878 KB
14 Jul 2026 1.33 PM
root / root
0755
backups_clean_metadata_for_missing_backups
1.574 KB
9 Feb 2022 6.45 PM
root / root
0755
backups_create_metadata
15.748 KB
9 Feb 2022 6.45 PM
root / root
0755
backups_list_user_files
4.562 KB
9 Feb 2022 6.45 PM
root / root
0755
balance_linked_node_quotas
2.581 KB
9 Feb 2022 6.45 PM
root / root
0755
biglogcheck
1.688 KB
9 Feb 2022 6.45 PM
root / root
0755
build_bandwidthdb_root_cache_in_background
1.524 KB
9 Feb 2022 6.45 PM
root / root
0755
build_cpnat
3.412 KB
9 Feb 2022 6.45 PM
root / root
0755
build_mail_sni
3.873 KB
28 Jul 2022 12.22 AM
root / root
0755
build_maxemails_config
1.142 KB
9 Feb 2022 6.45 PM
root / root
0755
builddovecotconf
9.638 KB
16 Jan 2026 9.26 PM
root / root
0755
buildeximconf
6.999 KB
11 Feb 2025 5.08 AM
root / root
0755
buildhttpdconf
2.602 KB
9 Feb 2022 6.45 PM
root / root
0755
buildpureftproot
0.526 KB
9 Feb 2022 6.45 PM
root / root
0755
call_pkgacct
2.252 KB
14 Jul 2026 1.33 PM
root / root
0755
ccs-check
4.913 KB
9 Feb 2022 6.45 PM
root / root
0755
check_cpanel_pkgs
10.602 KB
7 Aug 2026 4.57 AM
root / root
0755
check_domain_tls_service_domains.pl
6.681 KB
9 Feb 2022 6.45 PM
root / root
0755
check_immutable_files
5.489 KB
9 Feb 2022 6.45 PM
root / root
0755
check_mail_spamassassin_compiledregexps_body_0
0.183 KB
13 Apr 2016 6.55 PM
root / root
0755
check_maxmem_against_domains_count
3.566 KB
9 Feb 2022 6.45 PM
root / root
0755
check_mount_procfs
2.023 KB
9 Feb 2022 6.45 PM
root / root
0755
check_mysql
5.563 KB
11 Feb 2025 5.08 AM
root / root
0755
check_plugin_pkgs
2.453 KB
11 Feb 2025 5.08 AM
root / root
0755
check_security_advice_changes
8.278 KB
11 Feb 2025 5.08 AM
root / root
0755
check_unmonitored_enabled_services
4.557 KB
28 Jul 2022 12.22 AM
root / root
0755
check_unreliable_resolvers
3.586 KB
9 Feb 2022 6.45 PM
root / root
0755
check_users_my_cnf
6.046 KB
9 Feb 2022 6.45 PM
root / root
0755
check_valid_server_hostname
7.656 KB
28 Jul 2022 12.22 AM
root / root
0755
checkalldomainsmxs
2.404 KB
9 Feb 2022 6.45 PM
root / root
0755
checkbashshell
1.177 KB
9 Feb 2022 6.45 PM
root / root
0755
checkccompiler
1.224 KB
9 Feb 2022 6.45 PM
root / root
0755
checkexim.pl
3.098 KB
9 Feb 2022 6.45 PM
root / root
0755
checklink
1.292 KB
9 Feb 2022 6.45 PM
root / root
0755
checkusers
0.836 KB
9 Feb 2022 6.45 PM
root / root
0755
chkpaths
0.138 KB
11 Feb 2015 5.35 PM
root / root
0755
chpass
0.406 KB
9 Feb 2022 6.45 PM
root / root
0755
ckillall
1.112 KB
9 Feb 2022 6.45 PM
root / root
0755
clean_dead_mailman_locks
2.091 KB
9 Feb 2022 6.45 PM
root / root
0755
clean_up_temp_wheel_users
2.439 KB
9 Feb 2022 6.45 PM
root / root
0755
clean_user_php_sessions
4.761 KB
28 Jul 2022 12.22 AM
root / root
0755
cleandns
13.114 KB
11 Feb 2025 5.08 AM
root / root
0755
cleandns8
0.407 KB
9 Feb 2022 6.45 PM
root / root
0755
cleanmsglog
0.718 KB
11 Feb 2015 5.35 PM
root / root
0755
cleanphpsessions
0.91 KB
9 Feb 2022 6.45 PM
root / root
0755
cleanphpsessions.php
0.643 KB
31 Aug 2022 5.28 PM
root / root
0644
cleanquotas
1.612 KB
9 Feb 2022 6.45 PM
root / root
0755
cleansessions
5.891 KB
11 Feb 2025 5.08 AM
root / root
0755
cleanupinterchange
2.643 KB
9 Feb 2022 6.45 PM
root / root
0755
cleanupmysqlprivs
0.755 KB
25 Feb 2025 4.12 PM
root / root
0755
clear_orphaned_virtfs_mounts
3.56 KB
9 Feb 2022 6.45 PM
root / root
0755
comet_license_registration_sync
1.671 KB
14 Jul 2026 1.33 PM
root / root
0755
comet_protected_item_maintenance
20.782 KB
14 Jul 2026 1.33 PM
root / root
0755
comparecdb
1.524 KB
9 Feb 2022 6.45 PM
root / root
0755
compilers
2.863 KB
9 Feb 2022 6.45 PM
root / root
0755
compilerscheck
0.976 KB
9 Feb 2022 6.45 PM
root / root
0755
configure_firewall_for_cpanel
0.508 KB
9 Feb 2022 6.45 PM
root / root
0755
configure_rh_firewall_for_cpanel
0.508 KB
9 Feb 2022 6.45 PM
root / root
0755
configure_rh_ipv6_firewall_for_cpanel
0.508 KB
9 Feb 2022 6.45 PM
root / root
0755
convert2dovecot
0.666 KB
9 Feb 2022 6.45 PM
root / root
0755
convert_accesshash_to_token
4.073 KB
9 Feb 2022 6.45 PM
root / root
0755
convert_and_migrate_from_legacy_backup
1.97 KB
9 Feb 2022 6.45 PM
root / root
0755
convert_maildir_to_mdbox
1.663 KB
9 Feb 2022 6.45 PM
root / root
0755
convert_mdbox_to_maildir
1.658 KB
9 Feb 2022 6.45 PM
root / root
0755
convert_roundcube_mysql2sqlite
26.121 KB
7 Mar 2025 3.31 PM
root / root
0755
convert_to_dovecot_delivery
4.334 KB
9 Feb 2022 6.45 PM
root / root
0755
convert_whmxfer_to_sqlite
1.464 KB
9 Feb 2022 6.45 PM
root / root
0755
copy_user_mail_as_root
1.251 KB
9 Feb 2022 6.45 PM
root / root
0755
copy_user_mail_as_user
1.343 KB
9 Feb 2022 6.45 PM
root / root
0755
cpan_config
2.803 KB
9 Feb 2022 6.45 PM
root / root
0755
cpanel_initial_install
67.952 KB
11 Jun 2026 4.57 AM
root / root
0755
cpanelsync
28.312 KB
9 Feb 2022 6.45 PM
root / root
0755
cpanelsync_postprocessor
1.618 KB
9 Feb 2022 6.45 PM
root / root
0755
cpanpingtest
0.942 KB
9 Feb 2022 6.45 PM
root / root
0755
cpbackup
44.786 KB
11 Feb 2025 5.08 AM
root / root
0755
cpbackup_transport_file
5.646 KB
28 Jul 2022 12.22 AM
root / root
0755
cpdig
2.814 KB
11 Jun 2026 4.58 AM
root / root
0755
cpfetch
1.229 KB
9 Feb 2022 6.45 PM
root / root
0755
cphulkdblacklist
0.423 KB
9 Feb 2022 6.45 PM
root / root
0755
cphulkdwhitelist
1.305 KB
9 Feb 2022 6.45 PM
root / root
0755
cpservice
2.865 KB
9 Feb 2022 6.45 PM
root / root
0755
cpuser_port_authority
19.292 KB
9 Feb 2022 6.45 PM
root / root
0755
cpuser_service_manager
10.853 KB
28 Jul 2022 12.22 AM
root / root
0755
create_default_featurelist
11.624 KB
10 Sep 2026 4.31 PM
root / root
0700
createacct
30.35 MB
11 Sep 2026 4.57 AM
root / root
0700
custom_backup_destination.pl.sample
5.061 KB
28 Jul 2022 12.22 AM
root / root
0755
custom_backup_destination.pl.skeleton
2.838 KB
9 Feb 2022 6.45 PM
root / root
0755
dcpumon-wrapper
0.83 KB
9 Feb 2022 6.45 PM
root / root
0755
delpop
6.201 KB
9 Feb 2022 6.45 PM
root / root
0755
detect_env_capabilities
0.496 KB
9 Feb 2022 6.45 PM
root / root
0755
disable_prelink
2.774 KB
9 Feb 2022 6.45 PM
root / root
0755
disablefileprotect
2.188 KB
11 Feb 2025 5.08 AM
root / root
0755
distro_changed_hook
1.157 KB
9 Feb 2022 6.45 PM
root / root
0755
dnscluster
4.439 KB
9 Feb 2022 6.45 PM
root / root
0755
dnsqueuecron
1.285 KB
9 Feb 2022 6.45 PM
root / root
0755
dnssec-cluster-keys
3.75 KB
9 Feb 2022 6.45 PM
root / root
0755
dovecot_maintenance
7.658 KB
11 Feb 2025 5.08 AM
root / root
0755
dovecot_set_defaults.pl
0.961 KB
9 Feb 2022 6.45 PM
root / root
0755
dumpcdb
0.846 KB
9 Feb 2022 6.45 PM
root / root
0755
dumpinodes
0.671 KB
9 Feb 2022 6.45 PM
root / root
0755
dumpquotas
0.602 KB
9 Feb 2022 6.45 PM
root / root
0755
dumpstor
0.892 KB
9 Feb 2022 6.45 PM
root / root
0755
ea4_fresh_install
2.636 KB
9 Feb 2022 6.45 PM
root / root
0755
edit_cpanelsync_exclude_list
2.579 KB
9 Feb 2022 6.45 PM
root / root
0755
editquota
3.43 KB
11 Feb 2025 5.08 AM
root / root
0755
email_archive_maintenance
6.152 KB
9 Feb 2022 6.45 PM
root / root
0755
email_hold_maintenance
1.46 KB
9 Feb 2022 6.45 PM
root / root
0755
enable_spf_dkim_globally
8.827 KB
9 Feb 2022 6.45 PM
root / root
0755
enablefileprotect
2.099 KB
9 Feb 2022 6.45 PM
root / root
0755
ensure_autoenabled_features
3.15 MB
18 Aug 2026 4.57 AM
root / root
0700
ensure_conf_dir_crt_key
4.824 KB
9 Feb 2022 6.45 PM
root / root
0755
ensure_cpuser_file_ip
2.549 KB
9 Feb 2022 6.45 PM
root / root
0755
ensure_crontab_permissions
1.075 KB
9 Feb 2022 6.45 PM
root / root
0755
ensure_dovecot_memory_limits_meet_minimum
3.133 KB
9 Feb 2022 6.45 PM
root / root
0755
ensure_hostname_resolves
2.512 KB
1 Apr 2025 10.57 PM
root / root
0755
ensure_includes
0.587 KB
9 Feb 2022 6.45 PM
root / root
0755
ensure_vhost_includes
13.526 KB
9 Feb 2022 6.45 PM
root / root
0755
exim_tidydb
2.965 KB
9 Feb 2022 6.45 PM
root / root
0755
eximconfgen
1.318 KB
9 Feb 2022 6.45 PM
root / root
0755
eximstats_spam_check
0.847 KB
9 Feb 2022 6.45 PM
root / root
0755
expunge_expired_certificates_from_sslstorage
3.563 KB
9 Feb 2022 6.45 PM
root / root
0755
expunge_expired_pkgacct_sessions
0.832 KB
9 Feb 2022 6.45 PM
root / root
0755
expunge_expired_transfer_sessions
1.063 KB
9 Feb 2022 6.45 PM
root / root
0755
fastmail
5.157 KB
9 Feb 2022 6.45 PM
root / root
0755
featuremod
1.924 KB
9 Feb 2022 6.45 PM
root / root
0755
fetchfile
0.412 KB
9 Feb 2022 6.45 PM
root / root
0755
find_and_fix_rpm_issues
6.989 KB
11 Feb 2025 5.08 AM
root / root
0755
find_outdated_services
6.47 KB
11 Jun 2026 4.58 AM
root / root
0755
find_pids_with_inotify_watch_on_path
3.657 KB
9 Feb 2022 6.45 PM
root / root
0755
fix-cpanel-perl
28.43 KB
18 Aug 2026 4.57 AM
root / root
0755
fix-listen-on-localhost
3.941 KB
2 Jun 2026 4.57 AM
root / root
0755
fix-web-vhost-configuration
6.148 KB
9 Feb 2022 6.45 PM
root / root
0755
fix_dns_zone_ttls
1.337 KB
9 Feb 2022 6.45 PM
root / root
0755
fix_innodb_tables
4.052 KB
9 Feb 2022 6.45 PM
root / root
0755
fix_reseller_acls
10.701 KB
16 Jun 2025 1.21 PM
root / root
0755
fixetchosts
4.32 KB
9 Feb 2022 6.45 PM
root / root
0755
fixheaders
0.559 KB
9 Feb 2022 6.45 PM
root / root
0755
fixmailinglistperms
0.984 KB
9 Feb 2022 6.45 PM
root / root
0755
fixmailman
2.094 KB
9 Feb 2022 6.45 PM
root / root
0755
fixnamedviews
1.218 KB
9 Feb 2022 6.45 PM
root / root
0755
fixndc
0.403 KB
9 Feb 2022 6.45 PM
root / root
0755
fixquotas
18.393 KB
11 Feb 2025 5.08 AM
root / root
0755
fixrelayd
1.742 KB
9 Feb 2022 6.45 PM
root / root
0755
fixrndc
16.387 KB
11 Feb 2025 5.08 AM
root / root
0755
fixtar
0.491 KB
9 Feb 2022 6.45 PM
root / root
0755
fixtlsversions
4.703 KB
9 Feb 2022 6.45 PM
root / root
0755
fixvaliases
1.999 KB
9 Feb 2022 6.45 PM
root / root
0755
fixwebalizer
0.943 KB
9 Feb 2022 6.45 PM
root / root
0755
forcelocaldomain
0.874 KB
9 Feb 2022 6.45 PM
root / root
0755
ftpfetch
2.198 KB
6 Dec 2019 5.06 PM
root / root
0755
ftpquotacheck
8.312 KB
9 Feb 2022 6.45 PM
root / root
0755
ftpsfetch
2.359 KB
6 Dec 2019 5.06 PM
root / root
0755
ftpupdate
0.255 KB
10 Jan 2020 7.19 PM
root / root
0755
gather_update_log_stats
4.252 KB
27 Jul 2026 9.43 PM
root / root
0700
gather_update_logs_setupcrontab
5.451 KB
27 Jul 2026 9.43 PM
root / root
0700
gemwrapper
1.741 KB
9 Feb 2022 6.45 PM
root / root
0755
gencrt
6.26 KB
9 Feb 2022 6.45 PM
root / root
0755
generate_account_suspension_include
5.703 KB
9 Feb 2022 6.45 PM
root / root
0755
generate_google_drive_credentials
1.108 KB
9 Feb 2022 6.45 PM
root / root
0755
generate_google_drive_oauth_uri
0.961 KB
9 Feb 2022 6.45 PM
root / root
0755
generate_maildirsize
14.559 KB
2 Jul 2026 4.57 AM
root / root
0755
gensysinfo
1.157 KB
9 Feb 2022 6.45 PM
root / root
0755
get_locale_from_legacy_name_info
1.993 KB
9 Feb 2022 6.45 PM
root / root
0755
getremotecpmove
22.543 KB
1 Sep 2026 4.57 AM
root / root
0755
grpck
1.189 KB
9 Feb 2022 6.45 PM
root / root
0755
hackcheck
3.02 KB
9 Feb 2022 6.45 PM
root / root
0755
hook
1.452 KB
9 Feb 2022 6.45 PM
root / root
0755
httpspamdetect
2.823 KB
11 Jun 2026 4.58 AM
root / root
0755
hulk-unban-ip
4.08 MB
18 Aug 2026 4.57 AM
root / root
0700
import_exim_data
8.392 KB
28 Jul 2022 12.22 AM
root / root
0755
increase_filesystem_limits
0.87 KB
9 Feb 2022 6.45 PM
root / root
0755
initacls
4.987 KB
9 Feb 2022 6.45 PM
root / root
0755
initfpsuexec
0.434 KB
9 Feb 2022 6.45 PM
root / root
0755
initialize_360monitoring
2.758 KB
25 Jun 2026 1.40 PM
root / root
0700
initquotas
19.347 KB
26 Feb 2026 4.57 AM
root / root
0755
initsuexec
4.026 KB
9 Feb 2022 6.45 PM
root / root
0755
install_cpanel_analytics
1.927 KB
2 Dec 2022 4.41 PM
root / root
0755
install_dovecot_fts
1.567 KB
9 Feb 2022 6.45 PM
root / root
0755
install_plugin
2.802 KB
28 Jul 2022 12.22 AM
root / root
0755
install_tuxcare_els_php
1.845 KB
10 Dec 2025 4.21 PM
root / root
0755
installpkg
0.562 KB
9 Feb 2022 6.45 PM
root / root
0755
installpostgres
6.558 KB
12 Sep 2025 1.13 PM
root / root
0755
installsqlite3
1.822 KB
9 Feb 2022 6.45 PM
root / root
0755
ipcheck
3.926 KB
9 Feb 2022 6.45 PM
root / root
0755
ipusage
7.445 KB
9 Feb 2022 6.45 PM
root / root
0755
is_update_available
3.265 KB
20 May 2026 4.57 AM
root / root
0755
isdedicatedip
0.588 KB
9 Feb 2022 6.45 PM
root / root
0755
jetbackup-check
3.688 KB
9 Feb 2022 6.45 PM
root / root
0755
killdns
0.412 KB
9 Feb 2022 6.45 PM
root / root
0755
killdns-dnsadmin
1.152 KB
9 Feb 2022 6.45 PM
root / root
0755
killmysqluserprivs
0.423 KB
9 Feb 2022 6.45 PM
root / root
0755
killmysqlwildcard
1.152 KB
9 Feb 2022 6.45 PM
root / root
0755
killpvhost
0.833 KB
9 Feb 2022 6.45 PM
root / root
0755
killspamkeys
0.915 KB
9 Feb 2022 6.45 PM
root / root
0755
link_3rdparty_binaries
1.241 KB
11 Mar 2022 3.43 PM
root / root
0755
linksubemailtomainacct
3.172 KB
9 Feb 2022 6.45 PM
root / root
0755
listcheck
0.525 KB
9 Feb 2022 6.45 PM
root / root
0755
listsubdomains
1.049 KB
9 Feb 2022 6.45 PM
root / root
0755
litespeed-check
3.859 KB
9 Feb 2022 6.45 PM
root / root
0755
locale_export
5.206 KB
11 Feb 2025 5.08 AM
root / root
0755
locale_import
4.69 KB
29 Jul 2026 4.50 PM
root / root
0755
locale_info
3.99 KB
9 Feb 2022 6.45 PM
root / root
0755
log_retention
21.282 KB
26 Feb 2026 4.57 AM
root / root
0755
logo.dat
0.2 KB
11 Feb 2015 5.35 PM
root / root
0644
magicloader
1.938 KB
9 Feb 2022 6.45 PM
root / root
0755
maildir_converter
6.076 KB
9 Feb 2022 6.45 PM
root / root
0755
mailperm
16.526 KB
11 Feb 2025 5.08 AM
root / root
0755
mailscannerupdate
2.42 KB
9 Feb 2022 6.45 PM
root / root
0755
mainipcheck
9.996 KB
9 Feb 2022 6.45 PM
root / root
0755
maintenance
52.192 KB
7 Aug 2026 4.57 AM
root / root
0755
make_config
0.397 KB
11 Feb 2015 5.35 PM
root / root
0644
make_hostname_unowned
1.161 KB
9 Feb 2022 6.45 PM
root / root
0755
manage_extra_marketing
12.762 KB
10 Sep 2026 4.31 PM
root / root
0700
manage_greylisting
16.327 KB
11 Jun 2026 4.57 AM
root / root
0755
manage_mysql_profiles
16.335 KB
11 Feb 2025 5.08 AM
root / root
0755
mass_change_php_setting
10.648 KB
11 Jun 2026 4.58 AM
root / root
0755
migrate_ccs_to_cpdavd
47.057 KB
11 Feb 2025 5.08 AM
root / root
0755
migrate_local_ini_to_php_ini
7.409 KB
9 Feb 2022 6.45 PM
root / root
0755
migrate_whmtheme_file_to_userdata
2.954 KB
9 Feb 2022 6.45 PM
root / root
0755
mkwwwacctconf
2.329 KB
31 Aug 2022 5.28 PM
root / root
0755
modify_accounts
4.071 KB
11 Feb 2025 5.08 AM
root / root
0755
modify_featurelist
16.164 KB
10 Sep 2026 4.31 PM
root / root
0700
modify_packages
3.639 KB
11 Feb 2025 5.08 AM
root / root
0755
modsec_vendor
15.633 KB
9 Feb 2022 6.45 PM
root / root
0755
mysqlconnectioncheck
6.716 KB
11 Feb 2025 5.08 AM
root / root
0755
mysqlpasswd
4.136 KB
11 Feb 2025 5.08 AM
root / root
0755
named.ca
1.565 KB
11 Feb 2015 5.35 PM
root / root
0644
named.rfc1912.zones
0.756 KB
22 Sep 2017 4.06 PM
root / root
0644
notify_expiring_certificates
9.367 KB
11 Mar 2022 3.43 PM
root / root
0755
notify_expiring_certificates_on_linked_nodes
1.329 KB
28 Jul 2022 12.22 AM
root / root
0755
oopscheck
1.115 KB
9 Feb 2022 6.45 PM
root / root
0755
optimize_eximstats
3.882 KB
9 Feb 2022 6.45 PM
root / root
0755
panel_ini
4.111 KB
2 Jun 2026 4.57 AM
root / root
0755
patch_mail_spamassassin_compiledregexps_body_0
2.395 KB
9 Feb 2022 6.45 PM
root / root
0755
patchfdsetsize
2.719 KB
9 Feb 2022 6.45 PM
root / root
0755
pedquota
2.256 KB
9 Feb 2022 6.45 PM
root / root
0755
perform_sqlite_auto_rebuild_db_maintenance
1.983 KB
11 Feb 2025 5.08 AM
root / root
0755
perlinstaller
0.516 KB
9 Feb 2022 6.45 PM
root / root
0755
perlmods
1.176 KB
9 Feb 2022 6.45 PM
root / root
0755
php_fpm_config
9.734 KB
9 Feb 2022 6.45 PM
root / root
0755
phpini_tidy
0.671 KB
9 Feb 2022 6.45 PM
root / root
0755
pkgacct
89.907 KB
11 Jun 2026 4.58 AM
root / root
0755
post_snapshot
2.094 KB
11 Feb 2025 5.08 AM
root / root
0755
post_sync_cleanup
5.833 KB
11 Jun 2026 4.58 AM
root / root
0755
primary_virtual_host_migration
2.443 KB
9 Feb 2022 6.45 PM
root / root
0755
process_cpmove
4.315 KB
14 Jul 2026 1.33 PM
root / root
0755
process_pending_cpanel_php_pear_registration
2.728 KB
16 Jun 2025 1.21 PM
root / root
0755
proxydomains
9.592 KB
12 Sep 2025 1.13 PM
root / root
0755
ptycheck
0.707 KB
9 Feb 2022 6.45 PM
root / root
0755
purge_modsec_log
1.526 KB
9 Feb 2022 6.45 PM
root / root
0755
purge_old_config_caches
2.075 KB
9 Feb 2022 6.45 PM
root / root
0755
pwck
0.691 KB
9 Feb 2022 6.45 PM
root / root
0755
quickdnslookup
1.132 KB
9 Feb 2022 6.45 PM
root / root
0755
quickwhoisips
2.293 KB
28 Jul 2022 12.22 AM
root / root
0755
quota_auto_fix
1.406 KB
9 Feb 2022 6.45 PM
root / root
0755
quotacheck
22.363 KB
28 Jul 2022 12.22 AM
root / root
0755
rawchpass
0.449 KB
9 Feb 2022 6.45 PM
root / root
0755
rdate
4.798 KB
28 Jul 2022 12.22 AM
root / root
0755
realadduser
5.608 KB
9 Feb 2022 6.45 PM
root / root
0755
realchpass
3.258 KB
9 Feb 2022 6.45 PM
root / root
0755
realperlinstaller
5.669 KB
9 Feb 2022 6.45 PM
root / root
0755
realrawchpass
0.415 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuild_bandwidthdb_root_cache
1.452 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuild_dbmap
5.798 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuild_provider_openid_connect_links_db
1.015 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuild_whm_chrome
2.224 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuilddnsconfig
25.498 KB
7 Mar 2025 3.31 PM
root / root
0755
rebuildhttpdconf
2.602 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuildinstalledssldb
2.849 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuildippool
0.497 KB
9 Feb 2022 6.45 PM
root / root
0755
rebuilduserssldb
0.926 KB
9 Feb 2022 6.45 PM
root / root
0755
refresh-dkim-validity-cache
5.967 KB
9 Feb 2022 6.45 PM
root / root
0755
regenerate_tokens
2.176 KB
20 Apr 2022 7.26 PM
root / root
0755
remote_log_transfer
11.597 KB
31 Aug 2022 5.28 PM
root / root
0755
remove_dovecot_index_files
5.887 KB
9 Feb 2022 6.45 PM
root / root
0755
removeacct
28.2 MB
11 Sep 2026 4.57 AM
root / root
0700
rescan_user_dovecot_fts
2.977 KB
9 Feb 2022 6.45 PM
root / root
0755
reset_mail_quotas_to_sane_values
6.818 KB
9 Feb 2022 6.45 PM
root / root
0755
resetmailmanurls
2.028 KB
9 Feb 2022 6.45 PM
root / root
0755
resetquotas
4.612 KB
11 Feb 2025 5.08 AM
root / root
0755
restartsrv
3.189 KB
11 Feb 2025 5.08 AM
root / root
0755
restartsrv_apache
0.412 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_apache_php_fpm
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_base
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_bind
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_chkservd
0.417 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_clamd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_cpanel_php_fpm
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_cpanellogd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_cpdavd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_cpgreylistd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_cphulkd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_cpipv6
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_cpsrvd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_crond
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_dnsadmin
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_dovecot
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_exim
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_eximstats
0.492 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_ftpd
0.416 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_ftpserver
0.89 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_httpd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_imap
0.427 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_inetd
2.466 KB
20 Apr 2022 7.26 PM
root / root
0755
restartsrv_ipaliases
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_lmtp
0.427 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_mailman
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_mysql
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_named
0.565 KB
11 Feb 2025 5.08 AM
root / root
0755
restartsrv_nscd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_p0f
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_pdns
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_pop3
0.427 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_postgres
0.417 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_postgresql
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_powerdns
0.432 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_proftpd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_pureftpd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_queueprocd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_rsyslog
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_rsyslogd
0.427 KB
9 Feb 2022 6.45 PM
root / root
0755
restartsrv_spamd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_sshd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_syslogd
2.4 KB
11 Mar 2022 3.43 PM
root / root
0755
restartsrv_tailwatchd
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_unknown
10.78 MB
11 Sep 2026 4.57 AM
root / root
0755
restartsrv_xinetd
0.412 KB
9 Feb 2022 6.45 PM
root / root
0755
restorecpuserfromcache
1.961 KB
9 Feb 2022 6.45 PM
root / root
0755
restorepkg
48.7 MB
11 Sep 2026 4.57 AM
root / root
0700
rfc1912_zones.tar
10 KB
11 Feb 2015 5.35 PM
root / root
0644
rpmup
5.069 KB
11 Feb 2025 5.08 AM
root / root
0755
rsync-user-homedir.pl
5.765 KB
9 Feb 2022 6.45 PM
root / root
0755
run_if_exists
0.5 KB
9 Feb 2022 6.45 PM
root / root
0755
run_plugin_lifecycle
3.965 KB
10 Sep 2026 4.31 PM
root / root
0700
runstatsonce
0.43 KB
9 Feb 2022 6.45 PM
root / root
0755
runweblogs
1.021 KB
9 Feb 2022 6.45 PM
root / root
0755
sa-update_wrapper
3.338 KB
9 Feb 2022 6.45 PM
root / root
0755
safetybits.pl
0.824 KB
9 Feb 2022 6.45 PM
root / root
0755
secureit
4.721 KB
9 Feb 2022 6.45 PM
root / root
0755
securemysql
4.396 KB
11 Feb 2025 5.08 AM
root / root
0755
securerailsapps
3.575 KB
9 Feb 2022 6.45 PM
root / root
0755
securetmp
16.76 KB
16 Jun 2025 1.21 PM
root / root
0755
sendicq
0.463 KB
9 Feb 2022 6.45 PM
root / root
0755
servicedomains
9.592 KB
12 Sep 2025 1.13 PM
root / root
0755
set_mailman_archive_perms
1.754 KB
9 Feb 2022 6.45 PM
root / root
0755
setpostgresconfig
6.036 KB
9 Feb 2022 6.45 PM
root / root
0755
setup_greylist_db
16.327 KB
11 Jun 2026 4.57 AM
root / root
0755
setup_modsec_db
1.304 KB
9 Feb 2022 6.45 PM
root / root
0755
setup_systemd_timer_for_plugins
3.921 KB
10 Sep 2026 4.31 PM
root / root
0700
setupftpserver
10.475 KB
9 Feb 2022 6.45 PM
root / root
0755
setupmailserver
9.393 KB
7 Mar 2025 3.31 PM
root / root
0755
setupnameserver
12.596 KB
12 Sep 2025 1.13 PM
root / root
0755
show_php_settings
3.674 KB
11 Jun 2026 4.58 AM
root / root
0755
shrink_modsec_ip_database
12.974 KB
9 Feb 2022 6.45 PM
root / root
0755
simpleps
3.051 KB
9 Feb 2022 6.45 PM
root / root
0755
slurp_exim_mainlog
5.775 KB
9 Feb 2022 6.45 PM
root / root
0755
smartcheck
15.128 KB
16 Jun 2025 1.21 PM
root / root
0755
smtpmailgidonly
8.147 KB
8 Jul 2026 8.50 PM
root / root
0755
snapshot_prep
5.876 KB
11 Feb 2025 5.08 AM
root / root
0755
spamassassin_dbm_cleaner
5.853 KB
28 Jul 2022 12.22 AM
root / root
0755
spamassassindisable
3.74 KB
10 Jun 2022 3.47 PM
root / root
0755
spamboxdisable
2.27 KB
10 Jun 2022 3.47 PM
root / root
0755
sshcontrol
14.377 KB
9 Feb 2022 6.45 PM
root / root
0755
ssl_crt_status
3.836 KB
9 Feb 2022 6.45 PM
root / root
0755
suspendacct
18.082 KB
12 Sep 2025 1.13 PM
root / root
0755
suspendmysqlusers
4.775 KB
11 Feb 2025 5.08 AM
root / root
0755
swapip
3.822 KB
9 Feb 2022 6.45 PM
root / root
0755
sync-mysql-users-from-grants
1.196 KB
9 Feb 2022 6.45 PM
root / root
0755
sync_child_accounts
1.771 KB
9 Feb 2022 6.45 PM
root / root
0755
sync_contact_emails_to_cpanel_users_files
1.136 KB
10 Jun 2022 3.47 PM
root / root
0755
synctransfers
1.925 KB
9 Feb 2022 6.45 PM
root / root
0755
syslog_check
1.358 KB
9 Feb 2022 6.45 PM
root / root
0755
sysup
0.63 KB
9 Feb 2022 6.45 PM
root / root
0755
test_sa_compiled
1.067 KB
9 Feb 2022 6.45 PM
root / root
0755
transfer_account_as_user
2.342 KB
9 Feb 2022 6.45 PM
root / root
0755
transfer_accounts_as_root
4.756 KB
9 Feb 2022 6.45 PM
root / root
0755
transfer_in_progress
3.082 KB
9 Feb 2022 6.45 PM
root / root
0755
transfer_in_progress.pod
0.305 KB
17 Nov 2016 1.07 AM
root / root
0644
transfermysqlusers
10.1 MB
11 Sep 2026 4.57 AM
root / root
0700
try-later
7.949 KB
9 Feb 2022 6.45 PM
root / root
0755
unblockip
0.651 KB
9 Feb 2022 6.45 PM
root / root
0755
uninstall_cpanel_analytics
1.201 KB
9 Feb 2022 6.45 PM
root / root
0755
uninstall_dovecot_fts
0.549 KB
9 Feb 2022 6.45 PM
root / root
0755
uninstall_plugin
2.839 KB
28 Jul 2022 12.22 AM
root / root
0755
unlink_service_account
2.619 KB
9 Feb 2022 6.45 PM
root / root
0755
unpkgacct
4.603 KB
9 Feb 2022 6.45 PM
root / root
0755
unslavenamedconf
0.843 KB
9 Feb 2022 6.45 PM
root / root
0755
unsuspendacct
18.455 KB
11 Sep 2026 4.57 AM
root / root
0755
unsuspendmysqlusers
7.096 KB
11 Feb 2025 5.08 AM
root / root
0755
upcp
43.006 KB
25 Aug 2026 4.57 AM
root / root
0755
upcp-running
2.703 KB
9 Feb 2022 6.45 PM
root / root
0755
upcp.static
955.33 KB
11 Sep 2026 4.57 AM
root / root
0755
update-packages
5.069 KB
11 Feb 2025 5.08 AM
root / root
0755
update_apachectl
0.469 KB
9 Feb 2022 6.45 PM
root / root
0755
update_db_cache
0.42 KB
9 Feb 2022 6.45 PM
root / root
0755
update_dkim_keys
1.45 KB
9 Feb 2022 6.45 PM
root / root
0755
update_exim_rejects
1.213 KB
9 Feb 2022 6.45 PM
root / root
0755
update_existing_mail_quotas_for_account
4.776 KB
9 Feb 2022 6.45 PM
root / root
0755
update_feature_flags
0.935 KB
11 Feb 2025 5.08 AM
root / root
0755
update_freebusy_data
5.25 KB
1 Apr 2025 10.57 PM
root / root
0755
update_known_proxy_ips
0.979 KB
9 Feb 2022 6.45 PM
root / root
0755
update_local_rpm_versions
4.56 KB
2 Dec 2022 4.41 PM
root / root
0755
update_mailman_cache
8.345 KB
9 Feb 2022 6.45 PM
root / root
0755
update_mysql_systemd_config
1.068 KB
7 Mar 2025 3.31 PM
root / root
0755
update_neighbor_netblocks
0.476 KB
9 Feb 2022 6.45 PM
root / root
0755
update_sa_config
2.145 KB
9 Feb 2022 6.45 PM
root / root
0755
update_spamassassin_config
10.73 KB
2 Dec 2022 4.41 PM
root / root
0755
update_users_jail
0.675 KB
9 Feb 2022 6.45 PM
root / root
0755
update_users_vhosts
0.782 KB
9 Feb 2022 6.45 PM
root / root
0755
updatedomainips
0.591 KB
9 Feb 2022 6.45 PM
root / root
0755
updatenameserverips
1.656 KB
9 Feb 2022 6.45 PM
root / root
0755
updatenow
5.178 KB
28 Jul 2022 12.22 AM
root / root
0755
updatenow.static
2.02 MB
11 Sep 2026 4.57 AM
root / root
0755
updatenow.static-cpanelsync
2.03 MB
12 Sep 2026 4.57 AM
root / root
0700
updatesigningkey
1.949 KB
9 Feb 2022 6.45 PM
root / root
0755
updatessldomains
1.813 KB
9 Feb 2022 6.45 PM
root / root
0755
updatesupportauthorizations
2.492 KB
9 Feb 2022 6.45 PM
root / root
0755
updateuserdatacache
2.47 KB
9 Feb 2022 6.45 PM
root / root
0755
updateuserdomains
0.756 KB
9 Feb 2022 6.45 PM
root / root
0755
upgrade_bandwidth_dbs
2.219 KB
9 Feb 2022 6.45 PM
root / root
0755
upgrade_subaccount_databases
2.731 KB
9 Feb 2022 6.45 PM
root / root
0755
userdata_wildcard_cleanup
5.739 KB
9 Feb 2022 6.45 PM
root / root
0755
userdirctl
5.014 KB
9 Feb 2022 6.45 PM
root / root
0755
validate_sshkey_passphrase
1.215 KB
9 Feb 2022 6.45 PM
root / root
0755
verify_api_spec_files
0.739 KB
9 Feb 2022 6.45 PM
root / root
0755
verify_pidfile
1.961 KB
9 Feb 2022 6.45 PM
root / root
0755
verify_vhost_includes
7.341 KB
28 Jul 2022 12.22 AM
root / root
0755
vps_optimizer
7.819 KB
9 Feb 2022 6.45 PM
root / root
0755
vzzo-fixer
0.708 KB
9 Feb 2022 6.45 PM
root / root
0755
whmlogin
2.334 KB
9 Feb 2022 6.45 PM
root / root
0755
whoowns
1.128 KB
13 Sep 2016 4.25 PM
root / root
0755
wwwacct
30.35 MB
11 Sep 2026 4.57 AM
root / root
0700
wwwacct2
0.086 KB
11 Feb 2015 5.35 PM
root / root
0755
xfer_rcube_schema_migrate.pl
2.402 KB
9 Feb 2022 6.45 PM
root / root
0755
xfer_rcube_uid_resolver.pl
1.803 KB
9 Feb 2022 6.45 PM
root / root
0755
xferpoint
3.126 KB
9 Feb 2022 6.45 PM
root / root
0755
xfertool
16.234 KB
11 Feb 2025 5.08 AM
root / root
0755
zoneexists
0.781 KB
9 Feb 2022 6.45 PM
root / root
0755

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF