/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/vhost_data.py (6221B)
#! /usr/lib/rads/venv/bin/python3 '''Gather important VirtualHost information.''' import re import os import json import logging from argparse import ArgumentParser import envinfo LOGGER = logging.getLogger(__name__) __author__ = "Daniel K" __email__ = "danielk@inmotionhosting.com" def get_vhost_list(conf=None): '''Collect necessary information from VirtualHost entries.''' if conf is None: conf = envinfo.get_data()['apache_conf'] vhost_list = [] vhost_rx = re.compile( r'[0-9.]+):(?P[0-9]+)( ([0-9.]+):([0-9]+))*>' ) if os.path.exists(conf): with open(conf, encoding='utf-8') as file_handle: vhost_data = {} vhost_data['hostnames'] = [] try: for line in file_handle: vhost_match = vhost_rx.search(line) if "#" not in line: if "/VirtualHost" in line: if 'ip' in vhost_data: if 'port' in vhost_data: vhost_list.append(vhost_data) vhost_data = {} vhost_data['hostnames'] = [] elif vhost_match is not None: vhost_data['ip'] = vhost_match.group('ip') vhost_data['port'] = vhost_match.group('port') elif "ServerName" in line: vhost_data['hostnames'].append(line.split()[1]) elif "ServerAlias" in line: line = line.strip() for host in line.split(" ", 1)[1].split(): vhost_data['hostnames'].append(host) elif "Include" in line: if 'includes' not in vhost_data: vhost_data['includes'] = [] vhost_data['includes'].append(line.split()[1]) elif "SSLCertificateFile" in line: vhost_data['ssl'] = line.split()[1] elif "SSLCertificateKeyFile" in line: vhost_data['key'] = line.split()[1] elif "SSLCertificateChainFile" in line: vhost_data['ca'] = line.split()[1] elif "DocumentRoot" in line: vhost_data['docroot'] = line.split()[1] except OSError: LOGGER.error("Error reading file") return None return vhost_list def search_vhost_list(vhost_list, host=None, ip_address=None, port=None): '''Search vhost_list for first matching entry for given information''' if vhost_list is None: vhost_list = get_vhost_list() working_list = [] for vhost_data in vhost_list: if (ip_address is None) or (ip_address in vhost_data['ip']): if (port is None) or (port in vhost_data['port']): working_list.append(vhost_data) if len(working_list) == 0: for vhost_data in vhost_list: if (ip_address is None) or (ip_address in vhost_data['ip']): if '*' in vhost_data['port']: working_list.append(vhost_data) if len(working_list) == 0: return vhost_list[1] for vhost_data in working_list: if host in vhost_data['hostnames']: return vhost_data return None def parse_args(): '''Parse command line aruments''' parser = ArgumentParser(description=__doc__) output_parser_group = parser.add_argument_group("Output options") output_group = output_parser_group.add_mutually_exclusive_group() output_group.add_argument( "-d", "--documentroot", action='store_true', help="Output only the document root.", ) output_group.add_argument( "-j", "--json", action='store_true', help="Output only the document root.", ) parser.add_argument( '-c', '--config', type=str, default=None, help="Location of a custom Apache configuration.", ) search_group = parser.add_argument_group("Search options") search_group.add_argument( "-i", "--ip", type=str, default=None, help="IP to search." ) port_group = search_group.add_mutually_exclusive_group() port_group.add_argument( "-p", "--port", type=str, default=None, help="Port to search." ) port_group.add_argument( "-s", "--standardports", type=str, default=None, help="Try port 443 first, and if no entry, try port 80.", ) search_group.add_argument("hostname", type=str, help="Hostname to search.") args = parser.parse_args() if args.documentroot: output = "docroot" elif args.json: output = "json" else: output = "standard" return output, args.ip, args.port, args.hostname, args.config def main(): '''Main function for script''' (output, ip_address, port, host, conf) = parse_args() vhost_list = get_vhost_list(conf) vhost_data = search_vhost_list(vhost_list, host, ip_address, port) if vhost_data is None: print("No results found") elif output == "docroot": print(vhost_data['docroot']) elif output == "json": print( json.dumps( vhost_data, sort_keys=True, indent=4, separators=(',', ': ') ) ) else: print("Hostname: %s" % host) print("IP/port: {}:{}".format(vhost_data['ip'], vhost_data['port'])) print("Document Root: %s" % vhost_data['docroot']) if 'ssl' in vhost_data: print("SSL Certificate: %s" % vhost_data['ssl']) print("SSL Private Key: %s" % vhost_data['key']) if 'ca' in vhost_data: print("SSL CA Bundle: %s" % vhost_data['ca']) if 'includes' in vhost_data: for path in vhost_data['includes']: print("Include: %s" % path) if __name__ == "__main__": main()