diff --git a/baseTemplate/views.py b/baseTemplate/views.py index 1bfd1f1db..593b780e5 100755 --- a/baseTemplate/views.py +++ b/baseTemplate/views.py @@ -73,7 +73,7 @@ def upgrade_cyberpanel(request): try: upgrade_command = 'sh <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/preUpgrade.sh || wget -O - https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/preUpgrade.sh)' result = subprocess.run(upgrade_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - text=True) + universal_newlines=True) if result.returncode == 0: response_data = {'success': True, 'message': 'CyberPanel upgrade completed successfully.'} diff --git a/install/install.py b/install/install.py index e9ed3a87d..4c21bdce1 100755 --- a/install/install.py +++ b/install/install.py @@ -162,7 +162,7 @@ class preFlightsChecks: preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR) command = 'mount -o remount /' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True,universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -197,7 +197,7 @@ class preFlightsChecks: return 0 command = 'mount -o remount /' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -214,19 +214,19 @@ class preFlightsChecks: #### command = "find /lib/modules/ -type f -name '*quota_v*.ko*'" - iResult = subprocess.run(command, capture_output=True, text=True, shell=True) + iResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) print(repr(iResult.stdout)) # Only if the first command works, run the rest if iResult.returncode == 0: command = "echo '{}' | sed -n 's|/lib/modules/\\([^/]*\\)/.*|\\1|p' | sort -u".format(iResult.stdout) - result = subprocess.run(command, capture_output=True, text=True, shell=True) + result = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) fResult = result.stdout.rstrip('\n') print(repr(result.stdout.rstrip('\n'))) command = 'uname -r' - ffResult = subprocess.run(command, capture_output=True, text=True, shell=True) + ffResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) ffResult = ffResult.stdout.rstrip('\n') command = f"DEBIAN_FRONTEND=noninteractive apt-get install linux-modules-extra-{ffResult}" @@ -328,7 +328,7 @@ class preFlightsChecks: def mountTemp(self): try: - result = subprocess.run('systemd-detect-virt', capture_output=True, text=True, shell=True) + result = subprocess.run('systemd-detect-virt', capture_output=True, universal_newlines=True, shell=True) if result.stdout.find('openvz') > -1: if self.distro == ubuntu: @@ -1775,7 +1775,7 @@ $cfg['Servers'][$i]['LogoutURL'] = 'phpmyadminsignin.php?logout'; # lscpdSelection = 'lscpd.aarch64' try: - result = subprocess.run('uname -a', capture_output=True, text=True, shell=True) + result = subprocess.run('uname -a', capture_output=True, universal_newlines=True, shell=True) if result.stdout.find('aarch64') == -1: lscpdSelection = 'lscpd-0.3.1' diff --git a/install/installCyberPanel.py b/install/installCyberPanel.py index 17c91439a..fcae20dd6 100755 --- a/install/installCyberPanel.py +++ b/install/installCyberPanel.py @@ -65,7 +65,7 @@ class InstallCyberPanel: try: command = 'uname -a' - result = subprocess.run(command, capture_output=True, text=True, shell=True) + result = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if 'aarch64' in result.stdout: return True diff --git a/plogical/cPanelImporter.py b/plogical/cPanelImporter.py index ad7f53ff6..3ebceb398 100644 --- a/plogical/cPanelImporter.py +++ b/plogical/cPanelImporter.py @@ -304,6 +304,9 @@ class cPanelImporter: movePath = '%s/homedir/%s' % ( CompletPathToExtractedArchive, self.homeDir) + if os.path.exists(ProcessUtilities.debugPath): + logging.statusWriter(self.logFile, f'Directory from where docRoot of main site data will be moved {movePath}') + shutil.copytree(movePath, nowPath, symlinks=True) message = 'Main site %s created from archive file: %s' % (DomainName, self.backupFile) @@ -591,6 +594,41 @@ class cPanelImporter: ## passFile = "/etc/cyberpanel/mysqlPassword" + try: + import json + jsonData = json.loads(open(passFile, 'r').read()) + + mysqluser = jsonData['mysqluser'] + mysqlpassword = jsonData['mysqlpassword'] + mysqlport = jsonData['mysqlport'] + mysqlhost = jsonData['mysqlhost'] + password = mysqlpassword + except: + passFile = "/etc/cyberpanel/mysqlPassword" + f = open(passFile) + data = f.read() + password = data.split('\n', 1)[0] + mysqlhost = 'localhost' + mysqlport = '3306' + mysqluser = 'root' + + cnfPath = '/home/cyberpanel/.my.cnf' + + if not os.path.exists(cnfPath): + cnfContent = """[mysqldump] +user=root +password=%s +max_allowed_packet=1024M +[mysql] +user=root +password=%s +""" % (password, password) + writeToFile = open(cnfPath, 'w') + writeToFile.write(cnfContent) + writeToFile.close() + + os.chmod(cnfPath, 0o600) + f = open(passFile) data = f.read() password = data.split('\n', 1)[0] @@ -616,14 +654,40 @@ class cPanelImporter: message = 'Failed while restoring database %s from backup file %s, error message: %s' % (items.replace('.sql', ''), self.backupFile, str(msg)) logging.statusWriter(self.logFile, message, 1) - command = 'sudo mysql -u root -p' + password + ' ' + items.replace('.sql', '') + command = f'mysql --defaults-file=/home/cyberpanel/.my.cnf -u {mysqluser} --host={mysqlhost} --port {mysqlport} ' + items.replace('.sql', '') + + message = f'Full command to restore DB {command}' + logging.statusWriter(self.logFile, message, 1) cmd = shlex.split(command) DBPath = "%s/%s" % (DatabasesPath, items) + # with open(DBPath, 'r') as f: + # message = f'Full command to restore DB {cmd}' + # logging.statusWriter(self.logFile, message, 1) + # + # res = subprocess.call(cmd, stdin=f) + with open(DBPath, 'r') as f: - res = subprocess.call(cmd, stdin=f) + + + try: + # Run the command using subprocess.run, capturing stdout and stderr + result = subprocess.run(cmd, stdin=f, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + universal_newlines=True) + + # Log stdout and stderr + logging.statusWriter(self.logFile, f'STDOUT: {result.stdout}', 1) + logging.statusWriter(self.logFile, f'STDERR: {result.stderr}', 1) + + # Check if the command failed + if result.returncode != 0: + logging.statusWriter(self.logFile, + f'Command failed with return code {result.returncode}', 2) + except Exception as e: + # Log any exception that occurs + logging.statusWriter(self.logFile, f'Exception occurred: {str(e)}', 2) website = Websites.objects.get(domain=self.mainDomain) @@ -633,21 +697,33 @@ class cPanelImporter: data = open(CommandsPath, 'r').readlines() - for inItems in data: - if inItems.find('GRANT ALL PRIVILEGES') > -1 and inItems.find('localhost') > -1 and inItems.find('_test') == -1: - cDBName = inItems.split('`')[1].replace('\\', '') - logging.statusWriter(self.logFile, inItems, 1) - if cDBName == items.replace('.sql', ''): - cDBUser = inItems.replace("`","'").replace("\\","").split("'")[1] - message = 'Database user for %s is %s.' % (cDBName, cDBUser) - logging.statusWriter(self.logFile, message, 1) - if Databases.objects.filter(dbUser=cDBUser).count() > 0: - continue - break + ### temp disable if user not added, need to remove this try,catch and to ensure user gets added + try: - db = Databases(website=website, dbName=items.replace('.sql', ''), dbUser=cDBUser) - db.save() + for inItems in data: + if (inItems.find('GRANT ALL PRIVILEGES') > -1 or inItems.find('GRANT USAGE') > -1) and inItems.find('localhost') > -1 and inItems.find('_test') == -1: + cDBName = inItems.split('`')[1].replace('\\', '') + logging.statusWriter(self.logFile, inItems, 1) + if cDBName == items.replace('.sql', ''): + cDBUser = inItems.replace("`","'").replace("\\","").split("'")[1] + message = 'Database user for %s is %s.' % (cDBName, cDBUser) + logging.statusWriter(self.logFile, message, 1) + if Databases.objects.filter(dbUser=cDBUser).count() > 0: + continue + break + except: + pass + + ### temp disable if user not added, need to remove this try,catch and to ensure user gets added + + try: + db = Databases(website=website, dbName=items.replace('.sql', ''), dbUser=cDBUser) + db.save() + except: + db = Databases(website=website, dbName=items.replace('.sql', ''), dbUser='root') + db.save() + pass message = 'MySQL dump successfully restored for %s.' % (items.replace('.sql', '')) logging.statusWriter(self.logFile, message, 1) @@ -663,6 +739,9 @@ class cPanelImporter: if items.find("--") > -1 or items.find("'cyberpanel'@") > -1: continue try: + if os.path.exists(ProcessUtilities.debugPath): + message = f'Currently executing MySQL command {items}' + logging.statusWriter(self.logFile, message, 1) cursor.execute(items) except BaseException as msg: message = 'Failed while restoring database %s from backup file %s, error message: %s' % ( diff --git a/plogical/rebuildQuotas.py b/plogical/rebuildQuotas.py index 5e1d061de..e7d0c8a85 100644 --- a/plogical/rebuildQuotas.py +++ b/plogical/rebuildQuotas.py @@ -27,7 +27,7 @@ class rebuildQuotas: if rData.find('xfs') > -1: command = "mount | grep ' / '" - qResult = subprocess.run(command, capture_output=True, text=True, shell=True) + qResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if qResult.stdout.find('usrquota') > -1: print("Looks like Quotas are enabled in filesystem, moving on..") @@ -37,7 +37,7 @@ class rebuildQuotas: exit(1) else: command = "mount | grep quota" - qResult = subprocess.run(command, capture_output=True, text=True, shell=True) + qResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if qResult.stdout.find('usrquota') > -1: print("Looks like Quotas are enabled in filesystem, moving on..") else: @@ -49,13 +49,13 @@ class rebuildQuotas: for website in Websites.objects.all(): print(f"Rebuilding quotas for {website.domain}...") command = 'chattr -R -i /home/%s/' % (website.domain) - subprocess.run(command, capture_output=True, text=True, shell=True) + subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if website.package.enforceDiskLimits: spaceString = f'{website.package.diskSpace}M {website.package.diskSpace}M' command = f'setquota -u {website.externalApp} {spaceString} 0 0 /' print(command) - qResult = subprocess.run(command, capture_output=True, text=True, shell=True) + qResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) else: print(f"Ignored {website.domain} because the selected package does not enforce disk limits.") except: diff --git a/plogical/sslUtilities.py b/plogical/sslUtilities.py index 33a3e0b91..0845866d0 100755 --- a/plogical/sslUtilities.py +++ b/plogical/sslUtilities.py @@ -585,7 +585,7 @@ context /.well-known/acme-challenge { #output = subprocess.check_output(shlex.split(command)).decode("utf-8") - result = subprocess.run(command, capture_output=True, text=True, + result = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) @@ -605,7 +605,7 @@ context /.well-known/acme-challenge { logging.CyberCPLogFileWriter.writeToFile(command, 0) - result = subprocess.run(command, capture_output=True, text=True, + result = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) stdout = result.stdout @@ -653,7 +653,7 @@ context /.well-known/acme-challenge { logging.CyberCPLogFileWriter.writeToFile(command) #output = subprocess.check_output(shlex.split(command)).decode("utf-8") - result = subprocess.run(command, capture_output=True, text=True, + result = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) stdout = result.stdout @@ -668,7 +668,7 @@ context /.well-known/acme-challenge { + '/cert.pem' + ' --key-file ' + existingCertPath + '/privkey.pem' \ + ' --fullchain-file ' + existingCertPath + '/fullchain.pem' + ' -w /usr/local/lsws/Example/html -k ec-256 --force --server letsencrypt' - result = subprocess.run(command, capture_output=True, text=True, + result = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) stdout = result.stdout diff --git a/plogical/upgrade.py b/plogical/upgrade.py index b5f08906f..f8aec2f6a 100755 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -2291,7 +2291,7 @@ CREATE TABLE `websiteFunctions_backupsv2` (`id` integer AUTO_INCREMENT NOT NULL os.remove(lscpdPath) try: - result = subprocess.run('uname -a', capture_output=True, text=True, shell=True) + result = subprocess.run('uname -a', capture_output=True, universal_newlines=True, shell=True) if result.stdout.find('aarch64') == -1: lscpdSelection = 'lscpd-0.3.1' @@ -3625,7 +3625,7 @@ pm.max_spare_servers = 3 command = 'mount -o remount /' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -3660,7 +3660,7 @@ pm.max_spare_servers = 3 return 0 command = 'mount -o remount /' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -3672,7 +3672,7 @@ pm.max_spare_servers = 3 return 0 command = 'quotacheck -ugm /' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -3686,19 +3686,19 @@ pm.max_spare_servers = 3 #### command = "find /lib/modules/ -type f -name '*quota_v*.ko*'" - iResult = subprocess.run(command, capture_output=True, text=True, shell=True) + iResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) print(repr(iResult.stdout)) # Only if the first command works, run the rest if iResult.returncode == 0: command = "echo '{}' | sed -n 's|/lib/modules/\\([^/]*\\)/.*|\\1|p' | sort -u".format(iResult.stdout) - result = subprocess.run(command, capture_output=True, text=True, shell=True) + result = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) fResult = result.stdout.rstrip('\n') print(repr(result.stdout.rstrip('\n'))) command = 'uname -r' - ffResult = subprocess.run(command, capture_output=True, text=True, shell=True) + ffResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) ffResult = ffResult.stdout.rstrip('\n') command = f"apt-get install linux-modules-extra-{ffResult}" @@ -3707,7 +3707,7 @@ pm.max_spare_servers = 3 ### command = f'modprobe quota_v1 -S {ffResult}' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -3719,7 +3719,7 @@ pm.max_spare_servers = 3 return 0 command = f'modprobe quota_v2 -S {ffResult}' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -3731,7 +3731,7 @@ pm.max_spare_servers = 3 return 0 command = f'quotacheck -ugm /' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak' @@ -3743,7 +3743,7 @@ pm.max_spare_servers = 3 return 0 command = f'quotaon -v /' - mResult = subprocess.run(command, capture_output=True, text=True, shell=True) + mResult = subprocess.run(command, capture_output=True, universal_newlines=True, shell=True) if mResult.returncode != 0: fstab_path = '/etc/fstab' backup_path = fstab_path + '.bak'