Linux ams-business-8.hostwindsdns.com 4.18.0-553.80.1.lve.el8.x86_64 #1 SMP Wed Oct 22 19:29:36 UTC 2025 x86_64
LiteSpeed
Server IP : 192.236.177.161 & Your IP : 216.73.216.154
Domains :
Cant Read [ /etc/named.conf ]
User : ajzdfbpz
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
local /
cpanel /
scripts /
Delete
Unzip
Name
Size
Permission
Date
Action
cpan_sandbox
[ DIR ]
drwxr-xr-x
2017-06-12 18:25
php_sandbox
[ DIR ]
drwxr-xr-x
2020-12-20 04:48
MirrorSearch_pingtest
2.38
KB
-rwxr-xr-x
2022-05-16 17:46
activesync-invite-reply
1.69
KB
-rwxr-xr-x
2022-05-16 17:46
add_dns
2.36
KB
-rwxr-xr-x
2022-05-16 17:46
adddns
2.36
KB
-rwxr-xr-x
2022-05-16 17:46
addpop
6.08
KB
-rwxr-xr-x
2022-05-16 17:47
addsystemuser
3.27
KB
-rwxr-xr-x
2022-05-16 17:46
adduser
92
B
-rwxr-xr-x
2017-06-12 18:25
agent360.sh
16.03
KB
-rwx------
2025-09-17 21:17
apachelimits
4.31
KB
-rwxr-xr-x
2022-05-16 17:46
archive_sync_zones
3.05
KB
-rwxr-xr-x
2025-04-01 22:56
auto-adjust-mysql-limits
1.81
KB
-rwxr-xr-x
2022-05-16 17:46
autorepair
1.24
KB
-rwxr-xr-x
2022-05-16 17:46
backups_clean_metadata_for_missing_backups
1.57
KB
-rwxr-xr-x
2022-05-16 17:46
backups_create_metadata
15.75
KB
-rwxr-xr-x
2022-05-16 17:46
backups_list_user_files
4.56
KB
-rwxr-xr-x
2022-05-16 17:46
balance_linked_node_quotas
2.58
KB
-rwxr-xr-x
2022-05-16 17:47
before_apache_make
232
B
-rwxr-xr-x
2026-02-17 12:31
biglogcheck
1.69
KB
-rwxr-xr-x
2022-05-16 17:46
build_bandwidthdb_root_cache_in_background
1.52
KB
-rwxr-xr-x
2022-05-16 17:46
build_cpnat
3.41
KB
-rwxr-xr-x
2022-05-16 17:46
build_mail_sni
3.87
KB
-rwxr-xr-x
2022-09-24 10:10
build_maxemails_config
1.14
KB
-rwxr-xr-x
2022-05-16 17:46
builddovecotconf
6.76
KB
-rwxr-xr-x
2022-05-16 17:46
buildeximconf
7
KB
-rwxr-xr-x
2023-03-11 10:28
buildhttpdconf
2.6
KB
-rwxr-xr-x
2022-05-16 17:46
buildpureftproot
539
B
-rwxr-xr-x
2022-05-16 17:47
ccs-check
4.91
KB
-rwxr-xr-x
2022-05-16 17:47
check_cpanel_pkgs
10.75
KB
-rwxr-xr-x
2022-05-16 17:46
check_cpanel_rpms
218
B
-rwxr-xr-x
2021-12-14 12:30
check_domain_tls_service_domains.pl
6.68
KB
-rwxr-xr-x
2022-05-16 17:46
check_immutable_files
5.49
KB
-rwxr-xr-x
2022-05-16 17:47
check_mail_spamassassin_compiledregexps_body_0
187
B
-rwxr-xr-x
2017-06-12 18:25
check_maxmem_against_domains_count
3.57
KB
-rwxr-xr-x
2022-05-16 17:46
check_mount_procfs
2.02
KB
-rwxr-xr-x
2022-05-16 17:46
check_mysql
5.55
KB
-rwxr-xr-x
2022-09-24 10:10
check_plugin_pkgs
2.45
KB
-rwxr-xr-x
2025-04-01 22:56
check_security_advice_changes
8.28
KB
-rwxr-xr-x
2023-03-11 10:28
check_unmonitored_enabled_services
4.56
KB
-rwxr-xr-x
2022-09-24 10:10
check_unreliable_resolvers
3.59
KB
-rwxr-xr-x
2022-05-16 17:46
check_users_my_cnf
6.05
KB
-rwxr-xr-x
2022-05-16 17:46
check_valid_server_hostname
7.66
KB
-rwxr-xr-x
2022-09-24 10:10
checkalldomainsmxs
2.4
KB
-rwxr-xr-x
2022-05-16 17:46
checkbashshell
1.18
KB
-rwxr-xr-x
2022-05-16 17:46
checkccompiler
1.22
KB
-rwxr-xr-x
2022-05-16 17:46
checkexim.pl
3.1
KB
-rwxr-xr-x
2022-05-16 17:46
checklink
1.29
KB
-rwxr-xr-x
2022-05-16 17:46
checkusers
856
B
-rwxr-xr-x
2022-05-16 17:47
chkpaths
141
B
-rwxr-xr-x
2017-06-12 18:25
chpass
416
B
-rwxr-xr-x
2022-05-16 17:46
ckillall
1.11
KB
-rwxr-xr-x
2022-05-16 17:47
cl_pkg_verify_hook.py
2.38
KB
-rwxr-xr-x
2026-01-30 12:30
clean_dead_mailman_locks
2.09
KB
-rwxr-xr-x
2022-05-16 17:46
clean_up_temp_wheel_users
2.44
KB
-rwxr-xr-x
2022-05-16 17:46
clean_user_php_sessions
4.76
KB
-rwxr-xr-x
2022-08-26 11:30
cleandns
13.11
KB
-rwxr-xr-x
2025-04-01 22:56
cleandns8
417
B
-rwxr-xr-x
2022-05-16 17:46
cleanmsglog
735
B
-rwxr-xr-x
2017-06-12 18:25
cleanphpsessions
932
B
-rwxr-xr-x
2022-05-16 17:46
cleanphpsessions.php
658
B
-rw-r--r--
2022-08-16 11:30
cleanquotas
1.61
KB
-rwxr-xr-x
2022-05-16 17:46
cleansessions
5.89
KB
-rwxr-xr-x
2025-04-01 22:56
cleanupinterchange
2.64
KB
-rwxr-xr-x
2022-05-16 17:46
cleanupmysqlprivs
533
B
-rwxr-xr-x
2021-12-14 12:30
clear_cpaddon_ui_caches
1.27
KB
-rwxr-xr-x
2022-05-16 17:46
clear_orphaned_virtfs_mounts
3.56
KB
-rwxr-xr-x
2022-05-16 17:46
comparecdb
1.52
KB
-rwxr-xr-x
2022-05-16 17:46
compilers
2.86
KB
-rwxr-xr-x
2022-05-16 17:46
compilerscheck
999
B
-rwxr-xr-x
2022-05-16 17:47
configure_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-05-16 17:46
configure_rh_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-05-16 17:46
configure_rh_ipv6_firewall_for_cpanel
520
B
-rwxr-xr-x
2022-05-16 17:46
convert2dovecot
682
B
-rwxr-xr-x
2022-05-16 17:46
convert_accesshash_to_token
4.07
KB
-rwxr-xr-x
2022-05-16 17:46
convert_and_migrate_from_legacy_backup
1.97
KB
-rwxr-xr-x
2022-05-16 17:46
convert_maildir_to_mdbox
1.66
KB
-rwxr-xr-x
2022-05-16 17:46
convert_mdbox_to_maildir
1.66
KB
-rwxr-xr-x
2022-05-16 17:47
convert_roundcube_mysql2sqlite
26.27
KB
-rwxr-xr-x
2025-04-01 22:56
convert_to_dovecot_delivery
4.33
KB
-rwxr-xr-x
2022-05-16 17:46
convert_whmxfer_to_sqlite
1.46
KB
-rwxr-xr-x
2022-05-16 17:46
copy_user_mail_as_root
1.25
KB
-rwxr-xr-x
2022-05-16 17:46
copy_user_mail_as_user
1.34
KB
-rwxr-xr-x
2022-05-16 17:46
cpaddonsup
3.25
KB
-rwxr-xr-x
2022-05-16 17:47
cpan_config
2.8
KB
-rwxr-xr-x
2022-05-16 17:46
cpanel_initial_install
67.18
KB
-rwxr-xr-x
2025-04-01 22:56
cpanelsync
28.31
KB
-rwxr-xr-x
2022-05-16 17:46
cpanelsync_postprocessor
1.62
KB
-rwxr-xr-x
2022-05-16 17:46
cpanpingtest
965
B
-rwxr-xr-x
2022-05-16 17:46
cpbackup
44.79
KB
-rwxr-xr-x
2025-04-01 22:56
cpbackup_transport_file
5.65
KB
-rwxr-xr-x
2023-03-11 10:28
cpdig
1.81
KB
-rwxr-xr-x
2022-05-16 17:46
cpfetch
1.23
KB
-rwxr-xr-x
2022-05-16 17:47
cphulkdblacklist
433
B
-rwxr-xr-x
2022-05-16 17:46
cphulkdwhitelist
1.3
KB
-rwxr-xr-x
2022-05-16 17:46
cpservice
2.87
KB
-rwxr-xr-x
2022-05-16 17:46
cpuser_port_authority
19.29
KB
-rwxr-xr-x
2022-05-16 17:46
cpuser_service_manager
10.85
KB
-rwxr-xr-x
2022-09-24 10:10
create_default_featurelist
11.62
KB
-rwx------
2026-02-16 22:13
createacct
26.95
MB
-rwx------
2025-10-17 11:30
custom_backup_destination.pl.sample
5.06
KB
-rwxr-xr-x
2022-09-24 10:10
custom_backup_destination.pl.skeleton
2.84
KB
-rwxr-xr-x
2022-05-16 17:46
dcpumon-wrapper
850
B
-rwxr-xr-x
2022-05-16 17:46
delpop
6.2
KB
-rwxr-xr-x
2022-05-16 17:46
detect_env_capabilities
508
B
-rwxr-xr-x
2022-05-16 17:46
disable_prelink
2.77
KB
-rwxr-xr-x
2022-05-16 17:47
disable_sqloptimizer
1.49
KB
-rwxr-xr-x
2022-05-16 17:46
disablefileprotect
2.19
KB
-rwxr-xr-x
2025-04-01 22:56
distro_changed_hook
1.16
KB
-rwxr-xr-x
2022-05-16 17:46
dnscluster
4.44
KB
-rwxr-xr-x
2022-05-16 17:47
dnsqueuecron
1.29
KB
-rwxr-xr-x
2022-05-16 17:46
dnssec-cluster-keys
3.75
KB
-rwxr-xr-x
2022-05-16 17:46
dovecot_maintenance
7.93
KB
-rwxr-xr-x
2022-05-16 17:46
dovecot_set_defaults.pl
984
B
-rwxr-xr-x
2022-05-16 17:46
dumpcdb
866
B
-rwxr-xr-x
2022-05-16 17:46
dumpinodes
687
B
-rwxr-xr-x
2022-05-16 17:46
dumpquotas
616
B
-rwxr-xr-x
2022-05-16 17:46
dumpstor
913
B
-rwxr-xr-x
2022-05-16 17:47
ea4_fresh_install
2.64
KB
-rwxr-xr-x
2022-05-16 17:46
edit_cpanelsync_exclude_list
2.58
KB
-rwxr-xr-x
2022-05-16 17:46
editquota
3.43
KB
-rwxr-xr-x
2025-04-01 22:56
elevate-cpanel
187.75
KB
-rwx------
2024-02-12 23:25
email_archive_maintenance
6.15
KB
-rwxr-xr-x
2022-05-16 17:46
email_hold_maintenance
1.46
KB
-rwxr-xr-x
2022-05-16 17:47
enable_spf_dkim_globally
8.83
KB
-rwxr-xr-x
2022-05-16 17:46
enable_sqloptimizer
1.57
KB
-rwxr-xr-x
2022-05-16 17:46
enablefileprotect
2.1
KB
-rwxr-xr-x
2022-05-16 17:46
ensure_autoenabled_features
2.93
MB
-rwx------
2025-10-17 11:30
ensure_conf_dir_crt_key
4.82
KB
-rwxr-xr-x
2022-05-16 17:46
ensure_cpuser_file_ip
2.55
KB
-rwxr-xr-x
2022-05-16 17:46
ensure_crontab_permissions
1.08
KB
-rwxr-xr-x
2022-05-16 17:46
ensure_dovecot_memory_limits_meet_minimum
3.13
KB
-rwxr-xr-x
2022-05-16 17:46
ensure_hostname_resolves
2.51
KB
-rwxr-xr-x
2025-04-01 22:56
ensure_includes
601
B
-rwxr-xr-x
2022-05-16 17:46
ensure_vhost_includes
13.53
KB
-rwxr-xr-x
2022-05-16 17:46
exim_tidydb
2.96
KB
-rwxr-xr-x
2022-05-16 17:46
eximconfgen
1.32
KB
-rwxr-xr-x
2022-05-16 17:46
eximstats_spam_check
867
B
-rwxr-xr-x
2022-05-16 17:46
export_horde_calendars_to_ics
15.07
KB
-rwxr-xr-x
2023-08-01 11:30
export_horde_contacts_to_vcf
13.94
KB
-rwxr-xr-x
2023-05-06 10:14
expunge_expired_certificates_from_sslstorage
3.56
KB
-rwxr-xr-x
2022-05-16 17:46
expunge_expired_pkgacct_sessions
852
B
-rwxr-xr-x
2022-05-16 17:46
expunge_expired_transfer_sessions
1.06
KB
-rwxr-xr-x
2022-05-16 17:46
fastmail
5.16
KB
-rwxr-xr-x
2022-05-16 17:46
featuremod
1.92
KB
-rwxr-xr-x
2022-05-16 17:46
fetchfile
422
B
-rwxr-xr-x
2022-05-16 17:46
find_and_fix_rpm_issues
6.99
KB
-rwxr-xr-x
2022-05-16 17:46
find_outdated_services
6.06
KB
-rwxr-xr-x
2025-04-01 22:56
find_pids_with_inotify_watch_on_path
3.66
KB
-rwxr-xr-x
2022-05-16 17:46
fix-cpanel-perl
28.94
KB
-rwxr-xr-x
2025-10-17 11:30
fix-listen-on-localhost
3.52
KB
-rwxr-xr-x
2022-05-16 17:46
fix-web-vhost-configuration
6.15
KB
-rwxr-xr-x
2022-05-16 17:46
fix_addon_permissions
7.68
KB
-rwxr-xr-x
2022-05-16 17:46
fix_dns_zone_ttls
1.34
KB
-rwxr-xr-x
2022-05-16 17:46
fix_innodb_tables
4.05
KB
-rwxr-xr-x
2022-05-16 17:46
fix_reseller_acls
10.88
KB
-rwxr-xr-x
2022-05-16 17:47
fixetchosts
4.32
KB
-rwxr-xr-x
2022-05-16 17:47
fixheaders
572
B
-rwxr-xr-x
2022-05-16 17:46
fixmailinglistperms
1008
B
-rwxr-xr-x
2022-05-16 17:46
fixmailman
2.09
KB
-rwxr-xr-x
2022-05-16 17:46
fixnamedviews
1.22
KB
-rwxr-xr-x
2022-05-16 17:46
fixndc
413
B
-rwxr-xr-x
2022-05-16 17:47
fixquotas
18.47
KB
-rwxr-xr-x
2025-04-01 22:56
fixrelayd
1.74
KB
-rwxr-xr-x
2022-05-16 17:46
fixrndc
16.39
KB
-rwxr-xr-x
2025-04-01 22:56
fixtar
503
B
-rwxr-xr-x
2022-05-16 17:46
fixtlsversions
4.7
KB
-rwxr-xr-x
2022-05-16 17:46
fixvaliases
2
KB
-rwxr-xr-x
2022-05-16 17:46
fixwebalizer
966
B
-rwxr-xr-x
2022-05-16 17:47
forcelocaldomain
895
B
-rwxr-xr-x
2022-05-16 17:46
ftpfetch
2.2
KB
-rwxr-xr-x
2020-12-20 04:47
ftpquotacheck
8.31
KB
-rwxr-xr-x
2022-05-16 17:47
ftpsfetch
2.36
KB
-rwxr-xr-x
2020-12-20 04:47
ftpupdate
261
B
-rwxr-xr-x
2020-12-20 04:54
gather_update_log_stats
4.25
KB
-rwx------
2026-02-16 21:57
gather_update_logs_setupcrontab
5.45
KB
-rwx------
2026-02-16 21:57
gemwrapper
1.74
KB
-rwxr-xr-x
2022-05-16 17:46
gencrt
6.26
KB
-rwxr-xr-x
2022-05-16 17:46
generate_account_suspension_include
5.7
KB
-rwxr-xr-x
2022-05-16 17:47
generate_google_drive_credentials
1.11
KB
-rwxr-xr-x
2022-05-16 17:47
generate_google_drive_oauth_uri
984
B
-rwxr-xr-x
2022-05-16 17:46
generate_maildirsize
13.94
KB
-rwxr-xr-x
2023-03-11 10:28
gensysinfo
1.16
KB
-rwxr-xr-x
2022-05-16 17:46
get_locale_from_legacy_name_info
1.99
KB
-rwxr-xr-x
2022-05-16 17:46
getremotecpmove
12.67
KB
-rwxr-xr-x
2022-09-24 10:10
grpck
1.19
KB
-rwxr-xr-x
2022-05-16 17:46
hackcheck
3.02
KB
-rwxr-xr-x
2022-05-16 17:46
hook
1.45
KB
-rwxr-xr-x
2022-05-16 17:46
httpspamdetect
2.66
KB
-rwxr-xr-x
2022-05-16 17:46
hulk-unban-ip
3.96
MB
-rwx------
2025-10-17 11:30
import_exim_data
8.39
KB
-rwxr-xr-x
2022-09-24 10:10
increase_filesystem_limits
891
B
-rwxr-xr-x
2022-05-16 17:46
initacls
4.99
KB
-rwxr-xr-x
2022-05-16 17:46
initfpsuexec
444
B
-rwxr-xr-x
2022-05-16 17:47
initialize_360monitoring
2.76
KB
-rwx------
2025-11-13 13:58
initquotas
19.47
KB
-rwxr-xr-x
2022-05-16 17:46
initsuexec
4.03
KB
-rwxr-xr-x
2022-05-16 17:46
install_cpanel_analytics
1.93
KB
-rwxr-xr-x
2023-05-06 10:14
install_dovecot_fts
1.57
KB
-rwxr-xr-x
2022-05-16 17:46
install_plugin
2.8
KB
-rwxr-xr-x
2022-09-24 10:10
installpkg
575
B
-rwxr-xr-x
2022-05-16 17:46
installpostgres
6.56
KB
-rwxr-xr-x
2022-05-16 17:46
installsqlite3
1.82
KB
-rwxr-xr-x
2022-05-16 17:46
ipcheck
3.93
KB
-rwxr-xr-x
2022-05-16 17:46
ipusage
7.45
KB
-rwxr-xr-x
2022-05-16 17:47
isdedicatedip
602
B
-rwxr-xr-x
2022-05-16 17:46
jetbackup-check
3.69
KB
-rwxr-xr-x
2022-05-16 17:47
killdns
422
B
-rwxr-xr-x
2022-05-16 17:46
killdns-dnsadmin
1.15
KB
-rwxr-xr-x
2022-05-16 17:47
killmysqluserprivs
433
B
-rwxr-xr-x
2022-05-16 17:46
killmysqlwildcard
1.15
KB
-rwxr-xr-x
2022-05-16 17:46
killpvhost
853
B
-rwxr-xr-x
2022-05-16 17:46
killspamkeys
937
B
-rwxr-xr-x
2022-05-16 17:46
link_3rdparty_binaries
1.24
KB
-rwxr-xr-x
2022-07-19 11:30
linksubemailtomainacct
3.17
KB
-rwxr-xr-x
2022-05-16 17:46
listcheck
538
B
-rwxr-xr-x
2022-05-16 17:46
listsubdomains
1.05
KB
-rwxr-xr-x
2022-05-16 17:47
litespeed-check
3.86
KB
-rwxr-xr-x
2022-05-16 17:46
locale_export
4.82
KB
-rwxr-xr-x
2022-05-16 17:46
locale_import
4.35
KB
-rwxr-xr-x
2022-05-16 17:46
locale_info
3.99
KB
-rwxr-xr-x
2022-05-16 17:46
logo.dat
205
B
-rw-r--r--
2017-06-12 18:25
magicloader
1.94
KB
-rwxr-xr-x
2022-05-16 17:46
maildir_converter
6.08
KB
-rwxr-xr-x
2022-05-16 17:47
mailperm
16.53
KB
-rwxr-xr-x
2025-04-01 22:56
mailscannerupdate
2.42
KB
-rwxr-xr-x
2022-05-16 17:46
mainipcheck
10
KB
-rwxr-xr-x
2022-05-16 17:46
maintenance
46.87
KB
-rwxr-xr-x
2025-04-01 22:56
make_config
407
B
-rw-r--r--
2017-06-12 18:25
make_hostname_unowned
1.16
KB
-rwxr-xr-x
2022-05-16 17:46
manage_extra_marketing
12.76
KB
-rwx------
2026-02-16 22:13
manage_greylisting
16.19
KB
-rwxr-xr-x
2022-09-24 10:10
manage_mysql_profiles
16.33
KB
-rwxr-xr-x
2025-04-01 22:56
migrate-pdns-conf
9.83
KB
-rwxr-xr-x
2024-09-19 11:30
migrate_legacy_wordpress_to_modern_wordpress
12.99
KB
-rwx------
2025-05-19 04:08
migrate_local_ini_to_php_ini
7.41
KB
-rwxr-xr-x
2022-05-16 17:46
migrate_whmtheme_file_to_userdata
2.95
KB
-rwxr-xr-x
2022-05-16 17:46
mkwwwacctconf
2.33
KB
-rwxr-xr-x
2023-03-11 10:28
modify_accounts
4.09
KB
-rwxr-xr-x
2022-09-24 10:10
modify_featurelist
10.31
KB
-rwx------
2026-02-16 22:13
modify_packages
3.65
KB
-rwxr-xr-x
2022-09-24 10:10
modsec_vendor
15.63
KB
-rwxr-xr-x
2022-05-16 17:46
mysqlconnectioncheck
6.55
KB
-rwxr-xr-x
2022-05-16 17:46
mysqlpasswd
4.09
KB
-rwxr-xr-x
2022-05-16 17:46
named.ca
1.57
KB
-rw-r--r--
2017-06-12 18:25
named.rfc1912.zones
774
B
-rw-r--r--
2020-12-20 04:08
notify_expiring_certificates
9.37
KB
-rwxr-xr-x
2022-07-19 11:30
notify_expiring_certificates_on_linked_nodes
1.33
KB
-rwxr-xr-x
2022-09-24 10:10
oopscheck
1.12
KB
-rwxr-xr-x
2022-05-16 17:46
optimize_eximstats
3.88
KB
-rwxr-xr-x
2022-05-16 17:46
patch_mail_spamassassin_compiledregexps_body_0
2.39
KB
-rwxr-xr-x
2022-05-16 17:46
patchfdsetsize
2.72
KB
-rwxr-xr-x
2022-05-16 17:46
pedquota
2.26
KB
-rwxr-xr-x
2022-05-16 17:47
perform_sqlite_auto_rebuild_db_maintenance
2.2
KB
-rwxr-xr-x
2022-05-16 17:46
perlinstaller
528
B
-rwxr-xr-x
2022-05-16 17:46
perlmods
1.18
KB
-rwxr-xr-x
2022-05-16 17:46
php_fpm_config
9.73
KB
-rwxr-xr-x
2022-05-16 17:46
phpini_tidy
687
B
-rwxr-xr-x
2022-05-16 17:46
pkgacct
87.82
KB
-rwxr-xr-x
2023-05-06 10:14
post_snapshot
3.16
KB
-rwxr-xr-x
2023-03-11 10:28
post_sync_cleanup
6.09
KB
-rwxr-xr-x
2022-05-16 17:46
posteasyapache
123
B
-rwxr-xr-x
2026-01-26 14:49
postkillacct
85
B
-rwxr-xr-x
2026-01-30 12:30
postmodifyacct
12
B
-rwxr-xr-x
2026-01-30 12:30
postrestoreacct
12
B
-rwxr-xr-x
2026-01-26 14:49
postupcp
373
B
-rwxr-xr-x
2026-02-17 12:31
postupcp.cloudlinux-linksafe.bak
52
B
-rwxr-xr-x
2017-07-10 20:09
postwwwacct
148
B
-rwxr-xr-x
2026-01-30 12:30
prekillacct
12
B
-rwxr-xr-x
2026-01-30 12:30
preupcp
12
B
-rwxr-xr-x
2026-01-30 12:30
primary_virtual_host_migration
2.44
KB
-rwxr-xr-x
2022-05-16 17:46
process_pending_cpanel_php_pear_registration
2.72
KB
-rwxr-xr-x
2025-04-01 22:56
process_site_templates
7.27
KB
-rwxr-xr-x
2022-05-16 17:46
proxydomains
9.34
KB
-rwxr-xr-x
2022-05-16 17:46
ptycheck
724
B
-rwxr-xr-x
2022-05-16 17:46
purge_modsec_log
1.53
KB
-rwxr-xr-x
2022-05-16 17:46
purge_old_config_caches
2.08
KB
-rwxr-xr-x
2022-05-16 17:46
pwck
708
B
-rwxr-xr-x
2022-05-16 17:46
quickdnslookup
1.13
KB
-rwxr-xr-x
2022-05-16 17:46
quickwhoisips
2.29
KB
-rwxr-xr-x
2022-09-24 10:10
quota_auto_fix
1.41
KB
-rwxr-xr-x
2022-05-16 17:46
quotacheck
22.36
KB
-rwxr-xr-x
2022-09-24 10:10
rawchpass
460
B
-rwxr-xr-x
2022-05-16 17:46
rdate
4.8
KB
-rwxr-xr-x
2022-09-24 10:10
realadduser
5.61
KB
-rwxr-xr-x
2022-05-16 17:47
realchpass
3.26
KB
-rwxr-xr-x
2022-05-16 17:46
realperlinstaller
5.67
KB
-rwxr-xr-x
2022-05-16 17:46
realrawchpass
425
B
-rwxr-xr-x
2022-05-16 17:46
rebuild_available_addons_packages_cache
1.27
KB
-rwxr-xr-x
2022-05-16 17:46
rebuild_available_rpm_addons_cache
1.27
KB
-rwxr-xr-x
2022-05-16 17:46
rebuild_bandwidthdb_root_cache
1.45
KB
-rwxr-xr-x
2022-05-16 17:46
rebuild_dbmap
5.8
KB
-rwxr-xr-x
2022-05-16 17:46
rebuild_provider_openid_connect_links_db
1.01
KB
-rwxr-xr-x
2022-05-16 17:47
rebuild_whm_chrome
2.22
KB
-rwxr-xr-x
2022-05-16 17:46
rebuilddnsconfig
26.42
KB
-rwxr-xr-x
2025-04-01 22:56
rebuildhttpdconf
2.6
KB
-rwxr-xr-x
2022-05-16 17:46
rebuildinstalledssldb
2.85
KB
-rwxr-xr-x
2022-05-16 17:47
rebuildippool
509
B
-rwxr-xr-x
2022-05-16 17:46
rebuilduserssldb
948
B
-rwxr-xr-x
2022-05-16 17:47
refresh-dkim-validity-cache
5.97
KB
-rwxr-xr-x
2022-05-16 17:46
regenerate_tokens
2.18
KB
-rwxr-xr-x
2022-09-24 10:10
remote_log_transfer
11.6
KB
-rwxr-xr-x
2023-03-11 10:28
remove_dovecot_index_files
5.89
KB
-rwxr-xr-x
2022-05-16 17:46
removeacct
23.11
MB
-rwx------
2025-10-17 11:30
rescan_user_dovecot_fts
2.98
KB
-rwxr-xr-x
2022-05-16 17:46
reset_mail_quotas_to_sane_values
6.82
KB
-rwxr-xr-x
2022-05-16 17:46
resetmailmanurls
2.03
KB
-rwxr-xr-x
2022-05-16 17:46
resetquotas
4.61
KB
-rwxr-xr-x
2025-04-01 22:56
restartsrv
3.19
KB
-rwxr-xr-x
2025-04-01 22:56
restartsrv_apache
422
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_apache_php_fpm
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_base
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_bind
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_chkservd
427
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_clamd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cpanel_dovecot_solr
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cpanel_php_fpm
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cpanellogd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cpdavd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cpgreylistd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cphulkd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cpipv6
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_cpsrvd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_crond
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_dnsadmin
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_dovecot
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_exim
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_eximstats
504
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_ftpd
426
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_ftpserver
911
B
-rwxr-xr-x
2022-05-16 17:47
restartsrv_httpd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_imap
437
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_inetd
2.47
KB
-rwxr-xr-x
2022-09-24 10:10
restartsrv_ipaliases
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_lmtp
437
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_mailman
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_mysql
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_named
579
B
-rwxr-xr-x
2025-04-01 22:56
restartsrv_nscd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_p0f
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_pdns
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_pop3
437
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_postgres
427
B
-rwxr-xr-x
2022-05-16 17:47
restartsrv_postgresql
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_powerdns
442
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_proftpd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_pureftpd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_queueprocd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_rsyslog
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_rsyslogd
437
B
-rwxr-xr-x
2022-05-16 17:46
restartsrv_spamd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_sshd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_syslogd
2.4
KB
-rwxr-xr-x
2022-07-19 11:30
restartsrv_tailwatchd
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_unknown
10.15
MB
-rwxr-xr-x
2025-10-17 11:30
restartsrv_xinetd
422
B
-rwxr-xr-x
2022-05-16 17:46
restorecpuserfromcache
1.96
KB
-rwxr-xr-x
2022-05-16 17:46
restorepkg
37.58
MB
-rwx------
2025-11-06 12:30
rfc1912_zones.tar
10
KB
-rw-r--r--
2017-06-12 18:25
rpmup
5.07
KB
-rwxr-xr-x
2025-04-01 22:56
rsync-user-homedir.pl
5.76
KB
-rwxr-xr-x
2022-05-16 17:46
run_if_exists
512
B
-rwxr-xr-x
2022-05-16 17:46
run_plugin_lifecycle
3.72
KB
-rwx------
2026-02-16 22:13
runstatsonce
440
B
-rwxr-xr-x
2022-05-16 17:46
runweblogs
1.02
KB
-rwxr-xr-x
2022-05-16 17:47
sa-update_wrapper
3.34
KB
-rwxr-xr-x
2022-05-16 17:46
safetybits.pl
844
B
-rwxr-xr-x
2022-05-16 17:47
secureit
4.72
KB
-rwxr-xr-x
2022-05-16 17:46
securemysql
4.4
KB
-rwxr-xr-x
2025-04-01 22:56
securerailsapps
3.58
KB
-rwxr-xr-x
2022-05-16 17:46
securetmp
15.99
KB
-rwxr-xr-x
2023-08-01 11:30
selectorunparkhook.py
1.7
KB
-rwxr-xr-x
2026-01-30 12:30
sendicq
474
B
-rwxr-xr-x
2022-05-16 17:47
servicedomains
9.34
KB
-rwxr-xr-x
2022-05-16 17:46
set_mailman_archive_perms
1.75
KB
-rwxr-xr-x
2022-05-16 17:46
setpostgresconfig
6.04
KB
-rwxr-xr-x
2022-05-16 17:46
setup_greylist_db
16.19
KB
-rwxr-xr-x
2022-09-24 10:10
setup_modsec_db
1.3
KB
-rwxr-xr-x
2022-05-16 17:47
setup_systemd_timer_for_plugins
3.92
KB
-rwx------
2026-02-16 22:13
setupftpserver
10.47
KB
-rwxr-xr-x
2022-05-16 17:47
setupmailserver
9.55
KB
-rwxr-xr-x
2022-05-16 17:46
setupnameserver
12.49
KB
-rwxr-xr-x
2025-04-01 22:56
shrink_modsec_ip_database
12.97
KB
-rwxr-xr-x
2022-05-16 17:46
simpleps
3.05
KB
-rwxr-xr-x
2022-05-16 17:47
slurp_exim_mainlog
5.78
KB
-rwxr-xr-x
2022-05-16 17:47
smartcheck
15.13
KB
-rwxr-xr-x
2022-05-16 17:47
smtpmailgidonly
8.15
KB
-rwxr-xr-x
2023-03-11 10:28
snapshot_prep
5.88
KB
-rwxr-xr-x
2023-03-11 10:28
spamassassin_dbm_cleaner
5.85
KB
-rwxr-xr-x
2022-09-24 10:10
spamassassindisable
3.74
KB
-rwxr-xr-x
2022-09-24 10:10
spamboxdisable
2.27
KB
-rwxr-xr-x
2022-09-24 10:10
sshcontrol
14.38
KB
-rwxr-xr-x
2022-05-16 17:47
ssl_crt_status
3.84
KB
-rwxr-xr-x
2022-05-16 17:47
suspendacct
18.01
KB
-rwxr-xr-x
2023-05-06 10:14
suspendmysqlusers
4.78
KB
-rwxr-xr-x
2025-04-01 22:56
swapip
3.82
KB
-rwxr-xr-x
2022-05-16 17:47
sync-mysql-users-from-grants
1.2
KB
-rwxr-xr-x
2022-05-16 17:46
sync_child_accounts
1.77
KB
-rwxr-xr-x
2022-05-16 17:47
sync_contact_emails_to_cpanel_users_files
1.14
KB
-rwxr-xr-x
2022-09-24 10:10
synccpaddonswithsqlhost
6.59
KB
-rwxr-xr-x
2022-05-16 17:47
synctransfers
1.92
KB
-rwxr-xr-x
2022-05-16 17:47
syslog_check
1.36
KB
-rwxr-xr-x
2022-05-16 17:46
sysup
645
B
-rwxr-xr-x
2022-05-16 17:46
test_sa_compiled
1.07
KB
-rwxr-xr-x
2022-05-16 17:47
transfer_account_as_user
2.34
KB
-rwxr-xr-x
2022-05-16 17:46
transfer_accounts_as_root
4.76
KB
-rwxr-xr-x
2022-05-16 17:46
transfer_in_progress
3.08
KB
-rwxr-xr-x
2022-05-16 17:46
transfer_in_progress.pod
312
B
-rw-r--r--
2017-06-12 18:25
transfermysqlusers
9.72
MB
-rwx------
2025-10-17 11:30
try-later
7.95
KB
-rwxr-xr-x
2022-05-16 17:46
unblockip
667
B
-rwxr-xr-x
2022-05-16 17:46
uninstall_cpanel_analytics
1.2
KB
-rwxr-xr-x
2022-05-16 17:46
uninstall_dovecot_fts
562
B
-rwxr-xr-x
2022-05-16 17:47
uninstall_plugin
2.84
KB
-rwxr-xr-x
2022-09-24 10:10
unlink_service_account
2.62
KB
-rwxr-xr-x
2022-05-16 17:46
unpkgacct
4.6
KB
-rwxr-xr-x
2022-05-16 17:46
unslavenamedconf
863
B
-rwxr-xr-x
2022-05-16 17:47
unsuspendacct
17.8
KB
-rwxr-xr-x
2025-04-01 22:56
unsuspendmysqlusers
7.1
KB
-rwxr-xr-x
2025-04-01 22:57
upcp
31.76
KB
-rwxr-xr-x
2025-04-01 22:56
upcp-running
2.7
KB
-rwxr-xr-x
2022-05-16 17:46
upcp.static
716.78
KB
-rwxr-xr-x
2025-11-06 12:30
update-packages
5.07
KB
-rwxr-xr-x
2025-04-01 22:56
update_apachectl
480
B
-rwxr-xr-x
2022-05-16 17:46
update_db_cache
430
B
-rwxr-xr-x
2022-05-16 17:47
update_dkim_keys
1.45
KB
-rwxr-xr-x
2022-05-16 17:46
update_exim_rejects
1.21
KB
-rwxr-xr-x
2022-05-16 17:46
update_existing_mail_quotas_for_account
4.78
KB
-rwxr-xr-x
2022-05-16 17:46
update_feature_flags
957
B
-rwxr-xr-x
2025-04-01 22:56
update_known_proxy_ips
1002
B
-rwxr-xr-x
2022-05-16 17:46
update_local_rpm_versions
4.56
KB
-rwxr-xr-x
2023-03-11 10:28
update_mailman_cache
8.34
KB
-rwxr-xr-x
2022-05-16 17:46
update_mysql_systemd_config
1.25
KB
-rwxr-xr-x
2022-05-16 17:47
update_neighbor_netblocks
487
B
-rwxr-xr-x
2022-05-16 17:46
update_sa_config
2.14
KB
-rwxr-xr-x
2022-05-16 17:46
update_spamassassin_config
10.73
KB
-rwxr-xr-x
2023-03-11 10:28
update_users_jail
691
B
-rwxr-xr-x
2022-05-16 17:46
update_users_vhosts
801
B
-rwxr-xr-x
2022-05-16 17:47
updatedomainips
605
B
-rwxr-xr-x
2022-05-16 17:46
updatenameserverips
1.66
KB
-rwxr-xr-x
2022-05-16 17:46
updatenow
5.18
KB
-rwxr-xr-x
2022-09-24 10:10
updatenow.static
1.97
MB
-rwxr-xr-x
2025-11-06 12:30
updatesigningkey
1.95
KB
-rwxr-xr-x
2022-05-16 17:47
updatessldomains
1.81
KB
-rwxr-xr-x
2022-05-16 17:46
updatesupportauthorizations
2.49
KB
-rwxr-xr-x
2022-05-16 17:46
updateuserdatacache
2.47
KB
-rwxr-xr-x
2022-05-16 17:46
updateuserdomains
774
B
-rwxr-xr-x
2022-05-16 17:47
upgrade_bandwidth_dbs
2.22
KB
-rwxr-xr-x
2022-05-16 17:47
upgrade_subaccount_databases
2.73
KB
-rwxr-xr-x
2022-05-16 17:46
userdata_wildcard_cleanup
5.74
KB
-rwxr-xr-x
2022-05-16 17:47
userdirctl
5.01
KB
-rwxr-xr-x
2022-05-16 17:46
validate_sshkey_passphrase
1.21
KB
-rwxr-xr-x
2022-05-16 17:46
verify_api_spec_files
757
B
-rwxr-xr-x
2022-05-16 17:47
verify_pidfile
1.96
KB
-rwxr-xr-x
2022-05-16 17:46
verify_vhost_includes
7.34
KB
-rwxr-xr-x
2022-09-24 10:10
vps_optimizer
7.82
KB
-rwxr-xr-x
2022-05-16 17:46
vzzo-fixer
725
B
-rwxr-xr-x
2022-05-16 17:46
whmlogin
2.33
KB
-rwxr-xr-x
2022-05-16 17:46
whoowns
1.13
KB
-rwxr-xr-x
2017-06-12 18:25
wwwacct
26.95
MB
-rwx------
2025-10-17 11:30
wwwacct2
88
B
-rwxr-xr-x
2017-06-12 18:25
xfer_rcube_schema_migrate.pl
2.4
KB
-rwxr-xr-x
2022-05-16 17:47
xfer_rcube_uid_resolver.pl
1.8
KB
-rwxr-xr-x
2022-05-16 17:46
xferpoint
3.13
KB
-rwxr-xr-x
2022-05-16 17:46
xfertool
16.23
KB
-rwxr-xr-x
2025-04-01 22:56
zoneexists
800
B
-rwxr-xr-x
2022-05-16 17:46
Save
Rename
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/upcp 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::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 $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 ) { 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, ], ); return ($exit_code); } # 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 { 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; } #---------------------------------------------------------------------- # 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;