Linux 186-227-203-186.cprapid.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64
Apache
Server IP : 186.227.203.186 & Your IP : 216.73.216.196
Domains : 154 Domain
User : pmcaxingo
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Lock Shell
Lock File++
Readme
/
usr /
local /
cpanel /
scripts /
Delete
Unzip
Name
Size
Permission
Date
Action
cpan_sandbox
[ DIR ]
drwxr-xr-x
2024-11-04 17:30
php_sandbox
[ DIR ]
drwxr-xr-x
2024-11-04 17:30
MirrorSearch_pingtest
2.38
KB
-rwxr-xr-x
2024-11-04 17:30
activesync-invite-reply
1.69
KB
-rwxr-xr-x
2024-11-04 17:30
add_dns
2.36
KB
-rwxr-xr-x
2024-11-04 17:30
adddns
2.36
KB
-rwxr-xr-x
2024-11-04 17:30
addpop
6.08
KB
-rwxr-xr-x
2024-11-04 17:30
addsystemuser
3.27
KB
-rwxr-xr-x
2024-11-04 17:30
adduser
92
B
-rwxr-xr-x
2024-11-04 17:30
agent360.sh
16.03
KB
-rwx------
2026-04-13 20:58
apachelimits
4.31
KB
-rwxr-xr-x
2024-11-04 17:30
archive_sync_zones
3.05
KB
-rwxr-xr-x
2024-11-04 17:30
auto-adjust-mysql-limits
1.81
KB
-rwxr-xr-x
2024-11-04 17:30
autorepair
1.24
KB
-rwxr-xr-x
2024-11-04 17:30
backup_jobs_helper
10.88
KB
-rwxr-xr-x
2026-06-08 21:46
backups_clean_metadata_for_missing_backups
1.57
KB
-rwxr-xr-x
2024-11-04 17:30
backups_create_metadata
15.75
KB
-rwxr-xr-x
2024-11-04 17:30
backups_list_user_files
4.56
KB
-rwxr-xr-x
2024-11-04 17:30
balance_linked_node_quotas
2.58
KB
-rwxr-xr-x
2024-11-04 17:30
biglogcheck
1.69
KB
-rwxr-xr-x
2024-11-04 17:30
build_bandwidthdb_root_cache_in_background
1.52
KB
-rwxr-xr-x
2024-11-04 17:30
build_cpnat
3.41
KB
-rwxr-xr-x
2024-11-04 17:30
build_mail_sni
3.87
KB
-rwxr-xr-x
2024-11-04 17:30
build_maxemails_config
1.14
KB
-rwxr-xr-x
2024-11-04 17:30
builddovecotconf
9.64
KB
-rwxr-xr-x
2026-01-09 03:04
buildeximconf
7
KB
-rwxr-xr-x
2024-11-04 17:30
buildhttpdconf
2.6
KB
-rwxr-xr-x
2024-11-04 17:30
buildpureftproot
539
B
-rwxr-xr-x
2024-11-04 17:30
call_pkgacct
2.25
KB
-rwxr-xr-x
2026-06-08 21:46
ccs-check
4.91
KB
-rwxr-xr-x
2024-11-04 17:30
check_cpanel_pkgs
10.75
KB
-rwxr-xr-x
2024-11-04 17:30
check_domain_tls_service_domains.pl
6.68
KB
-rwxr-xr-x
2024-11-04 17:30
check_immutable_files
5.49
KB
-rwxr-xr-x
2024-11-04 17:30
check_mail_spamassassin_compiledregexps_body_0
187
B
-rwxr-xr-x
2024-11-04 17:30
check_maxmem_against_domains_count
3.57
KB
-rwxr-xr-x
2024-11-04 17:30
check_mount_procfs
2.02
KB
-rwxr-xr-x
2024-11-04 17:30
check_mysql
5.56
KB
-rwxr-xr-x
2024-12-06 03:04
check_plugin_pkgs
2.45
KB
-rwxr-xr-x
2024-11-04 17:30
check_security_advice_changes
8.28
KB
-rwxr-xr-x
2024-11-04 17:30
check_unmonitored_enabled_services
4.56
KB
-rwxr-xr-x
2024-11-04 17:30
check_unreliable_resolvers
3.59
KB
-rwxr-xr-x
2024-11-04 17:30
check_users_my_cnf
6.05
KB
-rwxr-xr-x
2024-11-04 17:30
check_valid_server_hostname
7.66
KB
-rwxr-xr-x
2024-11-04 17:30
checkalldomainsmxs
2.4
KB
-rwxr-xr-x
2024-11-04 17:30
checkbashshell
1.18
KB
-rwxr-xr-x
2024-11-04 17:30
checkccompiler
1.22
KB
-rwxr-xr-x
2024-11-04 17:30
checkexim.pl
3.1
KB
-rwxr-xr-x
2024-11-04 17:30
checklink
1.29
KB
-rwxr-xr-x
2024-11-04 17:30
checkusers
856
B
-rwxr-xr-x
2024-11-04 17:30
chkpaths
141
B
-rwxr-xr-x
2024-11-04 17:30
chpass
416
B
-rwxr-xr-x
2024-11-04 17:30
ckillall
1.11
KB
-rwxr-xr-x
2024-11-04 17:30
cl_pkg_verify_hook.py
2.38
KB
-rwxr-xr-x
2026-06-03 03:06
clean_dead_mailman_locks
2.09
KB
-rwxr-xr-x
2024-11-04 17:30
clean_up_temp_wheel_users
2.44
KB
-rwxr-xr-x
2024-11-04 17:30
clean_user_php_sessions
4.76
KB
-rwxr-xr-x
2024-11-04 17:30
cleandns
13.11
KB
-rwxr-xr-x
2024-11-04 17:30
cleandns8
417
B
-rwxr-xr-x
2024-11-04 17:30
cleanmsglog
735
B
-rwxr-xr-x
2024-11-04 17:30
cleanphpsessions
932
B
-rwxr-xr-x
2024-11-04 17:30
cleanphpsessions.php
658
B
-rw-r--r--
2024-11-04 17:30
cleanquotas
1.61
KB
-rwxr-xr-x
2024-11-04 17:30
cleansessions
5.89
KB
-rwxr-xr-x
2024-11-04 17:30
cleanupinterchange
2.64
KB
-rwxr-xr-x
2024-11-04 17:30
cleanupmysqlprivs
773
B
-rwxr-xr-x
2025-02-25 03:04
clear_orphaned_virtfs_mounts
3.56
KB
-rwxr-xr-x
2024-11-04 17:30
comet_license_registration_sync
1.67
KB
-rwxr-xr-x
2026-06-08 21:46
comet_protected_item_maintenance
20.78
KB
-rwxr-xr-x
2026-06-08 21:46
comparecdb
1.52
KB
-rwxr-xr-x
2024-11-04 17:30
compilers
2.86
KB
-rwxr-xr-x
2024-11-04 17:30
compilerscheck
999
B
-rwxr-xr-x
2024-11-04 17:30
configure_firewall_for_cpanel
520
B
-rwxr-xr-x
2024-11-04 17:30
configure_rh_firewall_for_cpanel
520
B
-rwxr-xr-x
2024-11-04 17:30
configure_rh_ipv6_firewall_for_cpanel
520
B
-rwxr-xr-x
2024-11-04 17:30
convert2dovecot
682
B
-rwxr-xr-x
2024-11-04 17:30
convert_accesshash_to_token
4.07
KB
-rwxr-xr-x
2024-11-04 17:30
convert_and_migrate_from_legacy_backup
1.97
KB
-rwxr-xr-x
2024-11-04 17:30
convert_maildir_to_mdbox
1.66
KB
-rwxr-xr-x
2024-11-04 17:30
convert_mdbox_to_maildir
1.66
KB
-rwxr-xr-x
2024-11-04 17:30
convert_roundcube_mysql2sqlite
26.12
KB
-rwxr-xr-x
2025-03-20 03:04
convert_to_dovecot_delivery
4.33
KB
-rwxr-xr-x
2024-11-04 17:30
convert_whmxfer_to_sqlite
1.46
KB
-rwxr-xr-x
2024-11-04 17:30
copy_user_mail_as_root
1.25
KB
-rwxr-xr-x
2024-11-04 17:30
copy_user_mail_as_user
1.34
KB
-rwxr-xr-x
2024-11-04 17:30
cpan_config
2.8
KB
-rwxr-xr-x
2024-11-04 17:30
cpanel_initial_install
67.95
KB
-rwxr-xr-x
2026-06-11 03:04
cpanelsync
28.31
KB
-rwxr-xr-x
2024-11-04 17:30
cpanelsync_postprocessor
1.62
KB
-rwxr-xr-x
2024-11-04 17:30
cpanpingtest
965
B
-rwxr-xr-x
2024-11-04 17:30
cpbackup
44.79
KB
-rwxr-xr-x
2024-11-04 17:30
cpbackup_transport_file
5.65
KB
-rwxr-xr-x
2024-11-04 17:30
cpdig
2.81
KB
-rwxr-xr-x
2026-04-16 03:04
cpfetch
1.23
KB
-rwxr-xr-x
2024-11-04 17:30
cphulkdblacklist
433
B
-rwxr-xr-x
2024-11-04 17:30
cphulkdwhitelist
1.3
KB
-rwxr-xr-x
2024-11-04 17:30
cpservice
2.87
KB
-rwxr-xr-x
2024-11-04 17:30
cpuser_port_authority
19.29
KB
-rwxr-xr-x
2024-11-04 17:30
cpuser_service_manager
10.85
KB
-rwxr-xr-x
2024-11-04 17:30
create_default_featurelist
11.62
KB
-rwx------
2026-05-08 00:47
createacct
30.32
MB
-rwx------
2026-06-11 03:04
custom_backup_destination.pl.sample
5.06
KB
-rwxr-xr-x
2024-11-04 17:30
custom_backup_destination.pl.skeleton
2.84
KB
-rwxr-xr-x
2024-11-04 17:30
dcpumon-wrapper
850
B
-rwxr-xr-x
2024-11-04 17:30
delpop
6.2
KB
-rwxr-xr-x
2024-11-04 17:30
detect_env_capabilities
508
B
-rwxr-xr-x
2024-11-04 17:30
disable_prelink
2.77
KB
-rwxr-xr-x
2024-11-04 17:30
disablefileprotect
2.19
KB
-rwxr-xr-x
2024-11-04 17:30
distro_changed_hook
1.16
KB
-rwxr-xr-x
2024-11-04 17:30
dnscluster
4.44
KB
-rwxr-xr-x
2024-11-04 17:30
dnsqueuecron
1.29
KB
-rwxr-xr-x
2024-11-04 17:30
dnssec-cluster-keys
3.75
KB
-rwxr-xr-x
2024-11-04 17:30
dovecot_maintenance
7.66
KB
-rwxr-xr-x
2025-01-22 03:04
dovecot_set_defaults.pl
984
B
-rwxr-xr-x
2024-11-04 17:30
dumpcdb
866
B
-rwxr-xr-x
2024-11-04 17:30
dumpinodes
687
B
-rwxr-xr-x
2024-11-04 17:30
dumpquotas
616
B
-rwxr-xr-x
2024-11-04 17:30
dumpstor
913
B
-rwxr-xr-x
2024-11-04 17:30
ea4_fresh_install
2.64
KB
-rwxr-xr-x
2024-11-04 17:30
edit_cpanelsync_exclude_list
2.58
KB
-rwxr-xr-x
2024-11-04 17:30
editquota
3.43
KB
-rwxr-xr-x
2024-11-04 17:30
email_archive_maintenance
6.15
KB
-rwxr-xr-x
2024-11-04 17:30
email_hold_maintenance
1.46
KB
-rwxr-xr-x
2024-11-04 17:30
enable_spf_dkim_globally
8.83
KB
-rwxr-xr-x
2024-11-04 17:30
enablefileprotect
2.1
KB
-rwxr-xr-x
2024-11-04 17:30
ensure_autoenabled_features
3.17
MB
-rwx------
2026-06-11 03:04
ensure_conf_dir_crt_key
4.82
KB
-rwxr-xr-x
2024-11-04 17:30
ensure_cpuser_file_ip
2.55
KB
-rwxr-xr-x
2024-11-04 17:30
ensure_crontab_permissions
1.08
KB
-rwxr-xr-x
2024-11-04 17:30
ensure_dovecot_memory_limits_meet_minimum
3.13
KB
-rwxr-xr-x
2024-11-04 17:30
ensure_hostname_resolves
2.51
KB
-rwxr-xr-x
2025-03-27 03:04
ensure_includes
601
B
-rwxr-xr-x
2024-11-04 17:30
ensure_vhost_includes
13.53
KB
-rwxr-xr-x
2024-11-04 17:30
exim_tidydb
2.96
KB
-rwxr-xr-x
2024-11-04 17:30
eximconfgen
1.32
KB
-rwxr-xr-x
2024-11-04 17:30
eximstats_spam_check
867
B
-rwxr-xr-x
2024-11-04 17:30
expunge_expired_certificates_from_sslstorage
3.56
KB
-rwxr-xr-x
2024-11-04 17:30
expunge_expired_pkgacct_sessions
852
B
-rwxr-xr-x
2024-11-04 17:30
expunge_expired_transfer_sessions
1.06
KB
-rwxr-xr-x
2024-11-04 17:30
fastmail
5.16
KB
-rwxr-xr-x
2024-11-04 17:30
featuremod
1.92
KB
-rwxr-xr-x
2024-11-04 17:30
fetchfile
422
B
-rwxr-xr-x
2024-11-04 17:30
find_and_fix_rpm_issues
6.99
KB
-rwxr-xr-x
2024-11-04 17:30
find_outdated_services
6.47
KB
-rwxr-xr-x
2026-04-24 03:04
find_pids_with_inotify_watch_on_path
3.66
KB
-rwxr-xr-x
2024-11-04 17:30
fix-cpanel-perl
28.43
KB
-rwxr-xr-x
2026-04-01 03:04
fix-listen-on-localhost
3.94
KB
-rwxr-xr-x
2026-06-03 03:04
fix-web-vhost-configuration
6.15
KB
-rwxr-xr-x
2024-11-04 17:30
fix_dns_zone_ttls
1.34
KB
-rwxr-xr-x
2024-11-04 17:30
fix_innodb_tables
4.05
KB
-rwxr-xr-x
2024-11-04 17:30
fix_reseller_acls
10.7
KB
-rwxr-xr-x
2025-06-03 03:04
fixetchosts
4.32
KB
-rwxr-xr-x
2024-11-04 17:30
fixheaders
572
B
-rwxr-xr-x
2024-11-04 17:30
fixmailinglistperms
1008
B
-rwxr-xr-x
2024-11-04 17:30
fixmailman
2.09
KB
-rwxr-xr-x
2024-11-04 17:30
fixnamedviews
1.22
KB
-rwxr-xr-x
2024-11-04 17:30
fixndc
413
B
-rwxr-xr-x
2024-11-04 17:30
fixquotas
18.39
KB
-rwxr-xr-x
2024-11-04 17:30
fixrelayd
1.74
KB
-rwxr-xr-x
2024-11-04 17:30
fixrndc
16.39
KB
-rwxr-xr-x
2024-11-04 17:30
fixtar
503
B
-rwxr-xr-x
2024-11-04 17:30
fixtlsversions
4.7
KB
-rwxr-xr-x
2024-11-04 17:30
fixvaliases
2
KB
-rwxr-xr-x
2024-11-04 17:30
fixwebalizer
966
B
-rwxr-xr-x
2024-11-04 17:30
forcelocaldomain
895
B
-rwxr-xr-x
2024-11-04 17:30
ftpfetch
2.2
KB
-rwxr-xr-x
2024-11-04 17:30
ftpquotacheck
8.31
KB
-rwxr-xr-x
2024-11-04 17:30
ftpsfetch
2.36
KB
-rwxr-xr-x
2024-11-04 17:30
ftpupdate
261
B
-rwxr-xr-x
2024-11-04 17:30
gather_update_log_stats
4.25
KB
-rwx------
2026-06-10 19:26
gather_update_logs_setupcrontab
5.45
KB
-rwx------
2026-06-10 19:26
gemwrapper
1.74
KB
-rwxr-xr-x
2024-11-04 17:30
gencrt
6.26
KB
-rwxr-xr-x
2024-11-04 17:30
generate_account_suspension_include
5.7
KB
-rwxr-xr-x
2024-11-04 17:30
generate_google_drive_credentials
1.11
KB
-rwxr-xr-x
2024-11-04 17:30
generate_google_drive_oauth_uri
984
B
-rwxr-xr-x
2024-11-04 17:30
generate_maildirsize
13.94
KB
-rwxr-xr-x
2024-11-04 17:30
gensysinfo
1.16
KB
-rwxr-xr-x
2024-11-04 17:30
get_locale_from_legacy_name_info
1.99
KB
-rwxr-xr-x
2024-11-04 17:30
getremotecpmove
12.67
KB
-rwxr-xr-x
2024-11-04 17:30
grpck
1.19
KB
-rwxr-xr-x
2024-11-04 17:30
hackcheck
3.02
KB
-rwxr-xr-x
2024-11-04 17:30
hook
1.45
KB
-rwxr-xr-x
2024-11-04 17:30
httpspamdetect
2.82
KB
-rwxr-xr-x
2026-04-16 03:04
hulk-unban-ip
4.09
MB
-rwx------
2026-06-11 03:04
import_exim_data
8.39
KB
-rwxr-xr-x
2024-11-04 17:30
increase_filesystem_limits
891
B
-rwxr-xr-x
2024-11-04 17:30
initacls
4.99
KB
-rwxr-xr-x
2024-11-04 17:30
initfpsuexec
444
B
-rwxr-xr-x
2024-11-04 17:30
initialize_360monitoring
2.76
KB
-rwx------
2026-06-09 19:13
initquotas
19.35
KB
-rwxr-xr-x
2026-02-04 03:04
initsuexec
4.03
KB
-rwxr-xr-x
2024-11-04 17:30
install_cpanel_analytics
1.93
KB
-rwxr-xr-x
2024-11-04 17:30
install_dovecot_fts
1.57
KB
-rwxr-xr-x
2024-11-04 17:30
install_plugin
2.8
KB
-rwxr-xr-x
2024-11-04 17:30
install_tuxcare_els_php
1.84
KB
-rwxr-xr-x
2025-12-18 03:04
installpkg
575
B
-rwxr-xr-x
2024-11-04 17:30
installpostgres
6.56
KB
-rwxr-xr-x
2025-11-06 03:05
installsqlite3
1.82
KB
-rwxr-xr-x
2024-11-04 17:30
ipcheck
3.93
KB
-rwxr-xr-x
2024-11-04 17:30
ipusage
7.45
KB
-rwxr-xr-x
2024-11-04 17:30
is_update_available
3.26
KB
-rwxr-xr-x
2026-05-20 03:04
isdedicatedip
602
B
-rwxr-xr-x
2024-11-04 17:30
jetbackup-check
3.69
KB
-rwxr-xr-x
2024-11-04 17:30
killdns
422
B
-rwxr-xr-x
2024-11-04 17:30
killdns-dnsadmin
1.15
KB
-rwxr-xr-x
2024-11-04 17:30
killmysqluserprivs
433
B
-rwxr-xr-x
2024-11-04 17:30
killmysqlwildcard
1.15
KB
-rwxr-xr-x
2024-11-04 17:30
killpvhost
853
B
-rwxr-xr-x
2024-11-04 17:30
killspamkeys
937
B
-rwxr-xr-x
2024-11-04 17:30
link_3rdparty_binaries
1.24
KB
-rwxr-xr-x
2024-11-04 17:30
linksubemailtomainacct
3.17
KB
-rwxr-xr-x
2024-11-04 17:30
listcheck
538
B
-rwxr-xr-x
2024-11-04 17:30
listsubdomains
1.05
KB
-rwxr-xr-x
2024-11-04 17:30
litespeed-check
3.86
KB
-rwxr-xr-x
2024-11-04 17:30
locale_export
5.21
KB
-rwxr-xr-x
2025-01-22 03:04
locale_import
4.35
KB
-rwxr-xr-x
2024-11-04 17:30
locale_info
3.99
KB
-rwxr-xr-x
2024-11-04 17:30
log_retention
21.28
KB
-rwxr-xr-x
2026-02-18 03:04
logo.dat
205
B
-rw-r--r--
2024-11-04 17:30
magicloader
1.94
KB
-rwxr-xr-x
2024-11-04 17:30
maildir_converter
6.08
KB
-rwxr-xr-x
2024-11-04 17:30
mailperm
16.53
KB
-rwxr-xr-x
2024-11-04 17:30
mailscannerupdate
2.42
KB
-rwxr-xr-x
2024-11-04 17:30
mainipcheck
10
KB
-rwxr-xr-x
2024-11-04 17:30
maintenance
52.61
KB
-rwxr-xr-x
2026-06-03 03:04
make_config
407
B
-rw-r--r--
2024-11-04 17:30
make_hostname_unowned
1.16
KB
-rwxr-xr-x
2024-11-04 17:30
manage_extra_marketing
12.76
KB
-rwx------
2026-05-08 00:47
manage_greylisting
16.33
KB
-rwxr-xr-x
2026-06-11 03:04
manage_mysql_profiles
16.33
KB
-rwxr-xr-x
2024-11-04 17:30
mass_change_php_setting
10.65
KB
-rwxr-xr-x
2026-04-16 03:04
migrate_ccs_to_cpdavd
47.06
KB
-rwxr-xr-x
2025-02-11 03:04
migrate_local_ini_to_php_ini
7.41
KB
-rwxr-xr-x
2024-11-04 17:30
migrate_whmtheme_file_to_userdata
2.95
KB
-rwxr-xr-x
2024-11-04 17:30
mkwwwacctconf
2.33
KB
-rwxr-xr-x
2024-11-04 17:30
modify_accounts
4.07
KB
-rwxr-xr-x
2025-01-22 03:04
modify_featurelist
11.33
KB
-rwx------
2026-05-08 00:47
modify_packages
3.64
KB
-rwxr-xr-x
2025-01-22 03:04
modsec_vendor
15.63
KB
-rwxr-xr-x
2024-11-04 17:30
mysqlconnectioncheck
6.72
KB
-rwxr-xr-x
2024-11-04 17:30
mysqlpasswd
4.14
KB
-rwxr-xr-x
2024-11-04 17:30
named.ca
1.57
KB
-rw-r--r--
2024-11-04 17:30
named.rfc1912.zones
774
B
-rw-r--r--
2024-11-04 17:30
notify_expiring_certificates
9.37
KB
-rwxr-xr-x
2024-11-04 17:30
notify_expiring_certificates_on_linked_nodes
1.33
KB
-rwxr-xr-x
2024-11-04 17:30
oopscheck
1.12
KB
-rwxr-xr-x
2024-11-04 17:30
optimize_eximstats
3.88
KB
-rwxr-xr-x
2024-11-04 17:30
panel_ini
4.11
KB
-rwxr-xr-x
2026-06-03 03:04
patch_mail_spamassassin_compiledregexps_body_0
2.39
KB
-rwxr-xr-x
2024-11-04 17:30
patchfdsetsize
2.72
KB
-rwxr-xr-x
2024-11-04 17:30
pedquota
2.26
KB
-rwxr-xr-x
2024-11-04 17:30
perform_sqlite_auto_rebuild_db_maintenance
1.98
KB
-rwxr-xr-x
2025-01-22 03:04
perlinstaller
528
B
-rwxr-xr-x
2024-11-04 17:30
perlmods
1.18
KB
-rwxr-xr-x
2024-11-04 17:30
php_fpm_config
9.73
KB
-rwxr-xr-x
2024-11-04 17:30
phpini_tidy
687
B
-rwxr-xr-x
2024-11-04 17:30
pkgacct
89.91
KB
-rwxr-xr-x
2026-04-16 03:04
post_snapshot
2.09
KB
-rwxr-xr-x
2024-11-04 17:30
post_sync_cleanup
5.83
KB
-rwxr-xr-x
2026-06-11 03:04
postupcp
193
B
-rwxr-xr-x
2026-06-16 03:10
primary_virtual_host_migration
2.44
KB
-rwxr-xr-x
2024-11-04 17:30
process_cpmove
4.32
KB
-rwxr-xr-x
2026-06-08 21:46
process_pending_cpanel_php_pear_registration
2.73
KB
-rwxr-xr-x
2025-06-03 03:04
proxydomains
9.59
KB
-rwxr-xr-x
2025-11-06 03:05
ptycheck
724
B
-rwxr-xr-x
2024-11-04 17:30
purge_modsec_log
1.53
KB
-rwxr-xr-x
2024-11-04 17:30
purge_old_config_caches
2.08
KB
-rwxr-xr-x
2024-11-04 17:30
pwck
708
B
-rwxr-xr-x
2024-11-04 17:30
quickdnslookup
1.13
KB
-rwxr-xr-x
2024-11-04 17:30
quickwhoisips
2.29
KB
-rwxr-xr-x
2024-11-04 17:30
quota_auto_fix
1.41
KB
-rwxr-xr-x
2024-11-04 17:30
quotacheck
22.36
KB
-rwxr-xr-x
2024-11-04 17:30
rawchpass
460
B
-rwxr-xr-x
2024-11-04 17:30
rdate
4.8
KB
-rwxr-xr-x
2024-11-04 17:30
realadduser
5.61
KB
-rwxr-xr-x
2024-11-04 17:30
realchpass
3.26
KB
-rwxr-xr-x
2024-11-04 17:30
realperlinstaller
5.67
KB
-rwxr-xr-x
2024-11-04 17:30
realrawchpass
425
B
-rwxr-xr-x
2024-11-04 17:30
rebuild_bandwidthdb_root_cache
1.45
KB
-rwxr-xr-x
2024-11-04 17:30
rebuild_dbmap
5.8
KB
-rwxr-xr-x
2024-11-04 17:30
rebuild_provider_openid_connect_links_db
1.01
KB
-rwxr-xr-x
2024-11-04 17:30
rebuild_whm_chrome
2.22
KB
-rwxr-xr-x
2024-11-04 17:30
rebuilddnsconfig
25.5
KB
-rwxr-xr-x
2025-05-08 03:04
rebuildhttpdconf
2.6
KB
-rwxr-xr-x
2024-11-04 17:30
rebuildinstalledssldb
2.85
KB
-rwxr-xr-x
2024-11-04 17:30
rebuildippool
509
B
-rwxr-xr-x
2024-11-04 17:30
rebuilduserssldb
948
B
-rwxr-xr-x
2024-11-04 17:30
refresh-dkim-validity-cache
5.97
KB
-rwxr-xr-x
2024-11-04 17:30
regenerate_tokens
2.18
KB
-rwxr-xr-x
2024-11-04 17:30
remote_log_transfer
11.6
KB
-rwxr-xr-x
2024-11-04 17:30
remove_dovecot_index_files
5.89
KB
-rwxr-xr-x
2024-11-04 17:30
removeacct
28.2
MB
-rwx------
2026-06-11 03:04
rescan_user_dovecot_fts
2.98
KB
-rwxr-xr-x
2024-11-04 17:30
reset_mail_quotas_to_sane_values
6.82
KB
-rwxr-xr-x
2024-11-04 17:30
resetmailmanurls
2.03
KB
-rwxr-xr-x
2024-11-04 17:30
resetquotas
4.61
KB
-rwxr-xr-x
2024-11-04 17:30
restartsrv
3.19
KB
-rwxr-xr-x
2024-11-04 17:30
restartsrv_apache
422
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_apache_php_fpm
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_base
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_bind
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_chkservd
427
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_clamd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_cpanel_php_fpm
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_cpanellogd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_cpdavd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_cpgreylistd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_cphulkd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_cpipv6
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_cpsrvd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_crond
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_dnsadmin
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_dovecot
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_exim
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_eximstats
504
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_ftpd
426
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_ftpserver
911
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_httpd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_imap
437
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_inetd
2.47
KB
-rwxr-xr-x
2024-11-04 17:30
restartsrv_ipaliases
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_lmtp
437
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_mailman
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_mysql
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_named
579
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_nscd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_p0f
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_pdns
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_pop3
437
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_postgres
427
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_postgresql
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_powerdns
442
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_proftpd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_pureftpd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_queueprocd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_rsyslog
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_rsyslogd
437
B
-rwxr-xr-x
2024-11-04 17:30
restartsrv_spamd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_sshd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_syslogd
2.4
KB
-rwxr-xr-x
2024-11-04 17:30
restartsrv_tailwatchd
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_unknown
10.85
MB
-rwxr-xr-x
2026-06-11 03:04
restartsrv_xinetd
422
B
-rwxr-xr-x
2024-11-04 17:30
restorecpuserfromcache
1.96
KB
-rwxr-xr-x
2024-11-04 17:30
restorepkg
48.67
MB
-rwx------
2026-06-12 03:04
rfc1912_zones.tar
10
KB
-rw-r--r--
2024-11-04 17:30
rpmup
5.07
KB
-rwxr-xr-x
2024-11-04 17:30
rsync-user-homedir.pl
5.76
KB
-rwxr-xr-x
2024-11-04 17:30
run_if_exists
512
B
-rwxr-xr-x
2024-11-04 17:30
run_plugin_lifecycle
3.82
KB
-rwx------
2026-05-08 00:47
runstatsonce
440
B
-rwxr-xr-x
2024-11-04 17:30
runweblogs
1.02
KB
-rwxr-xr-x
2024-11-04 17:30
sa-update_wrapper
3.34
KB
-rwxr-xr-x
2024-11-04 17:30
safetybits.pl
844
B
-rwxr-xr-x
2024-11-04 17:30
secureit
4.72
KB
-rwxr-xr-x
2024-11-04 17:30
securemysql
4.4
KB
-rwxr-xr-x
2024-11-04 17:30
securerailsapps
3.58
KB
-rwxr-xr-x
2024-11-04 17:30
securetmp
16.76
KB
-rwxr-xr-x
2025-07-16 03:04
selectorunparkhook.py
1.7
KB
-rwxr-xr-x
2026-06-03 03:06
sendicq
474
B
-rwxr-xr-x
2024-11-04 17:30
servicedomains
9.59
KB
-rwxr-xr-x
2025-11-06 03:05
set_mailman_archive_perms
1.75
KB
-rwxr-xr-x
2024-11-04 17:30
setpostgresconfig
6.04
KB
-rwxr-xr-x
2024-11-04 17:30
setup_greylist_db
16.33
KB
-rwxr-xr-x
2026-06-11 03:04
setup_modsec_db
1.3
KB
-rwxr-xr-x
2024-11-04 17:30
setup_systemd_timer_for_plugins
3.92
KB
-rwx------
2026-05-08 00:47
setupftpserver
10.47
KB
-rwxr-xr-x
2024-11-04 17:30
setupmailserver
9.39
KB
-rwxr-xr-x
2025-05-08 03:04
setupnameserver
12.6
KB
-rwxr-xr-x
2025-11-06 03:05
show_php_settings
3.67
KB
-rwxr-xr-x
2026-04-16 03:04
shrink_modsec_ip_database
12.97
KB
-rwxr-xr-x
2024-11-04 17:30
simpleps
3.05
KB
-rwxr-xr-x
2024-11-04 17:30
slurp_exim_mainlog
5.78
KB
-rwxr-xr-x
2024-11-04 17:30
smartcheck
15.13
KB
-rwxr-xr-x
2025-06-03 03:04
smtpmailgidonly
8.15
KB
-rwxr-xr-x
2024-11-04 17:30
snapshot_prep
5.88
KB
-rwxr-xr-x
2024-11-04 17:30
spamassassin_dbm_cleaner
5.85
KB
-rwxr-xr-x
2024-11-04 17:30
spamassassindisable
3.74
KB
-rwxr-xr-x
2024-11-04 17:30
spamboxdisable
2.27
KB
-rwxr-xr-x
2024-11-04 17:30
sshcontrol
14.38
KB
-rwxr-xr-x
2024-11-04 17:30
ssl_crt_status
3.84
KB
-rwxr-xr-x
2024-11-04 17:30
suspendacct
18.08
KB
-rwxr-xr-x
2025-11-06 03:05
suspendmysqlusers
4.78
KB
-rwxr-xr-x
2024-11-04 17:30
swapip
3.82
KB
-rwxr-xr-x
2024-11-04 17:30
sync-mysql-users-from-grants
1.2
KB
-rwxr-xr-x
2024-11-04 17:30
sync_child_accounts
1.77
KB
-rwxr-xr-x
2024-11-04 17:30
sync_contact_emails_to_cpanel_users_files
1.14
KB
-rwxr-xr-x
2024-11-04 17:30
synctransfers
1.92
KB
-rwxr-xr-x
2024-11-04 17:30
syslog_check
1.36
KB
-rwxr-xr-x
2024-11-04 17:30
sysup
645
B
-rwxr-xr-x
2024-11-04 17:30
test_sa_compiled
1.07
KB
-rwxr-xr-x
2024-11-04 17:30
transfer_account_as_user
2.34
KB
-rwxr-xr-x
2024-11-04 17:30
transfer_accounts_as_root
4.76
KB
-rwxr-xr-x
2024-11-04 17:30
transfer_in_progress
3.08
KB
-rwxr-xr-x
2024-11-04 17:30
transfer_in_progress.pod
312
B
-rw-r--r--
2024-11-04 17:30
transfermysqlusers
10.13
MB
-rwx------
2026-06-11 03:04
try-later
7.95
KB
-rwxr-xr-x
2024-11-04 17:30
unblockip
667
B
-rwxr-xr-x
2024-11-04 17:30
uninstall_cpanel_analytics
1.2
KB
-rwxr-xr-x
2024-11-04 17:30
uninstall_dovecot_fts
562
B
-rwxr-xr-x
2024-11-04 17:30
uninstall_plugin
2.84
KB
-rwxr-xr-x
2024-11-04 17:30
unlink_service_account
2.62
KB
-rwxr-xr-x
2024-11-04 17:30
unpkgacct
4.6
KB
-rwxr-xr-x
2024-11-04 17:30
unslavenamedconf
863
B
-rwxr-xr-x
2024-11-04 17:30
unsuspendacct
17.96
KB
-rwxr-xr-x
2025-11-06 03:05
unsuspendmysqlusers
7.1
KB
-rwxr-xr-x
2024-11-04 17:30
upcp
33.9
KB
-rwxr-xr-x
2026-01-21 03:04
upcp-running
2.7
KB
-rwxr-xr-x
2024-11-04 17:30
upcp.static
745.21
KB
-rwxr-xr-x
2026-06-11 03:04
update-packages
5.07
KB
-rwxr-xr-x
2024-11-04 17:30
update_apachectl
480
B
-rwxr-xr-x
2024-11-04 17:30
update_db_cache
430
B
-rwxr-xr-x
2024-11-04 17:30
update_dkim_keys
1.45
KB
-rwxr-xr-x
2024-11-04 17:30
update_exim_rejects
1.21
KB
-rwxr-xr-x
2024-11-04 17:30
update_existing_mail_quotas_for_account
4.78
KB
-rwxr-xr-x
2024-11-04 17:30
update_feature_flags
957
B
-rwxr-xr-x
2024-11-04 17:30
update_freebusy_data
5.25
KB
-rwxr-xr-x
2025-05-08 03:04
update_known_proxy_ips
1002
B
-rwxr-xr-x
2024-11-04 17:30
update_local_rpm_versions
4.56
KB
-rwxr-xr-x
2024-11-04 17:30
update_mailman_cache
8.34
KB
-rwxr-xr-x
2024-11-04 17:30
update_mysql_systemd_config
1.07
KB
-rwxr-xr-x
2025-05-08 03:04
update_neighbor_netblocks
487
B
-rwxr-xr-x
2024-11-04 17:30
update_sa_config
2.14
KB
-rwxr-xr-x
2024-11-04 17:30
update_spamassassin_config
10.73
KB
-rwxr-xr-x
2024-11-04 17:30
update_users_jail
691
B
-rwxr-xr-x
2024-11-04 17:30
update_users_vhosts
801
B
-rwxr-xr-x
2024-11-04 17:30
updatedomainips
605
B
-rwxr-xr-x
2024-11-04 17:30
updatenameserverips
1.66
KB
-rwxr-xr-x
2024-11-04 17:30
updatenow
5.18
KB
-rwxr-xr-x
2024-11-04 17:30
updatenow.static
2.01
MB
-rwxr-xr-x
2026-06-13 03:04
updatesigningkey
1.95
KB
-rwxr-xr-x
2024-11-04 17:30
updatessldomains
1.81
KB
-rwxr-xr-x
2024-11-04 17:30
updatesupportauthorizations
2.49
KB
-rwxr-xr-x
2024-11-04 17:30
updateuserdatacache
2.47
KB
-rwxr-xr-x
2024-11-04 17:30
updateuserdomains
774
B
-rwxr-xr-x
2024-11-04 17:30
upgrade_bandwidth_dbs
2.22
KB
-rwxr-xr-x
2024-11-04 17:30
upgrade_subaccount_databases
2.73
KB
-rwxr-xr-x
2024-11-04 17:30
userdata_wildcard_cleanup
5.74
KB
-rwxr-xr-x
2024-11-04 17:30
userdirctl
5.01
KB
-rwxr-xr-x
2024-11-04 17:30
validate_sshkey_passphrase
1.21
KB
-rwxr-xr-x
2024-11-04 17:30
verify_api_spec_files
757
B
-rwxr-xr-x
2024-11-04 17:30
verify_pidfile
1.96
KB
-rwxr-xr-x
2024-11-04 17:30
verify_vhost_includes
7.34
KB
-rwxr-xr-x
2024-11-04 17:30
vps_optimizer
7.82
KB
-rwxr-xr-x
2024-11-04 17:30
vzzo-fixer
725
B
-rwxr-xr-x
2024-11-04 17:30
whmlogin
2.33
KB
-rwxr-xr-x
2024-11-04 17:30
whoowns
1.13
KB
-rwxr-xr-x
2024-11-04 17:30
wwwacct
30.32
MB
-rwx------
2026-06-11 03:04
wwwacct2
88
B
-rwxr-xr-x
2024-11-04 17:30
xfer_rcube_schema_migrate.pl
2.4
KB
-rwxr-xr-x
2024-11-04 17:30
xfer_rcube_uid_resolver.pl
1.8
KB
-rwxr-xr-x
2024-11-04 17:30
xferpoint
3.13
KB
-rwxr-xr-x
2024-11-04 17:30
xfertool
16.23
KB
-rwxr-xr-x
2024-11-04 17:30
zoneexists
800
B
-rwxr-xr-x
2024-11-04 17:30
Save
Rename
#!/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 scripts::upcp; BEGIN { unshift @INC, q{/usr/local/cpanel}; # if we are being called with a compile check flag ( perl -c ), skip the begin block # so we don't actually call upcp.static when just checking syntax and such is OK return if $^C; # static never gets --use-checked and should pass all the begin block checks return if $0 =~ /\.static$/; # let the '--use-check' instance compiled if ( grep { $_ eq '--use-check' } @ARGV ) { no warnings; # dynamic definition of the INIT block eval "INIT { exit(0); }"; return; } system("$0 --use-check >/dev/null 2>&1"); # compilation is ok with '--use-check', we will continue the non static version return if $? == 0; my $static = $0 . ".static"; if ( -f $static ) { print STDERR "We determined that $0 had compilation issues..\n"; print STDERR "Trying to exec $static " . join( ' ', @ARGV ) . "\n"; exec( $^X, $static, @ARGV ); } } use cPstrict; no warnings; ## no critic qw(ProhibitNoWarnings) use Try::Tiny; use Cpanel::OS::All (); # PPI USE OK -- make sure Cpanel::OS is embedded use Cpanel::HiRes ( preload => 'perl' ); use Cpanel::Env (); use Cpanel::Update::IsCron (); use Cpanel::Update::Logger (); use Cpanel::FileUtils::TouchFile (); use Cpanel::LoadFile (); use Cpanel::LoadModule (); use Cpanel::Usage (); use Cpanel::UPID (); use IO::Handle (); use POSIX (); use Cpanel::Unix::PID::Tiny (); my $pidfile = '/var/run/upcp.pid'; my $lastlog = '/var/cpanel/updatelogs/last'; my $upcp_disallowed_path = '/root/.upcp_controlc_disallowed'; my $version_upgrade_file = '/usr/local/cpanel/upgrade_in_progress.txt'; our $logger; # Global for logger object. our $logfile_path; my $now; my $forced = 0; my $fromself = 0; my $sync_requested = 0; my $bg = 0; my $rlimit_max = 1024; my $from_version; my $pbar_starting_point; exit( upcp() || 0 ) unless caller(); sub usage { print <<EOS; Usage: scripts/upcp [--bg] [--cron] [--force] [--help] [--log=[path]] [--sync] Updates cPanel & WHM. Options: --bg Runs upcp in the background. Output is only visible in the log. --cron Follow WHM's Update Preferences (/etc/cpupdate.conf). --force Force a reinstall even if the system is up to date. --help Display this documentation. --log=[path] Overrides the default log file. --sync Updates the server to the currently-installed version instead of downloading a newer version. This will also run other maintenance items, such as package updates and repairs. You cannot use the --sync argument with the --force argument. EOS exit 1; ## no critic(Cpanel::NoExitsFromSubroutines) -- /scripts/upcp needs refactor to use Getopt } sub upcp { ## no critic(Subroutines::ProhibitExcessComplexity) - preserve original code Cpanel::Usage::wrap_options( \@ARGV, \&usage, {} ); #display usage information on --help open( STDERR, ">&STDOUT" ) or die $!; local $| = 1; umask(0022); $now = time(); setupenv(); unset_rlimits(); ############################################################################# # Record the arguments used when started, check for certain flags my $update_is_available_exit_code = 42; my @retain_argv = @ARGV; foreach my $arg (@ARGV) { if ( $arg =~ m/^--log=(.*)/ ) { $logfile_path = $1; } elsif ( $arg eq '--fromself' ) { $fromself = 1; } elsif ( $arg eq '--force' ) { $forced = 1; $ENV{'FORCEDCPUPDATE'} = 1; } elsif ( $arg eq '--sync' ) { $sync_requested = 1; } elsif ( $arg eq '--bg' ) { $bg = 1; } } if ( $sync_requested && $forced ) { print "FATAL: --force and --sync are mutually exclusive commands.\n"; print " Force is designed to update your installed version, regardless of whether it's already up to date.\n"; print " Sync is designed to update the version already installed, regardless of what is available.\n"; return 1; } if ( $> != 0 ) { die "upcp must be run as root"; } ############################################################################# # Make sure easyapache isn't already running my $upid = Cpanel::Unix::PID::Tiny->new(); if ( $upid->is_pidfile_running('/var/run/easyapache.pid') ) { print "EasyApache is currently running. Please wait for EasyApache to complete before running cPanel Update (upcp).\n"; return 1; } ############################################################################# # Make sure we aren't already running && make sure everyone knows we are running my $curpid = $upid->get_pid_from_pidfile($pidfile) || 0; if ( $curpid && $curpid != $$ && !$fromself && -e '/var/cpanel/upcpcheck' ) { my $pidfile_mtime = ( stat($pidfile) )[9]; my $pidfile_age = ( time - $pidfile_mtime ); if ( $pidfile_age > 21600 ) { # Running for > 6 hours _logger()->warning("previous PID ($curpid) has been running more than 6 hours. Killing processes."); kill_upcp($curpid); # the pid_file_no_cleanup() will exit if it is still stuck after this sleep 1; # Give the process group time to die. } elsif ( my $logpath = _determine_logfile_path_if_running($curpid) ) { print _message_about_already_running( $curpid, $logpath ) . "\n"; return 1; } } if ( $curpid && $curpid != $$ && !$upid->is_pidfile_running($pidfile) ) { print "Stale PID file '$pidfile' (pid=$curpid)\n"; } if ( !$fromself && !$upid->pid_file_no_cleanup($pidfile) ) { print "process is already running\n"; return 1; } # to indicate re-entry into upcp $pbar_starting_point = $fromself ? 17 : 0; # record current version $from_version = fetch_cpanel_version(); ############################################################################# # Set up the upcp log directory and files setup_updatelogs(); ############################################################################# # Fork a child to the background. The child does all the heavy lifting and # logs to a file; the parent just watches, reads, and parses the log file, # displaying what it gets. # # Note that the parent reads the log in proper line-oriented -- and buffered! # -- fashion. An earlier version of this script did raw sysread() calls here, # and had to deal with all the mess that that entailed. The current approach # reaps all the benefits of Perl's and Linux's significant file read # optimizations without needing to re-invent any of them. The parent loop # below becomes lean, mean, and even elegant. # # Note in particular that we do not need to explicitly deal with an # end-of-file condition (other than avoiding using undefined data). For # exiting the read loop we merely need to test that the child has expired, # which in any case is the only situation that can cause an eof condition for # us on the file the child is writing. # # Note, too, that the open() needs to be inside this loop, in case the child # has not yet created the file. if ( !$fromself ) { # we need to be sure that log an pid are the current one when giving back the end unlink $lastlog if $bg; if ( my $updatepid = fork() ) { $logfile_path ||= _determine_logfile_path_if_running($updatepid); if ($logger) { # Close if logged about killing stale process. $logger->{'brief'} = 1; # Don't be chatty about closing $logger->close_log; } if ($bg) { print _message_about_newly_started( $updatepid, $logfile_path ) . "\n"; my $progress; select undef, undef, undef, .10; while ( !-e $lastlog ) { print '.'; select undef, undef, undef, .25; $progress = 1; } print "\n" if $progress; } else { monitor_upcp($updatepid); } return; } else { $logfile_path ||= _determine_logfile_path_if_running($$); } } local $0 = 'cPanel Update (upcp) - Slave'; open( my $RNULL, '<', '/dev/null' ) or die "Cannot open /dev/null: $!"; chdir '/'; _logger(); # Open the log file. ############################################################################# # Set CPANEL_IS_CRON env var based on detection algorithm my $cron_reason = set_cron_env(); $logger->info("Detected cron=$ENV{'CPANEL_IS_CRON'} ($cron_reason)"); my $set_cron_method = $ENV{'CPANEL_IS_CRON'} ? 'set_on' : 'set_off'; Cpanel::Update::IsCron->$set_cron_method(); my $openmax = POSIX::sysconf( POSIX::_SC_OPEN_MAX() ); if ( !$openmax ) { $openmax = 64; } foreach my $i ( 0 .. $openmax ) { POSIX::close($i) unless $i == fileno( $logger->{'fh'} ); } POSIX::setsid(); open( STDOUT, '>', '/dev/null' ) or warn $!; open( STDERR, '>', '/dev/null' ) or warn $!; $logger->update_pbar($pbar_starting_point); ############################################################################## # Symlink /var/cpanel/updatelogs/last to the current log file unlink $lastlog; symlink( $logfile_path, $lastlog ) or $logger->error("Could not symlink $lastlog: $!"); ############################################################################# # now that we have sporked: update our pidfile and ensure it is removed unlink $pidfile; # so that pid_file() won't see it as running. if ( !$upid->pid_file($pidfile) ) { # re-verifies (i.e. upcp was not also started after the unlink() and here) and sets up cleanup of $pidfile for sporked proc $logger->error("Could not update pidfile “$pidfile” with BG process: $!\n"); return 1; } # Assuming we didn't get re-executed from a upcp change after updatenow (!$fromself). # If the file is still there from a failed run, remove it. unlink($upcp_disallowed_path) if !$fromself && -f $upcp_disallowed_path; # make sure that the pid file is going to be removed when killed by a signal $SIG{INT} = $SIG{HUP} = $SIG{TERM} = sub { ## no critic qw(Variables::RequireLocalizedPunctuationVars) unlink $pidfile; if ($logger) { $logger->close_log; $logger->open_log; $logger->error("User hit ^C or killed the process ( pid file '$pidfile' removed )."); $logger->close_log; } return; }; ############################################################################# # Get variables needed for update my $gotSigALRM = 0; my $connecttimeout = 30; my $liveconnect = 0; my $connectedhost = q{}; my @HOST_IPs = (); ## Case 46528: license checks moved to updatenow and Cpanel::Update::Blocker $logger->debug("Done getting update config variables.."); $logger->increment_pbar; ############################################################################# # Run the preupcp hook if ( -x '/usr/local/cpanel/scripts/preupcp' ) { $logger->info("Running /usr/local/cpanel/scripts/preupcp"); system '/usr/local/cpanel/scripts/preupcp'; } if ( -x '/usr/local/cpanel/scripts/hook' ) { $logger->info("Running Standardized hooks"); system '/usr/local/cpanel/scripts/hook', '--category=System', '--event=upcp', '--stage=pre'; } $logger->increment_pbar(); ############################################################################# # Check mtime on ourselves before sync # This is the target for a goto in the case that the remote TIERS file is # changed sometime during the execution of this upcp run. It prevents the # need for a new script argument and re-exec. STARTOVER: my $updatenow_exit_code; my $mtime = ( stat('/usr/local/cpanel/scripts/upcp') )[9]; $logger->info( "mtime on upcp is $mtime (" . scalar( localtime($mtime) ) . ")" ); # * If no fromself arg is passed, it's either the first run from crontab or called manually. # * --force is passed to updatenow, has no bearing on upcp itself. # * Even if upcp is changed 3 times in a row during an update (fastest builds ever?), we # would never actually update more than once unless the new upcp script changed the logic below if ( !$fromself ) { # run updatenow to sync everything # updatenow expects --upcp to be passed or will error out my @updatenow_args = ( '/usr/local/cpanel/scripts/updatenow', '--upcp', "--log=$logfile_path" ); # if --forced was received, pass it on to updatenow if ($forced) { push( @updatenow_args, '--force' ); } # if --sync was received, pass it on to updatenow. --force makes --sync meaningless. if ( !$forced && $sync_requested ) { push( @updatenow_args, '--sync' ); } # This is the point of no return, we are upgrading # and its no longer abortable. # set flag to disallow ^C during updatenow Cpanel::FileUtils::TouchFile::touchfile($upcp_disallowed_path) or $logger->warn("Failed to create: $upcp_disallowed_path: $!"); # call updatenow, if we get a non-zero status, die. my $exit_code = system(@updatenow_args); $logger->increment_pbar(15); if ( $exit_code != 0 ) { $updatenow_exit_code = $exit_code; my $signal = $exit_code % 256; $exit_code = $exit_code >> 8; analyze_and_report_error( #success_msg => undef, error_msg => "Running `@updatenow_args` failed, exited with code $exit_code (signal = $signal)", type => 'upcp::UpdateNowFailed', exit_status => $exit_code, extra => [ 'signal' => $signal, 'updatenow_args' => \@updatenow_args, ], ); } # get the new mtime and compare it, if upcp changed, let's run ourselves again. # this should be a fairly rare occasion. my $newmtime = ( stat('/usr/local/cpanel/scripts/upcp') )[9]; if ( $newmtime ne $mtime ) { #----> Run our new self (and never come back). $logger->info("New upcp detected, restarting ourself"); $logger->close_log(); exec '/usr/local/cpanel/scripts/upcp', @retain_argv, '--fromself', "--log=$logfile_path"; } } ############################################################################# # Run the maintenance script my $last_logfile_position; my $save_last_logfile_position = sub { $last_logfile_position = int( qx{wc -l $logfile_path 2>/dev/null} || 0 ); }; $logger->close_log(); # Allow maintenance to write to the log $save_last_logfile_position->(); # remember how many lines has the logfile before starting the maintenance script my $exit_status; my $version_change_happened = -e $version_upgrade_file; if ($version_change_happened) { $exit_status = system( '/usr/local/cpanel/scripts/maintenance', '--pre', '--log=' . $logfile_path, '--pbar-start=20', '--pbar-stop=30' ); } else { $exit_status = system( '/usr/local/cpanel/scripts/maintenance', '--log=' . $logfile_path, '--pbar-start=20', '--pbar-stop=95' ); } $logger->open_log(); # Re-open the log now maintenance is done. analyze_and_report_error( success_msg => "Pre Maintenance completed successfully", error_msg => "Pre Maintenance ended, however it did not exit cleanly ($exit_status). Please check the logs for an indication of what happened", type => 'upcp::MaintenanceFailed', exit_status => $exit_status, logfile => $logfile_path, last_logfile_position => $last_logfile_position, ); # Run post-sync cleanup only if updatenow did a sync # Formerly run after layer2 did a sync. if ($version_change_happened) { # post_sync pbar range: 30%-55% $logger->close_log(); # Yield the log to post_sync_cleanup $save_last_logfile_position->(); # remember how many lines has the logfile before starting the post_sync_cleanup script my $post_exit_status = system( '/usr/local/cpanel/scripts/post_sync_cleanup', '--log=' . $logfile_path, '--pbar-start=30', '--pbar-stop=55' ); $logger->open_log; # reopen the log to continue writing messages analyze_and_report_error( success_msg => "Post-sync cleanup completed successfully", error_msg => "Post-sync cleanup has ended, however it did not exit cleanly. Please check the logs for an indication of what happened", type => 'upcp::PostSyncCleanupFailed', exit_status => $post_exit_status, logfile => $logfile_path, last_logfile_position => $last_logfile_position, ); unlink $version_upgrade_file; unlink($upcp_disallowed_path) if -f ($upcp_disallowed_path); # Maintenance pbar range: 55-95% $logger->close_log(); # Allow maintenance to write to the log $save_last_logfile_position->(); # remember how many lines has the logfile before starting the maintenance --post $exit_status = system( '/usr/local/cpanel/scripts/maintenance', '--post', '--log=' . $logfile_path, '--pbar-start=55', '--pbar-stop=95' ); $logger->open_log(); # Re-open the log now maintenance is done. analyze_and_report_error( success_msg => "Post Maintenance completed successfully", error_msg => "Post Maintenance ended, however it did not exit cleanly ($exit_status). Please check the logs for an indication of what happened", type => 'upcp::MaintenanceFailed', exit_status => $exit_status, logfile => $logfile_path, last_logfile_position => $last_logfile_position, ); # Check for new version... used when updating to next LTS version $logger->info("Polling updatenow to see if a newer version is available for upgrade"); $logger->close_log(); # Yield the log to updatenow my $update_available = system( '/usr/local/cpanel/scripts/updatenow', "--log=$logfile_path", '--checkremoteversion' ); $logger->open_log; # reopen the log to continue writing messages if ( !$sync_requested && $update_available && ( $update_available >> 8 ) == $update_is_available_exit_code ) { $logger->info("\n\n/!\\ - Next LTS version available, restarting upcp and updating system. /!\\\n\n"); $fromself = 0; goto STARTOVER; } } else { # Run sanity check scripts when no version change happened # This allows certain install scripts marked as "sanity" to run during regular upcp runs $logger->info("Running sanity check scripts"); $logger->close_log(); # Yield the log to bin/taskrun --sanity $save_last_logfile_position->(); # remember how many lines has the logfile before starting sanity scripts my $sanity_exit_status = run_sanity_install_scripts($logfile_path); $logger->open_log; # reopen the log to continue writing messages analyze_and_report_error( success_msg => "Sanity check scripts completed successfully", error_msg => "Sanity check scripts ended, however some did not exit cleanly. Please check the logs for an indication of what happened", type => 'upcp::SanityInstallScriptsFailed', exit_status => $sanity_exit_status, logfile => $logfile_path, last_logfile_position => $last_logfile_position, ); # Perform the return we used to do if updatenow failed: return ( $updatenow_exit_code >> 8 ) if defined $updatenow_exit_code && $updatenow_exit_code; unlink($upcp_disallowed_path) if -f ($upcp_disallowed_path); } ############################################################################# # Run the post upcp hook $logger->update_pbar(95); if ( -x '/usr/local/cpanel/scripts/postupcp' ) { $logger->info("Running /usr/local/cpanel/scripts/postupcp"); system '/usr/local/cpanel/scripts/postupcp'; } if ( -x '/usr/local/cpanel/scripts/hook' ) { $logger->info("Running Standardized hooks"); system '/usr/local/cpanel/scripts/hook', '--category=System', '--event=upcp', '--stage=post'; } close($RNULL); ############################################################################# # All done. ############################################################################# $logger->update_pbar(100); $logger->info( "\n\n\tcPanel update completed\n\n", 1 ); $logger->info("A log of this update is available at $logfile_path\n\n"); # this happens on exit so it shouldn't be necessary $logger->info("Removing upcp pidfile"); unlink $pidfile if -f $pidfile || $logger->warn("Could not delete pidfile $pidfile : $!"); my $update_blocks_fname = '/var/cpanel/update_blocks.config'; if ( -s $update_blocks_fname ) { $logger->warning("NOTE: A system upgrade was not possible due to the following blockers:\n"); if ( open( my $blocks_fh, '<', $update_blocks_fname ) ) { while ( my $line = readline $blocks_fh ) { my ( $level, $message ) = split /,/, $line, 2; # Not using the level in the log, cause the logger can emit additional messages # on some of the levels used (fatal emits an 'email message', etc) # Remove URL from log output. Make sure message is defined. if ($message) { $message =~ s/<a.*?>//ig; $message =~ s{</a>}{}ig; } $logger->warning( uc("[$level]") . " - $message" ); } } else { $logger->warning("Unable to open blocks file! Please review '/var/cpanel/update_blocks.config' manually."); } } else { $logger->info("\n\nCompleted all updates\n\n"); } $logger->close_log(); return 0; } ############################################################################# ######[ Subroutines ]######################################################## ############################################################################# sub analyze_and_report_error { my %info = @_; my $type = $info{type} or die; my $exit_status = $info{exit_status}; if ( $exit_status == 0 ) { if ( defined $info{success_msg} ) { $logger->info( $info{success_msg} ); } return; } my $msg = $info{error_msg} or die; my @extra; if ( ref $info{extra} ) { @extra = @{ $info{extra} }; } my $logfile_content = Cpanel::LoadFile::loadfile_r($logfile_path); # add events to the end of the error log if ( try( sub { Cpanel::LoadModule::load_perl_module("Cpanel::Logs::ErrorEvents") } ) ) { my ($events) = Cpanel::Logs::ErrorEvents::extract_events_from_log( log => $logfile_content, after_line => $info{last_logfile_position} ); if ( $events && ref $events && scalar @$events ) { my $events_str = join ', ', map { qq["$_"] } @$events; $events_str = qq[The following events were logged: ${events_str}.]; $msg =~ s{(Please check)}{${events_str} $1} or $msg .= ' ' . $events_str; } } $logger->error( $msg, 1 ); if ( try( sub { Cpanel::LoadModule::load_perl_module("Cpanel::iContact::Class::$type") } ) ) { require Cpanel::Notify; Cpanel::Notify::notification_class( 'class' => $type, 'application' => $type, 'constructor_args' => [ 'exit_code' => $exit_status, 'events_after_line' => $info{last_logfile_position}, @extra, 'attach_files' => [ { 'name' => 'update_log.txt', 'content' => $logfile_content, 'number_of_preview_lines' => 25 } ] ] ); } elsif ( !try( sub { Cpanel::LoadModule::load_perl_module("Cpanel::iContact"); Cpanel::iContact::icontact( 'application' => 'upcp', 'subject' => 'cPanel & WHM update failure (upcp)', 'message' => $msg, ); } ) ) { $logger->error('Failed to send contact message'); } return 1; } ############################################################################# sub kill_upcp { my $pid = shift or die; my $status = shift || 'hanging'; my $msg = shift || "/usr/local/cpanel/scripts/upcp was running as pid '$pid' for longer than 6 hours. cPanel will kill this process and run a new upcp in its place."; # Attempt to notify admin of the kill. if ( try( sub { Cpanel::LoadModule::load_perl_module("Cpanel::iContact::Class::upcp::Killed") } ) ) { require Cpanel::Notify; Cpanel::Notify::notification_class( 'class' => 'upcp::Killed', 'application' => 'upcp::Killed', 'constructor_args' => [ 'upcp_path' => '/usr/local/cpanel/scripts/upcp', 'pid' => $pid, 'status' => $status, 'attach_files' => [ { 'name' => 'update_log.txt', 'content' => Cpanel::LoadFile::loadfile_r($logfile_path), 'number_of_preview_lines' => 25 } ] ] ); } else { try( sub { Cpanel::LoadModule::load_perl_module("Cpanel::iContact"); Cpanel::iContact::icontact( 'application' => 'upcp', 'subject' => "cPanel update $status", 'message' => $msg, ); } ); } print "Sending kill signal to process group for $pid\n"; kill -1, $pid; # Kill the process group for ( 1 .. 60 ) { print "Waiting for processes to die\n"; waitpid( $pid, POSIX::WNOHANG() ); last if ( !kill( 0, $pid ) ); sleep 1; } if ( kill( 0, $pid ) ) { print "Could not kill upcp nicely. Doing kill -9 $pid\n"; kill 9, $pid; } else { print "Done!\n"; } 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'; } sub unset_rlimits { # This is required if upcp started running from a pre-1132 eval { local $SIG{__DIE__}; require Cpanel::Rlimit; Cpanel::Rlimit::set_rlimit_to_infinity(); }; # CPANEL-43452: Ensure consistent rlimit value between UI and CLI eval { local $SIG{__DIE__}; Cpanel::Rlimit::set_rlimit( $rlimit_max, [qw/NOFILE/] ); }; } ############################################################################# sub setup_updatelogs { return if ( -d '/var/cpanel/updatelogs' ); unlink('/var/cpanel/updatelogs'); mkdir( '/var/cpanel/updatelogs', 0700 ); } sub set_cron_env { # Do not override the env var if set. return 'env var CPANEL_IS_CRON was present before this process started.' if ( defined $ENV{'CPANEL_IS_CRON'} ); if ( grep { $_ eq '--cron' } @ARGV ) { $ENV{'CPANEL_IS_CRON'} = 1; return 'cron mode set from command line'; } if ( $ARGV[0] eq 'manual' ) { $ENV{'CPANEL_IS_CRON'} = 0; return 'manual flag passed on command line'; } if ($forced) { $ENV{'CPANEL_IS_CRON'} = 0; return '--force passed on command line'; } if ( -t STDOUT ) { $ENV{'CPANEL_IS_CRON'} = 0; return 'Terminal detected'; } if ( $ENV{'SSH_CLIENT'} ) { $ENV{'CPANEL_IS_CRON'} = 0; return 'SSH connection detected'; } # cron sets TERM=dumb if ( $ENV{'TERM'} eq 'dumb' ) { $ENV{'CPANEL_IS_CRON'} = 1; return 'TERM detected as set to dumb'; } # Check if parent is whostmgr if ( readlink( '/proc/' . getppid() . '/exe' ) =~ m/whostmgrd/ ) { $ENV{'CPANEL_IS_CRON'} = 0; return 'parent process is whostmgrd'; } # Default to cron enabled. $ENV{'CPANEL_IS_CRON'} = 1; return 'default'; } ############################################################################# sub fetch_cpanel_version { my $version; my $version_file = '/usr/local/cpanel/version'; return if !-f $version_file; my $fh; local $/ = undef; return if !open $fh, '<', $version_file; $version = <$fh>; close $fh; $version =~ s/^\s+|\s+$//gs; return $version; } ############################################################################# sub monitor_upcp { my $updatepid = shift or die; $0 = 'cPanel Update (upcp) - Master'; $SIG{INT} = $SIG{TERM} = sub { print "User hit ^C\n"; if ( -f $upcp_disallowed_path ) { print "Not allowing upcp slave to be killed during updatenow, just killing monitoring process.\n"; exit; } print "killing upcp\n"; kill_upcp( $updatepid, "aborted", "/usr/local/cpanel/scripts/upcp was aborted by the user hitting Ctrl-C." ); exit; }; $SIG{HUP} = sub { print "SIGHUP detected; closing monitoring process.\n"; print "The upcp slave has not been affected\n"; exit; }; # Wait till the file shows up. until ( -e $logfile_path ) { select undef, undef, undef, .25; # sleep just a bit } # Wait till we're allowed to open it. my $fh; until ( defined $fh && fileno $fh ) { $fh = IO::Handle->new(); if ( !open $fh, '<', $logfile_path ) { undef $fh; select undef, undef, undef, .25; # sleep just a bit next; } } # Read the file until the pid dies. my $child_done = 0; while (1) { # Read all the available lines. while (1) { my $line = <$fh>; last if ( !defined $line || $line eq '' ); print $line; } # Once the child is history, we need to do yet one more final read, # on the off chance (however remote) that she has written one last # hurrah after we last checked. Hence the following. last if $child_done; # from prev. pass $child_done = 1 if -1 == waitpid( $updatepid, 1 ); # and loop back for one more read select undef, undef, undef, .25; # Yield idle time to the cpu } close $fh if $fh; exit; } sub _logger { return $logger if $logger; $logger = Cpanel::Update::Logger->new( { 'logfile' => $logfile_path, 'stdout' => 1, 'log_level' => 'info' } ); # do not set the pbar in the constructor to do not display the 0 % in bg mode $logger->{pbar} = $pbar_starting_point; return $logger; } sub _determine_logfile_path_if_running ($pid) { my $upid = Cpanel::UPID::get($pid); return $upid ? "/var/cpanel/updatelogs/update.$upid.log" : undef; } sub run_sanity_install_scripts { my ($logfile_path) = @_; # Use bin/taskrun --sanity to execute sanity check install tasks require Cpanel::SafeRun::Object; print "Running sanity check scripts via taskrun\n"; my $saferun = Cpanel::SafeRun::Object->new_or_die( program => '/usr/local/cpanel/bin/taskrun', args => ['--sanity'], ); my $stdout = $saferun->stdout() // ''; my $stderr = $saferun->stderr() // ''; my $exit_status = $saferun->CHILD_ERROR() >> 8; # Print any output from taskrun print $stdout if $stdout; print STDERR $stderr if $stderr; if ( $exit_status == 0 ) { print "Sanity check scripts completed successfully\n"; } else { print "Sanity check scripts exited with status: $exit_status\n"; } return $exit_status; } #---------------------------------------------------------------------- # HANDLE WITH CARE!! This string is parsed # in at least one place. (cf. Cpanel::Update::Start) sub _message_about_newly_started ( $updatepid, $logfile_path ) { return "upcp is going into background mode (PID $updatepid). You can follow “$logfile_path” to watch its progress."; } #---------------------------------------------------------------------- # HANDLE WITH CARE!! This string is parsed # in at least one place. (cf. Cpanel::Update::Start) sub _message_about_already_running ( $curpid, $logpath ) { return "cPanel Update (upcp) is already running. Please wait for the previous upcp (PID $curpid, log file “$logpath”) to complete, then try again. You can use the command 'ps --pid $curpid' to check if the process is running. You may wish to use '--force'."; } 1;