/usr/local/cpanel/scripts
NameSizeModeActions
cpan_sandbox/-0755rm
php_sandbox/-0755rm
activesync-invite-reply17340755editdlrm
adddns24180755editdlrm
addpop62280755editdlrm
addsystemuser33450755editdlrm
adduser920755editdlrm
add_dns24180755editdlrm
agent360.sh164100700editdlrm
apachelimits44100755editdlrm
archive_sync_zones31220755editdlrm
auto-adjust-mysql-limits18540755editdlrm
autorepair12740755editdlrm
backups_clean_metadata_for_missing_backups16120755editdlrm
backups_create_metadata161260755editdlrm
backups_list_user_files46710755editdlrm
backup_jobs_helper111390755editdlrm
balance_linked_node_quotas26430755editdlrm
biglogcheck17290755editdlrm
builddovecotconf98690755editdlrm
buildeximconf71670755editdlrm
buildhttpdconf26640755editdlrm
buildpureftproot5390755editdlrm
build_bandwidthdb_root_cache_in_background15610755editdlrm
build_cpnat34940755editdlrm
build_mail_sni39660755editdlrm
build_maxemails_config11690755editdlrm
call_pkgacct23060755editdlrm
ccs-check50310755editdlrm
checkalldomainsmxs24620755editdlrm
checkbashshell12050755editdlrm
checkccompiler12530755editdlrm
checkexim.pl31720755editdlrm
checklink13230755editdlrm
checkusers8560755editdlrm
check_cpanel_pkgs108560755editdlrm
check_domain_tls_service_domains.pl68410755editdlrm
check_immutable_files56210755editdlrm
check_mail_spamassassin_compiledregexps_body_01870755editdlrm
check_maxmem_against_domains_count36520755editdlrm
check_mount_procfs20720755editdlrm
check_mysql56970755editdlrm
check_plugin_pkgs25120755editdlrm
check_security_advice_changes84770755editdlrm
check_unmonitored_enabled_services46660755editdlrm
check_unreliable_resolvers36720755editdlrm
check_users_my_cnf61910755editdlrm
check_valid_server_hostname78400755editdlrm
chkpaths1410755editdlrm
chpass4160755editdlrm
ckillall11390755editdlrm
cleandns134290755editdlrm
cleandns84170755editdlrm
cleanmsglog7350755editdlrm
cleanphpsessions9320755editdlrm
cleanphpsessions.php6580644editdlrm
cleanquotas16510755editdlrm
cleansessions60320755editdlrm
cleanupinterchange27060755editdlrm
cleanupmysqlprivs7730755editdlrm
clean_dead_mailman_locks21410755editdlrm
clean_up_temp_wheel_users24980755editdlrm
clean_user_php_sessions48750755editdlrm
clear_orphaned_virtfs_mounts36450755editdlrm
comet_license_registration_sync17110755editdlrm
comet_protected_item_maintenance212810755editdlrm
comparecdb15610755editdlrm
compilers29320755editdlrm
compilerscheck9990755editdlrm
configure_firewall_for_cpanel5200755editdlrm
configure_rh_firewall_for_cpanel5200755editdlrm
configure_rh_ipv6_firewall_for_cpanel5200755editdlrm
convert2dovecot6820755editdlrm
convert_accesshash_to_token41710755editdlrm
convert_and_migrate_from_legacy_backup20170755editdlrm
convert_maildir_to_mdbox17030755editdlrm
convert_mdbox_to_maildir16980755editdlrm
convert_roundcube_mysql2sqlite267480755editdlrm
convert_to_dovecot_delivery44380755editdlrm
convert_whmxfer_to_sqlite14990755editdlrm
copy_user_mail_as_root12810755editdlrm
copy_user_mail_as_user13750755editdlrm
cpanelsync289910755editdlrm
cpanelsync_postprocessor16570755editdlrm
cpanel_initial_install695830755editdlrm
cpanpingtest9650755editdlrm
cpan_config28700755editdlrm
cpbackup458610755editdlrm
cpbackup_transport_file57810755editdlrm
cpdig28820755editdlrm
cpfetch12580755editdlrm
cphulkdblacklist4330755editdlrm
cphulkdwhitelist13360755editdlrm
cpservice29340755editdlrm
cpuser_port_authority197550755editdlrm
cpuser_service_manager111130755editdlrm
createacct319047600700editdlrm
create_default_featurelist119030700editdlrm
custom_backup_destination.pl.sample51820755editdlrm
custom_backup_destination.pl.skeleton29060755editdlrm
dcpumon-wrapper8500755editdlrm
delpop63500755editdlrm
detect_env_capabilities5080755editdlrm
disablefileprotect22410755editdlrm
disable_prelink28410755editdlrm
distro_changed_hook11850755editdlrm
dnscluster45460755editdlrm
dnsqueuecron13160755editdlrm
dnssec-cluster-keys38400755editdlrm
dovecot_maintenance78420755editdlrm
dovecot_set_defaults.pl9840755editdlrm
dumpcdb8660755editdlrm
dumpinodes6870755editdlrm
dumpquotas6160755editdlrm
dumpstor9130755editdlrm
ea4_fresh_install26990755editdlrm
editquota35120755editdlrm
edit_cpanelsync_exclude_list26410755editdlrm
elevate-cpanel4245770700editdlrm
email_archive_maintenance63000755editdlrm
email_hold_maintenance14950755editdlrm
enablefileprotect21490755editdlrm
enable_spf_dkim_globally90390755editdlrm
ensure_autoenabled_features33226320700editdlrm
ensure_conf_dir_crt_key49400755editdlrm
ensure_cpuser_file_ip26100755editdlrm
ensure_crontab_permissions11010755editdlrm
ensure_dovecot_memory_limits_meet_minimum32080755editdlrm
ensure_hostname_resolves25720755editdlrm
ensure_includes6010755editdlrm
ensure_vhost_includes138510755editdlrm
eximconfgen13500755editdlrm
eximstats_spam_check8670755editdlrm
exim_tidydb30360755editdlrm
expunge_expired_certificates_from_sslstorage36480755editdlrm
expunge_expired_pkgacct_sessions8520755editdlrm
expunge_expired_transfer_sessions10890755editdlrm
fastmail52810755editdlrm
featuremod19700755editdlrm
fetchfile4220755editdlrm
find_and_fix_rpm_issues71570755editdlrm
find_outdated_services66250755editdlrm
find_pids_with_inotify_watch_on_path37450755editdlrm
fix-cpanel-perl291120755editdlrm
fix-listen-on-localhost40360755editdlrm
fix-web-vhost-configuration62960755editdlrm
fixetchosts44240755editdlrm
fixheaders5720755editdlrm
fixmailinglistperms10080755editdlrm
fixmailman21440755editdlrm
fixnamedviews12470755editdlrm
fixndc4130755editdlrm
fixquotas188340755editdlrm
fixrelayd17840755editdlrm
fixrndc167800755editdlrm
fixtar5030755editdlrm
fixtlsversions48160755editdlrm
fixvaliases20470755editdlrm
fixwebalizer9660755editdlrm
fix_dns_zone_ttls13690755editdlrm
fix_innodb_tables41490755editdlrm
fix_reseller_acls109580755editdlrm
forcelocaldomain8950755editdlrm
ftpfetch22510755editdlrm
ftpquotacheck85110755editdlrm
ftpsfetch24160755editdlrm
ftpupdate2610755editdlrm
gather_update_logs_setupcrontab55820700editdlrm
gather_update_log_stats43540700editdlrm
gemwrapper17830755editdlrm
gencrt64100755editdlrm
generate_account_suspension_include58400755editdlrm
generate_google_drive_credentials11350755editdlrm
generate_google_drive_oauth_uri9840755editdlrm
generate_maildirsize149080755editdlrm
gensysinfo11850755editdlrm
getremotecpmove230840755editdlrm
get_locale_from_legacy_name_info20410755editdlrm
grpck12180755editdlrm
hackcheck30920755editdlrm
hook14870755editdlrm
httpspamdetect28910755editdlrm
hulk-unban-ip43014560700editdlrm
import_exim_data85930755editdlrm
increase_filesystem_limits8910755editdlrm
initacls51070755editdlrm
initfpsuexec4440755editdlrm
initialize_360monitoring28240700editdlrm
initquotas198110755editdlrm
initsuexec41230755editdlrm
installpkg5750755editdlrm
installpostgres67150755editdlrm
installsqlite318660755editdlrm
install_cpanel_analytics19730755editdlrm
install_dovecot_fts16050755editdlrm
install_plugin28690755editdlrm
install_tuxcare_els_php18890755editdlrm
ipcheck40200755editdlrm
ipusage76240755editdlrm
isdedicatedip6020755editdlrm
is_update_available33430755editdlrm
jetbackup-check37760755editdlrm
killdns4220755editdlrm
killdns-dnsadmin11800755editdlrm
killmysqluserprivs4330755editdlrm
killmysqlwildcard11800755editdlrm
killpvhost8530755editdlrm
killspamkeys9370755editdlrm
linksubemailtomainacct32480755editdlrm
link_3rdparty_binaries12710755editdlrm
listcheck5380755editdlrm
listsubdomains10740755editdlrm
litespeed-check39520755editdlrm
locale_export53310755editdlrm
locale_import48030755editdlrm
locale_info40860755editdlrm
logo.dat2050644editdlrm
log_retention217930755editdlrm
magicloader19850755editdlrm
maildir_converter62220755editdlrm
mailperm169230755editdlrm
mailscannerupdate24780755editdlrm
mainipcheck102360755editdlrm
maintenance534450755editdlrm
make_config4070644editdlrm
make_hostname_unowned11890755editdlrm
manage_extra_marketing130680700editdlrm
manage_greylisting167190755editdlrm
manage_mysql_profiles167270755editdlrm
mass_change_php_setting109040755editdlrm
migrate_ccs_to_cpdavd481860755editdlrm
migrate_local_ini_to_php_ini75870755editdlrm
migrate_whmtheme_file_to_userdata30250755editdlrm
MirrorSearch_pingtest24370755editdlrm
mkwwwacctconf23850755editdlrm
modify_accounts41690755editdlrm
modify_featurelist115970700editdlrm
modify_packages37260755editdlrm
modsec_vendor160080755editdlrm
mysqlconnectioncheck68770755editdlrm
mysqlpasswd42350755editdlrm
named.ca16030644editdlrm
named.rfc1912.zones7740644editdlrm
notify_expiring_certificates95920755editdlrm
notify_expiring_certificates_on_linked_nodes13610755editdlrm
oopscheck11420755editdlrm
optimize_eximstats39750755editdlrm
panel_ini42100755editdlrm
patchfdsetsize27840755editdlrm
patch_mail_spamassassin_compiledregexps_body_024520755editdlrm
pedquota23100755editdlrm
perform_sqlite_auto_rebuild_db_maintenance20310755editdlrm
perlinstaller5280755editdlrm
perlmods12040755editdlrm
phpini_tidy6870755editdlrm
php_fpm_config99680755editdlrm
pkgacct920650755editdlrm
post_snapshot21440755editdlrm
post_sync_cleanup59730755editdlrm
primary_virtual_host_migration25020755editdlrm
process_cpmove44190755editdlrm
process_pending_cpanel_php_pear_registration27930755editdlrm
proxydomains98220755editdlrm
ptycheck7240755editdlrm
purge_modsec_log15630755editdlrm
purge_old_config_caches21250755editdlrm
pwck7080755editdlrm
quickdnslookup11590755editdlrm
quickwhoisips23480755editdlrm
quotacheck229000755editdlrm
quota_auto_fix14400755editdlrm
rawchpass4600755editdlrm
rdate49130755editdlrm
realadduser57430755editdlrm
realchpass33360755editdlrm
realperlinstaller58050755editdlrm
realrawchpass4250755editdlrm
rebuilddnsconfig261100755editdlrm
rebuildhttpdconf26640755editdlrm
rebuildinstalledssldb29170755editdlrm
rebuildippool5090755editdlrm
rebuilduserssldb9480755editdlrm
rebuild_bandwidthdb_root_cache14870755editdlrm
rebuild_dbmap59370755editdlrm
rebuild_provider_openid_connect_links_db10390755editdlrm
rebuild_whm_chrome22770755editdlrm
refresh-dkim-validity-cache61100755editdlrm
regenerate_tokens22280755editdlrm
remote_log_transfer118750755editdlrm
removeacct296544000700editdlrm
remove_dovecot_index_files60280755editdlrm
rescan_user_dovecot_fts30480755editdlrm
resetmailmanurls20770755editdlrm
resetquotas47230755editdlrm
reset_mail_quotas_to_sane_values69820755editdlrm
restartsrv32660755editdlrm
restartsrv_apache4220755editdlrm
restartsrv_apache_php_fpm113689600755editdlrm
restartsrv_base113689600755editdlrm
restartsrv_bind113689600755editdlrm
restartsrv_chkservd4270755editdlrm
restartsrv_clamd113689600755editdlrm
restartsrv_cpanellogd113689600755editdlrm
restartsrv_cpanel_php_fpm113689600755editdlrm
restartsrv_cpdavd113689600755editdlrm
restartsrv_cpgreylistd113689600755editdlrm
restartsrv_cphulkd113689600755editdlrm
restartsrv_cpipv6113689600755editdlrm
restartsrv_cpsrvd113689600755editdlrm
restartsrv_crond113689600755editdlrm
restartsrv_dnsadmin113689600755editdlrm
restartsrv_dovecot113689600755editdlrm
restartsrv_exim113689600755editdlrm
restartsrv_eximstats5040755editdlrm
restartsrv_ftpd4260755editdlrm
restartsrv_ftpserver9110755editdlrm
restartsrv_httpd113689600755editdlrm
restartsrv_imap4370755editdlrm
restartsrv_inetd25250755editdlrm
restartsrv_ipaliases113689600755editdlrm
restartsrv_lmtp4370755editdlrm
restartsrv_mailman113689600755editdlrm
restartsrv_mysql113689600755editdlrm
restartsrv_named5790755editdlrm
restartsrv_nscd113689600755editdlrm
restartsrv_p0f113689600755editdlrm
restartsrv_pdns113689600755editdlrm
restartsrv_pop34370755editdlrm
restartsrv_postgres4270755editdlrm
restartsrv_postgresql113689600755editdlrm
restartsrv_powerdns4420755editdlrm
restartsrv_proftpd113689600755editdlrm
restartsrv_pureftpd113689600755editdlrm
restartsrv_queueprocd113689600755editdlrm
restartsrv_rsyslog113689600755editdlrm
restartsrv_rsyslogd4370755editdlrm
restartsrv_spamd113689600755editdlrm
restartsrv_sshd113689600755editdlrm
restartsrv_syslogd24580755editdlrm
restartsrv_tailwatchd113689600755editdlrm
restartsrv_unknown113689600755editdlrm
restartsrv_xinetd4220755editdlrm
restorecpuserfromcache20080755editdlrm
restorepkg511943600700editdlrm
rfc1912_zones.tar102400644editdlrm
rpmup51910755editdlrm
rsync-user-homedir.pl59030755editdlrm
runstatsonce4400755editdlrm
runweblogs10450755editdlrm
run_if_exists5120755editdlrm
run_plugin_lifecycle40600700editdlrm
sa-update_wrapper34180755editdlrm
safetybits.pl8440755editdlrm
secureit48340755editdlrm
securemysql45010755editdlrm
securerailsapps36610755editdlrm
securetmp171620755editdlrm
sendicq4740755editdlrm
servicedomains98220755editdlrm
setpostgresconfig61810755editdlrm
setupftpserver107260755editdlrm
setupmailserver96180755editdlrm
setupnameserver128980755editdlrm
setup_greylist_db167190755editdlrm
setup_modsec_db13350755editdlrm
setup_systemd_timer_for_plugins40150700editdlrm
set_mailman_archive_perms17960755editdlrm
show_php_settings37620755editdlrm
shrink_modsec_ip_database132850755editdlrm
simpleps31240755editdlrm
slurp_exim_mainlog59140755editdlrm
smartcheck154910755editdlrm
smtpmailgidonly83430755editdlrm
snapshot_prep60170755editdlrm
spamassassindisable38300755editdlrm
spamassassin_dbm_cleaner59930755editdlrm
spamboxdisable23240755editdlrm
sshcontrol147220755editdlrm
ssl_crt_status39280755editdlrm
suspendacct185160755editdlrm
suspendmysqlusers48900755editdlrm
swapip39140755editdlrm
sync-mysql-users-from-grants12250755editdlrm
synctransfers19710755editdlrm
sync_child_accounts18130755editdlrm
sync_contact_emails_to_cpanel_users_files11630755editdlrm
syslog_check13910755editdlrm
sysup6450755editdlrm
test_sa_compiled10930755editdlrm
transfermysqlusers106272960700editdlrm
transfer_accounts_as_root48700755editdlrm
transfer_account_as_user23980755editdlrm
transfer_in_progress31560755editdlrm
transfer_in_progress.pod3120644editdlrm
try-later81400755editdlrm
unblockip6670755editdlrm
uninstall_cpanel_analytics12300755editdlrm
uninstall_dovecot_fts5620755editdlrm
uninstall_plugin29070755editdlrm
unlink_service_account26820755editdlrm
unpkgacct47130755editdlrm
unslavenamedconf8630755editdlrm
unsuspendacct183870755editdlrm
unsuspendmysqlusers72660755editdlrm
upcp440380755editdlrm
upcp-running27680755editdlrm
upcp.static9772510755editdlrm
update-packages51910755editdlrm
updatedomainips6050755editdlrm
updatenameserverips16960755editdlrm
updatenow53020755editdlrm
updatenow.static21167080755editdlrm
updatesigningkey19960755editdlrm
updatessldomains18560755editdlrm
updatesupportauthorizations25520755editdlrm
updateuserdatacache25290755editdlrm
updateuserdomains7740755editdlrm
update_apachectl4800755editdlrm
update_db_cache4300755editdlrm
update_dkim_keys14850755editdlrm
update_exim_rejects12420755editdlrm
update_existing_mail_quotas_for_account48910755editdlrm
update_feature_flags9570755editdlrm
update_freebusy_data53760755editdlrm
update_known_proxy_ips10020755editdlrm
update_local_rpm_versions46690755editdlrm
update_mailman_cache85450755editdlrm
update_mysql_systemd_config10940755editdlrm
update_neighbor_netblocks4870755editdlrm
update_sa_config21960755editdlrm
update_spamassassin_config109880755editdlrm
update_users_jail6910755editdlrm
update_users_vhosts8010755editdlrm
upgrade_bandwidth_dbs22720755editdlrm
upgrade_subaccount_databases27970755editdlrm
userdata_wildcard_cleanup58770755editdlrm
userdirctl51340755editdlrm
validate_sshkey_passphrase12440755editdlrm
verify_api_spec_files7570755editdlrm
verify_pidfile20080755editdlrm
verify_vhost_includes75170755editdlrm
vps_optimizer80070755editdlrm
vzzo-fixer7250755editdlrm
whmlogin23900755editdlrm
whoowns11550755editdlrm
wwwacct319047600700editdlrm
wwwacct2880755editdlrm
xferpoint32010755editdlrm
xfertool166240755editdlrm
xfer_rcube_schema_migrate.pl24600755editdlrm
xfer_rcube_uid_resolver.pl18460755editdlrm
zoneexists8000755editdlrm
Edit: /usr/local/cpanel/scripts/unsuspendacct (18387B)
#!/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::unsuspendacct; use strict; use warnings; use Try::Tiny; use Cpanel::Passwd::Shell (); use Cpanel::Auth::Shadow (); use Cpanel::SafeFile (); use AcctLock (); use Cpanel::PwCache (); use Cpanel::ConfigFiles (); use Cpanel::Validate::Domain::Tiny (); use Cpanel::Exception (); use Cpanel::Dovecot::Action (); use Cpanel::FileUtils::Match (); use Cpanel::Hooks (); use Cpanel::Hostname (); use Cpanel::OS (); use Cpanel::PwCache::Clear (); use Cpanel::AccessIds::ReducedPrivileges (); use Cpanel::AcctUtils::AccountingLog (); use Cpanel::AcctUtils::Domain (); use Cpanel::AcctUtils::Owner (); use Cpanel::AcctUtils::DomainOwner::Tiny (); use Cpanel::SafetyBits (); use Cpanel::Config::LoadCpConf (); use Cpanel::Config::LoadCpUserFile (); use Cpanel::Config::LoadWwwAcctConf (); use Cpanel::Config::CpUserGuard (); use Cpanel::ConfigFiles (); use Cpanel::IP::Remote (); use Cpanel::Quota::Temp (); use Cpanel::ServerTasks (); use Cpanel::Services::Enabled (); use Cpanel::Logger (); use Cpanel::Auth::Digest::DB::Manage (); use Cpanel::Mailman::ListManager (); use Cpanel::MysqlUtils::Suspension (); use Whostmgr::Accounts::SuspensionData::Writer (); use Whostmgr::Accounts::Email (); use Whostmgr::Accounts::Unsuspend (); use Whostmgr::Accounts::Unsuspend::Htaccess (); use Cpanel::Validate::Domain::Normalize (); use Cpanel::Notify (); use Cpanel::Sys::Setsid::Fast (); use Getopt::Long (); use Cpanel::Team::Constants (); use Cpanel::Team::Config (); use Cpanel::Locale 'lh'; exit( run(@ARGV) ) unless caller; my $logger; sub run { ## no critic qw(Subroutines::ProhibitExcessComplexity) my @argv = @_; my $retain_service_proxies = 0; my $usage = 0; my $child_ok = 0; Getopt::Long::GetOptionsFromArray( \@argv, 'retain-service-proxies' => \$retain_service_proxies, 'help|usage' => \$usage, 'child-ok' => \$child_ok, ); my $user = $argv[0]; $logger = Cpanel::Logger->new(); local $ENV{'REMOTE_USER'} = $ENV{'REMOTE_USER'}; local $ENV{'USER'} = $ENV{'USER'}; if ( ( !$ENV{'USER'} || !$ENV{'REMOTE_USER'} ) && $> == 0 ) { $ENV{'REMOTE_USER'} = 'root'; ## no critic qw(Variables::RequireLocalizedPunctuationVars) - local above $ENV{'USER'} = 'root'; ## no critic qw(Variables::RequireLocalizedPunctuationVars) - local above } if ($user) { $user =~ s/\///g; } return usage(0) if $usage; return usage(1) if ( !$user || $user eq 'root' ); my $pass = ( Cpanel::PwCache::getpwnam($user) )[1]; if ( !$pass ) { _print("“$user” is not a user on this system. Maybe it’s a domain?\n"); my $old_user = $user; $user = Cpanel::AcctUtils::DomainOwner::Tiny::getdomainowner( $user, { default => undef } ); if ($user) { _print("“$user” is the user who owns that domain. Verifying user …\n"); $pass = ( Cpanel::PwCache::getpwnam($user) )[1] or do { die "Invalid user ($user)\n"; }; } else { die "“$old_user” isn’t a domain, either. Exiting …\n"; } if ( $old_user ne $user ) { _print("Domain lookup of domain '$old_user' yielded user '$user'\n"); } } unless ( $pass =~ m/^\!/ || $pass =~ m/^\*/ ) { _print( lh->maketext( 'An error occurred while attempting to unsuspend “[_1]”. The user “[_1]” is not in a suspended state.', $user ) . "\n" ); if ( -e "/var/cpanel/bwlimited/$user" ) { _print("\nThe user is currently bandwidth limited. You may remove this limitation by increasing their bandwidth limit.\n"); } return 1; } if ( !$child_ok ) { my $cpuser_obj = Cpanel::Config::LoadCpUserFile::load_or_die($user); if ( $cpuser_obj->child_workloads() ) { _print("To unsuspend “$user”, do so on the account’s parent node.\n"); return 1; } } if ( !do_hook( $user, 'pre' ) ) { _print("Pre-unsuspend hook script returned failure.\n"); return 1; } system '/usr/local/cpanel/scripts/preunsuspendacct', @argv if -x '/usr/local/cpanel/scripts/preunsuspendacct'; # Load account creation defaults my $cref = Cpanel::Config::LoadWwwAcctConf::loadwwwacctconf(); # Determine default shell my $shell = $cref->{'DEFSHELL'}; if ( !$shell || !-e $shell ) { $shell = '/bin/bash'; } my $homedir = Cpanel::PwCache::gethomedir($user); my %CPCONF = Cpanel::Config::LoadCpConf::loadcpconf(); if ( exists $CPCONF{'acls'} && $CPCONF{'acls'} eq '1' ) { if ( my $pid = fork() ) { waitpid( $pid, 0 ); } else { Cpanel::Sys::Setsid::Fast::fast_setsid(); Cpanel::SafetyBits::setuids($user); system( 'setfacl', '-kb', '-m', 'group:nobody:x', '-m', 'group:mail:x', '-m', 'group:cpanel:x', '-m', 'group:mailnull:x', '-m', 'group:65535:x', '-m', 'group:ftp:x', '--', $homedir ); chmod 0750, $homedir; exit 0; } } else { chmod( 0711, $homedir ); # root owns parent } if ( -e '/var/cpanel/fileprotect' ) { my $httpgid = ( getgrnam('nobody') )[2]; my $useruid = ( getpwnam($user) )[2]; Cpanel::SafetyBits::safe_userchgid( $useruid, $httpgid, $homedir . '/public_html' ); Cpanel::SafetyBits::safe_chmod( 0750, $useruid, $homedir . '/public_html' ); Cpanel::SafetyBits::safe_userchgid( $useruid, $httpgid, $homedir . '/.htpasswds' ); Cpanel::SafetyBits::safe_chmod( 0750, $useruid, $homedir . '/.htpasswds' ); } else { Cpanel::SafetyBits::safe_chmod( 0755, $user, $homedir . '/public_html' ); Cpanel::SafetyBits::safe_chmod( 0755, $user, $homedir . '/.htpasswds' ); } # # Since scripts/suspendacct will chagne the permissions of this file to 0000, # it is necessary to perform the chmod() operation as root to actually be able # to restore the permissions. # if ( -e '/var/cpanel/noanonftp' ) { Cpanel::SafetyBits::safe_chmod( 0750, $user, $homedir . '/public_ftp' ); } else { Cpanel::SafetyBits::safe_chmod( 0755, $user, $homedir . '/public_ftp' ); } _print("Unsuspending outgoing email...."); Whostmgr::Accounts::Email::unsuspend_outgoing_email( 'user' => $user ); _print("Done\n"); my %SUINFO; if ( open my $suspended_info_fh, '<', '/var/cpanel/suspendinfo/' . $user ) { while ( readline $suspended_info_fh ) { chomp; my ( $name, $value ) = split( /=/, $_ ); next if ( !$name || !$value ); $SUINFO{$name} = $value; } close $suspended_info_fh; unlink '/var/cpanel/suspendinfo/' . $user; } my $cpuser_guard = Cpanel::Config::CpUserGuard->new($user); my $cpuser_data = $cpuser_guard->{'data'}; delete $cpuser_data->{'SUSPENDED'}; $cpuser_guard->save(); AcctLock::acctlock(); # Reset shell my $newshell; if ( !$SUINFO{'shell'} ) { $newshell = '/usr/local/cpanel/bin/noshell'; } elsif ( -x $SUINFO{'shell'} ) { $newshell = $SUINFO{'shell'} } else { $newshell = $shell; } try { Cpanel::Passwd::Shell::update_shell_without_acctlock( 'user' => $user, 'shell' => $newshell ); } catch { _print( Cpanel::Exception::get_string($_) . "\n" ); }; my $crypted_pass = ( Cpanel::PwCache::getpwnam($user) )[1]; $crypted_pass =~ s{^\!+}{}g; my ( $status, $statusmsg ) = Cpanel::Auth::Shadow::update_shadow_without_acctlock( $user, $crypted_pass ); _print( $statusmsg . "\n" ) if !$status; AcctLock::acctunlock(); Cpanel::Auth::Digest::DB::Manage::unlock($user) if Cpanel::Auth::Digest::DB::Manage::has_entry($user); my @DNS = ( $cpuser_data->{'DOMAIN'} ); if ( exists $cpuser_data->{'DOMAINS'} ) { push @DNS, @{ $cpuser_data->{'DOMAINS'} } } { my $tempquota = Cpanel::Quota::Temp->new( user => $user ); $tempquota->disable(); if ( -e "$homedir/etc/webdav/shadow" ) { _print("Unsuspending webdav users\n"); unsuspendshadowfile( $user, "$homedir/etc/webdav/shadow" ); } foreach my $dns (@DNS) { $dns = Cpanel::Validate::Domain::Normalize::normalize( $dns, 1 ); next if !Cpanel::Validate::Domain::Tiny::validdomainname($dns); if ( -f "${homedir}/etc/${dns}/shadow" && !-l "${homedir}/etc/${dns}/shadow" ) { _print("Unsuspending email account logins for $dns .... "); unsuspendshadowfile( $user, "${homedir}/etc/${dns}/shadow" ); _print("Done\n"); } } Cpanel::Dovecot::Action::flush_all_auth_caches_for_user($user); } my $dns_list = join( '|', map { quotemeta($_) } @DNS ); my $suspended_list_files = Cpanel::FileUtils::Match::get_matching_files( "$Cpanel::ConfigFiles::MAILMAN_ROOT/suspended.lists", "_(?:$dns_list)" . '$' ); foreach my $list ( @{$suspended_list_files} ) { my ($list_name) = $list =~ m{^.*/([^/]+)$}; $list_name =~ tr{_}{@}; _print("Unsuspending mailing list for $list_name\n"); my $unsuspended_list = $list; $unsuspended_list =~ s/\/suspended.lists\//\/lists\//; if ( -e $unsuspended_list ) { rename( $unsuspended_list, $unsuspended_list . '.' . time() ) } rename( $list, $unsuspended_list ); Cpanel::Mailman::ListManager::regenerate_list($unsuspended_list); } #FIXME: Everything in this script should eventually be done via this function call. try { Whostmgr::Accounts::Unsuspend->new($user); } catch { warn Cpanel::Exception::get_string($_); }; warn if !eval { Whostmgr::Accounts::SuspensionData::Writer->new()->unsuspend($user); 1; }; _print("Unsuspending websites...\n"); Whostmgr::Accounts::Unsuspend::Htaccess::unsuspend_htaccess( $user, \@DNS ); _generate_account_suspension_include(); my $ftpfile = "$Cpanel::ConfigFiles::FTP_PASSWD_DIR/$user"; # Manipulation of these files isn't thread safe. # The root file is intentionally locked before checking the existence of the suspended file. my $ftplock = Cpanel::SafeFile::safelock($ftpfile); if ( -e $ftpfile . '.suspended' ) { my $ftpsuspendedlock = Cpanel::SafeFile::safelock("$ftpfile.suspended"); _print("Unsuspending FTP accounts...\n"); if ( -e $ftpfile ) { unlink $ftpfile; } rename $ftpfile . '.suspended', $ftpfile or warn "Could not rename $ftpfile.suspended to $ftpfile"; Cpanel::SafeFile::safeunlock($ftpsuspendedlock); } Cpanel::SafeFile::safeunlock($ftplock); Cpanel::ServerTasks::schedule_task( ['CpDBTasks'], 10, "ftpupdate" ); _print("${user}'s account is now active\n"); my $domain = Cpanel::AcctUtils::Domain::getdomain($user); my $user_crontab_dir = Cpanel::OS::user_crontab_dir(); if ( -f "$user_crontab_dir.suspended/$user" ) { unlink "$user_crontab_dir/$user"; rename "$user_crontab_dir.suspended/$user", "$user_crontab_dir/$user"; } if ( Cpanel::Services::Enabled::are_provided('mysql') ) { _print("Unsuspending mysql users\n"); Cpanel::MysqlUtils::Suspension::unsuspend_mysql_users($user); } # Unsuspending Team Accounts if ( -e "$Cpanel::Team::Constants::TEAM_CONFIG_DIR/$user" ) { _print("Unsuspending team account ... "); eval { Cpanel::Team::Config->new($user)->unsuspend_team(); }; $@ ? warn "Unable to suspend Team Account" : _print("Done\n"); } my $owner = Cpanel::AcctUtils::Owner::getowner($user); $owner =~ s/\n//g; my $host; if ( $owner eq '' || $owner eq 'root' || $user eq $owner ) { $host = Cpanel::Hostname::gethostname(); } else { $host = Cpanel::AcctUtils::Domain::getdomain($owner); } #if the account reseller does not exist on this server we fall back to root if ( !$host ) { $host = Cpanel::Hostname::gethostname(); $owner = 'root'; } my %account_unsuspension_notification = ( 'user' => $user, 'user_domain' => $domain, 'env_remote_user' => $ENV{'REMOTE_USER'}, 'env_user' => $ENV{'USER'}, 'host_server' => $host, 'origin' => 'Unsuspend Account', 'source_ip_address' => Cpanel::IP::Remote::get_current_remote_ip(), ); # send root notification Cpanel::Notify::notification_class( 'class' => 'unsuspendacct::Notify', 'application' => 'unsuspendacct::Notify', 'constructor_args' => [%account_unsuspension_notification] ); # send one to account reseller as well as long as they are not root if ( $owner ne 'root' ) { Cpanel::Notify::notification_class( 'class' => 'unsuspendacct::Notify', 'application' => 'unsuspendacct::Notify', 'constructor_args' => [ %account_unsuspension_notification, 'to' => $owner, 'username' => $owner ] ); } Cpanel::AcctUtils::AccountingLog::append_entry( 'UNSUSPEND', [ $user, $domain ] ); Cpanel::PwCache::Clear::clear_global_cache(); do_hook( $user, 'post' ); system '/usr/local/cpanel/scripts/postunsuspendacct', @argv if -x '/usr/local/cpanel/scripts/postunsuspendacct'; # The new default is to remove all backend service proxying unless otherwise specified if ($retain_service_proxies) { _print("Keep service proxying settings for this account...Done\n"); } else { { _print("The system will disable service proxying for this account..."); require Cpanel::AccountProxy::Transaction; local $SIG{'__WARN__'} = sub { _print( "\n" . shift . "\n" ) }; Cpanel::AccountProxy::Transaction::unset_all_backends_and_update_services($user); _print("Done\n"); } } _print("$user\'s account has been unsuspended\n"); return 0; } sub do_hook { my ( $user, $stage ) = @_; my ( $result, $hooks_msgs ) = Cpanel::Hooks::hook( { 'category' => 'Whostmgr', 'event' => 'Accounts::unsuspendacct', 'stage' => $stage, 'escalateprivs' => 1, }, { 'args' => { 'user' => $user, }, 'result' => 1, 'user' => 'root', }, ); if ( ref $hooks_msgs eq 'ARRAY' && @$hooks_msgs != 0 ) { foreach my $error ( @{$hooks_msgs} ) { print $error; } return 0; } return 1; } sub unsuspendshadowfile { my ( $user, $file ) = @_; my $access_ids = Cpanel::AccessIds::ReducedPrivileges->new($user); return _unsuspendshadowfile($file); } sub _unsuspendshadowfile { my ($file) = @_; return if !-e $file; my $shadowlock = Cpanel::SafeFile::safeopen( \*SHF, '+<', $file ); if ( !$shadowlock ) { $logger->die("Could not update $file: $!"); } my @CT = ; seek( SHF, 0, 0 ); foreach (@CT) { my @DC = split( /:/, $_ ); chomp( $DC[$#DC] ); foreach my $field ( 1, 8 ) { while ( $DC[$field] =~ m/^\*LOCKED\*/ ) { $DC[$field] =~ s/^\*LOCKED\*//; } } print SHF join( ':', @DC ) . "\n"; } truncate( SHF, tell(SHF) ); return Cpanel::SafeFile::safeclose( \*SHF, $shadowlock ); } sub _generate_account_suspension_include { require "/usr/local/cpanel/scripts/generate_account_suspension_include"; ## no critic qw(Modules::RequireBarewordIncludes) -- refactoring this is too large generate_account_suspension_include::update_include_and_restart_httpd(); return 1; } sub usage { my ( $retval, $msg ) = @_; my $fh = $retval ? \*STDERR : \*STDOUT; my $p = $0; $p =~ s{^.+/(.+)$}{$1}; if ( !defined $msg ) { $msg = <