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: strmailer

#!/usr/lib/rads/venv/bin/python3 """Send email to STR based on stdin or file input. Optionally, direct that mail elsewhere.""" from platform import node import argparse import sys import yaml import rads DEFAULT_DEST = "str@imhadmin.net" DESTS = [ "sadmin@imhadmin.net", "reclamations@imhadmin.net", DEFAULT_DEST, ] def get_args(): '''Get arguments: --email(s) - email to send to if not str@ --user - user for which we're generating the str --file - file containing the STR information''' parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( "-s", "--subject", help="Ticket subject. If not provided, defaults to user @ hostname", ) parser.add_argument( '-e', '--email', dest='emails', nargs='*', default=[DEFAULT_DEST], choices=DESTS, help="Provide a different email address for the STR message to be sent." f" If one is not provided, this script will send to {DEFAULT_DEST}.", ) parser.add_argument( '-f', '--file', type=argparse.FileType('r'), dest='infile', metavar='strinfo.txt', nargs=1, default=[sys.stdin], help="Provide STR information via file", ) parser.add_argument( '-u', '--user', dest='user', help="User for which the STR is being generated", required=True, ) args = parser.parse_args() return args def get_user_owners() -> dict[str, str]: """Get user -> owner map""" with open('/etc/trueuserowners', encoding='utf-8') as handle: data = yaml.load(handle, rads.DumbYamlLoader) if data is None: data = {} return data def main(): '''Main function: Get args, get the platform, find the reseller if this is the STR for a child account, email STR''' args = get_args() message = args.infile[0].read() # get the shortname by cutting node() at the first .'s index fqdn = node() short_host = fqdn.split('.', maxsplit=1)[0] emails = args.emails user = args.user if not args.subject: args.subject = f"{user} @ {node()}" # "userna5 @ hostname" if rads.IMH_CLASS == 'reseller': # check reseller ownership from /etc/trueuserowners # (faster than whmapi1) owner = get_user_owners().get(user, 'root') if owner not in rads.OUR_RESELLERS: # "child (reseller) @ shortname" args.subject = f"{user} ({owner}) @ {short_host}" exit_code = 0 for email in emails: try: rads.make_ticket( dest=email, subject=args.subject, body=message, sender=f"{user}@{fqdn}", ) except rads.TicketError as exc: exit_code = 1 print( f"Failed creating {email} ticket. Please submit manually. " f"(Creation error: {exc})" ) else: print(f"Successfully sent to {email} with subject {args.subject!r}") sys.exit(exit_code) if __name__ == "__main__": main()