Back
Type Name Operations
__pycache__ Open
account_review Open
autosuspend Open
check_software_mods Open
cms_tools Open
domainchecker Open
etc Open
extras Open
failsuspend Open
guds_modules Open
mailers Open
mitigatord Open
mysql Open
nlp_scripts Open
oldrads Open
ops Open
perl Open
python Open
suspended Open
temporary Open
README
account-review
alp.py
autossl_runner.sh
autosusprunner.sh
backup_scan.sh
blockip
check_apache
check_autossl
check_bandwidth
check_boxtrapper
check_cpu
check_crons
check_darkmailer.py
check_dcpumon
check_dns
check_domcount.sh
check_exim
check_hacks
check_imap
check_io
check_lve
check_mailchannels_dns
check_max_children
check_mem
check_misc
check_mysql
check_pacct
check_pop3
check_raid
check_server
check_size
check_software
check_spamd
check_traffic
check_user
check_zoneh
clean_exim.py
clean_moveuser
cms_counter.py
cms_creds
cms_dumpdb
cms_pw
cmspass.py
cpanel-api
cpumon
ctrl_alt_del
dcpumon.pl
disk_cleanup.py
dns-sync
docroot.py
du-tree
envinfo.py
exclude_rbl.py
exclude_sender
extract-vhost
find_warez
findbadscripts
fixwpcron.py
forensic.py
fraudhunter.py
generate_cpmove_tix
hostsfilemods
imap_io
killall911
lastcommcache.sh
legal_lock_down.sh
lil-cpanel
limit_bots
listacct
mail_sources.py
mailscan
mass_arp_fixer.py
mass_mysql_recover.py
megaclisas-status
modify-account
modsec_disable.py
move_generator.py
msp.pl
mysql_dstat
nlp
packandgo
pastebin
postmortem
procscrape
quarantine
quick_post
radsfunctions.sh
reap_fpm_orphans.sh
recent-cp
reclaim_suspensions
remote_dump
rescp.sh
reset_cpanel
reset_email
rotate_ip_addresses.py
rrdtooldisable.sh
rrdtoolenable.sh
sadatarunner.sh
send_customer_str
send_pp_email
server-load
setmaxemails
show-conns
software_report.py
sqltop
strmailer
suspend_domain
suspend_user
temp_apache_fix
unsuspend_user
unsusprunner.sh
update_spf
upgrade-check
vhost_data.py

File Transfer

Upload files to current directory

File Editor: suspend_domain

#!/usr/lib/rads/venv/bin/python3 """IMH/HUB ShareRADs - suspend_domain.py""" # Writen by Michael B michaelb@inmotionhostin.com import sys import pwd import syslog from argparse import ArgumentParser from pathlib import Path import os import time from cpapis import whmapi1 LOG_FILE = '/var/log/suspension.log' def logdate(): """Format date for suspension log""" return time.strftime("%Y-%m-%d:%H:%M:%S %Z", time.localtime(time.time())) def log_suspension(domain, susp_type, comment): """Log domain suspension""" procname = os.path.basename(sys.argv[0]) sudo_user = os.getenv("SUDO_USER") blame = get_calling_username() entry = 'Domain: {} [{}] {}: "{}"'.format( domain, susp_type.upper(), blame, comment or '-' ) syslog.openlog(procname) syslog.syslog(entry) with open(LOG_FILE, 'a', encoding='utf-8') as log_f: log_f.write(f'{logdate()} {sudo_user}: {entry}\n') def get_calling_username(): """Get username which ran this script""" try: blame = '{}:{}'.format( os.getlogin(), pwd.getpwuid(os.geteuid()).pw_name ) except OSError: blame = pwd.getpwuid(os.geteuid()).pw_name return blame def suspend_domain(docroot: str, domain: str): """Suspend a domain via .htaccess""" path = os.path.join(docroot, '.htaccess') if os.path.isfile(path): os.rename(path, '%s.suspended' % path) print(".htaccess found. Moving and placing suspension .htaccess") else: Path(path + ".suspended").touch(mode=0o644) with open(path, 'w', encoding='utf-8') as hta_f: hta_f.write("RedirectMatch .* http://%s/unavailable.html\n" % domain) log_suspension(domain, "suspended", 'via suspend_domain') print("Domain %s has been suspended." % domain) def unsuspend_domain(docroot: str, domain: str): """Unsuspend a domain via .htaccess""" path = os.path.join(docroot, '.htaccess') if os.path.isfile(path + ".suspended"): os.remove(path) os.rename(path + ".suspended", path) log_suspension(domain, "unsuspended", 'via suspend_domain') else: print("Domain %s doesn't appear to be suspended" % domain) print("Domain %s has been unsuspended" % domain) def parse_args() -> tuple[bool, list[str]]: parser = ArgumentParser(description=__doc__) group = parser.add_mutually_exclusive_group(required=True) group.add_argument( "-s", "--suspend", nargs='+', help="Suspends the domain listed" ) group.add_argument( "-u", "--unsuspend", nargs='+', help="Unsuspends the domain specified" ) args = parser.parse_args() if args.suspend: return True, args.suspend return False, args.unsuspend def main(): """Main logic of suspend_domain""" suspend, domains = parse_args() rcode = 0 for domain in domains: try: api = whmapi1('domainuserdata', {'domain': domain}, check=True) domainroot = api['data']['userdata']['documentroot'] except Exception as exc: print(exc, file=sys.stderr) print( f'Unable to get documentroot for {domain} from whmapi1', file=sys.stderr, ) rcode = 2 continue if suspend: suspend_domain(domainroot, domain) else: unsuspend_domain(domainroot, domain) sys.exit(rcode) if __name__ == '__main__': main()