Linux server1.hosting4iran.com 4.18.0-553.89.1.el8_10.x86_64 #1 SMP Mon Dec 8 03:53:08 EST 2025 x86_64
LiteSpeed
Server IP : 185.208.174.156 & Your IP : 216.73.216.218
Domains : 282 Domain
User : satitravel
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
2023-12-15 23:52
php_sandbox
[ DIR ]
drwxr-xr-x
2023-12-15 23:52
MirrorSearch_pingtest
2.38
KB
-rwxr-xr-x
2023-12-15 23:52
activesync-invite-reply
1.69
KB
-rwxr-xr-x
2023-12-15 23:52
add_dns
2.36
KB
-rwxr-xr-x
2023-12-15 23:52
adddns
2.36
KB
-rwxr-xr-x
2023-12-15 23:52
addpop
6.08
KB
-rwxr-xr-x
2023-12-15 23:52
addsystemuser
3.27
KB
-rwxr-xr-x
2023-12-15 23:52
adduser
92
B
-rwxr-xr-x
2023-12-15 23:52
agent360.sh
16.03
KB
-rwx------
2025-09-17 21:17
apachelimits
4.31
KB
-rwxr-xr-x
2023-12-15 23:52
archive_sync_zones
3.05
KB
-rwxr-xr-x
2023-12-15 23:52
auto-adjust-mysql-limits
1.81
KB
-rwxr-xr-x
2023-12-15 23:52
autorepair
1.24
KB
-rwxr-xr-x
2023-12-15 23:52
backup_jobs_helper
8.03
KB
-rwxr-xr-x
2026-02-17 18:26
backups_clean_metadata_for_missing_backups
1.57
KB
-rwxr-xr-x
2023-12-15 23:52
backups_create_metadata
15.75
KB
-rwxr-xr-x
2023-12-15 23:52
backups_list_user_files
4.56
KB
-rwxr-xr-x
2023-12-15 23:52
balance_linked_node_quotas
2.58
KB
-rwxr-xr-x
2023-12-15 23:52
biglogcheck
1.69
KB
-rwxr-xr-x
2023-12-15 23:52
build_bandwidthdb_root_cache_in_background
1.52
KB
-rwxr-xr-x
2023-12-15 23:52
build_cpnat
3.41
KB
-rwxr-xr-x
2023-12-15 23:52
build_mail_sni
3.87
KB
-rwxr-xr-x
2023-12-15 23:52
build_maxemails_config
1.14
KB
-rwxr-xr-x
2023-12-15 23:52
builddovecotconf
9.64
KB
-rwxr-xr-x
2026-01-25 03:23
buildeximconf
7
KB
-rwxr-xr-x
2023-12-15 23:52
buildhttpdconf
2.6
KB
-rwxr-xr-x
2023-12-15 23:52
buildpureftproot
539
B
-rwxr-xr-x
2023-12-15 23:52
call_pkgacct
2.17
KB
-rwxr-xr-x
2026-02-17 18:26
ccs-check
4.91
KB
-rwxr-xr-x
2023-12-15 23:52
check_cpanel_pkgs
10.75
KB
-rwxr-xr-x
2023-12-15 23:52
check_domain_tls_service_domains.pl
6.68
KB
-rwxr-xr-x
2023-12-15 23:52
check_immutable_files
5.49
KB
-rwxr-xr-x
2023-12-15 23:52
check_mail_spamassassin_compiledregexps_body_0
187
B
-rwxr-xr-x
2023-12-15 23:52
check_maxmem_against_domains_count
3.57
KB
-rwxr-xr-x
2023-12-15 23:52
check_mount_procfs
2.02
KB
-rwxr-xr-x
2023-12-15 23:52
check_mysql
5.56
KB
-rwxr-xr-x
2025-12-22 01:06
check_plugin_pkgs
2.45
KB
-rwxr-xr-x
2023-12-15 23:52
check_security_advice_changes
8.28
KB
-rwxr-xr-x
2023-12-15 23:52
check_unmonitored_enabled_services
4.56
KB
-rwxr-xr-x
2023-12-15 23:52
check_unreliable_resolvers
3.59
KB
-rwxr-xr-x
2023-12-15 23:52
check_users_my_cnf
6.05
KB
-rwxr-xr-x
2023-12-15 23:52
check_valid_server_hostname
7.66
KB
-rwxr-xr-x
2023-12-15 23:52
checkalldomainsmxs
2.4
KB
-rwxr-xr-x
2023-12-15 23:52
checkbashshell
1.18
KB
-rwxr-xr-x
2023-12-15 23:52
checkccompiler
1.22
KB
-rwxr-xr-x
2023-12-15 23:52
checkexim.pl
3.1
KB
-rwxr-xr-x
2023-12-15 23:52
checklink
1.29
KB
-rwxr-xr-x
2023-12-15 23:52
checkusers
856
B
-rwxr-xr-x
2023-12-15 23:52
chkpaths
141
B
-rwxr-xr-x
2023-12-15 23:52
chpass
416
B
-rwxr-xr-x
2023-12-15 23:52
ckillall
1.11
KB
-rwxr-xr-x
2023-12-15 23:52
clean_dead_mailman_locks
2.09
KB
-rwxr-xr-x
2023-12-15 23:52
clean_up_temp_wheel_users
2.44
KB
-rwxr-xr-x
2023-12-15 23:52
clean_user_php_sessions
4.76
KB
-rwxr-xr-x
2023-12-15 23:52
cleandns
13.11
KB
-rwxr-xr-x
2025-12-22 01:01
cleandns8
417
B
-rwxr-xr-x
2023-12-15 23:52
cleanmsglog
735
B
-rwxr-xr-x
2023-12-15 23:52
cleanphpsessions
932
B
-rwxr-xr-x
2023-12-15 23:52
cleanphpsessions.php
658
B
-rw-r--r--
2023-12-15 23:52
cleanquotas
1.61
KB
-rwxr-xr-x
2023-12-15 23:52
cleansessions
5.89
KB
-rwxr-xr-x
2023-12-15 23:52
cleanupinterchange
2.64
KB
-rwxr-xr-x
2023-12-15 23:52
cleanupmysqlprivs
773
B
-rwxr-xr-x
2025-12-22 01:06
clear_cpaddon_ui_caches
1.27
KB
-rwxr-xr-x
2023-12-15 23:52
clear_orphaned_virtfs_mounts
3.56
KB
-rwxr-xr-x
2023-12-15 23:52
comet_license_registration_sync
1.75
KB
-rwxr-xr-x
2026-02-17 18:26
comet_protected_item_maintenance
20.7
KB
-rwxr-xr-x
2026-02-17 18:26
comparecdb
1.52
KB
-rwxr-xr-x
2023-12-15 23:52
compilers
2.86
KB
-rwxr-xr-x
2023-12-15 23:52
compilerscheck
999
B
-rwxr-xr-x
2023-12-15 23:52
configure_firewall_for_cpanel
520
B
-rwxr-xr-x
2023-12-15 23:52
configure_rh_firewall_for_cpanel
520
B
-rwxr-xr-x
2023-12-15 23:52
configure_rh_ipv6_firewall_for_cpanel
520
B
-rwxr-xr-x
2023-12-15 23:52
convert2dovecot
682
B
-rwxr-xr-x
2023-12-15 23:52
convert_accesshash_to_token
4.07
KB
-rwxr-xr-x
2023-12-15 23:52
convert_and_migrate_from_legacy_backup
1.97
KB
-rwxr-xr-x
2023-12-15 23:52
convert_maildir_to_mdbox
1.66
KB
-rwxr-xr-x
2023-12-15 23:52
convert_mdbox_to_maildir
1.66
KB
-rwxr-xr-x
2023-12-15 23:52
convert_roundcube_mysql2sqlite
26.12
KB
-rwxr-xr-x
2025-12-22 01:07
convert_to_dovecot_delivery
4.33
KB
-rwxr-xr-x
2023-12-15 23:52
convert_whmxfer_to_sqlite
1.46
KB
-rwxr-xr-x
2023-12-15 23:52
copy_user_mail_as_root
1.25
KB
-rwxr-xr-x
2023-12-15 23:52
copy_user_mail_as_user
1.34
KB
-rwxr-xr-x
2023-12-15 23:52
cpaddonsup
3.25
KB
-rwxr-xr-x
2023-12-15 23:52
cpan_config
2.8
KB
-rwxr-xr-x
2023-12-15 23:52
cpanel_initial_install
68.11
KB
-rwxr-xr-x
2026-02-24 01:01
cpanelsync
28.31
KB
-rwxr-xr-x
2023-12-15 23:52
cpanelsync_postprocessor
1.62
KB
-rwxr-xr-x
2023-12-15 23:52
cpanpingtest
965
B
-rwxr-xr-x
2023-12-15 23:52
cpbackup
44.79
KB
-rwxr-xr-x
2023-12-15 23:52
cpbackup_transport_file
5.65
KB
-rwxr-xr-x
2023-12-15 23:52
cpdig
2.09
KB
-rwxr-xr-x
2025-12-22 01:07
cpfetch
1.23
KB
-rwxr-xr-x
2023-12-15 23:52
cphulkdblacklist
433
B
-rwxr-xr-x
2023-12-15 23:52
cphulkdwhitelist
1.3
KB
-rwxr-xr-x
2023-12-15 23:52
cpservice
2.87
KB
-rwxr-xr-x
2023-12-15 23:52
cpuser_port_authority
19.29
KB
-rwxr-xr-x
2023-12-15 23:52
cpuser_service_manager
10.85
KB
-rwxr-xr-x
2023-12-15 23:52
create_default_featurelist
11.62
KB
-rwx------
2026-02-16 22:13
createacct
30.21
MB
-rwx------
2026-02-24 01:01
custom_backup_destination.pl.sample
5.06
KB
-rwxr-xr-x
2023-12-15 23:52
custom_backup_destination.pl.skeleton
2.84
KB
-rwxr-xr-x
2023-12-15 23:52
dcpumon-wrapper
850
B
-rwxr-xr-x
2023-12-15 23:52
delpop
6.2
KB
-rwxr-xr-x
2023-12-15 23:52
detect_env_capabilities
508
B
-rwxr-xr-x
2023-12-15 23:52
disable_prelink
2.77
KB
-rwxr-xr-x
2023-12-15 23:52
disable_sqloptimizer
1.49
KB
-rwxr-xr-x
2023-12-15 23:52
disablefileprotect
2.19
KB
-rwxr-xr-x
2023-12-15 23:52
distro_changed_hook
1.16
KB
-rwxr-xr-x
2023-12-15 23:52
dnscluster
4.44
KB
-rwxr-xr-x
2023-12-15 23:52
dnsqueuecron
1.29
KB
-rwxr-xr-x
2023-12-15 23:52
dnssec-cluster-keys
3.75
KB
-rwxr-xr-x
2023-12-15 23:52
dovecot_maintenance
7.66
KB
-rwxr-xr-x
2025-12-22 01:06
dovecot_set_defaults.pl
984
B
-rwxr-xr-x
2023-12-15 23:52
dumpcdb
866
B
-rwxr-xr-x
2023-12-15 23:52
dumpinodes
687
B
-rwxr-xr-x
2023-12-15 23:52
dumpquotas
616
B
-rwxr-xr-x
2023-12-15 23:52
dumpstor
913
B
-rwxr-xr-x
2023-12-15 23:52
ea4_fresh_install
2.64
KB
-rwxr-xr-x
2023-12-15 23:52
edit_cpanelsync_exclude_list
2.58
KB
-rwxr-xr-x
2023-12-15 23:52
editquota
3.43
KB
-rwxr-xr-x
2023-12-15 23:52
elevate-cpanel
407.81
KB
-rwx------
2026-02-25 01:03
email_archive_maintenance
6.15
KB
-rwxr-xr-x
2023-12-15 23:52
email_hold_maintenance
1.46
KB
-rwxr-xr-x
2023-12-15 23:52
enable_spf_dkim_globally
8.83
KB
-rwxr-xr-x
2023-12-15 23:52
enable_sqloptimizer
1.57
KB
-rwxr-xr-x
2023-12-15 23:52
enablefileprotect
2.1
KB
-rwxr-xr-x
2023-12-15 23:52
ensure_autoenabled_features
3.17
MB
-rwx------
2026-02-24 01:01
ensure_conf_dir_crt_key
4.82
KB
-rwxr-xr-x
2023-12-15 23:52
ensure_cpuser_file_ip
2.55
KB
-rwxr-xr-x
2023-12-15 23:52
ensure_crontab_permissions
1.08
KB
-rwxr-xr-x
2023-12-15 23:52
ensure_dovecot_memory_limits_meet_minimum
3.13
KB
-rwxr-xr-x
2023-12-15 23:52
ensure_hostname_resolves
2.51
KB
-rwxr-xr-x
2025-12-22 01:01
ensure_includes
601
B
-rwxr-xr-x
2023-12-15 23:52
ensure_vhost_includes
13.53
KB
-rwxr-xr-x
2023-12-15 23:52
exim_tidydb
2.96
KB
-rwxr-xr-x
2023-12-15 23:52
eximconfgen
1.32
KB
-rwxr-xr-x
2023-12-15 23:52
eximstats_spam_check
867
B
-rwxr-xr-x
2023-12-15 23:52
expunge_expired_certificates_from_sslstorage
3.56
KB
-rwxr-xr-x
2023-12-15 23:52
expunge_expired_pkgacct_sessions
852
B
-rwxr-xr-x
2023-12-15 23:52
expunge_expired_transfer_sessions
1.06
KB
-rwxr-xr-x
2023-12-15 23:52
fastmail
5.16
KB
-rwxr-xr-x
2023-12-15 23:52
featuremod
1.92
KB
-rwxr-xr-x
2023-12-15 23:52
fetchfile
422
B
-rwxr-xr-x
2023-12-15 23:52
find_and_fix_rpm_issues
6.99
KB
-rwxr-xr-x
2025-12-22 01:07
find_outdated_services
6.06
KB
-rwxr-xr-x
2025-12-22 01:01
find_pids_with_inotify_watch_on_path
3.66
KB
-rwxr-xr-x
2023-12-15 23:52
fix-cpanel-perl
28.43
KB
-rwxr-xr-x
2026-02-24 01:01
fix-listen-on-localhost
3.52
KB
-rwxr-xr-x
2023-12-15 23:52
fix-web-vhost-configuration
6.15
KB
-rwxr-xr-x
2023-12-15 23:52
fix_addon_permissions
7.69
KB
-rwxr-xr-x
2025-12-25 01:01
fix_dns_zone_ttls
1.34
KB
-rwxr-xr-x
2023-12-15 23:52
fix_innodb_tables
4.05
KB
-rwxr-xr-x
2023-12-15 23:52
fix_reseller_acls
10.7
KB
-rwxr-xr-x
2025-12-25 01:01
fixetchosts
4.32
KB
-rwxr-xr-x
2023-12-15 23:52
fixheaders
572
B
-rwxr-xr-x
2023-12-15 23:52
fixmailinglistperms
1008
B
-rwxr-xr-x
2023-12-15 23:52
fixmailman
2.09
KB
-rwxr-xr-x
2023-12-15 23:52
fixnamedviews
1.22
KB
-rwxr-xr-x
2023-12-15 23:52
fixndc
413
B
-rwxr-xr-x
2023-12-15 23:52
fixquotas
18.39
KB
-rwxr-xr-x
2025-12-22 01:06
fixrelayd
1.74
KB
-rwxr-xr-x
2023-12-15 23:52
fixrndc
16.39
KB
-rwxr-xr-x
2023-12-15 23:52
fixtar
503
B
-rwxr-xr-x
2023-12-15 23:52
fixtlsversions
4.7
KB
-rwxr-xr-x
2023-12-15 23:52
fixvaliases
2
KB
-rwxr-xr-x
2023-12-15 23:52
fixwebalizer
966
B
-rwxr-xr-x
2023-12-15 23:52
forcelocaldomain
895
B
-rwxr-xr-x
2023-12-15 23:52
ftpfetch
2.2
KB
-rwxr-xr-x
2023-12-15 23:52
ftpquotacheck
8.31
KB
-rwxr-xr-x
2023-12-15 23:52
ftpsfetch
2.36
KB
-rwxr-xr-x
2023-12-15 23:52
ftpupdate
261
B
-rwxr-xr-x
2023-12-15 23:52
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
2023-12-15 23:52
gencrt
6.26
KB
-rwxr-xr-x
2023-12-15 23:52
generate_account_suspension_include
5.7
KB
-rwxr-xr-x
2023-12-15 23:52
generate_google_drive_credentials
1.11
KB
-rwxr-xr-x
2023-12-15 23:52
generate_google_drive_oauth_uri
984
B
-rwxr-xr-x
2023-12-15 23:52
generate_maildirsize
13.94
KB
-rwxr-xr-x
2023-12-15 23:52
gensysinfo
1.16
KB
-rwxr-xr-x
2023-12-15 23:52
get_locale_from_legacy_name_info
1.99
KB
-rwxr-xr-x
2023-12-15 23:52
getremotecpmove
12.67
KB
-rwxr-xr-x
2023-12-15 23:52
grpck
1.19
KB
-rwxr-xr-x
2023-12-15 23:52
hackcheck
3.02
KB
-rwxr-xr-x
2023-12-15 23:52
hook
1.45
KB
-rwxr-xr-x
2023-12-15 23:52
httpspamdetect
2.66
KB
-rwxr-xr-x
2023-12-15 23:52
hulk-unban-ip
4.09
MB
-rwx------
2026-02-24 01:01
import_exim_data
8.39
KB
-rwxr-xr-x
2023-12-15 23:52
increase_filesystem_limits
891
B
-rwxr-xr-x
2023-12-15 23:52
initacls
4.99
KB
-rwxr-xr-x
2023-12-15 23:52
initfpsuexec
444
B
-rwxr-xr-x
2023-12-15 23:52
initialize_360monitoring
2.76
KB
-rwx------
2025-11-13 13:58
initquotas
19.35
KB
-rwxr-xr-x
2026-02-24 01:01
initsuexec
4.03
KB
-rwxr-xr-x
2023-12-15 23:52
install_cpanel_analytics
1.93
KB
-rwxr-xr-x
2023-12-15 23:52
install_dovecot_fts
1.57
KB
-rwxr-xr-x
2023-12-15 23:52
install_plugin
2.8
KB
-rwxr-xr-x
2023-12-15 23:52
install_tuxcare_els_php
1.84
KB
-rwxr-xr-x
2025-12-25 01:01
installpkg
575
B
-rwxr-xr-x
2023-12-15 23:52
installpostgres
6.56
KB
-rwxr-xr-x
2025-12-25 01:01
installsqlite3
1.82
KB
-rwxr-xr-x
2023-12-15 23:52
ipcheck
3.93
KB
-rwxr-xr-x
2023-12-15 23:52
ipusage
7.45
KB
-rwxr-xr-x
2023-12-15 23:52
isdedicatedip
602
B
-rwxr-xr-x
2023-12-15 23:52
jetbackup-check
3.69
KB
-rwxr-xr-x
2023-12-15 23:52
killdns
422
B
-rwxr-xr-x
2023-12-15 23:52
killdns-dnsadmin
1.15
KB
-rwxr-xr-x
2023-12-15 23:52
killmysqluserprivs
433
B
-rwxr-xr-x
2023-12-15 23:52
killmysqlwildcard
1.15
KB
-rwxr-xr-x
2023-12-15 23:52
killpvhost
853
B
-rwxr-xr-x
2023-12-15 23:52
killspamkeys
937
B
-rwxr-xr-x
2023-12-15 23:52
link_3rdparty_binaries
1.24
KB
-rwxr-xr-x
2023-12-15 23:52
linksubemailtomainacct
3.17
KB
-rwxr-xr-x
2023-12-15 23:52
listcheck
538
B
-rwxr-xr-x
2023-12-15 23:52
listsubdomains
1.05
KB
-rwxr-xr-x
2023-12-15 23:52
litespeed-check
3.86
KB
-rwxr-xr-x
2023-12-15 23:52
locale_export
5.21
KB
-rwxr-xr-x
2025-12-22 01:06
locale_import
4.35
KB
-rwxr-xr-x
2023-12-15 23:52
locale_info
3.99
KB
-rwxr-xr-x
2023-12-15 23:52
log_retention
21.28
KB
-rwxr-xr-x
2026-02-24 01:01
logo.dat
205
B
-rw-r--r--
2023-12-15 23:52
magicloader
1.94
KB
-rwxr-xr-x
2023-12-15 23:52
maildir_converter
6.08
KB
-rwxr-xr-x
2023-12-15 23:52
mailperm
16.53
KB
-rwxr-xr-x
2023-12-15 23:52
mailscannerupdate
2.42
KB
-rwxr-xr-x
2023-12-15 23:52
mainipcheck
10
KB
-rwxr-xr-x
2023-12-15 23:52
maintenance
52.07
KB
-rwxr-xr-x
2026-02-24 01:01
make_config
407
B
-rw-r--r--
2023-12-15 23:52
make_hostname_unowned
1.16
KB
-rwxr-xr-x
2023-12-15 23:52
manage_extra_marketing
12.76
KB
-rwx------
2026-02-16 22:13
manage_greylisting
16.19
KB
-rwxr-xr-x
2023-12-15 23:52
manage_mysql_profiles
16.33
KB
-rwxr-xr-x
2023-12-15 23:52
migrate_ccs_to_cpdavd
47.06
KB
-rwxr-xr-x
2025-12-22 01:07
migrate_local_ini_to_php_ini
7.41
KB
-rwxr-xr-x
2023-12-15 23:52
migrate_whmtheme_file_to_userdata
2.95
KB
-rwxr-xr-x
2023-12-15 23:52
mkwwwacctconf
2.33
KB
-rwxr-xr-x
2023-12-15 23:52
modify_accounts
4.07
KB
-rwxr-xr-x
2025-12-22 01:06
modify_featurelist
10.31
KB
-rwx------
2026-02-16 22:13
modify_packages
3.64
KB
-rwxr-xr-x
2025-12-22 01:07
modsec_vendor
15.63
KB
-rwxr-xr-x
2023-12-15 23:52
mysqlconnectioncheck
6.72
KB
-rwxr-xr-x
2025-12-22 01:07
mysqlpasswd
4.14
KB
-rwxr-xr-x
2025-12-22 01:06
named.ca
1.57
KB
-rw-r--r--
2023-12-15 23:52
named.rfc1912.zones
774
B
-rw-r--r--
2023-12-15 23:52
notify_expiring_certificates
9.37
KB
-rwxr-xr-x
2023-12-15 23:52
notify_expiring_certificates_on_linked_nodes
1.33
KB
-rwxr-xr-x
2023-12-15 23:52
oopscheck
1.12
KB
-rwxr-xr-x
2023-12-15 23:52
optimize_eximstats
3.88
KB
-rwxr-xr-x
2023-12-15 23:52
patch_mail_spamassassin_compiledregexps_body_0
2.39
KB
-rwxr-xr-x
2023-12-15 23:52
patchfdsetsize
2.72
KB
-rwxr-xr-x
2023-12-15 23:52
pedquota
2.26
KB
-rwxr-xr-x
2023-12-15 23:52
perform_sqlite_auto_rebuild_db_maintenance
1.98
KB
-rwxr-xr-x
2025-12-22 01:07
perlinstaller
528
B
-rwxr-xr-x
2023-12-15 23:52
perlmods
1.18
KB
-rwxr-xr-x
2023-12-15 23:52
php_fpm_config
9.73
KB
-rwxr-xr-x
2023-12-15 23:52
phpini_tidy
687
B
-rwxr-xr-x
2023-12-15 23:52
pkgacct
88.77
KB
-rwxr-xr-x
2026-01-25 03:33
post_snapshot
2.09
KB
-rwxr-xr-x
2025-12-22 01:07
post_sync_cleanup
6.09
KB
-rwxr-xr-x
2023-12-15 23:52
primary_virtual_host_migration
2.44
KB
-rwxr-xr-x
2023-12-15 23:52
process_cpmove
4.23
KB
-rwxr-xr-x
2026-02-17 18:26
process_pending_cpanel_php_pear_registration
2.73
KB
-rwxr-xr-x
2025-12-25 01:01
proxydomains
9.59
KB
-rwxr-xr-x
2025-12-25 01:01
ptycheck
724
B
-rwxr-xr-x
2023-12-15 23:52
purge_modsec_log
1.53
KB
-rwxr-xr-x
2023-12-15 23:52
purge_old_config_caches
2.08
KB
-rwxr-xr-x
2023-12-15 23:52
pwck
708
B
-rwxr-xr-x
2023-12-15 23:52
quickdnslookup
1.13
KB
-rwxr-xr-x
2023-12-15 23:52
quickwhoisips
2.29
KB
-rwxr-xr-x
2023-12-15 23:52
quota_auto_fix
1.41
KB
-rwxr-xr-x
2023-12-15 23:52
quotacheck
22.36
KB
-rwxr-xr-x
2023-12-15 23:52
rawchpass
460
B
-rwxr-xr-x
2023-12-15 23:52
rdate
4.8
KB
-rwxr-xr-x
2023-12-15 23:52
realadduser
5.61
KB
-rwxr-xr-x
2023-12-15 23:52
realchpass
3.26
KB
-rwxr-xr-x
2023-12-15 23:52
realperlinstaller
5.67
KB
-rwxr-xr-x
2023-12-15 23:52
realrawchpass
425
B
-rwxr-xr-x
2023-12-15 23:52
rebuild_available_addons_packages_cache
1.27
KB
-rwxr-xr-x
2023-12-15 23:52
rebuild_available_rpm_addons_cache
1.27
KB
-rwxr-xr-x
2023-12-15 23:52
rebuild_bandwidthdb_root_cache
1.45
KB
-rwxr-xr-x
2023-12-15 23:52
rebuild_dbmap
5.8
KB
-rwxr-xr-x
2023-12-15 23:52
rebuild_provider_openid_connect_links_db
1.01
KB
-rwxr-xr-x
2023-12-15 23:52
rebuild_whm_chrome
2.22
KB
-rwxr-xr-x
2023-12-15 23:52
rebuilddnsconfig
25.5
KB
-rwxr-xr-x
2025-12-25 01:01
rebuildhttpdconf
2.6
KB
-rwxr-xr-x
2023-12-15 23:52
rebuildinstalledssldb
2.85
KB
-rwxr-xr-x
2023-12-15 23:52
rebuildippool
509
B
-rwxr-xr-x
2023-12-15 23:52
rebuilduserssldb
948
B
-rwxr-xr-x
2023-12-15 23:52
refresh-dkim-validity-cache
5.97
KB
-rwxr-xr-x
2023-12-15 23:52
regenerate_tokens
2.18
KB
-rwxr-xr-x
2023-12-15 23:52
remote_log_transfer
11.6
KB
-rwxr-xr-x
2023-12-15 23:52
remove_dovecot_index_files
5.89
KB
-rwxr-xr-x
2023-12-15 23:52
removeacct
27.44
MB
-rwx------
2026-02-24 01:01
rescan_user_dovecot_fts
2.98
KB
-rwxr-xr-x
2023-12-15 23:52
reset_mail_quotas_to_sane_values
6.82
KB
-rwxr-xr-x
2023-12-15 23:52
resetmailmanurls
2.03
KB
-rwxr-xr-x
2023-12-15 23:52
resetquotas
4.61
KB
-rwxr-xr-x
2023-12-15 23:52
restartsrv
3.19
KB
-rwxr-xr-x
2023-12-15 23:52
restartsrv_apache
422
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_apache_php_fpm
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_base
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_bind
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_chkservd
427
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_clamd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_cpanel_php_fpm
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_cpanellogd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_cpdavd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_cpgreylistd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_cphulkd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_cpipv6
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_cpsrvd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_crond
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_dnsadmin
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_dovecot
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_exim
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_eximstats
504
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_ftpd
426
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_ftpserver
911
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_httpd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_imap
437
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_inetd
2.47
KB
-rwxr-xr-x
2023-12-15 23:52
restartsrv_ipaliases
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_lmtp
437
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_mailman
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_mysql
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_named
579
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_nscd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_p0f
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_pdns
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_pop3
437
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_postgres
427
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_postgresql
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_powerdns
442
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_proftpd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_pureftpd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_queueprocd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_rsyslog
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_rsyslogd
437
B
-rwxr-xr-x
2023-12-15 23:52
restartsrv_spamd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_sshd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_syslogd
2.4
KB
-rwxr-xr-x
2023-12-15 23:52
restartsrv_tailwatchd
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_unknown
10.77
MB
-rwxr-xr-x
2026-02-24 01:01
restartsrv_xinetd
422
B
-rwxr-xr-x
2023-12-15 23:52
restorecpuserfromcache
1.96
KB
-rwxr-xr-x
2023-12-15 23:52
restorepkg
47.78
MB
-rwx------
2026-02-24 01:01
rfc1912_zones.tar
10
KB
-rw-r--r--
2023-12-15 23:52
rpmup
5.07
KB
-rwxr-xr-x
2025-12-22 01:01
rsync-user-homedir.pl
5.76
KB
-rwxr-xr-x
2023-12-15 23:52
run_if_exists
512
B
-rwxr-xr-x
2023-12-15 23:52
run_plugin_lifecycle
3.72
KB
-rwx------
2026-02-16 22:13
runstatsonce
440
B
-rwxr-xr-x
2023-12-15 23:52
runweblogs
1.02
KB
-rwxr-xr-x
2023-12-15 23:52
sa-update_wrapper
3.34
KB
-rwxr-xr-x
2023-12-15 23:52
safetybits.pl
844
B
-rwxr-xr-x
2023-12-15 23:52
secureit
4.72
KB
-rwxr-xr-x
2023-12-15 23:52
securemysql
4.4
KB
-rwxr-xr-x
2025-12-22 01:01
securerailsapps
3.58
KB
-rwxr-xr-x
2023-12-15 23:52
securetmp
16.76
KB
-rwxr-xr-x
2025-12-25 01:01
sendicq
474
B
-rwxr-xr-x
2023-12-15 23:52
servicedomains
9.59
KB
-rwxr-xr-x
2025-12-25 01:01
set_mailman_archive_perms
1.75
KB
-rwxr-xr-x
2023-12-15 23:52
setpostgresconfig
6.04
KB
-rwxr-xr-x
2023-12-15 23:52
setup_greylist_db
16.19
KB
-rwxr-xr-x
2023-12-15 23:52
setup_modsec_db
1.3
KB
-rwxr-xr-x
2023-12-15 23:52
setup_systemd_timer_for_plugins
3.92
KB
-rwx------
2026-02-16 22:13
setupftpserver
10.47
KB
-rwxr-xr-x
2023-12-15 23:52
setupmailserver
9.39
KB
-rwxr-xr-x
2025-12-25 01:01
setupnameserver
12.6
KB
-rwxr-xr-x
2025-12-25 01:01
shrink_modsec_ip_database
12.97
KB
-rwxr-xr-x
2023-12-15 23:52
simpleps
3.05
KB
-rwxr-xr-x
2023-12-15 23:52
slurp_exim_mainlog
5.78
KB
-rwxr-xr-x
2023-12-15 23:52
smartcheck
15.13
KB
-rwxr-xr-x
2025-12-25 01:01
smtpmailgidonly
8.15
KB
-rwxr-xr-x
2023-12-15 23:52
snapshot_prep
5.88
KB
-rwxr-xr-x
2025-12-22 01:07
spamassassin_dbm_cleaner
5.85
KB
-rwxr-xr-x
2023-12-15 23:52
spamassassindisable
3.74
KB
-rwxr-xr-x
2023-12-15 23:52
spamboxdisable
2.27
KB
-rwxr-xr-x
2023-12-15 23:52
sshcontrol
14.38
KB
-rwxr-xr-x
2023-12-15 23:52
ssl_crt_status
3.84
KB
-rwxr-xr-x
2023-12-15 23:52
suspendacct
18.08
KB
-rwxr-xr-x
2025-12-25 01:01
suspendmysqlusers
4.78
KB
-rwxr-xr-x
2023-12-15 23:52
swapip
3.82
KB
-rwxr-xr-x
2023-12-15 23:52
sync-mysql-users-from-grants
1.2
KB
-rwxr-xr-x
2023-12-15 23:52
sync_child_accounts
1.77
KB
-rwxr-xr-x
2023-12-15 23:52
sync_contact_emails_to_cpanel_users_files
1.14
KB
-rwxr-xr-x
2023-12-15 23:52
synccpaddonswithsqlhost
6.59
KB
-rwxr-xr-x
2023-12-15 23:52
synctransfers
1.92
KB
-rwxr-xr-x
2023-12-15 23:52
syslog_check
1.36
KB
-rwxr-xr-x
2023-12-15 23:52
sysup
645
B
-rwxr-xr-x
2023-12-15 23:52
test_sa_compiled
1.07
KB
-rwxr-xr-x
2023-12-15 23:52
transfer_account_as_user
2.34
KB
-rwxr-xr-x
2023-12-15 23:52
transfer_accounts_as_root
4.76
KB
-rwxr-xr-x
2023-12-15 23:52
transfer_in_progress
3.08
KB
-rwxr-xr-x
2023-12-15 23:52
transfer_in_progress.pod
312
B
-rw-r--r--
2023-12-15 23:52
transfermysqlusers
10.14
MB
-rwx------
2026-02-24 01:01
try-later
7.95
KB
-rwxr-xr-x
2023-12-15 23:52
unblockip
667
B
-rwxr-xr-x
2023-12-15 23:52
uninstall_cpanel_analytics
1.2
KB
-rwxr-xr-x
2023-12-15 23:52
uninstall_dovecot_fts
562
B
-rwxr-xr-x
2023-12-15 23:52
uninstall_plugin
2.84
KB
-rwxr-xr-x
2023-12-15 23:52
unlink_service_account
2.62
KB
-rwxr-xr-x
2023-12-15 23:52
unpkgacct
4.6
KB
-rwxr-xr-x
2023-12-15 23:52
unslavenamedconf
863
B
-rwxr-xr-x
2023-12-15 23:52
unsuspendacct
17.96
KB
-rwxr-xr-x
2025-12-25 01:01
unsuspendmysqlusers
7.1
KB
-rwxr-xr-x
2023-12-15 23:52
upcp
33.9
KB
-rwxr-xr-x
2026-02-24 01:01
upcp-running
2.7
KB
-rwxr-xr-x
2023-12-15 23:52
upcp.static
761
KB
-rwxr-xr-x
2026-02-24 01:01
update-packages
5.07
KB
-rwxr-xr-x
2025-12-22 01:01
update_apachectl
480
B
-rwxr-xr-x
2023-12-15 23:52
update_db_cache
430
B
-rwxr-xr-x
2023-12-15 23:52
update_dkim_keys
1.45
KB
-rwxr-xr-x
2023-12-15 23:52
update_exim_rejects
1.21
KB
-rwxr-xr-x
2023-12-15 23:52
update_existing_mail_quotas_for_account
4.78
KB
-rwxr-xr-x
2023-12-15 23:52
update_feature_flags
957
B
-rwxr-xr-x
2023-12-15 23:52
update_freebusy_data
5.25
KB
-rwxr-xr-x
2025-12-25 01:01
update_known_proxy_ips
1002
B
-rwxr-xr-x
2023-12-15 23:52
update_local_rpm_versions
4.56
KB
-rwxr-xr-x
2023-12-15 23:52
update_mailman_cache
8.34
KB
-rwxr-xr-x
2023-12-15 23:52
update_mysql_systemd_config
1.07
KB
-rwxr-xr-x
2025-12-25 01:01
update_neighbor_netblocks
487
B
-rwxr-xr-x
2023-12-15 23:52
update_sa_config
2.14
KB
-rwxr-xr-x
2023-12-15 23:52
update_spamassassin_config
10.73
KB
-rwxr-xr-x
2023-12-15 23:52
update_users_jail
691
B
-rwxr-xr-x
2023-12-15 23:52
update_users_vhosts
801
B
-rwxr-xr-x
2023-12-15 23:52
updatedomainips
605
B
-rwxr-xr-x
2023-12-15 23:52
updatenameserverips
1.66
KB
-rwxr-xr-x
2023-12-15 23:52
updatenow
5.18
KB
-rwxr-xr-x
2023-12-15 23:52
updatenow.static
2.02
MB
-rwxr-xr-x
2026-02-24 01:01
updatesigningkey
1.95
KB
-rwxr-xr-x
2023-12-15 23:52
updatessldomains
1.81
KB
-rwxr-xr-x
2023-12-15 23:52
updatesupportauthorizations
2.49
KB
-rwxr-xr-x
2023-12-15 23:52
updateuserdatacache
2.47
KB
-rwxr-xr-x
2023-12-15 23:52
updateuserdomains
774
B
-rwxr-xr-x
2023-12-15 23:52
upgrade_bandwidth_dbs
2.22
KB
-rwxr-xr-x
2023-12-15 23:52
upgrade_subaccount_databases
2.73
KB
-rwxr-xr-x
2023-12-15 23:52
userdata_wildcard_cleanup
5.74
KB
-rwxr-xr-x
2023-12-15 23:52
userdirctl
5.01
KB
-rwxr-xr-x
2023-12-15 23:52
validate_sshkey_passphrase
1.21
KB
-rwxr-xr-x
2023-12-15 23:52
verify_api_spec_files
757
B
-rwxr-xr-x
2023-12-15 23:52
verify_pidfile
1.96
KB
-rwxr-xr-x
2023-12-15 23:52
verify_vhost_includes
7.34
KB
-rwxr-xr-x
2023-12-15 23:52
vps_optimizer
7.82
KB
-rwxr-xr-x
2023-12-15 23:52
vzzo-fixer
725
B
-rwxr-xr-x
2023-12-15 23:52
whmlogin
2.33
KB
-rwxr-xr-x
2023-12-15 23:52
whoowns
1.13
KB
-rwxr-xr-x
2023-12-15 23:52
wwwacct
30.21
MB
-rwx------
2026-02-24 01:01
wwwacct2
88
B
-rwxr-xr-x
2023-12-15 23:52
xfer_rcube_schema_migrate.pl
2.4
KB
-rwxr-xr-x
2023-12-15 23:52
xfer_rcube_uid_resolver.pl
1.8
KB
-rwxr-xr-x
2023-12-15 23:52
xferpoint
3.13
KB
-rwxr-xr-x
2023-12-15 23:52
xfertool
16.23
KB
-rwxr-xr-x
2023-12-15 23:52
zoneexists
800
B
-rwxr-xr-x
2023-12-15 23:52
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;