Linux worldls-302.fr.planethoster.net 4.18.0-553.8.1.lve.el7h.x86_64 #1 SMP Thu Jul 4 15:19:33 UTC 2024 x86_64
LiteSpeed
Server IP : 10.185.0.203 & Your IP : 216.73.216.32
Domains :
Cant Read [ /etc/named.conf ]
User : gerathty
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
local /
cpanel /
scripts /
Delete
Unzip
Name
Size
Permission
Date
Action
Cpanel
[ DIR ]
drwxr-xr-x
2019-07-09 15:26
cpan_sandbox
[ DIR ]
drwxr-xr-x
2017-06-12 20:25
php_sandbox
[ DIR ]
drwxr-xr-x
2019-12-19 20:51
MirrorSearch_pingtest
2.38
KB
-rwxr-xr-x
2022-05-23 22:47
activesync-invite-reply
1.69
KB
-rwxr-xr-x
2022-05-23 22:47
add_dns
2.36
KB
-rwxr-xr-x
2022-05-23 22:47
adddns
2.36
KB
-rwxr-xr-x
2022-05-23 22:47
addpop
6.08
KB
-rwxr-xr-x
2022-05-23 22:47
addsystemuser
3.27
KB
-rwxr-xr-x
2022-05-23 22:47
adduser
92
B
-rwxr-xr-x
2017-06-12 20:25
analyze_config
3.88
KB
-rwxr-xr-x
2019-07-09 15:26
apachelimits
4.31
KB
-rwxr-xr-x
2022-05-23 22:47
archive_sync_zones
3.02
KB
-rwxr-xr-x
2022-05-23 22:47
auto-adjust-mysql-limits
1.81
KB
-rwxr-xr-x
2022-05-23 22:47
autorepair
1.24
KB
-rwxr-xr-x
2022-05-23 22:47
backup_jobs_helper
10.88
KB
-rwxr-xr-x
2026-07-14 15:39
backups_clean_metadata_for_missing_backups
1.57
KB
-rwxr-xr-x
2022-05-23 22:47
backups_create_metadata
15.75
KB
-rwxr-xr-x
2022-05-23 22:47
backups_list_user_files
4.56
KB
-rwxr-xr-x
2022-05-23 22:47
balance_linked_node_quotas
2.58
KB
-rwxr-xr-x
2022-05-23 22:47
biglogcheck
1.69
KB
-rwxr-xr-x
2022-05-23 22:47
build_bandwidthdb_root_cache_in_background
1.52
KB
-rwxr-xr-x
2022-05-23 22:47
build_cpnat
3.41
KB
-rwxr-xr-x
2022-05-23 22:47
build_mail_sni
3.87
KB
-rwxr-xr-x
2022-09-26 23:02
build_maxemails_config
1.14
KB
-rwxr-xr-x
2022-05-23 22:47
builddovecotconf
6.76
KB
-rwxr-xr-x
2022-05-23 22:47
buildeximconf
7
KB
-rwxr-xr-x
2023-04-19 19:46
buildhttpdconf
2.6
KB
-rwxr-xr-x
2022-05-23 22:47
buildnsdconf
1.01
KB
-rwxr-xr-x
2022-05-23 22:47
buildpureftproot
539
B
-rwxr-xr-x
2022-05-23 22:47
call_pkgacct
2.25
KB
-rwxr-xr-x
2026-07-14 15:39
ccs-check
4.91
KB
-rwxr-xr-x
2022-05-23 22:47
check_cpanel_pkgs
10.6
KB
-rwxr-xr-x
2026-08-17 18:56
check_cpanel_rpms
218
B
-rwxr-xr-x
2021-12-06 23:00
check_domain_tls_service_domains.pl
6.68
KB
-rwxr-xr-x
2022-05-23 22:47
check_immutable_files
5.49
KB
-rwxr-xr-x
2022-05-23 22:47
check_mail_spamassassin_compiledregexps_body_0
187
B
-rwxr-xr-x
2017-06-12 20:25
check_maxmem_against_domains_count
3.57
KB
-rwxr-xr-x
2022-05-23 22:47
check_mount_procfs
2.02
KB
-rwxr-xr-x
2022-05-23 22:47
check_mysql
5.55
KB
-rwxr-xr-x
2022-09-26 23:02
check_security_advice_changes
8.28
KB
-rwxr-xr-x
2023-04-19 19:46
check_unmonitored_enabled_services
4.56
KB
-rwxr-xr-x
2022-09-26 23:02
check_unreliable_resolvers
3.59
KB
-rwxr-xr-x
2022-05-23 22:47
check_users_my_cnf
6.05
KB
-rwxr-xr-x
2022-05-23 22:47
check_valid_server_hostname
7.66
KB
-rwxr-xr-x
2022-09-26 23:02
checkalldomainsmxs
2.4
KB
-rwxr-xr-x
2022-05-23 22:47
checkbashshell
1.18
KB
-rwxr-xr-x
2022-05-23 22:47
checkccompiler
1.22
KB
-rwxr-xr-x
2022-05-23 22:47
checkexim.pl
3.1
KB
-rwxr-xr-x
2022-05-23 22:47
checklink
1.29
KB
-rwxr-xr-x
2022-05-23 22:47
checknsddirs
1014
B
-rwxr-xr-x
2022-05-23 22:47
checkusers
856
B
-rwxr-xr-x
2022-05-23 22:47
chkmydns
561
B
-rwxr-xr-x
2022-05-23 22:47
chkpaths
141
B
-rwxr-xr-x
2017-06-12 20:25
chpass
416
B
-rwxr-xr-x
2022-05-23 22:47
ckillall
1.11
KB
-rwxr-xr-x
2022-05-23 22:47
cl_pkg_verify_hook.py
2.38
KB
-rwxr-xr-x
2026-08-17 16:10
clean_dead_mailman_locks
2.09
KB
-rwxr-xr-x
2022-05-23 22:47
clean_up_temp_wheel_users
2.44
KB
-rwxr-xr-x
2022-05-23 22:47
clean_user_php_sessions
4.76
KB
-rwxr-xr-x
2022-08-29 22:43
cleandns
13.09
KB
-rwxr-xr-x
2022-09-26 23:02
cleandns8
417
B
-rwxr-xr-x
2022-05-23 22:47
cleanmsglog
735
B
-rwxr-xr-x
2017-06-12 20:25
cleanphpsessions
932
B
-rwxr-xr-x
2022-05-23 22:47
cleanphpsessions.php
658
B
-rw-r--r--
2022-08-16 01:08
cleanquotas
1.61
KB
-rwxr-xr-x
2022-05-23 22:47
cleansessions
5.91
KB
-rwxr-xr-x
2023-05-09 02:08
cleanupinterchange
2.64
KB
-rwxr-xr-x
2022-05-23 22:47
cleanupmysqlprivs
533
B
-rwxr-xr-x
2021-12-06 23:00
clear_cpaddon_ui_caches
1.27
KB
-rwxr-xr-x
2022-05-23 22:47
clear_orphaned_virtfs_mounts
3.56
KB
-rwxr-xr-x
2022-05-23 22:47
comet_license_registration_sync
1.67
KB
-rwxr-xr-x
2026-07-14 15:39
comet_protected_item_maintenance
20.78
KB
-rwxr-xr-x
2026-07-14 15:39
comparecdb
1.52
KB
-rwxr-xr-x
2022-05-23 22:47
compilers
2.86
KB
-rwxr-xr-x
2022-05-23 22:47
compilerscheck
999
B
-rwxr-xr-x
2022-05-23 22:47
configure_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-05-23 22:47
configure_rh_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-05-23 22:47
configure_rh_ipv6_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-05-23 22:47
convert2dovecot
682
B
-rwxr-xr-x
2022-05-23 22:47
convert_accesshash_to_token
4.07
KB
-rwxr-xr-x
2022-05-23 22:47
convert_and_migrate_from_legacy_backup
1.97
KB
-rwxr-xr-x
2022-05-23 22:47
convert_maildir_to_mdbox
1.66
KB
-rwxr-xr-x
2022-05-23 22:47
convert_mdbox_to_maildir
1.66
KB
-rwxr-xr-x
2022-05-23 22:47
convert_roundcube_mysql2sqlite
25.28
KB
-rwxr-xr-x
2024-12-11 18:43
convert_to_dovecot_delivery
4.33
KB
-rwxr-xr-x
2022-05-23 22:47
convert_whmxfer_to_sqlite
1.46
KB
-rwxr-xr-x
2022-05-23 22:47
copy_user_mail_as_root
1.25
KB
-rwxr-xr-x
2022-05-23 22:47
copy_user_mail_as_user
1.34
KB
-rwxr-xr-x
2022-05-23 22:47
cpaddonsup
3.25
KB
-rwxr-xr-x
2022-05-23 22:47
cpan_config
2.8
KB
-rwxr-xr-x
2022-05-23 22:47
cpanel_initial_install
67.36
KB
-rwxr-xr-x
2024-06-17 22:07
cpanelsync
28.31
KB
-rwxr-xr-x
2022-05-23 22:47
cpanelsync_postprocessor
1.62
KB
-rwxr-xr-x
2022-05-23 22:47
cpanpingtest
965
B
-rwxr-xr-x
2022-05-23 22:47
cpbackup
44.77
KB
-rwxr-xr-x
2022-09-26 23:02
cpbackup_transport_file
5.65
KB
-rwxr-xr-x
2023-04-19 19:46
cpdig
1.81
KB
-rwxr-xr-x
2022-05-23 22:47
cpfetch
1.23
KB
-rwxr-xr-x
2022-05-23 22:47
cphulkdblacklist
433
B
-rwxr-xr-x
2022-05-23 22:47
cphulkdwhitelist
1.3
KB
-rwxr-xr-x
2022-05-23 22:47
cpservice
2.87
KB
-rwxr-xr-x
2022-05-23 22:47
cpuser_port_authority
19.29
KB
-rwxr-xr-x
2022-05-23 22:47
cpuser_service_manager
10.85
KB
-rwxr-xr-x
2022-09-26 23:02
create_default_featurelist
11.62
KB
-rwx------
2026-08-10 23:12
createacct
24.61
MB
-rwx------
2026-08-19 22:25
custom_backup_destination.pl.sample
5.06
KB
-rwxr-xr-x
2022-09-26 23:02
custom_backup_destination.pl.skeleton
2.84
KB
-rwxr-xr-x
2022-05-23 22:47
dav_change_hostname
3.57
KB
-rwxr-xr-x
2022-05-23 22:47
dcpumon-wrapper
850
B
-rwxr-xr-x
2022-05-23 22:47
delpop
6.2
KB
-rwxr-xr-x
2022-05-23 22:47
detect_env_capabilities
508
B
-rwxr-xr-x
2022-05-23 22:47
disable_prelink
2.77
KB
-rwxr-xr-x
2022-05-23 22:47
disable_sqloptimizer
1.49
KB
-rwxr-xr-x
2022-05-23 22:47
disablefileprotect
2.09
KB
-rwxr-xr-x
2022-05-23 22:47
distro_changed_hook
1.16
KB
-rwxr-xr-x
2022-05-23 22:47
dnscluster
4.44
KB
-rwxr-xr-x
2022-05-23 22:47
dnsqueuecron
1.29
KB
-rwxr-xr-x
2022-05-23 22:47
dnssec-cluster-keys
3.75
KB
-rwxr-xr-x
2022-05-23 22:47
dovecot_maintenance
7.93
KB
-rwxr-xr-x
2022-05-23 22:47
dovecot_set_defaults.pl
984
B
-rwxr-xr-x
2022-05-23 22:47
dump_databases_and_users
2.3
KB
-rwxr-xr-x
2019-07-09 15:26
dumpcdb
866
B
-rwxr-xr-x
2022-05-23 22:47
dumpinodes
687
B
-rwxr-xr-x
2022-05-23 22:47
dumpquotas
616
B
-rwxr-xr-x
2022-05-23 22:47
dumpstor
913
B
-rwxr-xr-x
2022-05-23 22:47
ea4_fresh_install
2.64
KB
-rwxr-xr-x
2022-05-23 22:47
edit_cpanelsync_exclude_list
2.58
KB
-rwxr-xr-x
2022-05-23 22:47
editquota
3.44
KB
-rwxr-xr-x
2022-05-23 22:47
elevate-cpanel
414.63
KB
-rwx------
2026-06-23 02:42
email_archive_maintenance
6.15
KB
-rwxr-xr-x
2022-05-23 22:47
email_hold_maintenance
1.46
KB
-rwxr-xr-x
2022-05-23 22:47
enable_spf_dkim_globally
8.83
KB
-rwxr-xr-x
2022-05-23 22:47
enable_sqloptimizer
1.57
KB
-rwxr-xr-x
2022-05-23 22:47
enablefileprotect
2.1
KB
-rwxr-xr-x
2022-05-23 22:47
ensure_autoenabled_features
2.5
MB
-rwx------
2026-08-19 22:25
ensure_conf_dir_crt_key
4.82
KB
-rwxr-xr-x
2022-05-23 22:47
ensure_cpuser_file_ip
2.55
KB
-rwxr-xr-x
2022-05-23 22:47
ensure_crontab_permissions
1.08
KB
-rwxr-xr-x
2022-05-23 22:47
ensure_dovecot_memory_limits_meet_minimum
3.13
KB
-rwxr-xr-x
2022-05-23 22:47
ensure_hostname_resolves
2.38
KB
-rwxr-xr-x
2025-03-26 23:59
ensure_includes
601
B
-rwxr-xr-x
2022-05-23 22:47
ensure_vhost_includes
13.53
KB
-rwxr-xr-x
2022-05-23 22:47
exim_tidydb
2.96
KB
-rwxr-xr-x
2022-05-23 22:47
eximconfgen
1.32
KB
-rwxr-xr-x
2022-05-23 22:47
eximstats_spam_check
867
B
-rwxr-xr-x
2022-05-23 22:47
export_horde_calendars_to_ics
15.07
KB
-rwxr-xr-x
2023-07-31 22:37
export_horde_contacts_to_vcf
13.94
KB
-rwxr-xr-x
2023-05-09 02:08
exportmydnsdb
3.47
KB
-rwxr-xr-x
2022-05-23 22:47
expunge_expired_certificates_from_sslstorage
3.56
KB
-rwxr-xr-x
2022-05-23 22:47
expunge_expired_pkgacct_sessions
852
B
-rwxr-xr-x
2022-05-23 22:47
expunge_expired_transfer_sessions
1.06
KB
-rwxr-xr-x
2022-05-23 22:47
fastmail
5.16
KB
-rwxr-xr-x
2022-05-23 22:47
featuremod
1.92
KB
-rwxr-xr-x
2022-05-23 22:47
fetchfile
422
B
-rwxr-xr-x
2022-05-23 22:47
find_and_fix_rpm_issues
6.99
KB
-rwxr-xr-x
2022-05-23 22:47
find_outdated_services
5.41
KB
-rwxr-xr-x
2023-06-05 22:59
find_pids_with_inotify_watch_on_path
3.66
KB
-rwxr-xr-x
2022-05-23 22:47
fix-cpanel-perl
28.83
KB
-rwxr-xr-x
2026-08-19 22:25
fix-listen-on-localhost
3.94
KB
-rwxr-xr-x
2026-06-03 00:56
fix-web-vhost-configuration
6.15
KB
-rwxr-xr-x
2022-05-23 22:47
fix_addon_permissions
7.68
KB
-rwxr-xr-x
2022-05-23 22:47
fix_dns_zone_ttls
1.34
KB
-rwxr-xr-x
2022-05-23 22:47
fix_innodb_tables
4.05
KB
-rwxr-xr-x
2022-05-23 22:47
fix_pear_registry
4.07
KB
-rwxr-xr-x
2022-05-23 22:47
fix_reseller_acls
10.88
KB
-rwxr-xr-x
2022-05-23 22:47
fixetchosts
4.32
KB
-rwxr-xr-x
2022-05-23 22:47
fixheaders
572
B
-rwxr-xr-x
2022-05-23 22:47
fixmailinglistperms
1008
B
-rwxr-xr-x
2022-05-23 22:47
fixmailman
2.09
KB
-rwxr-xr-x
2022-05-23 22:47
fixnamedviews
1.22
KB
-rwxr-xr-x
2022-05-23 22:47
fixndc
413
B
-rwxr-xr-x
2022-05-23 22:47
fixquotas
17.45
KB
-rwxr-xr-x
2023-05-09 02:08
fixrelayd
1.74
KB
-rwxr-xr-x
2022-05-23 22:47
fixrndc
16.48
KB
-rwxr-xr-x
2022-05-23 22:47
fixtar
503
B
-rwxr-xr-x
2022-05-23 22:47
fixtlsversions
4.7
KB
-rwxr-xr-x
2022-05-23 22:47
fixvaliases
2
KB
-rwxr-xr-x
2022-05-23 22:47
fixwebalizer
966
B
-rwxr-xr-x
2022-05-23 22:47
forcelocaldomain
895
B
-rwxr-xr-x
2022-05-23 22:47
ftpfetch
2.2
KB
-rwxr-xr-x
2019-12-19 20:51
ftpquotacheck
8.31
KB
-rwxr-xr-x
2022-05-23 22:47
ftpsfetch
2.36
KB
-rwxr-xr-x
2019-12-19 20:51
ftpupdate
261
B
-rwxr-xr-x
2020-10-20 22:17
gather_update_log_stats
4.25
KB
-rwx------
2026-07-27 23:44
gather_update_logs_setupcrontab
5.45
KB
-rwx------
2026-07-27 23:44
gemwrapper
1.74
KB
-rwxr-xr-x
2022-05-23 22:47
gencrt
6.26
KB
-rwxr-xr-x
2022-05-23 22:47
generate_account_suspension_include
5.7
KB
-rwxr-xr-x
2022-05-23 22:47
generate_google_drive_credentials
1.11
KB
-rwxr-xr-x
2022-05-23 22:47
generate_google_drive_oauth_uri
984
B
-rwxr-xr-x
2022-05-23 22:47
generate_maildirsize
13.94
KB
-rwxr-xr-x
2023-04-19 19:46
gensysinfo
1.16
KB
-rwxr-xr-x
2022-05-23 22:47
get_locale_from_legacy_name_info
1.99
KB
-rwxr-xr-x
2022-05-23 22:47
getremotecpmove
12.67
KB
-rwxr-xr-x
2022-09-26 23:02
grpck
1.19
KB
-rwxr-xr-x
2022-05-23 22:47
hackcheck
3.02
KB
-rwxr-xr-x
2022-05-23 22:47
hook
1.45
KB
-rwxr-xr-x
2022-05-23 22:47
httpspamdetect
2.66
KB
-rwxr-xr-x
2022-05-23 22:47
hulk-unban-ip
3.93
MB
-rwx------
2026-08-19 22:25
import_exim_data
8.39
KB
-rwxr-xr-x
2022-09-26 23:02
importmydnsdb
11.34
KB
-rwxr-xr-x
2022-05-23 22:47
increase_filesystem_limits
891
B
-rwxr-xr-x
2022-05-23 22:47
initacls
4.99
KB
-rwxr-xr-x
2022-05-23 22:47
initfpsuexec
444
B
-rwxr-xr-x
2022-05-23 22:47
initquotas
19.47
KB
-rwxr-xr-x
2022-05-23 22:47
initsuexec
4.03
KB
-rwxr-xr-x
2022-05-23 22:47
install_cpanel_analytics
1.93
KB
-rwxr-xr-x
2023-05-09 02:08
install_dovecot_fts
1.57
KB
-rwxr-xr-x
2022-05-23 22:47
install_plugin
2.8
KB
-rwxr-xr-x
2022-09-26 23:02
install_tuxcare_els_php
1.84
KB
-rwxr-xr-x
2026-04-29 02:27
installpkg
575
B
-rwxr-xr-x
2022-05-23 22:47
installpostgres
6.56
KB
-rwxr-xr-x
2022-05-23 22:47
installsqlite3
1.82
KB
-rwxr-xr-x
2022-05-23 22:47
ipcheck
3.93
KB
-rwxr-xr-x
2022-05-23 22:47
ipusage
7.45
KB
-rwxr-xr-x
2022-05-23 22:47
is_update_available
3.26
KB
-rwxr-xr-x
2026-05-20 14:08
isdedicatedip
602
B
-rwxr-xr-x
2022-05-23 22:47
jetbackup-check
3.69
KB
-rwxr-xr-x
2022-05-23 22:47
killdns
422
B
-rwxr-xr-x
2022-05-23 22:47
killdns-dnsadmin
1.15
KB
-rwxr-xr-x
2022-05-23 22:47
killmysqluserprivs
433
B
-rwxr-xr-x
2022-05-23 22:47
killmysqlwildcard
1.15
KB
-rwxr-xr-x
2022-05-23 22:47
killpvhost
853
B
-rwxr-xr-x
2022-05-23 22:47
killspamkeys
937
B
-rwxr-xr-x
2022-05-23 22:47
link_3rdparty_binaries
1.24
KB
-rwxr-xr-x
2022-07-18 22:00
linksubemailtomainacct
3.17
KB
-rwxr-xr-x
2022-05-23 22:47
listcheck
538
B
-rwxr-xr-x
2022-05-23 22:47
listsubdomains
1.05
KB
-rwxr-xr-x
2022-05-23 22:47
litespeed-check
3.86
KB
-rwxr-xr-x
2022-05-23 22:47
locale_export
4.82
KB
-rwxr-xr-x
2022-05-23 22:47
locale_import
4.69
KB
-rwxr-xr-x
2026-07-29 18:51
locale_info
3.99
KB
-rwxr-xr-x
2022-05-23 22:47
logo.dat
205
B
-rw-r--r--
2017-06-12 20:25
magicloader
1.94
KB
-rwxr-xr-x
2022-05-23 22:47
maildir_converter
6.08
KB
-rwxr-xr-x
2022-05-23 22:47
mailperm
16.58
KB
-rwxr-xr-x
2022-05-23 22:47
mailscannerupdate
2.42
KB
-rwxr-xr-x
2022-05-23 22:47
mainipcheck
10
KB
-rwxr-xr-x
2022-05-23 22:47
maintenance
47.95
KB
-rwxr-xr-x
2026-08-17 18:56
make_config
407
B
-rw-r--r--
2017-06-12 20:25
make_hostname_unowned
1.16
KB
-rwxr-xr-x
2022-05-23 22:47
manage_extra_marketing
12.76
KB
-rwx------
2026-08-10 23:12
manage_greylisting
16.19
KB
-rwxr-xr-x
2022-09-26 23:02
manage_mysql_profiles
20.02
KB
-rwxr-xr-x
2023-05-09 02:08
migrate-pdns-conf
9.83
KB
-rwxr-xr-x
2024-10-16 23:01
migrate_legacy_wordpress_to_modern_wordpress
12.99
KB
-rwx------
2021-02-08 02:09
migrate_local_ini_to_php_ini
7.41
KB
-rwxr-xr-x
2022-05-23 22:47
migrate_whmtheme_file_to_userdata
2.95
KB
-rwxr-xr-x
2022-05-23 22:47
mkwwwacctconf
2.33
KB
-rwxr-xr-x
2023-04-19 19:46
modify_accounts
4.09
KB
-rwxr-xr-x
2022-09-26 23:02
modify_featurelist
11.33
KB
-rwx------
2026-08-10 23:12
modify_packages
3.65
KB
-rwxr-xr-x
2022-09-26 23:02
modsec_vendor
15.63
KB
-rwxr-xr-x
2022-05-23 22:47
mysqlconnectioncheck
6.55
KB
-rwxr-xr-x
2022-05-23 22:47
mysqlpasswd
4.09
KB
-rwxr-xr-x
2022-05-23 22:47
named.ca
1.57
KB
-rw-r--r--
2017-06-12 20:25
named.rfc1912.zones
774
B
-rw-r--r--
2017-11-28 02:44
nixstatsagent.sh
58.67
KB
-rwx------
2022-07-06 16:06
notify_expiring_certificates
9.37
KB
-rwxr-xr-x
2022-07-18 22:01
notify_expiring_certificates_on_linked_nodes
1.33
KB
-rwxr-xr-x
2022-09-26 23:02
oopscheck
1.12
KB
-rwxr-xr-x
2022-05-23 22:47
optimize_eximstats
3.88
KB
-rwxr-xr-x
2022-05-23 22:47
panel_ini
4.11
KB
-rwxr-xr-x
2026-06-03 00:56
patch_mail_spamassassin_compiledregexps_body_0
2.39
KB
-rwxr-xr-x
2022-05-23 22:47
patchfdsetsize
2.72
KB
-rwxr-xr-x
2022-05-23 22:47
pedquota
2.26
KB
-rwxr-xr-x
2022-05-23 22:47
perform_sqlite_auto_rebuild_db_maintenance
2.2
KB
-rwxr-xr-x
2022-05-23 22:47
perlinstaller
528
B
-rwxr-xr-x
2022-05-23 22:47
perlmods
1.18
KB
-rwxr-xr-x
2022-05-23 22:47
php_fpm_config
9.73
KB
-rwxr-xr-x
2022-05-23 22:47
phpini_tidy
687
B
-rwxr-xr-x
2022-05-23 22:47
pkgacct
88.56
KB
-rwxr-xr-x
2026-04-29 02:27
pkgacct-wrapper
3.7
KB
-rwxr-xr-x
2019-07-09 15:26
post_snapshot
3.16
KB
-rwxr-xr-x
2023-04-19 19:46
post_sync_cleanup
6.09
KB
-rwxr-xr-x
2022-05-23 22:47
posteasyapache
126
B
-rwxr-xr-x
2026-08-17 18:21
postkillacct
12
B
-rwxr-xr-x
2026-08-17 18:21
postmodifyacct
12
B
-rwxr-xr-x
2026-08-17 18:21
postrestoreacct
12
B
-rwxr-xr-x
2026-08-17 18:21
postupcp
302
B
-rwxr-xr-x
2026-08-21 02:42
postwwwacct
12
B
-rwxr-xr-x
2026-08-17 18:21
prekillacct
12
B
-rwxr-xr-x
2026-08-17 18:21
premodifyacct
12
B
-rwxr-xr-x
2026-08-17 16:10
preupcp
12
B
-rwxr-xr-x
2026-08-17 16:10
primary_virtual_host_migration
2.44
KB
-rwxr-xr-x
2022-05-23 22:47
process_cpmove
4.32
KB
-rwxr-xr-x
2026-07-14 15:39
process_pending_cpanel_php_pear_registration
3.49
KB
-rwxr-xr-x
2022-05-23 22:47
process_site_templates
7.27
KB
-rwxr-xr-x
2022-05-23 22:47
proxydomains
9.34
KB
-rwxr-xr-x
2022-05-23 22:47
ptycheck
724
B
-rwxr-xr-x
2022-05-23 22:47
purge_modsec_log
1.53
KB
-rwxr-xr-x
2022-05-23 22:47
purge_old_config_caches
2.08
KB
-rwxr-xr-x
2022-05-23 22:47
pwck
708
B
-rwxr-xr-x
2022-05-23 22:47
quickdnslookup
1.13
KB
-rwxr-xr-x
2022-05-23 22:47
quickwhoisips
2.29
KB
-rwxr-xr-x
2022-09-26 23:02
quota_auto_fix
1.41
KB
-rwxr-xr-x
2022-05-23 22:47
quotacheck
22.36
KB
-rwxr-xr-x
2022-09-26 23:02
rawchpass
460
B
-rwxr-xr-x
2022-05-23 22:47
rdate
4.8
KB
-rwxr-xr-x
2022-09-26 23:02
realadduser
5.61
KB
-rwxr-xr-x
2022-05-23 22:47
realchpass
3.26
KB
-rwxr-xr-x
2022-05-23 22:47
realperlinstaller
5.67
KB
-rwxr-xr-x
2022-05-23 22:47
realrawchpass
425
B
-rwxr-xr-x
2022-05-23 22:47
rebuild_available_addons_packages_cache
1.27
KB
-rwxr-xr-x
2022-05-23 22:47
rebuild_available_rpm_addons_cache
1.27
KB
-rwxr-xr-x
2022-05-23 22:47
rebuild_bandwidthdb_root_cache
1.45
KB
-rwxr-xr-x
2022-05-23 22:47
rebuild_dbmap
5.8
KB
-rwxr-xr-x
2022-05-23 22:47
rebuild_provider_openid_connect_links_db
1.01
KB
-rwxr-xr-x
2022-05-23 22:47
rebuild_whm_chrome
2.22
KB
-rwxr-xr-x
2022-05-23 22:47
rebuilddnsconfig
26.21
KB
-rwxr-xr-x
2022-05-23 22:47
rebuildhttpdconf
2.6
KB
-rwxr-xr-x
2022-05-23 22:47
rebuildinstalledssldb
2.85
KB
-rwxr-xr-x
2022-05-23 22:47
rebuildippool
509
B
-rwxr-xr-x
2022-05-23 22:47
rebuildnsdzones
1.14
KB
-rwxr-xr-x
2022-05-23 22:47
rebuilduserssldb
948
B
-rwxr-xr-x
2022-05-23 22:47
refresh-dkim-validity-cache
5.97
KB
-rwxr-xr-x
2022-05-23 22:47
regenerate_tokens
2.18
KB
-rwxr-xr-x
2022-09-26 23:02
reloadnsd
821
B
-rwxr-xr-x
2022-05-23 22:47
remote_log_transfer
11.6
KB
-rwxr-xr-x
2023-04-19 19:46
remove_dovecot_index_files
5.89
KB
-rwxr-xr-x
2022-05-23 22:47
removeacct
21.51
MB
-rwx------
2026-08-19 22:25
rescan_user_dovecot_fts
2.98
KB
-rwxr-xr-x
2022-05-23 22:47
reset_mail_quotas_to_sane_values
6.82
KB
-rwxr-xr-x
2022-05-23 22:47
resetmailmanurls
2.03
KB
-rwxr-xr-x
2022-05-23 22:47
resetquotas
4.68
KB
-rwxr-xr-x
2022-05-23 22:47
restartsrv
3.23
KB
-rwxr-xr-x
2022-05-23 22:47
restartsrv_apache
422
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_apache_php_fpm
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_base
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_bind
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_chkservd
427
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_clamd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cpanalyticsd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cpanel_php_fpm
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cpanellogd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cpdavd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cpgreylistd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cphulkd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cpipv6
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_cpsrvd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_crond
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_dnsadmin
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_dovecot
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_exim
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_eximstats
504
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_ftpd
426
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_ftpserver
911
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_httpd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_imap
437
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_inetd
2.47
KB
-rwxr-xr-x
2022-09-26 23:02
restartsrv_ipaliases
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_lmtp
437
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_mailman
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_mydns
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_mysql
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_named
777
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_nscd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_nsd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_p0f
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_pdns
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_pop3
437
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_postgres
427
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_postgresql
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_powerdns
442
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_proftpd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_pureftpd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_queueprocd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_rsyslog
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_rsyslogd
437
B
-rwxr-xr-x
2022-05-23 22:47
restartsrv_spamd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_sshd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_syslogd
2.4
KB
-rwxr-xr-x
2022-07-18 22:01
restartsrv_tailwatchd
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_unknown
9.9
MB
-rwxr-xr-x
2026-08-19 22:25
restartsrv_xinetd
422
B
-rwxr-xr-x
2022-05-23 22:47
restorecpuserfromcache
1.96
KB
-rwxr-xr-x
2022-05-23 22:47
restorepkg
37.53
MB
-rwx------
2026-08-19 22:25
rfc1912_zones.tar
10
KB
-rw-r--r--
2017-06-12 20:25
rpmup
4.77
KB
-rwxr-xr-x
2022-05-23 22:47
rsync-user-homedir.pl
5.76
KB
-rwxr-xr-x
2022-05-23 22:47
run_if_exists
512
B
-rwxr-xr-x
2022-05-23 22:47
run_plugin_lifecycle
3.96
KB
-rwx------
2026-08-10 23:12
runstatsonce
440
B
-rwxr-xr-x
2022-05-23 22:47
runweblogs
1.02
KB
-rwxr-xr-x
2022-05-23 22:47
sa-update_wrapper
3.34
KB
-rwxr-xr-x
2022-05-23 22:47
safetybits.pl
844
B
-rwxr-xr-x
2022-05-23 22:47
secureit
4.72
KB
-rwxr-xr-x
2022-05-23 22:47
securemysql
4.54
KB
-rwxr-xr-x
2022-05-23 22:47
securerailsapps
3.58
KB
-rwxr-xr-x
2022-05-23 22:47
securetmp
15.99
KB
-rwxr-xr-x
2023-07-31 22:37
selectorunparkhook.py
1.7
KB
-rwxr-xr-x
2026-08-17 16:10
sendicq
474
B
-rwxr-xr-x
2022-05-23 22:47
servicedomains
9.34
KB
-rwxr-xr-x
2022-05-23 22:47
set_mailman_archive_perms
1.75
KB
-rwxr-xr-x
2022-05-23 22:47
set_php_memory_limits
3.67
KB
-rwxr-xr-x
2022-05-23 22:47
setpostgresconfig
6.04
KB
-rwxr-xr-x
2022-05-23 22:47
setup_greylist_db
16.19
KB
-rwxr-xr-x
2022-09-26 23:02
setup_modsec_db
1.3
KB
-rwxr-xr-x
2022-05-23 22:47
setup_systemd_timer_for_plugins
3.92
KB
-rwx------
2026-08-10 23:12
setupftpserver
10.47
KB
-rwxr-xr-x
2022-05-23 22:47
setupmailserver
9.55
KB
-rwxr-xr-x
2022-05-23 22:47
setupnameserver
13.75
KB
-rwxr-xr-x
2022-09-26 23:02
shrink_modsec_ip_database
12.97
KB
-rwxr-xr-x
2022-05-23 22:47
simpleps
3.05
KB
-rwxr-xr-x
2022-05-23 22:47
slurp_exim_mainlog
5.78
KB
-rwxr-xr-x
2022-05-23 22:47
smartcheck
15.13
KB
-rwxr-xr-x
2022-05-23 22:47
smtpmailgidonly
8.15
KB
-rwxr-xr-x
2026-07-09 09:03
snapshot_prep
5.88
KB
-rwxr-xr-x
2023-04-19 19:46
spamassassin_dbm_cleaner
5.85
KB
-rwxr-xr-x
2022-09-26 23:02
spamassassindisable
3.74
KB
-rwxr-xr-x
2022-09-26 23:02
spamboxdisable
2.27
KB
-rwxr-xr-x
2022-09-26 23:02
sshcontrol
14.38
KB
-rwxr-xr-x
2022-05-23 22:47
ssl_crt_status
3.84
KB
-rwxr-xr-x
2022-05-23 22:47
suspendacct
18.01
KB
-rwxr-xr-x
2023-05-09 02:08
suspendmysqlusers
4.42
KB
-rwxr-xr-x
2022-05-23 22:47
swapip
3.82
KB
-rwxr-xr-x
2022-05-23 22:47
sync-mysql-users-from-grants
1.2
KB
-rwxr-xr-x
2022-05-23 22:47
sync_child_accounts
1.77
KB
-rwxr-xr-x
2022-05-23 22:47
sync_contact_emails_to_cpanel_users_files
1.14
KB
-rwxr-xr-x
2022-09-26 23:02
synccpaddonswithsqlhost
6.59
KB
-rwxr-xr-x
2022-05-23 22:47
synctransfers
1.92
KB
-rwxr-xr-x
2022-05-23 22:47
syslog_check
1.36
KB
-rwxr-xr-x
2022-05-23 22:47
sysup
645
B
-rwxr-xr-x
2022-05-23 22:47
test_sa_compiled
1.07
KB
-rwxr-xr-x
2022-05-23 22:47
transfer_account_as_user
2.34
KB
-rwxr-xr-x
2022-05-23 22:47
transfer_accounts_as_root
4.76
KB
-rwxr-xr-x
2022-05-23 22:47
transfer_in_progress
3.08
KB
-rwxr-xr-x
2022-05-23 22:47
transfer_in_progress.pod
312
B
-rw-r--r--
2017-06-12 20:25
transfermysqlusers
9.54
MB
-rwx------
2026-08-19 22:25
try-later
7.95
KB
-rwxr-xr-x
2022-05-23 22:47
unblockip
667
B
-rwxr-xr-x
2022-05-23 22:47
uninstall_cpanel_analytics
1.2
KB
-rwxr-xr-x
2022-05-23 22:47
uninstall_dovecot_fts
562
B
-rwxr-xr-x
2022-05-23 22:47
uninstall_plugin
2.84
KB
-rwxr-xr-x
2022-09-26 23:02
unlink_service_account
2.62
KB
-rwxr-xr-x
2022-05-23 22:47
unpkgacct
4.6
KB
-rwxr-xr-x
2022-05-23 22:47
unslavenamedconf
863
B
-rwxr-xr-x
2022-05-23 22:47
unsuspendacct
17.8
KB
-rwxr-xr-x
2023-05-09 02:08
unsuspendmysqlusers
6.71
KB
-rwxr-xr-x
2022-09-26 23:02
upcp
34.44
KB
-rwxr-xr-x
2026-07-09 09:03
upcp-running
2.7
KB
-rwxr-xr-x
2022-05-23 22:47
upcp.static
935.53
KB
-rwxr-xr-x
2026-08-19 22:25
update-packages
4.77
KB
-rwxr-xr-x
2022-05-23 22:47
update_apachectl
480
B
-rwxr-xr-x
2022-05-23 22:47
update_db_cache
430
B
-rwxr-xr-x
2022-05-23 22:47
update_dkim_keys
1.45
KB
-rwxr-xr-x
2022-05-23 22:47
update_exim_rejects
1.21
KB
-rwxr-xr-x
2022-05-23 22:47
update_existing_mail_quotas_for_account
4.78
KB
-rwxr-xr-x
2022-05-23 22:47
update_known_proxy_ips
1002
B
-rwxr-xr-x
2022-05-23 22:47
update_local_rpm_versions
4.56
KB
-rwxr-xr-x
2023-04-19 19:46
update_mailman_cache
8.34
KB
-rwxr-xr-x
2022-05-23 22:47
update_mysql_systemd_config
1.25
KB
-rwxr-xr-x
2022-05-23 22:47
update_neighbor_netblocks
487
B
-rwxr-xr-x
2022-05-23 22:47
update_sa_config
2.14
KB
-rwxr-xr-x
2022-05-23 22:47
update_spamassassin_config
10.73
KB
-rwxr-xr-x
2023-04-19 19:46
update_users_jail
691
B
-rwxr-xr-x
2022-05-23 22:47
update_users_vhosts
801
B
-rwxr-xr-x
2022-05-23 22:47
updatedomainips
605
B
-rwxr-xr-x
2022-05-23 22:47
updatenameserverips
1.66
KB
-rwxr-xr-x
2022-05-23 22:47
updatenow
5.18
KB
-rwxr-xr-x
2022-09-26 23:02
updatenow.static
1.92
MB
-rwxr-xr-x
2026-08-19 22:25
updatesigningkey
1.95
KB
-rwxr-xr-x
2022-05-23 22:47
updatessldomains
1.81
KB
-rwxr-xr-x
2022-05-23 22:47
updatesupportauthorizations
2.49
KB
-rwxr-xr-x
2022-05-23 22:47
updateuserdatacache
2.47
KB
-rwxr-xr-x
2022-05-23 22:47
updateuserdomains
774
B
-rwxr-xr-x
2022-05-23 22:47
upgrade_bandwidth_dbs
2.22
KB
-rwxr-xr-x
2022-05-23 22:47
upgrade_subaccount_databases
2.73
KB
-rwxr-xr-x
2022-05-23 22:47
userdata_wildcard_cleanup
5.74
KB
-rwxr-xr-x
2022-05-23 22:47
userdirctl
5.01
KB
-rwxr-xr-x
2022-05-23 22:47
validate_sshkey_passphrase
1.21
KB
-rwxr-xr-x
2022-05-23 22:47
verify_api_spec_files
757
B
-rwxr-xr-x
2022-05-23 22:47
verify_pidfile
1.96
KB
-rwxr-xr-x
2022-05-23 22:47
verify_vhost_includes
7.34
KB
-rwxr-xr-x
2022-09-26 23:02
vps_optimizer
7.82
KB
-rwxr-xr-x
2022-05-23 22:47
vzzo-fixer
725
B
-rwxr-xr-x
2022-05-23 22:47
whmlogin
2.33
KB
-rwxr-xr-x
2022-05-23 22:47
whoowns
1.13
KB
-rwxr-xr-x
2017-06-12 20:25
wpt_license
6.25
MB
-rwx------
2026-08-19 22:25
wwwacct
24.61
MB
-rwx------
2026-08-19 22:25
wwwacct2
88
B
-rwxr-xr-x
2017-06-12 20:25
xfer_rcube_schema_migrate.pl
2.4
KB
-rwxr-xr-x
2022-05-23 22:47
xfer_rcube_uid_resolver.pl
1.8
KB
-rwxr-xr-x
2022-05-23 22:47
xferpoint
3.13
KB
-rwxr-xr-x
2022-05-23 22:47
xfertool
16.14
KB
-rwxr-xr-x
2023-05-09 02:08
zoneexists
800
B
-rwxr-xr-x
2022-05-23 22:47
Save
Rename
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/maintenance Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package scripts::maintenance; use strict; use warnings; use Try::Tiny; use Cpanel::iContact::Class::Update::EndOfLife (); use Cpanel::AccessIds (); use Cpanel::Binaries (); use Cpanel::TimeHiRes (); use Cpanel::Config::LoadCpConf (); use Cpanel::ConfigFiles (); use Cpanel::Cron::Utils (); use Cpanel::Crypt::GPG::Settings (); use Cpanel::Crypt::GPG::VendorKeys::TimestampCache (); use Cpanel::Env (); use Cpanel::IOCallbackWriteLine (); use Cpanel::MysqlUtils::Version (); use Cpanel::Notify (); use Cpanel::OS (); use Cpanel::Rand::Get (); use Cpanel::SafeRun::Object (); use Cpanel::SafeRun::BG (); use Cpanel::Server::Type (); use Cpanel::ServerTasks (); use Cpanel::Services::Enabled (); use Cpanel::Sync::CheckRestore (); use Cpanel::Update::Config (); use Cpanel::Config::Crontab (); use Cpanel::Update::Logger (); use IO::Handle (); use IO::Select (); # hash we'll use to process each request our $RPM_IS_BROKEN = 0; our $_UPGRADE_IN_PROGRESS_FILE = '/usr/local/cpanel/upgrade_in_progress.txt'; my $DRY_RUN; our $SQLITE_AUTO_REBUILD_LAST_RAN_FILE = '/var/cpanel/.last_ran_sqlite_auto_rebuild_from_maintenance'; # Internal documentation: https://cpanel.wiki/x/zwwFAw sub script { my ( $class, @args ) = @_; if ( $> != 0 ) { print "This cPanel maintenance script must be run as root, not uid $>.\n"; return 2; } umask(0022); my $security_token = $ENV{'cp_security_token'} || ''; # default pcent when none are defined my $starting_pbar = 0; my $finishing_pbar = 100; # in case we are called before and outside of upcp setupenv(); my $only_run; # create a default logfile path, if called from upcp, use the log it passes my $now = time(); my $logfile_path = '/var/cpanel/updatelogs/maintenance' . $now . '.log'; my $custom_pbar; foreach my $arg (@args) { if ( $arg =~ m/^--log\=(.*)/ ) { $logfile_path = $1; } elsif ( $arg =~ m/^--pbar-start=([0-9]+)/ ) { $custom_pbar = 1; $starting_pbar = int($1); } elsif ( $arg =~ m/^--pbar-stop=([0-9]+)/ ) { $custom_pbar = 1; $finishing_pbar = int($1); } elsif ( $arg =~ m/^--dry-run$/ ) { # no doc required: dev only $DRY_RUN = 1; } elsif ( $arg =~ m/^--pre$/ ) { # no doc required: upcp only $only_run = 'pre'; } elsif ( $arg =~ m/^--post$/ ) { # no doc required: upcp only $only_run = 'post'; } elsif ( $arg =~ m/^--help/ ) { return usage(); } } open( STDERR, ">&STDOUT" ); $| = 1; # when start pbar is unset progress bar is not displayed setup_logger( $logfile_path, $custom_pbar ? $starting_pbar : undef ); # helper which normalize all percentage to be in [ $starting_pbar .. $finishing_pbar ] # the only thing that we should care are the capping values which should be between [ 0..100 ] my $increment_pbar; # initialize later as we can count how many tasks to run my $do_progress_bar = sub { my (@args) = @_; return bless sub { $increment_pbar->(@args) }, 'PBAR'; }; ############################################################################# # maintenance actions are split in 2 groups: pre and post # by default maintenance is going to run both groups: pre than post # /scripts/maintenance is similar to run # 1. ~maintenance --pre # 2. ~maintenance --post # but we can now run only one of these groups, this allow to run post_sync_cleanup earlier during upcp # /scripts/upcp is going to use maintenance script using 2 different calls # 1. update.now # 2. maintenance --pre # 3. post_sync_cleanup # 4. maintenance --post my $blocks = { pre => [ _default_pre_actions() ], post => [ _default_post_actions() ] }; if ( !Cpanel::Server::Type::is_dnsonly() ) { push @{ $blocks->{'post'} }, ( action_sprite_generator(), action_update_rdns_ips_cache(), show_status('Updating services and databases'), '/usr/local/cpanel/scripts/listcheck', action_purge_modsec(), ( $ENV{'CPANEL_BASE_INSTALL'} ? () : ( action_ftpquotacheck() ) ), '/usr/local/cpanel/scripts/updateuserdomains', '/usr/local/cpanel/bin/empty_user_trash --quiet --all', '/usr/local/cpanel/bin/empty_user_horde_temp_files --quiet --all', '/usr/local/cpanel/scripts/build_maxemails_config', '/usr/local/cpanel/scripts/updateuserdatacache --force', show_status('Checking system maxmem setting'), '/usr/local/cpanel/scripts/check_maxmem_against_domains_count --always-fix', show_status('Running various cleanup scripts'), '/usr/local/cpanel/scripts/resetmailmanurls', show_status('Checking MySQL to ensure we can connect'), ( # Base install does this in the background before upcp $ENV{'CPANEL_BASE_INSTALL'} ? () : ( '/usr/local/cpanel/scripts/mysqlconnectioncheck' # POST or leave it there ?? # We must update the rules before we compile them ) ), action_update_spamassassin_rules(), show_status('Checking PostgreSQL to ensure we can connect'), '/usr/local/cpanel/bin/postgrescheck --check-auth --reset-pass-on-fail', # POST or leave it there ?? action_repair_mailman(), action_repair_mysql(), show_status('Running sanity checks and notifications'), # status update '/usr/local/cpanel/scripts/chkpaths', '/usr/local/cpanel/scripts/hackcheck', '/usr/local/cpanel/scripts/oopscheck', '/usr/local/cpanel/scripts/fixetchosts', '/usr/local/cpanel/scripts/check_unreliable_resolvers --notify', '/usr/local/cpanel/bin/is_script_stuck --script=autossl_check --time=3h --kill --notify=root', ( $ENV{'CPANEL_BASE_INSTALL'} ? () : ('/usr/local/cpanel/scripts/quotacheck') ), '/usr/local/cpanel/scripts/email_archive_maintenance', '/usr/local/cpanel/scripts/email_hold_maintenance', '/usr/local/cpanel/scripts/expunge_expired_certificates_from_sslstorage', '/usr/local/cpanel/scripts/notify_expiring_certificates', '/usr/local/cpanel/scripts/notify_expiring_certificates_on_linked_nodes', '/usr/local/cpanel/scripts/expunge_expired_transfer_sessions', '/usr/local/cpanel/scripts/expunge_expired_pkgacct_sessions', '/usr/local/cpanel/scripts/smartcheck', '/usr/local/cpanel/scripts/compilerscheck', '/usr/local/cpanel/scripts/check_mount_procfs', sqlite_auto_rebuild_if_needed(), '/usr/local/cpanel/scripts/setup_modsec_db', '/usr/local/cpanel/scripts/modsec_vendor update --auto', '/usr/local/cpanel/bin/check_cpstore_in_sync_with_local_storage', action_purge_dead_comet_files(), action_update_freshclam(), show_status('Restoring compiler permissions'), '/usr/local/cpanel/scripts/compilers restore', show_status('Cleaning up mailbox trash'), '/usr/local/cpanel/scripts/dovecot_maintenance --background', show_status('Checking MySQL Version'), sub { check_mysql_version() }, show_status('Cleaning up root datastores and caches'), '/usr/local/cpanel/bin/clean-datastores --background root', ); } # end !dnsonly push @{ $blocks->{'post'} }, ( action_buildexim(), action_eximstats(), action_exim_purge_old_tracker_files(), sub { Cpanel::Sync::CheckRestore::check_and_restore("img-sys/powered_by_cpanel.svg") }, action_cleanup_signature(), action_enable_onboot_handler(), ); if ( !Cpanel::Server::Type::is_dnsonly() ) { # not dnsonly push @{ $blocks->{'post'} }, ( ( $ENV{'CPANEL_BASE_INSTALL'} ? () : ( show_status('Cleaning SpamAssassin DBM files'), '/usr/local/cpanel/scripts/spamassassin_dbm_cleaner' ) ), show_status('Cleaning Roundcube attachment directory'), \&clean_roundcube_attachment_directory, ( # This was causing an OOM on fresh install on the # $5/mo DO instance # There will be no one to notify on a fresh install # and this will run a few hours after the install # anyways $ENV{'CPANEL_BASE_INSTALL'} ? () : ( show_status('Checking for new security advice'), '/usr/local/cpanel/scripts/check_security_advice_changes --notify --background', ) ), show_status('Running former postinstall scripts'), '/usr/local/cpanel/bin/dcpumon --killproc', '/usr/local/cpanel/bin/setupdbmap', '/usr/local/cpanel/bin/fix_userdata_perms', '/usr/local/cpanel/scripts/detect_env_capabilities', ( # Base install does this in the background before upcp $ENV{'CPANEL_BASE_INSTALL'} ? () : ( show_status('Updating cPGreyList Common Mail Providers'), '/usr/local/cpanel/scripts/manage_greylisting --init --update_common_mail_providers' ) ), show_status('Checking for deprecated PHP local.ini'), '/usr/local/cpanel/scripts/migrate_local_ini_to_php_ini --run --verbose', show_status('Ensuring an "Active" MySQL profile is set'), \&ensure_active_mysql_profile_is_present, run( '/usr/local/cpanel/scripts/check_mysql', { 'exit_ok' => [ 2, 255 ] } ), action_cloudlinux_update(), show_status('Updating plugins data cache'), '/usr/local/cpanel/bin/refresh_plugin_cache', show_status('Ensuring SSL certificate information for CCS is up to date.'), '/usr/local/cpanel/scripts/ccs-check --run --ssl', show_status('Ensure cpanel-plugins yum repo exists'), \&_create_cpanel_plugins_repo, show_status('Checking Addon Licenses'), check_addon_licenses(), show_status('Updating Public Suffix List'), update_public_suffix_list(), show_status('Ensure required cpanel-plugins are installed and updated.'), \&_install_or_upgrade_plugin_packages, show_status('Ensuring ELS PHP State Matches License'), \&ensure_els_php_state, ); } push @{ $blocks->{'post'} }, ( show_status('Checking End Of Life for current version.'), \&check_end_of_life, ); my $maintenance_complete = Cpanel::Server::Type::is_dnsonly() ? q{DNSONLY maintenance complete.} : q{Maintenance complete.}; # build the todo list depending which block we want to run # default = pre + post my @todo = ( @{ $blocks->{'pre'} }, @{ $blocks->{'post'} } ); # Remove the todo once done if ( $only_run && ref $blocks->{$only_run} ) { @todo = @{ $blocks->{$only_run} }; $maintenance_complete .= " [state=$only_run]"; } # we have now reach 100%, move the progress bar push @todo, ( $do_progress_bar->( complete => 1 ), show_status("\n\n$maintenance_complete\n"), ); # how many actions do we have to run which are neither a status nor a pbar item my $total_actions = grep { my $ref = ref $_; $ref ne 'PBAR' && $ref !~ /Action::(?:Status|Command)/ } @todo; # initialize progress bar with: from % to % and number of elements $increment_pbar = increment_pbar( $starting_pbar, $finishing_pbar, $total_actions ); run_actions( \@todo, $increment_pbar ); return logger()->get_need_notify() ? 1 : 0; } # Encapsulate to pick up "a few dollars more" of cover, especially because # cplint complained about it in CPANEL-38056. Oh no, I lost cover otherwise. # Original comment below: # This is the only pre block in this script. Only things that MUST happen before post_sync_cleanup should live here. sub _default_pre_actions { return ( show_status('Assuring needed symlinks in 3rdparty/bin are in place.'), '/usr/local/cpanel/scripts/link_3rdparty_binaries', show_status('Setting clock'), '/usr/local/cpanel/scripts/rdate', # Process any possibly pending PHP PEAR updates from cpanel-php pear RPMs in the background, # as they should have already been installed during update.now action_update_pear_registry_in_the_background(), action_set_up_dns_resolver_workarounds(), action_background_refresh_dkim_validity_cache(), action_find_and_fix_rpm_issues(), # set RPM_IS_BROKEN (at run time): used by sysup and check_cpanel_pkgs action_install_els(), action_update_packages(), action_ensure_mysql_upgrade_hook(), ); } sub _default_post_actions { return ( \&purge_upcp_logs, action_updatesigningkey(), action_sysup(), #We do it right after post sync cleanup and sysup #to ensure cPanel services have been restarted before we #do any system ones so that they can access cPanel #and monitor the system while the system services are #being restarted. show_status('Restarting any outdated services'), $ENV{'CPANEL_BASE_INSTALL'} ? () : ( run( '/usr/local/cpanel/scripts/find_outdated_services --auto', { exit_ok => [1] } ) ), # Base install does this in the background before upcp action_vps_optimizer(), # not on dnsonly show_status('Checking for a valid C Compiler.'), '/usr/local/cpanel/scripts/checkccompiler', action_build_locale_databases(), show_status('Migrating feature lists to current version (if needed)'), '/usr/local/cpanel/bin/migrate_all_feature_lists_to_current', show_status('Checking for main IP changes'), '/usr/local/cpanel/scripts/mainipcheck', show_status('Updating neighbor netblocks'), '/usr/local/cpanel/scripts/update_neighbor_netblocks', show_status('Updating known proxy ips'), '/usr/local/cpanel/scripts/update_known_proxy_ips', show_status('Validating server hostname'), # No need to check this on a fresh install since we already validate in the installer ( $ENV{'CPANEL_BASE_INSTALL'} ? () : ('/usr/local/cpanel/scripts/check_valid_server_hostname --notify') ), show_status('Validating cPanel system users'), '/usr/local/cpanel/scripts/checkusers', action_fixrndc(), action_init_wwwacct_conf(), action_ipaliases(), action_check_cpanel_pkgs(), show_status('Running env auto repair'), '/usr/local/cpanel/scripts/vzzo-fixer', '/usr/local/cpanel/scripts/quota_auto_fix', '/usr/local/cpanel/scripts/clear_orphaned_virtfs_mounts --inactiveonly', '/usr/local/cpanel/scripts/disable_prelink', show_status('Cleaning up orphaned filesystem quotas'), '/usr/local/cpanel/scripts/cleanquotas', ( $ENV{'CPANEL_BASE_INSTALL'} ? () : ('/usr/local/cpanel/scripts/autorepair autorepair') ), '/usr/local/cpanel/scripts/purge_old_config_caches', '/usr/local/cpanel/scripts/cleansessions', '/usr/local/cpanel/scripts/checkbashshell', action_passwd(), \&setupcrontab, '/usr/local/cpanel/scripts/dnsqueuecron', show_status('Rebuild WHM chrome cache'), '/usr/local/cpanel/scripts/rebuild_whm_chrome', # checkallsslcerts needs to run on DNSONLY # because we need an ssl cert for dovecot for it to startup # Ensure /var/cpanel/ssl/*-SIGNATURE_CHAIN_VERIFIED and # /var/cpanel/ssl/*-NO_AFTER is updated so Cpanel::Redirect # can make good descisions. This also ensures that # admins get timely notice of the expire time being # reached on their ssl certificates. action_checkallsslcerts(), show_status('Purging invalid or soon-to-expire Domain TLS entries for service domains'), '/usr/local/cpanel/scripts/check_domain_tls_service_domains.pl --prune', show_status('Cleaning up temporary wheel/sudo users'), '/usr/local/cpanel/scripts/clean_up_temp_wheel_users', ); } sub check_end_of_life { # EOL # Send a notification if this version is nearing end of life local $@; eval { open my $mainip_fh, '<', '/var/cpanel/mainip' or die "Can't open < /var/cpanel/mainip: $!"; my $ip = <$mainip_fh>; close $mainip_fh; chomp $ip; my $icontact_class = 'Update::EndOfLife'; Cpanel::Notify::notification_class( constructor_args => [ origin => 'upcp', source_ip_address => $ip ], map { $_ => $icontact_class } qw(class application), ); 1; } or logger()->warning("Error while checking end of life: $@"); return; } sub sqlite_auto_rebuild_if_needed { return if !_is_saturday_or_sunday(); #If the touch file is newer than the current time #we assume the system had a clock issue and run. my $now = time(); my $last_ran = ( stat $SQLITE_AUTO_REBUILD_LAST_RAN_FILE )[9] || 0; return if $last_ran < $now && $now < ( $last_ran + ( 5 * 86400 ) ); do { open( my $fh, '>', $SQLITE_AUTO_REBUILD_LAST_RAN_FILE ) or warn "open($SQLITE_AUTO_REBUILD_LAST_RAN_FILE): $!" }; #This gets a longer timeout because on heavily populated #servers it can take over an hour to finish. return run( '/usr/local/cpanel/scripts/perform_sqlite_auto_rebuild_db_maintenance', { timeout => 10000, }, ); } #mocked in tests sub _is_saturday_or_sunday { #Only run on Saturday or Sunday my $wday = (localtime)[6]; return ( ( $wday == 0 ) || ( $wday == 6 ) ); } our %touch_file_mock; # Used to fake if touch files are present. sub touch_file_exists { my ($file) = @_; $file or return; # Provide an easy way to mock file existance. return $touch_file_mock{$file} if exists $touch_file_mock{$file}; return -e $file; } sub file_is_executable { my $file = shift; # for now use the same mock hash return $touch_file_mock{$file} if exists $touch_file_mock{$file}; return -x $file; } sub populated_touch_file_exists { my ($file) = @_; $file or return; # Provide an easy way to mock file existance. return $touch_file_mock{$file} if exists $touch_file_mock{$file}; return -e $file && !-z _; } ################################################################ ####[ Subroutines ]############################################# ################################################################ sub run_action { # avoid to use array ref when using it from a single action my (@todo) = @_; return run_actions( \@todo ); } sub run_actions { my ( $todo, $increment_pbar ) = @_; die unless ref $todo; foreach my $cmd (@$todo) { my $start_time = Cpanel::TimeHiRes::time(); my $type = ref $cmd; my $action = {}; if ( $type eq 'Action::Command' ) { $action = {%$cmd}; $cmd = $action->{'cmd'}; } elsif ( $type eq 'Action::Status' ) { $action = { status => $cmd->[0] }; $cmd = undef; } elsif ($type) { if ( $type eq 'CODE' ) { if ($DRY_RUN) { print "[dry-run mode] CodeRef\n"; } else { # custom cases with some extra code around the action # let them do what they want local $@; # Ensure that we do not allow a single action to # cause the entire script to fail. eval { $cmd->(); }; warn if $@; } $increment_pbar->() if ref $increment_pbar; my $runtime = sprintf( "%0.3f", Cpanel::TimeHiRes::time() - $start_time ); logger()->info(" - Finished in $runtime seconds"); } elsif ( $type eq 'PBAR' ) { $cmd->(); } next; } $action->{cmd} = [ split( /\s+/, $cmd ) ] if $cmd; process($action); my $runtime = sprintf( "%0.3f", Cpanel::TimeHiRes::time() - $start_time ); logger()->info(" - Finished command `$cmd` in $runtime seconds") if $cmd; $increment_pbar->() if ref $increment_pbar; } return; } sub show_status { my $msg = shift; return unless defined $msg or length $msg; my $status = [$msg]; bless $status, 'Action::Status'; return $status; } sub run { my ( $cmd, $options ) = @_; my $status = { %$options, cmd => $cmd }; bless $status, 'Action::Command'; return $status; } sub process { my ($action) = @_; $action->{'status'} = '' if !defined $action->{'status'}; if ( length( $action->{'status'} ) ) { logger()->info("Processing: $action->{'status'}"); return; } my @cmd = @{ $action->{'cmd'} }; if ($DRY_RUN) { print "[dry-run mode] " . join( ' ', @cmd, "\n" ); return; } logger()->info(" - Processing command `@cmd`"); my ( $program, @args ) = @cmd; my $logger = logger(); my $run = eval { Cpanel::SafeRun::Object->new( 'program' => $program, 'args' => \@args, 'stdout' => Cpanel::IOCallbackWriteLine->new( sub { $logger->info(" [$program] $_[0]"); } ) ); }; $? = -1; ## no critic qw(Variables::RequireLocalizedPunctuationVars) -- needed for compat if ($@) { logger()->error( " [$program] $@", 1 ); logger()->set_need_notify(); return; } $? = $run->CHILD_ERROR(); ## no critic qw(Variables::RequireLocalizedPunctuationVars) -- needed for compat if ( my $exit = $run->CHILD_ERROR() ) { $exit >>= 8; return if $exit && $action->{'exit_ok'} && grep { $exit == $_ } @{ $action->{'exit_ok'} }; if ( my $stderr = $run->stderr() ) { foreach my $line ( split( m{\n}, $stderr ) ) { logger()->error( " [$program] " . $line ); } } logger()->error( " [$program] " . $run->autopsy(), 1 ); logger()->set_need_notify(); return; } } # list of actions which need some extra logic or being postponed sub action_vps_optimizer { return if Cpanel::Server::Type::is_dnsonly(); # idea move this check to the script itself return ( show_status('Running platform specific optimizations'), '/usr/local/cpanel/scripts/vps_optimizer' ); } sub action_update_spamassassin_rules { return if $ENV{'CPANEL_BASE_INSTALL'}; return unless Cpanel::Update::Config::is_permitted( 'SARULESUP', get_update_conf() ); return sub { return run_action( show_status('Updating Apache SpamAssassin™ rules'), background_update_spamassassin_rules(), ); }; } sub action_update_rdns_ips_cache { return sub { return run_action( show_status('Updating Reverse DNS Cache'), background_update_rdns_ips_cache(), ); }; } sub background_update_rdns_ips_cache { return sub { warn if !eval { Cpanel::ServerTasks::queue_task( ['DNSTasks'], "update_reverse_dns_cache" ); 1; }; warn if !eval { Cpanel::ServerTasks::schedule_task( ['CpDBTasks'], 600, "update_userdomains" ); 1; }; }; } sub background_update_spamassassin_rules { return sub { warn if !eval { Cpanel::ServerTasks::queue_task( ['SpamassassinTasks'], 'update_spamassassin_rules' ); 1 }; }; } sub background_sprite_generator { return sub { eval { Cpanel::ServerTasks::queue_task( ['SpriteTasks'], 'sprite_generator' ); }; }; } sub action_set_up_dns_resolver_workarounds { return sub { return run_action( show_status('Setting up resolver workarounds'), background_set_up_dns_resolver_workarounds(), ); }; } sub background_set_up_dns_resolver_workarounds { return sub { warn if !eval { Cpanel::ServerTasks::queue_task( ['DNSTasks'], "set_up_dns_resolver_workarounds" ); 1; }; }; } sub action_sprite_generator { return sub { return run_action( show_status('Rebuilding sprites'), background_sprite_generator(), ); }; } sub background_freshclam { return sub { eval { Cpanel::ServerTasks::queue_task( ['ClamTasks'], 'freshclam --quiet -l /var/log/clam-update.log' ); }; }; } sub action_background_refresh_dkim_validity_cache { return sub { eval { Cpanel::ServerTasks::queue_task( ['DKIMTasks'], 'refresh_entire_dkim_validity_cache' ); }; }; } sub action_update_freshclam { return sub { # postpone the check if the binary is restored by RPM transaction my $freshclam_bin = Cpanel::Binaries::path('freshclam'); return unless file_is_executable($freshclam_bin); return run_action( show_status('Updating virus patterns'), background_freshclam(), ); } } sub action_purge_dead_comet_files { return ( show_status('Purging old comet files'), '/usr/local/cpanel/bin/purge_dead_comet_files --quiet', ); } sub action_update_packages { return sub { # need RPM_IS_BROKEN to be set return unless Cpanel::Update::Config::is_permitted( 'RPMUP', get_update_conf() ); return if $RPM_IS_BROKEN; return run_action( show_status('Running update-packages'), '/usr/local/cpanel/scripts/update-packages' ); }; } sub action_ensure_mysql_upgrade_hook { return sub { require Cpanel::MariaDB; my $config = scalar Cpanel::Config::LoadCpConf::loadcpconf(); my $set_version = $config->{'mysql-version'}; return if $set_version < 5.7; if ( Cpanel::MariaDB::version_is_mariadb($set_version) ) { require Cpanel::MariaDB::Install; my $mysql_install_obj = Cpanel::MariaDB::Install->new( 'output_obj' => logger() ); $mysql_install_obj->install_upgrade_hook(); return 1; } require Cpanel::Mysql::Install; my $mysql_install_obj = Cpanel::Mysql::Install->new( 'output_obj' => logger() ); $mysql_install_obj->install_upgrade_hook(); return 1; } } sub action_update_pear_registry_in_the_background { return sub { return Cpanel::SafeRun::BG::nooutputsystembg('/usr/local/cpanel/scripts/process_pending_cpanel_php_pear_registration'); }; } sub _create_cpanel_plugins_repo { warn if !eval { require Cpanel::Plugins::Repo; Cpanel::Plugins::Repo::install(); 1; }; return; } sub _install_or_upgrade_plugin_packages { my @plugin_pkgs = ( 'cpanel-comet-backup-plugin', 'cpanel-koality-plugin', 'cpanel-sitejet-plugin' ); logger()->info("Checking for required cPanel & WHM plugins to install..."); require Cpanel::Plugins; for my $pkg (@plugin_pkgs) { next if Cpanel::Plugins::is_plugin_installed($pkg); logger()->info("Installing the cPanel & WHM plugin $pkg."); eval { Cpanel::Plugins::install_plugins($pkg); }; logger()->info($@) if $@; } return; } sub action_sysup { return if $ENV{'CPANEL_BASE_INSTALL'}; # This will already have been run on initial install return sub { # need RPM_IS_BROKEN to be set if ($RPM_IS_BROKEN) { logger()->error('RPM is not functioning. Skipping sysup.'); return; } return run_action( show_status('Updating system packages: sysup'), '/usr/local/cpanel/scripts/sysup' ); }; } sub _find_and_fix_rpm_issue_script { # for testing purpose return '/usr/local/cpanel/scripts/find_and_fix_rpm_issues'; } sub background_install_els { return sub { Cpanel::ServerTasks::schedule_task( ['ELS'], 3600, 'install_els' ); }; } sub action_install_els { return sub { return if -e '/etc/els-release'; # ELS is already installed return if $RPM_IS_BROKEN; return unless Cpanel::OS::needs_els(); return unless Cpanel::Server::Type::has_els(); return run_action( show_status('Installing ELS'), background_install_els(), ); }; } sub action_find_and_fix_rpm_issues { return unless Cpanel::OS::is_rpm_based(); return if $ENV{'CPANEL_BASE_INSTALL'}; # we will not get here if rpm is broken return sub { local $?; process( { 'status' => 'Checking RPM DB for corruption' } ); process( { 'cmd' => [ _find_and_fix_rpm_issue_script() ] } ); if ( ( $? >> 8 ) > 0 ) { logger()->error('RPM is not functioning and automatic repair failed.'); logger()->error('Tasks for update-packages, sysup, and check_cpanel_pkgs will be skipped.'); $RPM_IS_BROKEN = 1; } return; }; } sub action_updatesigningkey { # Update signing keys, if enabled. return unless Cpanel::Crypt::GPG::Settings::signature_validation_enabled(); return ( show_status('Updating cPanel signing keys.'), '/usr/local/cpanel/scripts/updatesigningkey' ); } sub action_cloudlinux_update { return unless Cpanel::OS::supports_or_can_become_cloudlinux(); return ( show_status('Checking CloudLinux installation'), '/usr/local/cpanel/bin/cloudlinux_update', ); } sub action_checkallsslcerts { # Base install does this in the background before upcp return if $ENV{'CPANEL_BASE_INSTALL'}; my $max_delay_seconds = 18 * 60 * 60; # 18 hours my $bytes_to_get = length($max_delay_seconds) + 1; my $rand_int = Cpanel::Rand::Get::getranddata( $bytes_to_get, [ 0 .. 9 ] ); my $delay_seconds = $rand_int % $max_delay_seconds; # Should be between 1 and $max_delay_seconds # scheduling a task for 0 seconds will cause queueprocd to throw an error $delay_seconds++; return ( show_status('Scheduling task to check service default SSL/TLS certificates'), sub { Cpanel::ServerTasks::schedule_task( ['ScriptTasks'], $delay_seconds, 'run_script /usr/local/cpanel/bin/checkallsslcerts --allow-retry --verbose' ); } ); } sub action_build_locale_databases { return if $ENV{'CPANEL_BASE_INSTALL'}; return ( show_status('Ensuring locale databases are up to date'), sub { Cpanel::ServerTasks::schedule_task( ['LocaleTasks'], 300, "build_locale_databases" ); } ); } sub action_init_wwwacct_conf { return if touch_file_exists('/etc/wwwacct.conf'); return ( show_status('Creating account configuration file /etc/wwwacct.conf'), '/usr/local/cpanel/scripts/mkwwwacctconf', ); } sub _var_named_path { return '/var/named' } # for unit tests purpose sub action_fixrndc { return if touch_file_exists('/etc/nameddisable') or touch_file_exists('/etc/binddisable'); return if $ENV{'CPANEL_BASE_INSTALL'}; # Base install does this in the background before upcp my $status = 'Checking and repairing nameserver config'; if ( !touch_file_exists( _var_named_path() ) ) { return sub { mkdir( _var_named_path(), 0755 ); # probably safe to do it earlier and simplify this code return run_action( show_status($status), '/usr/local/cpanel/scripts/fixrndc -f', ); }; } return ( show_status($status), '/usr/local/cpanel/scripts/fixrndc' ); } sub action_ipaliases { return ( show_status('Setting up IP aliases startup'), '/usr/local/cpanel/whostmgr/bin/setupipaliases', ); } sub action_check_cpanel_pkgs { return if $ENV{'CPANEL_BASE_INSTALL'}; return sub { # need RPM_IS_BROKEN to be set my $cpconf = get_cpconf(); if ($RPM_IS_BROKEN) { logger()->error('RPM is not functional. Skipping check_cpanel_pkgs.'); } elsif ( $cpconf->{'maintenance_rpm_version_check'} ) { my $status = 'Checking cPanel packages'; my @rpmcheck_args = (qw{ --list-only --long-list --notify }); my $its_a_weekday = _is_saturday_or_sunday() ? 0 : 1; if ( !$cpconf->{'maintenance_rpm_version_digest_check'} || $ENV{'CPANEL_BASE_INSTALL'} || $its_a_weekday ) { # the user doesn't want a digest check and we're not being forced into it # # In order to minimize server load and reduce install times we only do # a full digest check on the weekends if the user hasn't disabled it. $status .= ' (with no digest check or broken check)'; push @rpmcheck_args, '--no-digest'; push @rpmcheck_args, '--no-broken'; } return run_action( show_status($status), join( ' ', '/usr/local/cpanel/scripts/check_cpanel_pkgs', @rpmcheck_args ), ); } else { logger()->info('Skipping cPanel package check due to configuration'); } return; }; } sub action_ftpquotacheck { return unless Cpanel::Services::Enabled::is_enabled('ftp'); return '/usr/local/cpanel/scripts/ftpquotacheck'; } sub action_repair_mailman { return sub { # postpone it as can binary can be there only once RPM is fixed my $cpconf = get_cpconf(); return unless ( !$cpconf->{'skipmailman'} && file_is_executable("$Cpanel::ConfigFiles::MAILMAN_ROOT/bin/check_perms") ); chdir("$Cpanel::ConfigFiles::MAILMAN_ROOT/bin"); my $ok = run_action( show_status('Repairing Mailman Permissions'), './check_perms -f --noarchives', ); chdir('/usr/local/cpanel'); # return where we should be ? return $ok; }; } sub _mysqld_sh_path { return '/usr/local/etc/rc.d/mysqld.sh' } # for unit test purpose only sub action_repair_mysql { return unless touch_file_exists( _mysqld_sh_path() ); return sub { unlink _mysqld_sh_path(); return run_action( show_status('Repairing MySQL startup'), '/usr/local/cpanel/scripts/restartsrv mysql', ); }; } sub action_purge_modsec { return if $ENV{'CPANEL_BASE_INSTALL'}; return '/usr/local/cpanel/scripts/purge_modsec_log'; } # for unit test purpose only sub _passwd_files_to_chmod { return [ '/etc/shadow.tmpeditlib', '/etc/master.passwd.tmpeditlib' ]; } sub action_passwd { return sub { my $files = _passwd_files_to_chmod(); # Quick security check on the tmpeditlib files in case they are there foreach my $f (@$files) { chmod( 0600, $f ) if touch_file_exists($f); } return; }; } sub action_buildexim { return sub { # postponed if the file is created/touched by one rpm (hook)... to preserve original behavior return if populated_touch_file_exists('/etc/exim.conf') and populated_touch_file_exists('/etc/exim.pl.local'); # run only if one of the file is missing / empty return run_action( show_status('EXIM sanity checking'), '/usr/local/cpanel/scripts/buildeximconf --no_chown_spool', ); }; } sub action_eximstats { return sub { # Eximstats recover of /var/cpanel/sql/eximstats.sql, if it exists return unless touch_file_exists('/var/cpanel/sql/eximstats.sql'); return run_action( show_status('Recovering data stored in /var/cpanel/sql/eximstats.sql'), '/usr/local/cpanel/scripts/restartsrv_eximstats' ); }; } # If eximstats is disabled, we need to handle clearing of old tracker files here. sub action_exim_purge_old_tracker_files { return sub { my $cpconf = get_cpconf(); return unless $cpconf->{'skipeximstats'} && $cpconf->{'skipeximstats'} eq '1'; require Cpanel::EmailTracker::Purge; logger()->info('Purging old email tracker files'); Cpanel::EmailTracker::Purge::purge_old_tracker_files(); return; }; } sub action_cleanup_signature { return ( show_status('Cleaning Signature Timestamp Cache'), sub { my $sig_cache = Cpanel::Crypt::GPG::VendorKeys::TimestampCache->new(); $sig_cache->cleanup_signature_cache(); return; }, ); } sub action_enable_onboot_handler { return sub { # Ensure that the handler for code on reboot is enabled my $root_crontab = Cpanel::Cron::Utils::fetch_user_crontab('root'); # Already enabled. return if $root_crontab =~ /\@reboot\s+\/usr\/local\/cpanel\/bin\/onboot_handler/; logger()->info("Enabling onboot_handler for root in cron"); $root_crontab .= "\@reboot /usr/local/cpanel/bin/onboot_handler\n"; Cpanel::Cron::Utils::save_root_crontab($root_crontab); } } # </end of actions> # local cache configuration to be able to use them { my $conf; # state like variable sub get_update_conf { $conf = { Cpanel::Update::Config::load() } if !defined $conf; return $conf; } sub reset_update_conf { # for testing purpose undef($conf); return; } } # loadcpconf already caches this so we don't need to re-cache it here. *get_cpconf = \&Cpanel::Config::LoadCpConf::loadcpconf; { my $logger; sub setup_logger { my ( $logfile_path, $starting_pbar ) = @_; return $logger = Cpanel::Update::Logger->new( { 'logfile' => $logfile_path, 'stdout' => 1, 'log_level' => 'info', defined $starting_pbar ? ( 'pbar' => $starting_pbar ) : () } ); } sub logger { $logger = setup_logger() unless defined $logger; # mainly for mocking return $logger; } } sub increment_pbar { my ( $start, $end, $items ) = @_; my $_current_ratio = $start; my $_last_update = 0; # do a -1 to the total to leave it to the end my $points = ( $end - $start - 1 ) || 1; $items ||= $points; # number of elements in our array my $w = $points / $items; # default points to increase +1 return sub { my (%opts) = @_; if ( $opts{complete} ) { # we reach the end we can now use the final result $_last_update = $_current_ratio = $end; logger()->update_pbar($end); return; } my $previous = $_current_ratio; $_current_ratio += $w; $_current_ratio = $end if $_current_ratio > $end; my $normalize = int($_current_ratio); # includes a protection to avoid displaying duplicates logger()->update_pbar($normalize); return; } } sub setupenv { Cpanel::Env::clean_env(); delete $ENV{'DOCUMENT_ROOT'}; delete $ENV{'SERVER_SOFTWARE'}; if ( $ENV{'WHM50'} ) { $ENV{'GATEWAY_INTERFACE'} = 'CGI/1.1'; } ( $ENV{'USER'}, $ENV{'HOME'} ) = ( getpwuid($>) )[ 0, 7 ]; $ENV{'PATH'} .= ':/sbin:/usr/sbin:/usr/bin:/bin:/usr/local/bin'; $ENV{'LANG'} = 'C'; $ENV{'LC_ALL'} = 'C'; return; } sub setupcrontab { logger()->info('Setting up cronjobs'); logger()->info('Setting Up update_db_cache Crontab'); logger()->info('Setting Up update_maiman_cache Crontab'); logger()->info('Setting Up dcpumon Crontab'); try { Cpanel::Config::Crontab::sync_root_crontab(); } catch { warn "Failed to sync root crontab: $_"; }; # Set up cron.d entries for short-lived SSL certificate re-issuance try { require Cpanel::SSL::Reissue::Cron; Cpanel::SSL::Reissue::Cron->ensure_that_entry_exists(); } catch { warn "Failed to set up SSL reissue cron: $_"; }; return; } sub clean_roundcube_attachment_directory { my $roundcube_tmp = '/var/cpanel/roundcube/tmp'; opendir my $dh, $roundcube_tmp or return; my @old_files = grep { -M $_ > 7.0 } map { "$roundcube_tmp/$_" } grep { !m/^\.{1,2}$/ } readdir $dh; closedir $dh; my $clean = sub { unlink @old_files }; return Cpanel::AccessIds::do_as_user( 'cpanelroundcube', $clean ); } sub check_mysql_version { # no need to check on first install return if $ENV{'CPANEL_BASE_INSTALL'}; my ( $reco_version, $current_version, $version_is_mysql, $display_name, $err ); try { $current_version = Cpanel::MysqlUtils::Version::current_mysql_version(); } catch { $err = $_; }; if ($err) { logger()->info("Unable to determine MySQL version because of an error: $err. Skipping MySQL version check..."); return; } elsif ( !$current_version->{'short'} ) { logger()->info("Unable to determine MySQL version. Skipping MySQL version check..."); return; } # We check the remote mysql version in Install::CheckRemoteMySQLVersion, # so we'll skip the check here return if $current_version->{'is_remote'}; $current_version = $current_version->{'short'}; $version_is_mysql = Cpanel::MysqlUtils::Version::version_is_mysql(); $display_name = $version_is_mysql ? "MySQL" : "MariaDB"; $reco_version = $version_is_mysql ? $Cpanel::MysqlUtils::Version::MINIMUM_RECOMMENDED_MYSQL_RELEASE : $Cpanel::MysqlUtils::Version::MINIMUM_RECOMMENDED_MARIADB_RELEASE; # if less than the minimum recommended version, recommend an update. if ( Cpanel::MysqlUtils::Version::is_at_least( $current_version, $reco_version ) ) { logger()->info("“$display_name” version “$current_version” is greater than or equal to the recommended minimum version, “$reco_version”."); } else { logger()->info("“$display_name” version “$current_version” is less than the recommended minimum version, “$reco_version”."); my @outdated = (); push @outdated, { 'label' => $display_name, 'current_version' => $current_version, 'min_reco_version' => $reco_version, 'upgrade_url' => 'https://go.cpanel.net/mysqlup', }; require Cpanel::Notify; Cpanel::Notify::notification_class( 'class' => 'OutdatedSoftware::Notify', 'application' => 'OutdatedSoftware::Notify', 'constructor_args' => [ 'origin' => 'scripts/maintenance', 'outdated_software' => \@outdated, ] ); } return; } sub ensure_active_mysql_profile_is_present { eval { require Cpanel::MysqlUtils::RemoteMySQL::ProfileManager; Cpanel::MysqlUtils::RemoteMySQL::ProfileManager->new()->generate_active_profile_if_none_set(); }; return 1; } ############################################################################# our $upcp_log_dir = '/var/cpanel/updatelogs'; sub purge_upcp_logs { my ($days) = @_; if ( !defined $days ) { my $cpconf = get_cpconf(); $days = $cpconf->{'upcp_log_retention_days'}; } # On initial upgrade, upcp_log_retention_days isn't set yet. We'll enforce the default here. if ( $days < 3 ) { logger()->warning("upcp_log_retention_days unexpectedly set to $days. Temporarily setting to 45 days."); $days = 45; } logger()->info("Purging upcp logs older than $days days."); my $purge_older_than = time - ( 86400 * $days ); opendir( my $dir_fh, $upcp_log_dir ) or do { logger()->warning("Cannot read '$upcp_log_dir' for purging."); }; while ( my $file = readdir($dir_fh) ) { # Special files we don't purge next if ( $file eq '.' or $file eq '..' or $file eq 'summary.log' ); # Skip if the file is new enough. my @stats = lstat("$upcp_log_dir/$file"); next unless ( @stats && $stats[9] < $purge_older_than ); # The file can be removed. unlink "$upcp_log_dir/$file"; } closedir($dir_fh); return; } sub check_addon_licenses { return sub { # Base install does this in the background before upcp if ( !$ENV{'CPANEL_BASE_INSTALL'} ) { # Fire these off in a taskqueue so as not to hold up the rest of the script eval { Cpanel::ServerTasks::queue_task( ['ScriptTasks'], 'run_script /usr/local/cpanel/scripts/litespeed-check --run' ); }; eval { Cpanel::ServerTasks::queue_task( ['ScriptTasks'], 'run_script /usr/local/cpanel/scripts/jetbackup-check --run' ); }; } # Check for WordPress Toolkit license (regardless of whether in initial install or post-upcp maintenance) eval { Cpanel::ServerTasks::queue_task( ['ScriptTasks'], 'run_script /usr/local/cpanel/bin/wpt_license --download' ); }; }; } sub update_public_suffix_list { try { require IO::Socket::SSL::PublicSuffix; IO::Socket::SSL::PublicSuffix::update_self_from_url(); require Cpanel::PublicSuffix; Cpanel::PublicSuffix::clear_cache(); } catch { logger()->info('Unable to update the Pubic Suffix list'); }; return; } sub ensure_els_php_state { return if Cpanel::OS::is_cloudlinux(); # Since Imunify360 includes hardened PHP from TuxCare, do not # manage ELS PHP state on Imunify360-licensed servers. require Whostmgr::Imunify360; return if Whostmgr::Imunify360::is_imunify360_licensed(); require Whostmgr::Store::Product::PHPELS; if ( Whostmgr::Store::Product::PHPELS->is_product_licensed() ) { if ( !Whostmgr::Store::Product::PHPELS->is_product_installed ) { logger->info("Queuing Install of ELS PHP"); _queue_task_or_warn( ['ScriptTasks'], 'run_script /usr/local/cpanel/scripts/install_tuxcare_els_php' ); return; } } else { if ( Whostmgr::Store::Product::PHPELS->is_product_installed ) { logger->info("Queuing Uninstall of ELS PHP"); _queue_task_or_warn( ['ScriptTasks'], 'run_script /usr/local/cpanel/scripts/install_tuxcare_els_php --delete' ); return; } } return; } sub _queue_task_or_warn { my @queue_task_args = @_; warn if !eval { Cpanel::ServerTasks::queue_task(@queue_task_args); 1; }; return; } sub usage { print <<EOM; Usage: $0 [options] Perform cPanel nightly maintenance tasks for upcp. Where the supported options are: --help Display this screen and exit --log={logfile path} Log program output to the file named by {logfile path} EOM return 0; } exit( __PACKAGE__->script(@ARGV) || 0 ) if !caller(); 1;