/opt/dedrads
NameSizeModeActions
account_review/-0555rm
check_software_mods/-0555rm
cms_tools/-0555rm
etc/-0555rm
extras/-0555rm
mailparse/-0555rm
mysql/-0555rm
nlp_scripts/-0555rm
oldrads/-0555rm
perl/-0555rm
provision/-0555rm
python/-0555rm
suspended/-0555rm
__pycache__/-0555rm
account-review7990555editdlrm
allfw62590555editdlrm
alp.py165530555editdlrm
autossl_sync62670555editdlrm
check_apache92050555editdlrm
check_bandwidth45460555editdlrm
check_boxtrapper16840555editdlrm
check_cpu122120555editdlrm
check_crons18270555editdlrm
check_dcpumon19730555editdlrm
check_dns18270555editdlrm
check_domlogs610555editdlrm
check_exim37310555editdlrm
check_hacks226040555editdlrm
check_imap52490555editdlrm
check_io66350555editdlrm
check_max_children163410555editdlrm
check_mem16600555editdlrm
check_misc15100555editdlrm
check_pacct52010555editdlrm
check_php43440555editdlrm
check_pop322950555editdlrm
check_prov.py47140555editdlrm
check_server6960555editdlrm
check_size4900555editdlrm
check_software98490555editdlrm
check_spamd24260555editdlrm
check_traffic19330555editdlrm
check_user18870555editdlrm
clean_exim.py63900555editdlrm
clusterfix53430555editdlrm
cmspass.py39700555editdlrm
cms_check.py98250555editdlrm
cms_counter.py367340555editdlrm
cms_creds7130555editdlrm
cms_dumpdb44850555editdlrm
cms_pw14160555editdlrm
cpanel-api70400555editdlrm
cpanel_postgres_manager.py290040555editdlrm
cpmerge46310555editdlrm
cpumon21950555editdlrm
dcpumon.pl12390555editdlrm
dedcheck181270555editdlrm
dns-sync143860555editdlrm
docroot.py44250555editdlrm
du-tree74500555editdlrm
envinfo.py66330555editdlrm
exclude_rbl.py52490555editdlrm
extract-vhost26910555editdlrm
filescan35660555editdlrm
find_warez14600555editdlrm
first_setup.py191200555editdlrm
fixwpcron.py48220555editdlrm
fix_dns_cluster3530555editdlrm
goaccess12177200555editdlrm
hostsfilemods44670555editdlrm
imap_io23230555editdlrm
innodb_converter.py93430555editdlrm
killall9115300555editdlrm
killdns9410555editdlrm
lastcommcache.sh13740555editdlrm
legal_lock_down.sh74500555editdlrm
lil-cpanel520020555editdlrm
listacct45750555editdlrm
mailscan45440555editdlrm
mail_sources.py74070555editdlrm
megaclisas-status386640555editdlrm
migrate2central.sh144180555editdlrm
modify-account406310555editdlrm
modsec_disable.py114610555editdlrm
monarxctl89120555editdlrm
msp.pl277140555editdlrm
mysql_dstat4740555editdlrm
mysql_selector.py731020555editdlrm
nlp45820555editdlrm
procscrape18630555editdlrm
quarantine110830555editdlrm
radsfunctions.sh8630555editdlrm
recent-cp161480555editdlrm
remote_dump183470555editdlrm
reset_cpanel32050555editdlrm
server-load21920555editdlrm
show-conns201050555editdlrm
show-conns-adv.py546670555editdlrm
sparta.py3824980555editdlrm
sqltop271290555editdlrm
telcheck24110555editdlrm
temprootreset1860555editdlrm
unsuspend_user13070555editdlrm
unsusprunner.sh18400555editdlrm
updatednsadmin5260555editdlrm
update_spf149720555editdlrm
upgrade-check92160555editdlrm
vhost_data.py62210555editdlrm
wp-xray.sh858160555editdlrm
Edit: /opt/dedrads/exclude_rbl.py (5249B)
#! /usr/lib/rads/venv/bin/python3 """ Written by Quintin Holmes """ import argparse import subprocess import os import re # add and remove domains to/from /etc/skiprbldomains def modify_domains(file_path, domains, action="add"): modified = False try: # read the existing domains with open(file_path, "r+", encoding="utf-8") as file: existing_domains = {line.strip() for line in file} # reset file pointer to the beginning for re-writing if needed file.seek(0) if action == "add": for domain in domains: if domain not in existing_domains: existing_domains.add(domain) modified = True # rewrite the file with updated domains if modified: file.writelines( f"{domain}\n" for domain in existing_domains ) # file.truncate() # Adjust file size to match new content elif action == "remove": initial_count = len(existing_domains) existing_domains.difference_update(domains) # Check if any domains were removed if len(existing_domains) < initial_count: modified = True print(f"Domains removed from {file_path}.") file.seek(0) file.writelines( f"{domain}\n" for domain in existing_domains ) file.truncate() else: print(f"No specified domains were found in {file_path}.") except PermissionError: print(f"Permission denied: Unable to modify {file_path}") return modified # restart Exim def restart_exim(): try: subprocess.run(["/scripts/buildeximconf"], check=True) subprocess.run(["systemctl", "restart", "exim"], check=True) print("Exim restarted.") except subprocess.CalledProcessError as e: print(f"Error restarting Exim: {e}") # looks for a cp user in userdomains, then adds all domains for the user to # skiprbldomains def find_user_domains(user, userdomains_path="/etc/userdomains"): domains = [] try: with open(userdomains_path, encoding="utf-8") as file: for line in file: domain, owner = line.strip().split(':') if owner.strip() == user: domains.append(domain.strip()) except PermissionError: print(f"Permission denied: Unable to read {userdomains_path}") return domains def child_accounts(reseller, file_path): accounts = [] with open('/etc/trueuserowners', encoding="utf-8") as file: for line in file: if re.search(f":{reseller}", line): accounts.append(line.split(':')[0]) reseller_domains = [] for account in accounts: with open('/etc/trueuserdomains', encoding="utf-8") as file: for line in file: if re.search(f":{account}$", line): reseller_domains.append(line.split(':')[0].strip()) if reseller_domains: modify_domains(file_path, reseller_domains, action="add") # Main function of the script that has argument setup def main(): parser = argparse.ArgumentParser( description="Modify /etc/skiprbldomains file." ) parser.add_argument( "-a", "--add", nargs='+', help="Add domains to the file.", metavar="DOMAIN", default=[], type=str, ) parser.add_argument( "-r", "--remove", nargs='+', help="Remove domains from the file.", metavar="DOMAIN", default=[], type=str, ) parser.add_argument( "-u", "--user", help="Add all domains owned by this user.", metavar="USERNAME", type=str, ) parser.add_argument( "-c", "--child", action="store_true", help="Add reseller child accounts.", ) args = parser.parse_args() file_path = "/etc/skiprbldomains" domains_added = False if not os.path.isfile(file_path): try: open(file_path, "a", encoding='utf-8').close() except PermissionError: print(f"Permission denied: Unable to create or modify {file_path}") return # add and remove actions if args.add: domains_added = modify_domains(file_path, args.add, action="add") if args.remove: domains_added = ( modify_domains(file_path, args.remove, action="remove") or domains_added ) # -- user is used, add their domains if args.user: user_domains = find_user_domains(args.user) if user_domains: domains_added = ( modify_domains(file_path, user_domains, action="add") or domains_added ) if args.child: child_accounts(args.user, file_path) domains_added = True if domains_added: restart_exim() else: print("No changes made.") if __name__ == "__main__": main()