bug fix: fix misconfigured database users in cPanel importer

This commit is contained in:
Usman Nasir
2019-09-10 14:06:56 +05:00
parent b7fec586cb
commit 52a2d54168
2 changed files with 65 additions and 3 deletions

View File

@@ -104,18 +104,32 @@ class backupUtilities:
for items in databases: for items in databases:
try: try:
dbuser = DBUsers.objects.get(user=items.dbUser) dbuser = DBUsers.objects.get(user=items.dbUser)
userToTry = items.dbUser
except: except:
dbusers = DBUsers.objects.all().filter(user=items.dbUser) dbusers = DBUsers.objects.all().filter(user=items.dbUser)
userToTry = items.dbUser
for it in dbusers: for it in dbusers:
dbuser = it dbuser = it
break break
userToTry = mysqlUtilities.mysqlUtilities.fetchuser(items.dbUser)
try:
dbuser = DBUsers.objects.get(user=userToTry)
except:
dbusers = DBUsers.objects.all().filter(user=userToTry)
for it in dbusers:
dbuser = it
break
databaseXML = Element('database') databaseXML = Element('database')
child = SubElement(databaseXML, 'dbName') child = SubElement(databaseXML, 'dbName')
child.text = items.dbName child.text = items.dbName
child = SubElement(databaseXML, 'dbUser') child = SubElement(databaseXML, 'dbUser')
child.text = items.dbUser child.text = userToTry
child = SubElement(databaseXML, 'password') child = SubElement(databaseXML, 'password')
child.text = dbuser.password child.text = dbuser.password

View File

@@ -12,6 +12,7 @@ import shlex
try: try:
from websiteFunctions.models import Websites from websiteFunctions.models import Websites
from databases.models import Databases from databases.models import Databases
from backup.models import DBUsers
except: except:
pass pass
import MySQLdb as mysql import MySQLdb as mysql
@@ -704,13 +705,60 @@ password=%s
if connection == 0: if connection == 0:
return 0 return 0
cursor.execute("use mysql") cursor.execute("use mysql")
cursor.execute("SET PASSWORD FOR '" + userName + "'@'localhost' = PASSWORD('" + dbPassword + "')")
try:
dbuser = DBUsers.objects.get(user=userName)
cursor.execute("SET PASSWORD FOR '" + userName + "'@'localhost' = PASSWORD('" + dbPassword + "')")
except:
userName = mysqlUtilities.fetchuser(userName)
cursor.execute("SET PASSWORD FOR '" + userName + "'@'localhost' = PASSWORD('" + dbPassword + "')")
connection.close() connection.close()
return 1 return 1
except BaseException, msg: except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[mysqlUtilities.changePassword]") logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[mysqlUtilities.changePassword]")
return 0
@staticmethod
def fetchuser(userName):
try:
connection, cursor = mysqlUtilities.setupConnection()
cursor.execute("use mysql")
database = Databases.objects.get(dbUser=userName)
databaseName = database.dbName
databaseName = databaseName.replace('_', '\_')
query = "select user from db where db = '%s'" % (databaseName)
if connection == 0:
return 0
cursor.execute(query)
rows = cursor.fetchall()
counter = 0
for row in rows:
if row[0].find('_') > -1:
database.dbUser = row[0]
database.save()
try:
connection.close()
except:
pass
message = 'Detected databaser user is %s for database %s.' % (row[0], databaseName)
logging.CyberCPLogFileWriter.writeToFile(message)
return row[0]
else:
counter = counter + 1
connection.close()
return 1
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[mysqlUtilities.fetchuser]")
return 0 return 0