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:
try:
dbuser = DBUsers.objects.get(user=items.dbUser)
userToTry = items.dbUser
except:
dbusers = DBUsers.objects.all().filter(user=items.dbUser)
userToTry = items.dbUser
for it in dbusers:
dbuser = it
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')
child = SubElement(databaseXML, 'dbName')
child.text = items.dbName
child = SubElement(databaseXML, 'dbUser')
child.text = items.dbUser
child.text = userToTry
child = SubElement(databaseXML, 'password')
child.text = dbuser.password

View File

@@ -12,6 +12,7 @@ import shlex
try:
from websiteFunctions.models import Websites
from databases.models import Databases
from backup.models import DBUsers
except:
pass
import MySQLdb as mysql
@@ -704,9 +705,16 @@ password=%s
if connection == 0:
return 0
cursor.execute("use mysql")
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()
return 1
@@ -714,3 +722,43 @@ password=%s
except BaseException, msg:
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