YANZ UPLOAD ANJG
#! /usr/bin/python3
import sys
import re
import glob
import os
import pwd
import socket
# Convert /home/dlscodrv/public_html/wp-content/plugins/bookshelf/includes
# to
# http://dlsconsulting.co.za/wp-content/plugins/bookshelf/includes/
# via
#
# ServerName dlsconsulting.co.za
# ServerAlias www.dlsconsulting.co.za
# DocumentRoot /home/dlscodrv/public_html
#
document_roots={}
r={
'ServerName': socket.gethostname(),
'DocumentRoot': '/usr/local/apache/htdocs',
}
def parseline(line):
global r
line=line.strip()
m = re.search(r'(\S+)\s*([^#]+)?',line)
if not m:
return
keyword,value=m.groups()
if not value: return
r[keyword]=value
if keyword=="ServerRoot":
filespec=value.strip('" \'')
os.chdir(filespec)
if keyword=="Include":
filespec=value.strip('" \'');
file_list=glob.glob(filespec)
for filename in file_list:
parsefile(filename);
elif keyword in ("", "=0 or name.find('test')>=0: rc += 1
return rc
def showpath(args,document_roots):
shown=0
seen = {}
for path in args:
if not path.startswith('/'):
path=os.getcwd()+'/'+path
path=path.replace("/./","/")
if path in seen: continue # avoid silly duplicates, fwiw ...
seen[path]=True
m={}
dr=''
sn=None
for ServerName,DocumentRoot in list(document_roots.items()):
if ServerName.strip('.').find('.') <0 : continue
for prefix in ('','/u1','/u2','/usr'):
if path.startswith(prefix+DocumentRoot+'/'):
if not sn or badness(sn) > badness(ServerName):
dr=prefix+DocumentRoot
sn=ServerName
if not dr:
public_html='public_html';
offset=path.find(public_html);
if offset>0:
dr=path[:offset+len(public_html)]
if sn:
www_sn = 'www.'+sn
if www_sn in document_roots and document_roots[sn]==document_roots[www_sn]: sn=www_sn;
print('http://'+sn+path[len(dr):])
shown+=1
return shown
def main():
args=sys.argv[1:]
if len(args)==0:
args=['', os.environ.get('PWD',os.getcwd())+'/' ]
# Moo
uid = os.stat(".").st_uid;
try:
username = pwd.getpwuid(uid).pw_name
except:
username = str(uid)
userfile = '/var/cpanel/users/%s' % username
# Try the user's configuration file:
for subdomainfile in glob.glob('/var/cpanel/userdata/%s/*.*' % username):
if subdomainfile.endswith(".stor") or subdomainfile.endswith(".cache"): continue
fd=open(subdomainfile,'r');
servername=None
documentroot=None
for line in fd:
bits=line.strip().split(" ",1)
if len(bits)!=2: continue
if bits[0]=='servername:': servername=bits[1]
if bits[0]=='documentroot:': documentroot=bits[1]
if servername and documentroot:
document_roots[servername]=documentroot
# Read httpd.conf:
for httpd_conf in ('/etc/httpd/conf/httpd.conf', '/usr/local/apache/conf/httpd.conf', '/etc/apache2/apache2.conf', ):
if not os.path.exists(httpd_conf): continue
try:
parsefile(httpd_conf)
except:
pass
if showpath(args,document_roots): return
# Read /var/cpanel/users/myusernm -- last ditch effort
if os.path.exists(userfile):
fd=open(userfile,'r')
for line in fd:
bits=line.split('=',1);
if len(bits)!=2: continue
if bits[0]=='DNS':
document_roots[bits[1].strip()]= pwd.getpwuid(os.stat(".").st_uid).pw_dir+'/public_html';
fd.close()
if showpath(args,document_roots): return
if __name__=="__main__":
main()